图像边缘检测原理和常用检测算子及MATLAB实现
一、边缘和边缘检测的概念
图像边缘是指图像中灰度值发生急剧变化的地方,这些变化通常对应于图像中物体的轮廓、边界或纹理的突变处。在数字图像处理中,边缘是图像的一个重要特征,它包含了关于物体形状、位置和大小等关键信息。
边缘检测是数字图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。 这些包括:深度上的不连续、表面方向不连续、物质属性变化和场景照明变化。 边缘检测是数字图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。
图像的边缘确实具有幅值和方向这两个重要属性。边缘的幅值通常指的是边缘的强度或显著程度。它可以通过计算图像灰度梯度的幅值来得到。灰度梯度是一个向量,既有大小(即幅度)又有方向。在图像中,梯度的大小表示了像素值变化的快慢,即边缘的幅度。当边缘两侧的像素值差异较大时,边缘的幅值就较大,反之则较小。边缘的幅值特性在图像分割、特征提取和图像识别等任务中起着关键作用。通过检测边缘的幅值,可以确定哪些边缘是显著的,哪些边缘是较弱的,从而进一步处理和分析图像。边缘的方向指的是边缘的走向或趋势。在图像中,边缘通常表现为像素值在某一方向上急剧变化,而在另一与其正交的方向上变化相对平缓。这种方向性特征有助于识别和理解图像中的物体和场景。梯度的方向则表示了像素值变化最快的方向,即边缘的方向。通过检测边缘的方向,可以获得图像中物体的轮廓和形状信息,这对于后续的图像处理和分析非常重要。
边缘可以分为不同的类型,如阶跃型边缘、房顶型边缘和凸缘型边缘等,这些类型的边缘在灰度变化上表现出不同的特性。阶跃型边缘是指灰度值在一个很小的范围内发生很大的变化,形成明显的界限;房顶型边缘则是指灰度值先逐渐增加到一个最大值,然后再逐渐减少,形成一个像屋顶一样的形状;凸缘型边缘则是指灰度值先逐渐增加,然后突然减少到一个较低的值,再逐渐增加,形成一个凸起的形状。边缘检测算法通常利用图像灰度值的一阶或二阶导数来检测边缘。一阶导数可以反映灰度值的变化率,而二阶导数则可以反映灰度值变化率的变化,即曲率。常见的边缘检测算子,如Sobel算子、Prewitt算子、Roberts算子、Laplacian算子和Canny算子等,都是基于这些导数原理来设计的。
在实际应用中,边缘检测算法的选择取决于图像的特性、噪声水平以及所需的边缘检测精度等因素。不同的算法有不同的优缺点和适用场景,因此需要根据具体情况进行选择和优化。
图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。有许多方法用于边缘检测,它们的绝大部分可以划分为两类:基于查找一类和基于零穿越的一类。基于查找的方法通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向。基于零穿越的方法通过寻找图像二阶导数零穿越来寻找边界,通常是Laplacian过零点或者非线性差分表示的过零点。
二、常用的边缘检测算子
数字图像处理中常用的边缘检测算子有多种,每种算子都有其独特的优缺点和适用场景。以下是对几种常用边缘检测算子的介绍:
大家请注意,Roberts算子通常不使用3x3的矩阵形式,而是使用两个2x2的卷积核来分别计算水平和垂直方向的梯度。Laplacian算子则有多种可能的卷积核形式,上表给出的是其中两种常见的3x3卷积核。Canny算子则是一个更为复杂的边缘检测算法,它不使用单一的卷积核,而是结合了多个处理步骤来得到更精确的边缘检测结果。
常用边缘检测算子及其优缺点
算子名称 | 优点 | 缺点 |
Sobel算子 | 1. 对灰度渐变和噪声较多的图像处理效果较好。2. 实现简单,计算速度快。 | 1. 对边缘定位不是很准确,图像的边缘不止一个像素。2. 对噪声敏感,检测效果较粗糙,难以检测斜向边缘。 |
Prewitt算子 | 1. 实现简单,只需要对图像进行两次卷积运算即可得到边缘信息。2. 抑制噪声的能力相对较强。 | 1. 对边缘定位的准确性较低,容易产生边缘模糊或者定位不准确的问题。2. 对细节的敏感性较低,可能会忽略一些细小的边缘信息。3. 计算复杂度较高,对于大尺寸的图像,进行两次卷积运算需要较大的计算量。 |
Roberts算子 | 1. 边缘定位准确,对噪声抑制能力较弱。2. 常用来处理具有陡峭的低噪声图像,当图像边缘接近于正45度或负45度时,处理效果更理想。 | 1. 对噪声敏感,容易受噪声干扰而产生误检。2. 提取的边缘线条较粗。 |
Laplacian算子 | 1. 各向同性,能对任何走向的界线和线条进行锐化。2. 对细线和孤立点检测效果较好。 | 1. 对噪声非常敏感,常产生双像素宽的边缘。2. 不能检测出边的方向。 |
Canny算子 | 1. 不容易受噪声干扰,能够检测到真正的弱边缘。2. 使用双阈值检测,能够连接弱边缘和强边缘,得到连续的边缘线条。3. 对边缘定位准确,具有较高的边缘检测精度。 | 1. 参数选择较复杂,需要根据具体图像和应用场景进行调整。2. 计算复杂度较高,包括图像平滑、梯度计算、非最大值抑制等多个步骤。 |
三、边缘检测的MATLAB实现
MATLAB提供一个边缘检测内置函数edge,其基本用法是:
BW = edge(I,method)
使用 method
指定的边缘检测算法检测图像 I
中的边缘。
BW = edge(I,method,threshold,direction)
返回强度高于 threshold
的并指定要检测的边缘的方向(边缘的方向有水平-horizontal、垂直-vertical和both-默认)。
下面是基于MATLAB内置函数edge的边缘检测程序代码:
clear all;
close all;
clc;
gray_img = imread('moon.tif'); % 读取图像
edges_x = edge(gray_img, 'Sobel', 'horizontal'); % 水平方向边缘检测
edges_y = edge(gray_img, 'Sobel', 'vertical'); % 垂直方向边缘检测
edge_sobel = edges_x | edges_y; % 合并水平和垂直边缘
edge_prewitt=edge(gray_img,'prewitt');% 使用导数的普瑞维特逼近,通过寻找 I 的梯度最大的那些点来查找边缘。
edge_roberts=edge(gray_img,'roberts');%使用导数的罗伯茨逼近,通过寻找 I 的梯度最大的那些点来查找边缘。
edge_log=edge(gray_img,'Log');%使用高斯拉普拉斯 (LoG) 滤波器对 I 进行滤波后,通过寻找过零点来查找边缘。
edge_canny=edge(gray_img,'canny');%通过寻找 I 的梯度的局部最大值来查找边缘。edge 函数使用高斯滤波器的导数计算梯度。
%此方法使用双阈值来检测强边缘和弱边缘,如果弱边缘与强边缘连通,则将弱边缘包含到输出中。通过使用双阈值,
%坎尼方法相对其他方法不易受噪声干扰,更可能检测到真正的弱边缘。
figure,
subplot(2,3,1),imshow(gray_img),title('原始图像');
subplot(2,3,2),imshow(edge_sobel),title('sobel算子边缘检测结果');
subplot(2,3,3),imshow(edge_prewitt),title('prewitt算子边缘检测结果');
subplot(2,3,4),imshow(edge_roberts),title('roberts算子边缘检测结果');
subplot(2,3,5),imshow(edge_log),title('log算子边缘检测结果');
subplot(2,3,6),imshow(edge_canny),title('canny算子边缘检测结果');
四、结果与讨论
由程序运行结果可以看出,不同的边缘检测算子检测边缘效果并不相同,在MATLAB利用edge函数进行边缘检测中,如不指定方法默认Sobel方法进行检测。
如果大家觉得本文对大家的学习和科研有所帮助,请点赞、关注和收藏,欢迎大家转发!谢x谢大家!
相关文章:

