2015-09-23 2 views
3

J'essaie de changer la phase d'une image et d'en prendre la transformée de Fourier. Mais ce changement de phase provoque une fuite de puissance selon x et y.Prise de transformée de Fourier après déphasage

Supposons que mon image est une matrice tous les uns. Si je prends la transformée de Fourier, je reçois Spectrum of all ones. Voyez que tout le pouvoir est au centre. En fait, à moins de zoomer, on ne peut pas tout voir.

Supposons maintenant que je multiplie la matrice par une sinusoïde complexe. Idéalement, le pouvoir devrait juste passer à la fréquence de sinusoïde. Mais c'est ce que je reçois Spectra of phase multiplied image. Notez la puissance qui fuit le long des axes x et y.

Pourquoi cela se produit-il? Est-ce à cause de la nature non continue des signaux?

S'il vous plaît voir le code python ci-dessous

import numpy as np 
from matplotlib import pyplot as plt 

# Init a all one array 
base_image = np.ones([1024,1024]) 

#Generate a array so that we can make a sinusoid using it 
x_cords = np.arange(base_image.shape[1]) - base_image.shape[1]/2 
x_cords = np.transpose(x_cords)/512 
x_cords = x_cords.astype(float) 
x_cords = np.tile(x_cords, [base_image.shape[0], 1]) 
y_cords = np.transpose(x_cords) 

#Generate the sinusoid 
phase = np.exp(x_cords + y_cords) 

#Apply this shift 
new_image = base_image * phase 

spec_base = np.fft.fftshift(np.fft.fft2(base_image)) 
spec_new = np.fft.fftshift(np.fft.fft2(new_image)) 

plt.imshow(np.log(np.abs(spec_base))) 
plt.show() 

plt.imshow(np.log(np.abs(spec_new))) 
plt.show() 

Merci d'avance pour les réponses

Répondre

4

Si vous tracez votre new_image, vous voyez que ce n'est pas une sinusoïde: enter image description here

Voici une approche force brute pour créer un motif sinusoïde sans utiliser des nombres complexes:

# create a sinusoid 
F=4 ## select the frequency -- use an even integer to minimize spectral "leakage" 
new_image = np.ones([X,Y]) 
for y in xrange(Y): 
    for x in xrange(X): 
     new_image[y][x] = sin(x/float(X)*pi*F)*sin(y/float(Y)*pi*F) 

enter image description here Le spectre de puissance a une fuite minimale, et si vous zoomez, vous pouvez voir que la puissance de crête est hors origine et qu'il y a en fait 4 pe aks en raison de la mise en miroir autour de DC.

enter image description here

3

Quelques points:

  • tous les 1 est un cas assez spécial - il est exactement périodique, de sorte que la FFT ne montre aucune fuite spectrale.
  • xcords et ycords sont réels, ce qui signifie phase est réel - ce n'est pas une sinusoïde. L'argument à exp devrait être imaginaire.
  • Même avec un phase correct, sauf si vous choisissez phase pour être parfaitement périodique sur votre domaine, vous obtiendrez une fuite spectrale.