数字图像处理 --- 图像的傅里叶变换的迷思----频谱居中

图像的傅里叶变换在频谱居中上的误区

   如果你用MATLAB去计算图像的傅里叶变换那么你一定会用到FFTSHIFT这一函数为了保证计算后的频谱能够居中化,如下图:

                               

Matlab代码:

clear all;
close all;
I = im2double(imread('cameraman.tif'));
imshowpair(I,log(abs(fftshift(fft2(I)))+1),'montage')

     但是你如果去看matlab的介绍或者在计算FFT之后调用FFTSHIFT函数,那么经过该函数处理过的图像会变成如下形式。如下图。一定要注意:fftshift这一函数的调用是放在傅里叶变换之后的,这和频谱居中的真实计算原理(即,利用傅里叶变换的属性)根本就不一样,可以说是一种投机取巧的方法,但也不失为一个好的方法。

Matlab代码:

Ishift = fftshift(I);
imshow(Ishift,[])

并且MATLAB还给出了如下图所示的示意图,即交换四个象限。注意:所以MATLAB的这种做法是一种投机取巧的做法。

而实际情况不是这样的,根据傅里叶变换的属性或者说是傅里叶变换对。

     要想对频域的信号进行移位,时域的信号需要乘以一个对应的指数函数。这条属性叫做频域移位特性。图像信号在进行变换之前需要对每一个像素乘以(-1)^x+y次方。这是根据欧拉公式计算出来的(注意:e^jπ = -1)。

Matlab代码:

Ie = zeros(size(I));
for i = 1:size(I,1)
    for j = 1:size(I,2)
        Ie(i,j) = (-1)^(i+j).*I(i,j);
    end
end
imshowpair(I,Ie,'montage')

计算出来的图像如下,左边是原始图像,右图是乘以(-1)为底的幂函数后的图像。

     简单点说就是一正一负,每隔一个像素乘以一个负号,得到的图像就好像黑白间隔的棋盘一样。如下图放大后的图像细节所示。而不是那种四个象限互换后的结果。

      最后我用空间域图像乘以指数函数即(-1)^(x+y)的方式对图像的频谱进行居中化的操作,能够得到和MATLAB自带的函数fftshift一模一样的结果。如下图。

      Wherefore,不论是一维信号的频谱还是二维信号的频谱,一定要记得真正的频谱居中不只是简单的fftshift或是四个象限的对调而是在进行变换之前,用一个指数函数乘以原始信号。而这个指数函数根据著名的欧拉公式e^jπ+1=0,最终变成了以(-1)为底的幂函数。


(全文完)

谢谢收看!

再见!

作者 --- 松下J27

参考文献(鸣谢):

【1】Digital image processing, Third Edition.  冈萨雷斯

【2】signals and systems,Second Edition. 奥本海姆

【3】Matlab 2017a

格言摘抄:

有一条路,人以为正,至终成为死亡之路。---《圣经》箴言 14章12节

(*配图与本文无关*)

版权声明:所有的笔记,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27

  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松下J27

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值