1

J'ai initié mon gaussian comme fspecial('gaussian', 4, 1), et je sais que gradient() est un moyen très pratique d'obtenir la première dérivée. Y at-il de toute façon que je peux calculer les premiers dérivés sans utiliser gradient()? Je l'utilise pour créer le détecteur de Harris Corner, comme cela est illustré en tant que première étape dans le manuel:Calcul de la première dérivée de Gaussian (dx, dy) sans utiliser gradient() dans Matlab

  • calculer les dérivées horizontales et verticales de l'image Ix et Iy par convolution de l'image d'origine avec des dérivés de gaussiennes

Répondre

1

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