在图4.1.1中可以看出,通过变换可以使原图的较高的和较低的
灰度值的动态范围减小了,而原图在二者之间的动态范围增加了,从而其范围的对比度增加了。 MATLAB代码所示: X1=imread('pout.tif'); figure,imshow(X1) f0=0;g0=0; f1=70;g1=30; f2=180;g2=230; f3=255;g3=255; r1=(g1-g0)/(f1-f0); b1=g0-r1*f0; r2=(g2-g1)/(f2-f1); b2=g1-r2*f1; r3=(g3-g2)/(f3-f2); b3=g2-r3*f2; [m,n]=size(X1); X2=double(X1); for i=1:m for j=1:n f=X2(i,j); g(i,j)=0; if(f>=0)&(f<=f1) g(i,j)=r1*f+b1; elseif (f>=f1)&(f<=f2)
21
g(i,j)=r2*f+b2; elseif (f>=f2)&(f<=f3) g(i,j)=r3*f+b3; end end end
figure,imshow(mat2gray(g)) 图像处理图示(如图4-2和图4-3)
图4-2 原图 图4-3增强对比度所得图像
4.1.2 图像求反
对图像求反是将原来的灰度值翻转,简单的说就是使黑变白,使白变黑。
普通的黑白底片和照片就是这样的关系。具体的变换就是将图像中
每个像素的灰度值根据变换曲线进行映射。 MATLAB代码所示: X1=imread('pout.tif');
22
f1=200; g1=256; k=g1/f1; [m,n]=size(X1); X2=double(X1); for i=1:m for j=1:n f=X2(i,j); g(i,j)=0; if(f>=0)&(f<=f1) g(i,j)=g1-k*f; else g(i,j)=0; end end end
figure,imshow(mat2gray(g)) 图像处理图如图4-4所示:
23
图4-4 图像求反后
4.2 空域滤波增强
一般情况下,像素的邻域比该像素要大,也就是说这个像素的邻域中除了本身以外还包括其他像素。在这种情况下,g(x,y)在(x,y)位置处的值不仅取决于f(x,y)在以(x,y)为中心的邻域内所有的像素的值。如仍以s和t分别表示f(x,y)在(x,y)位置处的灰度值,并以n(s)代表f(x,y)在(x,y)邻域内像素的灰度值,则 t=EA[s,n(s)]
为在邻域内实现增强操作,常可利用模板与图像进行卷积。每个模板实际上是一个二维数组,其中各个元素的取值定了模板的功能,这种模板操作也称为空域滤波。
4.2.1 基本原理
空域滤波可分为线形滤波和非线形滤波两类。 线形滤波器的设计常基于对傅立叶变换的分析。 非线形空域滤波器则一般直接对邻域进行操作。
24
另外各种滤波器根据功能又主要分成平滑滤波和锐化滤波。平滑可用低通来实现,锐化可用高通来实现
平滑滤波器:它能减弱或消除傅立叶空间的高频分量,但不影响在低频分量。因为高频分量对应图像中的区域边缘等灰度值具有较大较快变化的部分,滤波器将这些分量滤去可使图像平滑。
锐化滤波器:它能减弱或消除傅立叶空间的高频分量 空域滤波器都是利用模板卷积,主要步骤如下:
(1)将模板在图中漫游,并将模板中心与图中某个像素位置重合; (2)将模板上的系数与模板下对应的像素相乘; (3)将所有的乘积相加;
(4)将和(模板的输出响应)赋给图中对应的模板中心位置像素。 下面分别介绍在MATLAB中如何应用平滑和锐化滤波器。
4.2.2 线性平滑滤波器
线性低通滤波器是最常用的线性平滑滤波器。这种滤波器的所有系数都是正的。对3*3的模板来说,最简单的操作是取所有系数都为1。为保证输出图像仍在原来的灰度范围内,在计算R后要将其除以9再进行赋值。这种方法称为邻域平均法。 MATLAB实现均值过滤器的代码所示: I=imread('saturn.tif');
J=imnoise(I,'salt & pepper',0.02); imshow(I)
figure,imshow(J)
K1=filter2(fspecial('average',3),J)/255; figure,imshow(K1) title('3*3的均值滤波器')
25