基于matlab边缘提取的几种方法的比较

奔跑着的国风 奔跑着的国风     2022-12-06     221

关键词:

1、Matlab简述

Matlab是国际上最流行的科学与工程计算的软件工具,它起源于矩阵运算,已经发展成一种高度集成的计算机语言。有人称它为“第四代”计算机语言,它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化界面设计、便捷的与其它程序和语言接口的功能。随着Matlab语言功能越来越强大,不断适应新的要求并提出新的解决方法,可以预见,在科学运算,自动控制与科学绘图领域,Matlab语言将长期保持其独一无二的地位。

2、几种常用的边缘检测算子

边缘是图像的最重要的特征,。边缘是指周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。边缘检测主要是灰度变化的度量、检测和定位。有很多种不同的边缘检测方法,同一种方法使用的滤波器也不尽相同。图像边缘检测就是研究更好的边缘检测方法和检测算子。

边缘检测的基本思想首先是(1)利用边缘增强算子,突出图像中的局部边缘,(2)然后定义象素的“边缘强度”,通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。因此,边界检测包括两个基本内容:

i.         用边缘算子提取出反映灰度变化的边缘点集

ii.        在边缘点集合中剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线

常用的检测算子有微分算子、拉普拉斯高斯算子和canny算子。

在Matlab图像处理工具箱中,提供了edge函数利用以上算子来检测灰度图像的边缘。

2.1微分算子法

   经典的边缘提取方法是考察图像的每个像素的某个邻域内灰度的变化,利用边缘邻近一阶或二阶方向导数变化规律,用简单的方法检测边缘,称为微分算子法

导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值较高,因此我们将图像的导数算子运算值作为相应的边界强度,所以可以通过对这些导数值设置阈值,提取边界的点集。

一阶导数是最简单的导数算子。已知在点f(x,y)处,梯度grad(F(x,y))的幅度为:



它们分别求出了灰度在x和y方向上的变化率,但是要对每一个像素进行以上的运算,运算量较大,所以在实际应用中常用小区域模板卷积运算来进行近似计算。模板运算的想法是将赋予某一个像素的值作为它本身灰度值和相邻象素灰度值的函数。运用中,对x,y方向各用一个模板。

2.1.1 Sobel算子

Sobel算子是滤波算子的形式来提取边缘。X,Y方向各用一个模板,两个模板组合起来构成1个梯度算子。X方向模板对垂直边缘影响最大,Y方向模板对水平边缘影响最大。


图1 Sobel算子模板

2.1.2 robert算子

   Robert算子是一种梯度算子,它用交叉的差分表示梯度,是一种利用局部差分算子寻找边缘的算子,对具有陡峭的低噪声的图像效果最好:

模板如图:

                  

    

图2 Robert算子模板


2.1.3 prewitt算子 

   prewitt算子是加权平均算子,对噪声有抑制作用,但是像素平均相当于对图像进行地同滤波,所以prewitt算子对边缘的定位不如robert算子。模板如图;

     

图3 prewitt算子模板

代码如下:

原始图像为三位编织复合材料二维截面图,对原始图像进行前期处理

i=imread('d1.jpg');

i2=im2double(i);

ihd=rgb2gray(i2);

[thr,sorh,keepapp]=ddencmp('den','wv',ihd);

ixc=wdencmp('gbl',ihd,'sym4',2,thr,sorh,keepapp);

figure,imshow(ixc),title('消噪后图像 ');

k2=medfilt2(ixc,[7 7]);

figure,imshow(k2),title('中值滤波');

isuo=imresize(k2,0.25,'bicubic');

  

%sobert、robert和prewitt算子检测图像边缘

esobel=edge(isuo,'sobel');

erob=edge(isuo,'roberts');

eprew=edge(isuo,'prewitt');

subplot(2,2,1);

imshow(isuo);title('前期处理图像');

subplot(2,2,2);

imshow(esobel);title('sobel算子提取');

subplot(2,2,3);

imshow(erob);title('roberts算子提取');

subplot(2,2,4);

imshow(eprew);title('prewitt算子提取');


 图4 微分算子边缘检测结果

2.2 Laplacian算子
   拉普拉斯高斯算子是一种二阶导数算子,将在边缘处产生一个陡峭的零交叉。前面介绍的几种梯度法具有方向性,不能对各种走向的边缘都具有相同的增强效果。但是Laplacian算子是各向同性的,能对任何走向的界线和线条进行锐化,无方向性。这是拉普拉斯算子区别于其他算法的最大优点。

