当我在matlab中得到图像的傅立叶变换时,为什么要旋转图像



我使用MatLab处理图像。

我对图像执行以下步骤:

  1. 我读了一张图片
  2. 我取图像的傅立叶
  3. 我拍摄了傅立叶变换后的真实图像

在执行上述步骤时,我得到了一个双重旋转的图像。我不知道发生这种事的原因。

有人能解释一下为什么会产生双重旋转图像的原因吗?

代码在这里:

imfftreal = real(imfft);
im = uint8(ifft2(imfftreal));
imshow(im);
Figure;

要想获得正确的图像,还需要虚部。进行逆变换时只使用了实部。

imfftReal = real(imfft);
imfftImag = imag(imfft);
re_imfft=imfftReal +1i*imfftImag;
im = uint8(ifft2(re_imfft));
imshow(im);

在幅度和相位的情况下

imfftMagnitude = abs(imfft);
imfftPhase = angle(imfft);
re_imfft=imfftMagnitude.*exp(1i*imfftPhase);
im = uint8(ifft2(re_imfft));
imshow(im);

我正好遇到了同样的问题,并在两天前将其发布在DSP StackExchange上。

@M529给出了一个非常好和简单的解释:

如果你有一个纯实数的数据集,它的(逆)傅立叶变换将具有埃尔米特对称性:如果你在位置(x,y)找到值z,那么你将在原点的点反射位置(−x,−y)找到复共轭值z*。请注意,这里的原点将是傅立叶空间的中心。当然,如果直流分量不在FFT实现的中心,这可以重新表述。这就是你在你的图像中看到的:一个点反射的版本正在覆盖真实的图像——因为你强迫一个空间具有真实的价值。

这种特性实际上被用于加速磁性共振成像(MRI)在某些情况下:MRI直接获取数据在傅立叶空间中。由于理想的MR图像可以用实数来描述仅值(所有激发的磁化矢量都具有相位0),仅必须获取一半的数据空间,这为您节省了一半的成像时间。当然,由于到了现实的边缘。。。但只要一些技巧,你仍然可以有利地使用该技术。

如果你想看看背后的数学,你可以在@ThP那里找到详细的答案:https://dsp.stackexchange.com/questions/30770/why-real-part-of-fft-converts-image-into-rotation-original/30774#30774

最新更新