傅里叶变换、离散余弦变换、频域滤波

一、使用函数fft2,fftshift,ifft2实现一幅灰度图像(lena.bmp)从空域变换到频域,再变换到空域。

核心代码:

matlab代码 

%使用函数fft2,fftshift,ifft2实现一幅灰度图像(lena.bmp)从空域变换到频域,再变换到空域。
Image=imread('D:\课程\数字图像处理\实验\image\lena.jpg');
grayI=rgb2gray(Image);%将图片转化成灰度图
DFTI1=fft2(grayI);%对灰度图像进行离散傅里叶变换
DFTI2=fftshift(DFTI1);
IDFTI1=uint8(abs(ifft2(ifftshift(DFTI2))));

% %构造原频谱图,因为离散傅里叶变换生成的频谱图不好看
% ADFTI1=abs(DFTI1);%取绝对值
% top=max(ADFTI1(:));%取最大值
% bottom=min(ADFTI1(:));%取最小值
% ADFTI1=(ADFTI1-bottom)/(top-bottom)*100;%先映射到0-1,再乘以100实现映射到0-100
% 
% ADFTI2=fftshift(ADFTI1);%对归一化处理以后的频谱图进行中心化,形成中心化频谱图
% 
% IADFTI1=uint8(abs(ifft2(ifftshift(ADFTI2))));

subplot(2,2,1),imshow(Image);title('原图');
subplot(2,2,2),imshow(DFTI1),title('原频谱图');
subplot(2,2,3),imshow(DFTI2),title('中心化频谱图');
subplot(2,2,4),imshow(IDFTI1);title('频域->空域');

运行结果:

实验中没有对频域进行归一化,因为归一化的频域逆变换之后得不到原图。

二、理想低通滤波、理想高通滤波、巴特沃斯低通滤波、巴特沃斯高通滤波、高斯低通滤波、高斯高通滤波

%自编函数hpfilter(),lpfilter()实现理想低通(高通)滤波器、巴特沃斯低通
%(高通)滤波器、高斯低通(高通)滤波器实现对lena.bmp进行低通和高通滤波处理,
%并对实验结果进行分析。
%理想低通滤波器
Image=imread('D:\课程\数字图像处理\实验\image\lena.jpg');
grayI=rgb2gray(Image);
DFTI=fftshift(fft2(double(grayI)));
subplot(2,3,1);imshow(grayI);title('原图');
[N,M]=size(DFTI);
r1=floor(N/2);
r2=floor(M/2);
d0=[5,11,45,68];
for i=1:4
    g=zeros(N,M);
    for x=1:N
        for y=1:M
            d=sqrt((x-r1)^2+(y-r2)^2);
            if d<=d0(i)
                h=1;
            else
                h=0;
            end
            g(x,y)=h*DFTI(x,y);
        end
    end
    if i==1
        subplot(2,3,2);imshow(g);title('傅里叶频谱');
    end
    g=uint8(real(ifft2(ifftshift(g))));
    subplot(2,3,i+2);imshow(g);title(['理想低通滤波D0= ',num2str(d0(i))]);
end

%理想高通滤波器
Image=imread('D:\课程\数字图像处理\实验\image\lena.jpg');
grayI=rgb2gray(Image);
DFTI=fftshift(fft2(double(grayI)));
subplot(2,3,1);imshow(grayI);title('原图');
[N,M]=size(DFTI);
r1=floor(N/2);
r2=floor(M/2);
d0=[5,11,45,68];
for i=1:4
    g=zeros(N,M);
    for x=1:N
        for y=1:M
            d=sqrt((x-r1)^2+(y-r2)^2);
            if d<=d0(i)
                h=0;
            else
                h=1;
            end
            g(x,y)=h*DFTI(x,y);
        end
    end
    if i==1
        subplot(2,3,2);imshow(g);title('傅里叶频谱');
    end
    g=uint8(real(ifft2(ifftshift(g))));
    subplot(2,3,i+2);imshow(g);title(['理想低通滤波D0= ',num2str(d0(i))]);
end

