Depuis FFT2 et IFFT2 les deux entrées de support uniquement de type double
et single
, votre image data (qui est probablement de type uint8
) est converti au type double
première avant d'être traité par FFT2. Vous devrez donc convertir votre image de sortie inv
retour à un nombre entier 8 bits non signé en utilisant la fonction UINT8 pour récupérer l'image 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!
REMARQUE: Comme un pourboire, j'éviter de nommer vos variables fft
et inv
puisque les fonctions avec ces noms existent déjà dans MATLAB.
En fait, il semble que FFT2 gère cela pour vous. Si vous tapez 'type fft2' dans la fenêtre de commande, vous pouvez voir qu'une entrée en trois dimensions' x' résulte de l'opération 'fft (fft (x, [], 2), [], 1)', qui effectue une FFT à travers la deuxième puis la première dimension, tandis qu'une entrée à deux dimensions «x» (si vous passiez chaque plan de couleur séparément) entraîne un appel à [FFTN] (http://www.mathworks.com/help/techdoc /ref/fftn.html). En comparant chaque méthode, la différence absolue maximale en pixels entre les résultats est d'environ 5.6e-10, probablement en raison de différences dans l'ordre des opérations. En bref, les deux sont presque équivalents. – gnovice
+1 pour avoir partagé cette fonctionnalité ... –