欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

OpenCV计算机视觉实战|第6章Canny边缘检测

时间:2023-05-20

本文为《OpenCV计算机视觉实战》的课程笔记。

1 检测流程 去噪:用高斯滤波器,平滑图像,消除噪声计算图像中每个像素点的梯度强度和方向应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散相应:只留下明显的梯度应用双阈值(Double-Threshold)检测来确定真实和潜在的边缘抑制孤立的边缘 2 相关概念 2.1 非极大值抑制

基本思路就是将当前点和邻近进行比较,若当前点是一个极大值则保留。

2.1.1 线性插值法

如图所示,g2、g3为c点的相邻像素,蓝色的斜线为梯度方向,斜线与红线的交点称亚像素(非实际存在的像素点)。

现在要判断c是否为极大值点,即比较是否M(c)>M(dTmp1)且M(c)>M(dTemp2)

设g1的梯度幅度值为M(g1),g2的梯度幅度值为M(g2),则:

M ( d T e m p 1 ) = w × M ( g 2 ) + ( 1 − w ) × M ( g 1 ) M(dTemp1)=w×M(g2)+(1-w)×M(g1) M(dTemp1)=w×M(g2)+(1−w)×M(g1)

其中 w = d i s t a n c e ( d T e m p 1 , g 2 ) d i s t a n c e ( g 1 , g 2 ) w=frac{distance(dTemp1, g2)}{distance(g1,g2)} w=distance(g1,g2)distance(dTemp1,g2)​, d i s t a n c e ( g 1 , g 2 ) distance(g1,g2) distance(g1,g2)为g1、g2间的距离。

2.1.2 简化方法

仅比较锚点周围的8个方向中距离较近的点。

2.2 双阈值检测

1、设置两个边界阈值:maxVal和minVal

2、若 梯 度 值 > m a x V a l 梯度值>maxVal 梯度值>maxVal :像素点保留为边界点

3、若 梯 度 值 < m a x V a l 梯度值

4、若 m i n V a l < 梯 度 值 < m a x V a l minVal<梯度值

当minVal、maxVal取得相对较小,则条件相对宽松,反之条件越苛刻,舍弃掉的点也就越多。

3 检测效果

img = cv2.imread('./img/cat.jpg',cv2.IMREAD_GRAYSCALE)img = cv2.resize(img,(300, 300))v1 = cv2.Canny(img, 85, 175)v2 = cv2.Canny(img, 140, 185)cv_show('Canny',np.hstack((img, v1, v2)))

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。