Comment puis-je dessiner un cercle sur une image sous MATLAB?
J'ai une image dans MATLAB:
im = rgb2gray(imread('some_image.jpg');
% normalize the image to be between 0 and 1
im = im/max(max(im));
Et j'ai fait de la transformation qui a abouti à un certain nombre de points que je voudrais souligner:
points = some_processing(im);
Où points
est une matrice de même taille que im
avec d'autres points intéressants.
Maintenant je veux dessiner un cercle sur l'image dans tous les lieux où points
est 1.
Est-il de toute fonction dans MATLAB qui fait cela? Le mieux que je puisse vous arriver, c'est:
[x_p, y_p] = find (points);
[x, y] = meshgrid(1:size(im,1), 1:size(im,2))
r = 5;
circles = zeros(size(im));
for k = 1:length(x_p)
circles = circles + (floor((x - x_p(k)).^2 + (y - y_p(k)).^2) == r);
end
% normalize circles
circles = circles/max(max(circles));
output = im + circles;
imshow(output)
Cela semble plus qu'un peu inélégant. Est-il possible de dessiner des cercles similaire à la line
fonction?
OriginalL'auteur Nathan Fellman | 2009-12-07
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le normal PARCELLE de commande avec un marqueur circulaire point:
Vous pouvez également régler ces autres propriétés de l'intrigue marqueur:
MarkerEdgeColor
,MarkerFaceColor
,MarkerSize
.Ensuite, si vous voulez enregistrer la nouvelle image avec les repères tracés sur elle, vous pouvez regarder cette réponse que j'ai donné à une question au sujet de maintenir les dimensions de l'image lors de l'enregistrement d'images à partir de chiffres.
REMARQUE: Lors de la représentation de données d'image avec IMSHOW (ou IMAGE, etc.), l'interprétation normale de lignes et de colonnes devient essentiellement renversé. Normalement, la première dimension de données (c'est à dire les lignes) est considéré comme les données qui se trouvent sur l'axe des x, et est probablement la raison pour laquelle vous utilisez
x_p
que le premier ensemble de valeurs renvoyées par la TROUVER fonction. Cependant, IMSHOW affiche la première dimension de l'image et de données ainsi que la axe des y, de sorte que la première valeur retournée par TROUVER finit par être la coordonnée valeur dans ce cas.hold off
le code ainsi un souci d'exhaustivité.Êtes-vous sûr de commutation de la
x_p
ety_p
dans leplot
appel?Oui, j'ai ajouté une note à ma réponse expliquant pourquoi ils ont besoin d'être renversé.
Lorsque vous redimensionnez l'image, le point ne sera pas à l'échelle - gardez cela à l'esprit.
OriginalL'auteur gnovice
Ce fichier par Zhenhai Wang de Matlab Central du Fichier d'Échange est le tour est joué.
OriginalL'auteur Nathan Fellman
Drôle! Il y a 6 réponses ici, rien de donner la solution la plus évidente: la
rectangle
fonction.De la la documentation:
Donc dans votre cas:
Par opposition à la accepté de répondre à ces milieux à l'échelle de l'image, vous pouvez effectuer un zoom avant dans une ils seront toujours la marque de l'ensemble de pixels.
OriginalL'auteur Cris Luengo
Hmm, j'ai dû re-basculer dans cet appel:
En réponse aux commentaires:
x et y sont créés en utilisant le code suivant:
il se pourrait que le ConvexHull est dans l'autre sens et, par conséquent, l'intrigue est différente. Ou que j'ai fait une erreur et il doit être
Toutefois, la documentation n'est pas claire sur ce qui colum = x OU y:
Citation: "Chaque ligne de la matrice contient les x et y les coordonnées d'un sommet du polygone. "
J'ai lu ce que x est le premier de la colonne et y est la deuxième colonne.
x
ety
? Si vous les obtenez à partir de la commande FIND, vous aurez probablement à les retourner. Vous pourriez ne pas avoir à les retourner si vous les avez trouvés par d'autres moyens.OriginalL'auteur Ramon Fincken
Dans les plus récentes versions de MATLAB (j'ai 2013b) la Vision par Ordinateur Système de boîte à outils contient les
vision.ShapeInserter
de l'objet Système qui peut être utilisé pour dessiner des formes sur les images. Voici un exemple de dessin de cercles jaunes à partir de la documentation:OriginalL'auteur buzjwa
Avec MATLAB et de Traitement de l'Image boîte à outils R2012a ou plus récent, vous pouvez utiliser le
viscircles
fonction de facilement superposition de cercles sur une image. Voici un exemple:Aussi, découvrez le
imfindcircles
fonction qui implémente l'Hough circulaire transformer. La documentation en ligne pour les deux fonctions (liens ci-dessus) sont des exemples qui montrent comment trouver des cercles dans une image et comment afficher le détectés cercles au-dessus de l'image.Par exemple:
OriginalL'auteur Bruno Pop-Stefanov
Voici la méthode que je pense que vous avez besoin de:
OriginalL'auteur Fred