Canny边缘检测
Canny边缘检测
Canny边缘检测
- 使用高斯滤波器,以平滑图像消除噪声点
- 计算图像中每个像素点的梯度和方向
- 应用非极大值(None-Maximum Suppression)抑制,以消除边缘检测带来的杂散相应
- 应用双阈值检测来确定真实的和潜在的边缘
- 通过抑制孤立的弱边缘完成边缘检测
1.使用高斯滤波操作进行噪声点消除
2.计算梯度和方向
梯度和方向算子使用sobel算子,计算Gx和Gy,方向就是arc tan(Gy/Gx),通过sobel 算子Sx和Sy 计算Gx和Gy的值,
3.非极大值抑制
由于使用线性差值法计算比较复杂,采用近似8个方向像素点进行比较。
非极大值抑制就是临近像素梯度方向例如上图,梯度方向为C->A->B,如果A点为梯度方向值最大的点则认为该点位边缘像素点保留,另外两个点抑制掉。
4.双阈值检测
-
在梯度值大于MaxVal就处理为边界
-
如果小于minVal就舍弃
-
如果梯度值minVal<梯度值<maxVal时:
1.如果该点邻域范围内(周围8个点)有大于maxVal的值,把该点纳入边缘点
2.如果邻域中不存在大于maxVal的值那么就舍弃。
5.代码实现
import cv2
import numpy as npdef cv_show(name,img): # 定义函数加:cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()img = cv2.imread(r'C:\learn\MarkDown\anconda\lena.png', cv2.IMREAD_GRAYSCALE)
v1=cv2.Canny(img,80,150)
v2= cv2.Canny(img,50,150)
res=np.hstack((v1,v2))
cv_show('res',res)