阮一峰的网络日志 |
Posted: 26 Nov 2011 05:28 AM PST 程序员Scott MacDonald做了一个很有趣的项目----骰子作画。 他用黑底白点的骰子。 模拟出一张人像照片。 把图像放大,就可以看得更清楚。 他一共用了2500多颗骰子。 最后的成品就是这样。 任何一张图片都可以用骰子模拟出来,算法非常简单:将图片分成若干个区域,每个区域经过计算以后,用1-6之间的一个整数表示,代表骰子的一个面。这种将连续的量转化成不连续的整数的算法,属于vector quantization(矢量量化)的一个应用。 具体来说, 第一步,将图片分割成16像素x16像素的小方块。
第二步,每个小方块内共有256个像素,将每个像素点的灰度值,存入一个数组。
第三步,计算该数组的平均值,并用1-6之间的一个整数来表示。
整数1,表示骰子朝上的一面有1个白点;整数2,表示有2个白点;以此类推。白点越少,表示这个区域越接近全黑;白点越多,表示越接近全白。根据白点值,将骰子依次放入,就能模拟出全图。 这种算法早在1981年就有人提出,当时用的是1~9个白点的多米诺骨牌。 如果区域划分得越小,模拟图的生成效果就越好。 此外,不用编程,使用Photoshop也可以得到类似效果。 (完) 文档信息
|
You are subscribed to email updates from 阮一峰的网络日志 To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google Inc., 20 West Kinzie, Chicago IL USA 60610 |