2017-10-18 8 views
0

Subset a region from boundary coordinates - Matlabの質問に基づいて、代わりにimrectを使用しようとしました(角度のない四角形に限定していますが)。imrectを使って境界座標から領域をサブセット化する - Matlab

しかし、私はx、y座標を得られないので、出力に問題があります。どうして?

スクリプト:

clc; 
clear; 

I = imread('https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Astroid_created_with_Elipses_with_a_plus_b_const.svg/330px-Astroid_created_with_Elipses_with_a_plus_b_const.svg.png'); 
I = rgb2gray(I); 
I = imcomplement(I); 
level = graythresh(I); 
BW = im2bw(I,level); 

BW_filled = imfill(BW,'holes'); 

boundaries = bwboundaries(BW_filled); 
figure,imshow(I) ; 

hold on; 

b = boundaries{1}; 
plot(b(:,2),b(:,1),'b','LineWidth',2); 

xq = b(:,2); 
yq = b(:,1); 
h = imrect; 

pos = getPosition(h); 

X1 = round(pos(1)); 
Y1 = round(pos(2)); 
X2 = round(X1 + pos(3)); 
Y2 = round(Y1 + pos(4)); 

xv=[X1 X2]; 
yv=[Y1 Y2]; 

scatter(X1,Y1 ,'r') 
scatter(X2,Y2 ,'r') 

[in,on] = inpolygon(xq,yq,xv, yv) %xq and yq are inside or on the edge of the polygon area defined by xv and yv 
+0

posが空であることを意味していますか?とにかく、 'pos = getPosition(h);の前に' pause() 'を置いておきたいかもしれません。ユーザーが長方形を調整できるようにします。さもなければ、それが置かれるとすぐにその位置を読むでしょう。 – Zep

+0

[in、on]は0と1のみを表示し、座標は表示しません。 – jane

+0

'inpolygon'関数は座標を戻しません。 xqとyqで指定されたクエリポイントがxvとyv._で定義されたポリゴンエリアの内側またはエッジにあるかどうかを返します_また、クエリーポイントがポリゴンエリアのエッジにあるかどうかを示すon _returns_ – Zep

答えて

2

inpoligonはXQとYQ点が多角形内にあるかどうかを示すためのブール値のリストを返します。対応するポイントの座標を取得するには、論理インデックスを使用します。

x_in = xq(in | on); 
y_in = yq(in | on); 
scatter(x_in,y_in ,'g.') 
関連する問題