2009-04-24 10 views
7

Zajmuję się programowaniem matlab, w którym używam wielokątów (wklęsłych lub wypukłych). Muszę użyć funkcji przetwarzania obrazu, takich jak imdilate lub imerode itp. Na wielokątach. W tym celu powinienem przekształcić moje wielokąty w obraz. Zastanawiam się, czy istnieje sposób na szkicowanie wielokąta bezpośrednio w matrycy binarnej (1 na pierwszym planie i 0 na tło)?jak naszkicować wielokąt w matrycy lub obrazie binarnym, aby skorzystać z funkcji przetwarzania obrazu?

Obecnie używam do tego funkcji "getframe", następnie "frame2im", a następnie "im2bw". ale jego wadą jest to, że nie mam żadnej kontroli nad rozmiarem ostatecznego obrazu (= matrycy) (tj. rozmiaru obrazu w pikselach podczas konwersji ramki na obraz) z powodu faktu, że matlab nie wyświetla swoich wykresów w pikselach (?). Za każdym razem, gdy ktoś robi "powiększenie" lub "pomniejszenie" na wykresie, wynikowa macierz (= obraz) będzie się różnić.

mój kod:

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) 

Odpowiedz

12

Może użyć poly2mask obliczyć obszar zainteresowania zamiast wykreślenie go za pomocą łaty jak w skrypcie. Na przykład:

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) 

A wynik, mc, powyższego kodu jest tym obrazem.

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

+0

zmodyfikowane -> mc = poly2mask (wielokąt (:, 1), wielokąt (:, 2), ImageHeight, ImageWidth); –

+0

@Kamran: czy możesz wyjaśnić swój komentarz? co masz na myśli przez modyfikację? – Azim

+0

@Azim: Myślę, że wskazywał małą literówkę. Naprawiłem to. – gnovice

Powiązane problemy