for j=1:N2
d=sqrt((i-n1)^2+(j-n2)^2); h=1/(1+0.414*(d/d0)^(2*n)); result(i,j)=h*g(i,j); end end
result=ifftshift(result); X2=ifft2(result); X3=uint8(real(X2)); figure,imshow(X3)
原图和处理结果如图4-10和图4-11所示
图4-10 加噪 图4-11 去噪
4.3.3 高通滤波
高通滤波也称高频滤波器,它的频值在0频率处单位为1,随着频率的增长,传递函数的值逐渐增加;当频率增加到一定值之后传递函数的值通常又回到0值或者降低到某个大于1的值。在前一种情况下,高
31
频增强滤波器实际上是依照能够带通滤波器,只不过规定0频率处的增益为单位1。
实际应用中,为了减少图像中面积大且缓慢变化的成分的对比度,有时让0频率处的增益小于单位1更合适。如果传递函数通过原点,则可以称为laplacian滤波器。
n阶截断频率为d0的Butterworth高通滤波器的转移函数为:
H(u,v)=
1 2n1?[d0/d(u,v)]MATLAB实现Butterworth高通滤波器代码所示: I1=imread('blood1.tif'); figure,imshow(I1) f=double(I1); g=fft2(f); g=fftshift(g); [N1,N2]=size(g); n=2; d0=5; n1=fix(N1/2); n2=fix(N2/2); for i=1:N1 for j=1:N2
d=sqrt((i-n1)^2+(j-n2)^2); if d==0 h=0; else
32
h=1/(1+(d0/d)^(2*n)); end
result(i,j)=h*g(i,j); end end
result=ifftshift(result); X2=ifft2(result); X3=uint8(real(X2)); figure,imshow(X3)
原图和处理结果如图4-12和4-13所示。
图4-12原图 图4-13高通滤波
33
5 二值图像分析
二值图像中所有的像素只能从0和1这两个值中取,因此在MATLAB中,二值图像用一个由0和1组成的二维矩阵表示。这两个可取的值分别对应于关闭和打开,关闭表征该像素处于背景,而打开表征该像素处于前景。以这种方式来操作图像可以更容易识别出图像的结构特征。
5.1 引言
二值图像操作只返回与二值图像的形式或结构有关的信息,如果希望对其他类型的图像进行同样的操作,则首先要将其转换为二进制的图像格式,可以通过调用MATLAB提供的im2bw()来实现,方法如下: I=imread('cameraman.tif'); figure,imshow(I) J=im2bw(I); figure,imshow(J) title('二值化处理')
原图和二值化的结果分别如图5-1和图5-2所示
图5-1原图 图5-2 二值化的结果
34
5.2 二值形态学的基本运算
数学形态学的基础是集合运算,我们把二值图像A看作是二维坐标点的集合,包含图像里为1的点,B通常是一个小的集合,作用类似于模板。
膨胀(Dilation)运算A⊕B 腐蚀(Erosion)运算A?B 开(Open)运算 闭(Close)运算
5.2.1 膨胀
膨胀的算符为?,A用B来膨胀写作A?B,这里先将A和B看作是所有取值为
^1的像素点的集合。其定义为:
A?B={x|[(B)x?A]??}
B膨胀A的过程是:先对B做关于中心像素的映射,再将其映像平移x,换句话说,用B来膨胀A得到的集是B平移后与A至少有一个非零元素相交时B的中心像素的位置的集合。 在MATLAB中运用dilate()函数来实现膨胀操作。
此外,MATLAB中还提供了预定义的形态函数bwmorph。
MATLAB的代码:
I=imread('cameraman.tif'); J=im2bw(I);
BW1=bwmorph(J,'dilate'); subplot(1,2,1); subimage(J);
title('二值处理的图像');
35