什么是 Canny 边缘检测算法?-程序员宅基地

技术标签: 算法  卷积  python  计算机视觉  人工智能  

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

一、简介

Canny 边缘检测器是一种多步算法,用于检测任何输入图像的边缘。它涉及在检测图像边缘时要遵循的以下步骤。

1. 使用高斯滤波器去除输入图像中的噪声。

2.计算高斯滤波器的导数,计算图像像素的梯度,得到沿x和y维度的幅度。

3. 考虑垂直于给定边缘方向的任何曲线的一组邻居,抑制非最大边缘贡献像素点。

4. 最后,使用滞后阈值方法保留高于梯度幅值的像素,忽略低于低阈值的像素。

在深入研究以下步骤之前,是推导出该算法的 JK Canny 得出的三个结论:

-良好的检测:最佳检测器必须消除出现误报和漏报的可能性。

-良好的定位:检测到的边缘必须尽可能接近真实边缘。

-单响应约束:检测器必须只为每个边缘点返回一个点。

二、在Canny算法过程中需要遵循的步骤

降噪或图像平滑:

在存在噪声期间,像素可能与其相邻像素不接近。这可能导致获得不适当或不适当的边缘检测。为了避免同样的情况,我们使用高斯滤波器,它与图像卷积并去除噪声,防止输出图像中出现所需的边缘。

在下面的示例中,我们将高斯滤波器或核 g(x,y) 与图像 I 进行卷积。在这里,我们希望确保任何给定的像素必须与输出中的相邻像素相似,因此我们使用矩阵 [1 1 1] 保持像素之间的相似性并去除噪声。

g(x,y)= 高斯分布

I = 输入图像

衍生品:

计算滤波器对 X 和 Y 维度的导数,并将其与 I 卷积以给出沿维度的梯度幅度。此外,可以使用两个维度之间的角度的正切来计算图像的方向。

上述卷积产生具有大小和方向的梯度向量。

下面是一个高斯导数的例子,它最终有助于输出图像中的边缘。

三、非最大抑制

沿着边缘,通常观察到很少有点使边缘的可见性更清晰。所以我们可以忽略那些对特征可见性贡献不大的边缘点。为了达到同样的目的,我们使用非最大抑制方法。这里我们标记边缘曲线上幅度最大的点。这可以通过寻找最大值以及与曲线垂直的切片来获得。

考虑下图中的边缘,它具有三个边缘点。假设点 (x,y) 为具有最大边缘梯度的点。检查垂直于边缘方向的边缘点,并验证它们的梯度是否小于 (x,y)。如果这些值小于 (x,y) 梯度,那么我们可以抑制曲线上的那些非最大值点。

四、滞后阈值

五、总结

如果一个像素的梯度是:

- 在“高”上方将其声明为“边缘像素”。

- 下面,“低”将其声明为“非边缘像素”。

- 在“低”和“高”之间。

迭代地考虑它的邻居,如果它连接到“边缘像素”或通过“低”和“高”之间的像素连接,则将其声明为“边缘像素”。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42722197/article/details/117639872

智能推荐

部署在阿里云 SLB 后面的spring 应用如何获得用户真实 IP_阿里 slb穿透真实ip-程序员宅基地

文章浏览阅读1.6k次。如果你的应用是部署在阿里云上面的, 往往在应用的前面会架设一个SLB(负载均衡). 如果 SLB配置成四层转发, 那么你的应用看到的 http 连接的对端地址为真实的用户 IP, `HttpServletRequest.getRemoteAddr()`能返回正确的用户 IP. 但是如果 SLB 配置成`七层转发`, `HttpServletRequest.getRemoteAddr()`返回的是..._阿里 slb穿透真实ip

基于TensorRT7.1、Libtorch、Caffe、ROS下的安装和测试_ros tensorrt-程序员宅基地

文章浏览阅读1.5k次。1: TensorRT7.1.3.4安装下载链接:https://developer.nvidia.com/tensorrttar -xvzf TensorRT-7.1.3.4.Ubuntu-16.04.x86_64-gnu.cuda-10.2.cudnn8.0.tar.gzcd datapython3 ./download_pgms.pycd samplepip install pillow../bin/sample_mnistexport LD_LIBRARY_PATH=/home/_ros tensorrt

nginx配置部署一个域名,多个端口_nginx一个域名转发多个端口-程序员宅基地

文章浏览阅读3.8k次,点赞5次,收藏4次。nginx部署+反向代理+部署同一域名不同端口号_nginx一个域名转发多个端口

