projekt kompetencyjny
Transkrypt
projekt kompetencyjny
Politechnika Łódzka Wydział Elektrotechniki, Elektroniki, Automatyki i Informatyki Katedra Informatyki Stosowanej PROJEKT KOMPETENCYJNY Tomography Tracking Analiza i przetwarzanie obrazów w celu detekcji i śledzenia ruchu cząstek znacznikowych na dwuwymiarowych sekwencjach obrazów tomograficznych Autorzy: Jakub Stefański 152484 Krzysztof Łachacz 152453 Krzysztof Staciwa 152483 Opiekun pracy: dr Krzysztof Grudzień Łódź, luty 2011 1 Wprowadzenie Jednym z obszarów działalności badawczej Katedry Informatyki Stosowanej jest bezinwazyjne badanie zjawisk fizyko – chemicznych występujących w przepływach wielofazowych. W tym celu wykorzystuje się metodę diagnostyczną jaką jest tomografia. Nasz projekt dotyczy przetwarzania i rozpoznawania obrazów otrzymanych poprzez tomografię rentgenowską. Sekwencje obrazów, wykorzystywanych w programie, zostały wykonane podczas opróżniania silosa zawierającego materiał sypki wraz z tzw. „cząstkami znacznikowymi”, których odnajdywanie i śledzenie było głównym założeniem projektu. 2 Istota trudności Otrzymane sekwencje obrazów z tomografu są bardzo mocno zaszumione. Cząstki znacznikowe są słabo widoczne. Ponadto jest to obraz spłaszczony, pewne cząstki pojawiają się, inne zaś znikają co stwarza duże problemy przy obrazowaniu ich ruchu. Zasadniczym celem programu jest odnajdywanie w/w cząstek oraz śledzenie ich ruchu. Do przetworzenia obrazu użyliśmy filtru medianowego i operacji odjęcia obrazu, zaś do rozpoznawania cząstek użyliśmy sieci neuronowej, trójwarstwowej płaskiej, ucząc ją algorytmem wstecznej propagacji. Wykrycie cząstek za pomocą segmentacji i intensywnego przetwarzania obrazów nie przyniosły zadowalających skutków, stąd decyzja o użyciu sieci neuronowej. 3 Opis funkcjonalności Nasz produkt posiada następujące funkcjonalności: • pozwala na wczytanie, wstępne przetworzenie i przeglądanie obrazów z tomografu w formacie .tiff (16-bit, gray-scale, big-endian), • pozwala na wczytanie i przeglądanie próbek treningowych służących do nauki sieci neuronowej, • umożliwia wydobywanie i zapisywanie poszczególnych próbek do nauki sieci neuronowej wraz z klasyfikacją próbki, • umożliwia ustawienie marginesów i stopnia pewności dla wyszukiwania cząstek znacznikowych, • umożliwia podgląd wyników wyszukiwania przy aktualnych ustawieniach dla pojedynczego obrazu (dowolnej jednej klatki w sekwencji). • wyszukuje znaczniki na danej sekwencji plików przy wcześniej wprowadzonych ustawieniach tj. marginesy obrazu oraz współczynnik pewności dla sieci neuronowej, • zapisuje współrzędne znalezionych obiektów do pliku w formacie XML, • pokazuje ścieżki ruchu znaczników na podstawie danych wczytanych z pliku XML na dwa sposoby – punktowo, gdzie kolory oznaczają upływ czasu, jak również krzywymi, • aplikacja poprzez wielowątkowość w pełni wykorzystuje możliwości wielordzeniowych procesorów, 4 Architektura Architektura aplikacji oparta jest o wzorzec MVP (Model View Presenter) z widokiem pasywnym. W skład solucji wchodzi 8 projektów: • TomographyTrackingGUI – moduł będący warstwą VIEW w modelu MVP, • TTPresentationLayer – biblioteka DLL odpowiadająca za warstwę prezentacji w modelu MVP, przygotowuje dane do wyświetlenia korzystając z klas warstwy Model, • TTModelLayer – biblioteka DLL odpowiadająca za warstwę MODEL w modelu MVP, zawiera podstawowe abstrakcje i klasy związane z przechowywaniem i obróbką danych w programie, • verAI – biblioteka DLL zaprojektowana do wielokrotnego użytku, implementująca sieć neuronową, umożliwiająca rozbudowę o nowe typy sieci neuronowych, • NeuralNetworkTrainer – interfejs konsolowy do trenowania sieci neuronowej, umożliwiający ustawienie wszystkich parametrów sieci oraz kontynuowanie przerwanej nauki, • MedianFilterPlugin – biblioteka DLL stanowiąca zarządzaną nakładkę na niezarządzany plugin CTMF_unmanaged. Korzysta z Managed Extensibility Framework (MEF). Implementuje interfejs IFilterMethod. • CTMF_unmanaged – niezarządzana biblioteka DLL napisana w C z użyciem instrukcji SSE2, zawiera wydajną implementację filtru medianowego. • TomographyTracking – moduł odpowiedzialny za przygotowanie pliku instalacyjnego dla solucji. Diagram klas dla biblioteki verAI: Diagram klas dla biblioteki TTModelLayer: Stworzone formaty plików: Format NND (*.nnd) – NeuralNetworkData. Służy do przechowywania informacji o pojedynczej próbce dla sieci neuronowej, zawiera tablicę wartości w przedziale <0;1> (skalowane z przedziału <0;255> reprezentującą obraz (kolejne elementy idą wierszami). Po tym następuje tablica oczekiwanych wartości pobudzenia neuronów wejściowych. Format NN (*.nn) – NeuralNetwork Służy do przechowywania informacji o sieci neuronowej (jej konfiguracja oraz wagi). Obsługiwany jest przez metodę statyczną: FlatThreeLayer.Load(string path) oraz operację interfejsu ISaveable.Save(string path) implementowaną przez FlatThreeLayer. Format XML do zapisu wyników przetwarzania sekwencji obrazów Plik XML zawiera rozdzielczość obrazu i nazwy kolejnych obrazów w sekwencji wraz ze znalezionymi na nich współrzędnymi cząstek znacznikowych. Taki format zapisu umożliwia łatwe interpretowanie wyników w zewnętrznych programach. Przykładowy plik wygląda w ten sposób: <?xml version="1.0" encoding="utf-8"?> <ImageSeries width="960" height="768"> <Image name="part6_radio0001.tif"> <Point> <X>418</X> <Y>12</Y> </Point> <Point> ... Ramka przeszukiwania obrazu (nie jest zapisywana do pliku): Poniższa ramka jest przesuwana sukcesywnie po obrazie i sprawdzana siecią neuronową czy w jej obrębie znajduje się cząstka znacznikowa. Ramka reprezentuje również część informacji zawartej w próbce do nauki sieci neuronowej. Przeszukiwanie obrazu jest wykonane wielowątkowo – wykorzystując wszystkie dostępne procesory i rdzenie aktualnej konfiguracji komputera. Interfejs uczenia sieci neuronowej: Umożliwia pełną kontrolę nad parametrami sieci neuronowej i jej nauki. Ustala się warunki końcowe nauki. Można również przerwać naukę w dowolnym momencie (klawisz ESC) i powrócić do niej później. W katalogu docelowym znajdują się dwa przykładowe skrypty pokazujące jak uruchomić nowy trening sieci neuronowej, jak również kontynuować przerwany. 5 Opis działania programu od strony technicznej • Ładowanie obrazu: Obraz jest ładowany z użyciem biblioteki LibTiff.Net. Przekształcany jest do formatu RAW, 8bitów na piksel (następuje konwersja 16->8 bitów). Następnie z użyciem biblioteki CTMF wykonywany jest na kopii obrazu filtr medianowy o średnicy 20 px. Stwarza to rozmyty obraz z zachowaniem krawędzi. Otrzymany obraz jest odejmowany od oryginalnego obrazu, a wynik jest rozjaśniany. Dopiero w ten sposób przygotowany obraz jest wyświetlony. Obliczenia przebiegają < 1 sekundy stąd też są wykonywane przy każdym załadowaniu obrazu (wynik przetworzenia nie jest zapisywany). Dla porównania, te same operacje przy użyciu programu ImageJ zajmują > 6 sekund. • Wydobywanie próbek: Po przejściu do trybu przeglądania próbek możliwe jest klikanie na obrazie. Po kliknięciu rysowana jest ramka, można teraz zapisać próbkę kwalifikując ją jako negatywna/pozytywna lub kliknąć gdzie indziej na obrazie w celu anulowania. Próbki automatycznie zapisywane są do folderu roboczego do odpowiednich podfolderów. • Przeszukiwanie obrazu (podgląd pojedynczego obrazu): Obraz jest przeszukiwany od górnego lewego rogu poziomo w prawo i następnie w dół. Przeszukiwanie jest opisane przy opisie ramki przeszukiwania na poprzedniej stronie. Przesuwanie ramki następuje równolegle z użyciem wszystkich dostępnych wątków procesorów. Jeżeli sieć neuronowa zwróci wartość powyżej ustalonego poziomu z przedziału (0;1) to współrzędna wraz z tą wartością jest zapamiętywana. Następnie usuwane są ramki które są zbyt blisko siebie – pozostaje ta której wartość była największa. • Przetwarzanie całej sekwencji obrazów: Przetwarzanie całej sekwencji obrazów przebiega analogicznie jak przeszukiwanie pojedynczego obrazu. Wszystkie obrazy w sekwencji są przeszukiwane równolegle i synchronizowane podczas wrzucania do wspólnej kolekcji. Na koniec kolekcja ta jest sortowana po nazwie pliku (żeby zachować kolejność klatek) i zapisywana do pliku XML o strukturze opisanej powyżej. • Wyświetlanie analizy metodą punktową: Metoda ta polega na przedstawieniu punktów z kolejnych klatek w coraz bardziej czerwonym kolorze. W ten sposób punkty z początkowych klatek są zielone, a końcowe – czerwone. Zapamiętywane są wszystkie punkty ze wszystkich klatek wraz z odpowiadającymi im kolorami, a następnie usuwane punkty które są odizolowane (nie mają bliskich sąsiadów). Po czym są one rysowane. • Wyświetlanie analizy metodą krzywych: Pierwsze 10 klatek służy do określenia punktów startowych. Odrzucane są punkty które występują zbyt rzadko. Pierwsze 10 klatek musi być nieruchome. Pozostałe punkty (te które często się powtórzyły) służą jako początki „ścieżek”. Następnie badane są kolejne klatki w celu dopasowania kolejnych punktów do ścieżek aż do końca sekwencji. 6 Wykorzystane narzędzia i technologie • Język C#, .NET Framework 4.0, • GUI: Windows Forms 4.0, • IDE: Visual Studio 2010 Ultimate na licencji MSDN AA, • Odczyt plików TIFF: LibTiff.Net, • Klient SVN: AnkhSVN, • Biblioteka CTMF do obliczeń filtru medianowego, 7 Harmonogram prac Przedział czasowy Autorzy Zakres prac 25.10.10 – 08.11.10 Jakub Stefański, Krzysztof Łachacz, Krzysztof Staciwa Przygotowanie teoretyczne 08.11.10 – 27.11.10 Jakub Stefański, Krzysztof Łachacz, Krzysztof Staciwa Wstępne przetwarzanie obrazów 08.11.10 – 27.11.10 Jakub Stefański Implementacja sieci neuronowej 27.11.10 – 27.12.10 Krzysztof Staciwa, Krzysztof Łachacz Przygotowanie zestawu prawie 5000 próbek do nauki SSN 27.12.10 – 31.12.10 Jakub Stefański Trenowanie sieci neuronowej 31.12.10 – 24.01.11 Jakub Stefański Wyznaczanie trasy próbek znacznikowych 24.01.11 – 31.01.11 Jakub Stefański, Krzysztof Łachacz, Krzysztof Staciwa Przygotowanie sprawozdania, dokumentacji 8 Przykładowe wyniki (metoda punktów i krzywych) 9 Dalszy rozwój • Udoskonalenie algorytmu wyznaczania trasy cząstek znacznikowych, • Rozbudowa bazy uczącej dla sieci neuronowej, • Stworzenie formatek umożliwiających zmianę niektórych parametrów, które aktualnie zostały zaszyte w kodzie, ze względu na brak potrzeby ich modyfikowania dla znanych nam sekwencji obrazów, • Zaimplementowanie sieci neuronowej w kodzie niezarządzanym (C, C++) w celu polepszenia wydajności,