边缘检测和轮廓提取.docx
- 文档编号:3755002
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:16
- 大小:108.23KB
边缘检测和轮廓提取.docx
《边缘检测和轮廓提取.docx》由会员分享,可在线阅读,更多相关《边缘检测和轮廓提取.docx(16页珍藏版)》请在冰豆网上搜索。
边缘检测和轮廓提取
摘要
图像边缘是图像最基本的特征之一,往往携带着一幅图像的大部分信息。
而边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,这些点给出了图像轮廓的位置,这些轮廓常常是我们在图像边缘检测时所需要的非常重要的一些特征条件,这就需要我们对一幅图像检测并提取出它的边缘。
而边缘检测算法则是图像边缘检测问题中经典技术难题之一,它的解决对于我们进行高层次的特征描述、识别和理解等有着重大的影响;又由于边缘检测在许多方面都有着非常重要的使用价值,所以人们一直在致力于研究和解决如何构造出具有良好性质及好的效果的边缘检测算子的问题。
本此实验主要分析几种应用于数字图像处理中的边缘检测算子,根据它们在实践中的应用结果进行研究,主要包括:
Robert边缘算子、Prewitt边缘算子、Sobel边缘算子、Kirsch边缘算子以及Laplacian算子等对图像及噪声图像的边缘检测,根据实验处理结果讨论了几种检测方法的优劣.
关键词:
数字图像处理;边缘检测;算子
Abstract
Theedgesoftheimage,oneofthebasiccharacteristicsoftheimagetendtocarrymostoftheinformationintheimage.Edgeexistsintheirregularstructureoftheimageandnon-stationaryphenomena,i.e.existinamutationpointofthesignal,thesepointsaregiventhelocationoftheimagecontours,thesecontoursareoftenrequiredinimageedgedetectionisveryimportantsomeofthecharacteristicsofthecondition,whichweneedtodetectandextractitsedgeimage.Theedgedetectionalgorithmistheclassiconeofthetechnicalproblemsofimageedgedetectionproblems,thesolutionforourhigh-levelcharacterization,recognitionandunderstandinghasasignificantimpact;edgedetectionareveryimportantinmanywaysvalueinuse,sopeoplehavebeendevotedtothestudyandsolvetheproblemofhowtoconstructedgedetectionoperatorwithagoodnatureandgoodresults.
Thisexperimentanalysisofseveralusedindigitalimageprocessing,edgedetectionoperatorresearchresultsaccordingtotheirapplicationinpractice,including:
TheRobertEdgeOperatorchildPrewittedgeoperator,Sobeledgeoperator,KirschedgeoperatorandLaplacianoperatorontheimageandnoiseimageedgedetectiondiscussedtheprosandconsofseveraldetectionmethods,accordingtotheresultsoftheexperimentaltreatment.
Keywords:
digitalimageprocessing;edgedetection;operator
1概述
1.1数字图像处理的意义
数字图像处理技术的迅猛发展,其应用前景得到了不可限量的扩展,如今各行各业都在积极发展与图像相关的技术。
其应用逐渐凸显其魅力,其应用如医学影像、航天航空、无人驾驶、自动导航、工业控制、导弹制导、文化艺术等。
边缘检测在图像处理和计算机视觉等领域骑着重要的作用,是图像分析、模式识别、目标检测与分割等的前期处理。
前期边缘检测的好坏,直接影响后期更高级处理的精度。
自从1986年JohnCanny提出了最优边缘检测算子的三条准则并推导出了一个近似实现。
但是在实际中,真正实现这一目标尚有较大的难度。
这是因为:
(1)实际图像一般都含有噪声,并且噪声的分布信息业是未知的,同时噪声和边缘都属于高频信息,在进行滤波的同时,虽然能够在一定程度上抑制噪声,却也丢失了边缘信息。
(2)由于场景、光照条件的边缘等原因,同一场景在不同光照条件下得到的边缘可能也是不同的,设置的阈值也可能是不同的。
针对这些问题,如何进行改进,并得到较理想的边缘检测算子是有必要的。
另一方面,轮廓提取技术是图像分割、目标区域识别区域行状提取等图像分析处理领域十分重要的基础。
寻求非接触、精度高、具有综合分析能力的识别方法来代替人工目测,解决图像表面的模式识别和测量问题,是图像加工行业面临的一大难题,也是值得我们长期探讨的科研课题
1.2MATLAB简介
Matlab是美国MathWorks公司出品的商业化数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级计算语言和交互式环境,主要包括Matlab和Simulink两大部分。
Matlab是矩阵实验室(MatrixLaboratory)的简称,和Mathematica、Maple并称为三大数学软件。
Matlab可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理于通讯、图像处理、信号检测、金融建模设计与分析等领域。
Matlab的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用Matlab来解决问题要比用C、FORTRAN等语言完成相同的事情简捷的多,并且Mathwork也吸收了像Maple等软件的优点,使Matlab成为一个强大的数学软件。
Matlab图像处理程序开发的特点是上手容易,开发周期短,见效快,和VB、VC等专业级编程工具相比,在Matlab平台上开发图像处理软件程序代码编写量明显较小[3]。
这是因为Matlab有专门的图像处理工具箱,有很多实现某种图像处理功能的函数,而专业级的编程工具并没有专门为图像处理而编写的函数,很多图像处理函数需要开发者自己编写。
因此,图像处理工作采用Matlab编程是非常合适的。
1.3设计任务
针对一幅图像,利用边缘检测算子(如Robert算子、Sobel算子、Prewitt算子、Laplace算子、Kirsch算子和Marr算子)检测出图像的边缘,然后采取轮廓提取算法得到封闭的二值图像轮廓。
2边缘检测
2.1图像的边缘
在数字图像中,边缘是指图像局部变化最显著的部分,边缘主要存在于目标与目标,目标与背景之间,是图像局部特性的不连续性,如灰度的突变、纹理结构的图标、颜色的图标等。
尽管图像的边缘点产生的原因各不相同,但他们都是图形上灰度不连续或灰度几句辩护的点,图像边缘分为阶跃状、斜坡状和屋顶状。
从成因上看,一般图像边缘主要由四个方面的因素形成:
(1)图像灰度在表面法向变化的不连续造成的边缘;
(2)图像对像素在空间上不一致形成的边缘;
(3)在光滑的表面上由于颜色的不一致形成的边缘;
(4)物体的光影造成的边缘。
图像边缘提取的作用有:
(1)改良图像质量;
(2)分离对象;
(3)理解和重构视觉场景;
(4)识别特征。
2.2边缘检测的基本步骤
(1)滤波:
边缘检测主要基于导数计算,会受到噪声的影响,可以通过设计滤波器来降低噪声,但滤波器在降低噪声的同时也会导致边缘精度的损失。
(2)增强:
增强算法将邻域中灰度有显著变化的点突出显示。
一般通过计算梯度幅值来完成。
(3)检测:
在有些图像中梯度幅值较大的并不是边缘点。
最简单的边缘检测是梯度幅值阈值判定。
(4)定位:
精确确定边缘的位置。
2.3边缘检测算法
特征提取作为图像边缘检测的一个重要内容,发展了众多的方法。
这些方法经过实践的检验,成为了经典的内容。
经典的边缘检测算子包括:
Roberts算子、Prewitt算子、Sobel算子、Log算子、Canny算子等,这些经典的边缘提取算子在使用时都是使用预定义的边缘模型去匹配。
2.3.1Reborts算子
Reboerts算子是一种利用局部差分来寻找边缘的算子,Roberts梯度算子所采用的是对角方向相邻两像素值之差,算子形式如下:
Roberts梯度算子对应的卷积模版为:
用以上两个卷积算子与图像运算后,可求出图像的梯度幅值G(x,y),然后选择适当的阈值τ,若G(x,y)>τ,则(i,j)为边缘点,否则,判断(i,j)为非边缘点。
由此得到一个二值图像{g(i,j)},即边缘图像。
Roberts算子采用的是用对角线方向上相邻两像素的差近似梯度幅值来检测边缘,它的定位精度高,对于水平和垂直方向的边缘,检测效果较好,而对于有一定倾角的斜边缘,检测效果则不理想,存在着许多的漏检。
另外,在含噪声的情况下,Roberts算子不能有效的抑制噪声,容易产生一些伪边缘。
因此,该算子适合于对低噪声且具有陡峭边缘的图像提取边缘。
2.3.2Sobel算子
Sobel算子在边缘检测算子扩大了其模版,在边缘检测的同时尽量削弱了噪声。
其模版大小为3×3,其将方向差分运算与局部加权平均相结合来提取边缘。
在求取图像梯度之前,先进行加权平均,然后进行未分,加强了对噪声的一致。
Sobel算子所对应的卷积模版为:
图像中的每个像素点和以上水平和垂直两个卷积算子做卷积运算后,再计算得到梯度幅值G(x,y),然后选取适当的阈值τ,若G(x,y)>τ,则(i,j)为边缘点,否则,判断(i,j)为非边缘点。
由此得到一个二值图像{g(i,j)},即边缘图像。
Sobel算子在空间上比较容易实现,不但产生较好的边缘检测效果,同时,由于其引入了局部平均,使其受噪声的影响也较小。
若使用较大的邻域,抗噪性会更好,但也增加了计算量,并且得到的边缘比较粗。
在对精度要求不是很高的场合下,Sobel算子是一种较为常用的边缘检测算法。
2.3.3Prewitt算子
同Sobel算子相似,Prewitt算子也是一种将方向的差分运算和局部平均相结合的方法,也是取水平和垂直两个卷积核来分别对图像中各个像素点做卷积运算,所不同的是,Sobel算子是先做加权平均然后再微分,Prewitt算子是先平均后求微分,其对应的卷积模版为:
(2.3.8)
图像中的每个像素点和以上水平和垂直两个卷积算子做卷积运算后,再计算得到梯度幅值G(x,y),然后选取适当的阈值τ,若G(x,y)>τ,则(i,j)为边缘点,否则,判断(i,j)为非边缘点。
由此得到一个二值图像{g(i,j)},即边缘图像。
在此基础上,有人提出了改进的Prewitt算子,将其扩展到八个方向,依次用这些边缘模板去检测图像,与被检测区域最为相似的样板给出最大值。
用这个最大值作为算子的输出值P[i,j],这样就可将边缘像素检测出来。
八个方向的Prewitt算子模板及其所对应的边缘方向如下所示:
0°方向45°方向90°方向135°方向
180°方向225°方向270°方向315°方向
Prewitt算子通过对图像上的每个像素点的八方向邻域的灰度加权差之和来进行检测边缘,对噪声有一定抑制作用,抗噪性较好,但由于采用了局部灰度平均,因此容易检测出伪边缘,并且边缘定位精度较低。
2.3.4Kirsch算子
Kirsch算子是一种3×3的非线性方向算子。
其基本思想是希望改进取平均值的过程,从而尽量使边缘两侧的像素各自与自己同类的像素取平均值,然后再求平均值之差,来减小由于取平均值所造成的边缘细节丢失。
通常采用八方向Kirsch模板的方法进行检测,取其中最大的值作为边缘强度,而将与之对应的方向作为边缘方向。
常用的八方向Kirsch模板如下所示:
实际的应用中,通常都是利用简单的卷积核来计算方向差分的,不同的算子对应着不同的卷积核。
它们在图像的像素点上所产生的两个方向的偏导数用均方值或者绝对值求和的形式来近似代替梯度幅值,然后选取一个合适的阈值,用所得到的梯度幅值和所设定的阈值进行比较来判断边缘点。
若大于所取的阈值,则判断为边缘点;否则,判断为非边缘点。
很显然,在提取边缘的过程中,阈值的选取特别重要,尤其在含噪图像中,阈值的选择要折衷考虑噪声造成的伪边缘和有效边缘的丢失。
2.3.5LOG算子
LOG算子基本思想是:
先在一定的范围内做平滑滤波,然后再利用差分算子来检测在相应尺度上的边缘。
滤波器的选择要考虑以下两个因素:
其一是滤波器在空间上要求平稳,即要求空间位置误差Δx要小;其二是平滑滤波器本身要求是带通滤波器,并且在有限的带通内是平稳的,即要求频域误差Δω要小。
根据信号处理中的测不准原理,Δx和Δω是相互矛盾的,而达到测不准下限的滤波器就是高斯滤波器。
Marr和Hildreth提出的这种差分算子是各向同性的拉普拉斯二阶差分算子。
该边缘检测器的基本特征是:
(1)所用的平滑滤波器是高斯滤波器
(2)增强步骤采用的是二阶导数(即二维拉普拉斯函数)
(3)边缘检测的判据是二阶导数过零点并且对应一阶导数的极大值
该方法的特点是先用高斯滤波器与图像进行卷积,既平滑了图像又降低了噪声,使孤立的噪声点和较小的结构组织被滤除。
然而由于对图像的平滑会导致边缘的延展,因此只考虑那些具有局部梯度极大值的点作为边缘点,这可以用二阶导数的零交叉来实现。
拉普拉斯函数可用作二维二阶导数的近似,因为它是一种标量算子。
为了避免检测出非显著的边缘,所以应该选择一阶导数大于某一阈值的零交叉点来作为边缘点。
实际应用中,常用的LOG算子的模版为:
这说明,高斯平滑运算不但可以滤除噪声,还会导致图像中的边缘和其它尖锐不连续部分模糊,而模糊程度取决于空间尺度因子σ的大小。
σ越大,高斯滤波对噪声的滤除效果越好,但同时也会丢失重要的边缘信息,影响到边缘检测器的性能。
如果σ较小,又可能导致平滑作用不完全而留有较多的噪声。
因此在实际应用中,要根据情况选择适当的σ。
2.3.6Canny算子
1986年,Canny从边缘检测算子应该满足的三个准则出发,推导出了最优边缘检测算子Canny算子,该算子是目前理论上相对最完善的一种边缘检测算法。
Canny提出的评价边缘检测性能优劣的三个准则分别是:
(1)好的信噪比准则。
即将非边缘点判为边缘点的概率要低,将边缘点判为非边缘点的概率要低;
(2)好的定位性能准则。
即检测出的边缘点要尽可能在实际边缘的中心;
(3)单边缘响应准则。
即单一边缘具有唯一响应,单一边缘产生的多个响应的概率要低,并且对虚假边缘的响应应得到最大抑制。
利用Canny算子检测边缘的算法如下:
(1)用式所示的高斯函数h(r)对图像进行平滑滤波,去除图像中的噪声。
(2)在每一点计算出局部梯度和边缘方向,可以利用Sobel算子、Roberts算子等来计算。
边缘点定义为梯度方向上其强度局部最大的点。
(3)对梯度进行“非极大值抑制”。
(4)双阐值化和边缘连接。
3轮廓提取
图像的轮廓作为图像的一种基本特征,经常被应用到较高层次的图像应用中去。
它在图像识别,图像分割,图像增强以及图像压缩等的领域有广泛应用,也是图像处理的基础。
图像的轮廓往往携带着一幅图像的大部分信息。
而轮廓即在于图像的不规则结构和不稳定上,也存在于信号的突变点处,这些点给出了图像轮廓的位置,这些轮廓常常是我们在图像边缘检测时所需的非常重要的特征条件,因而这就需要我们对一幅图像检测并提取出它的轮廓。
经典的轮廓提取技术大都基于微分运算。
首先通过平滑来滤除图像中的噪声,然后进行一阶微分或二阶微分运算,求得梯度最大值或二阶导数的过零点,最后选取适当的阈值来提取边界。
本次课设所用的轮廓提取算法非常简单,就是掏空内部点:
如果原图中有一点为黑,且它的8个相邻点都是黑色时(此时该点是内部点),则将该点删除。
要注意的是,我们处理的虽然是二值图,但实际上是256级灰度图,不过只用到了0和255两种颜色。
4实验仿真
4.1Sobel算子代码
functionkirsch=edgekirsch(gray,th)
[m,n]=size(gray);%得到图像的大小(长和宽)
temp=double(gray);
kirsch=zeros(m,n);%定义一个大小为S的零矩阵
%利用Sobel算子进行边缘提取
fori=2:
m-1
forj=2:
n-1
d1=(5*temp(i-1,j-1)+5*temp(i-1,j)+5*temp(i-1,j+1)-3*temp(i,j-1)-3*temp(i,j+1)-3*temp(i+1,j-1)-3*temp(i+1,j)-3*temp(i+1,j+1))^2;%Sobel算子的dx(垂直梯度)
d2=((-3)*temp(i-1,j-1)+5*temp(i-1,j)+5*temp(i-1,j+1)-3*temp(i,j-1)+5*temp(i,j+1)-3*temp(i+1,j-1)-3*temp(i+1,j)-3*temp(i+1,j+1))^2;%Sobel算子的dy(水平梯度)
d3=((-3)*temp(i-1,j-1)-3*temp(i-1,j)+5*temp(i-1,j+1)-3*temp(i,j-1)+5*temp(i,j+1)-3*temp(i+1,j-1)-3*temp(i+1,j)+5*temp(i+1,j+1))^2;
d4=((-3)*temp(i-1,j-1)-3*temp(i-1,j)-3*temp(i-1,j+1)-3*temp(i,j-1)+5*temp(i,j+1)-3*temp(i+1,j-1)+5*temp(i+1,j)+5*temp(i+1,j+1))^2;
d5=((-3)*temp(i-1,j-1)-3*temp(i-1,j)-3*temp(i-1,j+1)-3*temp(i,j-1)-3*temp(i,j+1)+5*temp(i+1,j-1)+5*temp(i+1,j)+5*temp(i+1,j+1))^2;
d6=((-3)*temp(i-1,j-1)-3*temp(i-1,j)-3*temp(i-1,j+1)+5*temp(i,j-1)-3*temp(i,j+1)+5*temp(i+1,j-1)+5*temp(i+1,j)-3*temp(i+1,j+1))^2;
d7=(5*temp(i-1,j-1)-3*temp(i-1,j)-3*temp(i-1,j+1)+5*temp(i,j-1)-3*temp(i,j+1)+5*temp(i+1,j-1)-3*temp(i+1,j)-3*temp(i+1,j+1))^2;
d8=(5*temp(i-1,j-1)+5*temp(i-1,j)-3*temp(i-1,j+1)+5*temp(i,j-1)-3*temp(i,j+1)-3*temp(i+1,j-1)-3*temp(i+1,j)-3*temp(i+1,j+1))^2;
tmp=d1;
ifd2>tmp
tmp=d2;
elseifd3>tmp
tmp=d3;
elseifd4>tmp
tmp=d4;
elseifd5>tmp
tmp=d5;
elseifd6>tmp
tmp=d6;
elseifd7>tmp
tmp=d7;
elseifd8>tmp
tmp=d8;
end
end
end
end
end
end
end
kirsch(i,j)=round(sqrt(tmp));
%kirsch(i,j)=round(sqrt(d1+d2+d3+d4+d5+d6+d7+d8));%梯度模取整
end
end
fori=1:
m
forj=1:
n
ifkirsch(i,j)>th
kirsch(i,j)=255;%将梯度值与阈值比较,大于T则把图像的灰度变为255,小于T则把图像的灰度变为0
else
kirsch(i,j)=0;
end
end
end
closeall
clear;
clc;
origin=imread('yunshen.jpg');
gray=rgb2gray(origin);
sobel=edge(gray,'sobel');sobel边缘检测器
imwrite(sobel,'sobel.jpg');
figure
(1),imshow(sobel),title('sobeledge');
4.2轮廓提取算法
BOOLOutline(HWNDhWnd)
{
DWORDOffBits,BufSize;
LPBITMAPINFOHEADERlpImgData;
LPSTRlpPtr;
HLOCALhTempImgData;
LPBITMAPINFOHEADERlpTempImgData;
LPSTRlpTempPtr;
HDChDc;
HFILEhf;
LONGx,y;
intnum;
intnw,n,ne,w,e,sw,s,se;
//我们处理的实际上是256级灰度图,不过只用到了0和255两种颜色。
if(NumColors!
=256){
MessageBox(hWnd,"Mustbeamonobitmapwithgrayscalepalette!
",
"ErrorMessage",MB_OK|MB_ICONEXCLAMATION);
returnFALSE;
}
OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);
//BufSize为缓冲区大小
BufSize=OffBits+bi.biHeight*LineBytes;
//为新图缓冲区分配内存
if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)
{
MessageBox(hWnd,"Errorallocmemory!
","ErrorMessage",MB_OK|
MB_ICONEXCLAMATION);
returnFALSE;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 边缘 检测 轮廓 提取
![提示](https://static.bdocx.com/images/bang_tan.gif)