J'ai une image dans matlab: et j'ai effectué un certain traitement qui aboutit à un certain nombre de points que je veux mettre en évidence: p> où maintenant je veux dessiner un Cercle sur l'image dans tous les endroits où y a-t-il une fonction dans MATLAB qui fait cela? Le meilleur que je puisse arriver est: p> Cela semble plus qu'un peu inélégant. Existe-t-il un moyen de dessiner des cercles similaires à la fonction code> code>? P> p> points code> est une matrice de la même taille que
im code> avec ceux des points intéressants. P>
points code> est 1. p>
7 Réponses :
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!
Vous voudrez peut-être ajouter désactiver code> au code aussi pour des raisons de complétude.
@gnoVice: Êtes-vous sûr de changer le x_p code> et
y_p code> dans l'appel code> appel code>?
@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.
hmm je devais les ré-changer dans cet appel: x et y sont créés à l'aide du code suivant: en réponse aux commentaires: h3>
[x(i,1)] = temp_hull(k2,2);
[y(i,1)] = temp_hull(k2,1);
Comment obtenez-vous les valeurs x code> et
y code>? 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.
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)
La question est de demander comment dessiner des cercles i> autour des points, ne modifiez pas la valeur de l'image sur eux.
Ce fichier par Zhenhai Wang de Matlab L'échange de fichiers de Centry fait l'affaire.
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);
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');
drôle! Il y a 6 réponses ici, aucun ne donne la solution évidente: la fonction du Documentation : P> 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. P>
donc dans votre cas: p> par opposition à la réponse acceptée, ces cercles vont échelle avec l'image, vous pouvez zoomer dans un autre Marquer tout le pixel. P> p> rectangle code>.
pos = [2 4 2 2]; code>
Rectangle ('Position', Pos, Courbure ', [1 1]) Code>
axe égal code> p>
blockquote>