Canny邊緣檢測是一種使用多種邊緣檢測算法檢測邊緣的方法。由John F.Canny于1986年提出,并在論文中有詳盡的描述。
1.Canny邊緣檢測四步驟
1)去噪。噪聲會影響邊緣檢測的準(zhǔn)確度。通常采用高斯濾波去除圖像中的噪聲。濾波器的核越大,邊緣信息對噪聲的敏感度就越低。不過,核越大,邊緣檢測的定位錯誤也會隨之增加。通常一個5 X 5的核能滿足大多數(shù)情況。
2)計算梯度的幅度與方向。梯度的方向與邊緣的方向是垂直的,通常就取近似值為·水平、垂直、對角線等八個不同的方向。
3)非極大值抑制,即適當(dāng)?shù)刈屵吘壸兪荨T讷@得了梯度的幅度和方向后,遍歷圖像中的像素點,去除所有非邊緣的點。具體實現(xiàn)上,判斷當(dāng)前像素點是否是周圍像素點中具有相同梯度方向的最大值,如果是,則保留該點;如果不是則抑制(歸零)。
4)確定邊緣。用雙閾值算法確定最終的邊緣信息。完成之前三步驟后,圖像的強邊緣已經(jīng)在當(dāng)前獲取的邊緣圖像內(nèi)。但一些虛邊緣可能也在邊緣圖像內(nèi),這些虛邊緣可能是真實的圖像產(chǎn)生的,也可能是由于噪聲產(chǎn)生的(必須將其剔除)。
? ? ????設(shè)置兩個閾值,其中一個為高閾值maxVal,另一個為低閾值minVal。根據(jù)當(dāng)前邊緣像素的梯度值與這兩個閾值之間的關(guān)系,判斷邊緣的屬性。如果當(dāng)前邊緣像素的梯度值不小于maxVal,則將當(dāng)前邊緣像素標(biāo)記為強邊緣;如果介于maxVal與minVal之間,則標(biāo)記為弱邊緣(先保留);如果小于minVal,則抑制當(dāng)前邊緣像素。之后再判斷虛邊緣是否與強邊緣有連接,有連接,則處理為邊緣;無連接則抑制。
2. Canny函數(shù)
OpenCV提供了cv2.Canny()來實現(xiàn)邊緣檢測:
dst : 為計算得到的邊緣圖像
image: 為8位輸入圖像
threshold1: 表示處理過程中的的第一個閾值
threshold2: 表示處理過程中的的第二個閾值
apertureSize: 表示Sobel算子的孔徑大小。
L2gradient: 為計算圖像梯度幅度的標(biāo)識。其默認(rèn)值是False。如果為True,則使用更精確的L2范數(shù)進行計算,否則使用L1范數(shù)。
例如:

