Calculer le champ de vecteur de gradient d'une image
Je veux lire une image - une image d'un cercle, et de calculer le champ de vecteurs de gradient de l'image (c'est à dire des vecteurs pointant de manière uniforme et dans des conditions normales pour le cercle). Ma logique est de ne pas en moi un peu, mais j'ai:
clear all;
im = im2double(imread('littlecircle.png'));
im = double(im);
[nr,nc]=size(im);
[dx,dy] = gradient(im);
[x y] = meshgrid(1:nc,1:nr);
u = x;
v = y;
quiver(x,y,u,v)
si je devais simplement faire ci-dessus, j'obtiens un champ de vecteurs, mais il est tout simplement le gradient de vide de maille (c'est à dire juste un champ de vecteurs de gradient y=x). Ce que je veux, c'est l'utilisation
[dx,dy] = gradient(im);
pour détecter les bords du cercle dans l'image, et ensuite, on calcule le gradient de champ de vecteur en raison du cercle dans l'image. de toute évidence, l'attribution u=x et v=y va seulement me donner le vecteur champ d'une ligne droite - donc bascially, je veux intégrer le gradient de l'image dans les vecteurs u et v. Comment puis-je faire cela?
source d'informationauteur brucezepplin
Vous devez vous connecter pour publier un commentaire.
Vous avez fait une erreur dans le code (autre que cela, il fonctionne très bien). Vous devez remplacer les suivantes:
pas
Il fonctionne avec cette image comme un charme!
EDIT:
Si vous souhaitez superposer les vecteurs de l'image, puis effectuez les opérations suivantes:
Avis que je n'ai pas de convertir l'im à double, car il ne semble pas correctement avec imshow (besoins uint8). En fonction de vos dimensions de l'image, vous pouvez zoomer pour voir les vecteurs grad.
Vous pouvez voir un agrandissement de la zone de vecteurs en surimpression sur l'image ci-dessous:
La qualité de l'image est à http://i.stack.imgur.com/fQbwI.jpg