栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

本文为《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)))

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/740636.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号