comment dessiner un polygone dans une matrice ou une image binaire afin de pouvoir utiliser les fonctions de traitement d'image?

StackOverflow https://stackoverflow.com/questions/786375

Question

Je développe un programme Matlab dans lequel I utilise des polygones (concaves ou convexes). Je dois utiliser les fonctions de traitement d'image comme imdilate ou imerode etc et sur les polygones. A cette fin, je convertir mes polygones à l'image. Je me demande s'il y a un moyen d'esquisser un polygone directement dans une matrice binaire (1 de premier plan pour et 0 pour le fond)?

À l'heure actuelle, j'utilise les fonctions « GetFrame », puis « frame2im » puis « im2bw » de le faire. mais son inconvénient est que je ne contrôle la taille de l'image finale (= matrice) (ie. la taille de l'image en pixels lorsque convertir une trame de l'image) en raison du fait que MATLAB ne présente ses emplacements en pixels (?). Donc, chaque fois que quelqu'un fait « zoom » ou « effectuer un zoom arrière » sur la parcelle, la matrice résultante (= image) différerait.

mon code:

Polygon = [ 15    45    33    30  40 23 ; 9    9    24    15 13 13]';
figure(1); clf; patch(Polygon(:,1),Polygon(:,2),'black');
axis off

%convert the plot to binary image
frame = getframe(gca);
im =frame2im(frame);
level = graythresh(im);
bw = ~im2bw(im,level);

%draw the resulting image
imtool(bw)
%dilate the image
SE = strel('square',5);
bw2 = imdilate(bw,SE);

%draw the dilated image
imtool(bw2)
Était-ce utile?

La solution

Peut-être que vous pouvez utiliser poly2mask pour calculer une région d'intérêt au lieu de tracer à l'aide de patch dans votre script. Par exemple

Polygon = [ 15    45    33    30  40 23 ; 9    9    24    15 13 13]';
ImageWidth = 100;
ImageHeight = 50;
bw = poly2mask(Polygon(:,1),Polygon(:,2),ImageHeight,ImageWidth);
imshow(bw)

Et le résultat, pc, du code ci-dessus est cette image.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top