这学期选修《数字图像处理》,完成了一些超级基础的实验,第一次开始接触写代码,参考借鉴前人经验,不足之处敬请批评指正。
实验环境:MATLAB2018A
1、掌握频率域滤波的基本概念和常用方法;
2、利用MATLAB进行频率域滤波,观察图像平滑和图像锐化的效果,加深对频率域滤波的理解;
3、掌握图像FFT变换与DCT变换后进行频率域滤波的不同;
4、掌握低通滤波与高通滤波原理,对DCT变换后的图像进行低通滤波和高通滤波。
图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。频率直接关系到图像空间灰度的变化率,低频对应于图像中变化缓慢的灰度,高频对应于图像中变化较快的灰度。
频率域滤波的基本滤波公式是:g(x,y)=F^(-1) [Η(u,v)Ϝ(u,v)]。其中,F(-1)是傅里叶反变换,F(u,v)是输入图像f(x,y)的DFT,Η(u,v)是滤波函数,g(x,y)是滤波后的输出图像。Η(u,v)和F(u,v)是阵列相乘。这里我们将F(u,v)中心化后再处理,即在变换前使用〖(-1)〗(x+y)来完成。
一幅图像中的边缘和其他尖锐的灰度转变(如噪声)对其傅里叶变换的高频内容有贡献,因此在频率域平滑(模糊)可通过对高频的衰减来达到。图像的锐化可在频率域通过高通滤波来实现,高通滤波会衰减频率域中的低频分量而不会扰乱高频信息。
DCT变换的全称是离散余弦变换(Discrete Cosine Transform),能够将空域的信号转换到频域上,具有良好的去相关性的性能。同时,由于DCT变换是对称的,我们可以利用DCT反变换,在接收端恢复原始的图像信息。DCT解决了DFT数据表示冗余以及复数占据两个数据空间的问题,可用于数据或图像的压缩中。
1、实验步骤
(1)利用理想低通滤波器对图像进行滤波,观察效果;
1)读取图像并进行FFT变换;
2)设计理想低通滤波器,对图像幅度谱进行滤波;
3)显示滤波前后的幅度谱图,进行对比;
4)利用IFFT变换恢复原始图像,进行对比。
(2)利用滤波器直接对FFT变换后的复数值进行滤波,观察效果;
1)读取图像并进行FFT变换;
2)设计理想低通滤波器,直接对频谱进行滤波;
3)显示滤波前后的幅度谱图,进行对比;
4)利用IFFT变换恢复原始图像,与(1)进行对比。
(3)将不带噪声的图像DCT变换,进行低通滤波和高通滤波实验;
1)读取图像并进行DCT变换;
2)设计理想低通滤波器,对频谱进行滤波;
3)显示滤波前后的频谱图,进行对比;
4)利用IDCT变换恢复到空间域,与原图像进行对比。
5)设计理想高通滤波器,对频谱进行滤波;
6)显示滤波前后的频谱图,进行对比;
7)利用IDCT变换恢复到空间域,观察。
(4)将带有噪声的图像DCT变换,进行低通滤波和高通滤波。
1)读取图像,加入高斯噪声并进行DCT变换;
2)按照实验(3)的步骤2)~7)进行实验。
2、按下面要求编写程序并运行结果
(1)利用理想低通滤波器对图像进行滤波;
a=imread('eight.tif');
figure;
subplot 221;imshow(a,[]);title('a)原始图像');
b=fftshift(fft2(a));
b1=abs(b);
b2=angle(b);
subplot 222;imshow(log(b1),[]);title('b)原始图像幅度谱');
c=zeros(242,308);c(81:161,114:194)=b1(81:161,114:194);
c1=log(abs(c)); %显示滤波后的频谱图
subplot 223;imshow(c1,[]);title('c)滤波后图像幅度谱');
d=exp(c1+j*b2);
af=abs(ifft2(d)); %傅里叶反变换
subplot 224;imshow(af,[]);title('d)滤波后图像);
(2)利用滤波器直接对FFT变换后的复数值进行滤波;
a=imread('eight.tif');
figure;
subplot 221;imshow(a,[]);title('a)原始图像');
b=fftshift(fft2(a));
b1=abs(b);
b2=angle(b);
subplot 222;imshow(log(b1),[]);title('b)原始图像幅度谱');
c=zeros(242,308);c(81:161,114:194)=b(81:161,114:194);
c1=log(abs(c)); %显示滤波后的频谱图
subplot 223;imshow(c1,[]);title('c)滤波后图像幅度谱');
af=abs(ifft2(c)); %傅里叶反变换
subplot 224;imshow(af,[]);title('d)滤波后图像);
(3)将不带噪声的图像DCT变换,进行低通滤波和高通滤波实验;
a=imread('eight.tif');%读取图像
figure;
subplot 231;imshow(a,[]);title('a)原始图像');
b=dct2(a);
b1=log(abs(b));
subplot 234;imshow(b1,[]);title('b)原始图像频率谱’);
c=zeros(242,308);c(1:60,1:80)=b(1:60,1:80);%低通滤波¨
c1=log(abs(c));
subplot 232;imshow(c1,[]);title('c)低通滤波后频率谱');
adl=idct2(c);
subplot 235;imshow(adl,[]);title('d)低通滤波后图像');%显示平滑后的图
d=b;d(1:80,1:100)=0;
d1=log(abs(d));
subplot 233;imshow(d1,[]);title('e)高通滤波后频率谱');
adh=idct2(d);
subplot 236;imshow(adh,[]);title('f)高通滤波后图像');
(4)将带噪声的图像DCT变换,进行低通滤波和高通滤波实验;
a=imread('eight.tif');
m=imnoise(a,'gaussian',0,0.1);
figure;
subplot 231;imshow(m,[]);title('a)原始加噪图像');
b=dct2(m);
b1=log(abs(b));
subplot 234;imshow(b1,[]);title('b)原始图像频率谱');
c=zeros(242,308);c(1:60,1:80)=b(1:60,1:80);%低通滤波
c1=log(abs(c));
subplot 232;imshow(c1,[]);title('c)低通滤波后频率谱');
mdl=idct2(c);
subplot 235;imshow(mdl,[]);title('d)低通滤波后图像');%显示平滑后的图
d=b;d(1:80,1:100)=0;
d1=log(abs(d));
subplot 233;imshow(d1,[]);title('e)高通滤波后频率谱');
mdh=idct2(d);
mr=double(m)+mdh;
subplot 236;imshow(mr,[]);title('f)高通滤波锐化后图像');
1.利用理想低通滤波器对图像进行滤波
分析:理想低通滤波器将高频成分滤除,保留低频成分,滤波后图像的边缘和细节部分变模糊,有“振铃”现象。此外,图像只保留少部分低频成分,但图像信息基本上不发生改变,说明能量大部分分布在低频部分。
2. 利用滤波器直接对FFT变换后的复数值进行滤波;
分析:利用理想低通滤波器直接对FFT变换后的复数值进行滤波,与实验(1)相比,“振铃”现象更明显,图像效果变差。说明对FFT变换后的频率谱进行滤波时,必须区分幅度谱和相位谱两部分。
3. 将不带噪声的图像DCT变换,进行低通滤波和高通滤波实验
分析:DCT与FFT相比,只需处理一个数据空间的数值,操作简便。另外,DCT变换后的频率谱充分利用了表示空间,细节部分更充分。低通滤波使边缘和尖锐部分变平滑,而高通滤波正好相反,保留了图像的边缘部分。
4、将带噪声的图像DCT变换,进行低通滤波和高通滤波实验;
分析:对有噪声的图像经过DCT变换后进行滤波运算简便。利用理想低通滤波器进行处理,可以实现图像平滑,利用高通滤波器进行处理,可以实现图像锐化。
1、理想低通滤波器将高频成分滤除,保留低频成分,滤波后图像的边缘和细节部分变模糊,有“振铃”现象。
2、图像只保留少部分低频成分,但图像信息基本上不发生改变,说明能量大部分分布在低频部分。
3、对FFT变换后的频率谱进行滤波时,必须区分幅度谱和相位谱两部分,而对DCT变换后的频率谱可直接进行处理,运算简便,细节部分表示更充分。
4、对有噪声的图像,利用理想低通滤波器进行处理,可以实现图像平滑;利用高通滤波器进行处理,可以实现图像锐化。