摘 要
在边缘检测是图像处理和计算机视觉中的基本问题,它的目的是标识出数字图像中亮度变化明显的点。图像经过边沿检测处理之后,不仅大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。
事实上,边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,这些点给出了图像轮廓的位置。这些轮廓常常是我们在图像边缘检测时,所需要的非常重要的一些特征条件,这就需要我们对一幅图像检测并提取出它的边缘。
可用于图像边缘检测和轮廓提取的方法有很多,其中包括有常见的Robert 边缘算子、Prewitt 边缘算子、Sobel 边缘算子等等。本文首先将会从数字图像处理的角度,对几种边缘检测算法进行详细的分析,然后会并选择其中一种边缘检测算法进行实验。考虑到以后进一步的学习,本文将会使用MATLAB对算法进行实现。最后,本文将会把实验获得的实际效果,与理论分析的结果进行比对,并以此对本次实验进行总结。
关键字:边缘检测 轮廓提取 图像处理 matlab
1.3 论文的内容与结构
1.3.1 研究内容
本文就数字图像的边缘检测算法研究主要介绍了五种方法,分别为:Robert算子,Laplacian算子,Prewitt算子,Canny算子以及Sobel算子的“中心思想”以及实现方法、适用范围。除此之外还设计了简单的GUI界面,GUI界面可以使五种算法达到的效果对比更条理清楚,更直观的体现出五种算法的特点以及优劣。最后将五种算法程序融入到整个系统中,经过优化,调试程序以达到最佳效果。确保数据采集准确快速且运行稳定。最后总结了五种方法所实现的边缘检测效果、优缺点。
1.3.2 论文结构
第一章主要是此次毕设引言还有介绍下毕设的主要研究内容;
第二章主要是对此次所需要用到的Matlab软件做个简单的介绍,然后再介绍图像处理的基本理论以及人机交互界面GUI的简单设计;
第三章主要是对系统进行分析然后再设计,介绍系统实行的方式和每个模块的主要成分;
第四章则是介绍如何实现此次系统设计,并做一个完整的结果展示;
第五章是对整个设计做个总结,对本次论文设计这些日子以来的工作发展与设计成果以及还存在的问题一一做个介绍,之后就是本次论文的所参考的一些文献等,本次论文的章节结构大致如此。
3. 系统分析与设计
目前,图像边缘检测技术已经广泛的应用于卫星,导航,监控等系统中,本设计由五种算法组成:Robert算子,Laplacian算子,Prewitt算子,Canny算子以及Sobel算子。如下图,它的设计框图3-1:
1.先将原图输入进系统,分别利用Robert算子,Laplacian算子,Prewitt算子,Canny算子以及Sobel算子五种算子进行边缘检测;
2.接着再显示五种算法下边缘检测前后的效果图;
3.观察五种算法下边缘检测的增强效果
图3-1 设计框图
图像边缘是图像最基本的特征,边缘在图像分析中起着重要的
用。所谓边缘(edge)是指图像局部特征的不连续性。灰度或结构
信息的突变称为边缘,例如:灰度级的突变、颜色的突变、纹理结
的突变。边缘是一个区域的结束,也是另一个区域的开始,利用该
征可以分割图像。
当人们看一个有边缘 的物体时,首先感觉到的便是边缘,如
一条理想的边缘应该具有如图2.1(a) 所示模型的特性。每个像素
都处在灰度级跃变的一个垂直的台阶上(例如图形中所示的水平线通
过图像的灰度剖面图)。
而实际上,诸如图像采集系统的性能、采样频率和获得图像的照
明条件等因素的影响,得到的边缘往往是模糊的,边缘被模拟成具有
“斜坡面”的剖面,如图2.1(b) 所示,在这个模型中不再有细线(宽
为一个像素的线条),而是出现了边缘的点包含斜坡中任意点的情况。
由此可以看到:模糊的边缘使边缘的“宽度”较大,面清晰的边缘使
边缘的宽度较小。
图像的边缘有方向的幅度两个属性,沿边缘方向像素变化平缓,
垂直于边缘方向像素变化剧烈。边缘上的这种变化可以用微分算子检
测出来,通常用一阶导数或二阶导数来检测边缘,不同的是一阶导数
认为最大值对应边缘位置,而二阶导数以过零点对应边缘位置。实际上,对于图像中的任意方向上的边缘都可以进行类似的分析。图像边
缘检测中对任意点的一阶导数可以利用该点梯度的幅度来获得,二阶
导数可以用拉普拉斯算子得到。
4. 整个边缘检测系统的实现
本章将主要介绍系统的运行环境与编译工具,还有核心代码的主要功能以及程序架构等。
4.1 系统运行环境与开发的工具
1.系统运行环境
硬件部分:计算机;
软件部分:windows 7,以及Matlab2010以上版本软件;
2.开发编译工具
软件的选择会对系统的开发速率与开发周期都起着至关重要的作用,毕设要求的是基于Mablab的系统设计,使用合适的软件也会在很大程度上提高开发的效率,并有效降低研究的成本,后期的系统维护也能较好的运行。此次毕设的研究课题算是一种比较复杂的图像处理的程序,但是我此次选取得开发工具刚好在这方面占据较大的优势,其丰富的函数种类与工具箱都十分利于对图像的研究。
4.2 程序的基本结构
本图像边缘检测处理程序具有人机交互界面GUI,主程序是MyDip.fig,通过界面的方式,制作一个菜单,来选择不同算子进行图像的边缘检测。
4.3 系统功能实现
4.3.1 界面GUI的设计
整个设计的人机交互界面GUI需要人性化,并且突出边缘检测前后图像的对比,可以在界面灵活地选取不同算法。设计草图如图4-1所示。
4-1 GUI界面布局图
4.3.2 GUI界面的制作
该人机交互界面GUI,具有界面友好,容易操作等特征。首先打开matalb软件,在命令窗口command window输入guide,并且敲击回车键,进入matlab GUI快速打开方式窗口。出现如下图:
点击OK确定,进入GUI编辑界面窗口。
在设计上,拉动2个大小完全相同的Axes方框,用于分别放置边缘检测图像前后对比图像,以达到直观对比效果。界面上制作一个菜单的打开按钮,用于打开选择所要边缘检测处理的图像,句柄内填充以下代码以实现功能。
[filename, pathname] = uigetfile({'*.bmp';'*.jpg';'*.jpeg'},'Pick an image-file');
if isequal(filename,0) | isequal(pathname,0)
disp('User pressed cancel');
else
disp(['User selected ', fullfile(pathname, filename)])
end
x=imread(filename);
[width,height,Cnums]=size(x);
a=log2(width);
b=log2(height);
axes(handles.axes2);
imshow(zeros([256,256]));
if (Cnums~=1)
if (width>256)|(height>256)
W=256;
end
for m=1:W
for n=1:W
if (m<=width)&(n<=height)
extendx(m,n,:)=x(m,n,:);
else
extendx(m,n,:)=realmax;
end
end
end
axes(handles.axes1);
imshow(extendx);
handles.rgb=x;
msgbox('Please transform it to a gray image or it can not be processed correctly','fileopening','warning');
elseif (width>256)|(height>256)
W=max(width,height);
for m=1:W
for n=1:W
if (m<=width)&(n<=height)
extendx(m,n)=x(m,n);
else
extendx(m,n)=realmax;
end
end
end
axes(handles.axes1);
imshow(extendx);
msgbox('The height or width is larger than 256 or they are both larger than 256!','fileopening','warning')
elseif (width<256)|(height<256)
for m=1:256
for n=1:256
if (m<=width)&(n<=height)
extendx(m,n)=x(m,n);
else
extendx(m,n)=realmax;
end
end
end
axes(handles.axes1);
imshow(extendx);
msgbox('The height or width is less than 256 or they are both less than 256!','fileopening','warning');
else
axes(handles.axes1);
imshow(x);
end
handles.imdata=x;
handles.reload=handles.imdata;
guidata(hObject, handles);
打开的实现功能如下:
打开功能实现图
在算法选择上,也是利用菜单的下拉按钮pushbutton的形式实现,如下图:
图4-2 算法选择菜单
另外,为了从本质上解释图像边缘检测达到效果的原因,特别在GUI界面上设计了2个大小完全一样的axes,用于呈现边缘检测前后两图像的灰度直方图。通过bitton按钮以实现显示直方图。实现的代码如下:
if isequal(handles.Img1, 0)
msgbox('请载入原图像!', '提示信息');
return;
end
if isequal(handles.Img2, 0)
msgbox('请进行边缘检测处理!', '提示信息');
return;
end
4.3.3 运行效果示意图
4-4 prewitt图像边缘检测运行截图