%巴特沃斯低通滤波器
Image=imread('D:\课程\数字图像处理\实验\image\lena.jpg');
Image=rgb2gray(Image);
Image=imnoise(Image,'gaussian');
DFTI=fftshift(fft2(double(Image)));
[N,M]=size(DFTI);
r1=floor(N/2);
r2=floor(M/2);
D0=30;
n=[1,2,3,4];
subplot(2,3,1);imshow(Image);title('高斯噪声图像');
for i=1:4
    g=zeros(N,M);
    for x=1:N
        for y=1:M
            d=sqrt((x-r1)^2+(y-r2)^2);
            h=1/(1+(d/D0)^(2*n(i)));
            g(x,y)=h*DFTI(x,y);
        end
    end
    if i==1
        subplot(2,3,2);imshow(g);title('傅里叶频谱');
    end
    g=uint8(real(ifft2(ifftshift(g))));
    subplot(2,3,i+2);imshow(g);title(['n=',num2str(n(i)),',D0=30']);
end
    
%巴特沃斯高通滤波器
Image=imread('D:\课程\数字图像处理\实验\image\lena.jpg');
Image=rgb2gray(Image);
Image=imnoise(Image,'gaussian');
DFTI=fftshift(fft2(double(Image)));
[N,M]=size(DFTI);
r1=floor(N/2);
r2=floor(M/2);
D0=30;
n=[1,2,3,4];
subplot(2,3,1);imshow(Image);title('高斯噪声图像');
for i=1:4
    g=zeros(N,M);
    for x=1:N
        for y=1:M
            d=sqrt((x-r1)^2+(y-r2)^2);
            h=1/(1+(d/D0)^(2*n(i)));
            h=1-h;
            g(x,y)=h*DFTI(x,y);
        end
    end
    if i==1
        subplot(2,3,2);imshow(g);title('傅里叶频谱');
    end
    g=uint8(real(ifft2(ifftshift(g))));
    subplot(2,3,i+2);imshow(g);title(['n=',num2str(n(i)),',D0=30']);
end

%高斯低通滤波器
Image=imread('D:\课程\数字图像处理\实验\image\lena.jpg');
Image=rgb2gray(Image);
Image=imnoise(Image,'gaussian');
DFTI=fftshift(fft2(double(Image)));
[N,M]=size(DFTI);
r1=floor(N/2);
r2=floor(M/2);
D0=[20,40];
subplot(2,2,1);imshow(Image);title('高斯噪声图像');
for i=1:2
    g=zeros(N,M);
    for x=1:N
        for y=1:M
            d=sqrt((x-r1)^2+(y-r2)^2);
            h=exp(-0.5*(d/D0(i))^2);
            g(x,y)=h*DFTI(x,y);
        end
    end
    if i==1
        subplot(2,2,2);imshow(g);title('傅里叶频谱');
    end
    g=uint8(real(ifft2(ifftshift(g))));
    subplot(2,2,i+2);imshow(g);title(['n=2,D0=',num2str(D0(i))]);
end

%高斯高通滤波器
Image=imread('D:\课程\数字图像处理\实验\image\lena.jpg');
Image=rgb2gray(Image);
Image=imnoise(Image,'gaussian');
DFTI=fftshift(fft2(double(Image)));
[N,M]=size(DFTI);
r1=floor(N/2);
r2=floor(M/2);
D0=[20,40];
subplot(2,2,1);imshow(Image);title('高斯噪声图像');
for i=1:2
    g=zeros(N,M);
    for x=1:N
        for y=1:M
            d=sqrt((x-r1)^2+(y-r2)^2);
            h=exp(-0.5*(d/D0(i))^2);
            h=1-h;
            g(x,y)=h*DFTI(x,y);
        end
    end
    if i==1
        subplot(2,2,2);imshow(g);title('傅里叶频谱');
    end
    g=uint8(real(ifft2(ifftshift(g))));
    subplot(2,2,i+2);imshow(g);title(['n=2,D0=',num2str(D0(i))]);
end

 运行结果及分析

2.1 理想低通滤波

核心代码:

分别对频域信息进行半径等于5、11、45、68的低通滤波

实验结果:

随着半径逐渐增大,低通滤波图片的清晰度也逐渐变高,这是因为半径越大,就可以保留更多的边缘、细节、纹理等信息,图片也就越来越清晰。

2.2 理想高通滤波

核心代码:

分别对频域信息进行半径等于5、11、45、68的低通滤波

实验结果:

