Contents ...
udn網路城邦
你相信嗎?侵蝕與膨脹演算法我幾乎從來就沒用過!
2022/04/01 08:16
瀏覽1,952
迴響0
推薦12
引用0

老實說,如上面的那個有框框的2字,辨識起來是挺麻煩的!九成的機率當你二值化之後2與它的框框是會部分沾連的!拿這個連體嬰去比對只有2字形狀的字模當然會符合度很差,最終你可能會得到087之類的奇怪答案!

很有趣的一個話題是:多數傳統OCR的學習者,至此都會直覺地想到侵蝕演算法?只要剝掉它一兩層皮,框框不就清除掉了?但是根據我多年的經驗,我在實務上幾乎完全沒用過這種剝皮式的侵蝕演算法,相對的膨脹演算法也是一次都沒用過!不是我不會用,而是沒有一次試過後發現好用,總是有很難控制的副作用。

譬如上面的例子直接用簡單的侵蝕,結果是框框除掉之後,連那個2字的筆劃也變細到難以正確比對字模了!甚至會斷掉破碎?你必須只能從整個目標的「外圍」做侵蝕,裡面的筆劃即使是黑白邊界也不能侵蝕才行!但何謂外圍?這也是個蠻困難,且常有例外的邏輯,譬如拍攝出來的影像那個方框有時會有缺口的!

總之,如果你堅持以影像二值化之後的黑白邊界點做運算的基本參考點,怎麼作都會常常出現違反物理觀念認知的奇怪結果!所以,既然我們在意的是最終的處理結果必須合乎我們的物理常識認知,那麼你的演算法就必須以物理常識認知為規畫設計的基礎!只考慮影像資訊的演算法總是會錯誤百出的!

那我是怎麼作的呢?以物理的觀點,不管框框粗細或有沒有缺口,如果我沿著X方向計算這個連體嬰目標的每個X位置的總黑點數目,會得到這個數列:

9 28 27 10 8 10 14 19 21 22 23 20 21 22 26 24 22 16 12 11 27 33 15

很明顯的我找到兩邊邊框的X位置了,黑點最多的X應該就是邊框了,不是嗎?數學上說,就是此數列兩端附近區域的局部最高點,在這兩個高點以內的範圍就是我要的2字範圍了!上下邊界也可以用一樣的邏輯找到邊框,直接切開就會變成下圖這個樣子!雖不中亦不遠矣,就幾乎不會認錯字了!這其實也隱含著統計學的概念,我是看資料趨勢,而非單一點的資料屬性作決策的!當然穩定性會比較好。

這就是我常說的:影像辨識要達到真實世界的目的需求,就一定不能只參考與思考影像本身的資訊,所以我才會堅持只做客製化特定目的的影像辨識專案,每一個辨識核心都有明確的範圍與目標,我也必須藉此做出最佳化辨識的針對性演算法,唯有這樣才可能達到客戶實務需求需要的極高辨識率!

所以影像辨識不只是影像處理而已,必須是一個根據物理事實與辨識目的的綜合性的工程!處理影像資訊的數學方法們,其實只是一部份的必要基礎工具,常常演算法開發的主導者是物理現象,而不只是影像資訊!而且以個別畫素為演算決策參考的話,其實是相當不穩定的!常常運用統計概念,讓決策穩定也是很重要的!

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

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