dro*_*rco 3 matlab fft image-processing image-enlarge
我正在尝试编写一个简单的matlab代码,用于放大图像fft.我尝试了已知的图像扩展算法,它计算图像的傅里叶变换,用零填充它并计算填充图像的逆傅立叶.然而,逆傅立叶变换返回包含复数的图像.因此,当我尝试使用显示结果时imshow,我收到以下错误:
Warning: Displaying real part of complex input.
你知道我做错了什么吗?
我的代码:
im = imread('fruit.jpg');
imFFT = fft2(im);
bigger = padarray(imFFT,[10,10]);
imEnlarged = ifft2(bigger);
Run Code Online (Sandbox Code Playgroud)
谢谢!
这是因为FFT返回对应于从0到Fs的离散(空间)频率的值,其中Fs是(空间)采样率.您需要在高频处插入零,这些高频位于返回的FFT 的中心,而不是最终的位置.
您可以使用fftshift将高频移至末尾,用零填充,然后向后移动ifftshift(感谢@Shai进行校正):
bigger = ifftshift(padarray(fftshift(imFFT),[10,10]));
Run Code Online (Sandbox Code Playgroud)
另请注意,使用零填充会减小放大图像中的值.您可以使用合适的放大系数来纠正,amp在这种情况下,放大系数等于(1+2*10/length(im))^2:
bigger = ifftshift(padarray(fftshift(amp*imFFT),[10,10]));
Run Code Online (Sandbox Code Playgroud)