可以看到,高频信息保留的是图片的边缘、细节、纹理等信息,且随着半径的增大,高频信息越来越少,能保留的边缘、细节、纹理等信息也越来越少。

2.3 巴特沃斯低通滤波器

核心代码:

对频域信息进行n=1、2、3、4的低通滤波,n越大,越近似于理想低通滤波。

实验结果:

可以看到,噪声被有效去除,但图像也变得越来越模糊,并且随着阶数n的增加,图像的振铃效应也越来越明显。因为随着n逐渐增大,巴特沃斯滤波的滤波函数越趋近于理想低通滤波函数。

2.4 巴特沃斯高通滤波器

核心代码:

对频域信息进行n=1、2、3、4的低通滤波,n越大,越近似于理想高通滤波。

实验结果:

随着n逐渐增大,频域保留的高频信息越来越少。

2.5 高斯低通滤波

核心代码:

实验结果:

可以看到,高斯低通滤波去除了噪声,但是当D0比较小时,图片会比较模糊。

2.6 高斯高通滤波

核心代码:

实验结果:

可以看到,当D0=20时,可以保留更多的高频信息。

三、傅里叶变换置不同区域系数为0,观察图像输出效果

%打开一幅图像,对其进行DFT变换,并置其不同区域内的系数为零,进行IDFT,观察其输出效果。
Image=imread('D:\课程\数字图像处理\实验\image\lena.jpg');
Image=rgb2gray(Image);
DFTI=fftshift(fft2(double(Image)));
subplot(3,3,1);imshow(Image);title('原图');
subplot(3,3,2);imshow(DFTI);title('傅里叶频谱');
[N,M]=size(Image);
r1=floor(N/2);
r2=floor(M/2);

%置左上角的值为0
DFTI1=DFTI;
DFTI1(1:r1,1:r2)=0;
IDFT1=uint8(real(ifft2(ifftshift(DFTI1))));
subplot(3,3,3);imshow(IDFT1);title('左上角置0');

%置左下角的值为0
DFTI2=DFTI;
DFTI2(r1:N,1:r2)=0;
IDFT2=uint8(real(ifft2(ifftshift(DFTI2))));
subplot(3,3,4);imshow(IDFT2);title('左下角置0');

%置右上角的值为0
DFTI3=DFTI;
DFTI3(1:r1,r2:M)=0;
IDFT3=uint8(real(ifft2(ifftshift(DFTI3))));
subplot(3,3,5);imshow(IDFT3);title('右上角置0');

%置右下角的值为0
DFTI4=DFTI;
DFTI4(r1:N,r2:M)=0;
IDFT4=uint8(real(ifft2(ifftshift(DFTI4))));
subplot(3,3,6);imshow(IDFT4);title('右下角置0');

%置中心的值为0
DFTI5=DFTI;
DFTI5(r1-floor(r1/2):r1+floor(r1/2),r2-floor(r2/2):r2+floor(r2/2))=0;
IDFT5=uint8(real(ifft2(ifftshift(DFTI5))));
subplot(3,3,7);imshow(IDFT5);title('中心置0');

运行结果及分析

以频域的几何中心为准,将频域分成左上角、左下角、右上角、右下角、中心。一共5个区域。分别置每个区域的系数为0,IDFT变换之后查看的图片的效果。

实验结果:

可以看到,不同的区域置0,IDFT变换之后得到的图片是不一样的。

 

从Lena的脸可以看出,图片的几何特征发生了变换。亮度也有区别。

右下角和中心置0则去除了低频信息,结果图片只有原图的边缘、细节、纹理等信息。

四、离散余弦变换置不同区域系数为0,观察图像输出效果