图像边缘检测原理和常用检测算子及MATLAB实现
一、边缘和边缘检测的概念 图像边缘是指图像中灰度值发生急剧变化的地方,这些变化通常对应于图像中物体的轮廓、边界或纹理的突变处。在数字图像处理中,边缘是图像的一个重要特征,它包含了关于物体形状、位置和大小等关键信息。 边缘检测是数…...
企业经营数据分析系统:提升决策能力的利器
搭建企业经营数据分析系统是当今企业绕不开的话题,企业想要在竞争激烈的市场当中突围而出,需要对于企业内部的各种数据了然于胸,同时对于外部的数据也有敏锐的把握能力,因此企业构建自身的经营性数据分析系统就显得尤其重要。作为…...

【49】AndroidStudio构建其他人开发的Android项目
(1)做Android软件开发,通常会看一些其他人开发的项目源码,当将这些项目的源码通过git clone到本地之后,用AndroidStudio进行打开时,通常会遇到一些环境配置的问题。本文即用来记录在构建他人开发项目源代码这一过程中遇到的一些常…...
Oracle 数据库中SERIALLY_REUSABLE包是一种特殊的包类型
1、SERIALLY_REUSABLE 包概述 在 Oracle 数据库中,SERIALLY_REUSABLE包是一种特殊的包类型。这种包的目的是为了更有效地利用内存,特别是在高并发环境下。当一个会话调用SERIALLY_REUSABLE包中的过程或函数时,该包的状态(包括变量…...

css基础记录
基础 选择器 复合选择器 后代选择器 div p {}; 类似如上,找到div中所有的后代,注意是所有的后代 子代选择器 > div > a 只选择div的儿子中有a的 并集选择器 用逗号,分隔 p,div,span,h1 { … } 一般一行写一个 CSS元素显示模式 分为块元素,行内元素 块元素 特点…...
Python后端 -- 万字长文全面解析Django框架
自从2005年诞生以来,Django因其“开发速度快、安全性高”的特点迅速成为许多开发者的首选。无论是小型的个人项目,还是大型的企业应用,Django都能游刃有余地满足需求。我们将从Django的基础知识带你全面掌握Django,从基础知识到高…...

el-thee懒加载删除某条数据 ,el-thee懒加载重置,el-thee刷新某个节点
一、懒加载的tree已经全部展开,外部点击删除的时候不需要重新展开点击获取下一层数据 <template> <el-treeref"tree":data"treeData":props"defaultProps"render-after-expandhighlight-currentlazy:expand-on-click-node&q…...

【PyQt5教程 四】Qt Designer 样式表(styleSheet)实现基本小部件的自定义动态效果和资源浏览器背景添加方法
目录 一、成果演示: 二、样式表的使用方法: (1)样式表语法和属性: (2)样式表代码示例: (3)伪类和状态: (4)复合选择器ÿ…...

【git】--- 通过 git 和 gitolite 管理单仓库的 SDK
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【git】--- 通过 git 和 gitolite 管理单仓库的 SDK 开发环境一、安装配置 gitolite二…...

计算机网络之NAT、代理服务、内网穿透、内网打洞
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络之NAT、代理服务、内网穿透、内网打洞 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论…...

2024-金盾信安杯线上赛 WP
Misc 大赛宗旨 记事本打开,一眼零宽隐写 B 神工具一把梭,得到一串 base 编码 base64 解码得到 flag flag 值:flag{5d5555fa-1303-4b43-8eef-d6ea7c64c361} esab 根据题目 esab 可以发现这正是 base 的逆向,所以可以先逆向一下…...
MySQL 基础架构
MySQL的基础架构主要由三大核心部分构成,以下是详细的解析: 一、连接层 连接层是客户端与MySQL数据库之间的桥梁,主要负责通信和身份验证,确保数据交换的安全与稳定。具体来说,它负责以下任务: 建立连接…...

汽车升级到底应不应该设置“可取消“功能
最近,汽车OTA(Over-the-Air)升级频频成为车主讨论的热点。有些车主反映,一些升级增加了实用功能,而另一些却让体验变得复杂甚至带来不便。于是,大家不禁发问:汽车升级功能究竟应不应该允许“可取…...
【MySQL】mysql中的事务
目录 1、背景2、事务的特性3、事务之间的几种错误【1】脏读【2】不可重复读【3】幻读 4、事务中的隔离级别5、总结 1、背景 事务是存储引擎层面实现的,有的引擎支持事务,有的引擎不支持事务,我们常用的引擎InnoDB就支持事务,本文…...

大语言模型(LLM)与智能机器人的应用分析
系列文章目录 前言 近年来,大型语言模型(LLM)的集成彻底改变了机器人领域,使机器人能够以人类熟练程度进行交流、理解和推理。本文探讨了 LLM 对机器人的多方面影响,并针对在不同领域利用这些模型的关键挑战和机遇进行了研究。通过将 LLM 应用程序分类并分析核心机器人元素…...
Inno Setup 学习笔记(一)
前言 最近想把自己写的Windows端的软件打包成安装程序exe,又觉得自带的界面太丑了,想自己完全做一个新的页面 网上找到的只有基础教程,记录一下进阶学习过程 生命周期 按照Vue的说法叫生命周期,Inno Setup中叫 Pascal 脚本: 事…...
从阿里云EDM到美团云:典型微服务治理平台的实战经验分享
目录 一. 阿里云 EDM(Enterprise Distributed Application Service) 二. 腾讯云 TSF(Tencent Service Framework) 三. 华为云 FusionStage 四. 京东云 JDC(JD Cloud Microservice Platform) 五. 百度智…...

【接口自动化测试】一文从3000字从0到1详解接口测试用例设计
接口自动化测试是软件测试中的一种重要手段,它能有效提高测试效率和测试覆盖率。在进行接口自动化测试之前,首先需要进行接口测试用例的设计。本文将从0到1详细且规范的介绍接口测试用例设计的过程,帮助读者快速掌握这一技能。 一、了解接口…...

反向代理-缓存篇
文章目录 强缓存一、Expires(http1.0 规范)二、cache-control(http1.1 出现的 header 信息)Cache-Control 的常用选项Cache-Control 常用选项的选择三、弊端协商缓存一、ETag二、If-None-Match三、Last-modified四、If-Modified-Since浏览器的三种刷新方式静态资源部署策略…...

【伪代码】数据结构-期末复习 线性表
目录 例1 矩阵相乘 线性表 2.1 线性表的类型定义 例2-1 求并集 LALA∪LB 例2-2 有序表归并 2. 2 线性表的顺序表示和实现 1.构造空表 2.插入 3.删除 4.定位 顺序表的优点: 顺序表的缺点: 例…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...