2009-04-24 13 views
7

Sto sviluppando un programma matlab in cui utilizzo poligoni (concavi o convessi). Ho bisogno di usare le funzioni di elaborazione delle immagini come imdilate o imerode ed ecc. Sui poligoni. A tal fine, dovrei convertire i miei poligoni in immagine. Mi chiedo se c'è un modo per disegnare un poligono direttamente in una matrice binaria (1 per primo piano e 0 per sfondo)?come disegnare un poligono in una matrice o un'immagine binaria per utilizzare le funzioni di elaborazione delle immagini?

Attualmente, utilizzo le funzioni 'getframe', quindi 'frame2im' e quindi 'im2bw' per farlo. ma il suo svantaggio è che non ho alcun controllo sulla dimensione dell'immagine finale (= matrice) (cioè la dimensione dell'immagine in pixel quando converti un frame in immagine) a causa del fatto che MATLAB non mostra i suoi grafici in pixel (?). Quindi ogni volta che qualcuno esegue uno "zoom in" o uno "zoom out" sul grafico, la matrice risultante (= immagine) sarebbe diversa.

il mio codice:

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) 

risposta

12

Forse si potrebbe usare poly2mask per calcolare una regione di interesse, invece di tracciare usando patch come nello script. Ad esempio

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) 

E il risultato, bw, del codice precedente è questa immagine.

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

+0

modificato -> bw = poly2mask (Poligono (:, 1), Poligono (:, 2), ImageHeight, ImageWidth); –

+0

@Kamran: puoi spiegare il tuo commento? cosa intendi per modificato? – Azim

+0

@ Azim: Penso che stia indicando un piccolo refuso. L'ho riparato. – gnovice