用理想低通滤波器在频率域实现低通滤波、高通滤波。

文章目录

    • 理想低通滤波
    • 理想高通滤波
      • 总结:

在matlab中,处理频域图像的过程大概为:
1.对图像进行傅里叶变换。
2.为了方便构建滤波器,将频域图像中心化(即将0频显示在图像中心)
3.设计所需要的频域滤波器
4.在频域图像和滤波器进行乘法运算
5.去中心化
6.转回到空间域

理想低通滤波

空间域的低通滤波,可以通过构造n*n的低通滤波器,然后调用imfilter函数实现。
学过《信号与系统》或者《数字信号处理》的同学都知道,时域卷积等效于频域相乘。所以在本文中,我们通过在频域内的操作,实现理想低通滤波。
理想低通滤波器的频域表示形式为:
H ( u , v ) = { 1 , w h e n D < D 0 0 , w h e n D > D 0 } H(u,v)=\begin{Bmatrix} 1, & &when&D< D_0\\0, & & when&D> D_0 \\ \end{Bmatrix} H(u,v)={1,0,whenwhenD<D0D>D0}
其形状为:
用理想低通滤波器在频率域实现低通滤波、高通滤波。_第1张图片
下面,我们给出matlab中的代码,测试理想低通滤波的效果:


a=imread('aft.jpg');
a=rgb2gray(a);%转换为灰度图
subplot(1,2,1);
imshow(a);
title('原图');
a=im2double(a);%为了处理方便,转换为double类型
b=fft2(a);%傅里叶变换
b=fftshift(b);%中心化
%下面是求理想低通滤波器
[m,n]=size(a);
H=zeros(m,n);
cx=m/2;
cy=n/2;
D0=90;
%设置滤波器
for x=1:m
    for y=1:n
        if((x-cx)^2+(y-cy)^2)>(2*D0^2);
          H(x,y)=0;
        else H(x,y)=1;
        end
    end
end
c=H.*b;
d=ifftshift(c);%反中心化
e= ifft2(d);%回到空间域
subplot(1,2,2);
imshow(e);
title('低通滤波之后');

实验结果图为:
原图:
用理想低通滤波器在频率域实现低通滤波、高通滤波。_第2张图片
效果图:
用理想低通滤波器在频率域实现低通滤波、高通滤波。_第3张图片
通过观测我们可以看出,处理之后的图像变得模糊,达到了低通滤波的效果,实现了低通滤波。

理想高通滤波

而频域内理想高通滤波的原理同低通类似,只是滤波器的设计相反:
H ( u , v ) = { 0 , w h e n D < D 0 1 , w h e n D > D 0 } H(u,v)=\begin{Bmatrix} 0, & &when&D< D_0\\1, & & when&D> D_0 \\ \end{Bmatrix} H(u,v)={0,1,whenwhenD<D0D>D0}

滤波器的效果图为:
用理想低通滤波器在频率域实现低通滤波、高通滤波。_第4张图片
这里不在赘述代码,直接放出高通滤波的结果图:
用理想低通滤波器在频率域实现低通滤波、高通滤波。_第5张图片
相较于原图,图像轮廓清晰了很多,达到了图像增强的效果,实现了理想高通滤波。

总结:

本文讲述了基于matlab的频域处理图像的基本思路,并实现了理想低通滤波与理想高通滤波。高斯滤波、均值滤波的实现思路大同小异,只不过是更换不同的频域滤波器。。。

你可能感兴趣的:(matlab)