Canny邊緣檢測基本原理與C++實現

http://blog.csdn.net/cay22/article/details/5608033

最優的階梯型邊緣檢測算法(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〕連接起來為止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值