最優的階梯型邊緣檢測算法(canny邊緣檢測)
1.Canny邊緣檢測基本原理
(1)圖象邊緣檢測必須滿足兩個條件:一能有效地抑制噪聲;二必須盡量精確確定邊緣的位置。
(2)根據對信噪比與定位乘積進行測度,得到最優化逼近算子。這就是Canny邊緣檢測算子。
(3)類似與Marr(LoG)邊緣檢測方法,也屬於先平滑後求導數的方法。
2.Canny邊緣檢測算法:
step1:用高斯濾波器平滑圖象;

step2:用一階偏導的有限差分來計算梯度的幅值和方向;

step3:對梯度幅值進行非極大值抑制(這個就不是很明白!!!)

將梯度角離散為圓周的四個扇區之一,以便3 * 3的窗口作抑制運算。
四個扇區的標號為0到3,對應3*3鄰域的四種可能組合。
在每一點上,鄰域的中心象素M[x, y]與沿著梯度線的兩個象素相比。如果M[x, y]的梯度值不比沿梯度線的兩個相鄰象素梯度值大,則令M[x, y] = 0。
即: 

step4:用雙閾值算法檢測和連接邊緣。
解析1:
對非極大值抑制圖像作用兩個閾值th1和th2,兩者關系th1=0.4th2。我們把梯度值小於th1的像素的灰度值設為0,得到圖像1。然後把梯度值小於th2的像素的灰度值設為0,得到圖像2。由於圖像2的閾值較高,去除大部分噪音,但同時也損失了有用的邊緣信息。而圖像1的閾值較低,保留了較多的信息,我們可以以圖像2為基礎,以圖像1為補充來連結圖像的邊緣。
鏈接邊緣的具體步驟如下:
對圖像2進行掃描,當遇到一個非零灰度的像素p(x,y)時,跟蹤以p(x,y)為開始點的輪廓線,直到輪廓線的終點q(x,y)。
考察圖像1中與圖像2中q(x,y)點位置對應的點s(x,y)的8鄰近區域。如果在s(x,y)點的8鄰近區域中有非零像素s(x,y)存在,則將其包括到圖像2中,作為r(x,y)點。從r(x,y)開始,重復第一步,直到我們在圖像1和圖像2中都無法繼續為止。
當完成對包含p(x,y)的輪廓線的連結之後,將這條輪廓線標記為已經訪問。回到第一步,尋找下一條輪廓線。重復第一步、第二步、第三步,直到圖像2中找不到新輪廓線為止。
至此,完成canny算子的邊緣檢測。
解析2
減少假邊緣段數量的典型方法是對N[i,j]使用一個閾值。將低於閾值的所有值賦零值。但問題是如何選取閾值?
解決方法:雙閾值算法。雙閾值算法對非極大值抑制圖象作用兩個閾值τ1和τ2,且2τ1≒τ2,從而可以得到兩個閾值邊緣圖象N1[i,j]和 N2[i,j]。由於N2[i,j]使用高閾值得到,因而含有很少的假邊緣,但有間斷(不閉合)。雙閾值法要在N2[i,j]中把邊緣連接成輪廓,當到達輪廓的端點時,該算法就在N1[i,j]的8鄰點位置尋找可以連接到輪廓上的邊緣,這樣,算法不斷地在N1[i,j]中收集邊緣,直到將N2[i,j]連接起來為止。
沒有留言:
張貼留言