comment dessiner un polygone dans une matrice ou une image binaire afin de pouvoir utiliser les fonctions de traitement d'image?
-
16-09-2019 - |
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)
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.