菊花綻放:微信是如何識別小程序碼的?
【小程序碼-設計篇】菊花綻放 一文中介紹了小程序碼的設計過程,本文繼續分享我們在小程序碼識別上面的一些心得,權當拋磚引玉,歡迎有共同興趣的同事一起討論。
識別之前,我們需要對照片做什麼處理
引擎其實並不關心這朵菊花是什麼顏色,因此,我們把圖片簡化,處理成灰度圖。
二值化可以讓引擎做的事情更簡單,因此再將灰度圖處理成點陣圖。
如何在黑白圖中快速找到菊花的位置
細心的朋友肯定注意到,每一朵菊花都有兩個共同點:
3 個圓形的「牛眼」(定位點)
右下角的「小程序 LOGO」
以上是小程序碼的定位信息,準確的定位是識別的第一步。
如何快速找出所有可能的定位點
在設計這個菊花碼時,我們是按照 0.8 : 1.2 : 1 : 1.2 : 0.8 繪製定位點的。
為什麼不採用 1:1:1:1:1 的比例?因為前者比例比較貼近黃金比例,更符合人類審美需求。(下圖右為 1:1:1:1:1)
基於這個特性,使用水平,垂直,45 度角等三個方向的掃描線掃描全圖。如果三個方向的黑白像素都接近這個比例,顯然它極可能是一個定位點。
怎麼定位「小程序 LOGO」
最簡單的方法,根據 3 個定位點的位置,預估小程序 LOGO 的中心位置(平行四邊形)
在很多扭曲的情況下,上述方法仍有較大偏差。因此我們提出了一種改進方法:基於 LOGO 為圓形的特性,將預估的中心點修正到圓心位置
具體校正方法如下:
GIF/32K
拍攝出來的碼這麼「歪」,能否進行「擺正」
由於上文中,我們已經找到了碼在圖像中的位置,但由於這個碼可能已經被旋轉,扭曲,所以,我們需要再做一次矩陣變換(透視變換),將其變換到直角坐標系。變換後的碼,已經比較易於被機器解讀了。
怎麼讀碼
二維碼怎麼讀碼
點擊展開全文
※4種JavaScript的內存泄露及避免方法
※如何在沒有實際項目經驗的情況下找到工作
※JavaScript 學者必看「new」
※程序員才有的表情包,拿走不謝!
※細數程序員七大恨
TAG:JavaScript |