频域滤波的基本步骤
1.计算原始图像f(x,y)的二维离散傅里叶变换(DFT),得到F(u,v)。
2.将频谱F(u,v)的零频点移动到频谱图的中心位置。
3.计算滤波器函数H(u,v)与F(u,v)的乘积G(u,v)。
4.将频谱G(u,v)的零频点移回到频谱图的左上角位置。
5.计算第4步计算结果的傅里叶反变换g(x,y)。
6.取g(x,y)的实部作为最终滤波后的结果图像。
滤波能否取得理想结果的关键取决于频域滤波函数H(u,v),称之为滤波器,或滤波器传递函数。因为它在滤波中抑制或滤除了频谱中某些频率的分量,而保留其他一些频率不受影响。
在MATLAB中的F(1,1)和f(1,1)分别对应于正变换中的数学量F(0,0)和反变换中的数学量f(0,0)。
对一幅图像进行傅里叶变换运算量很大,不直接利用以上公式计算,在MATLAB中采用傅里叶变换快速算法(MATLAB内置函数算法),这样可大大减少计算量。为提高傅里叶变换算法的速度,一种途径是从软件角度来讲,要不断改进算法;另一种途径为硬件化,它不但体积小且速度快。
MATLAB提供了几个和傅里叶变换相关的函数。其说明如表所示:
fft2(I) | 二维傅立叶变换 |
abs(I) | 获得傅立叶频谱 |
fftshift(I) | 将变换的原点移至频率矩形的中心 |
ifft2(I) | 二维傅立叶反变换 |
real(ifft2(I)) | 提取变换后的实部 |
imag(ifft2(I)) | 提取变换后的虚部 |