2017-01-17 42 views
1

Matlabのimread関数で2つの 'bmp'形式の画像を読み込もうとしています。2次元フーリエ変換RGB画像を白い画像として表示

最初のイメージでは、512 * 512 uint8の行列を返し、2番目のイメージでは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

問題は、第2の画像がRGBであり、fft2が各チャネルは別々に2D FFTを実行し、入力としてmatix同じサイズを返す。ということです結果として表示されるRGB画像(各チャンネルが各チャンネルのFFT)を表示しようとすると、すべての白として表示されます。

実際には、各チャンネルのFFTは、その後、あなたが各1

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

に対して個別にFFTを表示したいと思うあなたの他のオプションは、前のグレースケール画像に画像を変換することである場合 FFTを取る

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

enter image description here

関連する問題