Dal FFT2 e IFFT2 entrambi ingressi solo di supporto di tipo double
e single
, il vostro image data (che rischia di tipo uint8
) viene convertito in digitare double
prima prima di essere elaborati da FFT2. Sarà quindi necessario convertire l'immagine in uscita inv
di nuovo ad un unsigned 8-bit integer utilizzando la funzione di UINT8 per recuperare l'immagine originale:
>> img = imread('peppers.png'); %# Load a sample image
>> fft = fft2(img); %# Get the Fourier transform
>> inv = ifft2(fft); %# Get the inverse Fourier transform
>> inv = uint8(inv); %# Convert to uint8
>> imshow(inv); %# Show the image
>> isequal(img,inv) %# Test if inv matches the original image img
ans =
1 %# It does!
NOTA: Come ulteriore suggerimento, vorrei evitare di nominare le variabili fft
e inv
poiché le funzioni con questi nomi esistono già in MATLAB.
In realtà, sembra che FFT2 gestisca quello per voi. Se digiti 'type fft2' nella Command Window, puoi vedere che un input 3-D' x' risulta nell'operazione 'fft (fft (x, [], 2), [], 1)', che esegue una FFT attraverso la seconda e poi la prima dimensione, mentre l'input bidimensionale 'x' (se passassi separatamente ogni piano di colore) comporta una chiamata a [FFTN] (http://www.mathworks.com/help/techdoc /ref/fftn.html). Confrontando ciascun metodo, la differenza massima di pixel in termini assoluti tra i risultati è di circa 5,6e-10, probabilmente a causa delle differenze nell'ordine delle operazioni. In breve, i due sono quasi equivalenti. – gnovice
+1 per condividere questa funzione ... –