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

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

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

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

     骨架,能夠理解爲圖象的中軸,以下面的字母H,白色的線即爲起中軸,該中軸也能夠稱做H的骨架。blog

image
好的細化算法必定要知足下面幾個條件:
教程


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


依據是否使用迭代運算能夠分爲兩類:
非迭代算法:一次即產生骨架,如基於距離變換的方法,遊程編碼細化等。
迭代算法:即重複刪除圖像邊緣知足必定條件的像素,最終獲得單像素寬帶骨架。索引


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

 

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

 

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

索引表細化算法:通過預處理後獲得待細化的圖像是0、1二值圖像。像素值爲1的是須要細化的部分,像素值爲0的是背景區域。基於索引表的算法就是依據必定的判斷依據,所作出的一張表,而後根據要細化的點的八個鄰域的狀況查詢,若表中元素是1,若表中元素是1,則刪除該點(改成背景),如果0則保留。由於一個像素的8個鄰域共有256中可能狀況,所以,索引表的大小通常爲256,索引表細化算法速度很快。原理

相關文章
相關標籤/搜索