2014-11-28 11 views
5

ho ottenuto la matrice di seguito:Convoluzione in mani Matlab sul

9 18 27 36 45 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 

e il kernel:

-0.5+0.8662i 1 -0.5-0.8662i

Sto cercando di eseguire la circonvoluzione utilizzando la modalità valida:

ans = conv2(matrix,kernel,'valid');

Il matlab restituisce:

0.0000+15.5916i 0.0000+15.5916i 0.0000+15.5916i

La mia domanda è come posso ottenere gli stessi risultati come MATLAB. Sto cercando di fare nel MATLAB nel primo punto, ma i risultati sono diversi.

a =  matrix(1,1) * kernel(1); 
a = a + matrix(1,2) * kernel(2); 
a = a + matrix(1,3) * kernel(3); 

Result: 0-15.5916i

Per qualche motivo il segno della immaginario è positiva utilizzando convoluzione. Perché ?

risposta

7

Credo convoluzione viene di solito eseguita da "flipping" del kernel (a sinistra -right, up-down) e quindi facendolo scorrere attraverso la matrice per eseguire una somma di moltiplicazioni.

In altre parole, ciò che MATLAB è in realtà computing è:

a =  matrix(1,1) * kernel(3); 
a = a + matrix(1,2) * kernel(2); 
a = a + matrix(1,3) * kernel(1); 
+0

Ben detto! :-)) –

+0

Mille grazie, ho dimenticato di capovolgere il kernel. –

6

Nel processo di convoluzione il kernel è capovolto. Quindi devi capovolgerlo anche nel tuo assegno; vale a dire, scambiare kernel(1) e kernel(3), come segue:

>> a =  matrix(1,1) * kernel(3); 
>> a = a + matrix(1,2) * kernel(2); 
>> a = a + matrix(1,3) * kernel(1) 
a = 
    27.0000 +15.5916i 

Ciò è in accordo con il risultato della convoluzione:

>> A = conv2(matrix,kernel,'valid'); 
>> A(1,1) 
ans = 
    27.0000 +15.5916i 
+0

Come eigenchris detto, si ha la ragione, mi dimentico di capovolgere. Grazie –

Problemi correlati