連通分量標定(Connected Component Labeling)是圖論中的一個算法,它會給連通的象素點一個唯一的標號。
計算機視覺中的連通分量標定通常用來處理二值圖像,但是灰度、彩色甚至更高維度的圖像也可以套用。在圖像識別系統和人機互動界面的套用中,連通分量分析可以提供大量的信息。
概述
利用相關的輸入數據通常可以構建一個包含結點和邊的圖。節點包含了用於做比較的信息,而邊則蘊含了鄰域信息。算法會遍歷整張圖,根據連線性給節點以標號。連結性可以是圖像中的 4-鄰域或 8-鄰域的連線。
標定算法結束的時候,圖就被劃分為若干子圖,其中原始信息可以從中恢復並處理。
算法
這裡的算法可以推廣到任意的維度,但是時間與空間複雜度會隨之增加。
兩步法
兩步法算法較容易理解與實現,它可以處理二值圖像。算法會對圖像進行兩次掃描:第一次記錄等價性同時設定臨時標號,第二次則把臨時標號替換為等價類的標號。
第一次掃描:
1. 按照先列後行的順序遍歷圖像每一個像素
2. 如果像素不是背景像素
2.1 收集鄰域像素的標號
2.2 如果鄰域像素沒有標號,為這個像素增加一個唯一的標號,算法繼續
2.3 否則把當前像素的標號設為所有鄰域像素的標號中最小的那個
2.4 記錄鄰域像素標號的等價關係
第二次掃描:1. 按照先列後行的順序依次遍歷每一個像素
2. 如果像素不是背景像素
1. 把當前像素的標號重新設定為其標號等價類中最小標號
這裡的背景是一個用來區分顯著像素的分類信息。如果套用不需要背景,算法會把背景當作另一個區域來處理。
二步法的一些步驟可以合併以提高效率,甚至只需要一遍掃描即可。還有一些多步掃描的算法,時間複雜度線形於像素的個數。二十世紀九十年代,有很多人研究了並行的連通分量算法。
種子填充算法
另一種較為常見算法是種子填充算法,它利用遞歸的方法進行連通區域的搜尋。
算法的框架如下:
1. 順序遍歷圖中的每個象素
2. 如果當前像素沒有指定標號
2.1 用當前像素作為種子,給所有與該像素連線的像素點一個唯一的標號
2.2 繼續處理下一個像素
其中種子填充算法的步驟為(遞歸的):
1. 設當前填充的像素點為 P,標號為 L
2. 設定 P 的標號為 L
3. 遍歷所有 P 的鄰域像素
3.1 如果該鄰域像素(計為 P')還沒有標號,遞歸的調用種子填充算法,填充像素為 P',標號為 L