边缘检测实验报告Word格式文档下载.docx
《边缘检测实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《边缘检测实验报告Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。
h,在采用一阶微分算子情形记录下高于某个阈值
h
的位置
坐标
Sh
=
{(m,
n)
|
Tf
(m,
≥
h}
(而采用二阶微分算子情形,一般是对某个阈值
ε
>
0
确立
ε}
)
(4)
对集合
进行整理,同时调整阈值
h。
Roberts
算子
算子是一种利用局部差分算子寻找边缘的算子,两个模板分别为
⎡10
⎤
⎥
⎡0
-
1⎤
⎣1
⎥⎦
则,
Rx
f
(i,
j)
(i
+
1,
j
1)
Ry
算法的步骤为:
(1)
首先用两个模板分别对图像作用得到
和
;
22
位于便于边缘处。
对于阈值选取的说明:
由于微分算子的检测性能受阈值的影响较大,为
此,针对具体图像我们采用以下阈值的选取方法,对处理后的图像统计大于某
一阈值的点,对这些数据求平均值,以下每个程序均采用此方法,不再做说明。
Sobel
算子采用中心差分,但对中间水平线和垂直线上的四个邻近点赋予
略高的权重。
两个模板分别如下:
ç
⎪
S
x
2
02⎪
10
1
⎪
⎛
⎫
y=
1⎪
Prewitt
Prewitt算子也属于中心差分类型,但没有给最邻近点较高的权重,两
个模板如下:
Px
Py
采用一阶微分算子很难找到一个一致的阈值选择办法,保证检测出的图像
有相对均匀的宽度,克服这个障碍的办法是改用二阶微分算子进行边缘检测定
位。
Laplace
经常采用如下
Laplace
微分算子:
∆f
(x,
y)
=
∂
f
∂x
2
+
∂y
并进而寻找
的跨零点的位置(零点的局部正和负的取值都有)。
当然实践中可以通过模板来实现,本程序采用如下模板:
⎡010⎤
⎢010⎥
无论什么样的微分算子,直接用来进行边缘检测,会受到噪声很大的干扰。
即使是二阶微分算子也不能克服噪声干扰。
但是如果采用高斯低通滤波,所得
的结果则比较好地保留了图像的边缘特征。
Marr-Hildrech
的
LOG
边缘检测算法:
Canny
检测子
算子采用和数据内容相关的滤波技术。
算子求边缘点具体算法步骤如下:
1.
用高斯滤波器平滑图像.
2.
用一阶偏导有限差分计算梯度幅值和方向.
3.
对梯度幅值进行非极大值抑制
.
4.
用双阈值算法检测和连接边缘.
步
图像与高斯平滑滤波器卷积:
对梯度幅值进行非极大值抑
制(non_maxima
suppression,NMS):
仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部
梯度最大的点,而抑制非极大值。
解决方法:
利用梯度的方向:
用
双阈值算法检测和连接边缘:
对非极大值抑制图像作用两个阈值
th1
th2,两者关系
th1=0.4th2。
我们
把梯度值小于
的像素的灰度值设为
0,得到图像
1。
然后把梯度值小于
th2
像素的灰度值设为
2。
由于图像
的阈值较高,去除大部分噪
音,但同时也损失了有用的边缘信息。
而图像
的阈值较低,保留了较多的信
息,我们可以以图像
为基础,以图像
为补充来连结图像的边缘。
链接边缘的具体步骤如下:
对图像
进行扫描,当遇到一个非零灰度的像素
p(x,y)时,跟踪以
p(x,y)为
开始点的轮廓线,直到轮廓
线的终点
q(x,y)。
考察图像
中
与图像
q(x,y)点位置对应的点
s(x,y)的
8
邻
近区域。
如
果在
s(x,y)点的
邻近区域中有非零像素
s(x,y)存
在,则将其包括到图像
中,
作为
r(x,y)点。
从
r(x,y)开始,重复第一步,直到我们在图像
和图像
中都
无法继续为止。
当完成对包含
p(x,y)的
轮廓线的连结之后,将这条轮廓线标记为已经访问。
回到第一步,寻找下一条轮廓线。
重复第一步、第二步、第三步,直到图像
中找
不到新轮廓线为止。
至此,完成
canny
算
子的边缘检测。
3、具体过程
Log算子阈值取0.01
Canny算子阈值取0.2
Canny算子阈值取0.25
4、实验分析
通过对上述几种算子的研究,我们可以发现,Prewit
t
算子和
都是对图像进行差分和滤波运算,仅在平滑部分的权值选择上有些差异,但是图
像产生了一定的模糊,
而且有些边缘还检测不出来,所以检测精度比较低,
该
类算子比较适用于图像边缘灰度值比较明显的情况。
Robert
s
算子检测精度比较高,
但容易丢失一部分边缘,
使检测的结果不
完整,同时图像没经过平滑处理,不能抑制噪声,所以该算子对具有陡峭的低噪
声图像响应最好。
算子通过高斯函数对图像进行了平滑处理,对噪声的抑制作用比较
明显,
但处理的同时也可能将原有的边缘平滑,
造成某些边缘无法检测到。
此
外,噪声对其影响也较大,检测到的图细节很丰富,同时就可能出现伪边缘。
但是,如果要降低伪边缘的话,又可能使检测精度下降,丢失很多真边缘。
因
此,
对于不同图像应选择不同参数。
Canny算子也采用高斯函数对图像进行平滑处理,也具有较强的去噪能力,
但同样可能会丢失一些边缘信息,但是,从图中可以看出,Canny算子比
算子的检测边缘的精度要高些。
通过实验结果可以看出,该算子在上述
几种边缘检测算子当中效果最好。
通过上述实验结果我们可以发现,在加入高斯噪声以后,canny算子的去噪能
力减弱,对边缘检测的效果不太明显。
相反,从图中可以发现sobel算子和
prewitt算子对噪声的过滤作用较为明显。
基本上能够检测出较为完整的边缘信
号。
Matlab
代码:
clear
all;
close
warning
off
I
imread('
cameraman.tif'
);
%%没有噪声时的检测结果
BW_sobel
edge(I,'
sobel'
BW_prewitt
prewitt'
BW_roberts
roberts'
BW_laplace
log'
BW_canny
canny'
figure
(1);
subplot(2,3,1),imshow(I),xlabel('
原始图像'
subplot(2,3,2),imshow(BW_sobel),xlabel('
sobel
检测'
subplot(2,3,3),imshow(BW_prewitt),xlabel('
prewitt
subplot(2,3,4),imshow(BW_roberts),xlabel('
roberts
subplot(2,3,5),imshow(BW_laplace),xlabel('
laplace
subplot(2,3,6),imshow(BW_canny),xlabel('
%%加入高斯噪声(μ=0,σ^2=0.01)检测结果
I_g1
imnoise(I,'
gaussian'
0,0.01);
edge(I_g1,'
figure
(2);
subplot(2,3,1),imshow(I_g1),xlabel('
加入高斯噪声(μ=0,σ^2=0.01)图像'
%%加入高斯噪声(μ=0,σ^2=0.02)检测结果
I_g2
0,0.02);
edge(I_g2,'
figure(3);
subplot(2,3,1),imshow(I_g2),xlabel('
加入高斯噪声(μ=0,σ^2=0.02)图像'
subplot(2,3,