图像边缘检测原理和常用检测算子及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.定位 顺序表的优点: 顺序表的缺点: 例…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...