網路城邦
上一篇 回創作列表 下一篇   字體:
混沌不見得不好!
2019/08/20 11:37:11瀏覽940|回應0|推薦12

有個莊子寓言如下:

我的車牌辨識核心研發了五六年,多數的演算流程都日新月異,跟當初的程式內容已經差異極大,但是其中卻有個骨董級的程序,怎麼研究都沒最初的設計更好更穩定,所以算是活化石了!前兩天開車時聽廣播聽到莊子講的這個故事,覺得很有趣,有些事情,即使是科技研發,也未必是新的就一定比較好。昨天才自爆一件自作聰明整死自己的糗事,今天再來介紹一下這個骨董程序。

要辨識上面的車牌,必然的程序是:灰階→二值化→輪廓化→建立目標→群組目標……等等。如下面幾張圖所示:

其中最關鍵的步驟就是畫出正確的字元組合的上下方切線!就是上圖中綠色的直線。一般的想法是:既然我都可以做到將字元一個一個挖出來了,要做它們的邊緣切線,那就找出每個目標的頂點(或底點),使用Least Square Method,算出最符合的直線就好了嘛!

但是真實世界不是這麼運作的,譬如上例,因為影像不夠清晰,字元2破碎了,顯得比實際的合理目標小,你按照上面六個目標的底部頂點作最佳直線,事實上是會切掉一部份其他目標的合理範圍的!各位有看到我的底線切得好整齊,好聰明嗎?如果只根據最後一張圖的資訊,我是無法切得這麼有智慧的!

或許你以為,既然平均誤差最小的直線可能會切掉部分目標,那就切最低的位置,以不切到任何目標為原則不就好了嗎?但是事實上,很多時候我們會希望能切掉一些目標!就是嘗試用這條切線切掉異常過大的目標,你要是取最低的目標底點做切線,做出來的投影也是錯的!

譬如上圖,幾乎無法避免的,P2可能會與下方的螺絲孔連成一氣,變成一個異常大的目標,我們此時當然希望程式可以聰明的選擇切在綠線的位置,而非紅線!但是我要告訴電腦的邏輯是甚麼?根據甚麼樣的數學演算結果,我才能讓程式知道要切在綠線?如果切在紅線就錯了!

其實當初我的技術經驗都還不太好時,就想著「一般人」是怎麼看出來應該切在哪裏的?還不就是估計字元區與其下的空白區「概略」位置嘛!概略甚麼?就是亮度差異嘛!字元區有字較黑,一離開字元區就沿路都比較亮,即使有一兩個螺絲釘干擾,也不會影響一般人的判斷的!

所以就是直接從灰階圖上找資料做計算,在概略的區域內找到那條上暗下亮的最佳線段了!細節算法就不多說了,總之就不是用已經簡化的黑白圖、輪廓圖或目標圖去算出來的!這有點像加工食品雖然好吃,但是常常缺少一些重要的營養素,被製作過程燒掉了嘛!此時找回原味,直接從灰階圖上建立演算法反而可以得到最穩定可靠的答案。

我又洩漏商業機密了!慢慢洩密到退休時就剛好通通技術都轉移到業界了!哈哈!沒關係的,覺得有用就盡量學去不會收錢的!我只是送條毛巾給你,真正想做點有用的東西出來,你還有得忙的!

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:http://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=128634332