%打开一幅图像,对其进行DCT变换,并置其不同区域内的系数为零,进行IDCT,观察其输出效果。
Image=imread('D:\课程\数字图像处理\实验\image\lena.jpg');
Image=rgb2gray(Image);
DCTI=dct2(Image);
subplot(2,3,1);imshow(Image);title('原图');
subplot(2,3,2);imshow(DCTI);title('DCT频谱');
[N,M]=size(DCTI);
DCTI_low=zeros(N,M);
DCTI_center=zeros(N,M);
DCTI_high=zeros(N,M);
cf=60;
for x=1:N
    for y=1:M
        if(y<M-cf && x<(-N/M)*y+N-cf)
            DCTI_low(x,y)=0;
            DCTI_center(x,y)=DCTI(x,y);
            DCTI_high(x,y)=DCTI(x,y);
        elseif(y>M-cf&&x>(-N/M)*y+2*N-cf)
            DCTI_low(x,y)=DCTI(x,y);
            DCTI_center(x,y)=DCTI(x,y);
            DCTI_high(x,y)=0;
        else
            DCTI_low(x,y)=DCTI(x,y);
            DCTI_center(x,y)=0;
            DCTI_high(x,y)=DCTI(x,y);
        end
    end
end

%低频系数置为0
IDCTI_low=uint8(abs(idct2(DCTI_low)));

%中频系数置为0
IDCTI_center=uint8(abs(idct2(DCTI_center)));

%高频系数置为0
IDCTI_high=uint8(abs(idct2(DCTI_high)));

subplot(2,3,3);imshow(IDCTI_low);title('低频系数置为0');
subplot(2,3,4);imshow(IDCTI_center);title('中频系数置为0');
subplot(2,3,5);imshow(IDCTI_high);title('高频系数置为0');

运行结果及分析

将频域分成低频、中频、高频。分别将低频系数、中频系数、高频系数置0,进行IDCT变换,查看结果图片。

实验结果:

可以看到,低频系数置0,结果图片只保留原图的边缘、细节、纹理等信息。而中频系数和高频系数置0,图片只是丢掉一些边缘、细节、纹理等信息,并不影响图片的可视化质量。但是中频系数置0和高频系数置0还是有区别:

 

