2013-08-05 5 views
5

Wykonuję pewną pracę (zbyt skomplikowaną, aby to wyjaśnić), a jednym z zadań, które mam, jest przekształcenie obrazu rastrowego wygładzonego wielokąta w szkielet. Tak więc muszę zrobić coś takiego: Pic 01Poszukuję algorytmu: generowanie szkieletu dla obrazów rastrowych

Mam obraz rastrowy (po lewej) i chcę mieć wykres składający się z punktów i krawędzi (po prawej), który reprezentuje obraz.

Czytałem o algorytmach, szczególnie o książce Stevena Skieny, gdzie mówi, aby użyć algorytmu "Pędzel ognia", który wyjaśnia jako "każdy cykl, przechodzenie przez każdy punkt, który jest na krawędzi, dla krawędzi, które zderzaj się dodaj punkt do szkieletu i usuń pozostałe punkty, przejdź do następnego cyklu, aż pozostanie tylko szkielet "ale wszystkie informacje, które mogłem znaleźć na temat tego algorytmu online, dotyczą algorytmów odnajdywania ścieżek dla robotów, nie rozumiem, jak zastosować tutaj (w zasadzie, skąd mam wiedzieć "krawędzie", jeśli wszystko, co mam, to współrzędne wypełnionych/wolnych pikseli).

Sprawdziłem bibliotekę CGAL i pokaz szkieletu, ale nie działa to dobrze, gdy wielokąt ma wiele wierzchołków, więc po prostu przekształca każdy wierzchołek na granicy w wierzchołek wielokąta, a następnie podaje go do algorytmu nie przyniesie dobrych wyników.

Spodziewam się, że musi to być typowy algorytm, ponieważ zadanie wydaje się dość proste, ale nie chcę wymyślać koła i nie mogłem znaleźć niczego na ten temat (być może dlatego, że nie znam poprawne słowa kluczowe)

+0

Powinieneś wypróbować szkieletowanie obrazu binarnego po wykryciu linii przez transformacje Hough. Byłoby łatwiej, jeśli na przykład korzystasz z opencv, ale można je również wdrożyć. –

Odpowiedz

3

Lepszym terminem dla wyszukiwania jest rozcieńczanie cyfrowe, cyfrowa wersja osi środkowej. Na przykład w tym dokumencie podano 15 takich algorytmów:

"Uwaga na piętnaście równoległych algorytmów cieniowania 2D." M. Couprie (PDF download link)

Oto mały kawałek rysunku 16 pokazano wyniki dwóch takich algorytmów:
Fig16

+0

Dzięki Joseph, ten artykuł (i słowo kluczowe) jest dokładnie tym, czego potrzebowałem! – Istrebitel

0

To był nasz projekt szkoły! Opiera się na narożnikach Schlesingera i algorytmach szkieletyzacji. Rogi są sposobem reprezentacji obrazu binarnego w skompresowanej formie, co pozwala na znacznie szybsze operacje, niż to jest możliwe na obrazie rastrowym. Aby uzyskać więcej informacji, zobacz naszą papieru:

Corners toolbox allowing processing binary images in a compressed form

Skeletonization była faktycznie moja część i opisałem to w dużej szczegółowości :-) Myślę, że kod w C++ jest nadal bezpłatny i dostępny gdzieś.