当前位置: 首页 > news >正文

图像边缘检测原理和常用检测算子及MATLAB实现

一、边缘和边缘检测的概念

       图像边缘是指图像中灰度值发生急剧变化的地方,这些变化通常对应于图像中物体的轮廓、边界或纹理的突变处。在数字图像处理中,边缘是图像的一个重要特征,它包含了关于物体形状、位置和大小等关键信息。

边缘检测是数字图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。 这些包括:深度上的不连续、表面方向不连续、物质属性变化和场景照明变化。 边缘检测是数字图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。

图像的边缘确实具有幅值和方向这两个重要属性。边缘的幅值通常指的是边缘的强度或显著程度。它可以通过计算图像灰度梯度的幅值来得到。灰度梯度是一个向量,既有大小(即幅度)又有方向。在图像中,梯度的大小表示了像素值变化的快慢,即边缘的幅度。当边缘两侧的像素值差异较大时,边缘的幅值就较大,反之则较小。边缘的幅值特性在图像分割、特征提取和图像识别等任务中起着关键作用。通过检测边缘的幅值,可以确定哪些边缘是显著的,哪些边缘是较弱的,从而进一步处理和分析图像。边缘的方向指的是边缘的走向或趋势。在图像中,边缘通常表现为像素值在某一方向上急剧变化,而在另一与其正交的方向上变化相对平缓。这种方向性特征有助于识别和理解图像中的物体和场景。梯度的方向则表示了像素值变化最快的方向,即边缘的方向。通过检测边缘的方向,可以获得图像中物体的轮廓和形状信息,这对于后续的图像处理和分析非常重要。

边缘可以分为不同的类型,如阶跃型边缘、房顶型边缘和凸缘型边缘等,这些类型的边缘在灰度变化上表现出不同的特性。阶跃型边缘是指灰度值在一个很小的范围内发生很大的变化,形成明显的界限;房顶型边缘则是指灰度值先逐渐增加到一个最大值,然后再逐渐减少,形成一个像屋顶一样的形状;凸缘型边缘则是指灰度值先逐渐增加,然后突然减少到一个较低的值,再逐渐增加,形成一个凸起的形状。边缘检测算法通常利用图像灰度值的一阶或二阶导数来检测边缘。一阶导数可以反映灰度值的变化率,而二阶导数则可以反映灰度值变化率的变化,即曲率。常见的边缘检测算子,如Sobel算子、Prewitt算子、Roberts算子、Laplacian算子和Canny算子等,都是基于这些导数原理来设计的。

        在实际应用中,边缘检测算法的选择取决于图像的特性、噪声水平以及所需的边缘检测精度等因素。不同的算法有不同的优缺点和适用场景,因此需要根据具体情况进行选择和优化。

       图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。有许多方法用于边缘检测,它们的绝大部分可以划分为两类:基于查找一类和基于零穿越的一类。基于查找的方法通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向。基于零穿越的方法通过寻找图像二阶导数零穿越来寻找边界,通常是Laplacian过零点或者非线性差分表示的过零点。

二、常用的边缘检测算子

          数字图像处理中常用的边缘检测算子有多种,每种算子都有其独特的优缺点和适用场景。以下是对几种常用边缘检测算子的介绍:

df4a6dd1c13b420ab64ddfc83e78b192.png

21055b5400c74f18ac62081fbcbdf585.png

        大家请注意,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算子边缘检测结果');

四、结果与讨论

         e24ad687b48b4eafb4016df936600a6e.png

      由程序运行结果可以看出,不同的边缘检测算子检测边缘效果并不相同,在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已经全部展开&#xff0c;外部点击删除的时候不需要重新展开点击获取下一层数据 <template> <el-treeref"tree":data"treeData":props"defaultProps"render-after-expandhighlight-currentlazy:expand-on-click-node&q…...

【PyQt5教程 四】Qt Designer 样式表(styleSheet)实现基本小部件的自定义动态效果和资源浏览器背景添加方法

目录 一、成果演示&#xff1a; 二、样式表的使用方法: &#xff08;1&#xff09;样式表语法和属性&#xff1a; &#xff08;2&#xff09;样式表代码示例&#xff1a; &#xff08;3&#xff09;伪类和状态&#xff1a; &#xff08;4&#xff09;复合选择器&#xff…...

【git】--- 通过 git 和 gitolite 管理单仓库的 SDK

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

计算机网络之NAT、代理服务、内网穿透、内网打洞

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

2024-金盾信安杯线上赛 WP

Misc 大赛宗旨 记事本打开&#xff0c;一眼零宽隐写 B 神工具一把梭&#xff0c;得到一串 base 编码 base64 解码得到 flag flag 值&#xff1a;flag{5d5555fa-1303-4b43-8eef-d6ea7c64c361} esab 根据题目 esab 可以发现这正是 base 的逆向&#xff0c;所以可以先逆向一下…...

MySQL 基础架构

MySQL的基础架构主要由三大核心部分构成&#xff0c;以下是详细的解析&#xff1a; 一、连接层 连接层是客户端与MySQL数据库之间的桥梁&#xff0c;主要负责通信和身份验证&#xff0c;确保数据交换的安全与稳定。具体来说&#xff0c;它负责以下任务&#xff1a; 建立连接…...

汽车升级到底应不应该设置“可取消“功能

最近&#xff0c;汽车OTA&#xff08;Over-the-Air&#xff09;升级频频成为车主讨论的热点。有些车主反映&#xff0c;一些升级增加了实用功能&#xff0c;而另一些却让体验变得复杂甚至带来不便。于是&#xff0c;大家不禁发问&#xff1a;汽车升级功能究竟应不应该允许“可取…...

【MySQL】mysql中的事务

目录 1、背景2、事务的特性3、事务之间的几种错误【1】脏读【2】不可重复读【3】幻读 4、事务中的隔离级别5、总结 1、背景 事务是存储引擎层面实现的&#xff0c;有的引擎支持事务&#xff0c;有的引擎不支持事务&#xff0c;我们常用的引擎InnoDB就支持事务&#xff0c;本文…...

大语言模型(LLM)与智能机器人的应用分析

系列文章目录 前言 近年来,大型语言模型(LLM)的集成彻底改变了机器人领域,使机器人能够以人类熟练程度进行交流、理解和推理。本文探讨了 LLM 对机器人的多方面影响,并针对在不同领域利用这些模型的关键挑战和机遇进行了研究。通过将 LLM 应用程序分类并分析核心机器人元素…...

Inno Setup 学习笔记(一)

前言 最近想把自己写的Windows端的软件打包成安装程序exe&#xff0c;又觉得自带的界面太丑了&#xff0c;想自己完全做一个新的页面 网上找到的只有基础教程&#xff0c;记录一下进阶学习过程 生命周期 按照Vue的说法叫生命周期&#xff0c;Inno Setup中叫 Pascal 脚本: 事…...

从阿里云EDM到美团云:典型微服务治理平台的实战经验分享

目录 一. 阿里云 EDM&#xff08;Enterprise Distributed Application Service&#xff09; 二. 腾讯云 TSF&#xff08;Tencent Service Framework&#xff09; 三. 华为云 FusionStage 四. 京东云 JDC&#xff08;JD Cloud Microservice Platform&#xff09; 五. 百度智…...

【接口自动化测试】一文从3000字从0到1详解接口测试用例设计

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

反向代理-缓存篇

文章目录 强缓存一、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&#xff0e;构造空表 2&#xff0e;插入 3&#xff0e;删除 4&#xff0e;定位 顺序表的优点&#xff1a; 顺序表的缺点&#xff1a; 例…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…...