Canny邊緣檢測是一種使用【多階段】邊緣檢測算法檢測邊緣的方法。
主要分為以下步驟:
1. 去噪:
過濾噪聲,使用濾波平滑一些紋理較弱的非邊緣區域。
2. 計算梯度:
計算梯度的幅度與角度(PS: 2↑ 表示幅度為2,角度90°),值得注意的是,邊緣和梯度始終是垂直的。
3. 非極大值抑制:
依次周遊像素點,判斷目前像素點是否為周圍梯度方向内的最大值。如果是最大值則保留,否則抑制(歸零)。
4. 使用雙門檻值确定邊緣:
剔除虛邊緣,确定真正的邊緣。
經過前面的步驟,我們已經得到了一些邊緣,但是這些邊緣中除了真正的邊緣外,還有一些噪聲邊緣,是以我們需要進一步剔除。主要分3種情況:
大于等于 maxVal 的強邊緣 : 保留
大于 minVal 并且小于 maxVal 的虛邊緣 :如果與強邊緣連通則保留,否則抑制。
小于 minVal 的邊緣:抑制
上代碼:
Canny(img,minVal,maxVal)
import cv2
o=cv2.imread("lena.bmp",cv2.IMREAD_GRAYSCALE)
r1=cv2.Canny(o,128,200)
r2=cv2.Canny(o,32,128)
cv2.imshow("original",o)
cv2.imshow("result1",r1)
cv2.imshow("result2",r2)
cv2.waitKey()
cv2.destroyAllWindows()
結果:
拜了個拜。。。。