图像边缘检测原理和常用检测算子及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.定位 顺序表的优点: 顺序表的缺点: 例…...
JavaWeb学习、过滤器、ajax异步请求、json、jquery-api文档
一、过滤器: 按照过滤规则筛选出想要的资源。 为什么使用过滤器? 1. 很多地方都需要判断是否登录。如果我们在每个资源出进行判断,非常麻烦。我们可以使用过滤器在访问这些资源前进行判断。 (这样就不用在主界面,修改…...
深入探索 JVM:原理、机制与实战
一、JVM 概述 JVM(Java Virtual Machine)是 Java 程序运行的核心组件,它提供了一个独立于硬件和操作系统的执行环境,使得 Java 程序能够在不同平台上具有跨平台的特性。 JVM 主要由以下几部分组成: 类装载器…...
JavaWeb学习(3)(Servlet详细、Servlet的三种实现方式(面试)、Servlet的生命周期、传统web.xml配置Servlet(了解))
目录 一、Servlet详细。 (1)基本介绍。 (2)基本作用。 1、接收客户端请求数据。 2、处理请求。 3、完成响应结果。 二、Servlet的三种实现方式。 (1)实现javax.servlet.Servlet接口。 1、基本介绍。 2、代码…...
支付宝租赁小程序助力便捷生活新方式
内容概要 支付宝租赁小程序为现代人带来了许多惊喜,它不仅仅是一个简单的租赁平台,更是生活中不可或缺的好帮手。想象一下,无论你缺少什么,从工具到家居用品,只需轻轻一点,便能轻松找到需要的物品。这个小…...
Linux-ubuntu环境配置
一,安装VWware,里面导入镜像文件 这些都是文件夹里面有的,然后对着正点原子视频安装就行,虚拟机的破解码,去百度搜一个能用就行,中间遇见俩问题。①乌班图里面不能上网,②插入U盘后,…...
深入解析下oracle的number底层存储格式
oracle数据库中,number数据类型用来存储数值数据,它既可以存储负数数值,也可以存储正数数值。相对于其他类型数据,number格式的数据底层存储格式要复杂得多。今天我们就详细探究下oracle的number底层存储格式。 一、环境搭建 1.…...
nginx代理rabbitmq和配置 Nginx 代理达梦数据库
在 Nginx 中使用 stream 模块进行 TCP 代理时,可以将 TCP 或 UDP 流量转发到指定的后端服务器。你给出的配置是一个用于代理 RabbitMQ 的示例,具体是在 TCP 层上代理 5672 端口的流量。 只能在nginx.conf配置上代理 stream {# 定义 upstream,…...
汉语唤醒词的模糊判断(Python)
汉语唤醒词的模糊判断【Python】 说明安装库代码Demo其他 说明 这是一个简单的汉语模糊唤醒词的判断器,汉语发音中前后舌以及声母韵母的区别,如果进行精准判断,很容易误判。需要一个模糊判断的逻辑! 安装库 pip install pypinyin代码Demo …...
Redis篇-2--原理篇1--I/O多路复用机制(5种I/O模型,I/O多路复用)
I/O多路复用机制: Redis 是通过I/O多路复用机制来管理大量客户端连接。这使得redis可以实现通过单线程来处理多个客户端连接的请求,避免了为每个客户端创建独立的线程,从而减少了上下文切换的开销,提高了系统的并发性和性能。 理解…...
Knowledge Graph Studio:让知识图谱构建更简单、更智能
一、前言 上周和研究院的同事讨论 2025 年大模型产品规划时,让我产生了一些疑惑和不解,因为从大家交流的规划方向来看,更多的还是集中在Prompt提示词工程(包括提示词的管理、测试、评估、调优)这一块规划的确实挺细&a…...
网站网页直播怎么做的/广告推广赚钱
4-3 AutoGraph的使用规范 文章目录4-3 AutoGraph的使用规范一,Autograph编码规范总结二,Autograph编码规范解析有三种计算图的构建方式:静态计算图,动态计算图,以及Autograph。 TensorFlow 2.0主要使用的是动态计算图…...
现在如何给网站做外链/国外服务器免费ip地址
Dubbo3的简单学习 Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力࿰…...
亚马逊外贸网站如何做/衡阳seo优化
scrapy是基于python的开源爬虫框架,功能极其强大,扩展性好,几十行代码就可以实现强大的python爬虫。 自己在windos下进行的安装,出现无数次ng,下面会有指出。安装前提要求: 1.python安装好,并配…...
石家庄做网站费用/网络推广推广
本节我们要做的是 项目列表页面的删除功能: 我们先看删除按钮: 首先我们设计一个js函数,让其点击之后触发删除功能,为了防止误删,所以要有个确认的对话框。 先在底部新建一个script用来存放js删除函数。 我这里取名叫做delete_project了。现在我们要想一件事,就是当用户…...
福州企业网站建站系统/外贸推广代理
1.返回引用,使其可以连续调用 2.参数使用引用传递 3.分配内存前先释放自身已有的空间 4.判断是否与自身同一个实例 5.考虑申请内存时内存不足的情况 class CMyStringPrim { public:CMyStringPrim(char * pData NULL){if(pData nullptr){m_pData new char[1];m_p…...
殡葬类网站建设/免费注册个人网站
Ideaprotobuf-maven-plugin插件编译proto文件,自动生成客户端和服务端代码首先,定义test.proto文件,官网样例如下syntax "proto3";//请在非空非注释的第一行指定当前文件使用的是proto3的语法,默认proto2package grpc;//package与java_packag…...