对一个连续函数,它在位置的拉普拉斯算子定义如下:


在图像边缘检测中,为了运算方便,函数的拉普拉斯高斯算子也是借助模板来实现的。其模板有一个基本要求:模板中心的系数为正,其余相邻系数为负,所有系数的和应该为零。


      5 Laplacian算子模板

2.3  Canny边缘检测法

     Canny边缘检测是一种比较新的边缘检测算子,具有很好的边缘监测性能,在图像处理中得到了越来越广泛的应用。它依据图像边缘检测最优准则设计canny边缘检测算法:

(1)       首先用2D高斯滤波模板进行卷积以消除噪声

(2)       利用导数算子找到图像灰度地沿着两个方向的偏导数,并求出梯度的大小:  

(3)       利用(2)的结果计算出梯度的方向

(4)       一旦知道了边缘的方向,就可以把边缘的梯度方向大致分为四种:水平、竖直、45度方向、135度方向。通过梯度的方向,就可以找到这个像素梯度方向的邻接像素。

(5)       遍历图像,若某个像素的灰度值与其梯度方向上前后两个像素的灰度值相比不是最大的,那么这个像素值置为0,即不是边缘。

(6)       使用累计直方图计算两个阈值,大于高阈值的一定是边缘,小于低阈值的一定不是边缘,介于之间的,看这个像素的邻接像素中有没有超过高阈值的边缘像素,如果有的话那么它

就是边缘了,否则它就不是边缘。

调用Laplacian算子、canny算子检测法检测图像边缘的程序如下:

elog=edge(isuo,'log');

ecanny=edge(isuo,'canny');

subplot(1,2,1);

imshow(elog);title('log算子提取');

subplot(1,2,2);

imshow(ecanny);title('canny算子提取');

图6 canny算子、Laplacian算子检测结果

3.边缘检测结果比较

Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。

Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,sobel算子对边缘定位不是很准确,图像的边缘不止一个像素。

Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好。但边缘较宽,而且间断点多。

Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。

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

参考文献

[1] 赵春晖.现代图像处理技术及Matlab实现[M].北京:人民邮电出版社,2001.

[2] 阮秋琦.数字图像处理学[M].北京:电子工业出版社,2001.

[3] 何斌.数字图像处理[M].北京:人民邮电出版社,2001


I=imread('lena.bmp');%  提取图像

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算子进行边缘检测

