Quiero encontrar una matriz de convolución 2D para un determinado núcleo .
Por ejemplo, para una imagen de tamaño , quiero (en MATALB):Img
T * Img = reshape(conv2(Img, H, 'same'), [], 1);
Donde Testá la matriz de convolución y samesignifica que la forma de convolución (tamaño de salida) coincide con el tamaño de entrada.
Teóricamente, H debería convertirse en una matriz de toeplitz, estoy usando la función MATLAB convmtx2():
T = convmtx2(H, m, n);
Sin embargo, Tes de tamaño ya que MATLAB genera una matriz de convolución que coincide con la forma de convolución de .convmtx2full
¿Hay alguna manera de generar la matriz de convolución que coincida conv2()con el sameparámetro de forma de convolución?

Respuestas:
No puedo probar esto en mi computadora porque no tengo la función convtmx2, esto es lo que dice la ayuda de MATLAB:
http://www.mathworks.com/help/toolbox/images/ref/convmtx2.html
T = convmtx2(H,m,n)devuelve la matriz de convoluciónTpara la matrizH. SiXes una matriz m-por-n, entoncesreshape(T*X(:),size(H)+[m n]-1)es lo mismo queconv2(X,H).Esto obtendría la misma convolución resultante,
conv2(X,H)pero aún así tendría que extraer la pieza correcta de la convolución.fuente
Escribí una función que resuelve esto en mi StackOverflow Q2080835 GitHub Repository (Eche un vistazo
CreateImageConvMtx()).En realidad, la función puede admitir cualquier forma de convolución que desee
full,sameyvalid.El código es el siguiente:
Disfrutar...
fuente