2009-04-24 4 views
7

私はポリゴン(凹凸)を使ったmatlabプログラムを開発しています。ポリゴンにimdilateやimerodeなどの画像処理関数を使用する必要があります。この目的のために、ポリゴンをイメージに変換する必要があります。私はバイナリ行列(1つは前景、0は背景)に直接ポリゴンをスケッチする方法があるのだろうか?イメージ処理関数を使用するために、行列またはバイナリイメージでポリゴンをスケッチする方法はありますか?

現在、私は 'getframe'、次に 'frame2im'、次に 'im2bw'関数を使用しています。しかし、その欠点は、matlabがそのプロットをピクセル単位で表示しないため、最終的な画像(=マトリックス)のサイズ(すなわち、フレームを画像に変換するときのピクセル単位の画像のサイズ)を制御できないことです(?)。したがって、誰かがプロット上で「ズームイン」または「ズームアウト」するたびに、結果のマトリックス(=画像)が異なります。

私のコード:

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) 

答えて

12

はおそらく、あなたがあなたのスクリプトのようにパッチを使用して、それをプロットするのではなく、関心のある領域を計算するためにpoly2maskを使用することができます。たとえば、

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) 

上記のコードの結果はbwです。修飾

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

+0

- > BW = poly2mask(ポリゴン(:、1)、多角形(:、2)、ImageHeight、ImageWidth)。 –

+0

@Kamran:あなたのコメントを説明できますか?変更されたことはどういう意味ですか? – Azim

+0

@Azim:彼は小さなタイプミスを指摘していたと思います。それを私が直した。 – gnovice

関連する問題