热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

边缘检测canny算法

Canny边缘算法边缘检测的核心思想就是因为一幅图像的边缘往往是灰度值剧烈变化的地方,通过确定这些地方来确定边缘。第一步:去噪理所当然的࿰
Canny边缘算法

边缘检测的核心思想就是因为一幅图像的边缘往往是灰度值剧烈变化的地方,通过确定这些地方来确定边缘。

第一步:去噪

理所当然的,除了边缘会产生灰度值剧变,出现噪声的地方同样会发生灰度值剧烈变化。我们往往采用高斯滤波来处理噪声,使得图像更平滑。

第二步:求导求梯度

通过求导来表示灰度值的变化程度,应该是一个很理所当然的想法。因为图像中的坐标是离散的,所以对于图像的求导是通过求差分。求导的选择有很多,例如经典的Sobel,Laplacian

我们仅仅使用Sobel,Laplacian一样能够检测出边缘,各有优缺点。需要根据各自的特点来选择。

Sobel之后的边缘会变粗,或者说边缘扩大了一圈

sobel.png

Laplacian因为是一个二阶导数算子,在边缘处会产生双边缘响应

双边缘响应.png

上面的是原理,下面是一张实验图

双边缘.png
4.png

显而易见的在边缘处产生了双边缘,所以只能通过零交叉点(在逻辑上来说本例的零交叉点就是105.5)来粗略的确认边缘位置,不过这都是很微观的操作,尽管不是十分精确,对于肉眼来说其实完全没有区别。

Canny算法应该是Sobel的一种加强版。他的求导使用Sobel掩模。

第三步:非极大值抑制

这一步就是Canny算法的优化了,书上说的简直不是人话。我们在第二步的时候会产生2个矩阵。一个是导数矩阵记录对应位置上该像素点的导数,一个是梯度矩阵记录对应位置上该像素点的梯度方向。梯度方向会近似为0°,45°,90°,135°0°,45°,90°,135°0°,45°,90°,135°这4个方向

1.png

如果梯度方向近似为45°45°45°那么就会比较3-5-7,如果5在不是这3个中的极大值则灰度值设为0,这就是非极大值抑制。非极大值抑制应该是为了边缘瘦身,因为Sobel会让边缘变粗。

而如果追求精度的话,则需要用到线性插值来估计**gn**灰度值后,再进行比较。

线性插值.png

第四步:阈值处理

设置2个阈值maxValminVal

3.png

如果梯度值>>>maxVal那么这个点被确定为边缘点&#xff0c;如果梯度值<<<minVal那么这个点就被认为不是边缘。如果

minVal<<<梯度值<<<maxVal&#xff0c;那么这个点就需要进行确认。同样的按照上面的9宫格&#xff0c;在5周围的8邻域如果存在一个超过了maxVal&#xff0c;那么就认为该点与边缘相关&#xff0c;标记为边缘点。如果8邻域内没有一个超过maxVal&#xff0c;那么该点就被舍弃了。最后剩下的结果就是边缘了。


推荐阅读
  • 解决vCenter vSphere HA初始化失败的问题
    本文探讨了在集群中遇到的所有vSphere HA主机状态显示‘无法正确安装或配置vSphere HA代理’错误的情况,并详细介绍了排查与解决步骤,包括检查HA初始化错误及安装HA代理的常见故障排除方法。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 探索古典密码学:凯撒密码、维吉尼亚密码与培根密码
    本文深入探讨古典密码学的基本概念及其主要类型,包括替换式密码和移位式密码。文章详细介绍了凯撒密码、维吉尼亚密码和培根密码的工作原理及加密解密方法。 ... [详细]
  • 作为一名跨专业考生,最近在备战研究生入学考试的计算机编程部分。虽然没有编程基础,但通过九度在线教育平台的机试教程逐步学习,进展顺利。直到遇到贪心算法相关的题目,特别是浙江大学2012年的一道机试题——《加油还是不加油》,才遇到了挑战。本文将分享我在解决这一问题过程中的思考与学习体会。 ... [详细]
  • LambdaMART算法详解
    本文详细介绍了LambdaMART算法的背景、原理及其在信息检索中的应用。首先回顾了LambdaMART的发展历程,包括其前身RankNet和LambdaRank,然后深入探讨了LambdaMART如何结合梯度提升决策树(GBDT)和LambdaRank来优化排序问题。 ... [详细]
  • 本文详细介绍如何在 Windows 环境下安装 Ubuntu 12.04 版本的 Linux 操作系统,包括必要的软件下载、配置步骤以及注意事项。 ... [详细]
  • 深入解析IGMP各版本特性及其演进
    本文详细探讨了Internet组管理协议(IGMP)的不同版本,包括IGMPv1的基础功能、IGMPv2的增强特性和IGMPv3的重要改进。特别分析了IGMPv3如何支持特定源组播(SSM)模型,并介绍了各版本之间的主要差异。 ... [详细]
  • Chapter11&12:DefocusBlur&FinalScene在Camera.h中修改如下:#pragmaonce#define_USE ... [详细]
  • Spring Cloud Config 使用 Vault 作为配置存储
    本文探讨了如何在Spring Cloud Config中集成HashiCorp Vault作为配置存储解决方案,基于Spring Cloud Hoxton.RELEASE及Spring Boot 2.2.1.RELEASE版本。文章还提供了详细的配置示例和实践建议。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
  • 本文探讨了如何利用System.Diagnostics.Trace作为.NET库中的通用日志记录方法,同时考虑了其在性能关键代码中的影响。 ... [详细]
  • 众包(Crowdsourcing)是指将任务分发给广泛的社区成员完成,而非由组织内部人员独力承担。这一模式在软件测试领域尤为突出,通过结合网络与云计算技术,形成了强大的众包测试机制,对传统测试流程产生了深远影响。 ... [详细]
  • 管理类联考英语复习指南:基础语法(八)
    本文探讨了谓语动词和分词在句子中的作用,包括分词作为状语、定语和宾语补足语的使用方法,以及分词的时态和语态变化。 ... [详细]
author-avatar
猪猪爱tai旸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有