2017-10-16 8 views
-1

Je cherche un moyen de déclarer centre de mon noyau/filtre de sorte que la sortie de mon convolution 2D est conforme à la figure suivanteproblème d'indexation pour la matrice de sortie dans conv2 (entrée, filtre)

source: http://machinelearninguru.com/computer_vision/basics/convolution/image_convolution_1.html enter image description here

I se sont penchés sur conv2 (entrée, filtre) mais a constaté que cette fonction intégrée suppose que pour un filtre MxN, son centre est toujours situé à l'emplacement (M, N) dans une matrice de filtre. J'ai vu l'image suivante au https://www.mathworks.com/help/vision/ref/2dconvolution.html . Dans ce cas, le résultat de la somme à double sera situé à (2,2) au lieu de (1,1) dans la matrice de sortie

enter image description here

Matlab Version:MatlabR2014a

Répondre

0

si je vous comprends bien, vous devez utiliser la poignée de forme dans conv2:

conv2(input,filter,'same') 
+0

Oui ..... il semble fonctionner lorsque M, N (dimensions de la matrice de filtre) sont impairs et que la valeur maximale dans le 'filtre' est au milieu. par exemple lorsque M = N = 3 et max (filtre) est à (2,2). Cependant, que si max (filtre) n'est pas au milieu. Pour un exemple 3x3, laissez max être à (2,1). Dans ce cas, la même poignée ne fonctionne pas. Y at-il un moyen de s'assurer que l'indice de sortie est dicté par l'emplacement de l'élément max de la matrice de filtre? J'ai pensé à générer newfilter par zéro matrice de filtre de remplissage pour amener l'élément max de la matrice de filtre au centre et ensuite utiliser conv2 (x, newfilter, 'same') ... – NAASI

0

vous pouvez utiliser l'argument de forme 'full' de 'conv2', puis indexez dans la sortie pour sélectionner la tranche que vous souhaitez aligner correctement.