h=fspecial('gaussian’,5);

BW6=edge(I,’canny’);

subplot(2,3,1), imshow(BW1);

title(‘sobel edge check’);

subplot(2,3,2), imshow(BW2);

title(‘sobel 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’);

subplot(2,3,6), imshow(BW6);

title(‘gasussian&canny edge check’);%此为用高斯滤波后Canny算子边缘检测结果

(注意:代码中有一些标点是中文模式,若输入代码后标点显示红色,则为中文标点,改回来就行了)


毕设题目:matlab图像边缘检测

...实现原理并对比验证了不同算法的优缺点,分析了近年来基于深度学习的主要检测方法中的关键技术,并对边缘检测技术的发展方向进行了展望。2现成案例(代码+参考文献)1【边缘检测】基于matlab蚁群算法图像边缘检... 查看详情

图像边缘检测基于matlab灰度图像的积累加权边缘检测含matlab源码2010期(代码片段)

一、基于灰度图像的积累加权边缘检测方法简介1引言在图像分割中,边缘检测方法是人们研究得最多的方法,它试图通过检测包含不同区域的边缘来解决图像分割问题。图像的大部分主要信息都存在于图像的边缘中,主要表现为图... 查看详情

边缘检测算子和小波变换提取图像边缘matlab

  Roberts边缘检测算子:根据一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差。      小波变换的方法比较适用于展现夹带在正常信号中的瞬间反常现象,具有方向敏感... 查看详情

matlab读取cvs文件的几种方法

matlab读取CVS文件的几种方法:1,实用csvread()函数 csvread()函数有三种使用方法:1、M=csvread(‘filename‘)2、M=csvread(‘filename‘,row,col)3、M=csvread(‘filename‘,row,col,range)第一种方法中,直接输入文件名,将数据读到矩阵M中。这里要... 查看详情

图像匹配的算法

...分成关系结构匹配方法、结合特定理论工具的匹配方法、基于灰度信息的匹配方法、基于亚像元匹配方法、基于内容特征的匹配方法五大类型基于内容特征的匹配首先提取反映图像重要信息的特征,而后以这些特征为模型进行匹... 查看详情

oracle删除表的几种方法及其比较

删除表(记录和结构)的语名delete ———— truncate   ————dropDELETE(删除数据表里记录的语句)  DELETEFROM表名WHERE条件;  注意:删除记录并不能释放ORACLE里被占用的数据块表空间.它只把那些被删除的数据块... 查看详情

java中的几种比较器,对象比较,二维数组排序

Java中的几种比较器一般涉及到对象数组的排序时,我们需要比较数组中的对象进行我们想要的排序。情况一对象简单,仅仅只是比较两个引用指向同一个对象,对象的地址是否相同。用“==”即可实现情况二如... 查看详情

图像边缘提取简介

目录1.基于形态学的边缘检测2.基于小波变换多尺度分析的边缘检测3.基于小波包分解的边缘检测4.常用边缘提取算子4.1 拉普拉斯算子4.2 LOG算子4.3 Canny算子    边缘提取,指数字图像处理中,对于图片轮廓的一个处理... 查看详情

java中的几种比较器,对象比较,二维数组排序(代码片段)

Java中的几种比较器一般涉及到对象数组的排序时,我们需要比较数组中的对象进行我们想要的排序。情况一对象简单,仅仅只是比较两个引用指向同一个对象,对象的地址是否相同。用“==”即可实现情况二如... 查看详情

for循环的几种比较

对一个集合遍历的3种方法:1、for(inti=0;i<list.size();i++)2、for(inti=0,len=list.size();i<len;i++)3、for(int num:list)相对来说效率3>2>1,foreach遍历相对于for便利来说效率高,第一种方法每次循环都执行一遍list.size(),即使size函数里面... 查看详情

matlab绘图笔记——画立方体的几种方法(代码片段)

方法1:functionplotcube(varargin)%PLOTCUBE-Displaya3D-cubeinthecurrentaxes%%PLOTCUBE(EDGES,ORIGIN,ALPHA,COLOR)displaysa3D-cubeinthecurrentaxes%withthefollowingproperties:%*EDGES:3-elementsvectorth 查看详情

三栏布局的几种方法(代码片段)

...定的情况下,左右各留出300px,中间自适应,可以有以下的几种写法。比较常见的有浮动布局和绝对定位布局,但是flex布局现在也非常普遍了,Grid布局可能兼容性不太好,但也不失为一种方法。因为下面的css代码中有许多的相... 查看详情

关于用matlab处理图像的问题,如何将下进行边缘提取,得到比较清晰的轮廓,最好是能寻找到偏心孔的坐标

可以联系我哈474323571用MATLAB处理图片除了提到的“灰度(转换)”去除噪声,如果就直接二值化得话,对于一副对比度不大的图片,是不容易清楚地区分的。可以试试灰度拉伸,灰度值均衡化,自适应阈值分割等图像增强的方法... 查看详情

vue基于elementui设置表格动态高度的几种方法

参考技术A这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要使用calc来设置高度,然后给表格设置:height="tableH"的属性最外层div高度的设置方法动态获取表格高度tableH的方... 查看详情

matlab从入门到精通-常用的几种缺失值处理方法

...小伙伴可自行订阅,你的支持就是我不断更新的动力哟!MATLAB-30天带你从入门到精通MATLAB深入理解高级教程(附源码)tableau可视化数据 查看详情

重构之--重新组织函数的几种方法

...ExtractMethod(提炼函数)解释:一个函数中有部分代码可以被提取出来单独抽成一个函数,并起一个能表达函数用途的函数名,这就是提炼函数(一个大函数可以提出很多小函数)如:原函数voidPrintOwing(doubleamount){PrintBa 查看详情

java中定义常量(constant)的几种方法

...兴趣加浪尖微信。 常量使用目的1,为什么要将常亮提取出来?2,提取出来怎么定义,定义在interface中,还是class中?有什么区别?1)常亮提取出来有利于代码阅读,而且下次再做这种判断不用手写或复制,直接通过常量类... 查看详情

建筑物高度数据的获取的几种方法

1)从影像中直接提取建筑物高度以及其他信息。其优点是效率高,但是目前还不适合大批量数据的自动处理。(2)用激光雷达结合空中影像,提取数字表面模型。其优点是获取速度快,缺点是后续处理工作量大,费用可观。(3... 查看详情