如何使GNU Octave ifft2命令工作?

时间:2015-02-03 15:34:52

标签: image-processing fft octave ifft

我正在尝试使用fft2命令在GNU Octave中进行一些图像处理,但我遇到了逆变换的问题。

我可以毫无问题地计算变换,随心所欲地做任何事情,但是当我回到空间域并尝试绘制图像时,我得到的全黑图像。

我甚至试图只进行正向和反向变换,仅此而已,同样的问题。

我该怎么办?

顺便说一下,我用来测试的图像就是那个:

http://bootstrapbay.com/blog/wp-content/uploads/2014/05/yellow-taxi_vvvjao.png

代码:

我= imread('image.jpg');

imshow(I)%正确生成图像

I2 = fft2(I);

I2 = ifft2(I2);

imshow(I2)%生成黑色图像

1 个答案:

答案 0 :(得分:0)

如果您尝试使用例如一个jpg你会发现,与你的png相比,它会给你一个非常不同的结果。您的问题是您正在使用imread加载uint8但fft2会产生双值结果(您可以在this回答中查看更多详细信息)。此外,图像作为RGB导入 - 这是1维度太多。

所以要修复它,只需选择一个通道进行转换并告诉它你的比例(dmin,dmax):

a = double(imread('image.png'));
a = a(:,:,1);
ffta = fft2(a);
img = ifft2(ffta);

dmin = min(min(abs(img)));
dmax = max(max(abs(img)));

imshow(img, [dmin dmax])
pause(5)

导致灰度图像的恢复:

enter image description here

如果你有图像包,你也可以使用im2double等功能(参见例如here)。