Teorema di convoluzione in 3D
Ciao a tutti,
Sono nuovo del forum, anche se "lurko" da un po'. Spero di trovare e dare aiuto a questa comunità.
Inizio con un bel quesito: consideriamo un tensore 3D (una "matrice tridimensionale"), che corrisponde ad un reticolo discreto di punti nello spazio. Vorrei farne la convoluzione con un altro tensore 3x3x3 simmetrico. Sapete se è possibile estendere il teorema di convoluzione in tre dimensioni, così da poter fare il prodotto tra le trasformate di Fourier dei due tensori (ed eseguire poi la trasformata inversa)? Ed in tal caso, come è definito il prodotto tra questi tensori: è una contrazione?
Grazie!
Sono nuovo del forum, anche se "lurko" da un po'. Spero di trovare e dare aiuto a questa comunità.
Inizio con un bel quesito: consideriamo un tensore 3D (una "matrice tridimensionale"), che corrisponde ad un reticolo discreto di punti nello spazio. Vorrei farne la convoluzione con un altro tensore 3x3x3 simmetrico. Sapete se è possibile estendere il teorema di convoluzione in tre dimensioni, così da poter fare il prodotto tra le trasformate di Fourier dei due tensori (ed eseguire poi la trasformata inversa)? Ed in tal caso, come è definito il prodotto tra questi tensori: è una contrazione?
Grazie!

Risposte
Non ho capito quasi niente: comincia a farmi vedere la cosa in 2D visto che sembra che sia ben noto. Tu hai due tensori, per esempio $T_{ij}$ e $S_{hk}$ oppure con gradi diversi di covarianza/controvarianza?
Provo a spiegarmi meglio tramite delle applicazioni.
In genere si applica il teorema di convoluzione in image processing. Consideriamo un'immagine in tonalità di grigi come una matrice di pixel, ove i valori corrispondono appunto alla tonalità. Se ad esempio si vuole sfumare l'immagine, la si convolve con un kernel gaussiano (cioè una "mini matrice" con i valori maggiori al centro che decrescono allontanandosi): ovvero, si sostituisce ogni elemento della matrice dell'immagine con la sua media tra gli elementi circostanti, pesata tramite gli elementi del kernel. Per un'ottima spiegazione rimando qui: http://homepages.inf.ed.ac.uk/rbf/HIPR2/convolve.htm
Il teorema di convoluzione asserisce che si ottiene lo stesso risultato se si esegue la trasformata di Fourier inversa del prodotto matriciale tra le trasformate di Fourier della matrice dell'immagine e del kernel.
Passando al mio problema, mi piacerebbe ottimizzare la computazione dell'evoluzione di una densità definita su un reticolo tridimensionale. L'evoluzione (discreta) è ottenuta dall'equazione di diffusione approssimata col metodo delle differenze finite. Perciò, dato che l'evoluzione si basa sul calcolo, per ogni punto del reticolo, di una "media" coi punti circostanti (pesati dagli opportuni coefficienti dell'equazione di diffusione), ho pensato di provare ad applicare il teorema di convoluzione tra il reticolo tridimensionale e un kernel 3D coi pesi della diffusione.
I miei problemi sono:
- Non so se si può applicare il teorema di convoluzione in questa situazione.
- Anche volendo, non so come moltiplicare i due oggetti tridimensionali.
A posteriori, mi rendo conto che sono stato parecchio criptico nella mia richiesta, soprattutto nell'uso che ho fatto del termine "tensore". Chiedo scusa.
In genere si applica il teorema di convoluzione in image processing. Consideriamo un'immagine in tonalità di grigi come una matrice di pixel, ove i valori corrispondono appunto alla tonalità. Se ad esempio si vuole sfumare l'immagine, la si convolve con un kernel gaussiano (cioè una "mini matrice" con i valori maggiori al centro che decrescono allontanandosi): ovvero, si sostituisce ogni elemento della matrice dell'immagine con la sua media tra gli elementi circostanti, pesata tramite gli elementi del kernel. Per un'ottima spiegazione rimando qui: http://homepages.inf.ed.ac.uk/rbf/HIPR2/convolve.htm
Il teorema di convoluzione asserisce che si ottiene lo stesso risultato se si esegue la trasformata di Fourier inversa del prodotto matriciale tra le trasformate di Fourier della matrice dell'immagine e del kernel.
Passando al mio problema, mi piacerebbe ottimizzare la computazione dell'evoluzione di una densità definita su un reticolo tridimensionale. L'evoluzione (discreta) è ottenuta dall'equazione di diffusione approssimata col metodo delle differenze finite. Perciò, dato che l'evoluzione si basa sul calcolo, per ogni punto del reticolo, di una "media" coi punti circostanti (pesati dagli opportuni coefficienti dell'equazione di diffusione), ho pensato di provare ad applicare il teorema di convoluzione tra il reticolo tridimensionale e un kernel 3D coi pesi della diffusione.
I miei problemi sono:
- Non so se si può applicare il teorema di convoluzione in questa situazione.
- Anche volendo, non so come moltiplicare i due oggetti tridimensionali.
A posteriori, mi rendo conto che sono stato parecchio criptico nella mia richiesta, soprattutto nell'uso che ho fatto del termine "tensore". Chiedo scusa.

Non mi è chiaro nemmeno a me come devi moltiplicare nel caso 3D, ma il teorema di cui parli è senz'altro vero e vale sempre, in ogni dimensione, ed è semplicemente una facile proprietà della trasformata di Fourier, ovvero che la trasformata di un prodotto di convoluzione è il prodotto algebrico delle trasformate dei fattori.
Grazie Luca.