图像频域滤波白话解释

来源:互联网 发布:网络录像机添加摄像头 编辑:程序博客网 时间:2024/04/29 18:55

一般来说,图像高频分量对应图像细节信息,图像低频分量对应图像轮廓信息。低通滤波能够用来滤除噪声影响,高通滤波则是强调图像的纹理信息。但通过查阅相关资料发现,截止频率的确定却很少进行相关说明。如果我们需要的是图像中某一个频带的信息,如何精确地通过频域滤波获得滤波后的结果?为此做了相关如下实验。

考虑如下图像:


Fig.1

从图中可看出,包括直流成分在内一共有5种频率成分。频谱关于原点对称。分别为:


Fig.2

在频域上分别为:


Fig.3

举个例子来说。如果我们想滤除第二个频率的成分。我们需要构造一个频域滤波器(或称作传递函数),其阻带要包括图3(b)种白点区域。我们通过一个matlab程序构造了如下传递函数。


Fig.4

其中蓝色部分为0,红色部分为1。(可理解为理想滤波器,如果是高斯或者巴特沃兹滤波器不能简单设置阈值决定0和1)。可见,蓝色部分对应图3(b)种白色部分,也就是频域集中位置。

下一步,就是通过求得的传递函数对图像进行滤波。具体步骤是对原图像进行fft变换(matlab函数fft2)。在频域直接与传递函数点乘。然后进行fft逆变换即可。图5为滤波前后的对比结果。可见第二个频率分量被滤除。


fig.5

相关程序代码如下:

生成传递函数矩阵:

function [ H,D ] = lixiang_brfilter(M, N, DL,DH)

% DL=[1,40]; 二维低频截止位置

% DH=[10,50];二维高频截止位置

% M=256;

% N=256;

DL_do=M-DL;

DH_do=M-DH;

H=ones(M,N);

A=[1:1:M];

V=repmat(A,N,1);生成距离网格

U=V';

for i=1:M

    for j=1:N

        if(U(i,j)>DL(1)&U(i,j)<DH(1))&(V(i,j)>DL(2)&V(i,j)<DH(2))

            H(i,j)=0;

        elseif(U(i,j)>DH_do(1)&U(i,j)<DL_do(1))&(V(i,j)>DH_do(2)&V(i,j)<DL_do(2))%对偶延展

            H(i,j)=0;

        end

    end

end

滤波程序:

function g = dftfilt( f,H )

F=fft2(f,size(H,1),size(H,2));

% perform filtering.

g=real (ifft2(H.*F));

% Crop to original size.

g=g(1:size(f,1),1:size(f,2));

 

0 0
原创粉丝点击