图像边缘检测课设.docx
- 文档编号:8822947
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:19
- 大小:724.11KB
图像边缘检测课设.docx
《图像边缘检测课设.docx》由会员分享,可在线阅读,更多相关《图像边缘检测课设.docx(19页珍藏版)》请在冰点文库上搜索。
图像边缘检测课设
通信工程课程设计
题目图像边缘检测算法研究与仿真
学生姓名学号
所在院(系)陕西理工学院物理与电信工程学院
专业班级通信工程专业1101班
指导教师候宝生
完成地点陕西理工学院物理与电信工程学院实验室
2014年12月13日
一摘要
【摘要】边缘是图像最基本的特征,包含图像中用于识别的有用信息,边缘检测是数字图像处理中基础而重要的内容。
该课程设计具体考察了五种最常用的边缘检测算子并运用MATLAB进行图像处理比较。
梯度算子简单有效,LOG算法和canny边缘检测器能产生较细的边缘。
关键词:
MATLAB、边缘检测、图像处理
二前言
在实际图像边缘检测问题中,图像的边缘作为图像的一种基本特征,经常被应用到较高层次的图像应用中去。
它在图像识别,图像分割,图像增强以及图像压缩等的领域中有较为广泛的应用,也是它们的基础。
图像边缘是图像最基本的特征之一,往往携带着一幅图像的大部分信息。
而边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,这些点给出了图像轮廓的位置,这些轮廓常常是我们在图像边缘检测时所需要的非常重要的一些特征条件,这就需要我们对一幅图像检测并提取出它的边缘。
而边缘检测算法则是图像边缘检测问题中经典技术难题之一,它的解决对于我们进行高层次的特征描述、识别和理解等有着重大的影响;又由于边缘检测在许多方面都有着非常重要的使用价值,所以人们一直在致力于研究和解决如何构造出具有良好性质及好的效果的边缘检测算子的问题。
该课程设计具体考察了两种最常用的边缘检测算子并运用MATLAB进行图像处理比较。
三边缘检测于算子
3.1边缘检测的定义
图像边缘是图像最基本的特征,边缘在图像分析中起着重要的
用。
所谓边缘(edge)是指图像局部特征的不连续性。
灰度或结构
信息的突变称为边缘,例如:
灰度级的突变、颜色的突变、纹理结
的突变。
边缘是一个区域的结束,也是另一个区域的开始,利用该
征可以分割图像。
当人们看一个有边缘的物体时,首先感觉到的便是边缘,如
一条理想的边缘应该具有如图2.1(a)所示模型的特性。
每个像素
都处在灰度级跃变的一个垂直的台阶上(例如图形中所示的水平线通
过图像的灰度剖面图)。
而实际上,诸如图像采集系统的性能、采样频率和获得图像的照
明条件等因素的影响,得到的边缘往往是模糊的,边缘被模拟成具有
“斜坡面”的剖面,如图2.1(b)所示,在这个模型中不再有细线(宽
为一个像素的线条),而是出现了边缘的点包含斜坡中任意点的情况。
由此可以看到:
模糊的边缘使边缘的“宽度”较大,面清晰的边缘使
边缘的宽度较小。
图像的边缘有方向的幅度两个属性,沿边缘方向像素变化平缓,
垂直于边缘方向像素变化剧烈。
边缘上的这种变化可以用微分算子检
测出来,通常用一阶导数或二阶导数来检测边缘,不同的是一阶导数
认为最大值对应边缘位置,而二阶导数以过零点对应边缘位置。
实际上,对于图像中的任意方向上的边缘都可以进行类似的分析。
图像边
缘检测中对任意点的一阶导数可以利用该点梯度的幅度来获得,二阶
导数可以用拉普拉斯算子得到。
3.2图像边缘检测算法的研究内容
图像边缘检测和分析可定义为应用一系列方法获取、校正、增强、变换、检测或压缩可视图像的技术。
其目的是提高信息的相对质量,以便提取有用信息。
图像边缘检测中的变换属于图像输入-图像输出模式,图像边缘检测是一种超越具体应用的过程,任何为解决某一特殊问题而开发的图像边缘检测新技术或新方法,几乎肯定都能找到其他完全不同的应用领域。
图像边缘检测的主要研究内容包括:
(1)图像获得和抽样,其中通过人眼观察的视野获取图像的问题有:
最常用的图像获取装置——电视(TV)摄像机问题,对所获得信号进行独立的采样和数字化就可用数字形式表达景物中全部彩色内容;电荷-耦合装置,用作图像传感器,对景物每次扫描一行,或通过平行扫描获得图像;选择正确的分辨力或采样密度,一幅图像实质上是二维空间中的信号,所以适用于信号处理的法则同样适用于图像边缘检测,在放射学中常常需要高分辨力,要求图像至少达到2048像素×2048像素;灰度量化,图像强度也必须进行数字化,通常以256级(按1字节编码)覆盖整个灰度,一般一幅灰度分辨力为8位,空间分辨力为512像素×512像素的图像需0.25兆字节的存贮容量。
(2)图像分割,目的是把一个图像分解成它的构成成分,以便对每一目标进行测量。
图像分割是一个十分困难的过程。
但其测量结果的质量却极大地依赖于图像分割的质量。
有两类不同的图像分割方法。
一种方法是假设图像各成分的强度值是均匀的并利用这种均匀性;另一种方法寻找图像成分之间的边界,因而是利用图像的不均匀性。
主要有直方图分割,区域生长,梯度法等。
(3)边界查索,用于检测图像中线状局部结构,通常是作为图像分割的一个预处理步骤。
大多数图像边缘检测技术应用某种形式的梯度算子,可应用对水平方向、垂直方向或对角线方向的梯度敏感的梯度算子,用它们的复合结果可检测任意方向的边界。
(4)图像增强和复原,用于改进图像的质量。
不同的增强技术可以用于不同的目的,这取决于应用的类型。
如果打算直接观察图像,可以增强对比度。
如果是为了进一步对图像作数字处理,可以选择分割(一种突出各图像成分之间的边界和线状结构的运算)。
该技术可以是整体的或局部的,也可以在某个频域或者空间域中进行。
图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。
图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。
(5)图像分类(识别),图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。
图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类,近年来新发展起来的模糊模式识别和人工神经网络模式分类在图像识别中也越来越受到重视。
(6)图像变换:
由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。
因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理)。
目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像边缘检测中也有着广泛而有效的应用。
四边缘检测算子
4.1Sobel算子
索贝尔算子(Sobeloperator)是图像处理中的算子之一,主要用作边缘检测。
在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。
在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量.
该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。
如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:
图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。
然后可用以下公式计算梯度方向。
在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。
Sobel算子有两个,一个是检测水平边沿的;另一个是检测垂直平边沿的。
Sobel算子另一种形式是各向同性Sobel(IsotropicSobel)算子,也有两个,一个是检测水平边沿的,另一个是检测垂直平边沿的。
各向同性Sobel算子比普通Sobel算子的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。
由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛。
美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。
Sobel边缘算子的卷积和图3.2所示,图像中的每个像素都用这两个核做卷积。
这两个核分别对垂直边缘和水平边缘响应最大,两个卷积的最大值作为该点的输出位。
运算结果是一幅边缘幅度图像。
Sobel算子认为邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。
一般来说,距离越大,产生的影响越小。
4.2Canny算子
检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。
图像边缘检测必须满足两个条件:
一是必须能有效地抑制噪声;二是必须尽量精确确定边缘的位置。
既要提高边缘检测算子对边缘的敏感性,同时也提高了对噪声的敏感。
1.Canny边缘检测基本原理:
(1)具有既能滤去噪声又保持边缘特性的边缘检测最优滤波器,其采用一阶微分滤波器。
采用二维高斯函数的任意方向上的一阶方向导数为噪声滤波器,通过与图像卷积进行滤波;然后对滤波后的图像寻找图像梯度的局部最大值,以此来确定图像边缘。
根据对信噪比与定位乘积进行测度,得到最优化逼近算子。
这就是Canny边缘检测算子。
(2)类似与Marr(LOG)边缘检测方法,也属于先平滑后求导数的方法。
2.Canny边缘检测算法:
step1:
用高斯滤波器平滑图象;
step2:
用一阶偏导的有限差分来计算梯度的幅值和方向;
step3:
对梯度幅值进行非极大值抑制;
step4:
用双阈值算法检测和连接边缘。
其数学描述如下:
step1:
二维为高斯函数为:
=
在某一方向n上是
的一阶方向导数为:
=
=n▽
n=
=
式中:
n式方向矢量,▽
是梯度矢量。
将图像
与
作卷积,同时改变n的方向,
*
取得最大值时的n就是正交于检测边缘的方向。
step2:
=
,
=
*
=
反映了图像(x,y)点处的边缘强度,
是图像(x,y)点处的法向矢量。
step3:
仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部梯度最大的点,而抑制非极大值。
(non-MaxiMasuppression,NMS)
解决方法:
利用梯度的方向。
图示--非极大值抑制
四个扇区的标号为0到3,对应3*3邻域的四种可能组合。
在每一点上,邻域的中心像素M与沿着梯度线的两个像素相比。
如果M的梯度值不比沿梯度线的两个相邻像素梯度值大,则令M=0。
step4:
减少假边缘段数量的典型方法是对G(x,y)使用一个阈值。
将低于阈值的所有值赋零值。
但问题是如何选取阈值?
解决方法:
双阈值算法进行边缘判别和连接边缘。
①首先是边缘判别:
凡是边缘强度大于高阈值的一定是边缘点;凡是边缘强度小于低阈值的一定不是边缘点;如果边缘强度大于低阈值又小于高阈值,则看这个像素的邻接像素中有没有超过高阈值的边缘点,如果有,它就是边缘点,如果没有,它就不是边缘点。
②其次是连接边缘:
双阈值算法对非极大值抑制图像作用两个阈值τ1和τ2,且2τ1≈τ2,从而可以得到两个阈值边缘图像G1(x,y)和G2(x,y)。
由于G2(x,y)使用高阈值得到,因而含有很少的假边缘,但有间断(不闭合)。
双阈值法要在G2(x,y)中把边缘连接成轮廓,当到达轮廓的端点时,该算法就在G1(x,y)的8邻点位置寻找可以连接到轮廓上的边缘,这样,算法不断地在G1(x,y)中收集边缘,直到将G1(x,y)连接起来为止。
实际上,还有多种边缘点判别方法,如:
将边缘的梯度分为四种:
水平、竖直、45度方向、135度方向。
各个方向用不同的邻接像素进行比较,以决定局部极大值。
若某个像素的灰度值与其梯度方向上前后两个像素的灰度值相比并不是最大的,那么将该像素置为零,即不是边缘。
此外,在实际应用中,检测效果还与滤波模板大小有关,当
时有较好的检测效果。
Canny算子检测方法的优点:
①低误码率,很少把边缘点误认为非边缘点;②高定位精度,即精确地把边缘点定位在灰度变化最大的像素上;③抑制虚假边缘。
在这几种算法中除Roberts算子外都使用了图像模板,模板运算是图像的一种处理手段——邻域处理,有许多图像增强效果都可以采用模板运算实现,如平滑效果,中值滤波,油画效果,图像的凹凸效果等等。
在模板运算中,首先定义一个模板,模板的大小以3*3的较常见,也有2*2,5*5或更大尺寸的。
运算时,把模板中心对应到图像的每一个像素位置,然后按照模板对应的公式对中心像素和它周围的像素进行数学运算,算出的结果作为输出图像对应像素点的值。
这些经典的边缘提取算子,虽然各自不同,有不同的长处,但是它们也有共同的特点:
每种算子对应的预定义的边缘是它们最适合使用的情形,也就是说它们有针对性。
这一点在应用中是有优越性的,它们的针对性可以帮助我们完成特定的任务。
同时这也是算子的局限性,对于一般的问题或者情况未知的问题,预定义边缘的方法可能不会达到最佳效果。
五设计过程
利用edge函数实现
I=imread('E:
\aaa.jpg');%读取图像
K=rgb2gray(I);
BW1=edge(K,'roberts',0.08);
%进行Roberts算子边缘检测,门限值采用默认值
BW2=edge(K,'prewitt',0.05);
%进行Prewitt算子边缘检测,门限值采用默认值
BW3=edge(K,'sobel',0.04);
%进行Sobel算子边缘检测,门限值采用默认值
BW4=edge(K,'canny',0.03);
BW4=edge(K,'log',0.01);
figure,imshow(BW1,[]),title('Roberts算子图像');
figure,imshow(BW2,[]),title('Prewitt算子图像');
figure,imshow(BW3,[]),title('Sobel算子图像');
figure,imshow(BW4,[]),title('canny算子图像');
figure,imshow(BW4,[]),title('log算子图像');
利用模版处理
5.1Roberts算子
I=imread('fabric.png');
K=rgb2gray(I);
BW1=[1,0;0,-1];
BW2=[0,1;-1,0];
J1=filter2(BW1,K);
J2=filter2(BW2,K);
K1=double(J1);
K2=double(J2);
M=(abs(K1)+abs(K2));
figure,imshow(uint8(M))
5.2Prewitt算子
I=imread('fabric.png');
K=rgb2gray(I);
BW1=[-1,-1,-1;0,0,0;1,1,1];
BW2=[-1,0,1;-1,0,1;-1,0,1];
J1=filter2(BW1,K);
J2=filter2(BW2,K);
K1=double(J1);
K2=double(J2);
M=(abs(K1)+abs(K2));
figure,imshow(uint8(M))
5.3Sobel算子
I=imread('fabric.png');
K=rgb2gray(I);
BW1=[-1,-2,-1;0,0,0;1,2,1];
BW2=[-1,0,1;-2,0,2;-1,0,1];
J1=filter2(BW1,K);
J2=filter2(BW2,K);
K1=double(J1);
K2=double(J2);
M=(abs(K1)+abs(K2));
figure,imshow(uint8(M))
5.4Canny算子
程序代码:
a=imread('tuxing','tif');%读取图像
a=imnoise(a,'salt&pepper',0.005);
b=edge(a,'canny',[0.03,0.06]);%edge(I,'canny',thresh,sigma),sigmaσ默认为1
c=edge(a,'canny',[0.05,0.1]);%σ=3
d=edge(a,'canny',[0.05,0.1],2);
subplot(2,2,1),imshow(a);
subplot(2,2,2),imshow(b);title('canny双阈值=[0.03,0.06]σ=1')
subplot(2,2,3),imshow(c);title('canny双阈值=[0.05,0.1]σ=1')
subplot(2,2,4),imshow(d);title('canny双阈值=[0.05,0.1]σ=2')
5.5Log算子
a=imread('tuxing','tif');%读取图像
a=imnoise(a,'salt&pepper',0.005);
b=edge(a,'log',0.002,1.7);%根据所指定的敏感度阈值thresh和标准偏差sigma(σ),用LOG算子进行边缘检测,默认时σ=2
c=edge(a,'log',0.007,1.7);%σ=3
d=edge(a,'log',0.002,3);
subplot(2,2,1),imshow(a);
subplot(2,2,2),imshow(b);title('LOG阈值=0.002σ=1.7')
subplot(2,2,3),imshow(c);title('LOG阈值=0.007σ=1.7')
subplot(2,2,4),imshow(d);title('LOG阈值=0.002σ=3')
六结果分析
1,sobel算子根据像素点上下、左右邻点灰度值加权值,在边缘处打到极大值这一现象检测边缘。
对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。
当对精度要求不是很高的时候,是一种较为常用的边缘检测的方法。
由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数, 简单有效,因此应用广泛。
美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
2.canny
算子是边缘检测中最具有代表的一种局部极值边缘检测无论
从视觉效果还是客观评价来看,canny算子提取的边缘线性连接程度
较好,对此类的边缘提取的比较完整,边缘细腻
Canny算子检测方法的优点:
①低误码率,很少把边缘点误认为非边缘点;②高定位精度,即精确地把边缘点定位在灰度变化最大的像素上;③抑制虚假边缘
3.Roberts算子定位比较精确,但由于不包括平滑,所以对于噪声比较敏感,Prewitt算子是平均滤波的一阶算子,检测的图像边缘可能大于两个像素,对灰度渐变低噪声的图像有较好的检测效果但对于混合多噪声的图像,处理效果就不理想了。
Canny方法则以一阶导数为基础来判断边缘点。
它是一阶传统微分中检测阶跃型边缘效果最好的算子之一。
梯度算子计算简单,只能检测出图像大致的轮廓,而对于比较较细的边缘可能会忽略。
Prette算子和Sobel算子比Robel效果要好一些。
Canny算子提取边缘比较完整,其边缘连续性较好,效果有预期其他算子。
其次是Prewitte算子,其边缘性比较完整,再次就是Sobel算子
4.log算子边缘检测算法进行了分析,提出了结合双边滤波的log边缘检测算法。
实验表明,此算法能较好地滤除图像噪声,同时能很好的保持图像细节信息,简单实用,复杂度低,具备更好的推广应用价值。
七心得体会
利用MATLAB我们可以很方便的对图像边缘检测算法,进行仿真研究,比较各自优缺点,得到最优,效果最好的算法来进行图像处理。
Roberts算子定位比较精确,但由于不包括平滑,所以对于噪声比较敏感,Prewitt算子是平均滤波的一阶算子,检测的图像边缘可能大于两个像素,对灰度渐变低噪声的图像有较好的检测效果但对于混合多噪声的图像,处理效果就不理想了。
Canny方法则以一阶导数为基础来判断边缘点。
它是一阶传统微分中检测阶跃型边缘效果最好的算子之一。
梯度算子计算简单,只能检测出图像大致的轮廓,而对于比较较细的边缘可能会忽略。
Prette算子和Sobel算子比Robel效果要好一些。
Canny算子提取边缘比较完整,其边缘连续性较好,效果有预期其他算子。
其次是Prewitte算子,其边缘性比较完整,再次就是Sobel算子
通过这次课程设计,使自己对MATLAB设计流程有了比较深刻的体会,同时也了解了一般软件的设计过程。
在设计过程中碰到了很多的问题,通过这些问题,使自己分析问题,解决问题的能力得到了较大的提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 边缘 检测