图像边缘检测文档格式.docx
- 文档编号:18790295
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:16
- 大小:436.69KB
图像边缘检测文档格式.docx
《图像边缘检测文档格式.docx》由会员分享,可在线阅读,更多相关《图像边缘检测文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
梯度算子简单有效,LOG算法和Canny边缘检测器能产生较细
的边缘。
边缘检测的目的是标识数字图像中灰度变化明显的点,而导函数正好能反映图像灰度变化的显著程度,因而许多方法利用导数来检测边缘。
在分析其算法思想和流程的基础上,利用MATLAB对这5种
算法进行了仿真实验,分析了各自的性能和算法特点,比较边缘检测
效果并给出了各自的适用范围。
边缘检测在图像处理系统中占有重要的作用,其效果直接影响着
后续图像处理效果的好坏。
许多数字图像处理直接或间接地依靠边缘
检测算法的性能,并且在模式识别、机器人视觉、图像分割、特征提
取、图像压缩等方面都把边缘检测作为最基本的工具。
但实际图像中
的边缘往往是各种类型的边缘以及它们模糊化后结果的组合,并且在
实际图像中存在着不同程度的噪声,各种类型的图像边缘检测算法不
断涌现。
早在1965年就有人提出边缘检测算子,边缘检测的传统方
法包括Kirsch,Prewitt,Sobel,Roberts,Robins,Mar-Hildreth边缘检测方法以及Laplacian-Gaussian(LOG)算子方法和Canny最优算子方法等。
引言
MATLAB简介
MATLAB是矩阵实验室(MatrixLaboratory)的简称,是美国
MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、
数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括
MATLAB和Simulink两大部分。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可
以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、
连接其他编程语言的程序等,主要应用于工程计算、控制设计、
信号处理与通讯、图像处理、信号检测、金融建模设计与分析等
领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、
工程中常用的形式十分相似,故用MATLAB来解算问题要比用
C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork
也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数
学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA
的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到
MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者
都编写了一些经典的程序,用户可以直接进行下载就可以用。
17
MATLAB产品族可以用来进行以下各种工作:
●数值分析
●数值和符号计算
●工程与科学绘图
●控制系统的设计与仿真
●数字图像处理技术
●数字信号处理技术
●通讯系统设计与仿真
●财务与金融工程
MATLAB的应用范围非常广,包括信号和图像处理、通讯、控
制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应
用领域。
附加的工具箱(单独提供的专用MATLAB函数集)扩展了
MATLAB环境,以解决这些应用领域内特定类型的问题。
1.边缘检测的基本原理
1.1基于一阶导数的边缘检测
梯度是函数变化的一种度量,是图像对应二维函数的一阶导数。
而一幅图像可以看作是图像强度连续导数的取样点数组。
梯度是一阶
导数的二维等价式,可定义为向量
有两个重要的性质和梯度有关,一是向量G(x,y)的方向就是函数
f(x,y)增大时的最大变化率方向;
二是梯度的幅值。
对于数字图像,偏导数可用差分来近似,则边缘往往在差分值最
大处,最小处或过零点发生。
在计算梯度时,计算空间同一位置处(x,y)的真实偏导数是至关重
要的。
而采用上面公式计算的梯度近似值并不位于同一位置。
所以常
常使用2×
2的一阶差分模板来计算位于内插点[x+1/2,y+1/2]的x方向和y方向偏导数,此时Gx和Gy可表示为
1.2基于二阶导数的边缘检测
以上介绍的计算一阶导数的方法,把一阶导数大于阈值的点作为
边界点的方法,有可能会导致检测出的边缘点过多,数据存储量比较
大。
一种在理论上更有效的方法是求梯度局部最大值对应的点,并认
为它们是边缘点。
这种去除了一阶导数中的非局部最大值的方法,可
以检测出更精确的边缘,一阶导数的局部最大值对应着二阶导数的零
交叉点。
这样,通过找图像灰度的二阶导数的零交叉点就能较好地找
到精确边缘点。
从图1可以看出,图像灰度二阶导数的过零点对应边
缘点。
2.边缘检测算子
数字图像中,边缘(edge)是指图像局部强度变化最显著的部分。
边缘主要存在于目标与目标、目标与背景、区域与区域(包括不同色
彩)之间。
边缘检测常用到的有属于简单空域微分算法的Roberts算
子、Sobel算子、Prewitt算子,拉普拉斯高斯(LOG)算法以及Canny
边缘检测器等。
边缘检测算法的基本步骤:
①滤波:
改善与噪声有关
的边缘检测器的性能;
一般滤波器降导致了边缘的损失;
增强边缘和
降低噪声之间需要折衷;
②增强:
将邻域强度值有显著变化的点突显
出来,边缘增强一般是通过计算梯度幅值来完成的;
③检测:
最简单
的边缘检测判据是梯度幅值阀值;
④定位:
边缘的位置和方位在子像
素分辨率上估计。
2.1Canny算子
Canny检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。
检测阶跃边缘的大部分工作集中在寻找能够用于实际图像的梯度数字逼近。
由于实际的图像经过了摄像机光学系统和电路系统(带宽限制)固有的低通滤波器的平滑,因此,图像中的阶跃边缘不是十分陡立。
图像也受到摄像机噪声和场景中不希望的细节的干扰。
图像梯度逼近必须满足两个要求:
首先逼近必须能够抑制噪声效应;
其次必须尽量精确地确定边缘的位置。
抑制噪声和边缘精确定位是无法同时得到满足的,也就是说,边缘检测算法通过图像平滑算子去除了噪声,但却增加了边缘定位的不确定性;
反过来,若提高边缘检测算子对边缘的敏感性,同时也提高了对噪声的敏感性。
有一种线性算子可以在抗噪声干扰和精确定位之间提供最佳折衷方案,它就是高斯函数的一阶导数。
Canny根据检测的要求,定义了下面三个最优准则:
(1)最优检测。
对真实边缘不漏检,非边缘点不错检,即要求输出信噪比最大。
(2)最优检测精度。
检测的边缘点的位置距实际的边缘点的位置最近。
(3)检测点与边缘点一一对应。
每一个实际存在的边缘点和检测的边缘点是一一对应的关系。
Canny首次将上述判据用是数学的形式表示出来,然后采用最优化数值方法,得到最佳边缘检测模板。
对于二维图像,需要使用若干方向的模板分别对图像进行卷积处理,再取最可能的边缘方向。
现在对Canny边缘检测器作一概括说明。
用f[i,j]表示图像。
使用可分离滤波方法求图像与高斯平滑滤波器卷积,得到的结果是一个已平滑数据阵列。
其中G[i,j;
σ]代表一个高斯滤波的过程,而σ是高斯函数的标准差,它控制着平滑程度。
已平滑数据阵列S[i,j]的梯度可以使用2×
2一阶有限差分近似式来计算x与y偏导数的两个阵列P[i,j]与Q[i,j]:
在这个2×
2正方形内求有限差分的均值,以便在图像中的同一点计算x和y的偏导数梯度。
幅值和方位角可用直角坐标到极坐标的坐标转化公式来计算:
其中,反正切函数包含了两个参量,它表示一个角度,其取值范围是整个圆周范围内。
为高效率地计算这些函数,尽量不用浮点运算。
梯度的幅度和方向也可以通过查找表由偏导数计算。
反正切函数的大多数计算使用的是定点运算,很少的几个计算是基本浮点运算,其中的浮点运算是由整数和定点算术通过软件实现的。
在上式中,M[i,j]反映了图像上的点[i,j]处的边缘强度,𝜃
[i,j]是图像点[i,j]的法向矢量,正交于边缘方向。
根据Canny的定义,中心边缘点为算子G[i,j;
σ]与图像f[i,j]的卷积在边缘梯度方向上的最大值,这样就可以在每一个点的梯度方向上判断此点强度是否为其邻域的最大值来确定该点是否为边缘点。
当一个像素满足下面三个条件时,则被认为是图像的边缘点:
(1)该点的边缘强度大于沿该点梯度方向的两个相邻像素点的边缘强度
(2)与该点梯度方向上相邻两点的方向差小于
(3)以该点为中心的3×
3邻域中的边缘强度极大值小于某个阈值
Canny给出的这三个判据具有广泛的代表意义[12]。
2.2Sobel算法
Sobel算子是滤波算子的形式,用于提取边缘。
图像中的每个点都用图2所示的两个模板做卷积,第一个模板对垂直边缘的影响最大;
第二个模板对水平边缘影响最大。
两个卷积的最大值做为该点的输出,运算结果是一幅边缘幅度图像。
Sobel对噪声具有平滑作用边缘定位作用,可以提供较为精确的边缘信息,但它同时也会检测出许多的伪边缘,边缘定位精度不够高。
当对精度要求不是很高时,是一种较为常用的边缘检测方法。
Sobel算子实现做加权平均,然后在微分,即:
△xf(x,y)=[f(x-1,y+1)+2f(x,y+1)+f(x+1,y+1)]-
[f(x-1,y-1)+2f(x,y-1)+f(x+1,y-1)]
△yf(x,y)=[f(x-1,y-1)+2f(x-1,y)+f(x-1,y+1)]-
[f(x+1,y-1)+2f(x+1,y)+f(x+1,y+1)]
Sobel算子有一定的噪声抑制能力,在检测阶跃边缘是得到的边缘宽度至少为两像素。
1
2
-1
-2
图2Soble算子模板
2.3对两种算子进行比较
clc
clearall
closeall
A=imread('
cameraman.tif'
);
%读入图像
imshow(A);
title('
原图'
y_mask=[-1-2-1;
000;
121];
%建立Y方向的模板
x_mask=y_mask'
;
%建立X方向的模板
I=im2double(A);
%将图像数据转化为双精度
dx=imfilter(I,x_mask);
%计算X方向的梯度分量
dy=imfilter(I,y_mask);
%计算Y方向的梯度分量
grad=sqrt(dx.*dx+dy.*dy);
%计算梯度
grad=mat2gray(grad);
%将梯度矩阵转换为灰度图像
level=graythresh(grad);
%计算灰度阈值
BW=im2bw(grad,level);
%用阈值分割梯度图像
figure,imshow(BW);
%显示分割后的图像即边缘图像
Sobel'
)
Sobel算法程序:
BW1=edge(A,'
canny'
%调用canny函数
figure,imshow(BW1);
%显示分割后的图像,即梯度图像
Canny'
Canny算子程序:
2.4结果比较
Sobel边缘检测效果
Canny边缘检测效果
2.5结果分析
Canny:
采用高斯函数对图像进行平滑处理,因此具有较强的噪声抑制能力;
同样该算子也将一些高频边缘平滑掉,造成边缘丢失,采用了双阈值算法检测和连接边缘,边缘的连续性较好。
Sobel算子:
产生的边缘效果较好,对噪声具有平滑作用。
但存在伪边缘,边缘比较粗且定位精度低。
3.改进的Sobel算子
3.1改进的Sobel边缘检测方法
一种改进的Sobel边缘检测方法,就是在传统的Sobel原理中两个模板的基础上,又增加六个方向的模板,即45°
,135°
,180°
,225°
,270°
,315°
具体如图所示。
这样可以更加有效地检测图像多个方向的边缘,使边缘信息更加完整。
图10边缘检测的八个方向模板
3.2Sobel算子的最佳阈值选取
尽管八方向的Sobel算子可以得到更完整的边缘信息,但是和Sobel算子一样,它们的抗噪声能力都较差,即对于叠加噪声图像的边缘检测效果很不理想。
解决该问题的一个方法就是设定一个阈值,然后与经过Sobel算子检测后的边缘值进行比较,当其幅值大于该阈值时定义为边缘,反之取为零,如式(3-4)所示。
由此可以看出,阈值T的选取至关重要。
然而怎样选择阈值却是一个比较难的问题,因为在数字图像中无用的背景数据和目标数据常常混在一起,此外在图像中还有噪声的影响。
如果阈值选得偏低,则会有较多的噪声被保留而影响边缘的质量;
如果阈值选的偏高,则会使那些灰度值较小的边缘丢失,破坏边缘的连续性。
上述方法的阈值一般是通过实验的方法决定的,因此很难得到一个最佳结果[14]。
本节将给出一种新的边缘估计方法,通过它可以确定最佳阈值。
为此,假设经过Sobel算子检测后的图像可以表示成:
其中,
是原始图像的边缘部分,
是均值为0,方差为
的Guass白噪声。
由于经过Sobel算子检测后的边缘为图像的高频分量,而图像的高频分量一般服从拉普拉斯分布,其概率密度函数为:
为
的标准差。
基于式(3-5)出的信号模型,可以推出
的最大后验概率估计(MaximumaPosteriori:
MAP)为:
(3-7)式给出的边缘估计方法在小波域称为软门限去噪法,因此可以认定
即为所需要的最佳阈值。
可以看出,由(3-7)式和(3-8)式所给出的边缘估计的特点是:
当图像边缘的幅值大于阈值时,边缘的估计值为边缘幅值减去阈值。
因此,具有更强的去噪功能。
为了由(3-7)式得到边缘信号的最佳估计,首先需要确定
的值。
因此要分别估计出
和
假定图像大小为M×
M,那么
的值可以用中值法估计:
其中median[·
]表示取中值的运算。
这样,注意到
及
就可以得到
把上面的(3-9),(3-12)给出的
,的估计值代入(3-7),就可以得到阈值
,即最佳阈值。
上述方法的最大优点是:
在去噪的同时有效地保留了图像的真实边缘,即给出了边缘检测的最佳结果
3.3算法代码
%八方向Sobel算子
mask1=[-1-2-1;
%建立方向模板
mask2=[-2-10;
-101;
012];
mask3=[-101;
-202;
-101];
mask4=[012;
-2-10];
mask5=[121;
-1-2-1];
mask6=[210;
10-1;
0-1-2];
mask7=[10-1;
20-2;
10-1];
mask8=[0-1-2;
210];
%将数据图像转化为双精度
d1=imfilter(I,mask1);
%计算8个领域的灰度变化
d2=imfilter(I,mask2);
d3=imfilter(I,mask3);
d4=imfilter(I,mask4);
d5=imfilter(I,mask5);
d6=imfilter(I,mask6);
d7=imfilter(I,mask7);
d8=imfilter(I,mask8);
dd=max(abs(d1),abs(d2));
%取差值变化最大的元素组成灰度变化矩阵
dd=max(dd,abs(d3));
dd=max(dd,abs(d4));
dd=max(dd,abs(d5));
dd=max(dd,abs(d6));
dd=max(dd,abs(d7));
dd=max(dd,abs(d8));
grad=mat2gray(dd);
%将灰度变化矩阵转化为灰度图像
%显示分割后的图像,即边缘图像
八方向Sobel'
%最佳阈值Sobel算子
BB=grad;
FW=median(BB(:
))/0.6745;
B=BB.*BB;
B=sum(B(:
));
FX=sqrt(B/256^2);
FS=sqrt(max(FX^2-FW^2,0));
T=sqrt
(2)*FW^2/FS;
%计算最佳阈值
grad=mat2gray(BB);
%将梯度矩阵转化为灰度图像
BW2=im2bw(grad,T);
%用最佳阈值分割梯度图像
figure,imshow(BW2);
改进的sobel'
无噪声情况下八方向Sobel算子
检测效果
无噪声情况下改进的Sobel算子
加入高斯白噪声再进行检测
加入高斯包噪声后八方向Sobel检测
加入高斯白噪声后的改进的Sobel检测
由上图可以看出当没有噪声的时候,八方向的Sobel算子的边缘检测效果最好,传统的Sobel算子出现了一些的噪声,而采用了最佳阈值的改进Sobel算子检测效果很不好,但是对于加入例如高斯白噪声的图片,传统的Sobel算子和八方向Sobel算子虽然检测到的边缘信息很丰富,也较为连续,但是由于噪声太多,边缘很模糊,严重的影响了视觉效果;
而采用最佳阈值的改进Sobel算子检测极大地改善了这缺点,得到的图像边缘具有很好的清晰度和连续性,信息比较完整,效果令人满意。
所以最佳阈值的改进Sobel算子最大优点是:
在去噪的同时有效地保留了图像的真实边缘,即给出了边缘检测的最佳结果。
4.结论
Canny算子:
Sobel算子:
八方向Sobel算子:
可以得到更完整的边缘信息,但是和Sobel算子一样,它们的抗噪声能力都较差,即对于叠加噪声图像的边缘检测效果很不理想。
最佳Sobel算子:
在图像进行八方向Sobel算子检测后的梯度图像使用最佳阈值分割图像,解决了八方向Sobel算子抗噪能力差的特点,在去噪的同时有效地保留了图像的真实边缘,即给出了边缘检测的最佳结果。
但这种算法对于部分灰度图像的检测结果并不理想,甚至无法检测。
至于具体原因还有待进一步的研究。
5.参考文献
[1]陈宇云.灰度图像的边缘检测研究[D].电子科技大学硕士学位论文.2009.
[2]杨帆等编著,数字图像处理与分析.北京:
北京航空航天大学版社,2007.
[3]韩磊.MATLAB在数字图象处理中的应用[J].电脑知识与技术.
2008,1
(1):
29-31.
[4]刑军.基于Sobel算子数字图像的边缘检测[J].微机发展,2005.
[5]罗军辉,冯平.MATLAB7.0在图像处理中的应用.北京:
机械工业出社,2005.
[6]熊秋菊,杨慕生.图像处理中边缘检测算法的对比研究[J].机械工程与自动
化.2009.
[7]周德龙,潘泉.图像模糊边缘检测的改进算法[J].中国图像图形学报,2001.
[8]何斌、马天予等,MATLAB数字图像边缘检测,人民邮电出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 边缘 检测