2016-10-23 1 views
0

Matlab에서 라이브러리 voronoi을 사용하여 보로 노이 다이어그램에서 궤적을 얻으려고합니다.다각형 장애에 대한 Voronoi 다이어그램에서 궤적 얻기

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'); 
취득 16,

: 즉 enter image description here

는 어떻게 실제 궤도에서 모든 쓸모없는 라인을 분리 할 수 ​​있습니까?

+0

당신은 "실제 궤도"에 의해 무엇을 의미합니까? 여기에서 셀 경계를 결정하고 동일한 다각형의 점에 셀을 병합 하시겠습니까? – Will

+0

가로 및 세로 방향이 아닌 파란색 선을 의미합니다. 즉, 다각형 (이 경우 사각형과 사각형)을 둘러싸는 파란색 선입니다. –

답변

0

이 경우 쓸모없는 선의 구별되는 속성은 다각형 장애물 안에 적어도 하나의 정점이 들어 있다는 것입니다.

정점이이 조건을 만족 하는지를 결정할 수 있지만 여러 가지 방법이 있지만 이진 이미지에서 좌표를 얻는 것이 가장 쉽습니다. 정점이 픽셀의 어느 한 점의 거리 내에 있는지 확인하는 것이 가장 쉽습니다 vo에서 :

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

당신이 장애물에 의존 할 수없는 경우

다음 픽셀 (예를 들어, 그들은 중공 수 있습니다) 그때는 아마 같은 장애물에 속하는 픽셀을 결정해야합니다 (아마도 kmeans 또는 bwconncomp 사용)와 충만 각 오브젝트의 볼록한 선체로 들어가는 Voronoi 엣지를 없앱니다. 선형 지수 idx으로 나열 vo의 픽셀들로 구성된 주어진 장애물의 경우 :

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