xfdxz 发表于 2006-10-24 10:26

请教matlab中如何对图像做Fourier变换

在matlab中对图像进行傅里叶变换,
%img为原始图像

(一)看到别人是这么做的
img1=double(img)/255;
img_mean=mean2(img1);
centered_img=img1-img_mean;
img_fft1=fft2(centered_img);
img_fft1=fftshift(img_fft1);
不明白问什么对图像作归一化,用减去图像中值后才作傅里叶变换???
(二)
自己想应该这么做
img2=double(img);
img_fft2=fft2(img2);
img_fft2=fftshift(img_fft2);

img_=ifft2(img_fft2);%反变换

但是有两个问题:
1 img_是反变换后的图像,应该和img2相等才对呀
可是结果并不一样下面分别是    原始图像、反变换后取得4*4块
156        158        154        154
156        158        154        154
157        155        153        153
155        152        153        152             --------------img2

156        -158        154        -154
-156        158        -154        154
157        -155        153        -153
-155        152        -153        152             --------------反变换后的img_
这是为什么呢??

2 (一)和(二)作出的结果不一样,附图是对lena做变换后的
imshow(abs(img_fft1),[]);
imshow(abs(img_fft2),[]);
(一)的结果对吗,(二)呢,为什么?

happy 发表于 2006-10-24 19:17

1. 归一化主要是为了数据处理方便提出来的,它使得数据处理更加便捷快速,同时保证数据中数值小的不被吞食!
减去图像中值也是类似的作用,可以不做该处理!
2. 反变换后需要去模才是你要的结果
3. 两者都对,主要是(二)没有做归一化处理,所以效果上差了很多

xfdxz 发表于 2006-10-25 08:28

谢谢happy!

关于归一化,我还有一个问题请教:
数据做fft后的最高频率是0.5,这个也是做了归一化吧
那么为什么是0.5,而不是1呢?

q214468952 发表于 2006-10-27 22:01

好好。看的不是很明白,不过很舒服。因为问问题问的清楚,答问题答的明白

happy 发表于 2006-10-28 17:34

原帖由 xfdxz 于 2006-10-25 08:28 发表
谢谢happy!

关于归一化,我还有一个问题请教:
数据做fft后的最高频率是0.5,这个也是做了归一化吧
那么为什么是0.5,而不是1呢?


没明白你这个问题,能否在说明一下?

xfdxz 发表于 2006-10-29 20:27

这两天不在学校。很感谢happy !!
关于图像做FFT后频率最高是0.5的问题 已经有了初步的理解
图像中的频率是指像素点灰度的变换快慢
那么图像的最高频率当然不是0.5
而作FFT后频率最大0.5是指对两个相邻的像素变换的最大值 因为对于三个相邻像素而言最多只能变化一个周期
所以两个相邻像素的变换最大值只能是0.5
问题没有问清楚~~现在说得好像还有点乱
页: [1]
查看完整版本: 请教matlab中如何对图像做Fourier变换