canny边缘检测算法的原理
2021/5/11 20:29:09
本文主要是介绍canny边缘检测算法的原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前几天写了一篇canny边缘检测算法,比较偏算法公式和实现,具体为什么这样做和原理没有讲清楚,想在这一篇中讲一下,让研究canny算法的人不仅知道算法公式和实现,同时也能明白为什么这样做。
主要参考下面一个博客文章
https://www.cnblogs.com/xiximayou/p/13139426.html
这篇链接中,对于canny中每一步实现的目的给出了详细说明,比较通俗易懂。比如讲非极大值抑制,目的就是判断是否为局部最大值,如果不是,就可以排除不能够构成边缘的所有不需要的像素。目的,你得到的结果是带有“细边”的二进制图像,并给出了图示解释怎么获取到细边j。对于磁滞阈值法,同样给出图片讲解,目的是保存连接强边界的弱边界点,去除不连接强边界的弱边界点,同样也给出图片解释,比较容易通俗易懂。
1、非极大值抑制的目的:
在获得梯度大小和方向后,将对图像进行全面扫描,以去除可能不构成边缘的所有不需要的像素。为此,在每个像素处,检查像素是否是其在梯度方向上附近的局部最大值。查看下面的图片:
2、磁滞阈值法
该阶段确定哪些边缘全部是真正的边缘,哪些不是。为此,我们需要两个阈值minVal
和maxVal
。强度梯度大于maxVal
的任何边缘必定是边缘,而小于minVal
的那些边缘必定是非边缘,因此将其丢弃。介于这两个阈值之间的对象根据其连通性被分类为边缘或非边缘。如果将它们连接到“边缘”像素,则将它们视为边缘的一部分。否则,它们也将被丢弃,见下图:
边缘A在maxVal
之上,因此被视为“确定边缘”。尽管边C低于maxVal
,但它连接到边A,因此也被视为有效边,我们得到了完整的曲线。但是边缘B尽管在minVal
之上并且与边缘C处于同一区域,但是它没有连接到任何“确保边缘”,因此被丢弃。因此,非常重要的一点是我们必须相应地选择minVal
和maxVal
以获得正确的结果。
3、图片举例
3.1、非极大值抑制之前的边界信息图:
3..2、非极大值抑制处理,并且大于high阈值的强边界的图片:
3.3 基于非极大值抑制后的强边界基础上,进行磁滞阈值处理结果:
从上面三个图片可以看出确实将边界细化,同时凸显出强边界,最后一张加上部分弱边界点,将断断续续强边界连接起来了。广大网友如果看懂了canny算法的原理,就可以看上一篇的算法公式和边界方向量化手段,可以进行程序撰写。如果需要相关这方面的程序,可以给我发消息,我也可以提供。有opencv的mat数据结构实现的canny算法,也有直接用二维数组实现的canny算法。还有直接调用opencv的canny函数。
这篇关于canny边缘检测算法的原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-19EntBot.ai: AI Website Chatbot for Product Guides and Development Doc
- 2024-06-17zero-shot-learning-definition-examples-comparison
- 2024-06-06Package Easy(基于 NSIS 的打包exe安装包工具)使用方法-icode9专业技术文章分享
- 2024-06-06基于 casdoor 的 ELK 开源登录认证解决方案: elk-auth-casdoor-icode9专业技术文章分享
- 2024-05-29Elasticsearch慢查询日志配置
- 2024-05-29揭秘华为如此多成功项目的产品关键——Charter模板
- 2024-05-29海外IDC业务拓展的7大挑战
- 2024-05-29InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!
- 2024-05-29CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!
- 2024-05-29AutoMQ 生态集成 Apache Doris