程式設計師scott macdonald做了乙個很有趣的專案----骰子作畫。
他用黑底白點的骰子。
模擬出一張人像**。
把影象放大,就可以看得更清楚。
他一共用了2500多顆骰子。
最後的成品就是這樣。
任何一張都可以用骰子模擬出來,演算法非常簡單:將分成若干個區域,每個區域經過計算以後,用1-6之間的乙個整數表示,代表骰子的乙個面。這種將連續的量轉化成不連續的整數的演算法,屬於vector quantization(向量量化)的乙個應用。
具體來說,
第一步,將分割成16畫素x16畫素的小方塊。
第二步,每個小方塊內共有256個畫素,將每個畫素點的灰度值,存入乙個陣列。for (int i=0; i < (pic_width/16); ++i)
}
第三步,計算該陣列的平均值,並用1-6之間的乙個整數來表示。for (int k=0; k < patch.pixels.length; ++k)
int rgb2gray(int argb)
整數1,表示骰子朝上的一面有1個白點;整數2,表示有2個白點;以此類推。白點越少,表示這個區域越接近全黑;白點越多,表示越接近全白。根據白點值,將骰子依次放入,就能模擬出全圖。int dice_num = six_step_gray(mean(x));
int mean(int x)
m = m/x.length;
return int(m);
} int six_step_gray(int x)
這種演算法早在2023年就有人提出,當時用的是1~9個白點的多公尺諾骨牌。
如果區域劃分得越小,模擬圖的生成效果就越好。
此外,不用程式設計,使用photoshop也可以得到類似效果。
(完)
骰子作畫的演算法
程式設計師scott macdonald做了乙個很有趣的專案 骰子作畫。他用黑底白點的骰子。具體來說,第一步,將分割成16畫素x16畫素的小方塊。for int i 0 i pic width 16 i 整數1,表示骰子朝上的一面有1個白點 整數2,表示有2個白點 以此類推。白點越少,表示這個區域越...
Python實現骰子作畫演算法
在看到阮一峰的網路日誌中 骰子作畫的演算法 時,不經對其產生了濃厚的興趣,聯想到之前瀏覽到的程式設計師個性 注釋,發現裡面很多的注釋都可以用骰子作畫的 實現輸出,於是自己用python寫了乙份 翠花兒,上 from pil import image if name main img image.op...
使用骰子作畫
本文參考 阮一峰老師 骰子作畫的演算法 1計算灰度值方法 任何顏色都由紅 綠 藍三基色組成,假如原來某點的顏色為rgb r,g,b 那麼,我們可以通過下面幾種方法,將其轉換為灰度 1.浮點演算法 gray r 0.3 g 0.59 b 0.11 2.整數方法 gray r 30 g 59 b 11 ...