首页 > 代码库 > 频率域滤波_滤波基础

频率域滤波_滤波基础

  这节来介绍一下频率域滤波。

  在空间域内,我们是直接对像素进行操作以增强图像的有用信息。像高斯平滑,是取一个模板与图像进行卷积操作,得到处理后的图像。不同的变换域可以很方便的解决某种问题,例如空间域中值滤波是取一个区域的中值替代中间像素的灰度,可以很好的去除椒盐噪声例如下图中的(1)(2)(3)。

         

 (1)原图           (2)带有椒盐噪声的图像 (3)图像(2)复原之后的图像 (4)部分区域带有周期噪声

  但不是所有的图像都可以在空间域进行图像的增强,有的时候都不知道用什么滤波器来增强图像,例如只有一部分周期噪声的图像(4),中值滤波和高斯滤波等并不能有效的去噪,这个时候可以把它变换到别的变换域中进行处理,在该变换域中一些噪声有很明显的特性。我在此介绍的是频率域图像的增强,如下是傅里叶变换的公式,

   

 

f(x,y)是空间域像素点的灰度值,F(u,v)中的u,v是频率域变换,F()为对应的变换值。

              

  是傅里叶级数的三角形式,它说明一个函数可以表示成一系列正余弦函数之和,如上图。我们在频率域平滑图像就是去掉频率图像中的较大值即高频成分,锐化图像就是去掉低频成分,所以我们只要找到噪声的频率范围然后设置一个频率范围D0到D1,只要这部分频率被去除就可以解决周期噪声的问题了(具体的操作将在之后介绍),这是比较容易实现的。频率表示的是空间域图像的梯度,高频反映的是图像的细节部分,像噪声、边缘等,低频则是反映出图像的变化比较平滑,所以频谱图也是图像的梯度分布图。再来看一下什么是频谱图:

   是频谱计算公式,欧拉公式使得变换后的F(u,v)带有实部虚部,频谱是一个很重要的概念。图(5)(6)就是图像(1)和(4)的频谱图,不经处理的频谱图坐标原点在左上角,从图中可以看出四角是比较亮的,但是这两幅图中看不出噪声的特点,两幅图似乎没有什么区别,但是如果将图像的坐标原点移到图像的中心,效果将完全不一样了,如图(7)(8)。

 

(5)图像(1)的频谱图   (6)图像(4)的频谱图   (7)图(5)原点移中     (8)图像(6)原点移中

 

  从移中后的频谱图可以清楚的看见两幅图的差异,再来看频谱反映了什么信息。图(7)中间部分最亮,反映的是图像的低频信息,越亮代表图像的低频成分越多,图像就会比较平滑,没有很明显的边角之类的细节,像沙漠图(9)整体过渡比较平滑,频谱图中间部分就比较亮,而图(1)有很多细节,则它的频谱图中间部分稍微暗点。从图(8)中可以看出,除了中间部分比较亮以外,在四条垂直亮线上还有四个亮点,这是带有周期噪声的图(6)对应的频谱图,正常情况下只有一个亮点,所以比较直观的看出了噪声,这也是为什么要进行移中的原因之一。

       当U=V=0时说明了频谱图的中心点是等于图像灰度的平均值。

   

 (9)沙漠图                      (10)图(9)的频谱图     (11)图(1)的频谱图

  以上简单介绍了一下什么是频率域滤波,再来看一下在频率域增强图像具体的步骤:

  1、用乘数乘以输入图像进行中心变换  这样就将频谱图进行移中处理了
    2、傅里叶变换到频域
    3、频域滤波
    4、变换到空间域
    5、取g(x,y)的实部
    6、取消图像的乘数
  H(u,v)就是滤波器,它只能允许一定的频率通过,几种常用的频率域滤波器,还有图(4)的增强过程及效果将在下篇介绍。

 

 附录:

%%周期噪声图像的特点

T = imread(‘F:\picture\5.jpg‘);
T_gry = rgb2gray(T);
figure,imshow(T_gry);

[rows cols] = size(T_gry);
T_noise = zeros(rows,cols);
%给原图像的1/4区域加上周期噪声
for i = 1:rows
    for j = 1:cols
        T_noise(i,j)= double(T_gry(i,j));
    end
end
for i = 1:rows/2
    for j = 1:cols/2
        T_noise(i,j)= T_gry(i,j)+20*sin(20*i)+20*sin(20*j);
    end
end
T_noise = uint8(T_noise);
figure,imshow(T_noise);

%对有周期噪声的图像进行傅里叶变换
fcoef = fft2(double(T_noise));
%将频谱移中
spectrum = fftshift(fcoef);
%对幅值做对数变换以压缩动态范围,以便显示
temp = log(1+abs(spectrum));
%显示移中频谱图
figure,imshow(temp,[]);

%对源图像进行傅里叶变换并显示频谱图
fcoef = fft2(double(T_gry));
%将频谱移中
spectrum = fftshift(fcoef);
%对幅值做对数变换以压缩动态范围,以便显示
temp = log(1+abs(spectrum));
%显示移中频谱图
figure,imshow(temp,[]);

频率域滤波_滤波基础