显示为白色图像的 RGB 图像的二维傅里叶变换

2D Fourier Transform of RGB Image Showing up as a White Image

我正在尝试通过 Matlab 中的 imread 函数读取两个 'bmp' 格式的图像。

对于第一个图像,它 returns 一个 512*512 uint8 的矩阵,对于第二个图像,它是 512*512*3 uint8。

img2进行傅里叶变换后,显示为白色图像。任何的想法?

img1 = imread('I1.bmp');
img2 = imread('I2.bmp');

mag1 = abs(img1);
mag2 = abs(img2);

phase1 = angle(double(img1));
phase2 = angle(double(img2));

subplot(2, 2, 1);
subimage(img1);

subplot(2, 2, 2);
subimage(img2);

FFT1 = fft2(double(img1));
FFT2 = fft2(double(img2));

subplot(2, 2, 3);
imshow(log(abs(fftshift(FFT1))), [0 10]);
colormap(gray); 
colorbar;

subplot(2, 2, 4);
imshow(log(abs(fftshift(FFT2))), [0 10]);
colormap(gray); 
colorbar;

问题是第二张图像是 RGB 并且 fft2 每个通道分别执行 2D FFT 和 returns 一个与大小相同的矩阵输入。当您尝试显示生成的 RGB 图像(其中每个通道是每个通道的 FFT)时,它将显示为全白。

如果您实际上想要每个通道的 FFT,那么您需要分别显示每个通道的 FFT

% Display red FFT
imshow(log(abs(fftshift(FFT2(:,:,1)))), [0 10]);

您的另一个选择是将图像转换为灰度图像然后进行 FFT

img2 = rgb2gray(img2);
FF2 = ff2(img2);
imshow(log(abs(fftshift(FFT2(:,:,1)))), [0 10]);