从Voronoi图中获取多边形障碍物的轨迹

时间:2016-10-23 20:27:51

标签: matlab voronoi

我正在尝试使用Matlab中的库 voronoi 从Voronoi Diagram中获取Trajectory。我正在使用此代码:

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

换句话说,我怎样才能将所有无用的线条与真实的轨迹分开?

1 个答案:

答案 0 :(得分:0)

在这种情况下无用线的区别特性是它们在多边形障碍物内至少包含一个顶点。

有许多方法可以选择判断一个顶点是否满足这个条件,但是假设坐标来自二进制图像,最简单的方法之一就是检查顶点是否在一个像素的距离内。 vo

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

如果您不能依赖被填充像素的障碍物(例如它们可能是空心的),那么您可能需要确定哪些像素属于同一障碍物(可能使用kmeansbwconncomp)和然后消除侵入每个物体的凸包的Voronoi边缘。对于由线性索引vo列出的idx中的像素组成的给定障碍:

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