2016-10-23 2 views
0

Ich versuche, die Trajektorie von Voronoi Diagramm mit der Bibliothek voronoi von Matlab zu bekommen. Ich verwende diesen Code:Trajektorie vom Voronoi-Diagramm für polygonale Hindernisse

vo = (alle Hindernisse aus einem binären Bild, das in einer Figur gezeichnet), wobei:

  • vo(1,:): x-Achse zeigt
  • vo(2,:): y-Achse Punkte

Code:

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

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

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

Beschaffung: enter image description here

Mit anderen Worten, wie kann ich trennen alle nutzlose Zeilen aus der realen Flugbahn?

+0

Was meinst du mit der „realen Flugbahn“? Sie möchten die hier festgelegten Zellengrenzen beibehalten, aber Zellen für Punkte im selben Polygon zusammenführen? – Will

+0

Ich meine die blauen Linien, die nicht in horizontaler und vertikaler Richtung sind. Das heißt, die blauen Linien, die die Polygone umgeben (in diesem Fall Quadrate und Rechtecke). –

Antwort

0

Die Unterscheidungseigenschaft der nutzlosen Linien in diesem Fall ist, dass sie mindestens einen Eckpunkt innerhalb der polygonalen Hindernisse enthalten.

Es gibt viele Möglichkeiten, um zu entscheiden, ob ein Scheitelpunkt diese Bedingung erfüllt, aber wenn die Koordinaten von einem Binärbild kommen, könnte es am einfachsten sein, zu überprüfen, ob der Scheitelpunkt innerhalb eines Pixels liegt in vo:

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

Wenn Sie auf die Hindernisse nicht verlassen können, werden mit Pixeln gefüllt (zB sie können hohl sein), dann müssen Sie wahrscheinlich, welche Pixel gehören zur selben Hindernis bestimmen (vielleicht mit kmeans oder bwconncomp) und dann Beseitigen Sie Voronoi-Kanten, die in die konvexe Hülle eines jeden Objekts eindringen. Für ein gegebenes Hindernis des Pixels in vo aufgeführt durch die lineare Indizes idx aus:

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