邊緣檢測演算法——Canny和LoG邊緣檢測演算法

weixin_34304013發表於2012-10-20

首先回顧一下邊緣檢測的一般步驟:

邊緣檢測演算法一般包含如下四個步驟:

  1.濾波(去噪)

  2.增強(一般是通過計算梯度幅值)

  3.檢測(在影象中有許多點的梯度幅值會比較大,而這些點並不都是邊緣,所以應該用某種方法來確定邊緣點,比如最簡單的邊緣檢測判據:梯度幅值閾值)

  4.定位(有的應用場合要求確定邊緣位置,可以在子畫素水平上來估計,指出邊緣的位置和方向)

 

邊緣檢測方法比較常用的有基於各種運算元的方法,有基於一階導數的各種運算元(Roberts、Sobel、Prewitt等),還有基於二階導數的拉普拉斯運算元等。

其中一階導數一般找梯度極大值。

二階導數找過零點(需要忽略無意義的過零點(即均勻零區))。

本文主要概述一下邊緣檢測中比較有代表性的的Canny和LoG演算法。

其中Canny基於一階導數,而LoG演算法基於二階導數。

 

Canny邊緣檢測器

Canny邊緣檢測的演算法步驟:

  1.用高斯濾波器平滑影象(不同尺度的Canny檢測子由高斯的不同標準差來表示)

  2.用一階偏導有限差分計算梯度幅值和方向(梯度方向為邊緣法向)

  3.對梯度幅值進行非極大值抑制(Non-Maxima Suppression, NMS)

  4.用雙閾值演算法檢測和連線邊緣

  其中非極大值抑制細化了幅值影象中的屋脊帶,只保留幅值區域性變化最大的點。

  雙閾值演算法:用兩個閾值得到兩個閾值影象,然後把高閾值的影象中的邊緣連線成輪廓,連線時到達輪廓的端點時,在低閾值影象上找可以連線的邊緣。不斷收集,直到所有的間隙連線起來為止。

 

LoG邊緣檢測演算法

LoG邊緣檢測演算法步驟:

  1.平滑:高斯濾波器

  2.增強:Laplacian運算元計算二階導

  3.檢測:二階導零交叉點並對應於一階導數的較大峰值

  4.定位:線性內插

根據卷積的求導法則,先卷積後求導和先求導後卷積是相等的,所以可以把第1、2步合併為一步,先對高斯濾波器做拉普拉斯變換,得到墨西哥草帽運算元,然後再用這個運算元與影象做卷積。

這個運算元還有一個有效的近似:使用兩個具有明顯不同的標準差的高斯平滑掩模的差(DoG, difference of Gaussians)。

相關文章