2009-04-24 3 views
7

Je développe un programme matlab dans lequel j'utilise des polygones (concaves ou convexes). J'ai besoin d'utiliser des fonctions de traitement d'image comme imdilate ou imerode et etc. sur les polygones. À cette fin, je devrais convertir mes polygones en image. Je me demande s'il existe un moyen d'esquisser un polygone directement dans une matrice binaire (1 pour le premier plan et 0 pour le fond)?comment esquisser un polygone dans une matrice ou une image binaire afin d'utiliser des fonctions de traitement d'image?

Actuellement, j'utilise les fonctions 'getframe', puis 'frame2im', puis 'im2bw' pour ce faire. mais son inconvénient est que je n'ai aucun contrôle sur la taille de l'image finale (= la matrice) (c'est-à-dire la taille de l'image en pixels lors de la conversion d'une image) parce que matlab n'affiche pas ses tracés en pixels (?). Donc, à chaque fois que quelqu'un fait un «zoom avant» ou un «zoom arrière» sur le tracé, la matrice résultante (= image) serait différente.

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) 

Répondre

12

Peut-être que vous pourriez 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, bw, du code ci-dessus est cette image.

bw http://i44.tinypic.com/6td9v8.jpg

+0

modifié -> bw = poly2mask (Polygone (:, 1), polygone (:, 2), ImageHeight, ImageWidth); –

+0

@ Kamran: pouvez-vous expliquer votre commentaire? que voulez-vous dire par modifié? – Azim

+0

@Azim: Je pense qu'il soulignait une petite faute de frappe. Je l'ai corrigé. – gnovice

Questions connexes