11
votes

Comment puis-je dessiner un cercle sur une image à Matlab?

J'ai une image dans matlab: xxx

et j'ai effectué un certain traitement qui aboutit à un certain nombre de points que je veux mettre en évidence: xxx < / pré>

points est une matrice de la même taille que im avec ceux des points intéressants.

maintenant je veux dessiner un Cercle sur l'image dans tous les endroits où points est 1.

y a-t-il une fonction dans MATLAB qui fait cela? Le meilleur que je puisse arriver est: xxx

Cela semble plus qu'un peu inélégant. Existe-t-il un moyen de dessiner des cercles similaires à la fonction ?


0 commentaires

7 Réponses :


21
votes

Vous pouvez utiliser la normale Terrain commande avec un Point de marqueur circulaire :

[x_p,y_p] = find(points);
imshow(im);         %# Display your image
hold on;            %# Add subsequent plots to the image
plot(y_p,x_p,'o');  %# NOTE: x_p and y_p are switched (see note below)!
hold off;           %# Any subsequent plotting will overwrite the image!


4 commentaires

Vous voudrez peut-être ajouter désactiver au code aussi pour des raisons de complétude.


@gnoVice: Êtes-vous sûr de changer le x_p et y_p dans l'appel appel ?


@ZAID: Oui, j'ai ajouté une note à ma réponse expliquant pourquoi elles doivent être retournées.


Lorsque vous échouez de l'image, le point ne sera pas évolué avec elle - gardez cela à l'esprit.



0
votes

hmm je devais les ré-changer dans cet appel: xxx pré>

en réponse aux commentaires: h3>

x et y sont créés à l'aide du code suivant:

[x(i,1)] = temp_hull(k2,2);    
[y(i,1)] = temp_hull(k2,1);


1 commentaires

Comment obtenez-vous les valeurs x et y ? Si vous les obtenez de la commande Trouver, vous devrez probablement les retourner. Vous n'avez peut-être pas à les renvoyer si vous les trouvez par d'autres moyens.



-1
votes

Voici la méthode que je pense avoir besoin:

[x_p, y_p] = find (points); 

% convert the subscripts to indicies, but transposed into a row vector
a = sub2ind(size(im), x_p, y_p)';

% assign all the values in the image that correspond to the points to a value of zero
im([a]) = 0; 

% show the new image
imshow(im) 


1 commentaires

La question est de demander comment dessiner des cercles autour des points, ne modifiez pas la valeur de l'image sur eux.



2
votes

Ce fichier par Zhenhai Wang de Matlab L'échange de fichiers de Centry fait l'affaire. xxx


0 commentaires

0
votes

dans les versions plus récentes de MATLAB (j'ai 2013b) La boîte à outils Système de vision de l'ordinateur contient le vision.shapeinserter code> objet système qui peut être utilisé pour dessiner des formes sur des images. Voici un exemple de tirage des cercles jaunes de la documentation:

yellow = uint8([255 255 0]); %// [R G B]; class of yellow must match class of I
shapeInserter = vision.ShapeInserter('Shape','Circles','BorderColor','Custom','CustomBorderColor',yellow);
I = imread('cameraman.tif'); 
circles = int32([30 30 20; 80 80 25]); %// [x1 y1 radius1;x2 y2 radius2]
RGB = repmat(I,[1,1,3]); %// convert I to an RGB image
J = step(shapeInserter, RGB, circles);
imshow(J);


0 commentaires

0
votes

avec MATLAB et Tool Toolbox R2012A ou plus récent, vous pouvez utiliser le Viscircles CODE> fonction pour superposer facilement des cercles sur une image. Voici un exemple:

% Read the image into the workspace and display it.
A = imread('coins.png');
imshow(A)

% Find all the circles with radius r such that 15 ≤ r ≤ 30.
[centers, radii, metric] = imfindcircles(A,[15 30]);

% Retain the five strongest circles according to the metric values.
centersStrong5 = centers(1:5,:);
radiiStrong5 = radii(1:5);
metricStrong5 = metric(1:5);

% Draw the five strongest circle perimeters.
viscircles(centersStrong5, radiiStrong5,'EdgeColor','b');


0 commentaires

1
votes

drôle! Il y a 6 réponses ici, aucun ne donne la solution évidente: la fonction rectangle .

du Documentation :

Dessinez un cercle en réglant la propriété de courbure sur [1 1]. Dessinez le cercle de sorte qu'il remplit la zone rectangulaire entre les points (2,4) et (4,6). La propriété de position définit le plus petit rectangle contenant le cercle.

pos = [2 4 2 2];
Rectangle ('Position', Pos, Courbure ', [1 1])
axe égal

donc dans votre cas: xxx

par opposition à la réponse acceptée, ces cercles vont échelle avec l'image, vous pouvez zoomer dans un autre Marquer tout le pixel.


0 commentaires