matlab im2double 反变换,MATLAB作二维傅里叶变换所需要注意和知道的东西(im2double、fft2、abs、imshow、二维傅里叶变换的物理意义)...

图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注!

图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注!

图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注!

-----------------------------------------------

代码如下,这个代码是实现灰度图像作二维傅里叶变换后的非线性变换哈~

clear all;

I=imread('coins.png');

F=fft2((im2double(I)));

F=fftshift(F);

F=abs(F);

T=log(F+1);

subplot(1,2,1);

imshow(F,[]);

title('未经变换的频谱');

subplot(1,2,2);

imshow(T,[]);

title('对数变换后');

下面对上面代码中体现的知识点进行说明:

1 F=fft2((im2double(I)));  作二维傅里叶变换前一定要先把用imread读到的数据原始图像的数据类型由uint8转化为double类型!

2 fftshift是对MATLAB作傅里叶变换后的数据的零频点移到频谱的中间,具体的作用你看下面的代码的运行结果即可:

代码下载链接:http://pan.baidu.com/s/1jIfGM2a 密码:iqxt

a7b690ab78c1ad577ace4277e38c7461.png

原信号是:

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);

可见,信号的频率是15Hz和40Hz,15Hz的幅度是0.5,40Hz的幅度是2,我们看到中间的那个蓝色频谱图,因为没有经过fftshift,那完全就是错的!所以为啥要用fftshift呢?根本原因就是MATLAB在作傅里叶变换时它没有负频率啊!它的频率范围是0到采样频率啊!具体到二维的图像傅里叶变换的意义可以参考下面这幅图:

80d549c6194eab699f7e24e5a5e366d2.png

3 F=abs(F); 这个模实际上就是欧拉距离,实际上就是根号下[(x1-x2)^2+(y1-y2)^2]!

4 imshow(F,[]);如果F是二维矩阵,则显示的是灰度或二值图像,后面的参数[]在这里是必须要的,加上的话会对数据做归一化处理再显示,如果不作这个处理的话,你想,如果数据跨度比较大,那么有很多数据都是超过255的,那么最后的结果就是整个图片的大部分范为都是白的,你可以想像一下,其实是很容易想到的!

-----------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值