2016-10-23 5 views
0

ライブラリを使用してVoronoi Diagramから軌道を取得しようとしていますvoronoi Matlab。ここで、(バイナリ画像からすべての障害が、図にプロット)多角形障害のボロノイ図から軌道を取得

vo =:私はこのコードを使用してい

  • vo(1,:):x軸点
  • vo(2,:):y軸ポイント

コード:

figure; hold on; 
plot(vo(1,:),vo(2,:),'sr'); 

[vx,vy] = voronoi(vo(1,:),vo(2,:)); 

plot(vx,vy,'-b'); 
取得

:つまり enter image description here

は、どのように私は本当の軌道からのすべての無用の線を分けることができますか?

+0

あなたは「本当の軌道」とはどういう意味ですか?ここで決定されたセルの境界を維持したいが、同じポリゴン内の点のセルをマージする必要がありますか? – Will

+0

私は、水平方向と垂直方向にない青い線を意味します。つまり、ポリゴンを囲む青い線(この場合は四角形と四角形)です。 –

答えて

0

この場合の無駄な線の特徴は、多角形の障害物の内部に少なくとも1つの頂点が含まれていることです。

頂点がこの条件を満たすかどうかを判断する方法はたくさんありますが、その座標が2値画像から来ている場合は、頂点が画素の任意の点の距離内にあるかどうかを確認することが最も簡単です

[~,D] = knnsearch(vo,[vx(:),vy(:)]); 
inObstacle = any(reshape(D,size(vx)) < 1); 
plot(vx(:,~inObstacle),vy(:,~inObstacle),'-b'); 

あなたはピクセルで満たされている障害物に頼ることができない場合(例えば、それらが中空であってもよい)、あなたはおそらく、その後(おそらくkmeansまたはbwconncompを使用して)同じ障害物に属し、どのピクセルを決定する必要があります。voで各オブジェクトの凸包に侵入するボロノイのエッジを除去します。線形インデックスidxによって記載されているvoにおける画素からなる特定の障害物のために:

K = convhull(vo(idx,1),vo(idx,2)); 
inObstacle = inpolygon(vx,vy,vo(idx(K),1),vo(idx(K),2));