2017-01-17 5 views
1

Ich versuche, zwei 'BMP' Format Bilder von imread Funktion in Matlab zu lesen.2D-Fourier-Transformation von RGB-Bild als weißes Bild

Für das erste Bild gibt es eine Matrix von 512 * 512 uint8 und für die zweite 512 * 512 * 3 uint8 zurück.

nach der Fourier-Transformation für img2, zeigt es weißes Bild. irgendeine Idee?

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

Antwort

1

Das Problem ist, dass das zweite Bild RGB und fft2 führt den 2D-FFT auf jeden Kanal separat und gibt eine Matix die gleiche Größe wie die Eingabe. Wenn Sie versuchen, das resultierende RGB-Bild anzuzeigen (wobei jeder Kanal die FFT jedes Kanals ist), wird es als alles weiß angezeigt.

Wenn Sie tatsächlich die FFT jeden Kanals wollen, dann werden Sie die FFT separat für jede einzelne

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

andere Option angezeigt werden sollen, ist das Bild in ein Graustufenbild zu konvertieren vor nehmen der FFT

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

enter image description here

Verwandte Themen