我使用MatLab处理图像。
我在图片上执行以下步骤:
执行上述步骤时,我得到了双重旋转的图像。我不知道发生这种情况的原因。
有人可以解释一下为什么会产生双旋转图像的原因吗?
这段代码在这里:
imfftreal = real(imfft);
im = uint8(ifft2(imfftreal));
imshow(im);
Figure;
答案 0 :(得分:0)
为了使图像正确,您还需要虚构部分。在进行逆变换时,您只使用了实部。
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);
答案 1 :(得分:0)
我确实遇到了同样的问题,仅在两天前将它发布在DSP StackExchange上。
@M529给出了一个非常好的简单解释:
如果你有一个纯粹真实的数据集,它的(逆)傅里叶变换将具有厄米特对称性:如果在位置(x,y)找到值z,那么你会发现复共轭值z * at关于原点的点反射位置(-x,-y)。请注意,此处的原点将是傅立叶空间的中心。当然,如果DC分量不在FFT实现的中心,则可以重新制定。这就是你在图像中看到的:点反射版本覆盖了真实图像 - 因为你强迫一个空间被真正重视。
此属性实际上用于加速磁场 在某些情况下共振成像(MRI):MRI直接获取数据 在傅立叶空间。由于可以通过实际描述理想的MR图像 只有值(所有激发的磁化矢量都有相位0),你只能 必须获得一半的数据空间,这样可以节省一半的数据空间 成像时间。当然,MR图像并非完全真正有价值 对现实的限制...但你可以用一些技巧 有利地使用这种技术。
如果你想看到背后的数学,你可以在@ThP找到详细的答案:https://dsp.stackexchange.com/questions/30770/why-real-part-of-fft-converts-image-into-rotation-original/30774#30774