Si vous avez l'intention de mettre en œuvre le détecteur de coin Harris, vous ne devriez pas utiliser gradient
. Ce qui est traditionnellement fait, c'est d'utiliser un noyau dérivé et de filtrer l'image avec ce noyau. Vous pouvez utiliser différents noyaux, mais ce que j'ai vu en pratique est d'utiliser une différence centrée telle que le noyau horizontal dx
est [-1 0 1]
et le noyau vertical dy
est la transposition de ceci ou [-1;0;1]
. Vous filtrez donc l'image avec ces noyaux pour obtenir les réponses Ix
et Iy
où ce sont les gradients horizontaux et verticaux de votre image, puis vous effectuez un lissage gaussien sur la version carrée de ces images: Ix.^2
, Iy.^2
, ainsi que leur produit Ix.*Iy
. Vous formez ensuite la matrice de corrélation, trouvez les déterminants et les traces et déterminez la réponse en coin. Toutes les valeurs dépassant ce seuil sont des angles potentiels. Effectuer un lissage gaussien sur les images dérivées filtre efficacement l'image originale avec un dérivé de gaussiennes comme indiqué initialement dans votre question.
donc en supposant que votre image est stockée dans im
, vous faites simplement:
im = double(im); % Cast to double precision to ensure accuracy
dx = [-1 0 1];
dy = dx.';
Ix = conv2(im, dx, 'same');
Iy = conv2(im, dy, 'same');
Vous utiliseriez Ix
et Iy
pour calculer enfin la réponse d'angle Harris. Si vous avez la boîte à outils de traitement d'image, je vous recommande d'utiliser imfilter
à la place. C'est plus rapide et il utilise le Intel Integrated Performance Primitives (IIPP). Si vous souhaitez plus d'informations sur la façon de le calculer correctement, consultez mon post précédent ici: Trying to find/understand correct implementation of Harris Corners