Questa non è una domanda di "programmazione". Ma sono sicuro che è qualcosa che è ampiamente conosciuto e compreso in questa comunità.Come si moltiplicano gli spettri di due immagini di dimensioni diverse?
Ho un'immagine, x, e un'immagine molto più piccola, y, e ho bisogno di convolvolare i due moltiplicando i loro FFT. Ma dal momento che non sono della stessa dimensione, non so come fare la moltiplicazione del dominio della frequenza.
Prendo la FFT (bidimensionale) di x (che è una matrice di numeri interi 4096 x 4096), che mi dà la rappresentazione del dominio di frequenza, X (che è una matrice di numeri complessi e penso che sia la sua dimensione è 2048 x 2048).
Analogamente, prendo la (FFT bidimensionale di y (che è una matrice intera di dimensione 64 x 64), che mi dà la rappresentazione del dominio della frequenza, Y (che è anche una matrice di numeri complessi e penso la dimensione è 32 x 32.
Sto usando la funzione fourn in Ricette numeriche, quindi le mie matrici di input, xey devono essere compresse in matrici unidimensionali, che vengono sostituite dalle loro trasformate di Fourier discrete, X e Y. Il punto è che anche se questo è un problema bidimensionale con le immagini, sto lavorando con array monodimensionali
Se stavo cercando di convolvolare due immagini delle stesse identiche dimensioni, xey. esso sarebbero tutti molto semplice:
X = FFT(x)
Y = FFT(y)
Z = X * Y (term by term multiplication)
Convolution of x and y = IFFT(Z)
Ma se X e Y sono diverse lunghezze, come faccio a fare la moltiplicazione?
Una possibilità è di estrarre y per avere le stesse dimensioni di x. Ma questo sembra orribilmente inefficiente. Un'altra possibilità è di estrarre Y per avere le stesse dimensioni di X. Ma non so cosa significhi nello spazio delle frequenze.
Ecco un altro modo di porre questa domanda: Se voglio convogliare due immagini di dimensioni molto diverse usando FFT così posso fare moltiplicazione dei loro spettri (rappresentazione del dominio della frequenza), come faccio a fare quella moltiplicazione?
Grazie,
~ Michael.
Che cosa stai tentando di fare con questa convoluzione? Vuoi calcolare la convoluzione 2D della tua piccola immagine e sopra l'immagine grande x? Ad esempio, se si sta cercando una piccola patch y in un'immagine grande x, è possibile utilizzare la convoluzione per implementare una ricerca di correlazione per y. Sarà molto più efficiente nel dominio di Fourier. Ma non vorrai crollare questi in 1D se questo è il tuo obiettivo. Qual è l'applicazione di moltiplicare gli spettri di xey? –