最近有用到canny運算元做邊緣檢測。回顧一下canny運算元的基本原理:總的來說,影象的邊緣檢測必須滿足兩個步驟
(1)有效的抑制雜訊,使用高斯運算元對影象進行平滑;
(2)盡量精確的確定邊緣的位置;
canny運算元的邊緣檢測可以分為三個步驟:
step 1: 高斯平滑函式。目的是為了平滑以消除雜訊;
step 2:一階差分卷積模板。目的是為了達到邊緣增強。
該步驟有點類似於與兩個方向模板進行卷積運算。這兩個方向模板為(a)和(b)所示:左圖體現的是在x方向上的差異,右圖體現的是在y方向上的差異。同時獲得梯度幅值的大小以及方向角。通過該步,獲得在邊緣位置處特徵被加強的影象。
step 3:非極大值抑制(nms)。目的是保留梯度方向上的最大值。
這一步是比較關鍵的一點:
僅僅得到全域性的梯度並不足以確定邊緣,因此為確定邊緣,必須保留區域性梯度最大的點,而抑制非極大值
圖2非極大值抑制
四個扇區的標號為0到3,對應3*3鄰域的四種可能組合。
在每一點上,鄰域的中心象素m與沿著梯度線的兩個象素相比。如果m的梯度值不比沿梯度線的兩個相鄰象素梯度值大,則令m=0。
——在梯度和反梯度方向上各找n個畫素點。若g(x,y)不是這些點中的最大點,則將n(x,y)置為0,否則保持n(x,y)不變。
step4: 雙線性閾值
首先是乙個較大的閾值:nmax.使用該閾值二值化後的影象含有較少的假的邊緣點,但是端點較多!
使用較小的閾值:nmin,使用該閾值二值化後的影象含有較多的假的邊緣點;
通過上一步獲取的邊緣點,判斷其8鄰域內有無第二步獲得的邊緣點,然後進行連線!
另一種簡單的方法是,把梯度方向簡化為4個方向:『0,45,90,135』
最後一步為對n(x,y)進行閾值化處理:
大的閾值會得到——少量的邊緣點以及眾多的空隙
小的閾值會得到——大量的邊緣點以及眾多的錯誤檢測。
一般low=0.4high。
邊緣檢測 Canny運算元
1 使用高斯濾波器,以平滑影象,濾除雜訊。2 計算影象中每個畫素點的梯度大小和方向。3 應用非極大值 non maximum suppression 抑制,以消除邊緣檢測帶來的雜散響應。4 應用雙閾值 double threshold 檢測來確定真實的和潛在的邊緣。5 通過抑制孤立的弱邊緣最終完成邊...
邊緣檢測 Canny運算元
一.canny 演算法簡介 canny邊緣檢測運算元是 john f.canny 於 1986 年開發出來的乙個多級邊緣檢測演算法。更為重要的是,canny 創立了邊緣檢測計算理論 computational theory ofedge detection 解釋了這項技術是如何工作的。canny邊緣...
邊緣分割技術
檢測間斷點 檢測間斷點 left begin 1 1 1 1 8 1 1 1 1 end right 檢測線段 水平檢測 left begin 1 1 1 2 2 2 1 1 1 end right 垂直檢測 left begin 1 2 1 1 2 1 1 2 1 end right 45 檢測 ...