我想在matlab中绘制图像傅立叶变换的幅度和相位。我逐行实现了我在link中读到的教程,但是对于幅度,只绘制了白色屏幕。
我的代码:
I=imread('16.jpg');
fftA = fft2(double(I));
figure, imshow(abs(fftshift(fftA)));
title('Image FFT2 Magnitude');
figure, imshow(angle(fftshift(fftA)),[-pi pi]);
title('Image FFT2 Phase')
我的原始图片是:
问题出在哪里?
答案 0 :(得分:2)
这里有两件事。
2D FFT的输入图像应为强度图像(或灰度),其大小为mxnx1,而不是RGB,大小为mxnx3。
如果图像矩阵属于double
类,则其强度预计在[0,1]范围内。大于1的值将显示为1(填充图颜色图的最高颜色)。
要将RGB图像转换为灰度,请使用rgb2gray
:
Irgb = imread('16.jpg');
Igray = rgb2gray(Irgb);
要解决后者重新缩放图片的问题,或使用imagesc
结合axis equal
来保持比例:
figure;
imagesc(abs(fftshift(fftA))); axis equal; axis tight;