Canny 边缘检测算法

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

目的:
返回一个二值图像,非零数值表示图像中边缘的存在,返回与边缘相关的尺度和方向信息

标准:
检测标准:不丢失重要的边缘,不应有虚假的边缘

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

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

步骤:
A、用高斯滤波器对图像去噪

B、计算像素的梯度

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

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

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

步骤解释:

B、计算梯度

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

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

为了防止出现给定阈值的漏检或者误检现象(幅值<阈值,但是有边缘/标记为边缘但是实际上不存在此边缘),给定两个阈值x1,x2,其中x1<x2,所有幅值超过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()

结果为:
在这里插入图片描述

  • 5
    点赞
  • 10
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

懒渔

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值