OpenCV學習(14) 細化算法(2)


      前面一篇教程中,我們實現了Zhang的快速並行細化算法,從算法原理上,我們可以知道,算法是基於像素8鄰域的形狀來決定是否刪除當前像素。還有很多與此算法相似的細化算法,只是判斷的條件不一樣。在綜述文章, Thinning Methodologies-A Comprehensive Survey中描述了各種細化算法的實現原理,有興趣可以閱讀一下。

      下面看看圖像細化的定義以及細化算法的分類:

圖像細化(Image Thinning),一般指二值圖像的骨架化(Image Skeletonization) 的一種操作運算
     所謂的細化就是經過一層層的剝離,從原來的圖中去掉一些點(通常是輪廓上的點),但仍要保持原來的形狀,直到得到圖像的骨架。

     骨架,可以理解為圖象的中軸,如下面的字母H,白色的線即為起中軸,該中軸也可以稱作H的骨架。

image
好的細化算法一定要滿足下面幾個條件:


  • 收斂性保證細化后細線的連通性保持原圖的基本形狀減少筆畫相交處的畸變細化結果是原圖像的中心線
    細化的快速性和迭代次數少。


依據是否使用迭代運算可以分為兩類:
非迭代算法:一次即產生骨架,如基於距離變換的方法,游程編碼細化等。
迭代算法:即重復刪除圖像邊緣滿足一定條件的像素,最終得到單像素寬帶骨架。


迭代方法依據其檢查像素的方法又可以再分成兩類:
串行算法:是否刪除像素在每次迭代的執行中是固定順序的,它不僅取決於前次迭代的結果,也取決於本次迭代中已處理過像素點分布情況。
並行算法:像素點刪除與否與像素值圖像中的順序無關,僅取決於前次迭代的結果。

 

常用的迭代算法包括:Hilditch、Pavlidis、Rosenfeld細化算法以及基於索引表查詢的細化算法等等。

 

Hilditch算法使用於二值圖像,該算法是並行串行結合的算法。
Pavlidis算法通過並行和串行混合處理來實現,用位運算進行特定模式的匹配,所得的骨架是8連接的,用於0-1二值圖像。
Rosenfeld算法是一種並行細化算法,所得的骨架形態是8-連接的,使用於0-1二值圖像。

索引表細化算法:經過預處理后得到待細化的圖像是0、1二值圖像。像素值為1的是需要細化的部分,像素值為0的是背景區域。基於索引表的算法就是依據一定的判斷依據,所做出的一張表,然后根據要細化的點的八個鄰域的情況查詢,若表中元素是1,若表中元素是1,則刪除該點(改為背景),若是0則保留。因為一個像素的8個鄰域共有256中可能情況,因此,索引表的大小一般為256,索引表細化算法速度很快。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM