Python實戰案例,PIL模組學習,遺傳演算法擬合影象
前言:
利用遺傳演算法擬合影象,於是過來分享一波。
讓我們愉快地開始吧~~~
開發工具
Python版本:3.6.4
相關模組:
PIL模組;
以及一些python自帶的模組。
環境搭建
安裝Python並新增到環境變數,pip安裝需要的相關模組即可。
參考資料
50個半透明多邊形重現蒙娜麗莎:
http://alteredqualia.com/visualization/evolve/
科學松鼠會《遺傳演算法》:
http://songshuhui.net/archives/10462
原理簡介
改編參考資料中的故事:
很久很久以前,海岸邊生活著一群扇貝,它們衣食不愁,有房有車。但好景不長,人類的到來打破了它們原本無憂無慮的生活。
每隔一段時間,人類就會挖走它們之中的一部分。不過,這些人不喜歡貝殼花紋長得像哈士奇的扇貝,所以他們總是選擇那些長得比較不像哈士奇的扇貝。
這種狀況持續了好幾萬年。這個時候,神奇的事情發生了:所有的扇貝貝殼上都印著哈士奇!
遺傳演算法——元啟發式演算法之一:
首先致敬一波達爾文?
簡單而言,遺傳演算法模擬了大自然中種群在選擇壓力下的演化過程,從而得到了對應問題的近似解。
具體而言,就是生物體長什麼樣子很大程度上是由染色體上的基因決定的。如果我們利用n個多邊形組成一隻哈士奇的話,我們同樣也可以認為哈士奇長什麼樣子由這些多邊形的具體位置和顏色決定,也就是說這些多邊形可以被看作是哈士奇的“基因”。
當然,需要注意的是,這個演算法得到的只是問題的近似解而非精確解,且存在基因過早同一化等問題。
演算法設計:
遺傳演算法只是一個框架,對於具體問題當然需要設計具體的演算法。
時間關係,本次演算法設計一切從簡。
Step1:
隨機生成100幅與原始影象大小相同的噪聲影象。
Step2:
種群變異(變異概率50%),即在100幅生成的影象上加一些隨機噪聲。
Step3:
計算與原始影象的差異度。計算公式為:
Step4:
保留與原始影象差異度較低的生成影象,並讓它們交叉融合生成新的影象以使得種群的數量保持不變。
Step5:
迴圈執行Step2-4。
具體實現過程詳見相關檔案中的原始碼。
使用演示
在cmd視窗執行Genetic.py
部分引數解釋:
以chrome瀏覽器圖示(大小為30×30)為例:
【影象較大的話時間花銷比較大T_T】
可以看到還是有那麼點意思的。
**有興趣的同學可以多跑幾輪,看看幾萬輪之後的結果是什麼
更多
參考資料中的第一個連結是一個遺傳演算法擬合蒙娜麗莎的線上測試系統。
其最終的結果為:
當然還有其他圖案的:
文章到這裡就結束了,感謝你的觀看,關注我每天分享Python實戰案例系列,下篇文章分享OpenCV實現貓臉檢測。
為了感謝讀者們,我想把我最近收藏的一些程式設計乾貨分享給大家,回饋每一個讀者,希望能幫到你們。
乾貨主要有:
① 2000多本Python電子書(主流和經典的書籍應該都有了)
② Python標準庫資料(最全中文版)
③ 專案原始碼(四五十個有趣且經典的練手專案及原始碼)
④ Python基礎入門、爬蟲、web開發、大資料分析方面的視訊(適合小白學習)
⑤ Python學習路線圖(告別不入流的學習)
All done~完整原始碼+乾貨詳見個人簡介或者私信獲取相關檔案。。