Canny 边缘检测算法

Canny 边缘检测算法Canny 边缘检测算法 其对受白噪声影响的阶跃型边缘是最优的 目的 返回一个二值图像 非零数值表示图像中边缘的存在 返回与边缘相关的尺度和方向信息标准 检测标准 不丢失重要的边缘 不应有虚假的边缘定位标准 实际边缘与检测到的边缘位置之间的偏差最小单响应标准 将多个响应降低为单个边缘响应 这个标准可以解决受噪声影响的边缘问题 以及起到地址非平滑边缘检测算子的作用 步骤 A 用高斯滤

Canny:边缘检测算法:其对受白噪声影响的阶跃型边缘是最优的。

定位标准:实际边缘与检测到的边缘位置之间的偏差最小

单响应标准:将多个响应降低为单个边缘响应。这个标准可以解决受噪声影响的边缘问题,以及起到地址非平滑边缘检测算子的作用。

B、计算像素的梯度

C、在边缘检测的基础上使用非最大抑制NMS&是B步的辅助

D、在检测到的边缘上使用双double阈值去除假阳性&又被称为滞后阈值化处理

E、分析所有的边缘以及其之间的连接,以保留真正的边缘,并消除不明显的边缘。(一般这一步都会省略)

步骤解释:

B、计算梯度

①与正交微分滤波器(Prewitt)做卷积

②生成水平方向上导数图像H和垂直方向上的导数图像V

在这里插入图片描述

当幅度超过一个临界值时,需要使用非极大值抑制的方法,删除这些不需要的响应。

C、非极大值抑制:搜索局部极大值,抑制非极大值。

在这里插入图片描述

<2>与每个角度相关的像素被分别处理。若垂直于梯度的相邻两个像素中的任何一个有较大数值,其幅度将被设置为0。

意义:这样的话,边缘幅值分布极大值处的梯度可以保留,而那些远离极大值的梯度将被抑制。

D双double阈值去除假阳性&滞后阈值化处理—基本属于收尾阶段

为了防止出现给定阈值的漏检或者误检现象(幅值
<阈值,但是有边缘 标记为边缘但是实际上不存在此边缘),给定两个阈值x1,x2,其中x1

import cv2 import numpy as np v2.imread("img.jpg", 0) cv2.imwrite("canny.jpg", cv2.Canny(img, 200, 300)) cv2.imshow("canny", cv2.imread("canny.jpg")) cv2.waitKey() cv2.destroyAllWindows() 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204225.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:42
下一篇 2026年3月19日 下午8:43


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号