西交大数字图像处理第四次作业Word文档格式.docx
《西交大数字图像处理第四次作业Word文档格式.docx》由会员分享,可在线阅读,更多相关《西交大数字图像处理第四次作业Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
窗口的大小对滤波效果影响较大。
(2)处理结果:
test1.pgm中值滤波:
test2.tif中值滤波:
(3)结果分析及总结:
中值滤波器的主要功能是使拥有不同灰度的点更接近于它的相邻点。
事实上,使用
m×
m中值滤波器来去除那些相对于其邻域像素更亮或更暗并且其区域小于m^2/2(滤波器区域的一半)的孤立像素族。
在这种情况下,“去除“的意思是强制为邻域的中值灰度。
较大的族所受到的影响明显较小。
从处理后的图像看,图像的平滑效果较为明显,且受窗口的影响,窗口越大,平滑效果越明显,图像细节越模糊,尤其是test2中人脸图像的眼睛部分,随着滤波器模板的增大,可以明显的感受到图像模糊的效果。
另外,对比编写的程序的处理结果和medfilt2函数的处理结果,可以看出处理效果基本一致。
2、利用固定方差sigma=1.5产生高斯滤波器.附件有产生高斯滤波器的方法。
高斯滤波器的设计:
高斯滤波是一种根据高斯函数的形状来选择模板权值的线性平滑滤波方法。
高斯平滑滤波器对去除服从正态分布的噪声是很有效果的。
一维零均值高斯函数为
。
其中,高斯分布参数决定了高斯滤波器的宽度。
对图像来说,常用二维零均值离散高斯函数作平滑滤波器,函数表达式如下:
(1)
高斯函数具有5个重要性质:
①二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的。
一般来说一幅图像的边缘方向是不知道的。
因此,在滤波之前是无法确定一个方向比另一个方向上要更多的平滑的。
旋转对称性意味着高斯滤波器在后续的图像处理中不会偏向任一方向。
②高斯函数是单值函数。
高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点的权值是随着该点与中心点距离单调递减的。
这一性质是很重要的,因为边缘是一种图像局部特征。
如果平滑运算对离算子中心很远的像素点仍然有很大的作用,则平滑运算会使图像失真。
③高斯函数的傅立叶变换频谱是单瓣的。
这一性质是高斯函数傅立叶变换等于高斯函数本身这一事实的直接推论。
图像常被不希望的高频信号所污染,而所希望的图像特征,既含有低频分量,又含有高频分量。
高斯函数傅立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需要的信号。
④高斯滤波器的宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的。
σ越大,高斯滤波器的频带就越宽,平滑程度就越好。
通过调节平滑程度参数σ,可在图像特征分量模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷。
⑤由于高斯函数的可分离性,大高斯滤波器可以有效实现。
通过二维高斯函数的卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积的结果与方向垂直的相同一维高斯函数进行卷积。
因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。
这些性质使得它在早期的图像处理中特别有用,表明高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器。
test1.pgm高斯滤波:
test2.tif高斯滤波:
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。
通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
高斯滤波的具体操作是:
用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
从处理后的图像看,图像的平滑效果较为明显,且受窗口的影响,窗口越大,平滑效果越明显,图像细节越模糊。
将编写的程序处理结果和调用MATLAB中函数处理结果对比,发现处理结果基本相同。
3、利用高通滤波器滤波测试图像test3,4:
包括unsharpmasking,Sobeledgedetector,andLaplaceedgedetection;
Cannyalgorithm。
锐化滤波能减弱或消除图像中的低频率分量,但不影响高频率分量。
因为低频分量对应图像中灰度值缓慢变化的区域,因而与图像的整体特性,如整体对比度和平均灰度值等有关。
锐化滤波将这些分量滤去可使图像反差增加,边缘明显。
在实际应用中,锐化滤波可用于增强被模糊的细节或者低对比度图像的目标边缘。
图像锐化的主要目的有两个:
一是增强图像边缘,使模糊的图像变得更加清晰,颜色变得鲜明突出,图像的质量有所改善,产生更适合人眼观察和识别的图像;
二是希望经过锐化处理后,目标物体的边缘鲜明,以便于提取目标的边缘、对图像进行分割、目标区域识别、区域形状提取等,为进一步的图像理解与分析奠定基础。
由于锐化使噪声受到比信号还要强的增强,所以要求锐化处理的图像有较高的信噪比;
否则,锐化后图像的信噪比更低。
反锐化掩膜图像增强(unsharpmasking)
图像的反锐化掩蔽算法可以表示为:
(1)
其中fs(x,y)表示经过反锐化掩蔽得到的锐化图像,是f(x,y)的模糊形式。
反锐化掩蔽进一步的普遍形式称为高提升滤波。
在图像中任何一点(x,y)处,高提升滤波后的图像
可定义如下:
(2)
其中A≥1,与前式一样,是
的模糊形式,此式也可以写成:
(3)
结合式
(1),可以得到:
(4)
这一表达式可计算高提升滤波图像。
如果选择拉普拉斯变换,式(4)变成:
(5)
高提升滤波处理可以通过任何一个图1所示的掩模得以实现。
当A=1时,高提升滤波处理就是标准的拉普拉斯变换。
随着A超过l不断增大,锐化处理的效果越来越不明显。
最终,当A足够大时,高提升图像将近似等于经常数调制的图像。
图1高频提升滤波技术可以用其中一种掩膜来实现(
)
索贝尔边缘检测(Sobeledgedetector)
索贝尔算子(Sobeloperater)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。
在图像的任何一点使用此算子,将会产生对应的灰度矢量或其法矢量。
该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。
如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:
图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。
然后可用以下公式计算梯度方向。
如果角度Θ等于零,即代表图像在该处拥有纵向边缘,左方较右方暗。
Laplacian边缘检测(Laplacianedgedetector)
拉普拉斯算子是最简单的各向同性微分算子,具有旋转不变性。
一个二维图像函数
的拉普拉斯变换是各向同性的二阶导数,定义为:
(6)
为了更适合于数字图像处理,将该方程表示为离散形式:
(7)
另外,拉普拉斯算子还可以表示成模板的形式,如图2所示。
图2(a)表示离散拉普拉斯算子的模板,图2(b)表示其扩展模板,图2(c)和(d)则分别表示其他两种拉普拉斯的实现模板。
从模板形式容易看出,如果在图像中一个较暗的区域中出现了一个亮点,那么用拉普拉斯运算就会使这个亮点变得更亮。
因为图像中的边缘就是那些灰度发生跳变的区域,所以拉普拉斯锐化模板在边缘检测中很有用。
一般增强技术对于陡峭的边缘和缓慢变化的边缘很难确定其边缘线的位置。
但该算子却可用二次微分正峰和负峰之间的过零点来确定,对孤立点或端点更为敏感,因此特别适用于以突出图像中的孤立点、孤立线或线端点为目的的场合。
同梯度算子一样,拉普拉斯算子也会增强图像中的噪声,有时用拉普拉斯算子进行边缘检测时,可将图像先进行平滑处理。
1
-4
-8
(a)拉普拉斯运算模板
(b)拉普拉斯运算扩展模板
-1
4
8
(c)、(d)拉普拉斯其他两种模板
图2拉普拉斯的4种模板
拉普拉斯锐化的基本方法可以由下式表示:
这种简单的锐化方法既可以产生拉普拉斯锐化处理的效果,同时又能保留背景信息,将原始图像叠加到拉普拉斯变换的处理结果中去,可以使图像中的各灰度值得到保留,使灰度突变处的对比度得到增强,最终结果是在保留图像背景的前提下,突现出图像中小的细节信息。
Canny算子边缘检测(Cannyalgorithm)
在图像边缘检测中,抑制噪声和边缘精确定位是无法同时满足的。
边缘检测算法通过平滑滤波去除图像噪声的同时,也增加了边缘定位的不确定性;
反之,提高边缘检测算子对边缘敏感性的同时,也提高了对噪声的敏感性。
Canny算子力图在抗噪声干扰和精确定位边缘之间寻求最佳折中方案。
用Canny算子检测图像边缘的步骤如下:
step1:
用高斯滤波器平滑图象;
step2:
用一阶偏导的有限差分来计算滤波后图像梯度的幅值和方向;
step3:
对梯度幅值进行非极大值抑制,其过程为找出图像梯度中的局部极大值点,把其他非局部极大值点置零以得到细化的边缘。
step4:
用双阈值算法检测和连接边缘。
使用两个阈值T1和T2(T1>
T2),T1用来找到每条线段,T2用来在这些线段的两个方向上延伸寻找边缘的断裂处,并连接这些边缘。
unsharpmasking:
Sobeledgedetector:
自己编写函数的处理结果:
调用edge函数的处理结果:
调用edge函数的处理结果:
Laplaceedgedetection:
Cannyalgorithm:
①反锐化掩膜处理结果得到了边缘更加清晰的图像,与预期改进效果一致。
但同时看到也会引进一些不希望看到的噪声。
②索贝尔算子(Sobeloperator)是图像处理中的算子之一,主要用作边缘检测。
在在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。
由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛。
美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
从图像观察,可以看出索贝尔算子并没有将图像边缘完全分离出来。
③拉普拉斯是一种微分算子,其应用强调的是图像中灰度的突变,并不强调灰度级缓慢变化的区域。
这将产生把浅灰色边线和突变点叠加到暗色背景中的图像。
结合处理后的图像观察,拉普拉斯算子对于test3corrupt.pgm的边沿检测较为理想,而对于test4copy.bmp的边缘检测不是很理想,但是经过滤波后在检测可以得到一定的改善。
④由于自己编写的Canny算子处理效果不理想,故使用MATLAB中提供的函数。
从得到的结果看出Canny算子可以很好的将图像的边缘提取出来。
附录
【参考文献】
[1]冈萨雷斯.数字图像处理(第三版)北京:
电子工业出版社,2011
[2]周品.MATLAB数字图像处理北京:
清华大学出版社,2012
[3]杨杰.数字图像处理及MATLAB实现北京:
电子工业出版社,2010
【源代码】
Median_filter.m
%自己编写的中值滤波程序
[I,map]=imread('
test1.pgm'
'
pgm'
);
figure
(1);
imshow(I,map);
imwrite(I,'
test1原始图像.bmp'
title('
test1.pgm原始图像'
figure
(2);
n=3;
a=ones(n,n);
p=size(I);
x1=double(I);
x2=x1;
fori=1:
p
(1)-n+1
forj=1:
p
(2)-n+1
c=x1(i:
i+(n-1),j:
j+(n-1));
e=c(1,:
foru=2:
n
e=[e,c(u,:
)];
end
mm=median(e);
x2(i+(n-1)/2,j+(n-1)/2)=mm;
end
I2=uint8(x2);
imshow(I2,map);
中值滤波后的test1.pgm(3x3)'
%调用MATLAB中medfilt2函数进行中值滤波
I1=medfilt2(I,[33]);
figure(3);
imshow(I1,map);
中值滤波平滑后的test1.pgm(3x3)(调用medfilt2函数)'
Gauss_filter.m
%编写的高斯滤波器
n1=3;
sigma1=1.5;
n2=3;
sigma2=1.5;
theta=0;
r=[cos(theta),-sin(theta);
sin(theta),cos(theta)];
n2
n1
u=r*[j-(n1+1)/2,i-(n2+1)/2]'
;
h(i,j)=exp(-u
(1)^2/(2*sigma1^2))/(sigma1*sqrt(2*pi))*exp(-u
(2)^2/(2*sigma2^2))/(sigma2*sqrt(2*pi));
h=h/sqrt(sum(sum(h.*h)));
f1=conv2(double(I),double(h),'
same'
imshow(I);
原图像——test1.pgm'
colormap(gray);
imshow(f1,map);
高斯滤波平滑后的test1.pgm(3x3)'
%调用MATLAB中fspecial函数生成高斯滤波器
h=fspecial('
gaussian'
[33],1);
%建立一个3*3模板的高斯滤波器
I1=imfilter(I,h,'
conv'
figure;
高斯滤波平滑后的test1.pgm(3x3)(调用fspecial函数)'
Unsharp_masking.m
IM=imread('
test3_corrupt.pgm'
I=IM;
IMSize=size(IM);
IM=cast(IM,'
int32'
t=zeros(IMSize
(1)+2,IMSize
(2)+2);
t=cast(t,'
t(2:
IMSize
(1)+1,2:
IMSize
(2)+1)=IM;
t(:
1)=t(:
2);
IMSize
(2)+2)=t(:
IMSize
(2)+1);
t(1,:
)=t(2,:
t(IMSize
(1)+2,:
)=t(IMSize
(1)+1,:
A=1.0;
fori=2:
1:
IMSize
(1)+1
forj=2:
IMSize
(2)+1IM(i-1,j-1)=t(i,j)*A-(t(i,j)*(-8)+t(i,j-1)+t(i-1,j-1)+t(i-1,j)+t(i,j+1)+t(i+1,j)+t(i+1,j+1)+t(i+1,j-1)+t(i-1,j+1));
uint8'
imwrite(IM,['
UnsharpMasking_A_'
num2str(10*A),'
.png'
],'
png'
subplot(1,2,1)
原图像——test3_corrupt.pgm'
subplot(1,2,2)
imshow(IM);
反锐化掩膜后的test3_corrupt,pgm'
Sobeledgedetector.m
%自己编写的sobel算子边缘检测
I=imread('
subplot(1,2,1);
[N,M]=size(I);
I=double(I);
h1=[-1,0,1;
-2,0,2;
-1,0,1];
h2=[-1,-2,-1;
0,0,0;
1,2,1];
Gx=conv2(I,h1,'
Gy=conv2(I,h2,'
F=abs(Gx)+abs(Gy);
N
M
I(i,j)=F(i,j);
I=uint8(I);
subplot(1,2,2);
Sobel边缘检测——test3_corrupt.pgm'
%调用MATLAB中edge函数
I1=edge(I,'
sobel'
imshow(I1);
Canny边缘检测test3_corrupt.pgm'
Laplacian_edge_detector.m
I=imread('
test4copy.bmp'
bmp'
原图像——test4copy.bmp'
t=ones(N,M);
t=I;
N-1
M-1
I(i,j)=t(i+1,j)+t(i-1,j)+t(i,j+1)+t(i,j-1)-4*t(i,j);
Laplacian边缘检测test4copy.bmp'
Canny_algorithm_matlab.m
canny'