二值影象,顧名思義就是影象的亮度值只有兩個狀態:黑(0)和白(255)。二值影象在影象分析與識別中有著舉足輕重的地位,因為其模式簡單,對畫素在空間上的關係有著極強的表現力。在實際應用中,很多影象的分析最終都轉換為二值影象的分析,比如:醫學影象分析、前景檢測、字元識別,形狀識別。二值化+數學形態學能解決很多計算機識別工程中目標提取的問題。
二值影象分析最重要的方法就是連通區域標記,它是所有二值影象分析的基礎,它通過對二值影象中白色畫素(目標)的標記,讓每個單獨的連通區域形成乙個被標識的塊,進一步的我們就可以獲取這些塊的輪廓、外接矩形、質心、不變矩等幾何引數。
在我們討論連通區域標記的演算法之前,我們先要明確什麼是連通區域,怎樣的畫素鄰接關係構成連通。在影象中,最小的單位是畫素,每個畫素周圍有8個鄰接畫素,常見的鄰接關係有2種:4鄰接與8鄰接。4鄰接一共4個點,即上下左右,如下左圖所示。8鄰接的點一共有8個,包括了對角線位置的點,如下右圖所示。
如果畫素點a與b鄰接,我們稱a與b連通,於是我們不加證明的有如下的結論:
如果a與b連通,b與c連通,則a與c連通。
在視覺上看來,彼此連通的點形成了乙個區域,而不連通的點形成了不同的區域。這樣的乙個所有的點彼此連通點構成的集合,我們稱為乙個連通區域。
下面這符圖中,如果考慮4鄰接,則有3個連通區域;如果考慮8鄰接,則有2個連通區域。(注:影象是被放大的效果,影象正方形實際只有4個畫素)。
連通區域標記演算法有很多種,有的演算法可以一次遍歷影象完成標記,有的則需要2次或更多次遍歷影象。這也就造成了不同的演算法時間效率的差別,在這裡我們介紹2種演算法。
第一種演算法是現在matlab中連通區域標記函式bwlabel中使的演算法,它一次遍歷影象,並記下每一行(或列)中連續的團(run)和標記的等價對,然後通過等價對對原來的影象進行重新標記,這個演算法是目前我嘗試的幾個中效率最高的乙個,但是演算法裡用到了稀疏矩陣與dulmage-mendelsohn分解演算法用來消除等價對,這部分原理比較麻煩,所以本文裡將不介紹這個分解演算法,取而代這的用圖的深度優先遍歷來替換等價對。
第二種演算法是現在開源庫cvblob中使用的標記演算法,它通過定位連通區域的內外輪廓來標記整個影象,這個演算法的核心是輪廓的搜尋演算法,這個我們將在文章中詳細介紹。這個演算法相比與第一種方法效率上要低一些,但是在連通區域個數在100以內時,兩者幾乎無差別,當連通區域個數到了103103數量級時,上面的演算法會比該演算法快10倍以上。
連通域標記方法
這裡列舉二值影象連通域標記演算法包括直接掃瞄標記演算法和二值影象連通域標記快速演算法 一 直接掃瞄標記演算法把連續區域作同乙個標記,常見的四鄰域標記演算法和八鄰域標記演算法。1 四鄰域標記演算法 1 判斷此點四鄰域中的最左,最上有沒有點,如果都沒有點,則表示乙個新的區域的開始。2 如果此點四鄰域中的...
連通域標記 實現硬幣自動計件
在自動計算影象中有幾枚硬幣的任務中,分離出前景和背景後是否就可以馬上實現自動計件,如果可以,如何實現?如果不可以,為什麼?答案是否定的。二值化之後我們的得到的只是前景總畫素的多少,並不知道哪些畫素屬於同一枚硬幣。想要實現自動計件功能還需要用到連通域標記的知識。連通域標記的方法這裡我們使用種子填充法 ...
連通域求解
影象處理中連通域指由前景相同畫素,並且相同畫素鄰接的畫素組成的域。影象處理中一般都是對二值影象 1白色,0為黑色,一般前景為0黑色 做連通域分析。連通域分析指把連通域找出來並且標記出來。連通域標記方法 1 兩次遍歷實現 2 深度優先搜尋遍歷 1.第一次遍歷 如果當前元素為0則賦值乙個label,le...