Saya ingin mencari matriks konvolusi untuk kernel 2D tertentu .
Misalnya, untuk gambar ukuran , saya ingin (dalam MATALB):Img
T * Img = reshape(conv2(Img, H, 'same'), [], 1);
Di mana T
matriks konvolusi dan same
berarti Bentuk Konvolusi (Ukuran Output) cocok dengan ukuran input.
Secara teoritis, H harus dikonversi ke matriks toeplitz, saya menggunakan fungsi MATLAB convmtx2()
:
T = convmtx2(H, m, n);
Namun T
adalah ukuran sebagai MATLAB's menghasilkan matriks konvolusi yang cocok dengan Bentuk Konvolusi .convmtx2
full
Apakah ada cara untuk menghasilkan Matriks Konvolusi yang cocok conv2()
dengan menggunakan same
parameter bentuk konvolusi?
Jawaban:
Saya tidak dapat menguji ini di komputer saya karena saya tidak memiliki fungsi convtmx2, inilah yang dikatakan bantuan MATLAB:
http://www.mathworks.com/help/toolbox/images/ref/convmtx2.html
T = convmtx2(H,m,n)
mengembalikan matriks konvolusiT
untuk matriksH
. JikaX
adalah matriks m-by-n, makareshape(T*X(:),size(H)+[m n]-1)
sama denganconv2(X,H)
.Ini akan menghasilkan lilitan yang sama
conv2(X,H)
tetapi kemudian Anda masih harus menarik lilitan yang benar.sumber
Saya menulis sebuah fungsi yang memecahkan ini dalam StackOverflow Q2080835 GitHub Repository saya (Lihat
CreateImageConvMtx()
).Sebenarnya fungsi tersebut dapat mendukung bentuk konvolusi yang Anda inginkan -
full
,same
danvalid
.Kode tersebut adalah sebagai berikut:
Nikmati...
sumber