2009-04-24 6 views
7

Ich entwickle ein Matlab-Programm, in dem ich Polygone (konkav oder konvex) verwende. Ich muss Bildverarbeitungsfunktionen wie imdilate oder imerode und etc auf den Polygonen verwenden. Zu diesem Zweck sollte ich meine Polygone in Bild konvertieren. Ich frage mich, ob es eine Möglichkeit gibt, ein Polygon direkt in einer binären Matrix zu skizzieren (1 für den Vordergrund und 0 für den Hintergrund)?Wie skizziert man ein Polygon in einer Matrix oder einem Binärbild, um Bildverarbeitungsfunktionen zu verwenden?

Derzeit verwende ich 'getframe', dann 'frame2im' und dann 'im2bw' Funktionen, um dies zu tun. aber sein Nachteil ist, dass ich keine Kontrolle über die Größe des endgültigen Bildes (= Matrix) habe (dh die Größe des Bildes in Pixeln, wenn ein Bild in Bild umgewandelt wird), da Matlab seine Plots nicht in Pixeln anzeigt (?). Jedes Mal, wenn jemand in der Zeichnung "hineinzoomt" oder "herauszoomt", würde sich die resultierende Matrix (= Bild) unterscheiden.

mein 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) 

Antwort

12

Vielleicht könnten Sie poly2mask verwenden, um eine Region von Interesse zu berechnen, anstatt sie zu Plotten wie in Ihrem Skript mit Patch. Zum Beispiel

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) 

Und das Ergebnis, BW, des obigen Codes ist dieses Bild.

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

+0

modifiziert -> BW = poly2mask (Polygon (:, 1), Polygon (:, 2), Imageheight, Width); –

+0

@Kamran: Können Sie Ihren Kommentar erklären? Was meinst du mit modifiziert? – Azim

+0

@Azim: Ich denke, er wies auf einen kleinen Tippfehler hin. Ich habe es repariert. – gnovice