显示为白色图像的 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]);
我正在尝试通过 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]);