2009-04-24 14 views
7

Çokgenler (içbükey veya dışbükey) kullandığım bir matlab programı geliştiriyorum. Çokgenler üzerinde imdilate veya imerode ve etc gibi görüntü işleme fonksiyonlarını kullanmam gerekiyor. Bu amaçla, çokgenlerimi resme dönüştürmeliyim. Bir ikili matriste doğrudan bir çokgen çizmenin bir yolu olup olmadığını merak ediyorum (ön plan için 1'ler ve arka plan için 0'lar)?Görüntü işleme işlevlerini kullanmak için matris veya ikili bir görüntüde çokgen çizimi nasıl yapılır?

Şu anda 'getframe', sonra 'frame2im' ve sonra 'im2bw' işlevlerini kullanıyorum. ama onun dezavantajı, matlabın parsellerini piksel cinsinden göstermemesi nedeniyle, son görüntünün boyutu (= matris) (yani, bir kareyi görüntüye dönüştürürken piksel cinsinden boyutu) üzerinde hiçbir kontrolüm olmamasıdır. (?). Yani, bir kişi arsa üzerinde 'yakınlaştırır' veya 'uzaklaştırır' her zaman, sonuçta oluşan matris (= görüntü) farklılık gösterir.

kodum:

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) 

cevap

12

Belki de komut olarak yama kullanarak komplo yerine ilgilenilen bölge hesaplamak için poly2mask kullanabilirsiniz. Örneğin

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) 

Ve yukarıdaki kodun sonucu, bw, bu görüntüdür.

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

+0

değiştirilmiş -> va = poly2mask (Çokgen (:, 1), Çokgen (:, 2), ImageHeight, ImageWidth); –

+0

@Kamran: Yorumunuzu açıklayabilir misiniz? değiştirilmiş ile ne demek istiyorsun? – Azim

+0

@Azim: Sanırım küçük bir yazım hatası yapıyordu. Onardım. – gnovice

İlgili konular