Contents ...
udn網路城邦
搶救模糊大作戰
2017/09/07 06:15
瀏覽707
迴響0
推薦7
引用0

最近在車牌辨識的演算法上又有了重大的突破,事實上就是昨天而已!有很長一段時間,車牌上字元掉漆略有磨損的車牌我就無法辨識,感覺有如芒刺在背!因為人眼可以細看掉漆處的殘跡,睜大眼睛看就不難辨識出正確的字,但是我很難跟一般人解釋,為什麼我的程式(其實是大多數的影像辨識程式)卻無法辨識?現在如下這麼破爛的車牌我也能辨識了!感覺如釋重負。

圖一、磨損車牌成功辨識案例

我是老師,我不介意稍稍洩漏商業機密,跟大家解釋一下我的演算法思考的方向。影像辨識必然要經過一個二值化的過程,讓影像變成非黑即白的色塊,對於一般字元來說正常的門檻值,當然會讓已經掉漆的部分看起來是背景的白色!如下圖二畫紅圈的部分掉漆了,你用簡單的二分法就會辨識成圖三,但是改變(提高)一下二值化門檻值,就會成可以正確辨識的圖四。

圖二、掉漆的0

圖三、門檻值128的結果

圖四、門檻值156的結果

關鍵在於原圖真正的背景亮度灰階約170+,字元正常黑漆部分約20+,掉漆部分則是120+。如果你用比較正常的中值就是全圖亮度的平均等方式計算門檻值,很顯然的你會將120幾亮度的掉漆部分當成背景,字元就缺個大洞了!

但是如果你能正確抓到掉漆區的亮度呢?如果你可以經過某些計算,就像我上面用PhotoShop軟體一樣,「看出」掉漆區的亮度大約是120幾,那我用156當門檻值,掉漆區(<156)也可以變成正常字元應有的黑色了!人眼所以能辨識破損字元,主要就是看這些「 b="">痕跡」的!如果我可以想出演算法知道掉漆區的概略亮度,我就可以模擬人眼的辨識了!

很有趣的,我的靈感來自最近繼續在作的護照辨識研究,各國護照中有些關鍵文字資訊是共通的,也是我們要辨識的目標,但是各國護照背後的紋路背景影像卻不盡相同,我們常常需要找到辨識區內的「三種」亮度區,最暗的當然是要辨識的字元,最亮的是乾淨的背景,中間的就是背景上的花紋圖案。我們必須抓得很精準才能將背景浮水印清除乾淨,好看清楚字元。

圖五、護照影像,如何去背?

在辨識車牌的狀況,我們變成希望中間顏色的掉漆部分也被視為字元的一部份,類似的演算法就可以解救我的車牌掉漆了!至於如何分析這三個顏色區塊?細節就暫時保留了,聰明的人應該可以立即想出好幾種分析方式。就讓我暫時在技術上領先一點點吧!哈哈!

其實我已經在此給有意學習影像辨識的人一個極佳的提示!就是做專業的影像辨識並不是用演算法開始思考的,而是實際的問題,將問題分析清楚之後才能正確地找到藥方!如果你是一般人不是醫生,當然希望有種萬靈丹,甚麼病都一吃就好!頭痛就吃「頭痛藥」,不想知道是甚麼原因導致頭痛。但如果你想當醫生,就必須弄清楚病因,然後對症下藥了。

所以如果你只想依賴現成的影像辨識LIB,如OpenCV或機器學習等技術來治病,最後就會很像沒讀過醫學院,僅靠膚淺表象的「經驗」來工作的密醫了!你只會開藥,但是不會「看病」!還是先把基本的物理、數學與程式設計學好再說吧!

有誰推薦more
全站分類:心情隨筆 工作職場
自訂分類:教育學習

限會員,要發表迴響,請先登入