Canny邊緣檢測
Canny的目標就是找到一個最優的邊緣檢測算法,具體含義:
1.最優檢測:算法能夠盡可能多地標識出圖像中的實際邊緣,漏檢真實邊緣的概率和誤檢非邊緣的概率都盡可能小
2.最優定位准則:檢測到的邊緣點的位置距離實際邊緣點的位置最近,或者是由於噪聲影響引起檢測出的邊緣偏離物體的真實邊緣的程度最小
3.檢測點與邊緣點一一對應:算子檢測的邊緣點與實際邊緣點應該是一一對應
邊緣檢測的步驟:
1.使用高斯濾波,以平滑圖像:降噪后,再做邊緣檢測,檢測邊緣一般用求梯度的方法計算,而求梯度時要先考慮把噪聲處理掉。
經歸一化處理得到H

2.計算圖像中每個像素點的梯度強度和方向:可用Sobel算子計算x和y方向的梯度

3.應用非極大值抑制,以消除邊緣檢測帶來的雜散效應:算完梯度之后,需要保留梯度最明顯的,所以做非極大值抑制。比如檢測一個目標,假設是只貓,有時候看半只貓的圖片也能看出這是一只貓,但是如果看全部的話,置信度是不一樣的,所以取最大的那一個就顯得比較重要了
4.利用雙閾值檢測來確定真實的和潛在的邊緣:

5.通過抑制孤立的弱邊緣,最終完成邊緣檢測
1 import cv2 2 import numpy as np 3 4 img = cv2.imread('default.png', cv2.IMREAD_GRAYSCALE) 5 v1 = cv2.Canny(img, 80, 150) 6 v2 = cv2.Canny(img, 50, 100) 7 res = np.hstack((v1, v2)) 8 cv2.imshow('test', res) 9 cv2.waitKey(0) 10 cv2.destroyAllWindows()

