網路城邦
上一篇 回創作列表 下一篇  字體:
解析度太高也是問題
2016/10/22 04:18:31瀏覽1795|回應0|推薦10

這是我近日研究的議題之一,要在解析度很高的單據掃描影像上,一一找到所有條碼,並切割為子影像輸出。前幾天已經寫了一篇相關議題的文章,今天繼續談另一個技術性的問題。

很微妙的!大概才幾年前,作影像辨識的人只會擔心解析度太低,因為巧婦難為無米之炊嘛!影像包含的資訊如果不夠時,空有一肚子演算法的大學問還是無用武之地。或者必須想出很多「猜測」式的演算法,美其名曰「模糊辨識」,但是那些努力有如管窺蠡測,作得很辛苦結果卻依然不好。如果換個攝影機就可以讓影像清楚,誰會想作模糊辨識呢?

現在呢?幾百萬畫素的影像非常容易取得,解析度夠了,卻開始面臨另一個大問題,就是計算時間可能會太長!譬如上圖有近八百萬的畫素,而且必須這麼高!因為一維條碼的線條非常細,如果沒這麼高的解析度,最終會難以判讀那些條碼的值。一維條碼其實是利用線的粗細與間距差異來組織資訊的,如果粗細差異不夠明顯就會難以辨識。

我的工作不是解析條碼的內容,而是在全圖中找出條碼的位置。所以要我來研究,是因為客戶使用既有軟體時,常常會有漏掉某些條碼的問題,包括條碼數太多或某些條碼比較黯淡時。我必須想出比那些軟體更好的演算法,讓抓條碼的動作毫無遺漏。但是我自己多加了一個要求,就是我的搜尋程式必須很快!快到讓使用者感覺上不需要等待「影像處理的時間」,就像我的車牌辨識,百萬畫素的影像只需要約0.2秒一樣,眨個眼就辨識好了!

其實我相信原來開發那些軟體的工程師也一定能作到「一個都不少」!只要將辨識參數門檻調低即可。但是當初他們為何不直接這麼作?這樣就不會讓客戶有抱怨的空間,我也不會有這項工作了!原因在我看起來很明顯,降低辨識門檻的副作用就是「雜訊」會增加,必須有更多更聰明的演算法清除雜訊,否則一大堆不是條碼的文字行就會被誤認為條碼,那很難看的!

但是如果跑的清除雜訊程式太多,或嘗試錯誤硬上的辨識次數太多,最終軟體會慢得很可怕!譬如影像輸入後要等個兩三秒鐘「找條碼」的話,使用者就會很煩了!超過五秒大概就會想砸機器了!因為用人眼去找也不必那麼久嘛!不是嗎?但是我知道用傳統學校教的辨識演算法,老老實實的處理八百萬畫素的影像,除非你使用價格幾百萬的超級電腦,一般規格電腦就是會需要好幾秒鐘!

但是大家可以看看我的研究結果,上圖是我用辦公室的I7等級電腦跑程式的結果,顯示的辨識時間是170毫秒,也就是0.17秒!這裡面還包括讀入圖檔與切割子影像的時間,真的是一眨眼,眼睛都還沒開,八個條碼就全部找到,還切好成八個子影像,等待下一步的解碼辨識了!相信越內行的人會看得越驚奇!這可是八百萬畫素的影像欸!任何搜尋掃描(數位濾波)的動作,全圖掃一趟都會花光這170毫秒的!

這裡面的技術精神其實也很單純!就是模仿一般人的大腦都會作的摘要式判斷,我們眼中的畫面其實永遠是很複雜的!如果看到的每一個細節都要一一處理,我們的大腦不是整天發燒過熱,就是直接當機(昏倒)!腦科專家都說了,大腦的感覺區域有七成是在處理視覺資訊,如果大腦沒有極佳的摘要處理「程式」,真的是張開眼睛幾秒鐘之後就會「當機」了!

當然如何「摘要」又不會「錯過重點」是最難的部分!「不錯過重點」的部分就是預設過濾條件!譬如我們看到人群就會立刻祭出「人臉辨識系統」,此時一輛卡車開進視野都會被我們忽略過去視而不見!我要找條碼那就是拉出某個程式找「看起來像條碼」的東西,我的工作就是用數學明確定義一般人的「直覺」都能作到的「看起來很像條碼」的判斷能力!

至於「摘要」的數學實作就有點微妙了!我們必須先讓幾百萬畫素的影像變成可能只有幾千甚至幾百畫素的簡圖!這樣任何演算法跑起來都會很快。但是問題來了,如果只是簡單的降階解析度,你可以試試看用小畫家等影像軟體重新取樣,那些條碼一定會看不見的!比文字區更快變成一坨漿糊,你也很難判斷那坨漿糊是文字還是條碼。所以「摘要」的同時也必須兼顧「細節」!很難吧?

不好意思,再說下去就是我暫時不願意公開的業務機密了!但是我相信這些原則說明已經可以讓大家窺探到不少影像辨識的奧妙。我認為最有趣的部份是:其實我一直都是在「模仿一般人的直覺」在想演算法寫程式的!我極少參考影像辨識相關的書籍、論文或網路資訊,僅僅是模仿一般人「怎麼看東西?」的過程就可以讓我深入這個領域,深到可以被業界視為影像辨識專家了!

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

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