电子学会2022年9月青少年软件编程(图形化)等级考试试卷(二级)答案解析_2022.09全国青少年软件编程(图形化)等级考试试卷(二级)-程序员宅基地

文章浏览阅读988次。D队负于A队和B队,胜C队,得3分。试题解析:程序执行流程为:最初角色的大小为10.然后增加20,角色的大小为30,然后角色的大小增加-20,角色大小变成10,然后将角色大小设为30,将角色大小增加10,角色的大小为40. 故答案选D。试题解析:角色初始位置为(0,0),程序执行后x增加100,y增加100,后位置为(100,100),最后是将y坐标设为100,故程序执行完,角色坐标为(100,100)。丙认为A、B、D、E或F是冠军,因为只有一个人正确,所以冠军为C、D或F,但答案只有C,故答案为C。_2022.09全国青少年软件编程(图形化)等级考试试卷(二级)

三个主流数据库(Oracle、MySQL和SQL Server)的“单表造数_oracle主流數據庫?-程序员宅基地

文章浏览阅读1.5k次。预设游标10000(必要时)模拟新增10万条数据。_oracle主流數據庫?

HTTPS无法打开:curl: (35) Encountered end of file-程序员宅基地

文章浏览阅读3.3w次。访问HTTP可以,HTTPS无法打开使用curl -I https://www.***.com 返回 curl: (35) Encountered end of file[root@instance-3 ~]# curl -I https://www.***.com -vvv* About to connect() to www.***.com port 443 (#0)* Trying 1_curl: (35) encountered end of file

随便推点

2024年Android面试笔试总结(Android精心整理篇)-程序员宅基地

文章浏览阅读236次,点赞4次,收藏9次。在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。一个人可以走的很快,但一群人才能走的更远。

c++11的异步线程操作_c++异步线程-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏12次。一、异步线程无论是在哪种语言中,都会面临异步操作的问题。基本上异步操作的实现可以大致分为系统级和应用级(封装的库也算应用级)。系统级一般是通过中断或者线程实现,在应用层面上一般是通过线程来实现。异步操作的目的是为了提高响应的并发量和控制访问的安全性以及健壮性。说的再直白一些,就是把访问过程,处理过程和响应过程分离。异步是相对于同步来说,同步相当于一问一答,必须实现,假如你去银行办理业务,你问柜台的小姐姐一句话,半天才回复你,估计你就怒了。但是如果你去带着一些木料去定作家具,就不愿意等在那儿,而愿..._c++异步线程

MySQL安装教程(详细版)_mysql8.0.36安装教程-程序员宅基地

文章浏览阅读1.6w次,点赞77次,收藏228次。MySQL免费安装教程、如何验证MySQL是否安装成功?怎么关掉MySQL服务?MySQL 端口问题如何解决?MySQL如何开机自启OR手动自启?安装MySQL时Starting the server 安装失败怎么解决?_mysql8.0.36安装教程

数据库添加约束_数据库怎样增加约束关系-程序员宅基地

文章浏览阅读631次。--添加主键约束(stuNo作为主键,stuInfo为表名)alter table stuInfoadd constraint PK_stuNo PRIMARY KEY (stuNo)--添加唯一约束alter table stuInfoadd constra_数据库怎样增加约束关系

python安装模块时显示*.whl is not a supported wheel on this platform.解决方法_error: wxpython-4.2.1-cp312-cp312-win_amd64.whl is-程序员宅基地

文章浏览阅读1.7w次,点赞3次,收藏3次。找了一下午相关方法,包括强行改格式也都试了一遍,发现还是不行……于是强行升级python版本(从2.7升级到3.6)……然后,成功安装whl文件!(请忽略这个渣渣网速……)我觉得是升级python顺带升级了pip的关系!如果还是不行的话,就只能试试强行改格式名了……在shell中输入import pip; print(pip.pep425tags.get_supported_error: wxpython-4.2.1-cp312-cp312-win_amd64.whl is not a supported wheel on

Solox 性能数据实时收集工具-程序员宅基地

文章浏览阅读1.6k次。关于App性能测试工具非常见,比如腾讯的GT早已不在维护,印象比较深的是几年前用过的一款收费工具叫gamebench,支持Android/iOS平台。目前比较主流的是 PerfDog?同样是腾讯出的收费工具。有使用过的同学可以评价一下。本文要介绍的工具是SoloX, 是一款开源 Android/iOS 性能数据实时收集工具。_solox

推荐文章

热门文章

相关标签