2013-05-24 9 views
7

Mam zestaw punktów 2D, niezorganizowany, i chcę znaleźć "kontur" tego zestawu (nie wypukły kadłub). Nie mogę używać kształtów alfa, ponieważ mam cel prędkości (mniej niż 10 ms na przeciętnym komputerze). Moim pierwszym podejściem było obliczenie siatki i znalezienie obrysów kwadratów (kwadratów, które mają pusty kwadrat jako sąsiad). Myślę więc, że skutecznie zmniejszyłem liczbę punktów (z 22000 do 3000 mniej więcej). Ale wciąż muszę udoskonalić ten nowy zestaw.Znajdź kontur dwuwęzła niezorganizowanego 2D

The outline points are in green

Moje pytanie brzmi: w jaki sposób mogę znaleźć realne kontury punktów wśród moich zielonych punktów?

+0

spróbować kształtów [alfa] (http://en.wikipedia.org/wiki/Alpha_shape) – chaohuang

Odpowiedz

1

Po weekendzie pełnym refleksji, znalazłem wygodne rozwiązanie.

Potrzebujemy siatki, musimy ją wypełnić naszymi punktami, bez trudu.

Musimy zdecydować, które kwadraty są uważane za "Kontur". Nasze kryteria to: co najmniej jeden pusty sąsiad i co najmniej 3 niepustych sąsiadów.

Brakuje informacji o połączeniach. Więc wybieramy kwadrat "Kontur", który jako 2 "kontur" sąsiadów lub mniej. Następnie wybieramy jednego z sąsiadów. Od tego możemy rozpocząć ekspansję. Po prostu krąży wokół bieżącego kwadratu, aby znaleźć następny kwadrat "Kontur", znając poprzednie kwadraty "Konturu". Nasze kryteria konturu zapobiegają ślepemu zaułkowi.

Mamy teraz wektory połączonych kwadratów, i normalnie, jeśli nasz kształt nie ma dziury, tylko jeden wektor połączonych kwadratów!

Teraz dla każdego kwadratu musimy znaleźć najlepszy punkt dla konturu. Wybieramy ten, który znajduje się dalej od barycentrum naszego samolotu. Działa dla większości kształtów. Inną techniką jest obliczenie barycentrum pustych sąsiadów wybranego kwadratu i wybór najbliższego punktu.

Contour

czerwona punkty są kontur zielonym. Zastosowaną techniką jest płaska barycenter.

Dla zestawu 28 000 punktów techniki te trwają 8 ms. Formy alfa CGAL zajęłyby średnio 125 ms dla 28000 punktów.

PS: Mam nadzieję, że wyraziłem się jasno, angielski nie jest mój ojczysty: s

0

Naprawdę powinieneś używać kształtów alfa. Być może używaj tylko zielonych punktów jako danych wejściowych algorytmu alfa alfa.

+0

nawet dla 2500 punktów, na CGAL czas obliczania kształtów alfa to 15 ms. Dodane do 5 ms od znalezienia zielonych punktów, to czas obliczeniowy 20 ms. Znalazłem rozwiązanie (piszę), które trwa 3 ms i ma dobre wyniki. – Cyril

+0

@Xerto: Twoja maszyna działa bardzo wolno lub źle używasz kształtów alfa CGAL. Na moim laptopie czas działania 25 000 punktów wynosi około 5 ms, chyba że podasz zbyt duże wartości alfa i zwrócisz wszystkie krawędzie (w tym przypadku jest to około 20 ms, dla 25000 punktów). – lrineau

+0

Mój proc jest Core 2 Duo, więcej niż oprogramowanie jest przeznaczone dla drona, więc mamy niską specyfikację (prawdopodobnie Atom). W przypadku Alphashape'ów CGAL korzystam z podanego przykładu w dokumentacji. – Cyril

Powiązane problemy