matlab做数字图像处理,读入jpg格式的彩色图像,FFT2做变换,ABS取幅频后,imshow显示出来是大白板?!

代码:f1=imread('D:\tmp\lflf.jpg');
f2=imread('D:\tmp\federer1.jpg');
forir1=fft2(f1);
forir2=fft2(f2);
forir2=fft2(f2);
s1=abs(forir1);
s2=abs(forir2);
imshow(s1,[])

图像就不传了,大概这意思!!咋回事捏~我用的imshow(,[])不是应该自动那啥吗

你在imshow之前先执行下列语句
s1=s1-min(min(s1));
s1=s1/max(max(s1));
imshow(s1)

我还是担心你不明白为什么,所以特地解释一下。MATLAB显示图片,如果是unit的无符号型,可以使各种深度的:1-bit,8-bit,甚至16-bit,32-bit。如果要是double型变量,则需要其范围控制在0~1之间,否则负数算作0,大数算作1.
这里你fft之后,虽然取abs为了保证是实数的想法非常的健全而保险,但是你忽略了我上述所说的一点,就是你的范围。一般来讲一定会转成double型的,因为你懂得fft的原理么~很可能其幅值变化得超过了原来的0~1,或者干脆本来就就是0~255的,所以更加超过了。所以你需要先归一化。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-18
如果没错,应该是fft2(f1),abs后得到的是double型
你再ss1=uint8(s1)应该就可以了
第2个回答  2012-03-08
你在看一下,是不是线与坐标轴或边框重合了。这问题我也碰到过
相似回答