Przetwarzanie obrazu stereo

advertisement
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
Download