matlab边缘轮廓提取中图像边缘提取出来后怎么使用?

20328人阅读
图像处理(10)
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算子提取');
&图&微分算子边缘检测结果
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算子边缘检测结果
(注意:代码中有一些标点是中文模式,若输入代码后标点显示红色,则为中文标点,改回来就行了)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1429925次
积分:16776
积分:16776
排名:第356名
原创:239篇
转载:705篇
评论:98条
(3)(1)(2)(1)(6)(2)(4)(3)(3)(7)(5)(28)(4)(18)(20)(12)(6)(6)(5)(9)(5)(5)(7)(7)(7)(1)(2)(7)(10)(23)(5)(44)(31)(29)(39)(93)(18)(14)(72)(7)(28)(48)(41)(25)(14)(1)(4)(11)(9)(14)(7)(7)(8)(5)(1)(24)(20)(18)(7)(16)(7)(41)(13)(9)君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
MATLAB在对图像进行边缘检测方面的作用
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口我知道matlab 中 edge 函数可以提取图像的边缘,进一步,matlab 中有提取图像特征点的函数吗?---------------------谢谢您的阅读与回复
本人恰巧正在做角点的提取与匹配,特征点有很多种,看是基于区域还是边缘,先是要检测特征点,这个主要是利用微分,然后再提取,貌似没有现成的函数,这个给你参考一下,效果还可以%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Harris提取算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clc, filename='camera2.bmp'; X= imread(filename); % 读取图像 Info=imfinfo(filename); %这个要习惯用% f=rgb2gray(X); f=X; ori_im=double(f)/255; %unit8转化为64为双精度double64 fx = [-2 -1 0 1 2]; % x方向梯度算子(用于Harris角点提取算法) Ix = filter2(fx,ori_im); % x方向滤波 善于使用filter% fy = [5 8 5;0 0 0;-5 -8 -5]; % 高斯函数一阶微分,y方向(用于改进的Harris角点提取算法) fy = [-2;-1;0;1;2]; % y方向梯度算子(用于Harris角点提取算法) Iy = filter2(fy,ori_im); % y方向滤波 Ix2 = Ix.^2; Iy2 = Iy.^2; Ixy = Ix.*Iy; clear Ix; clear Iy; %消除变量哈h= fspecial('gaussian',[10 10 ],2); % 产生7*7的高斯窗函数,sigma=2 Ix2 = filter2(h,Ix2); Iy2 = filter2(h,Iy2); Ixy = filter2(h,Ixy); %分别进行高斯滤波height = size(ori_im,1); width = size(ori_im,2); result = zeros(height,width); % 纪录角点位置,角点处值为1 ,背景都是黑色的哈R = zeros(height,width); Rmax = 0; % 图像中最大的R值 以便设置门限for i = 1:height for j = 1:width M = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)]; %2*2的矩阵 R(i,j) = det(M)-0.06*(trace(M))^2; % 计算R ,求得RMAX,看来是整体求得的,角点响应函数if R(i,j) > Rmax Rmax = R(i,j);
cnt = 0; %记录点数的for i = 2:height-1 for j = 2:width-1 % 进行非极大抑制,窗口3*3 if R(i,j) > 0.01*Rmax && R(i,j) > R(i-1,j-1) && R(i,j) > R(i-1,j) && R(i,j) > R(i-1,j+1) && R(i,j) > R(i,j-1) && R(i,j) > R(i,j+1) && R(i,j) > R(i+1,j-1) && R(i,j) > R(i+1,j) && R(i,j) > R(i+1,j+1) result(i,j) = 1; cnt = cnt+1;
% % i=1; % for j=1:height % for k=1:width % if result(j,k)==1; % corners1(i,1)=j; % corners1(i,2)=k; % i=i+1; % % % [posc,posr] = find(result == 1); cnt % 角点个数 imshow(ori_im*255) %和 X的效果是一样的
plot(posr,posc,'g+');
为您推荐:
其他类似问题
扫描下载二维码Matlab图像边缘检测后如何提取所需区域?就是在边缘算子得到边缘后,如何在原图上得到这片区域我做的是虹膜提取,已经用sobel算子得到了虹膜的外边界,如何根据得到的边缘图像在原灰度图像截取出虹膜的部分
虹膜外边界的里面就是虹膜吗?虹膜还有内边界?我觉得你努力的方向应该是在灰度图中处理下,将灰度图分割好,至少要把虹膜外边界两边分出来,两边灰度肯定不一样,你肯定有办法.然后将边缘图跟灰度处理结果结合起来处理.以上实际上我是按照将区域生长和边缘检测结合的思想给你的建议,我的论文就是这个,我认为是可以分出来的.
内边界瞳孔的部分我已经用二值化检测出来了,外边界的话就是这个图,我查到一个方法是用hough变换继续提取外边界成圆,然后再在原灰度图像进行图像提取,我本来的想法是确定内外两圆的坐标,然后根据坐标点距离小圆心大于小半径,同时距离大圆心小于大半径的坐标灰度不变,其他点灰度变为255,提取,这种能达到吗,你说的区域生长法又是什么意思呢?请帮帮忙啊,最好是有个程序给我啊,拜托了
理论上能不能达到,值不值得花时间去试,要问你的导师;实际能不能实现,看你编程能力。你的思路个人觉得不算提取,像是在图片上蒙上了圆环,只要是圆环内的,都算目标。只根据坐标而不涉及(检查)该点的灰度特性,总觉得别扭。区域生长就是从一个种子出发,检测它的4领域或8邻域,如果他们和种子特性一致,就合并到同一类,然后把原来的种子标记已处理,新种子放入栈中,然后从栈中取出新种子,重复直至栈空,生长结束后就得到一个区域。如果非要把这个区域单独提取出来,首先这个区域的灰度是一致的,可以利用,如果担心图中其他部分有同样灰度的点,那么在生长过程中就要做标记了。如果虹膜的内外边界之间的部分灰度特性非常一致,只要一个种子点就行了。如果内部差异太大,就要边缘检测,检测出内外边界,让种子生长终止的条件改为遇到边界,问题是边缘检测得到的一般不是闭合边界,既然你能得到闭合的边界,就没问题了。
为您推荐:
其他类似问题
扫描下载二维码&&欢迎来到论文网!
论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台,。
您当前的位置:&>&&>&
①soble缺省值,用导数的Sobel近似值检测边缘,梯度最大点返回边缘;
  ②prewitt用导数的Prewitt近似值检测边缘,梯度最大点返回边缘;
  ③roberts用导数的Roberts近似值检测边缘,梯度最大点返回边缘;
  ④log使用高斯滤波器的拉普拉斯运算对I进行滤波,通过寻找零相交检测边缘;
  ⑤zerocross使用指定的滤波器对I滤波后,寻找零相交检测边缘;
  ⑥canny用导数计算图像的两个阈值,大于高阈值为边缘,小于低阈值为非边缘。
  (2)thresh表示该图像边缘提取方法所采用的阈值,所有小于阈值的图像边缘都被忽略,缺省时自动选取阈值;
  (3)direction表示所采用方法指定方向,具有方向时才使用。direction为字符串,其中horizontal表示水平方向、vertical表示垂直方向、both表示两个方向(缺省值);
  2)[BW, thresh]=edge(&)表示对图像边缘提取所返回的二进制图像和阈值。
  3.2图像的边缘提取
  图像采用罗伯特算子、拉普拉斯算子、零交叉、Sobel算子、Prewitt算子和Canny算子等方法对其边缘提取,以2000年摄影的珠江三角洲图像为例,编程如下:
  3.2.1编程
  I=imread('.jpg'); %读取图像
  I1=im2double(I);%将彩图序列变成双精度
  I2=rgb2gray(I1);%将彩色图变成灰色图
  [thr, sorh,keepapp]=ddencmp('den','wv',I2); I3=wdencmp('gbl',I2,'sym4',2,thr,sorh,keepapp);%小波除噪
  I4=medfilt2(I3,[99]); %中值滤波
  I5=imresize(I4,0.2,'bicubic'); %图像大小BW1=edge(I5,'sobel'); %sobel图像边缘提
  BW2=edge(I5,'roberts'); %roberts图像边缘提取
  BW3=edge(I5,'prewitt'); %prewitt图像边缘提取
  BW4=edge(I5,'log'); %log图像边缘提取BW5=edge(I5,'canny'); %canny图像边缘提
  h=fspecial('gaussian',5); %高斯滤波
  BW6=edge(I5,'zerocross',[],h); %zerocross图像边缘提取
  subplot(1,3,1); %图划分为一行三幅图,第一幅图
  imshow(I2);%绘图
  title('原始图像'); %标注
  subplot(1,3,2); %第二幅图
  imshow(I3);
  title('消噪后图像');
  subplot(1,3,3);%第三幅图
  imshow(I4);
  title('中值滤波图像');
  subplot(1,3,1);
  imshow(BW1);
  title('Sobel算子');
  subplot(1,3,2);
  imshow(BW2);
  title('Roberts算子');
  subplot(1,3,3);
  imshow(BW3);
  title('Prewitt算子');
  subplot(1,3,1);
  imshow(BW4);
  title('log算子');
  subplot(1,3,2);
  imshow(BW5);
  title('Canny算子');
  subplot(1,3,3);
  imshow(BW6);
  title('Zerocross');
  3.2.2结果分析
  图像采用Sobel算子、Roberts算子、Prewitt算子、LOG算子、Canny算子与零交叉方法等进行边缘提取,仿真如图3、4、5。
  图3 原始图像与消噪图像图案4 三种算子的边缘提取图
  图5三种算子的边缘提取图
  从上图中可以看出,Sobel算子对灰度渐变的图像处理效果较好,但是对变化不大的部位处理效果差以及边缘定位不准确;Roberts算子对具有陡峭的低噪声的图像处理效果较好,但是提取的边缘比较粗,因此对边缘的定位不是很准确;Prewitt算子对灰度渐变的图像处理效果较好,但是提取的图像边缘的间断点较多;LOG算子比前面几种方法要好,但是边缘的间断点也较多;Canny方法不容易受噪声干扰,能够检测到真正的弱边缘,原因是它使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,可以将弱边缘包含在输出图像中,但是与原始图像比较,所提取的边缘仍然存在不完整,且有丢失的现象;Zerocross方法提取的边缘与原始图像相比,比较完整,优于其它几种方法。论文发表。
  4、结论
  采用罗伯特算子、拉普拉斯算子、Sobel算子、Prewitt算子、Canny算子和零交叉方法对图像边缘进行提取,并对这几种方法的结果进行分析与比较,发现零交叉方法对图像边缘的提取优于其它几种方法,能够比较完整的显示图像的整个边缘,这为今后深入研究图像边缘的提取提供了有益的参考和帮助。同时还表现出Matlab具有强大的图像处理功能,为图像处理技术的深入研究提供有利的工具保障。
参考文献:
[1]郝文化主编. MATLAB图像图形处理应用教程[M]. 北京:中国水利水电出版社,2003
[2]许志影, 李晋平.MATLAB及其在图像处理中的应用[J].江西:计算机与现代化,):64~65
[3]余成波编著. 数字图像处理及MATLAB实现[M].重庆:重庆大学出版社,2003
[4]飞思科技产品研发中心编著. Matlab6.5辅助图像处理[M]. 北京:电子工业出版社,2003
查看相关论文专题: &
-------------------------------------------------------------------------
上一篇论文:
下一篇论文:
相关计算机论文
最新计算机论文
读者推荐的计算机论文
热门:&&&&

我要回帖

更多关于 matlab边缘提取 的文章

 

随机推荐