- 使用高斯滤波器,以平滑图像,滤除噪声
- 计算图像中每个像素点的大小和方向
- 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应
- 双阈值(Double-Threshold)检测来确定真实和潜在的边缘
双阈值:对一些连有可能边界再进行过滤,只保留真实的那些
5.通过抑制孤立的弱边缘最终完成边缘检测
1.高斯滤波器
2.梯度和方向
3.非极大值抑制
线性插值法:设g1的梯度幅值为M(g1),则Q可以得到
d(Q,g2)表示Q和g2两点之间的距离
若C的值大于 Q与Z的梯度的值则保留,否则则消除
为了简化计算,由于一个像素周围有8个像素,把一个像素的梯度方向离散为8个像素,这样就只需要计算前后即可,不用插值了
4.双阈值检测
A、C保留,B、D舍弃
梯度值>maxval 则处理为边界
minval<梯度值<maxval 连有边界则保留,否则则舍弃
梯度值<minval 则舍弃
img = cv2.imread('nengneng.jpg',cv2.IMREAD_GRAYSCALE)
v1 = cv2.Canny(img,80,150) #较大表示希望检测出来的边界越准确越好
#80:minval 150:maxval
v2 = cv2.Canny(img,50,100) #较小表示希望检测出来的边界越多越好
v1:
v2: