środa, 11 sierpnia 2010

Moduły GUI do anlalizatora obrazu Pandore - Działy wodne

Pełny kod źródłowy
Analizatora obrazu Pandore używam już od dłuższego czasu. Pomimo tego, że do większości zadań pisanie skryptów w konsoli jak najbardziej mi odpowiada, to czasami brakuje mi okienkowego interfejsu użytkownika, który mógłby przyspieszyć poszukiwanie optymalnych parametrów, dla poszczególnych operatorów. Częściowo w takich sytuacjach można posłużyć się interfejsem Ariane, o którym pisałem jakiś czas temu. Niestety każdorazowa edycja parametrów zapisanych w bloczkach i późniejsze wyświetlenie wyniku wymagają kilku kliknięć, a to wcale nie przyśpiesza pracy. Dlatego postanowiłem napisać własne (mini) programy, aby jeszcze bardziej usprawnić interakcję z użytkownikiem. Korzystając z biblioteki Qt, przygotowałem dwie aplikacje (możliwe, że pojawi się więcej), które bardziej szczegółowo opiszę w tym i następnym wpisie. Pełny kod źródłowy na licencji BSD został umieszczony w publicznym tepozytorium na GitHub.

Pierwsza aplikacja (używam też nazwy moduł GUI) została poświęcona algorytmowi Działów wodnych. Jej celem jest nie tylko uruchomienie tego algorytmu, ale również odpowiednie przygotowanie danych wejściowych. Dla niewtajemniczonych przypomnę, że algorytm ten umożliwia segmentację obrazu - rozbicie na obszary, które powinny odpowiadać rzeczywistym obiektom. Jego działanie zależy od właściwego przygotowanie obrazów wejściowych. Jednym z nich powinien być obraz wskazujący punkty (lub obszary) startowe, od których rozpoczyna się proces tzw. zalewania. Drugi obraz określa obszar i kierunek, w którym to zalewanie następuje (więcej na ten temat poniżej).

Interfejs użytkownika

Okienko programu zostało podzielone na dwie części - lewa zawiera panel opcji, natomiast prawa podgląd obrazów wejściowych lub wyniki segmentacji. Obraz po wczytaniu (menu [File][Open oryginal image]) można poddać operacji negatywu [Invert] lub rozmyciu [Blur]. Ta druga operacja jest szczególnie zalecana ponieważ usuwa nadmiar szumu z obrazu, a tym samym zmniejsza ilość wynikowych segmentów. Następna opcja na panelu [Show] pozwala obejrzeć obraz, na podstawie którego wyliczany jest obszar zalewania (opcja [Image for computations]). Obraz ten można przygotować na dwa sposoby (panel [Set image for computations]):
  • Obraz gradientowy [Gradient image] - wskazuje na granice obiektów,
  • Mapa odległości [Distance map] - określa odległość od wcześniej obliczonych obiektów z wykorzystaniem opcji [Binary image] na panelu [Set initial image].
Punkty startowe [Show][Initial image] dla algorytmu działów wodnych można wyznaczyć na kilka sposobów (panel [Set initial image]):
  • Lokalne minima [Local minimum point] - punkty, których wszystkie sąsiednie punkty mają wyższe wartości,
  • Obraz binarny [Binary image] - każdy obiekt jasny (biały) będzie podstawą do zbudowania osobnego segmentu,
  • Ręczne zaznaczenie obszarów startowych [Marker].

A teraz krótko, co jest pod maską aplikacji, czyli jakie operatory Pandore są używane:

Możlwości

Poniżej zostaną wskazane przykładowe sposoby wykorzystania aplikacji. Nie każda kombinacja omówionych powyżej opcji ma sens, dlatego posłużę się dwoma różnymi obrazami - obrazem naturalnym przedstawiającym chłopca w kapeluszu (przykład 1 i 2) i obrazem pokazującym kilka podobnych elementów (przykład 3, 4 i 5).

1. Automatyczna segmentacja obiektów.
  • obraz do obliczeń: [Gradient image]
  • punkty startowe: [Local minima point]

Komentarz: Pomimo rozmycia obrazu filtrem Gaussa o wartości sigma = 1,1 otrzymano znaczne rozdrobnienie segmentów. Dalsze zwiększanie tej wartości skutkowało powstawaniem błędnych obiektów, które zawierały fragmenty dwóch obiektów.

2. Manualna segmentacja obiektów.
  • obraz do obliczeń: [Gradient image]
  • punkty startowe: [Marker]

Komentarz: Zastosowanie obrazu gradientowego i manualnie wskazywanych znaczników (markerów) pozwala na poprawną segmentację obiektów.

3. Wyznaczenie strefy wpływu poszczególnych obiektów.
  • obraz do obliczeń: [Distance map]
  • punkty startowe: [Binary image]

Komentarz: Algorytm działów wodnych może służyć do wyznaczenia tzw. strefy wpływu poszczególnych obiektów. W tym celu należy wykonać binaryzację obrazu (tutaj wartość progowa wynosiła 100) i policzyć mapę odległości.

4. Automatyczna segmentacja obiektów.
  • obraz do obliczeń: [Gradient image]
  • punkty startowe: [Binary image]

Komentarz: Korzystając z wcześniej przygotowanego obrazu binarnego i obrazu gradientowego można wyznaczyć granice obiektów. Niestety został pominięty jeden element na obrazie. Powodem tego jest brak punktu startowego wskazującego tło. Można to oczywiści rozwiązać w podejściu automatycznym, jednak aplikacja nie ma na razie takiej opcji. Jak to zrobić za pomocą Pandore, opiszę niebawem.

5. Manualna segmentacja obiektów.
  • obraz do obliczeń: [Gradient image]
  • punkty startowe: [Marker]

Komentarz: Wskazany powyżej problem można oczywiście rozwiązać poprzez manualne zaznaczenie wszystkich obiektów i tła.

Aby prześledzić sposób obsługi programu zachęcam do obejrzenia krótkiego filmu. Zostały na nim jeszcze raz pokazane wszystkie opisane przed chwilą przypadki użycia, co powinno jeszcze lepiej przybliżyć czytelnikowi możliwości jego działania.

0 komentarze:

Prześlij komentarz