如何用matlab计算图像的二维傅里叶变换

本文通过Matlab代码演示了如何使用二维离散傅里叶变换(2D DFT)处理图像,包括频率域的可视化及灰度映射,揭示了图像的频率特性。

关于二维DFT的原理的话,可以参考清华出版的《图像工程 上册》,所以此处赘述二维DFT的原理,如果不懂的话,那效果图像也不会理解为什么。
所以我在代码中直接调用库fft2(X);

% by keyhero
% img_fft.m
clear;
lena=imread('lena.bmp');
freq=fft2(lena);
freq = fftshift(freq);
ampt=abs(freq);
temp=max(ampt);
max_val=max(temp);
temp=min(ampt);
min_val=min(temp);
slope=255/(max_val - min_val);
for i=1:256
    for j=1:256
        temp(i,j)=uint8(slope*(ampt(i,j) - min_val));
        if temp(i,j)~=0
            temp(i,j)=256;
        end
    end
end
imgfft=uint8(temp);
subplot(121);imshow(lena);
subplot(122);imshow(imgfft);

直接显示结果freq数组
你会发现,这是不是很乱的图像,看起来是杂乱无章的,正常情况应该是高频率居于中间部位,低频位于四周,事实上图像数组是这样分布的,只是在计算机上只能显示到255的灰度值。
所以,应该进行灰度映射,把从max映射到255

matlab显示的数值分布如下:
数值分布

所以就有了以上代码中的for循环,并且,为了突出显示效果,把像素值进行了二值化

之后的结果如下:
result

可以发现,当进行图像显示像素值归一化之后,居于图像中间部分(也就是傅里叶变换的低频部分)比较明显,并且在纵向和横向上具有实序列傅里叶变换的对称性。之所以低频部分比较多,这图像的像素分布决定的。

Thank you!

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值