上一篇博客介紹了實現的原理以及自己的使用JS實現的版本,其實在一開始自己并不是使用JS使用,而使用MATLAB,最后實現的效果不是很好(運行時間還是相對較長),但是自己還是從中學到了諸如MATLAB程序優化等方面的知識。
一開始使用了Matlab,因為感覺MATLAB比較擅長矩陣運行,可能在圖像的操作上有優勢,但是用起來后傻眼了,MATLAB可以將多邊形繪制到figure,但是沒有辦法取得繪制出來的圖像的像素信息,這樣子的話我就沒有辦法和原圖像進行比較,已確定當前的適應度值是多少,程序也就沒有辦法再進行下去。
當時想到的解決辦法就是利用矩陣,自己在矩陣上畫圖,這樣就復雜了很多: 1. 首先先要要根據兩個點,在矩陣上連接成一條直線(這兒要用到一點圖形學上的方法); 2. 然后將各條線組合成一個多邊形,并將多邊形圍成的區域著色(這一步還好,不用在去學習圖形學的知識了(^_^),直接使用imfill
函數就好了); 3. 最后一步,要將各個多邊形圖像層疊起來,形成一個圖像,這里要理解alpha(透明度)的概念,并理解有透明度的圖像在疊加時像素的計算方式(其中f指前景,b指背景,α為alpha值,參見維基百科):
這樣才算基本完成了繪制圖像( ̄o ̄) . z Z,而其他地方的邏輯基本跟JS版本的相同。
代碼地址 github
未完待續
新聞熱點
疑難解答