前面一篇教程中,咱們實現了Zhang的快速並行細化算法,從算法原理上,咱們能夠知道,算法是基於像素8鄰域的形狀來決定是否刪除當前像素。還有不少與此算法類似的細化算法,只是判斷的條件不同。在綜述文章, Thinning Methodologies-A Comprehensive Survey中描述了各類細化算法的實現原理,有興趣能夠閱讀一下。算法
下面看看圖像細化的定義以及細化算法的分類:編碼
圖像細化(Image Thinning),通常指二值圖像的骨架化(Image Skeletonization) 的一種操做運算。
所謂的細化就是通過一層層的剝離,從原來的圖中去掉一些點(一般是輪廓上的點),但仍要保持原來的形狀,直到獲得圖像的骨架。3d
骨架,能夠理解爲圖象的中軸,以下面的字母H,白色的線即爲起中軸,該中軸也能夠稱做H的骨架。blog
依據是否使用迭代運算能夠分爲兩類:
非迭代算法:一次即產生骨架,如基於距離變換的方法,遊程編碼細化等。
迭代算法:即重複刪除圖像邊緣知足必定條件的像素,最終獲得單像素寬帶骨架。索引
迭代方法依據其檢查像素的方法又能夠再分紅兩類:
串行算法:是否刪除像素在每次迭代的執行中是固定順序的,它不只取決於前次迭代的結果,也取決於本次迭代中已處理過像素點分佈狀況。
並行算法:像素點刪除與否與像素值圖像中的順序無關,僅取決於前次迭代的結果。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,索引表細化算法速度很快。原理