Przetwarzanie obrazu stereo Zuzanna Pietrowska 9 czerwca 2010 1 Spis treści 1 Cel projektu 3 2 Opis rozwiązywanego problemu 3 3 Opis funkcjonalności aplikacji 4 4 Interfejs graficzny aplikacji 4 5 Diagram klas 6 6 Schemat przepływu sterowania 7 7 Przykładowe efekty pracy aplikacji 7.1 Robot . . . . . . . . . . . . . . . . . . . . 7.2 Osoba . . . . . . . . . . . . . . . . . . . . 7.3 Pluszowy królik . . . . . . . . . . . . . . . 7.4 Koleżanka Gosia . . . . . . . . . . . . . . 7.5 Inne - testy przeprowadzone zanim dodano 7.6 Bez kalibracji . . . . . . . . . . . . . . . . 8 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . reprojekcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 9 11 13 15 17 21 22 2 1 Cel projektu Celem projektu było stworzenie systemu przetwarzania obrazu z dwóch jednakowych kamer internetowych. Punkt wyjścia stanowiła aplikacja, wyznaczająca mapę rozbieżności na podstawie obrazu z lewego i prawego oka, napisana z wykorzystaniem bibliotek OpenCV, libQGLViewer oraz Qt4. 2 Opis rozwiązywanego problemu Wiele układów robotycznych podejmuje stosowne decyzje i działania na podstawie informacji pochodzącej z systemów wizyjnych. Komputery starają się naśladować możliwości jakie dają nam nasze oczy przez znajdowanie podobieństw w obrazach dostarczanych przez dwie kamery. Analiza pobieranych zdjęć oraz znajomość wzajemego położenia kamer stereowizyjnych, pozwala nie tylko generować pozycję widzianych punktów w przestrzeni trójwymiarowej, lecz również oceniać odległość do przedmiotów we współrzędnych rzeczywistych. Szukanie podobieństw między obrazami z obu kamer może być kosztowne pod względem obliczeniowym, przez co robot może za długo ”myśleć”. Dlatego też w praktyce, dzięki znajomości geometrii systemu stereowizyjnego zawęża się przeszukiwany obszar, wykorzystując geometrię linii epipolarnych [3]. Przy przetwarzaniu obrazu stereo z wykorzystaniem dwóch kamer można wyróżnić cztery zasadnicze podproblemy: • usunięcie zniekształceń wprowadzanych przez soczewki kamer, • rektyfikację oraz kalibrację kamer, • znalezienie podobieństw między lewym i prawym obrazem, w wyniku tworzona jest mapa różnic między obrazami, • zamiana powyższej na mapę głębi wyrażoną w rzeczywistych jednostkach przez triangulację. Rektyfikacja oznacza dopasowanie dla kątów i odległości między kamerami. Kalibracja to proces określania zależności przestrzennej między kamerami. Mapa, którą uzyskujemy dzięki funkcji cvFindStereoCorrespondence, realizującej algorytm Birchfield’a i Tomasi’ego, dostarcza informacji odnośnie kształtu trójwymiarowej sceny, wzajemnego położenia na niej przedmiotów oraz odległości, która wyrażona jest przez rozbieżność d [3]. Triangulacja możliwa jest wtedy gdy poznamy parametry wiążące lokalne ułady współrzędnych obu kamer/oczu. Wówczas posiadaną informację o odległości i położeniu widzianych przedmiotów zamienić możemy na informację wyrażoną w jednostkach rzeczywistych, w jakich skalibrowane zostały kamery, np. przy użyciu funkcji cvReprojectImageTo3D [2] [1]. W wyniku tego zabiegu uzyskamy ”pokolorowaną” mapę głębi. Po odpowiednim przetworzeniu, trzecią współrzędną koloru można wykorzystać np. do rozpoznawania dokładnej odległości do przeszkód przy nawigacji robotów mobilnych. Powyższe wyrazić można zależnością: Q· x y d 1 = 3 X Y Z W , (1) Współrzędne rzeczywiste widzianego obiektu to (X/W, Y /W, Z/W ). Macierz Q opisuje parametry kamer, (x, y) to współrzędne punktu na mapie rozbieżności, a d to rozbieżność między obrazem widzianym przez lewe oraz prawe ”oko”. 3 Opis funkcjonalności aplikacji Przy realizacji projektu użyto kamer Logitech QuickCam Chat. W celu zapewnienia powtarzalnych warunków eksperymentów zostały one złączone na sztywno. Rysunek 1: Zestaw stereowizyjny wykorzystywany na potrzeby projektu Dotychczasową funkcjonalność aplikacji, opisaną w [5], rozszerzono o szereg nowych możliwości. Gdy kamery stereowizyjne są podłączone do komputera aplikacja umożliwia przeprowadzenie kalibracji oraz rektyfikacji kamer. Po naciśnięciu przycisku Kalibracja, najpierw wyświetlony zostanie stosowny komunikat, a następnie co dwie sekundy pobierane, a następnie wizualizowane, będą obrazy z kamer. Jeżeli algorytm prawidłowo rozpoznał wierzchołki użytej do kalibracji szachownicy zostaną one wyrysowane na wyświetlanym obrazie 2. Po prawidłowym wczytaniu 30 par próbnych obrazów, proces zostanie zakończony i pojawi się komunikat informujący jaki błąd dopasowania udało się uzyskać. Parametry szachownicy użytkownik podaje w stosownych polach głównego okna aplikacji. Obliczone macierze, które wykorzystywane są przy tworzeniu mapy głębi zapisywane są do oddzielnych plików w formacie XML. Przycisk Obrazy z kamer umożliwia rozpoczęcie pobierania obrazów stereowizyjnych. W przypadku gdy istnieją pliki kalibracyjne, są one wczytywane i użyte do korekcji uzyskanych obrazów oraz przekształcenia disparity map w mapę głębi. W przeciwnym razie disparity map jest obliczane na podstawie niepoprawionych zdjęć i nie jest zamieniane na jednostki kalibracji. Gdy użytkownik przerwie czytanie obrazu z kamer przez zamknięcie okna pokazującego mapę, bądź naciśniećie klawisza Escape, program obliczy i zwizualizuje widzianą scenę w trójwymiarze (podobnie jak poprzednio można nią obracać przy użyciu myszki, etc.). Następnie istnieje możliwość wyświetlenia widzianej jako ostatniej disparity map oraz zapisania jej. Uzyskano generowanie oraz wizualizowanie obu map w czasie prawie rzeczywistym. 4 Interfejs graficzny aplikacji Interfejs graficzny istniejącej aplikacji został rozwinięty. Główne okno widoczne jest na ilustracji 3. Komunikacja z użytkownikiem zrealizowana jest za pośrednictwem okien 4 Rysunek 2: Przykładowe okno wyświetlane podczas kalibracji kamer Rysunek 3: Interfejs użytkownika po naciśnięciu przycisku Obrazy z kamer, gdy są pliki kalibracyjne dialogowych [4]. Podczas kalibracji dla obrazów z obu kamer wyświetlane są okna jak na zdjęciu 2, gdzie jeżeli algorytm rozpoznał wierzchołki szachownicy są one zaznaczane. Przy czytaniu obrazów z kamer, otwierają się okna z obrazami z lewego i prawego oka, mapą rozbieżności oraz z mapą głębi( o ile udało się wczytać plik z odpowiednią macierzą do reprojekcji). Przykładowe okna widoczne są na rycinie 5. Gdy czytanie z kamer zostanie przerwane, aplikacja wizualizuje scene w 3D. 5 Rysunek 4: Okna z disparity map oraz depth map podczas pracy programu Rysunek 5: Widok na aplikację po przerwaniu czytania z kamer 5 Diagram klas Przedstawiony na rysunku 6 diagram klas stworzony został w programie umbrello. Dodane zostały klasy kamery oraz kalibracja, pozostałe zostały zmodyfikowane zgodnie z potrzebami. 6 Rysunek 6: Diagram klas 6 Schemat przepływu sterowania Przedstawiony na rysunku 22 diagram przepływu sterowania stworzony został w programie umbrello. Uwzględnia on tylko część dodaną do aplikacji w ramach tego projektu, pozostała część nie uległa zmianie i jest opisana w [5]. 7 Rysunek 7: Diagram przepływu sterowania 7 Przykładowe efekty pracy aplikacji W tym rozdziale przedstawione zostaną zrzuty ekranu przeprowadzone podczas pracy aplikacji. Błąd kalibracji przy którym wykonywane były badania wynosi 1.70066. Parametry wprowadzone dla algorytmu Birchfield’a i Tomasi’ego dla każdego z testów widoczne są na zrzucie ekranu przedstawiającym rekonstrukcję trójwymiarowej sceny. 8 7.1 Robot Obraz z lewego ”oka” Obraz z prawego ”oka” Rysunek 8: Obrazy widziane przez kamery stereowizyjne Rysunek 9: Disparity map 9 Rysunek 10: Rekonstrukcja sceny w 3D Rysunek 11: Depth Map 10 7.2 Osoba Obraz z lewego ”oka” Obraz z prawego ”oka” Rysunek 12: Obrazy widziane przez kamery stereowizyjne Rysunek 13: Disparity map 11 Rysunek 14: Rekonstrukcja sceny w 3D Rysunek 15: Depth Map 12 7.3 Pluszowy królik Obraz z lewego ”oka” Obraz z prawego ”oka” Rysunek 16: Obrazy widziane przez kamery stereowizyjne Rysunek 17: Disparity map 13 Rysunek 18: Rekonstrukcja sceny w 3D Rysunek 19: Depth Map 14 7.4 Koleżanka Gosia Obraz z lewego ”oka” Obraz z prawego ”oka” Rysunek 20: Obrazy widziane przez kamery stereowizyjne Rysunek 21: Disparity map 15 Rysunek 22: Rekonstrukcja sceny w 3D Rysunek 23: Depth Map 16 7.5 Inne - testy przeprowadzone zanim dodano reprojekcje Osoba Rysunek 24: Disparity map Rysunek 25: Rekonstrukcja sceny w 3D 17 Córeczka sąsiadów Obraz z lewego ”oka” Obraz z prawego ”oka” Rysunek 26: Obrazy widziane przez kamery stereowizyjne (zrzut ekranu w różnych chwilach) Rysunek 27: Disparity map 18 Rysunek 28: Rekonstrukcja sceny w 3D Robot i królik Obraz z lewego ”oka” Obraz z prawego ”oka” Rysunek 29: Obrazy widziane przez kamery stereowizyjne 19 Rysunek 30: Disparity map Rysunek 31: Rekonstrukcja sceny w 3D 20 7.6 Bez kalibracji Osoba Rysunek 32: Disparity map osoby z wcześnieszych zdjęć dla nieskalibrowanych kamer. Parametry algorytmu: constant oclusion penalty 25, constant match reward 5, highly reliable region 12, moderately reliable region 15, slightly reliable region 25, max disparity 50 21 8 Podsumowanie Układ stereowizyjny zwłaszcza przy kalibracji jest bardzo wrażliwy na warunki oświetlenia. Obrazy z obu kamer pobierane są jeden za drugim lecz widocznie czas trwania operacji jest na tyle znaczący by wprowadzać zaburzenia procesu. Podczas pracy z aplikacją zauważono, że pewien problem dla algorytmu Birchfield’a i Tomasi’ego stanowią szybkozmienne obiekty takie jak np. materiały w kratę. Kłopoty sprawiają również krawędzie. Mimo to stereowizja daje wystarczająco dobre efekty gdy kalibracja kamer jest przeprowadzona z błędem nie większym niż 2.0. Podczas eksperymentów zauważono, że gdy błąd wykonania kalibracji jest zbyt duży, wyniki pracy kamer są gorsze niż w przypadku gdy kalibracja nie została wogóle przeprowadona. Patrząc na zrzut ekranu 12 zauważyć można na obrazach widzianych przez kamery refleks światła. W tym miejscu disparity map oraz depth map są znacznie zaburzone. Stąd wniosek, że w pewnych warunkach oświetlenia system stereowizyjny nie będzie się sprawdzał. Kamery mogą zostać miejscami ”oślepione”. By wyeliminować ten efekt należałoby usuwać z obrazów skazy, które nie wynikają z właściwości soczewek. W podrozdziale 7.6 zamieszczono mapę rozbieżności generowaną przez algorytm w przypadku gdy dla kamer nie przeprowadzono kalibracji, a co za tym idzie nie skorygowano na obrazach służących do jej wyznaczenia zakłóceń wprowadzanych przez soczewki. Jakość uzyskanej w ten sposób informacji pozostawia wiele do życzenia. Następnym krokiem w pracy z systemem stereowizyjnym, który warto zrealizować jest pobieranie współrzędnych koloru dla punktu z mapy głębi oraz analiza uzyskanych wyników. Określenie błędu z jakim rozpoznawana jest odległość do przedmiotów pozwoli ocenić możliwość wykorzystania stworzonego kodu w nawigacji robotów mobilnych. Ciekawym pomysłem wydaje się również implementacja algorytmu, rozpoznającego przeszkody na podstawie mapy głębi z wykorzystaniem pewnych technik progowania, segmentacji obszarów. W zastosowaniach praktycznych warto wiedzę uzyskaną na podstawie obrazów z kamer konfrontować z danymi innego pochodzenia (fuzja danych sensorycznych). Literatura [1] Open Source Computer Vision Library Reference Manual. Intel Corporation. [2] OpenCV Documentation. May 7, 2009. [3] G. B. . A. Kaehler. Learning OpenCV. O’Reilly, 2008. [4] D. Molkentin. The Book of Qt4. The Art of Building Qt Applications. William Pollock, 2006. [5] R. Tobola. http://sequoia.ict.pwr.wroc.pl/ kreczmer/wds/projekty/projekty.html, 2009. 22