Ich möchte eine Faltungsmatrix für einen bestimmten 2D-Kernel .
Zum Beispiel möchte ich für ein Bild Img
der Größe (in MATALB):
T * Img = reshape(conv2(Img, H, 'same'), [], 1);
Wo T
ist die Faltungsmatrix und same
bedeutet, dass die Faltungsform (Ausgabegröße) mit der Eingabegröße übereinstimmt.
Theoretisch sollte H in eine Toeplitz-Matrix konvertiert werden. Ich verwende die MATLAB-Funktion convmtx2()
:
T = convmtx2(H, m, n);
Ist T
jedoch von der Größe da MATLABs convmtx2
eine Faltungsmatrix erzeugt, die der Faltungsform von entspricht full
.
Gibt es eine Möglichkeit, die Faltungsmatrix zu generieren, die conv2()
mit dem same
Faltungsformparameter übereinstimmt ?
Antworten:
Ich kann dies auf meinem Computer nicht testen, da ich nicht über die Funktion convtmx2 verfüge. In der MATLAB-Hilfe heißt es Folgendes:
http://www.mathworks.com/help/toolbox/images/ref/convmtx2.html
T = convmtx2(H,m,n)
Gibt die FaltungsmatrixT
für die Matrix zurückH
. WennX
es sich um eine m-mal-n-Matrix handelt,reshape(T*X(:),size(H)+[m n]-1)
ist dies dasselbe wieconv2(X,H)
.Dies würde die gleiche resultierende Faltung von erhalten,
conv2(X,H)
aber dann müssten Sie immer noch das richtige Stück der Faltung herausziehen.quelle
Ich habe eine Funktion geschrieben, die dies in meinem StackOverflow Q2080835 GitHub Repository löst (siehe
CreateImageConvMtx()
).Eigentlich kann die Funktion jeder Faltung Form unterstützen Sie möchten -
full
,same
undvalid
.Der Code lautet wie folgt:
Genießen...
quelle