千家信息网

Matlab如何实现图像边缘提取

发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,这篇文章主要介绍了Matlab如何实现图像边缘提取,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是图像边缘所谓图像边缘(Edlge
千家信息网最后更新 2025年01月27日Matlab如何实现图像边缘提取

这篇文章主要介绍了Matlab如何实现图像边缘提取,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。


什么是图像边缘

所谓图像边缘(Edlge)是指图像局部特性的不连续性,例如,灰度级的突变,颜色的突变,纹理结构的突变等。边缘广泛存在于目标与目标、物体与背景、区域与区域(含不同色彩)之间,它是图像分割所依赖的重要特征。

小白今天主要介绍几种典型的图像灰度值突变的边缘检测方法,其原理也适用用于其他特性突变的边缘检测。图像的边缘通常与图像灰度的一阶导数的不连续性有关。图像灰度的不连续性可分为两类:阶跃不连续,即图像灰度在不连续处的两边的像素灰度有明显的差异。线条不连续,即图像灰度突然从一个值变化到另一个值,保持一个较小的行程又返回到原来的值。但是在实际中,阶跃和线条边缘图像是较少见的,由于空间分辨率(尺度空间)、图像传感器等原因会使阶跃边缘变成斜坡形边缘,线条边缘变成房顶形边缘。它们的灰度变化不是瞬间的而是跨越一定距离的。几种边缘类型,可以通过下面的图片有个更清晰的认识。

Sobel算子

在前面的关于图像滤波的讲解中,小白为大家介绍了sobel算子模板,但是没有讲解其具体作用。这次的讲解中,小白将为大家讲解什么是sobel算子。

sobel算子是一阶的梯度算子,也就是对信号求取一阶导数,对噪声具有平滑作用,提供较为精确的边缘方向信息,但是边缘定位精度不够高;但是该种方法比较简单,容易实现,也比较容易理解。

对一个连续函数求导是一件比较容易的事情,但是图像中的数据都是数字化之后的数据,是离散的,因此对于求导就需要使用差分方式:前面的像素灰度值减去后面像素的灰度值,并将结果大于一定阈值的设为边缘,否则就不是边缘。我们用数学公式表示就是:I(x,y)-I(x-n,y)。公式给出的是两个像素在同一行中,两个像素也可以在同一列中,而且方向也可以更改。

根据之前的模板来看的话,只有一个维度的求导可以用如下的模板表示:

可以用上面两个模板分别对原图像求取横着和竖着边缘,之后对两者求并集,便是图像整体的边缘。但是细心的小伙伴肯定会发现,模板之后两个元素,以哪个元素作为模板的中心呢?为了解决这个问题,研究者将其进行了扩展,变为以下的模板:

模板长度变为奇数便可以解决模板没有"中心"的问题。后续经过各种演化,最终变为前面几讲中提到的模板的样子。小伙伴在使用的过程中可以直接使用其模板就可以,而且Matlab也是带有sobel边缘提取的函数,不需要小伙伴自己编写复杂的程序。

常用的sobel边缘提取模板


Roberts算子


其实很多种算子都借鉴了sobel方法的思想,Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。我们直接给出Roberts算子的模板:

通过模板我们也能看出来,该算法是采用检测斜着方向的梯度变化来判定图像的边缘。

Canny算子

Canny算子是目前边缘检测最常用的算法,效果也是最理想的。但是Canny边缘检测算法不是简单的模板卷积而已,通过梯度方向和双阈值法来检测边缘点,具体算法讲解,可以通过点击"原文阅读"来了解更多:

Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。

Matlab边缘提取

Matlab提供多种边缘检测方法,通过函数edge(image,'method')来实现图像的边缘提取,通过修改参数'method'来实现不同滤波方法。具体的边缘检测代码如下:

I=imread('lena.bmp');%  提取图像
I=rgb2gray(I);%将彩色图转换灰度图
BW1=edge(I,'sobel'); %用SOBEL算子进行边缘检测
BW2=edge(I,'roberts');%用Roberts算子进行边缘检测
BW3=edge(I,'prewitt'); %用prewitt算子进行边缘检测
BW4=edge(I,'log'); %用log算子进行边缘检测
BW5=edge(I,'canny'); %用canny算子进行边缘检测
subplot(2,3,1), imshow(BW1);
title('sobel edge check');
subplot(2,3,2), imshow(BW2);
title('roberts edge check');
subplot(2,3,3), imshow(BW3);
title('prewitt edge check');
subplot(2,3,4), imshow(BW4);
title('log edge check');
subplot(2,3,5), imshow(BW5);
title('canny edge check');

将上述代码复制到Matalb里,把图像地址改成自己想要提取边缘的图像,运行之后便可的得到图像边缘。小白在自己的电脑上运行程序的结果如下图。在程序里也利用其他算子提取了边缘,方便小伙伴的对比。


感谢你能够认真阅读完这篇文章,希望小编分享的"Matlab如何实现图像边缘提取"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

边缘 图像 算子 检测 模板 灰度 方法 像素 两个 小伙 小伙伴 方向 算法 篇文章 小白 不同 不连续性 函数 梯度 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 工业园区知名服务器厂家直销价格 徐汇区企业网络技术服务郑重承诺 沧州工贸学校计算机网络安全 东营瓷砖库存软件开发 软件开发中错误英文 软件开发学费大概多少 ftp服务器管理实训心得 iocp高并发服务器 互联网贷款金融科技应用 数据库的安全防范对象 浙江防爆刀片服务器哪家好 上海游族网络技术 钱玉杰 趣秒荟互联网科技有限公司 改mysql数据库端口号 数据库系统安全规范 成都实名制软件开发公司 vf数据库提示类型不匹配 德州crm软件开发 网络安全访问控制的三种模式 信捷软件开发招聘 下列是全文数据库的 网络安全海报标题字体 三星电子软件开发笔试题 软件开发领导总让换项目组 软件开发测试职高 和平精英登入显示无法连接服务器 南华大学计算机数据库笔试题 辽宁网络安全宣传周在沈阳 网络安全教育广播稿四百字 服务器与电脑设置局域网
0