数字图像处理 实验报告,matlap数字图像处理大作业。期末论文 下载本文

内容发布更新时间 : 2024/5/18 16:25:29星期一 下面是文章的全部内容请认真阅读。

imshow(I2);

title('高通滤波unsharp') 处理结果如图4-9所示:

图4-9空域高通滤波

4.3 频域增强

4.3.1 基本原理

卷积理论是频域技术的基础。设函数f(x,y)与线性位不变算子h(x,y)的卷积结果是g(x,y),即g(x,y)=h(x,y)*f(x,y)

那么根据卷积定理在频域有:

G(x,y)=H(u,v)F(u,v)

其中G(x,y)、 H(u,v)、F(u,v)分别是g(x,y)、h(x,y)、f(x,y)的傅立叶变换。

频域增强的主要步骤是:

(1)技术所需增强图的傅立叶变换;

(2)将其与一个(根据需要设计的)转移函数相乘; (3)再将结果进行傅立叶反变换以得到增强的图。 频域增强的两个关键步骤:

(1)将图像从空域转换到频域所需的变换及将图像从频域空间转换回空域所需的变换;

(2)在频域空间对图像进行增强加工操作。

常用的频域增强方法有低通滤波和高通滤波。以下分别介绍在MATLAB中如何实现。

4.3.2 低通滤波

图像的能量大部分集中在幅度谱的低频和中频度,而图像的边缘和噪声对应于高频部分。因此能降低高频成分幅度的滤波器就能减弱噪声的影响。

Butterworth 低通滤波器是一种物理上可以实现的低通滤波器,n阶,截断频率为d0的Butterworth低通滤波器的转移函数为:

H(u,v)=

1 2n1?[d(u,v)/d0]用MATLAB实现Butterworth低通滤波器的代码所示: I1=imread('Saturn.tif'); figure,imshow(I1) I2=imnoise(I1,'salt'); figure,imshow(I2) f=double(I2); g=fft2(f); g=fftshift(g); [N1,N2]=size(g); n=2; d0=50; n1=fix(N1/2); n2=fix(N2/2); for i=1:N1 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的值。在前一种情况下,高频增强滤波器实际上是依照能够带通滤波器,只不过规定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

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高通滤波

5 二值图像分析

二值图像中所有的像素只能从0和1这两个值中取,因此在MATLAB中,二值图像用一个由0和1组成的二维矩阵表示。这两个可取的值分别对应于关闭和打开,关闭表征该像素处于背景,而打开表征该像素处于前景。以这种方式来操作图像可以更容易识别出图像的结构特征。

引言

二值图像操作只返回与二值图像的形式或结构有关的信息,如果希望对其他类型的图像进行同样的操作,则首先要将其转换为二进制的图像格式,可以通过调用MATLAB提供的im2bw()来实现,方法如下: I=imread('cameraman.tif'); figure,imshow(I) J=im2bw(I); figure,imshow(J) title('二值化处理')