5

bekam ich die Matrix unter:Convolution in Matlab Händen auf

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 

und den Kernel:

-0.5+0.8662i 1 -0.5-0.8662i

Ich versuche, die Faltung mit gültigem Modus auszuführen:

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

Das Matlab kehrt zurück:

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

Meine Frage ist, wie ich die gleichen Ergebnisse wie Matlab erreichen können. Ich versuche es im Matlab im ersten Punkt, aber das Ergebnis ist anders.

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

Result: 0-15.5916i

Aus irgendeinem Grund das Vorzeichen des imaginären positiv Faltung verwendet wird. Warum ?

Antwort

7

Ich glaube Faltung in der Regel durch „Umklappen“ der Kern (links durchgeführt wird, (right, up-down) und dann über die Matrix geschoben werden, um eine Summe von Multiplikationen durchzuführen.

Mit anderen Worten, was Matlab tatsächlich Berechnung ist:

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

Gut gesagt! :-)) –

+0

Vielen Dank, ich vergesse den Kernel umzudrehen. –

6

Im Faltungsprozess ist der Kernel gewendet. Du musst es also auch in deinem Scheck spiegeln; das heißt, tauschen kernel(1) und kernel(3) wie folgt:

>> 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 

Dies ist in Übereinstimmung mit dem Ergebnis der Faltung:

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

Wie eigenchris sagte Sie den Grund haben, ich Flip vergessen. Danke –