czwartek, 18 czerwca 2009

Jak sobie poradzić ze szkieletyzacją w Pandore

Przetwarzanie obrazów w celu wydobycia z nich interesujących nas danych nie musi być trudne. Wystarczy opanować pewien zestaw operacji podstawowych i wybrać wygodny analizator obrazu (ja polecam Pandore). Tym wpisem chciałbym zacząć serię mini poradników jak sobie poradzić z różnymi problemami związanymi z analizą obrazu i jak rozwiązać niektóre zadania. Wpisy te będą oznaczone tagiem rozwiązania. Nie planuje opisywać działania poszczególnych operacji, a jedynie uzasadniać dlaczego w danym algorytmie zostały użyte. Czytelnika natomiast zachęcam do samodzielnego zapoznania się z podstawami. Szczególnie pomocna może okazać się książka prof. Leszka Wojnara "Komputerowa Analiza Obrazu", do której sam czasami zaglądam. Dodatkowo do każdej użytej instrukcji będzie podany link do pomocy programu.

Na początek zostanie pokazane jak wykonać szkieletyzację obrazu binarnego. Niestety poza szkieletem często dostajemy dodatkowe artefakty, których najchętniej byśmy się pozbyli. Służy do tego operacja usuwania gałęzi, która w przypadku Pandore nie najlepiej sobie radzi. Zobaczymy w jaki sposób można ten problem rozwiązać.

Konwersja obrazu
Test będzie przeprowadzony dla sztucznego obrazu, który przedstawia bliżej nieokreśloną strukturę połączonych elementów z dodatkowymi wypustkami.
Najpierw konwertujemy obraz do formatu Pandore.
pbmp2pan input.bmp ex1_i1.pan



Szkieletyzacja
Następnie uruchamiamy szkieletyzację. Na poniższym obrazie widzimy jej efekty. Można zauważyć, że poza właściwym szkieletem dostaliśmy sporo dodatkowych gałęzi, które po części pokrywają się z wypustkami, a po części zlokalizowane są w przypadkowych miejscach - głównie tam gdzie struktura ma nieregularną krawędź.
pskeletonization ex1_i1.pan ex1_i2.pan



Cieniowanie
Stosujemy operację cieniowania, aby upewnić się, że szkielet będzie miał grubość jednego piksela.
ppostthinning ex1_i2.pan ex1_i3.pan



Usunięcie gałęzi
Ta operacja, jak sama nazwa wskazuje powinna usunąć wszystkie artefakty i pozostawić tylko linie łączące się ze sobą i z krawędzią. Jednakże jej działanie nie jest do końca takie jak byśmy sobie tego życzyli.
Spróbujemy rozwiązać problem w inny sposób.
pbarbremoval 2 1 ex1_i3.pan ex1_i4.pan



Negatyw
Wykonujemy negatyw. W tym momencie obraz nie przedstawia już linii, a obiekty, rozdzielone przez te linie (przypomnienie: w analizie obrazu na obrazie binarnym kolor biały oznacza obiekty do analizy, a kolor czarny tło).
pinverse ex1_i4.pan ex1_i5.pan



Indeksacja obiektów
Każdemu rozłącznemu obszarowi nadajemy inną wartość. Pozwoli nam to patrzeć na nie jak na zupełnie niezależne obiekty.
plabeling 4 ex1_i5.pan ex1_i6.pan



Dylatacja
Powiększamy każdy obszar pasem o wartości jednego piksela. Można zauważyć, że w ten sposób straciliśmy granice pomiędzy obiektami.
pdilatation 0 1 ex1_i6.pan ex1_i7.pan



Wyznaczenie krawędzi
Rozdzielamy obiekty wprowadzając między nimi linie graniczne.
pboundary 4 ex1_i7.pan ex1_i8.pan



Maska
Powstały w ten sposób obraz będzie maską dla wyznaczonego w kroku trzecim szkieletu.
pand ex1_i3.pan ex1_i8.pan ex1_i9.pan


Pomimo tego, że przedstawione rozwiązanie dotyczy problemów związanych z analizatorem Pandore, to warto się z nim zapoznać, aby zobaczyć alternatywne metody usuwania gałęzi.

0 komentarze:

Prześlij komentarz