边缘检测(Canny算子)实现原理 边缘检测算子是什么
haoteby 2024-12-23 10:28 4 浏览
当前,边缘检测算法在实际应用中越加广泛,技术趋势也是快速发展,热火朝天。很多朋友或多或少了解,需要实现各类功能,尤其是一些复杂的需求,实现更好的滤波、满足更佳的提取效果,一时半会儿无从下手。
下面小编就带大家了解关于边缘检测算子的实现原理。由于边缘检测算子常用方法较多(Sobel算子,Kirsch算子,Laplacian算子,Canny算子等),在此以Canny算子为例,带大家了解简单的实现原理。
边缘检测有什么作用?
简单通俗讲,边缘检测主要应用于一些数据信息的处理,提取想要的目标,剔除一些不相关的干扰及无用信息,通过更少的数据信息量获取更多关注的信息。
Canny算子简介
Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,此算法被很多人认为是边缘检测的最优算法,相对其他边缘检测算法来说其识别图像边缘的准确度要高很多。
最优边缘检测的特征:
- 低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报
- 高定位性: 标识出的边缘要与图像中的实际边缘尽可能接近
- 最小响应: 图像中的边缘只能标识一次
Canny算子边缘检测流程
01 转换灰度
鉴于Canny算子只能对单通道灰度图像进行处理,因此在进行边缘检测之前需要将原图像进行灰度转换,以OpenCV为例,使用其封装的函数实现彩色到灰度的转换。
02 滤波降噪处理
完美的图像信息是无噪声的,图像质量很好,但是现实中由于采集设备、环境干扰等多方面的原因导致采集到的图像信息都是含有大量噪声信息的,这些噪声最常见的就是椒盐噪声和高斯噪声。
Canny算子是一种综合在抗噪声干扰和精确定位之间寻求最佳折中方案的边缘检测方法,一般使用高斯滤波来去除噪声,下面是常见的3X3的卷积核模板:
高斯滤波可以将图像中的噪声部分过滤出来,避免后面进行边缘检测时将错误的噪声信息也误识别为边缘了。
滤波核的维数不应选的过大,否则可能会将边缘信息给平滑掉,使得边缘检测算子无法正确识别边缘信息。
03 差分计算幅值和方向
使用一阶有限差分计算梯度可以得到图像在x和y方向上偏导数的两个矩阵,Canny算子中使用的是 Sobel 算子作为梯度算子,当然还可以自己构造其它的如:Roberts算子、Prewitt算子等一阶边缘检测算子来作为梯度算子。
下面以Sobel算子为例来计算梯度的幅值和方向:
【Y方向】
【X方向】
预设H(i , j)为计算的图像
其中点C ( i , j ) 是要计算的梯度
【Y方向梯度】
【X方向梯度】
【此处C点的梯度幅值】
【此处C点的梯度方向】
04 非极大值抑制
对非极大值的数据进行抑制,也可以理解成对非极大值数据排除其是边缘的可能性。8邻域内图像梯度幅值矩阵中的元素值越大,说明图像中该点的梯度值越大,再结合检测点的梯度方向,就可以定位出大概的边缘信息。
非极大值抑制两个特点:
- 当前位置的梯度值与梯度方向上两侧的梯度值比较
- 梯度方向是垂直于边缘方向
举例如下图所示
每个点的X方向和Y方向梯度方向矩阵
每个点的梯度方向的梯度角矩阵
Canny算子将Gy/Gx的值求绝对值,OpenCV中的梯度角矩阵
每个点的梯度矩阵
综上所示,计算出来的梯度值、梯度方向可以大致判断出此 8 邻域内的值的边缘信息如下图
梯度方向是同时包含多个梯度值的,因此需要将梯度方向两边的梯度值进行线性插值,插值系数β有如下要求:越靠近梯度方向的梯度值,其所占比例越大。
完成非极大值抑制后,会得到一个二值图像,非边缘的点灰度值均为0,可能为边缘的点灰度值为255。这样的一个检测结果还是包含了很多由噪声及其他原因造成的假边缘,还需要双阈值筛选处理。
05 滞后阈值
使用双阈值来对二值化图像进行筛选,通过选取合适的大阈值与小阈值可以得出最为接近图像真实边缘的边缘图像。
具体实现方法为:根据高阈值得到一个边缘图像,这样一个图像含有很少的假边缘,但是由于阈值较高,产生的图像边缘可能不闭合,解决该问题就采用了另外一个低阈值。
在高阈值图像中把边缘链接成轮廓,当到达轮廓的端点时,该算法会在断点的8邻域点中寻找满足低阈值的点,再根据此点收集新的边缘,直到整个图像边缘闭合。
来源:亿佰特物联网应用专家仅用于学术分享,版权属于原作者。
相关推荐
- 单点登录(SSO)解决方案介绍(单点登录概念)
-
一、单点登录的介绍单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系...
- 系统登录的三种方式,哪一种更安全?
-
登录是一个高频的动作,笔者抓住这一个小点,分析了系统登录的几种方式和对应的场景。今天谈谈登录。登录即用户输入用户名和密码登录进系统中。B端系统,对于登录的业务场景有两种(可能不止,目前遇到过这两种):...
- 到底什么是单点登录(SSO)?(什么叫做单点登录)
-
什么是单点登录?单点登录(SingleSign-On,简称SSO)是一种集中式的身份验证和授权机制,用户只需在一处输入一次凭证(例如用户名和密码)就可以访问多个相关但独立的软件系统。在数字化时代,...
- 5年稳如老狗的单点登录系统,到底是怎么搞出来的?
-
说到单点登录(SingleSign-On,简称SSO),大家的第一反应可能是——啊不就是登录一次,能到处串门儿嘛?别说,还真差不多,就是这么个意思。但真要搭一套好用、耐造、还能扛住公司里各种奇奇怪...
- 这些负载均衡都解决哪些问题?服务、网关、NGINX?
-
在微服务项目中,有服务的负载均衡、网关的负载均衡、Nginx的负载均衡,这几个负载均衡分别用来解决什么问题呢?一、服务的负载均衡先抛出一个问题:...
- Nginx负载均衡最全详解(4大算法原理机制)
-
Nginx在大型网站架构很重要,也是大厂重点考察方向,今天我就重点来详解Nginx负载均衡@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。Nginx负载均衡N...
- 负载均衡 Nginx Session 一致性(nginx 负载均衡 会话保持)
-
HTTPS请求跳转...
- 监控Oracle Cloud负载均衡器:Applications Manager释放最佳性能
-
设想你正在运营一个受欢迎的在线学习平台,在考试前的高峰期,平台流量激增。全球的学生同时登录,观看视频、提交作业和参加测试。如果OracleCloud负载均衡器不能高效地分配流量,或者后端服务器难...
- Nginx负载均衡:nginx.conf配置文件说明!
-
大家好,欢迎来到程序视点!我是你们的老朋友.小二!在此记录下Nginx服务器nginx.conf负载均衡的配置文件说明,部分注释收集与网络.关于nginx.conf基本的配置,请查看上一篇文章!Ng...
- Java高可用系统架构中的负载均衡策略
-
Java高可用系统架构中的负载均衡策略在现代的分布式系统中,负载均衡策略是构建高可用系统的基石。Java开发者需要深刻理解这些策略,以便打造稳定且高效的系统。接下来,让我们一起揭开负载均衡的神秘面纱。...
- Spring Boot3 客户端负载均衡全解析:从原理到实战
-
在当今互联网大厂后端技术开发的激烈竞争环境中,构建高效、稳定的微服务架构是核心诉求。其中,SpringBoot3作为热门开发框架,其客户端负载均衡功能对于提升系统性能、保障服务稳定性起着关键作用。...
- MySql高可用集群MySQL Router负载均衡读写分离
-
名词解释MGR:MysqlGroupReplication组复制,多台MySQL服务器在同一组中会自动保持同步状态,当某台服务器故障时,整个复制组依然可以保持正常并对外提供服务。...
- 性能测试之tomcat+nginx负载均衡(nginx tomcat)
-
nginxtomcat配置准备工作:两个tomcat执行命令cp-rapache-tomcat-8.5.56apache-tomcat-8.5.56_2修改被复制的tomcat2下con...
- win10/11双网卡链路聚合叠加负载均衡提升网速解决网卡网速瓶颈!
-
双网卡链路聚合一种网络配置技术,通过将多个物理网卡绑定在一起,形成一个逻辑上的网络接口,以提高网络的可靠性、可用性和性能。这种技术通常用于服务器和网络设备中,以实现负载均衡、冗余和高可用性。本机环境:...