可以看到中频系数置0得到图片会比高频系数置0得到的图片更模糊。

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 数字图像处理中,傅里叶变换余弦变换是两个常用的频域处理方法,可以用于图像去噪、增强、压缩等方面。下面是基于MATLAB的数字图像处理傅里叶变换余弦变换实验小结及分析: 1. 傅里叶变换实验 傅里叶变换可以将图像从时域转换到频域,分析图像中的频率成分,可以用于图像去噪、增强等方面。在MATLAB中,可以使用fft2函数进行二维离散傅里叶变换,ifft2函数进行反变换。 (1)实验目的:学习傅里叶变换的原理及应用,了解二维傅里叶变换的实现方法。 (2)实验步骤: - 读取一张灰度图像,使用imshow函数显示图像; - 对图像进行二维离散傅里叶变换,使用abs函数获取变换后的幅值谱,使用log函数进行对数变换,使用mat2gray函数将图像变换到0-1之间的范围; - 对幅值谱进行中心化,使用fftshift函数; - 对中心化后的幅值谱进行逆变换,使用ifft2函数,使用uint8函数将图像转换为8位无符号整数; - 使用subplot函数将原始图像、幅值谱、逆变换后的图像显示在同一幅图像中。 (3)实验结果分析: 通过对图像的傅里叶变换,可以将图像从时域转换到频域,分析图像中的频率成分。实验结果表明,傅里叶变换后的幅值谱中,高频部分对应着图像的细节信息,低频部分对应着图像的整体信息。通过中心化幅值谱,可以将频谱的零频分量移到中心位置,方便进行分析和处理。通过逆变换,可以将幅值谱转换为时域图像,并进行图像去噪、增强等应用。 2. 余弦变换实验 余弦变换是一种常用的频域变换方法,可以将图像从空间域转换到频域,分析图像的频率成分,实现图像的压缩、去噪、增强等功能。在MATLAB中,可以使用dct2函数进行二维离散余弦变换,idct2函数进行反变换。 (1)实验目的:学习余弦变换的原理及应用,了解二维离散余弦变换的实现方法。 (2)实验步骤: - 读取一张灰度图像,使用imshow函数显示图像; - 对图像进行二维离散余弦变换,使用abs函数获取变换后的幅值谱,使用log函数进行对数变换,使用mat2gray函数将图像变换到0-1之间的范围; - 对幅值谱进行中心化,使用fftshift函数; - 对中心化后的幅值谱进行逆变换,使用idct2函数,使用uint8函数将图像转换为8位无符号整数; - 使用subplot函数将原始图像、幅值谱、逆变换后的图像显示在同一幅图像中。 (3)实验结果分析: 通过对图像的余弦变换,可以将图像从空间域转换到频域,分析图像中的频率成分。实验结果表明,余弦变换后的幅值谱中,高频部分对应着图像的细节信息,低频部分对应着图像的整体信息。通过中心化幅值谱,可以将频谱的零频分量移到中心位置,方便进行分析和处理。通过逆变换,可以将幅值谱转换为时域图像,并进行图像压缩、去噪、增强等应用。 综上所述,傅里叶变换余弦变换是数字图像处理中常用的频域处理方法,可以用于图像去噪、增强、压缩等方面。在MATLAB中,可以使用fft2、ifft2、dct2、idct2等函数进行变换和反变换,通过对变换后的幅值谱进行分析和处理,可以实现图像的相应功能。 ### 回答2: 数字图像处理是一门研究如何对数字图像进行处理和分析的学科。傅里叶变换余弦变换是数字图像处理中常用的两种变换技术。本次实验是基于MATLAB对数字图像进行傅里叶变换余弦变换的实验。 在实验中,我们首先将原始图像加载到MATLAB中,并进行预处理,例如灰度化、去噪等。然后,我们使用MATLAB提供的函数进行傅里叶变换余弦变换。傅里叶变换将图像从时域转换到频域,可以分析图像中的频率成分,从而进行频域滤波、频谱分析等操作。余弦变换可以将图像分解为一系列余弦基函数的加权和,从而提取图像的频谱特征。 通过实验,我们发现傅里叶变换在图像频率分析和滤波等方面具有重要的作用。通过对傅里叶变换结果的观察,我们可以了解图像中的低频分量和高频分量,并相应地进行处理。傅里叶变换还可以用于图像压缩和图像增强等应用。 而余弦变换则适用于一些特定的图像处理任务,尤其是对于包含周期相关特征的图像。余弦变换能够将图像分解为一系列余弦基函数,每个基函数代表了图像中不同频率的振幅和相位信息。通过对余弦变换结果的分析,我们可以提取图像中的周期性信息,并进行相应的处理。 总之,傅里叶变换余弦变换是数字图像处理中常用的两种变换方法,具有广泛的应用。通过实验,我们深入了解了它们的原理和使用方式,为将来在图像处理领域的实际应用打下了基础。我们还发现这两种变换方法在图像处理中互为补充,可以分别用于不同的图像处理任务,提高图像的质量和效果。 ### 回答3: 数字图像处理中,傅里叶变换余弦变换是常用的频域处理方法。本次实验基于matlab进行了傅里叶变换余弦变换的实验,以下是小结和分析。 首先进行了傅里叶变换的实验。傅里叶变换可以将图像从空域转换到频域,可以分析图像的频率成分。在实验中,我们首先读取了一张图像,然后使用matlab中的fft函数进行傅里叶变换。通过查看变换后的结果,我们可以观察到不同频率的成分。在具体分析时,我们可以使用低通滤波器通过保留低频信号来消除噪声,也可以使用高通滤波器通过保留高频信号来强调图像的细节。 其次进行了余弦变换的实验。余弦变换是一种针对实数信号的变换方法,可以将图像从空域转换到相关域。在实验中,我们同样读取了一张图像,然后使用matlab中的dct函数进行余弦变换。通过观察变换后的结果,我们可以发现余弦变换主要用于图像压缩。变换后的结果可以通过截取一部分系数来降低图像的质量,从而实现图像的压缩存储。 对于傅里叶变换余弦变换的实验,我们可以得出以下结论。傅里叶变换适用于分析图像的频率成分,可以用于滤波和图像增强。而余弦变换主要用于图像的压缩,在保证一定图像质量的前提下,减小图像的存储空间。在实际应用中,傅里叶变换余弦变换通常结合其他图像处理方法一起使用,以达到更好的效果。 此外,我们还可以进一步探索更多的图像处理方法,比如小波变换和离散余弦变换。这些方法可以进一步改善图像处理的效果,并且在不同的应用场景下有着不同的优势和适用性。 总之,基于matlab的傅里叶变换余弦变换实验为我们提供了一种有效的图像处理方法,可以分析图像的频率成分和进行图像压缩。熟练掌握这些方法,对于数字图像处理的学习和应用具有重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值