matlab - 图像处理——使用FFT放大图像(Matlab代码)

标签 matlab image-processing fft 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);

谢谢!

最佳答案

这是因为 FFT 返回对应于从 0 到 Fs 的离散(空间)频率的值,其中 Fs 是(空间)采样率。您需要在高频处插入零,它们位于返回的 FFT 的中心,而不是末端。

您可以使用 fftshift 将高频移动到末尾,用零填充,然后使用 ifftshift 移回(感谢@Shai 的更正):

bigger = ifftshift(padarray(fftshift(imFFT),[10,10]));

另请注意,用零填充会降低放大图像中的值。您可以使用合适的放大系数 amp 更正它,在本例中等于 (1+2*10/length(im))^2:

bigger = ifftshift(padarray(fftshift(amp*imFFT),[10,10]));

关于matlab - 图像处理——使用FFT放大图像(Matlab代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19787627/

相关文章:

matlab - 如何更改矩阵中多个点的值?

matlab - 在 MATLAB 中获取矩阵列最大值的索引

java - 从图像生成多边形(填充形状)

c++ - fftw:为什么我的 2D DFT 输出与每行的 1D DFT 输出不同?

python - MUSIC算法Spectrum Python实现

matlab - 如何创建文章质量的 3-D 图?

matlab - Matlab 中有空设备吗?

MatLab - 分割以分离图像中的触摸对象

python - 使用 OpenCV 测量弯曲线的真实角度

javascript - PhantomJS分析mp3文件的FFT数据并保存