2017-01-17 62 views
1

我试图通过Matlab中的imread函数来读取两个'bmp'格式图像。显示为白色图像的RGB图像的2D傅立叶变换

对于第一个图像,它返回一个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; 

image1 image2

回答

1

的问题是,所述第二图像是RGB和fft2上分别执行2D FFT每个通道并返回一个MATIX相​​同的尺寸作为输入。当您尝试显示生成的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]); 

enter image description here