首先回顧一下邊緣檢測的一般步驟:
邊緣檢測演算法一般包含如下四個步驟:
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)。