摘 要:本实验主要是对图像的加、减、乘、除运算以及各种空域滤波进行程序设计和编写,通过实验结果对比验证几种图像运算处理方法的优缺点及适用范围。从而对图像的代数运算、空域滤波、平滑滤波、拉普拉斯算子等有更深一步的认识和了解。其中平滑滤波用于模糊处理、减小噪声;拉普拉斯用于强调图像中灰度的突变及降低灰度慢变化的区域;中值滤波对于像椒盐噪声一定类型的随机噪声相当有效。
一、实验目的
编写一个能够完成两幅图像之间加、减、乘、除四种算术运算的函数。另外,对于两幅图像的乘法,所编写的乘法程序还要能够完成一幅图像乘以一个常数的功能。使用图 Fig1.10(4)和 Fig1.10(5)验证实验。
编写一个对图像进行空域滤波的函数(实现方法见课本3.5节)。空域模板的尺寸固定为3*3大小,但模板中的系数要做为程序的输入参数。
(1.a) 使用上述函数实现图像的平滑滤波,其中的模板使用图3.32所示的掩模。
(1.b) 使用上述函数实现公式(3.6-8)和公式(3.6-9)描述的拉普拉斯图像锐化增强技术,其中的拉普拉斯模板使用图 3.37(c)(d)所示的掩模。
(1.c) 使用上述函数实现公式(3.6-8)和公式(3.6-9)描述的一阶导数锐化增强技术,其中的一阶导数模板使用图 3.41(d)(e)所示的掩模。
(1.d) 使用课本图 3.38(a),对(1.a)(1.b)(1.c)中的程序实现进行验证,并对结果进行简要对比分析。
(2.a) 编写一个给图像中添加椒盐噪声的程序,程序的输入参数为两个噪声分量的概率值
(2.b) 编写的程序,实现 3 x 3 中值滤波。
(2.c) 给图5.7(a)添加 P a = Pb = 0.2 的椒盐噪声。
(2.d) 对(2.c)中得到的图像进行中值滤波。说明实验结果与课本图 5.10(b)的主要差异。
二、技术论述
1 图像的“+、-、*、/”运算
图像加法运算一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声;图像减法是一种常用于检测图像变化及运动物体的图像处理方法,可以通过计算这两幅图像所有对应像素点的差而得出的图像的差异用于检测一系列相同场景,主要的作用就是增强两幅图像的差异两幅图像;两幅图像进行乘法运算可以实现掩膜操作,一幅图像乘以一个常数通常被称为缩放,如果使用的缩放因数大于1,那么将增强图像的亮度;如果缩放因数小于1,则会使图像变暗;除法运算可用于校正成像设备的非线性影响,也可以用来检测两幅图像的区别。图像的“+、-、*、/”运算是两幅图像f(x,y)与h(x,y)进行加减乘除运算,可以表示为:g(x,y)=f(x,y)+h(x,y)、g(x,y)=f(x,y)-h(x,y)、g(x,y)=f(x,y)*h(x,y)、g(x,y)=k*f(x,y)、g(x,y)=f(x,y)/h(x,y)。
2.空域滤波
空间滤波处理是在处理图像中逐点地移动掩膜,,滤波器在每一点每一点(x,y)处的响应通过自行定义的关系计算。线性空间滤波的响应为滤波器系数与滤波掩膜扫过区域的相应像素的乘积之和。如表1所示为3*3的掩膜,在图像中的点(x,y)处可用该掩膜线性滤波的响应R:
表1 3*3的掩膜
空域滤波的设计步骤:
Ø 设计模版类型、模板参数和模板运算方法
Ø 将模板中心与图像中某一像素位置重合;
Ø 对模板覆盖的图像区域中的像素点进行运算;
Ø 将运算结果替代图像中模板中心对应位置的像素;
(1)平滑滤波
平滑滤波器用于模糊处理和降低噪声。模糊处理经常用于预处理任务中,例如在(大)目标提取之前去除图像中的一些琐碎细节,以及其桥接直线或曲线的缝隙。通过线性滤波和非线性滤波模糊处理,可以降低噪声。平滑滤波一般有两种掩膜,直接平均掩膜与加权平均掩膜。
(2)中值滤波是将邻域内像素(灰度的中值代替该像素的值,中值滤波应用非常普遍,,其对于一定类型的随机噪声有很好的去噪能力,比小尺度的线性平滑滤波器的模糊程度明显要低。尤其是处理椒盐噪声有非常好的效果。中值滤波的思路是针对某个像素f(x,y),取其3*3邻域内的9个像素,将这九个像素点按从小到大的顺序排列,并取中间值作为像素点f(x,y)的灰度值。
(3)二阶微分图像增强,指的是用拉普拉斯微分算子进行图像增强,应用强调图像中灰度的突变及降低灰度慢变化的区域,可以把图像中的浅灰色边线和突变点叠加到暗背景中。将原始图像和拉普拉斯图像叠加在一起的简单方法可以保护拉普拉斯锐化处理效果,同时又能复原背景信息。
(4)一阶微分图像增强也可称为梯度法,微分算法是求信号的变化率,有加强高频分量的作用,从而使图像轮廓清晰,利用适当的微分算法可以锐化图像。因为图像模糊是受到平均或积分运算造成的,所以要想把图像中任何方向伸展的模糊轮廓变得清晰,可以对图像进行逆运算如微分运算,从而使图像清晰化。
四、实验结果讨论
通过技术分析编写代数运算程序处理图Fig1.10(4)和 Fig1.10(5)生成新加法运算、减法运算的图像如图4-1(a)所示, 生成的乘法运算、除法运算的图像如图4-1(b)所示。(程序见附录)
图4-1(a) 由加法运算、减法运算生成的图像
图4-1(b) 由乘法运算、除法运算生成的图像
通过对平滑滤波、拉普拉斯微分算子(二阶微分图像增强)和梯度法(一阶微分图像增强)等技术分析,经过公式计算设计编写相应的图像处理程序,用Fig3.38(a).jpg进行验证。由平滑滤波程序处理后的图像如图4-2(a)所示,由中普拉斯算子和梯度法编写的程序生成的图像分别如图4-2(b)和图4-2(c)所示。
图4-2(a) 平滑滤波程序处理后的图像
图4-2(b) 由拉普拉斯算子图像增强程序生成的图像
图4-2(c) 由梯度法图像增强程序生成的图像
对图Fig5.07(a).jpg添加椒盐噪声生成的图像如下图4-3(a)所示,将得到的椒盐噪声的图像进行中值滤波生成的图像如图4-3(b)所示
图4-3(a) 加椒盐噪声生成的图像
图4-3(b) 中值滤波生成的图像
五、实验结论
对实验生成的图像进行对比分析可以得出以下结论:
由于图像的灰度级处于[0,255],所以超出这个范围后像素值会被置0或255。
(1)图像相加一般用于多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。
(2)图像相减可以显示出两幅图之间的差异。如果需要可以将结果加到原图上,可以突出差异细节。
(3)图像相乘实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数被称为缩放,缩放将产生比简单添加像素偏移量自然得多的明暗效果,因为这种操作能够更好的维持图像的相关对比度。
(4)图像相除用于校正成像设备的非线性影响,也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法也成为比率变换。只有差异特别大的地方被显示出来,如想看到更多细节,也可在相除后乘上一个因数提高灰度差异不是特别大的地方的灰度值。
2.平滑滤波
平滑滤波用于模糊处理、减小噪声,图像中每个像素用3X3区域内像素均值代替,减小了图像灰度的尖锐变化区域。见图2,相对于原图,处理后图像边缘明显模糊。
3.拉普拉斯算子滤波法,微分运算能够强调图像中灰度的突变及降低灰度慢变化的区域,见图3.1,原图中的边缘部分明显被增强,图3.2是另外一种系数的掩膜滤波后的结果,边缘突出更加明显。
4.梯度法滤波
梯度法属于一阶微分法,能加强高频分量的作用,从而使图像轮廓清晰,见图4.1,原图的轮廓被提取了出来,再加到原图便可以起到增强图片边缘的作用,见图4.2。
5.中值滤波
中值滤波对于去除一些随机噪声有非常好的效果,如椒盐噪声,中值滤波使拥有不同灰度的点看起来更接近它的邻近值,去除那些邻域中相对较暗、亮的孤立点。图5.1为添加椒盐噪声后的图像,图5.2为中值滤波后的图像。对于课本图3.37(b)所示的平滑滤波结果图,虽然可见噪声减少了,但是付出的代价是图像变得模糊了。
附录:程序清单
function imlaplacian(w)
w=[-1 -1 -1;-1 8 -1; -1 -1 -1];
im=imread('Fig3.38(a).jpg');
subplot(1,2,1);
imshow(im);title('原图像')
%图像的代数运算
function imalgebra()
i=imread('Fig1.10(4).jpg');
j=imread('Fig1.10(5).jpg');
subplot(2,2,1),imshow(i); title('原始图像i')
subplot(2,2,2),imshow(j); title('原始图像j') %读取原图像
g=imsubtract(i,j); %图像相减函数
subplot(2,2,3),imshow(uint8(g));title('两图像相减运算')
g=imadd(i,j); %图像相加函数
subplot(2,2,4),imshow(uint8(g)); title('两图像相加运算')
figure
g=immultiply(i,j); %图像相乘函数
subplot(2,2,1),imshow(uint8(g));title('两图像相乘运算')
g=immultiply(i,3);
subplot(2,2,2),imshow(uint8(g));title('图像i乘常数3')
g=imdivide(i,j); %图像相除函数
subplot(2,2,3),imshow(uint8(g));title('两图像相除运算')
g=imdivide(i,3);
subplot(2,2,4),imshow(uint8(g));title('图像i除常数3')
%平滑滤波进行图像处理
function imsmooth(w)
w=[1 1 1;1 1 1; 1 1 1]*1/9;
im=imread('Fig3.38(a).jpg');
subplot(1,2,1);
imshow(im);title('原图像');
im=double(im);
[x,y]=size(im);
for i=2:(x-1)
for j=2:(y-1)
im1(i,j)=im(i-1,j-1)*w(1,1)+im(i-1,j)*w(1,2)+im(i-1,j+1)*w(1,3)+...
+im(i,j-1)*w(2,1)+im(i,j)*w(2,2)+im(i,j+1)*w(2,3)+...
+im(i+1,j-1)*w(3,1)+im(i+1,j)*w(3,2)+im(i+1,j+1)*w(3,3)+im(i,j);
end
end
[xx,yy]=size(im1);
subplot(1,2,2);
imshow(uint8(im1));title('平滑滤波处理后图像');
%拉普拉斯算子图像增强
im1(i,j)=im(i-1,j-1)*w(1,1)+im(i-1,j)*w(1,2)+im(i-1,j+1)*w(1,3)+...
+im(i,j-1)*w(2,1)+im(i,j)*w(2,2)+im(i,j+1)*w(2,3)+...
+im(i+1,j-1)*w(3,1)+im(i+1,j)*w(3,2)+im(i+1,j+1)*w(3,3)+im(i,j);
end
end
[xx,yy]=size(im1);
subplot(1,2,2);
imshow(uint8(im1)');title('拉普拉斯算子图像增强')
%一阶微分图像增强法也可称为梯度法
function imgradient(w,u)
w=[-1 -2 -1;0 0 0; 1 2 1];
u=[-1 0 1;-2 0 2;-1 0 1];
im=imread('Fig3.38(a).jpg');
subplot(1,2,1);
imshow(im);
title('原图像')
im=double(im);
[x,y]=size(im);
for i=2:(x-1)
for j=2:(y-1)
im1(i,j)=abs(im(i-1,j-1)*w(1,1)+im(i-1,j)*w(1,2)+im(i-1,j+1)*w(1,3)+...
+im(i,j-1)*w(2,1)+im(i,j)*w(2,2)+im(i,j+1)*w(2,3)+im(i+1,j-1)*w(3,1)+...
+im(i+1,j)*w(3,2)+im(i+1,j+1)*w(3,3))+abs(im(i-1,j-1)*u(1,1)+...
+im(i-1,j)*u(1,2)+im(i-1,j+1)*u(1,3)+im(i,j-1)*u(2,1)+...
+im(i,j)*u(2,2)+im(i,j+1)*u(2,3)+im(i+1,j-1)*u(3,1)+im(i+1,j)*u(3,2)+im(i+1,j+1)*u(3,3))+im(i,j);
end
end
[xx,yy]=size(im1);
subplot(1,2,2);
imshow(uint8(im1)); title('梯度法图像增强')
%添加椒盐噪声程序
function noise()
im=imread('Fig5.07(a).jpg');
im1=imnoise(im,'salt &pepper',0.2);
subplot(1,2,1);
imshow(im);title('原图像');
subplot(1,2,2);
imwrite(im1,'添加椒盐噪声生成的图像.jpg');
imshow(uint8(im1));title('添加椒盐噪声后的图像');
%中值滤波程序
function immedian()
im=imread('添加椒盐噪声生成的图像.jpg');
figure
subplot(1,2,1);
imshow(im);title('添加椒盐噪声生成的图像');
im=double(im);
[x,y]=size(im);
for i=2:(x-1)
for j=2:(y-1)
w=[im(i-1,j-1) im(i-1,j) im(i-1,j+1) im(i,j-1) im(i,j) im(i,j+1)im(i+1,j-1) im(i+1,j) im(i+1,j+1)];
w=sort(w);
im1(i,j)=w(5);
end
end
[xx,yy]=size(im1)
subplot(1,2,2);imshow(uint8(im1));title('中值滤波生成的图像');