單次掃描完成二值圖連通區域標記


 

連通區域標記算法

 

 

        二值圖像的連通區域標記過程:從僅由1像素(前景點)0像素(背景點)組成的一幅點陣圖像中,將相互鄰接的1值像素組合成區域,並用邊界信息來描述每個連通區域

傳統的連通區域標記方法通常要對二值圖像執行兩次掃描。第一次掃描通過逐行逐列掃描像素。判斷像素之間的相鄰關系,對屬於同一連通區域的像素賦予相同的連通標號,實現連通標識。這種逐行逐列的次序掃描的結果,通常會產生同一像素點被重復標記的現象,同一連通區域的不同子區域被賦予了不同的標記號。因此,需要執行第二次掃描來消除重復的標記,合並屬於同一連通區域但是具有不同標記號的子區域。

傳統方法的效率比較低,尤其是在重復性標記發生率高的情況下。本文方法受“並查集”(Union-Find Set)思想的啟發,設計了一種高效的算法,該算法只需要一次掃描便能完成二值圖像的連通區域標記過程。

等價類和並查集

UnionFind(合並查找)集可以實現等價類描述。假設一組元素,其中元素分為等價類。等價類滿足以下性質:

(1)每一個元素只能屬於一個等價類;

(2)等價類的同屬關系具有傳遞性。

對於第二個性質,設頂點vivk屬於同一等價類,頂點vkvr屬於同一等價類,則頂vivkvr都屬於同一等價類。

這里我們關心等價類的合並(Union)和任意元素所屬等價類名稱的返回(Find)這兩個操作。定義等價類的名稱為類中某個特定的元素,由於每個元素只可能屬於一個等價類,所以每個等價類的名稱一定是唯一的,我們稱之為這個等價類的根(Root)。

除等價類根以外的每個元素都有一個父節點元素(表示為Parent),同一等價類中元素(除根外)的根節點相同,根的父節點標注為-1。合並兩個等價類時,可以分別指定兩個等價類中任意元素與,首先返回這兩個等價類的根, ,然后重置其中一個根節點的父節點,如Parent,將對應的等價類中元素合並至對應的等價類中。

如圖3-7所示為以和為根節點的兩個等價類,分別指定等價類中和,合並這兩個等價類Union()如圖(a)所示。首先分別尋找(Find)到和的根節點和,並對集合的結構做調整,從而降低樹結構的深度,提高尋找節點的效率,如圖(b)所示;最后將的根節點重置為,完成兩個集合的合並,如圖(c)所示。

 

 

 

圖中x表示節點為,其父節點y

 

連通區域標記算法描述

 

    本文中借助並查集設計二值圖的連通區域標記算法,其中, 。初始化階段,將二值圖每個像素點視為單獨的連通區域,並分別對應一個等價類,形成等價類,。例如,位置對應等價類,該等價類對應連通區域的邊界信息為:
    (top, down, left, right)=(y, y, x, x).
經過一次掃描,實現二值圖中連通區域標記的算法流程如下:
  
    Step1 初始化變量 i=1;
    Step2 尋找二值圖中第一個位於背景中的像素位置,對應等價類記為背景等價類;
    Step3 遍歷第個位置;
    Step4 若位於背景中,則將其對應等價類與背景等價類歸並,跳轉至Step9;否則,繼續Step5;
    Step5 若位於前景中,則檢測其左上、正上、右上和正左方四個位置,分別對應等價類的標號:,對應等價類,選擇其中位於前景中的位置對應的等價類,組成集合:
    
    Step6 若為空,則跳至Step9;否則繼續Step7;
    Step7 將中等價類歸並為一個等價類,對應連通區域的邊界信息:
    Step8 將對應等價類與歸並,利用與Step7中相同的方法更新歸並后的等價類對應的連通區域的邊界信息;
    Step9 i=i+1,若i<=k,則跳轉至Step3,否則算法結束。

      除了 背景等價類外,最終留下的等價類對應二值圖中的連通區域。算法流程中Step5中對當前位置的四個鄰點對應的連通區域進行合並。例如下圖(a, b),當前位置的左上點和正左點同屬於等價類,對應區域邊界信息為;正上點屬於背景等價類;右上點屬於等價類,對應邊界信息為。首先由位於前景中的等價類組成集合,歸並中等價類和等價類,形成等價類,然后歸並當前位置對應的等價類與,並等價類對應邊界區域信息更新。

     從流程圖中可以發現,算法通過一次掃描便完成了連通區域標記過程。在合並像素點與其相鄰區域時該算法只關心四個相鄰點的所在的區域,這極大地提高了算法執行效率,算法復雜度為線性的。

 


免責聲明!

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



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