PRACA DYPLOMOWA MAGISTERSKA · platformie Android OS. Uwzględniono różne algorytmy kalibracji...
Transcript of PRACA DYPLOMOWA MAGISTERSKA · platformie Android OS. Uwzględniono różne algorytmy kalibracji...
1
Rok akademicki 2014/2015
Politechnika Warszawska
Wydział Elektroniki i Technik Informacyjnych
Instytut Informatyki
PRACA DYPLOMOWA MAGISTERSKA
Piotr Guzik
Metody kalibracji kamer i wyznaczania ich pozycji
w przestrzeni 3W
Opiekun pracy
Dr inż. Piotr Garbat
Ocena: .....................................................
................................................................
Podpis Przewodniczącego
Komisji Egzaminu Dyplomowego
2
Kierunek: Informatyka
Specjalność: Inżynieria Systemów Informatycznych
Data urodzenia: 1991.08.12
Data rozpoczęcia studiów: 2014.02.24
Życiorys
Urodziłem się 12 VIII 1991 r. w Tychach. Uczęszczałem do IX Liceum Ogólnokształcącego
im. C. K. Norwida w Częstochowie, które ukończyłem w 2010 r. W październiku 2010 r.
podjąłem studia na Wydziale Elektroniki i Technik Informacyjnych Politechniki
Warszawskiej. W lipcu 2012 r. podjąłem pracę zawodową w firmie informatycznej Agitive
Sp. z.o.o. jako programista aplikacji mobilnych. W lipcu 2013 r. rozpocząłem pracę w firmie
Pentacomp Systemy Informatyczne S.A. jako programista aplikacji JEE oraz projektant
systemów baz danych. Pracę dyplomową inżynierską obroniłem z wynikiem bardzo dobrym w
lutym 2014 r., a następnie kontynuowałem naukę na macierzystym wydziale na studiach drugiego
stopnia w ramach tej samej specjalności. W październiku 2014 r. rozpocząłem pracę w firmie e-
point S.A. jako młodszy programista aplikacji JEE oraz trener metodyk zwinnych wytwarzania
oprogramowania, w szczególności Scrum. Moim największym hobby jest fotografia, którą staram
się łączyć z podróżowaniem po świecie i poznawaniem obcych kultur, architektury, kuchni,
historii oraz obyczajów.
.......................................................
Podpis studenta
EGZAMIN DYPLOMOWY
Złożył egzamin dyplomowy w dniu .................................................................................. 2015 r
z wynikiem ..................................................................................................................................
Ogólny wynik studiów: ...............................................................................................................
Dodatkowe wnioski i uwagi Komisji: .........................................................................................
......................................................................................................................................................
......................................................................................................................................................
3
STRESZCZENIE
Celem pracy jest przedstawienie metod kalibracji kamery oraz jej wpływu na wyznaczanie
położenia kamery w przestrzeni 3W. Praca zawiera opis procesu kalibracji kamery na
platformie Android OS. Uwzględniono różne algorytmy kalibracji oraz różne wzorce
kalibrujące. Praca zawiera opis algorytmów łączenia oraz odnajdywania punktów
charakterystycznych w obrazach w celu rozpoznawania obrazów wzorcowych (znaczników).
W pracy zbadano zachowanie poszczególnych algorytmów przy zmianie rozmiarów obrazu,
kalibracji kamery z wykorzystaniem różnych wzorców. Ze szczególną uwagą przyjrzano się
wpływowi kalibracji kamery na detekcję znaczników oraz prawidłowe znajdowanie położenia
kamery i generowania rzeczywistości rozszerzonej. Ponadto praca zawiera szczegółowy opis
implementacji poszczególnych rozwiązań na system operacyjny OS Android. Znaczną część
zajmuje analiza wyników testów w celu klasyfikacji algorytmów ze względu na takie kryteria
jak czas przetwarzania i dokładność przetwarzania. Integralną część pracy stanowi kod
źródłowy aplikacji mobilnej.
Słowa kluczowe: punkty charakterystyczne, kalibracja kamery, rzeczywistość rozszerzona,
rozpoznawanie obrazów, AR, OpenCV, OS Android, Gradle, Inteliji IDEA
Title: Camera calibration methods and position discovery in 3D space
This paper shows different camera calibration algorithms and methods. The main aim is to
reasearch and discover how camera calibration affects position discovery in 3D space.
Furthermore it is shown how calibration process affects algorithms based on feature points
which can be used for their detection and description. The paper presents details of
implementation working with OS Android. Special attention was paid to analysis of tests of
available camera calibration patterns together with different strategies that can be used to
achieve low reprojection errors and on the basis of their performance in certain circumstances
such as precision and speed. The crucial part of the paper is a source code of a mobile
application.
Keywords: Feature Points, Camera Calibration, Augmented Reality, Pattern Recognition, AR,
OpenCV, OS Android, Gradle, Inteliji IDEA
4
1. Spis treści
Wstęp ........................................................................................................................................ 6
1 Wstęp .................................................................................................................................. 7
1.1 Cele i zakres pracy ....................................................................................................... 7
1.2 Struktura i treści pracy ................................................................................................. 7
2 Proces kalibracji kamery ..................................................................................................... 8
2.1 Opis kalibracji kamery ................................................................................................. 8
2.1.1 Model małoobrazkowy i macierz wewnętrzna kamery ........................................ 8
2.1.2 Przekształcanie współrzędnych obiektu na współrzędne kamery ........................ 9
2.1.3 Kalibracja kamery .............................................................................................. 13
2.1.4 Wzorzec kalibracyjny ......................................................................................... 14
2.2 Wykorzystanie rzeczywistości rozszerzonej AR ....................................................... 15
2.2.1 Rzeczywistość Rozszerzona ............................................................................... 15
2.2.2 Aplikacje mobilne: ............................................................................................. 16
2.2.3 Inne przykłady wykorzystania AR ..................................................................... 19
2.2.4 Android OS ........................................................................................................ 22
3 Cechy obrazu i wybrane algorytmy bazujące na nich ...................................................... 23
3.1 Cechy obrazu ............................................................................................................. 23
3.2 Algorytmy bazujące na cechach obrazu .................................................................... 25
3.2.1 FAST .................................................................................................................. 25
3.2.2 Detektor Harrisa ................................................................................................. 27
3.2.3 Algorytm GFTT - Good Features To Track ....................................................... 30
3.2.4 ORB .................................................................................................................... 31
3.2.5 STAR .................................................................................................................. 32
3.3 Wybór algorytmów .................................................................................................... 32
4 Przegląd narzędzi .............................................................................................................. 33
4.1 Android SDK oraz proces tworzenia aplikacji .......................................................... 33
4.2 Gradle ........................................................................................................................ 33
4.3 OpenCV ..................................................................................................................... 33
4.3.1 Opis najważniejszych metod i algorytmów wykorzystanych z biblioteki
OpenCV. ........................................................................................................................... 34
5
4.4 Pozostałe wykorzystane biblioteki ............................................................................ 36
4.4.1 Apache Commons Math ..................................................................................... 36
4.4.2 Google Guava ..................................................................................................... 36
4.4.3 OpenCSV ........................................................................................................... 37
4.4.4 OpenGL .............................................................................................................. 37
4.4.5 Google Gson ....................................................................................................... 37
5 Implementacja oraz opis aplikacji .................................................................................... 37
5.1 Pakiety domenowe aplikacji ...................................................................................... 37
5.1.1 Pakiet calibration ................................................................................................ 38
5.1.2 Pakiet adapters .................................................................................................... 38
5.1.3 Pakiet filetrs ........................................................................................................ 38
5.1.4 Pakiet matcher .................................................................................................... 38
5.1.5 Pakiet główny ..................................................................................................... 38
5.2 Wzorce projektowe .................................................................................................... 39
5.2.1 Korzyści użycia wzorców .................................................................................. 39
5.2.2 Wzorzec strategii ................................................................................................ 40
5.2.3 Wzorzec budowniczego ..................................................................................... 41
5.2.4 Wzorzec adapter ................................................................................................. 42
5.3 Przekazywanie danych pomiędzy Activity, a w szczególności danych związanych z
kalibracją kamery oraz wykorzystanie tych danych przez poszczególne Activity .............. 42
5.4 Opis procesu kalibracji kamery ................................................................................. 43
5.5 Opis generacji rzeczywistości rozszerzonej .............................................................. 48
5.6 Badanie efektywności aglorytmów detekcji oraz wpływu kalibracji kamery na
algorytmy detekcji oraz generacje rzeczywistości rozszerzonej .......................................... 54
6 Metodyka badań ................................................................................................................ 61
6.1.1 Metody testowania ............................................................................................. 62
6.2 Wyniki testów ............................................................................................................ 63
6.2.1 Wyniki testowania procesu kalibracji ................................................................ 63
6.2.2 Wyniki testowania wpływu procesu kalibracji na detekcję, deskrypcję cech w
obrazie oraz łączenie podobnych scen .............................................................................. 77
6.2.3 Wyniki testowania wpływu procesu kalibracji na renderowanie rzeczywistości
rozszerzonej ...................................................................................................................... 99
7 Podsumowanie i wnioski końcowe ................................................................................. 102
7.1 Wnioski końcowe .................................................................................................... 102
6
7.2 Perspektywy rozwoju .............................................................................................. 102
7.3 Zastosowanie w praktyce ......................................................................................... 103
Bibliografia ........................................................................................................................... 104
7
1 Wstęp W niniejszej pracy ukazane są różne metody kalibracji kamery w przestrzeni 3W.
Obejmuje ona wyniki badań dotyczących wpływu różnych wzorców kalibracji na jakość
uzyskanych efektów uprzednio skalibrowanej kamery do detekcji punktów
charatkerystycznych. Istotny jest wpływ kalibracji kamery na wybrane algorytmy detekcji
cech obrazu. Przedstawiony zostanie również praktyczny wpływ niwelowania zniekształceń
kamery na generowanie rzeczywistości rozszerzonej i poprawę jakościową wyszukiwania
zadanego wzroca w przestrzenii 3W.
1.1 Cele i zakres pracy
Celem pracy jest zbadanie procedury kalibracji kamery dla urządzeń mobilnych z
wykorzystaniem wzorców kalibracyjnych ze względu na zastosowane wzorce kalibrazyjne i
metodykę obliczeń oraz określenie wpływu zakłóceń i niedokładności kamer wbudowanych
w urządzenia mobilne działające pod system operacyjnym Android.
W ramach pracy zbadano również, czy spośród znanych algorymtów detekcji cech obrazu są
takie, których efekt działania jest wyraźnie różny w zależności od przeprowadzeniu procesu
kalibracji. Sprawdzono, czy można wykorzystać kalibrację do poprawy wyznaczania pozycji
znaczników, służących do generowania AR. W ramach zakresu pracy powstała aplikacja na
OS Android, która umożliwia opisane powyżej operacje.
1.2 Struktura i treści pracy
Rozdział pierwszy stanowi wstęp pracy. Zawiera krótki jej opis, a także
przedstawienie postawionych celów.
W rozdziale drugim przedstawiono definicję oraz wykorzystane metody procesu
kalibracji kamery. Ponadto przedstawiono definicję rzeczywistości rozszerzonej oraz
praktyczne przykłady jej zastosowania. Przybliżono również platformę Android wraz z jej
historią.
Trzeci rozdział zawiera opis wybranych algorytmów detekcji cech w obrazie. Zawiera
również opis cech w obrazach. W trzecim rozdziale uzasadniono wybór algorytmów detekcji i
ekstrakcji cech w obrazach, które będą podlegały testowaniu.
Czwarty rozdział przedstawia przegląd narzędzi, które zostały wykorzystane w trakcie
tworzenia pracy. bibliotek programistycznych, które zostały wykorzystane w trakcie pisania
kodu aplikacji. Szczególnie przybliżone zostaną w nim arkana pracy z biblioteką OpenCV
oraz jej implementacją w języku Java.
Piąty rozdział przedstawia opis implementacji aplikacji. Przedstawiono w nim
szczegóły dotyczące krytycznych aspektów działania programu.
Szósty rozdział poświęcony propozycji metryk testowych oraz sposobów
przeprowadzania testów. Zawiera również wyniki wraz z analizą z przeprowadzonych testów.
8
Ostatni, siódmy rozdział, zawiera podsumowanie niniejszej pracy dyplomowej razem
z wnioskami. Zawiera on opis zgodności osiągniętych wyników z założeniami, a także
proponowane perspektywy rozwinięcia zagadnienia poruszanego w ramach projektu.
2 Proces kalibracji kamery Wraz ze wzrostem popularności urządzeń mobilnych, rośnie liczba wbudowanych
kamer umożliwiających przetwarzanie oraz analizę obrazu. Istotnym zagadnieniem jest
pozyskiwanie obrazu w wysokiej jakości i bez zbędnych i szkodliwych, dla jakości obrazu,
zniekształceń i przekłamań. Aby to umożliwić, przedstawimy jedno z możliwych rozwiązań
poprawy jakości przetwarzanych obrazów, czyli proces kalibracji kamery i korekcji
zniekształceń geometrycznych.
2.1 Opis kalibracji kamery
Przedstawimy odpowiedni model matematyczny, który umożliwia symulację
podstawowych zachowań kamery. Wprowadzimy i opiszemy wprowadzone przez kamery
zniekształcenia oraz wskażemy sposoby ich niwelowania.
2.1.1 Model małoobrazkowy i macierz wewnętrzna kamery
Najprostszym modelem kamery jest model kamery otworkowej (ang. pinhole camera).
Kluczowym pojęciem, niezbędnym do zrozumienia procesu kalibracji jest pojęcie macierzy
wewnętrznej kamery. Model małoobrazkowy przedstawiany jest jako urojony mur z
niewielką przysłoną na środku. Promienie słoneczne przechodzą jedynie przez przysłonę,
pośrodku muru. W tym modelu obiekty powstające na płaszczyźnie obrazu są zawsze ostre, a
ich wielkość zależy jedynie od długości ogniskowej kamery.
Rysunek 1: Bradski Gary, Kaebler: Adrian Learning OpenCV Computer Vision with the OpenCV Library
O'Leary 2008, Klasyczny model kamery małoobrazkowej
Z zależności geometrycznych wynika równanie:
9
Stąd :
Zamieniając miejscami płaszczyznę obrazu i model kamery z rysunku, możemy przekształcić
wzór do postaci:
Niestety, rzeczywisty model kamery cechuje się tym, że środek matrycy może nie znajdować
się dokładnie na osi optycznej. Z tego powodu do przedstawionego modelu trzeba dodać dwa
dodatkowe parametry: cx oraz cy. W rezultacie otrzymujemy prosty model, w którym obiekt
rzeczywisty o współrzednych (X, Y, Z) jest wyświetlany na dwuwymiarowym ekranie w
miejscu o współrzednych (xekranu, yekranu). Opisują to równania :
gdzie:
F - rzeczywista ogniskowa, sx, sy - wielkości elementów, na których powstaje obraz
Parametry fx, fy, cx i cy są parametrami wewnętrznymi kamery, natomiast macierz utworzona z
tych parametrów nazywa sie wewnętrzna macierzą kamery, i ma następującą postać :
2.1.2 Przekształcanie współrzędnych obiektu na współrzędne kamery
Wprowadzimy pojęcia macierzy rotacji oraz wektora przesunięcia. Położenie obiektu,
obserwowanego w scenie można określić względem systemu współrzędnych kamery z
wykorzystaniem wspomnianej macierzy rotacji oraz wektora przesunięcia. Dzięki temu
dostajemy matematyczny opis przekształcania współrzędnych w ukłądzie współrzednyc
związnych z obiektem na współrzędne kamery. Rysunek 2 obrazuje rotację kamery jako
mnożenie macierzy w dwóch wymiarach. Rotacja w przestrzeni trójwymiarowej może zostać
zdekomponowana jako rotacja w dziedzinie dwuwymiarowej wokół każdej osi. Jeżeli obiekt
w dziedzinie trójwymiarowej będzie „przekręcany” w dziedzinie dwuwymiarowej kolejno
dookoła osi x, y oraz z, odpowiednio o kąty rotacji ψ, φ, θ, rezultatem będzie macierz rotacji
R, na którą składają sie macierze (ψ), (φ), i (θ), gdzie:
(ψ) =
10
(φ) =
(θ) =
R = R(ψ) + R(φ) + R(θ)
Rysunek 2: Bradski Gary, Kaebler: Adrian Learning OpenCV Computer Vision with the OpenCV Library
O'Leary 2008, przekształcenie współrzędnych obiektu w przestrzeni na współrzędne kamery. Punkt P na
obiekcie jest widziany jako punkt p na płaszczyźnie obrazu. Wzajemne relacje miedzy punktami
(układami współrzędnych) opisuje macierz rotacji oraz wektor przesunięcia.
Rysunek 3: Bradski Gary, Kaebler: Learning OpenCV Computer Vision with the OpenCV Library O'Leary
2008, Rotacja punktu o kat θ jest jednoznaczna z rotacją układu współrzędnych o ten sam kąt. Widać
również, jak zmieniają się współrzędne punktu.
11
Matematycznym opisem odwzorowania przesunięcia z jednego układu współrzędnych
do drugiego jest wektor przesunięcia. Inaczej mówiąc, jest to wektor realizujący przesunięcie
między środkami dwóch różnych układów współrzędnych. Mając dane macierz rotacji oraz
wektor przesunięcia, można wyprowadzić równanie na położenie rzeczywistego punktu
(punktu obiektu ze świata trójwymiarowego) odwzorowane we współrzędnych kamery. Jeśli
przyjmie się punkt Po jako punkt rzeczywisty oraz punkt Pc jako ten sam punkt we
współrzędnych kamery, relacja miedzy tymi punktami wygląda następująco:
Pc = R(Po - T)
gdzie R to macierz rotacji, a T to wektor przesunięcia
Powyższe równanie stanowi razem z równaniami dotyczącymi korekcji parametrów
macierzy wewnętrznej kamery tworzy układ równań, którego rozwiązywanie jest nazywane
procesem kalibracji kamery. Warto zauważyć, że parametry wewnętrzne kamery oraz
zewnętrzne wiąże relacja, dzięki której można wyznaczyć transformację perspektywiczną,
która przeprowadza punkty z przestrzenii 3D w przestrzeń 2D. Wyraża się ona następująco :
Mając daną macierz wewnętrzną kamery (zawierającą parametry wewnętrzne) :
i macierz zewnętrzną kamery (zawierającą parametry zewnętrzne) :
przechodząc do jednorodnych współrzędnych można zapisać relację łączącą macierze
wewnętrzną i zewnętrzną jako :
gdzie M jest nazywana macierzą projekcji. Macierz projekcji definiuje się po to, aby
uzyskać współrzędne w pikselach. Korzystając ze współrzędnych jednorodnych można
wyznaczyć współrzędne w pikselach dzięki następującemu równaniu :
12
Zatem, dzięki macierzy projekcji M oraz relacji wiążącej macierz wewnętrzną i
zewnętrzną, można wyznaczyć odwzorowanie punktów z przestrzenii 3D w przestrzeń 2D.
Ściśle powiązanym zagadnieniem dotyczącym kalibracji kamery są zniekształcenia
oraz ich korekcja, która jest skutkiem poprawnie przeprowadzonego procesu kalibracji.
Zniekształcenia toru optycznego zazwyczaj modeluje się zwykle jako radialne, styczne
(tangensowe) oraz liniowe. Zniekształcenia radialne powodują przesunięcie współrzędnych na
obrazie w sposób promienisty i mają decydujący wpływ na dokładność pomiarów. Można je
aproksymować za pomocą równania (gdzie ( ) jest układem kamery) :
gdzie , ... są współczynnikami zniekształcenia radialnego
Zwykle stosuje się od jednego do trzech współczynników, co wystarcza do kompensacji
zniekształceń tego rodzaju. Zniekształcenia styczne, które są prostopadłe do radialnych,
wynikają z faktu, iż środki krzywizny soczewek obiektywu nie zawsze są dokładnie
współliniowe. Modeluje się je za pomocą następującego wyrażenia :
gdzie i są współczynnikami zniekształceń stycznych. Zniekształcenia liniowe
mogą być opisane za pomocą pojedynczego współczynnika krzywizny. Powstają gdy osie
układu obrazowego nie są idealnie prostopadłe do siebie. Na wartość błędu wprowadzanego
przez zniekształcenia liniowe ma wpływ precyzja wykonania przetwornika zastosowanego w
kamerze.
Uwzględniając w modelu kamery zniekształcenia, można podać następujące
parametry wewnętrzne do procedury kalibracji:
– dwuelementowy wektor długości ogniskowej , którego elementy są liniową zależnością
ogniskowej kamery i współczynników wynikających z przeliczenia rozmiaru pikseli w obu
osiach z jednostek metrycznych do obrazowych, wyrażony w pikselach
– dwuelementowy wektor , zawierający rzeczywiste współrzędne położenia środka
rzutowania punktów na obrazie, tzw. punktu głównego
– współczynnik krzywizny zniekształceń liniowych, który określa kąt skręcenia pomiędzy
osiami pikseli w kierunku poziomym i pionowym na matrycy
– pięcioelementowy wektor zniekształceń , zawierający współczynniki zniekształceń
radialnych i stycznych, gdzie
Dla wprowadzonych parametrów wewnętrznych oraz znormalizowanych
współrzędnych obrazowych punktu rzeczywiste współrzędne punktu z uwzględnieniem
równań określających zniekształcenia radialne i styczne można zapisać jako (gdzie ( ) to
znormalizowane współrzędne w układzie obrazowym) :
=
13
gdzie jest wektorem zniekształceń stycznych postaci:
Uwzględniając wektor ogniskowej kamery, faktyczne położenie środka obrazu i
współczynnik krzywizny, współrzędne punktu w układzie obrazowym można przedstawić
jako :
Powyższe zależności przedstawia się często w postaci równania macierzowego:
=
gdzie jest macierzą wewnętrzną kamery. Zatem elementy macierzy oraz wektor
zniekształceń można uzyskać wraz z parametrami zewnętrznymi kamery w wyniku
procesu kalibracji.
2.1.3 Kalibracja kamery
Operacja odnajdywania parametrów macierzy wewnętrznej kamery, lub inaczej,
parametrów wewnętrznych kamery oraz parametrow określających zniekształcenia powstałe
w trakcie rejestracji obrazu nazywana jest kalibracją kamery. Jednym z zastosowań procesu
kalibracji jest niwelowanie zniekształceń obrazu. Aby skutecznie przeprowadzić kalibrację
kamery potrzebny jest obiekt o znanych kształtach i rozmiarach, zwany wzorcem (lub
obiektem) kalibrującym. Znany wzorzec jest wielokrotnie fotografowany, z możliwie różnych
kątów oraz pozycji kamery. Dzięki temu, różnorodne obrazy wzorca biorą dalszy udział w
procesie kalibracji.
14
Rysunek 4: Przykład wielu ujęc wzorca w celu kalibracji kamery
2.1.4 Wzorzec kalibracyjny
Obiekt, o znanych wymiarach, który bierze udział w kalibracji kamery może posiadać
dowolny, ale znany kształt. Innymi słowy, cechy obrazu pochodzące ze wzorca powinny być
szybkie do znalezienia, a odległości pomiędzy nimi znane. Najprostszym i często
wykorzystywanym obiektem w procesie kalibracji jest prostokątna szachownica. Punktami,
które biorą udział w procesie są wewnętrzne narożniki pól szachownicy. Odległości miedzy
nimi są znane, gdyż wiadomo, ile pól ma szachownica, a więc wiadomo ile jest narożników
iktóre wezmą udział w kalibracji. Z praktycznego punktu widzenia zastosowania szachownicy
umożliwia podanie położenia punktów narożników bezpośrednio do algorytmu
przeprowadzającego kalibrację, co ułatwia proces testowania jakości rozwiązania.
Zakładając, że wzorcem kalibrującym jest szachownica, należy odpowiedzieć na
pytanie, jak wiele narożników (różnych ujęć szachownicy) jest potrzebne do przeprowadzenia
kalibracji i uzyskania wysokiej jakości wyników. Jak wiadomo, mamy cztery parametry
wewnętrzne kamery. Dodatkowo chcemy wyznaczyć pięć parametrów zniekształceń oraz
sześć parametrów tworzących macierz rotacji i wektor przesunięcie miedzy układami
współrzędnych fotografowanego obiektu i kamery.
Postępując zgodnie z procedurą zawartą w Bradski Gary, Kaebler: Adrian Learning
OpenCV Computer Vision with the OpenCV Library O'Leary 2008, można stwierdzić, iż minimum
ujęć, stanowią 2 zdjęcia szachownicy o rozmiarach 3x3. Praktyka pokazuje jednak, że aby
uzyskać wysokiej jakości wyniki należy użyć co najmniej pięciu ujęć szachownicy o
wymiarach 7x8. Pozycja na każdym ujęciu powinna być inna, gdyż tylko w takim przypadku
kalibracja zostanie przeprowadzona poprawnie.
15
Rysunek 5: Wzorzec kalibrujący, jako prostokątna szachownica
2.2 Wykorzystanie rzeczywistości rozszerzonej AR
W tym rozdziale przedstawimy pojęcie rzeczywistości rozszerzonej oraz jej
wykorzystanie w otaczającym nas świecie. Złożonym problemem związanym z AR jest
poprawne osadzanie świata wirtualnego (rzeczywistości rozszerzonej) w świecie
rzeczywistym, tak aby użytkownik mógł "zanurzyć" się w świecie wirtualnym. Dzięki
zastosowaniu kalibracji kamery oraz wynikowemu zmniejszeniu się zniekształceń można
minimalizować problemy związane z przetwarzaniem obrazu takie jak : gubienie
rozpoznawanego znacznika pomimo jego widoczności w oknie kamery, utrata renderowania
AR podczas gwałtownych zmian w natężeniu oświetlenia, czy też minimalizacja odległości
na ekranie użytkownika wyrenderowanej AR od środka rozpoznawanego znacznika.
Analiza sklepu Google Play, który gromadzi aplikacje stworzone na system Android,
dowodzi, że coraz większa liczba aplikacji mobilnych posiada funkcjonalności wspierające
AR.
2.2.1 Rzeczywistość Rozszerzona
Rzeczywistość Rozszerzona (ang. Augmented Reality, AR), jako termin została
wprowadzona przez Ronalda Azuma, jako rozwinięcie terminu rzeczywistości wirtualnej w
2001 roku. AR jest terminem określającym sposoby łączenia scen rzeczywistych z
wirtualnymi bytami generowanymi przez komputer. Co ważne, połączenie elementów
wirtualnych i rzeczywistych zachodzi w czasie rzeczywistym. Ogólnie definicja
Rzeczywistości Rozszerzonej uwypukla następujące cechy:
łączenie scen wirtualnych i rzeczywistych,
interaktywność w czasie rzeczywistym,
poprawne odwzorowywanie wzajemne położenie obiektów.
16
Przedstawiona definicja nie ogranicza AR jedynie do łączenia obrazów, ponieważ
coraz częściej spotyka się systemy oddziałujące na inne zmysły - słuch czy węch. W
przypadku wykorzystania Rzeczywistości Rozszerzonej percepcja użytkownika zostaje
wzbogacona o wirtualne informacje, które pomagają w wykonywaniu rzeczywistych zadań.
Podstawą działania systemów AR jest odszukanie oraz ciągłe śledzenie wybranych
punktów odniesienia na scenie rzeczywistej w celu odpowiedniego naniesienia na nią
obiektów wirtualnych. Większość rozwiązań opiera się na detekcji i śledzeniu kształtów,
krawędzi i innych cech obrazu. Istnieje również zastosowanie nawigacyjne, detekcja struktur
na obrazie może zostać wzbogacona o dane o położeniu pochodzące z odbiornika GPS lub
kompasu.
2.2.2 Aplikacje mobilne
W przypadku aplikacji moblinych i zastosowaniach AR dominują programy
nawigacyjne oraz gry. Zaprezentujemy teraz przykładowe aplikacje dostępne obecnie na
telefonach komórkowych.
Aplikacja Intiaro jest przykładem zastosowania AR w aplikacji mobilnej. Dzięki tej
aplikacji możemy wirtualnie urządzać swoje mieszkanie z wykorzystaniem dostępnych
modeli mebli dostarczanych przez producentów. Dzięki rzeczywistości rozszerzonej możliwe
jest również mierzenie pokoju w celu sprawdzenia, czy mebel o danych wymiarach zmieści
się w zadanej przestrzenii. Aby wygenerować w aplikacji modele 3D mebli, należy
wydrukować czarno - biały znacznik i nakierować kamerę urządzenia na niego.
Rysunek 6: Przykład działania aplikacji Intiaro
17
Rysunek 7: Przykład wygenerowanej AR w aplikacji Intiaro
Innym przykładem aplikacji wykorzystującej AR jest Sky Map. Jest to aplikacja
napisana przez firmę Google. Po skierowaniu urządzenia na nocne niebo, łączy gwiazd w
konstelacje, wskazuje mgławice oraz większe skupiska gwiazd. Co więcej, natychmiast
kieruje nas do widocznych plante. Dodatkowo, można śledzić ruch gwiazd, ich odległość.
Umożliwia dzielenie się swoimi wrażeniami oraz odkryciami poprzez media
społecznościowe. W przypadku Sky Map nie potrzeba drukowanego znacznika. Naturalnym
wzorcem jest gwiaździste niebo, które ze względu na wysoki kontrast gwiazd względem tła
jest idealnym obiektem podlegającym śledzeniu.
Rysunek 8: Przykład wygenerowanych planet i zbiorów giwazd w aplikacji Sky Map
18
Rysunek 9: Przykład wygenerowanych konstelacji gwiazd w aplikacji Sky Map
Ze względu na malejące ceny urządzeń mobilnych oraz doświadczenie autora w pracy
z systemem operacyjnym OS Android pokażemy informacyjno-rozrywkowe zastosowanie
systemu AR.
19
2.2.3 Inne przykłady wykorzystania AR
Rzeczywistość rozszerzona jest również wykorzystywana w trakcie transmisji
sportowych, np. do wyświetlania istotnych informacji (np. linii spalonego) wirtualnie
nałożonych na obraz boiska nadawany na żywo. AR wykorzystuje się również w celu
prezentowania reklam 3D podczas transmisji. Mogą one być różne i spersonalizowane dla
każdej ze stacji telewizyjnych nadających dany program, a tym samym skierowane do
widzów w konkretnym regionie nadawania.
Rysunek 10: Przykład generacji AR w transmisji meczu piłkarskiego w telewizji
Coraz częstszym zastosowaniem systemów AR jest leczenie różnych lęków oraz
zaburzeń. Przykładami mogą być leczenie klaustrofobii poprzez przeniesienie użytkownika w
świecie wirtualnym do mniejszego pokoju, kiedy wie on, że w rzeczywistości znajduje się w
komfortowym pod względem wielkości pomieszczeniu. Innym przykładem może być
leczenie arachnofobii, poprzez wirtualne obcowanie z wygenerowanymi pająkami. Coraz
częściej sztaby wojsk lądowych decydują się na leczenie choroby stresu pourazowego u
powracających z misji żołnierzy, właśnie wykorzystując systemy AR, które przenoszą
rannych ponownie w miejsce kojrzące się z traumą.
20
Rysunek 11: Przykład generacji AR w celu leczenia arachnofobii
Rysunek 12: Przykład generacji AR w celu leczenia stresu pourazowego u komandosa
Google obecnie promuje Google Glass - produkt, który może zrewolucjonizować i
spopularyzować rynek AR. Jest to następny modelowy przykład dynamiki i rozwojowości
badanej tematyki. Analogicznym rozwiązaniem, obecnie dostępnym jedynie w celach
developerskich jest produkt, kupiony przez Facebooka, okulary Oculus Rift. Dzięki Oculus
Rift można pisać gry komputerowe, wykorzystujące AR. Pomysł polega na tym, że gracz
zakłada na oczy Oculus Rift i na ekranie monitora widzi generowane obiekty 3D, które
zapewniają dodatkowe doznania. Niestety, istotnym problemem są obecnie względy
zdrowotne. Po około 10 - 15 minutach korzystania z Oculus Rift wiele osób skarży się na
zawroty głowy oraz uczucie nudności. Aplikacja demo, ktora jest dostępna w sieci, umożliwia
wirtualną przejażdżkę Roller Costerem, co pokazuje następne zastosowanie w celach
symulacyjno - rozrywkowych.
21
Rysunek 13: Google glass
Rysunek 14: Oculus Rift - zestaw do celów developerskich
22
Rysunek 15: Oculus Rift - zastosowanie dla użytko masowego, interaktywna gra
2.2.4 Android OS
System Android powstał w firmie Android Inc, która w 2005 roku została kupiona
przez Google. Od tej pory firma Google dba o standardy i wydaje kolejne wersje systemu.
Android jest systemem operacyjnym z rodziny Linux i jest przeznaczony dla urządzeń
mobilnych takich jak telefony komórkowe, smartfony, tablety. W chwili pisania pracy jest to
najbardziej popularny system mobilny na świecie. Android nie jest typową dystrybucją
Linuksa, ale jest oparty na jego jądrze. Android zrzesza bardzo liczną grupę developerów
tworzących aplikacje. W sierpniu 2014 było dla tego systemu dostępnych ponad 1,3 miliona
aplikacji w oficjalnym sklepie Google Play (wcześniej Android Market). Autor zdecydował
się napisać aplikację działającą na urządzeniach z tym systemem operacyjnym ponieważ sam
posiada urządzenia działające pod tym systemem oraz językiem programowania na platformę
Android jest Java.
2.2.4.1 Wersje Androida oraz ich wsparcie w aplikacji
System Android posiada wiele wersji. Każda kolejna wprowadza pewne innowację i
ułatwia korzystanie ze sprzętu działającego na danym systemie operacyjnym. W marcu 2015
najnowszą wersją systemu była wersja 5.1 Lollipop. Autor postanowił wspierać możliwie jak
najwięcej urządzeń działających na systemie Android i zdecydował się napisać aplikację,
która działa na każdym systemie Android w wersji 4.0 lub nowszej. Warto wspomnieć, że
przełomowe wersje systemu to wersja 3.0 oraz 4.0. Wersja 3.0 została wprowadzona na
tablety i umożliwiła tworzenie aplikacji z wykorzystaniem fragmentów (możliwość
łatwiejszego tworzenia współdzielonych szablonów widoków w aplikacji). Największe
zmiany wprowadziła wersja 4.0, dzięki której tworzenie aplikacji stało się jeszcze prostsze, a
dodatkowo zysk wydajnościowy aplikacji był znaczący. Większość nowoczesnych bibliotek
wspiera systemy w wersji 4.0 i wyższej. Możliwe jest wówczas korzystanie z gotowych
komponentów takich jak galeria obrazów, przetwarzanie asynchroniczne przy żądaniach
HTTP, czy też wykorzystanie wzorca wstrzykiwania zależności. Jest to bardzo ważne
23
ponieważ oprogramowanie powinno spełniać akronim SOLID. W szczególności klasy nie
powinny być ściśle ze sobą powiązane a programowanie powinno polegać na określaniu
kontraktu metod poprzez interfejsy. Klasy nie powinny zależeć od implementacji a od
abstrakcji. Umożliwia to efektywne testowanie i ułatwia programowanie. Udział procentowy
systemów operacyjnych zmienia się w czasie. Poniżej wykres ze stanem na marzec 2015
roku:
Rysunek 16 procentowy udział wersji systemu Android - stan na marzec 2015
Jak widać udział urządzeń wspierających system 4.0 i wyższy jest znaczący.
3 Cechy obrazu i wybrane algorytmy bazujące na nich Rozdział ten ma na celu przybliżenie pojęcia cech obrazu oraz przykładowych
algorytmów operujących na nich. Dodatkowo przedstawiamy argumentację, dlaczego w
dalszej części pracy zdecydowaliśmy się na konkretne algorytmy, ignorując pozostałe.
3.1 Cechy obrazu
Detekcja, ekstrakcja oraz łączenie cech obrazu to kluczowym zagadnieniem tej pracy.
Aby lepiej zrozumieć w jaki sposób renderowania jest AR, należy poznać sposób opisu cech
w obrazie. Wiedza ta jest użyteczna, ponieważ kluczowym zagadnieniem dla poprawnego
prezentowania rzeczywistości rozszerzonej jest poprawne rozpoznawanie znacznika oraz
wyznaczenie pozy kamery w przestrzeni 3W. Aby tego dokonać, należy rozumieć, w jaki
sposób działają algorytmy, które odnajdują w scenie zadany znacznik. Algorytmy
wykorzystywane w tym celu przetwarzają cechy obrazu i na podstawie najlepiej ocenionych
jakościowo cech podejmują decyzję, czy znacznik występuje w scenie oraz jakie jest jego
położenie w przestrzeni 3W. Dlatego znajomość cech obrazu wraz z ich opisem jest
kluczowa.
Cechy (ang. features) rozumiane są jako specyficzne konfiguracje pikseli układające
się w określone struktury:
krawędzie,
linie,
zakończenia linii,
rogi,
24
skupiska (blobs) – koła lub kule,
tekstury,
grzbiety (ridges) i szkielety.
Rysunek 17: Przykład wykrytych na twarzy ludzkiej cech w obrazie
Jedną z metod detekcji powyższych struktur w obrazie jest filtracja. Dzięki zastosowaniu
filtru uzyskujemy w odpowiedzi liczby rzeczywiste. Rozróżniamy dwa typy filtrów : liniowe
bądź nieliniowe. Skuteczny filtr powinien dawać:
wysokie odpowiedzi dla pikseli należących do szukanych struktur,
niskie odpowiedzi dla pikseli nienależących do szukanych struktur (choć mogących
należeć do innych struktur).
Jedną z głównych zalet zastosowania cech w opisie obiektów jest możliwość
oszczędności rozmiaru pamięci potrzebnego do przetwarzania obiektu. Cechy ułatwiają
przeprowadzenie operacji odnajdywania odpowiadających sobie elementów w sekwencjach
obrazów (kolejnych klatkach). Aby skutecznie operować na punktach charakterystycznych
niezbędne są pewne ich własności:
mała czułość na zmiany orientacji i przesunięcia obiektów,
odporność na szum i zmiany wartości pikseli obiektów w czasie wywołane nagłą
zmianą oświetlenia pola obserwacji,
niewielka złożoność obliczeniowa,
łatwość przeprowadzania operacji dopasowania w algorytmach śledzenia.
Cechy obrazu, typowo, wyznacza się, śledząc zmiany wartości pikseli lub wyliczając
statystyki wartości w pewnym otoczeniu danego piksela. Większość algorytmów detekcji
opiera się na progowaniu. Przekroczenie zadanego progu detekcji wskazuje na występowanie
danej cechy. Przykładami klasycznych detektorów „narożników” są deketory Harrisa oraz
FAST. Zostaną one przybliżone w dalszej części pracy, wraz z innymi wybranymi
algorytmami.
Istotnym faktem jest, że dzięki algorytmom, które ograniczeniają się do przetwarzania
punktów charakterystycznych możliwe jest znaczące zwiększenie szybkości porównywania
obrazów. Algorytm analizujący wszystkie piksele i zestawiający każdy z nich między
obrazami jest niewydajny. Ponadto nie daje pewności, że rozpatrywane piksele są znaczące i
niezmienne w czasie. Dlatego, analizuje się skupiska pikeli cechujące się, o ile to możliwe,
25
niezmiennością w zależności od rotacji, przesunięcia i skali. W literaturze są one nazywane
punktami kluczowymi lub charakterystycznymi.
Typowym i sprawdzonym podejściem do przetwarzania obrazów jest trójfazowy algorytm
polegający na:
detekcji cech obrazu,
wydobyciu opisu (deskryptorów), cech,
znalezieniu odpowiadających sobie cech dwóch obrazów.
Rysunek 18: Przykład łączenia w pary odpowiadających sobie cech w dwóch obrazach
Jednym z najpowszechniejszych zastosowań cech obrazu w aplikacjach są rozwiązania
generujące rzeczywistość rozszerzoną (AR).
3.2 Algorytmy bazujące na cechach obrazu
Metody operujące na cechach, w pierwszej fazie, wyszukują punkty szczególne w
danych obrazach. Następnie szukają odpowiedających sobie cech w dwóch obrazach i na
podstawie ich położenia wyliczają wektor przemieszczenia między nimi. Efektywność
algorytmu w znacznym stopniu zależy od jakości wyszukanych punktów szczególnych i
jakości ich opisu. Idealny algorytm powinien wykrywać tylko takie punkty, które są
niezależne od zmian w oświetleniu, położeniu i orientacji obrazu, a także w pewnym stopniu
od zmian punktu widzenia czy skali (czyli odporne i niezmiennicze).
3.2.1 FAST
Algorytm ten został wybrany do analizy z powodu dużej szybkości działania oraz
znacznej niezmienniczości wyszukanych cech względem obrotu, przesunięcia oraz
skalowania. Operuje na obrazach w skali szarości.
3.2.1.1 Podstawy algorytmu
Kryterium segmentacji bazuje na okręgu stworzonym przez 16 pikseli (typowo, jest to
domyślna wartość) wokół badanego punktu p (Rosten & Drummond, Machine learning for
high-speed corner detection). Punkt p zostanie uznany za punkt, wtedy i tylko wtedy, gdy w
okręgu istnieje co najmniej n sąsiadujących ze sobą pikseli, z których wszystkie mają jasność
większą niż badany punkt powiększony o ustaloną wartość t lub mniejszą niż , jak
zaprezentowano na Rysunku 19. Prezentowany test segmentowy wykonany jest dla .
Dla tej wartości, odrzucanie punktów, niebędących punktami kluczowymi jest łatwe, gdyż
wystarczy sprawdzić 4 piksele: pierwszy, piąty, dziewiąty i trzynasty – odpowiadające
kierunkom zegarka. Jeśli ta część testu wypadnie pomyślnie, należy sprawdzić wszystkie
pozostałe punkty.
26
Rysunek 19: Test segmentowy wykrywający narożniki w obrazie dla n = 12. Źródło: (Rosten & Drummond, Machine
learning for high-speed corner detection)
3.2.1.2 Metody niwelujące oddziałowywanie punktów niemaksymalnych
Wadą testu segmentowowego jest fakt, że nie oblicza wartości funkcji odpowiedzi dla
punktów szczególnych. Stad wprost wynika, że wytłumienie oddziaływania punktów
niebędących maksymalnymi nie jest możliwe bezpośrednio po ich wykryciu. Z tego powodu
należy wyznaczyć pewną funkcję V przypisująca wartość odpowiedzi każdemu punktowi. Na
jej podstawie można usunąć punkty sąsiadujące z punktami o wyższej wartości V, dokonując
tym samym wytłumienia punktów niemaksymalnych. Istnieje kilka intuicyjnych definicji
opisujących funkcję V (Rosten & Drummond, Machine learning for high-speed corner
detection):
1. Maksymalna wartość n, dla której p jest wciąż punktem szczególnym.
2. Maksymalna wartość t, dla której p jest wciąż punktem szczególnym.
3. Suma różnic bezwzględnych pomiędzy wartościami pikseli sąsiadujących leżących na
okręgu wokół punktu p oraz badanego punktu p.
Ponieważ definicje 1. i 2. zwracają wartości dyskretne, wiele punktów szczególnych
posiadałoby te same wartości. W związku z tym w celu przyspieszenia obliczeń używana jest
zmodyfikowana definicja trzecia, o następującej reprezentacji matematycznej:
gdzie
27
3.2.2 Detektor Harrisa
Detektor narożników Harrisa jest jednym z najstarszych algorytmów przetwarzania
cech w obrazach. Został opracowany w 1988 roku i do dziś jest wykorzystywany.
Charakteryzuje go niezmienniczość względem przesunięć 2D oraz obrotów, niewielkich
zmian nasycenia światła oraz kąta widzenia (Sonka, Hlavac, & Boyle, 2008). Ponadto,
ważnym aspektem jest niska złożoność obliczeniowa. Jest on wrażliwy na znaczne zmiany
skali obiektów oraz duże zmiany kontrastu. Podobnie jak algortytm FAST, przetwarza obrazy
w skali szarości.
3.2.2.1 Podstawy algorytmu
Głównym założeniem detektora Harrisa jest wykorzystanie faktu, że jasności pikseli w
otoczeniu narożnika będą silnie zmienne w wielu kierunkach. Algorytm jest rozwiniętą i
zmodyfikowaną wersją algorytmu Moravca, który jest najprostszym dostępnym detektorem
narożników. Detektor Moravca wykrywał punkty o największym kontraście, które
klasyfikowane były jako narożniki lub ostre krawędzie. Obliczenia polegały na przesuwaniu
lokalnej, prostokątnej maski w różnych kierunkach oraz obliczaniu średniej zmiany jasności.
Algorytm rozróżnia trzy przypadki:
1. Jeśli badane regiony mają niezmienną jasność, przesunięcie okna nie spowoduje
zmiany tej wartości.
2. Jeśli okno leży na krawędzi, przesunięcie go równolegle do krawędzi nie spowoduje
znacznej zmiany wartości, natomiast przesunięcie prostopadłe do krawędzi wywoła
dużą i zauważalną zmianę.
3. Jeśli okno leży na narożniku, wówczas dowolne przesunięcie okna spowoduje dużą
zmianę wartości.
Zmiana wartości okna E związana z przesunięciem o wektor (x,y) wyraża się następujacym
wzorem:
gdzie w opisuje okno: Przesunięcia (x,y) pochodzą ze zbioru .
Wprowadzamy ustalenie, że jedność występuje w obrębie prostokątnego regionu, zero poza
nim, gdzie obraz wejściowy opisany symbolem I. Detektor Moravca poszukuje lokalnego
maksimum dla min{E} powyżej pewnej wartości progowej zwaną wartością odcięcia.
Detektor Moravca, ze względu na swoją prostotę, nie rozwiązaywał pewnych bardziej
złożonych problemów. Jego rozwinięcie oraz poprawa najbardziej znaczących uchybień
pozwoliła skonstruować detektor Harrisa. Problemy te wraz z rozwiązaniami
zaproponowanymi przez algorytm Harrisa, opisano poniżej (Harris & Stephens, 1988).
1. Odpowiedź detektora Moravca nie jest izotropowa, ponieważ rozważane są tylko
przesunięcia co 45°. Rozwiązaniem tego problemu jest określenie wszystkich
28
pośrednich przesunięć, dokonując analitycznego rozwinięcia wokół punktu
startowego:
gdzie gradienty przybliżane są jako:
A zatem, dla niewielkich przesunięć, E można zostać jako:
gdzie
2. Odpowiedź detektora Moravca nie jest pozbawiona szumów i zakłóceń. Przyczyną
jest kształt okna, czyli prostokąt. Aby rozwiązać ten problem – należy użyć bardziej
gładkiego, kolistego kształtu okna, na przykład gaussowskiego:
3. Detektor zbyt często zwraca wysokie odpowiedzi rozważając krawędzie, ponieważ
tylko minimum funkcji E jest brane jest pod uwagę. Rozwiązanie – należy
sformułować nową funkcję rozpoznawania narożników korzystającą z wartości
odchylenia E w różnych kierunkach. Funkcja zmiany wartości, E, związana z
niewielkim przesunięciem (x,y) okna może zostać zwięźle zapisana w formie:
gdzie macierz M jest symetryczną macierzą 2x2 postaci:
Funkcja E jest podobna do lokalnej funkcji autokorelacji, z macierzą M opisującą jej
kształt w badanych punktach. Jeżeli przez α, β oznaczymy wartości własnei macierzy M, to α
i β będą proporcjonalne do krzywizn funkcji autokorelacji, tworząc niezmienniczy względem
obrotu opis macierzy M. Analogicznie jak w przy detektorze Moravca, musimy rozważyć trzy
przypadki
29
A. Jeśli obie krzywizny są małe, co
oznacza, że funkcja autokorelacji jest
płaska, wówczas badany region obrazu
jest podobnej jasności. Oznacza to, że
przesunięcie okna w każdym kierunku
nie zmienia w znaczący sposób
wartości funkcji E.
B. Jeśli jedna z krzywizn jest duża, a
druga niewielka, nadając funkcji
autokorelacji kształt grzbietu, tylko
przesunięcie okna w kierunku
prostopadłym do grzbietu wprowadza
zmiany w E. Oznacza to, że mamy do
czynienia z krawędzią, gdyż
przesunięcie wzdłuż grzbietu nie
zmienia znacząco E.
C. Jeśli obydwie krzywizny są duże,
funkcja autokorelacji ma kształt ostrego
szczytu. Przesunięcie okna w dowolnym
kierunku spowoduje wzrost wartości E. Badany punkt jest narożnikiem.
Na rysunku 20 mamy wykres przestrzeni (α, β). Teoretycznie, krawędź miałaby
wysoką wartość α oraz zerową β, jednak w rzeczywistości β przyjmie wartość większą od
zera, ale niewielką w porównaniu do α. Dzieje się tak ze względu na szumy, pikselizację oraz
kwantyzację skali jasności. Narożnik będzie opisany wysokimi wartościami α oraz β, o
porównywalnej wartości, natomiast region płaski, o niewielkim kontraście da niewielkie
wartości α i β. Jeżeli kontrastu w obrazie o wzrośnie o wartość p, to spowoduje wzrost α oraz
β proporcjonalnie o . Zatem jeśli (α,β) należy do części wykresu opisującej krawędzie,
powinno również do niej należeć, dla dodatnich wartości p. Analogicznie
odpowiadać będą narożniki. Z tych powodów przestrzeń (α,β) podzielona jest jak na rysunku
20.
3.2.2.2 Funkcja odpowiedzi narożnika
Aby efektywnie klasyfikować narożniki, oprócz opisanego powyżej podziału
przestrzeni krzywizn, niezbędna jest pewna miara, która określa stopień jakości odpowiedzi
narożnika. Pomaga to w identyfikacji maksymalnych narożników.
Funkcja taka, oznaczona jako R, musi być funkcją, zależną jedynie α oraz β. Nie może
być ona zależna od żadynch dodatkowych parametrów. Tylko wtedy, zachowa
niezmienniczość względem obrotów. Aby algorytm działał wydajnie, ślad macierzy M oraz
jej wyznacznik. Pozwoli to uniknąć bezpośredniego, kosztownego czasowo, obliczania
wartości własnych tej macierzy. A zatem (Harris & Stephens, 1988):
β
α
narożniki
krawędzie
krawędzie płasko
Rysunek 20: Przestrzeń krzywizn autokorelacji.
30
Bazując na powyższym, funkcję odpowiedzi narożnika R zdefiniowano jako:
Funkcja R przyjmuje wartości dodatnie dla narożników, ujemne dla krawędzi oraz
oscyluje wokół zera dla regionów o niewielkim kontraście. Trzeba zauważyć, że wraz ze
wzrostem kontrastu obrazu, zwiększa się wartość odpowiedzi narożnika. Regiony o podobnej
barwie rozpoznawane są poprzez opadanie wartości śladu poniżej ustalonej wartości odcięcia,
będącej de facto wartością progową. Wartość parametru k jest mechanizmem sterującym
algorytmu. W literaturze (Sonka, Hlavac, & Boyle, 2008) wykazano, że optymalne działanie
detektora wykazywane jest, gdy jego wartość mieści się w przedziale (0,04; 0,15). Piksel
uznawany jest jako narożnik, jeśli jest to lokalne maksimum dla funkcji odpowiedzi.
3.2.3 Algorytm GFTT - Good Features To Track
W 1994 Jianbo Shi oraz Carlo Tomasi, w swojej pracy „Good Features to Track”,
zaproponowali dalsze modyfikacje detektora Harrisa. Dzięki temu, uzyskali jeszcze lepsze
wyniki w porównaniu do klasycznego detektora krawędzi Harrisa. W algorytmie klasycznym
Harrisa funkcja oceniająca ma postać:
Shi oraz Tomasi postulowali jej modyfikację do postaci:
Semantycznie oznacza to, że jeżeli wartość funkcji oceny przekracza pewną ustaloną wartość
progową, wówczas tak samo jak w algorytmie Harrisa punkt jest uznanwany za narożnik.
Wykres funkcji w wymiarze , wygląda następująco:
Rysunek 21: Zielony kolor symbolizuje wykrycie narożnika. Widać, że tylko gdy oraz są powyżej pewnej
wartości minimalnej, , mamy wierzchołek.
31
Analiza rysunku 21 jest podobna jak rysunku 20. Pomarańczowe obszary oznaczają
krawędzie, szary obszar to obszar o niewielkiej różnicy w barwie (kontraście). Algorytm
GFTT wyszukuje N najsilniejszych wierzchołków w obrazie. Operuje na obrazach w skali
szarości. Wprowadza się jeszcze jedną dodatkową wartość progową, która określa próg
jakości wierzchołka. Jeżeli wartość ta, nie jest osiągnięta, wówczas, wszystkie badane
wierzchołki są odrzucane i nie będą uznane za narożniki. Aby ostatecznie wybrać N
najlepszych wierzchołków, wprowadza się miarę jakościową opartą o minimalny dystans w
sensie Euklidesa pomiędzy wykrytymi narożnikami. W ten sposób sortujemy wszystkie
wykryte wierzchołki i wybieramy N najlepszych.
3.2.4 ORB
3.2.4.1 Detektor
Detekor ORB oparty jest na algorytmie BRIEF i jest jego rozszerzeniem. Zasadnicza
różnica między ORB a BRIEF to fakt, że w ORB jest niezmienność wobec rotacji. ORB
wykorzystuje detektor FAST, a dodatkowo jako deskryptor wykorzystuje BRIEF wraz z
rotującym się wzorcem. Na podstawie silnych zmian orientacji wybiera się optymalny
wzorzec.
Detektor wykorzystuje również koncepty znane z algorytmu Harrisa. Oblicza
wskaźniki jakości narożników metodą Harrisa w celu uporządkowania punktów
charakterystycznych wykrytych metodą FAST. Orientacja dla punktów jest liczona na
podstawie momentów geometrycznych oraz poziomu intensywności centroidy. Centroidę
definiujemy jako:
Wektor rozpinający od środka narożnika do centroidy, zwany orientacją, ma postać :
Jest to ważna modyfikacja, której nie ma pierwotnie FAST.
3.2.4.2 Desktryptor
ORB poddaje wzorzec serii obrotów. Następnie, należy wiedzieć, że ORB cechuje
niepewność i rozbieżności, względem algorytmu BRIEF, ponieważ punkty kluczowe z
uwzglednioną rotacją mają gorsze własności przy testach binarnych.
W celu minimalizacji rozbieżności względem BRIEF stosuje sięuczenie maszynowe.
Bazę wiedzy poszerza się z wykorzystaniem rotujących wzorców jako zbioru trenującego.
Dzięki temu można uzyskać mniejszą zależność od obrotów.
32
Przy detekcji wykorzystywany jest algorytm FAST, następnie mamy wybór N
najlepszych punktów, czego dokonuje się poprzez algorytm Harrisa. Następnie dodaje się do
nich orientacę, której nie daje algorytm FAST.
Do opisu cech używa się algorytmu BRIEF, ale nie daje on niezmienniczości jeśli
chodzi o obroty. Dlatego też detekcja jest nazywana wysterowanym BRIEF. Sterowanie
następuje poprzez orientację punktów charakterystycznych. Dla każdego z testów binarych
o współrzędnych definiujemy macież o wymiarach .
Załóżmy, że dana jest macierz , która zawiera współrzędne pikseli. Przy
wykorzystaniu orientacji obliczonej jako kąt , wyznaczana jest również macierz rotacji.
Zostaje ona zaaplikowana wobec macierzy . W efekcie powstaje wysterowana macierz .
ORB dyskretyzuje kąt obrotu do (12 stopni) i konstruuje tablicę przykładowych
wzorców w oparciu o BRIEF. Jeśli orientacja punktu charakterystycznego jest stała wzdłuż
widoków, właściwa macierz zostanie wykorzystana do wyliczenia deskryptora, co
przyspiesza działanie algorytmu.
3.2.5 STAR
Detektor STAR jest modyfiacją detektora CenSurE (Center Surrounded Extrema).
Detektor CenSurE używa wielokątów takich jak kwadraty, sześciokąty i ośmiokąty, w celu
przybliżenia okręgów. STAR aproksymuje okręgi poprzez pary nakładających się na siebie
kwadraty przesuniętych względem siebie o 45 stopni. Krawędzie tych kwadratów posiadają
wagi przeciwnych znaków. Algorytm działa tylko w skali szarości.
Pierwsza faza algorytmu polega na nałożeniu na obraz par kwadratów. Następnie
wykonuje się aproksymację LoG poprzez Lapasjan lub krzywą Gaussa. Dzięki temu
definiujemy regiony wewnątrz i na zewnątrz. Algorytm działa w oparciu o sąsiedztwo w
trzech warstwach opartych o 3 piksele dookoła każdej. Po wykryciu punktów wstępnych
wszystkie, które nie spełniają określonego progu są odrzucane. Następnie punkty są poddane
analizie poprzez detektor Harrisa. Te, których wartość progowa zostanie przekroczona zostają
odrzucone.
3.3 Wybór algorytmów
Na podstawie wyników uzyskanych w pracy inżynierskiej [17] oraz uwzględnionych
w niej metryk oceniających jakość algorytmów, wybrano najlepsze, które zostały
wykorzystane w aplikacji. Wyniki działania algorytmów prezentowały się następująco:
Kategoria FAST GFTT ORB STAR DENSE HARRIS BRISK
Szybkość 8.5 6.5 4.5 4 6 5.5 1.5
Wiarygodność 8 8 5 9 3 6 0
Niezawodność,
odporność
8 6 4 10 0 8 2
Sumaryczny
wynik
8 7 4.5 7.5 3 6.5 1
Zgodnie z powyższymi wynikami dalej będziemy wykorzystywać jedynie algorytmy FAST,
GFTT, STAR, HARRIS, ORB. Zrezygnowano z dalszego badania algorytmów DENSE oraz
BRISK. Ponadto zgodnie z uzyskanymi wynikami w pracy inżynierskiej nie będą
33
analizowane wyniki pracy algorytmów w trybie grid, a jedynie w wersji pyramid, jako że ten
adapter okazywał się najpraktyczniejszy. Autor bardzo żałuje, że nie dane mu było
przetestować algorytmów SIFT oraz SURF, ale niestety są licencjonowane i ich
wykorzystanie jest płatne.
4 Przegląd narzędzi W celu wykonania części praktyczej powyższej pracy dokonano przeglądu dostępnych
narzędzi programistycznych. Okazało się, że prezentowany poniżej zbiór jest wystaczający i
zapewnia wsparcie przy tworzeniu oprogramowania dotyczącego przetwarzania obrazów na
potrzeby systemu OS Android.
4.1 Android SDK oraz proces tworzenia aplikacji
Aby tworzyć aplikację na platformę Android niezbędne jest wykorzystanie Android
SDK. Jest to zbiór narzędzi wspomagających implementację w języku Java. Android SDK
wspiera wiele środowisk programistycznych np. Inteliji IDEA, Eclipse czy Android Studio.
Ważne jest, że aplikacja na platformę Android może powstawać w innym języku niż Java.
Autor pracy zdecydował się na pozostanie przy języku Java, niemniej jednak możliwe jest
programowanie w języku C i korzystanie z natywnego interfejsu Androida.
4.2 Gradle
Gradle wspiera imperatywny sposób deklaracji zależności. Gradle wykorzystuje
repozytoria Mavena, więc ma identyczne możliwości, jeżeli chodzi o dostępność bibliotek.
Co więcej zapis deklaracji zależności jest zdecydowanie bardziej zwięzły niż w przypadku
Mavena. Skrypt budowania jest zdecydowanie krótszy, w przypadku aplikacji ponad 2 razy
krótszy. Gradle ma składnię podobną do Anta, przez co umożliwia definiowanie złożonych
tasków, oraz praktycznie dowolną konfigurację procesu budowania aplikacji. Dzięki
wykorzystaniu procesu demona w trakcie budowania aplikacji udało się uzyskać 30% lepszy
czas w przypadku budowania naszej aplikacji. Gradle w przeciwieństwie do Mavena nie
cierpi na pewnego rodzaju chorobę informatyczną znaną jako Frameworkitis. Chorobę tę
można zdefiniować następująco (cytat z Ericha Gammy): Frameworkitis – "choroba"
polegająca na tym, że framework próbuje zrobić za dużo lub nie w taki sposób w jaki
chciałbyś (ale nie możesz tego zmienić). Poniżej wspomniany cytat:
"Przyjemnie jest otrzymać tyle funkcjonalności za darmo, ale w pewnym momencie okazuje
się, że aby móc uzyskać to co chcesz, musisz zmagać się z frameworkiem zamiast korzystać z
niego. Na tym etapie zaczynasz przegrywać, bo ciężko jest zmusić framework do działania w
kierunku nieprzewidzianym przez jego twórców."
4.3 OpenCV
Biblioteka OpenCV jest najpopularniejszą biblioteką służącą do przetwarzania
obrazów wykorzystywaną na platformie Android. Biblioteka napisana jest w języku C. Aby
skutecznie wykorzystywać ją na OS Android należy skorzystać z wrappera napisanego w
języku Java, który wykorzystując natywny interfejs wywołuje odpowiednie metody z
biblioteki. Dodatkowo warto wiedzieć, że istnieje OpeCV Manager, który pozwala zarządzać
34
instalacjami biblioteki OpenCV na urządzeniu. Istotną zaletą tego rozwiązania jest fakt, że
biblioteka instaluje się w telefonie osobno i nie obciąża tworzonej aplikacji. Najważniejszym
zastosowaniem biblioteki OpenCV w aplikacji jest możliwość kalibracji kamery przy pomocy
różnych wzorców, wykrywanie cech w obrazie, wyszukiwanie obrazu na podstawie wzorca.
4.3.1 Opis najważniejszych metod i algorytmów wykorzystanych z biblioteki OpenCV
Poniżej opiszemy kilka najważniejszych algorytmów oraz funkcji wykorzystywanych
w bibliotece OpenCV. Przedstawimy kontrakt (interfejsy) poszczególnych metod.
4.3.1.1 Wyszukiwanie wzorca kalibracji
Metoda bool findChessboardCorners(InputArray image, Size patternSize,
OutputArray corners,
int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE )
Metoda ta wyszukuje w obrazie prostokątną szachownicę jako wzorzec kalibracji.
Opis parametrów :
image – Źródłowy obraz szachownicy.
patternSize – rozmiar szachownicy określający wiersze i kolumny szachownicy.
corners – wynikowy wektor wykrytych narożników.
flags – zbiór flag, których opis jest następujący :
o CV_CALIB_CB_ADAPTIVE_THRESH - korzystaj z adaptacyjnego progu do
konwersji obrazu z kolorowego na czarno-biały, zamiast sztywnej liczbowej
wartości progowej. Adaptacyjny próg polega na wyliczeniu średniego poziomu
jasności obrazu.
o CV_CALIB_CB_NORMALIZE_IMAGE - poddaj normalizacji histogram obrazu
przed poddaniem obrazu apdatacji na czarno-biały obraz.
o CALIB_CB_FAST_CHECK -wykonaj szybkie sprawdzenie czy obraz przypomina
szachownicę. Jeżeli wynik jest negatywny zakończ pracę algorytmu. Występowanie
tej flagi znacząco przyspiesza przetwarzanie klatek, jeżeli nie prezentujemy wzorca
szachownicy, którego szukamy.
Metoda próbuje określić, czy przetwarzana klatka, jest wzorcem szachownicy, po czym
próbuje zlokalizować narożniki szachownicy. Funkcja zwraca true wartość w przypadku
powodzenia. Dla przykładu szachownica 8 x 8 posiada 7 x 7 wewnętrznych rogów, czyli
miejsc, gdzie czarne kwadraty stykają się ze sobą.
4.3.1.2 Pozbywanie się zniekształceń w obrazie na podstawie procesu kalibracji kamery
Metoda void undistort(InputArray src, OutputArray dst, InputArray cameraMatrix,
InputArray distCoeffs, InputArray newCameraMatrix=noArray() )
Metoda przekształca obraz wejściowy aby skompensować zniekształcenia soczewki.
Opis parametrów :
src – wejściowy (zniekształcony) obraz
dst – wyjściowy (poprawiony, skompensowany) obraz, który jest tego samego
rozmiaru oraz typu co obraz wejściowy src.
35
cameraMatrix – macierz wewnętrzna kamery .
distCoeffs – wektor współczynników zniekształceń
kamery składa się z 4, 5 lub 8 elementów.
newCameraMatrix – macierz wewnętrzna kamery, dla obrazu zniekształconego.
Domyślnie jest to kopia cameraMatrix, ale można podać inną znaną macierz.
Metoda przekształca obraz, aby skompensować radialne oraz tangensoidalne zniekształcenia
soczewki. Funkcja interpoluje pozyskaną macierz obrotu i translacji kamery i
przemapowywuje piksele z obrazu wejściowego. Jeżeli w obrazie wynikowym po
transformacji, nie ma odpowiadających pikseli w obrazie wejściowym, to wypełniane są te
piksele zerami (kolor czarny). Wynikiem jest modyfikacja macierzy kamery.
4.3.1.3 Wyszukiwanie homografii
Aby wyszukać przekształcenie pomiędzy dwiema płaszczyznami (np. w celu weryfikacji, czy
dwie klatki są podobne) możemy użyć metody :
Mat findHomography (InputArray srcPoints, InputArray dstPoints, int method=0,
double ransacReprojThreshold=3, OutputArray mask=noArray() )
Opis parametrów :
srcPoints – obraz oryginalny (jako macierz punktów).
dstPoints – obraz docelowy (porównywany)
method – flaga określająca metodę porównawczą. Oto dostępne metody :
o
o 0 - metoda porównująca każdy punkt z każdym
o CV_RANSAC - metoda opierająca się o RANSAC-a
o CV_LMEDS - metoda najmniejszych kwadratów
ransacReprojThreshold – wartość progowa, dla algorytmu RANSAC,
określająca,czy punkt jest uznawany za należący do zbioru wynikowego, czy też nie.
Jeżeli obrazu są dostarczone jako zbiory pikseli, to sensowną wartością tego
parametru jest przedział <1, 10>
mask – opcjonalna maska dla algorytmów RANSAC lub metody najmniejszych
kwadratów.
Metoda znajduję i zwraca perspektywiczną transformację pomiędzy obrazem źródłowym a
docelowym (w szczególności pomiędzy ich płaszczyznami). Można to zapisać tak :
zatem błąd reprojekcji jest następujący:
36
celem funkcji jest jego minimalizacja. Jeżeli wykorzystywane są wszyskie punkty, to jest to
zwykła metoda najmniejszych kwadratów.
Jeżeli, nie korzystamy ze wszystkich par punktów ( , ) w celu
dopasowania odpowiedniej transformacji (oznacza to, że będziemy mieli niedopasowane
niektóre pary), to wówczas bazowe liczenie błędu reprojekcji będzie dawało niezadowalające
wyniki. W takim wypadku należy skorzystać z bardziej odpornych metod
RANSAC lub LMeDS. Najlepsze dopasowanie jest wykorzystane do finalnej estymacji
macierzy homografii oraz maski określającej dopasowane oraz niedopasowane pary.
Niezależnie od metody, odpornej na zakłócenia lub też nie, wyliczona macierz homografii jest
poddawana optymalizacji Levenberg-Marquardt aby jeszcze zmniejszyć finalny błąd
reprojekcji.
Metoda RANSAC potrafi działać nawet przy bardzo dużej liczbie niedopasowanych par,
jednakże wymaga podania odpowiedniego, wyznaczonego eksperymentalnie progu, aby
rozróżniać poprawnie dopasowane pary od niedopasowanych. Metoda LMeDS nie wymaga
podawania żadnego progu, ale działa poprawnie jedynie w przypadku, gdy mamy ponad 50%
poprawnych złączeń. W przypadku jeżeli mamy wysoką jakość scen oraz niewiele
niedopasowanych par, najdokładniejsza, ale również najbardziej podatna na zakłócenia jest
metoda łącząca każdą parę z każdą.
Metoda jest wykorzystywana do znalezienia macierzy wewnętrznej oraz zewnętrznej.
Macierz homografii jest zależna od skali. Dlatego też podlega normalizacji . Jeżeli
nie uda się wyliczyć macierzy H, wówczas zostanie zwrócona pusta macierz.
4.4 Pozostałe wykorzystane biblioteki
OpenCV jest kluczową biblioteką wykorzystywaną w projekcie. Niemniej jednak,
wykorzystano kilka innych bibliotek. Poniżej przedstawimy zasadność i cele ich użycia w
aplikacji.
4.4.1 Apache Commons Math
W celu przyspieszania operacji matematycznych wykorzystywanych przy filtrach
barwnych oraz liczeniu krzywych użyłem biblioteki Apache Commons. Jest to bardzo
przejrzyście napisana biblioteka. Zysk wydajnościowy wynosi około 15% względem własnej
implementacji operacji matematycznych, dlatego warto z niej korzystać.
4.4.2 Google Guava
Jest to biblioteka pochodząca od firmy Google. Wprowadza ona wiele statycznych
metod do wygodnej obsługi kolekcji, napisów oraz wspomaga programowanie defensywne
(fail fast) poprzez asercje oraz programowanie funkcyjne (poprzez predykaty). Wykorzystanie
biblioteki guava zwiększa czytelność kodu i zniechęca do samodzielnego tworzenia metod do
operacji na kolekcjach, dlatego warto z niej korzystać.
37
4.4.3 OpenCSV
Biblioteka OpenCSV służy do wygodnego generowania plików CSV. Dzięki użyciu
tej biblioteki wystarczy zdefiniować nagłówki kolumn i już można pisać kolejne wiersze do
pliku CSV. Decyzja o tworzeniu plików CSV podyktowana jest faktem, że jest to wygodny
format do przechowywania wyników testów. Z formatu CSV łatwo przejdziemy do Excela,
dzięki czemu generacja wykresów oraz praca z danymi w celu ich obróbki będzie
przyjemnością.
4.4.4 OpenGL
Bibliotek OpenGL jest niezbędna w celu generacji modelu AR w aplikacji.
Zdecydowałem się na jej użycie ponieważ nie chciałem wykorzystywać gotowych bibliotek
takich jak Vuforia. Decyzja ta podyktowana jest faktem, że celem aplikacji jest badanie
algorytmów i ich modyfikacja a nie sama generacja obiektów 3D. Standard OpenGL
umożliwia w prosty sposób generację prostych obiektów 3D, które symulują w aplikacji
rzeczywistość rozszerzoną.
4.4.5 Google Gson
W systemie Android występuje potrzeba przesyłania danych pomiędzy
poszczególnymi Activity. Aby skutecznie serializować i deserializować dane pomiędzy
Activity takie jak : macierze kamer, parametry kamery, błąd reprojekcji zdecydowałem
przesyłać je w formacie JSON. Biblioteka Gson zapewnia mapowania obiektów Javy do
formatu JSON i odwrotnie.
5 Implementacja oraz opis aplikacji W ramach praktycznej części tej pracy powstała aplikacja użytkowa. Została ona
napisana jako rozbudowa aplikacji powstałej w wyniku pracy inżynierskiej [cytowanie
autor.]. Najważniejszymi funkcjonalnościami aplikacji jest możliwość detekcji punktów
charakterystycznych z wykorzystaniem wybranego algorytmu, Możliwość zbierania metryk
pomiarowych w celu porównywania działania poszczególnych algorytmów, Generacja
rozszerzonej rzeczywistości na podstawie wykrytego znacznika będącego predefiniowanym
obrazem bogatym w cechy, możliwość kalibracji kamery z wykorzystaniem różnych wzorców
kalibrujących. Dodatkowe funkcjonalności aplikacji związane z przetwarzaniem obrazów taki
jak mieszanie kanałów barwnych w obrazie, czy też wykorzystywanie filtrów splotu działa
bez zmian względem pracy inżynierskiej. Zgodnie z dobrymi praktykami programowania
obiektowego aplikacja posiada wydzielone klasy do poszczególnych funkcjonalności i
odpowiedzialności za poszczególne operacje. Poniżej opiszemy najważniejsze z
architektonicznego punktu widzenia rozwiązania.
5.1 Pakiety domenowe aplikacji
Zgodnie z filozofią DDD (Domain Driven Design) kod aplikacji powinien być
grupowany poprzez odpowiedzialność (logikę biznesową, domenową), a nie poprzez funkcje
architektoniczne które pełni (np. model, kontroler). Dlatego też w aplikacji zgrupowano kod
wraz z logiką za którą odpowiada w następujących pakietach.
38
5.1.1 Pakiet calibration
Pakiet calibration odpowiada za grupowanie logiki klas, które realizują kalibrację
kamery. Dla wygody konfiguracji mamy tutaj enumerator określający wzorzec obiektu
kalibrującego (szachownica, symetryczne koła, asymetryczne koła). Analogicznie, mamy też
enumerator służący za flagi wykorzystane w procesie kalibracji kamery. Dla wygody
prezentacji i porównania obrazu z kamery przed i po kalibracji mamy abstrakcyjną klasę
FrameRenderer, której implementacje obrazują na ekranie skalibrowaną kamerę, porównanie
skalibrowanej kamery bądź nieskalibrowaną kamerę. Klasa CameraCalibrator to klasa
odpowiadająca za proces kalibracji. Klasa ta kalibruję kamerę na podstawie zadanego wzorca
oraz oblicza średni błąd reprojekcji. Klasa CalibrationActivity, zgodnie z nomenklaturą
Androida odpowiada za możliwość wywołania przez użytkownika procesu kalibracji. To
właśnie w tej klasie mamy obsługę interakcji z użytkownikiem, który może konfigurować
poprzez menu ustawienia kalibratora kamery oraz po przeprowadzeniu procesu kalibracji
przejść do innych funkcjonalności aplikacji.
5.1.2 Pakiet adapters
Klasa CameraProjectionAdapter znajdująca się w tym pakiecie odpowiada za
przeliczanie współrzędnych obliczonych w openCV na współrzędne do openGL. Wynikową
operacją jest generacja macierzy projekcji kamery.
5.1.3 Pakiet filetrs
W pakiecie filters zgromadzone są różne implementacje filtrów. Mamy tutaj klasy
filtrujące kolory (mieszają barwy kolorów w obrazie wynikowym), filtry krzywych, filtry
splotowe, oraz przede wszystkim filtry generujące AR. Działanie filtra AR polega na
znalezieniu pozy kamery. Zakładając, że wiemy, że znaleźliśmy szukany wzorzec w obrazie z
kamery musimy odpowiednio wyrenderować rozszerzoną rzeczywistość.
5.1.4 Pakiet matcher
W pakiecie matcher mamy klasy odpowiadające za detekcję punktów
charakterystycznych, wyliczanie dla nich deskryptorów oraz odpowiednie łączenie punktów z
dwu obrazów. Klasa Scene jest modelem sceny. W niej przechowujemy dane takie jak :
obraz, listę punktów kluczowych w obrazie, deskryptory obrazu. Klasa SceneDetectData to
następna klasa reprezentująca model. W niej trzymamy wszystkie dane powstałe w wyniku
testów działania algorytmów łączenia punktów charakterystycznych takie jak np. czas
przetwarzania klatki, ilość wykrytych punktów charakterystycznych, ilość połączonych z
sukcesem punktów itp. Klasa Settings odpowiada za zapisywanie ustawień dotyczących
działania algorytmów. Klasa DetectUtility przeprowadza pełen proces detekcji złożony z 3
faz : wykrycie punktów charakterystycznych, wyznaczenie deskryptorów a na koniec
złączenie odpowiadających sobie punktów. Klasa Matcher Activity umożliwia
użytkownikowi wywołanie wszystkich metod związanych z procesem detekcji, konfiguracji
detektorówm, zbieraniem danych testowych.
5.1.5 Pakiet główny
W pakiecie głównym znajdują się następujące klasy. Klasa ARCubeRenderer
odpowiada za renderowanie szecianu jako rzeczywistości rozszerzonej z wielokolorowymi
39
ściankami przy użyciu biblioteki OpenGL. Klasa LabActivity odpowiada za komunikację z
wbudowanymi aplikacjami w telefon takimi jak wysyłanie zdjęcia poprzez maila, bluetooth.
Klasa CustomJavaCameraView jest własną implementacją kamery pracującej pod systemem
OS Android. Dzięki własnej implementacji możemy wybrać różną wspieraną przez
urządzenie rozdzielczość przetwarzanego obrazu, oraz wykorzystywać wspierane przez
urządzenie efekty fotograficzne takie jak sepia, negatyw. Klasa CameraActivity odpowiada za
główny (startowy) wątek aplikacji. Umożliwia on przejście do innych Activity a ponadto
zarządza kamerą.
5.2 Wzorce projektowe
Ponieważ oprogramowanie powstawało w języku Java, a jest to język wspierający
paradygmat programowania obiektowego, to wspomnijmy o wzorcach projektowych, które
ułatwiają tworzenie dobrego jakościowo kodu. Wzorce projektowe zostały pierwszy raz
opisane w literaturze przez tzw. "Bandę czworga" (ang. GoF). Głównym autorem był Erich
Gamma. Wzorce opisują gotowe, sprawdzone i najlepsze znane praktyki na rozwiązywanie
typowych problemów. Każdy wzorzec ma swoje przypadki zastosowania. W pewnych
architekturach sprawdza się lepiej, a w niektórych gorzej. Ważne, aby znać wady i zalety
zastosowania danego wzorca. W tym podrozdziale opiszemy kilka wykorzystanych w
projekcie aplikacji wzorców.
Wzorce projektowe można podzielić na następujące kategorie:
kreacyjne (konstrukcyjne) – opisujące proces tworzenia nowych obiektów; ich
zadaniem jest tworzenie, inicjalizacja oraz konfiguracja obiektów, klas oraz innych typów
danych
strukturalne – opisujące struktury powiązanych ze sobą obiektów;
czynnościowe (behawioralne) – opisujące zachowanie i odpowiedzialność
współpracujących ze sobą obiektów.
5.2.1 Korzyści użycia wzorców
Wiele zespołów programistycznych chętnie korzysta ze wzorców projektowych,
ponieważ ułatwiają komunikację i wprowadzają wspólne rozumienie proponowanych
rozwiązań. Dzięki korzystaniu ze wzorców kod powstający w myśl paradygmatu
obiektowego jest luźniej powiązany i łatwiejszy w modyfikacji lub utrzymaniu. Wzorce
wspierają wiele uznanych zasad projektowania systemu w tym :
DRY (Dont Repeat Yourself) - kod nie jest powielany i nie zawiera redundancji, przez
co jest łatwiejszy w modyfikacji
Open/Closed Principle - zasada mówiąca, że kod powinien być otwarty na
rozszerzenia, ale zamknięty na modyfikację (inaczej mówiąc, powinno dać się
tworzyć kod dający nowe możliwości bez modyfikacji już istniejącego kodu, a
poprzez dodawanie nowych klas / interfejsów)
40
Single Responsibility - zasada mówiąca o pojedynczej odpowiedzialności klasy.
Oznacza, że każda klasa powinna odpowiadać za dokładnie jedną rzecz.
Antyprzykładem są klasy typu manager, które wykonują wiele operacji, w
konsekwencji czego, nie wiadomo za co odpowiadają
Dependency Injection oraz Inversion of Control - zasada mówiąca, że kod powinien
powstawać w oparciu o kontrakt. Inaczej mówiąc, kod powinien być możliwie luźno
powiązany (np. poprzez interfejsy, a nie poprzez konkretne implementacje)
Hermetyzacja, enkapsulacja - kod powinien posiadać możliwie najmniejszy zasięg
(preferujemy dostępność private nad public). Klasy nie powinny zdradzać swojej
wewnętrznej implementacji, a jedynie udostępniać przemyślane API.
Preferuj kompozycję od dziedziczenia - architektura kodu oparta o kompozycję (w
przypadku javy oznacza to wiązanie obiektów poprzez referencje), jest bardziej
odporna na zmiany i łatwiejsza w modyfikacji
5.2.2 Wzorzec strategii
W trakcie realizacji projektu wykorzystaliśmy wzorzec strategii. Istotą tego wzorca
jest wydzielenie zmiennego zachowania do specyficznych klas. Wzorzec strategii jest
wzorcem należącym do kategorii wzorców czynnościowych (behawioralnych). Dość dobrze
obrazuje to poniższy rysunek
Rysunek 22: Diagram klas dla wzorca strategii
Jak widzimy, kontekst (często klasa zawierająca logikę domenową) nie jest ściśle zależna od
strategii. Jedyne co posiada klasa kontekstu, to referencja do interfejsu strategii. Często
41
specyficzna strategia jest dostarczana z zewnątrz (w przypadku aplikacji, to użytkownik w
ustawieniach wybiera specyficzną strategię), co powoduje jeszcze luźniejsze wiązanie
komponentów. Dzięki temu łatwo jest dodawać nowe strategie bez potrzeby modyfikacji już
istniejących. Dodatkowo, dzięki wzorcowi ograniczamy występowanie zaciemniających kod
instrukcji warunkowych. Wadą jest większa liczba powstałych klas.
W przypadku aplikacji zastosowanie wzorca strategii ma jeszcze jeden praktyczny skutek. W
przetwarzaniu obrazów mamy do czynienia z tzw. "Pipelinem". Oznacza to, że mamy kilka
elementów przetwarzania obrazów (segmentacja, kalibracja kamery, rozpoznawanie,
dopasowanie do wzorca), następujących po sobie, gdzie każdy z nich możemy zrealizować na
kilka sposobów. Dzięki temu każdy z tych sposobów realizowany jest poprzez wzorzec
strategii, w konsekwencji czego, jest łatwo wymienić i testować poszczególne algorytmy i
łączyć je ze sobą.
5.2.3 Wzorzec budowniczego
Wzorzec budowniczego należy do rodziny wzorców kreacyjnych. Znalazł on swoje
zastosowanie w stworzonej przez mnie aplikacji. Wykorzystałem go do tworzenia obiektów,
które posiadają pewne cechy obowiązkowe, a pewne opcjonalne (większość konfiguracji
algorytmów). Wzorzec daje możliwość tworzenia obiektów w sposób łańcuchowy, co sprzyja
czystości kodu. Ponadto można dzięki niemu uzyskać obiekty niezmienne (ang. immutable),
co gwarantuje nam bezpieczne przetwarzanie wielowątkowe, jako, że stan obiektu jest stały.
Diagram klas wzorca jest następujący:
Rysunek 23: Diagram klas dla wzorca budowniczego
42
Dodatkową zaletą jest duża możliwość konfiguracji do uzyskania, co sprzyja procesowi
testowania algorytmów.
5.2.4 Wzorzec adapter
Wzorzec adapter należy do rodziny wzorców strukturalnych. Istotą tego wzorca jest
umożliwienie współpracy dwóm klasom, o niekompatybilnych interfejsach. Diagram klas
wzorca jest następujący:
Rysunek 24: Diagram klas dla wzorca adaptera
W aplikacji wzorzec ten został wykorzystany na potrzeby renderowania
rzeczywistości rozszerzonej. Ze względu na niekompatybilne interfejsy macierzy projekcji
OpenGL oraz OpenCV wykorzystanie adaptera jest w pełni uzasadnione. Niestety wzorzec
ten wprowadza pewien narzut wydajnościowy. Zaletą tego wzorca jest możliwość dodania
nowej funkcjonalności, jak w naszym przypadku centrowania AR na środek obiektu wzorca.
5.3 Przekazywanie danych pomiędzy Activity, a w szczególności danych związanych z
kalibracją kamery oraz wykorzystanie tych danych przez poszczególne Activity
W aplikacji występują 3 główne Activity, które współdzielą model kalibracji kamery:
CameraCalibrationActivity - odpowiada za proces kalibracji i jest dostawcą danych
MatcherActivity - rozpoznaje cechy w obrazie i odpowiada za wyszukiwanie
podobnych scen, jest beneficjentem (konsumuje) dostarczony model kalibracji kamery
CameraActivity - odpowiada za wyszukiwanie wzorca w scenach i umożliwia
rendering rzeczywistości rozszerzonej
Po procesie kalibracji kamery CameraCalibrationActivity udostępnia w trakcie przejść
(tranzycji) do MatcherActivity oraz CameraActivty model kalibracji. Dzięki temu możliwe
jest badanie wpływu kalibracji kamery na rozpoznawanie wzorca oraz detekcję cech. Model
kalibracji kamery zawiera:
43
Macierz wewnętrzną kamery wraz z jej parametrami
Macierz współczynników zniekształcających uzyskany w wyniku kalibracji (de facto
jest to wektor)
Informację o wykorzystanym wzorcu kalibrującym na potrzeby wyznaczenia
optymalnego w danej sytuacji
Średni błąd reprojekcji wyliczony na podstawie kalibracji
Opisany powyżej model musi być serializowany (zamieniony na ciąg bajtów), a
następnie deserializowany (zamieniony z bajtów na dany obiekt) na potrzeby przesyłania go
pomiędzy poszczególnymi Activity. Najlepszym formatem wymiany danych, nadającym się
do tego zadania jest JSON. Oto uzasadnienie. dlaczego format JSON został wybrany. Po
pierwsze jest serializowalny, czyli daje się łatwo zamienić na ciąg bajtów. Ułatwia to
przesyłanie danych z wykorzystaniem sieci Internet oraz pomiędzy activity. W odróżnieniu
od XML-a jest zdecydowanie lżejszy, ponieważ nie posiada znaczników ani atrybutów. Z
punktu widzenia programisty, JSON jest obiektowy i bardzo łatwo się tworzy JSONa na
podstawie kolekcji obiektów, jak i w drugą stronę, czyli kolekcję obiektów z JSONa.
5.4 Opis procesu kalibracji kamery
W poprzednich rozdziałach opisano już podstawy teoretyczne procesu kalibracji
kamery. Przedstawiono również interfejsy umożliwiające kalibrację w kodzie aplikacji.
Opiszemy teraz sam proces kalibracji, który umożliwia stworzona aplikacja.
Na potrzeby procesu kalibracji powstał dedykowany komponent aplikacyjny. Posiada
on swój własny ekran. Pracując z modułem kalibracji możemy wrócić do ekranu głównego,
bądź przejść do modułu rozpoznawania i łączenia obrazów. Przejście może odbyć się na 2
sposoby. Jeżeli kalibracja się zakończyła sukcesem, to w następnych modułach przetwarzany
obraz będzie podlegał kompensacji. Jeżeli kalibracja nie powiodła się lub się nie odbyła, to
należy wybrać opcję skip calibration, która wraca nas na ekran główny, bez kompensacji
przetwarzanego obrazu. Będąc na tym ekranie możemy wejść w ustawienia procesu i
skonfigurować następujące parametry:
Typ wzorca kalibrującego
Flagi (strategie) algorytmów kalibrujących
Opis flag, które sterują algorytmami kalibracji został dokonany w poprzednim rozdziale.
Aplikacja wspiera 3 typy wzorców. Jest to klasyczna szachownica, symetryczne koła oraz
asymetryczne koła. Poniżej widzimy przykłady poszczególnych wzorców:
44
Rysunek 25: Wzorzec kalibrujący będący szachownicą
Rysunek 26: Wzorzec kalibrujący wykorzystujący symetryczne koła
Rysunek 27: Wzorzec kalibrujący wykorzystujący asymetryczne koła
Opiszemy teraz scenariusz poprawnego procesu kalibracji :
Wybieramy interesujący nas wzorzec kalibrujący oraz ustawiamy wybrane
strategie kalibracji
45
Przed kamerą prezentujemy kartkę rozmiaru A4 lub większego zawierającą
skonfigurowany uprzednio wzorzec. Ważne, aby pokazywać kamerze wzorzec
z różnych kątów oraz pozycji. W przeciwnym razie algorytm kalibrujący de
facto uzna, że otrzymał jeden wzorzec (jeżeli dostarczymy N bardzo
podobnych ujęć).
Na ekranie widzimy, czy kamera rozpoznaje dany wzorzec (pojawiają się
łączące się linie określające rogi występujące we wzorcu), wówczas poprzez
dotyk ekranu wykonujemy zapamiętanie migawki na potrzeby procesu
kalibracji. W prawym górnym rogu wyświetlana jest liczba zapamiętanych
migawek.
Po uzyskaniu zadowalającej liczby zróżnicowanych ujęć wzorca (minimum 4,
ale zaleca się aby było ich około 10), możemy wcisnąć przycisk calibrate.
Wówczas dostajemy jedną z dwu odpowiedzi : albo, że mamy za mało
migawek i trzeba dostarczyć więcej, albo ,że trwa proces kalibracji.
Po zakończeniu się procesu kalibracji dostajemy napis, że kalibracja powiodła
się oraz informację zwrotną ile wynosi średni błąd reprojekcji dla procesu
kalibracji. Im jest on mniejszy tym lepiej. Wartością graniczną można przyjąć
liczbę 1.0. Dla kalibracji o większym błędzie reprojekcji należy powtórzyć
proces zbierając bardziej różnorodne migawki wzorca. Optymalna wartość
reprojekcji potwierdzająca wysoką jakość kalibracji wynosi poniżej 0.60.
Rysunek 28: Wybór wzorca kalibrującego w aplikacji
46
Rysunek 29: Wybór strategii kalibrującej w aplikacji
Rysunek 30: Wybór rozdzielczości w trakcie procesu kalibracji
47
Rysunek 31: Przykładowe ujęcie wraz z wykrytym wzorcem
Rysunek 32: Okno dialogowe ukazujące się w trakcie wyznaczania parametrów kamery
48
Rysunek 33: Ekran z informacją zwrotną z podanym średniokwadratowym błędem reprojekcji uzyskanym w wyniku
kalibracji kamery
Po procesie kalibracji, przejście do innego modułu aplikacji spowoduje przetwarzanie
obrazów, które są poddawane kompensacji, mającej na celu usunięcie efektów ubocznych
związanych ze zniekształceniami radialnymi oraz tangensoidalnymi kamery.
5.5 Opis generacji rzeczywistości rozszerzonej
W celu generacji rzeczywistości rozszerzonej potrzebujemy zdefiniować wpierw
obraz, bogaty w cechy, którego będziemy wyszukiwali w scenie. Nazwijmy go znacznikiem.
Obraz ten będzie porównywany z kolejnymi klatkami z kamery. Odnalezienie go w
przestrzenii jest równoważne ze znalezieniem jego pozy w 3D. W finalnym obrazie 2D, który
będzie renderowany na ekranie, możemy obrysować znaleziony obraz liniami równoległymi.
Mając na uwadze zniekształcenia, otrzymamy równoległobok obrysowywujący szukany
obraz w 3D.
Omówimy teraz algorytm szukania znacznika w scenie. Składa się on z 4 kroków:
1. Znajdź punkty charakterystyczne zarówno w znaczniku i zapamiętaj je, a następnie
wyszukaj cechy w klatce, która podlega analizie.
2. Oblicz deskryptory dla wszystkich znalezionych zbiorów cech. Deskryptor jest
wektorowym opisem punktów kluczowych. Nie każdy punkt kluczowy daje się
opisać, więc zawsze uzyskamy mniej deskryptorów niż punktów kluczowych.
3. Wyszukaj wszystkie odpowiadające sobie cechy w znaczniku oraz analiozwanej
klatce. Wykorzystaj w tym celu obliczone deskryptory. Za miarę jakości przyjmij
dystans Hamminga, czyli miarę odległości cech od siebie.
49
4. Wyznacz homografię pomiędzy znacznikiem a klatką. Homografia to opis
transformacji 3D niezbędnej do połączenia dwóch prezentowanych obrazów 2D w
celu nałożenia ich na siebie.
Po analizie niezbędnych wymagań dla algorytmu generacji AR, zdecydowaliśmy się na
połączenie i wykorzystanie następujących algorytmów:
detektora STAR - bardzo dokładny, dostarcza wyselekcjonowane punkty kluczowe,
deskryptora ORB,
matchera BRUTEFORCE HAMMING - na potrzeby wykorzystania miary.
Wspomniana konfiguracja zapewnia nam niezbyt liczny, aczkolwiek odpowiedni
jakościowo zbiór cech obrazu. Dzięki deskryptorowi ORB uzyskamy niezależność od
obrotów. Istotne jest, że znacznik pozostanie w obszarze wykrycia i nie będzie szybko
zgubiony z pola widzenia. Stabilność działania tej kombinacji jest bardzo istotna. Ponadto
STAR, ORB I BRUTTFORCE HAMMING są algorytmami nieodpłatnie dostępnymi.
W celu znalezienia homografii niezbędne są punkty kluczowe o bardzo wysokiej jakości.
Miarą tej jakości będzie dystans Hamminga, między parą cech znacznika oraz przetwarzanej
klatki. W celu wyznaczenia homografii wystarczają 4 złączone punkty o bardzo wysokiej
jakości. W tym celu będziemy szukać wierzchołków obrazu. Warto również przeprowadzić
optymalizację, ze względu na wysoką złożoność obliczeniową. Szkic takiego algorytmu,
który uwzględnia rozmaite przypadki jest następujący:
1. Jeżeli wszystkie z punktów złączeniowych mają dużą wartość dystansu Hamminga,
zakładamy, że w danej scenie nie występuje szukany obraz. W tym przypadku
czyścimy listę punktów, które próbujemy dopasować jako wierzchołki, gdyż
najprawdopodobniej jest ona błędna.
2. Jeżeli złączenia są częściowo poprawne (pewne wartości dystansu Hamminga są
wysokie, ale występują też takie o niskiej wartości), zakładamy, że szukany obraz
stanowi fragment sceny. Wówczas zachowujemy je na liście potencjalnych
wierzchołków w celu stabilizacji estymat.
3. Jeżeli matche są poprawne w liczbie co najmniej czterech, znajdujemy homografię w
oparciu o 4 najlepsze punkty i na jej podstawie wyznaczamy wierzchołki w obrazie.
Na potrzeby dalszego zrozumienia, w jaki sposób należy rozumieć generację AR,
rozpatrzmy następujący przykład. Rozpatrzmy znaną sobie fotografię, którą wykonaliśmy
pewien czas temu. Wiemy gdzie została ona wykonana, a naszym celem jest odpowiedź na
pytanie jakich nastaw aparatu użyto w celu jego wykonania. Aby odpowiedzieć na to pytanie,
należy osobiście odwiedzić miejsce wykonania ujęcia. Następnie, należy odpowiedzieć na
pytanie, gdzie położony był aparat w przestrzenii 3D oraz jaki był kąt widzenia. Jeżeli nam
się to uda, znamy długość ogniskowej. Znajomość ogniskowej jest niezbędna aby poprawnie
odwzorować zdjęcie. Analogiczny problem należy rozwiązać w trakcie szukania obrazu w
scenie. Aby tego dokonać, trzeba ustalić, jakie są pionowe i poziome pola widzenia kamery
oraz jakie są wyrażone w pikselach rozdzielczości w obu kierunkach.
W celach optymalizacyjnych warto wiedzieć, że operacje wyznaczania macierzy
projekcji są bardzo kosztowne obliczeniowo. Aby nie przeliczać ich każdorazowo, należy
zapamiętać, wykorzystując flagę typu boolean, czy dana macierz jest
nadal aktualna. Wychodząc z modelu kamery małoobrazkowej, istotna jest znajomość tzw.
50
płaszczyzny obcinanej bliży i płaszczyzny obcinananej dali. Trzeba wiedzieć, że obraz nie
będzie widoczny ani bliżej, ani dalej niż dwie wspomniane płaszczyzny (zostanie do nich
ucięty jak na rysunku poniżej).
Rysunek 34: Przedstawienie płaszczyzn obcinania, obraz kamery uwzględnia jedynie obszar ściętego ostrosłupa
Aby skutecznie wyznaczać położenie kamery w przestrzenii 3W, nie wystarczy
wyznaczenie homografii. W zamian za to, trzeba operować na wszystkich dotychczasowych
danych dotyczących cech znacznika i kamery. Naszym celem nie jest zatem wyznaczenie
homografii, lecz właściwej pozy w 3D. Taka zmiana, niesie za sobą różnice w implementacji.
Po pierwsze, rozszerzamy wymiar punktów kluczowych do 3D, dodając wartość 0 dla
zmiennej z. Następnie, jak poprzednio, szukamy pozycji celu oraz obrotu kamery na
podstawie złączonych punktów kluczowych. Należy pamiętać, że w OpenCV oraz w OpenGL
kierunki osi y oraz z są odwrócone i trzeba pomnożyć uzyskane wyniki przez -1.
Zgodnie z modelem małoobrazkowym kamery, wynikiem działania programu jest
wyznaczenie macierzy obrotu oraz translacji. Dzięki temu, możemy w OpenGL
wyrenderować sześcian na obszarze należącym do znacznika. Dokonujemy tego na podstawie
pozy kamery. Wyznaczamy ją w podobny sposób jak niegdyś homografię, tylko w 3D, a nie
w 2D.
Dla celów wygodne testowania aplikacji, poprawne wyznaczenie pozy 3D kamery
oznacza, że wyrysujemy na ekranie kolorwy sześcian. Jeżeli znacznik nie został znaleziony, w
lewym górnym rogu kamery wyrysujemy obraz, którego używamy jako znacznika.
51
Rysunek 35: Szukanie wzorcowego obrazu w scenie w czasie rzeczywistym
Do rozpatrzenia pozostały niskopoziome zagadnienia związane z bindowaniem
biblioteki OpenGL oraz systemu Android. Dzięki umiejętnemu połączeniu tych dwu
środowisk, możliwe jest generowanie własnej rzeczywistości rozszerzonej. OS Android
wspiera OpenGL i umożliwia rysowanie po widgecie zwanym GLSurfaceView, którego
będziemy wykorzystwać.
OpenGL, dostarcza nam dwie możliwości: stosowanie macierzy do przekształceń 3D
na wierzchołkach sześcianu oraz renderowanie trójkątów na podstawie przekształconych
wierzchołków. Nasz sześcian ma osiem wierzchołków oraz składa się z dwunastu trójkątów
(6 ścian * 2 trójkąty na kwadrat ściany).
Z punktu widzenia wydajności, niekorzystynm jest fakt, że OpenGL przeprowadza
operacje na kolorach z wykorzystaniem buforów. Oznacza to, że trzeba pisać
niskopoziomowy kod, służący do przekształceń oraz alokowania z góry znanej liczby
określającej zasoby pamięci. Jednym z takich przykładów jest konieczność czyszczenia
(zerowania) wszystkich buforów z poprzednio wyrysowanego obrazu.
Poniżej prezentujemy efekt działania, renderowania sześcianu, rozszerzonej
rzeczywistości znanej jako AR.
52
Rysunek 36: Odnaleziony wzorzec charakteryzuje wygenerowany sześcian jako rozszerzona rzeczywistość
Jednym z celów tej pracy, jest próba ulepszania wyznaczania pozy kamery w
przestrzeni 3W z wykorzystaniem kalibracji kamery. Jak widać na powyższym obrazku,
sześcian nie jest domyślnie renderowany w centrum obrazu. W pracy, dzięki kalibracji
kamery, udało się poprawić rendering na bliższy centrum wyszukiwanego wzorca. Aby to
było możliwe, należy zrozumieć, dlaczego początkowo nie renderował się on w centrum
wzorca.
Dzięki kalibracji kamery, do adaptera, którego zadaniem jest poprawne
przekształcanie oraz mapowanie na siebie macierzy projekcji (pochodzącej z OpenCV) oraz
macierzy pozy obiektu (pochodzącej z OpenGL), możemy przekazać jako macierz projekcji,
macierz kamery po kalibracji. Bez procesu kalibracji, macierz kamery była estymowana na
podsatawie homografii. Jak dowodzi działanie aplikacji, prawidłowa kalibracja kamery
dostarcza bardziej dokładnej macierzy projekcji. Sam sposób wykorzystania OpenGL do
renderowania AR w systemie operacyjnym Android OS jest dobrze oddany na poniższm
rysunku:
53
Rysunek 37: Architektura powiązań między OpenGL a Androidową aplikacją w celu wyświetlania AR
Aby adapter działał prawidłowo z nową macierzą projekcji powstałą w wyniku
procesu kalibracji kamery niezbędnych jest naniesienie pewnej korekty. Problemem jest
niezgodność modeli objektu w OpenGL oraz OpenCV. Aby tę niezgodność naprawić
wykorzystamy wzorzec projektowy adaptera, opisany wcześniej. Zakładamy, że mamy już
wyznaczone macierze rotacji oraz translacji. Poniżej prezentujemy algorytm działania
specyfinczego adaptera :
1. Niech R to macierz rotacji, t to wektor przesunięcia, natomiast A to macierz
parametrów zewnętrznych kamery (wszystkie te dane mamy dostarczona na bazie
kalibracji kamery). Wykonujemy transpozycję (mapowanie 2D-3D):
transpose([u, v, 1]) = A * [R | t] * transpose([X, Y, Z, 1])
2. Ze względu na odwrócone osie Y oraz Z w OpenGL musimy przekształcić naszą
macierz obiektu (pozy) :
modelView = [1 0 0 0] * [r00 r01 r02 t1]
[0 -1 0 0] [r10 r11 r12 t2]
[0 0 -1 0] [r20 r21 r22 t3]
[0 0 0 1] [0 0 0 1]
3. Teraz trzeba zadbać o poprawne wyliczenie macierzy projekcji. Problemem jest fakt,
że OpenCV dostarcza nam macierzy projekcji o wymiarze 3x3 i nie uwzględnia
bufora z, który jest uzwględniany przez OpenGL. Dlatego też OpenGl wymaga
wektora 4D. W celach normalizacji będziemy skalować pozyskaną macierz projekcji z
OpenCV, tak aby jej współczynniki były z przedziału <-1,1>. Tutaj width oraz height
to wymiar klatki, podczas gdy far oraz near to płaszczyzny obcinania.
projection =
[0 1 0 0] * [2*A00/width 0 -1+(2*A02/width) 0]
[-1 0 0 0] [0 2*A11/height -1+(2*A12/height) 0]
54
[0 0 1 0] [0 0 -(far+near)/(far-near) -2*far*near/(far-near)]
[0 0 0 1] [0 0 -1 0]
W kodzie aplikacji powyższy algorytm prezentuje się następująco : Mat expandedR;
Rodrigues(r, expandedR);
Mat Rt = Mat::zeros(4, 4, CV_64FC1);
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
Rt.at<double>(y, x) = expandedR.at<double>(y, x);
}
Rt.at<double>(y, 3) = t.at<double>(y, 0);
}
Rt.at<double>(3, 3) = 1.0;
//OpenGL ma odwrócone osie Y & Z
Mat reverseYZ = Mat::eye(4, 4, CV_64FC1);
reverseYZ.at<double>(1, 1) = reverseYZ.at<double>(2, 2) = -1;
//obrót o 90 stopni w celach wyświetalnia landscape
Mat rot2D = Mat::eye(4, 4, CV_64FC1);
rot2D.at<double>(0, 0) = rot2D.at<double>(1, 1) = 0;
rot2D.at<double>(0, 1) = 1;
rot2D.at<double>(1, 0) = -1;
Mat projMat = Mat::zeros(4, 4, CV_64FC1);
float far = 10000, near = 5;
projMat.at<double>(0, 0) = 2*scaledCameraMatrix.at<double>(0, 0)/imageWidth;
projMat.at<double>(0, 2) = -1 + (2*scaledCameraMatrix.at<double>(0, 2)/imageWidth);
projMat.at<double>(1, 1) = 2*scaledCameraMatrix.at<double>(1, 1)/imageHeight;
projMat.at<double>(1, 2) = -1 +
(2*scaledCameraMatrix.at<double>(1, 2)/imageHeight);
projMat.at<double>(2, 2) = -(far+near)/(far-near);
projMat.at<double>(2, 3) = -2*far*near/(far-near);
projMat.at<double>(3, 2) = -1;
Mat mvMat = reverseYZ * Rt;
projMat = rot2D * projMat;
Mat mvp = projMat * mvMat;
5.6 Badanie efektywności aglorytmów detekcji oraz wpływu kalibracji kamery na
algorytmy detekcji oraz generacje rzeczywistości rozszerzonej
Jednym z celów, dla których powstała opisywana aplikacja, jest możliwość badania
wpływu kalibracji kamery na algorytmy, które dokonują detekcji, deskrypcji oraz ekstrakcji
punktów charakterystycznych w obrazie. Z punktu widzenia działania algorytmu aplikacji,
fakt, czy kamera była poddana procesowi kalibracji jest obojętny. W przypadku kalibracji,
otrzymamy inne wyniki, ale przebieg działania programu będzie identyczny. To właśnie
pozwoli nam zweryfikować przydatność procesu kalibracji. Jeżeli kamera została uprzednio
skalibrowana, to przetwarzane klatki obrazu są kompensowane, tak, aby pozbawić klatki
efektów związanych ze zniekształceniem obrazu. Oczywiście, widać w interfejsie
użytkownika dzięki efektowi "poduszki" lub "rybiego oka", czy proces kalibracji przebiegł
pomyślnie.
55
Interfejs użytkownika został zaprojektowany tak, aby testowanie było czytelne,
intuicyjne i możliwie najwygodniejsze. Główną część okien zajmuje podgląd "na żywo" z
kamery z wrysowanym w prawym górnym rogu licznikiem klatek na sekundę oraz
rozdzielczością przetwarzania obrazu.
Niestety, ze względu na częste zmiany stanów Activity w systemie Android oraz
wynikającą z tego faktu sporą ilość kodu do wytworzenia, zdecydowano się na wspieranie
jedynie orientacji kamery w trybie landscape (poziomym). Nie wpływa to znacząco na
przyjemność pracy z aplikacją, ponieważ widok z kamery najczęściej ogląda się w orientacji
poziomej (szczególnie na mniejszych ekranach, ze względu na większą powierzchnię
widocznego podglądu).
Przycisk Clear w menu górnym służy do wyczyszczenia listy migawek
porównywanych do obrazu referencyjnego. Przycisk Add(n) powoduje dodanie na listę
obrazów porównywanych migawki obrazu kamery w momencie wciśnięcia. N zmienia się
dynamicznie i reprezentuje liczbę już zrobionych i zapamiętanych migawek służących do
porównania z obrazem zadanym. Przycisk Reference Pic powoduje zapamiętanie migawki
obrazu w momencie wciśnięcia przycisku, aby następnie możliwe było porównywane z nią
obrazów z listy.
Rysunek 38: Przykładowe działanie aplikacji do porównywania algorytmów
56
Rysunek 39: Wiadomość do użytkownika, gdy próbuje porównać obrazy bez ich poprzedniego dodania.
Aby uniknąć zbędnego, każdorazowego przeliczania cech dla obrazu refencyjnego,
należy robić to tylko raz, lub wtedy gdy się zmieni. Z tego powodu przeprowadzanie obliczeń
za pierwszym razem dla nowych obrazów trwa znacznie dłużej niż za każdym kolejnym.
Oznacza to, że na potrzeby testów należy wybrać sporą liczbę obrazów do zbioru trenującego.
Uśrednione wyniki będą lepiej reprezentowały zachowanie poszczególnych algorytmów.
Aby skutecznie testować, niezbędna jest możliwość zapamiętywania obrazów z listy i
obrazu referencyjnego. Pozwala to zmieniać ustawienia oraz skierować kamerę w dowolne
miejsce, a równocześnie mieć pewność, że zapamiętane obrazy zostaną poddane analizie. Co
ważniejsze, możemy dodawać do listy nowe obrazy nie tracąc wcześniejszych i wykorzystać
fakt optymalizujący, że obliczenia zostaną przeprowadzone tylko nowych obrazów. Ma to
istotny wpływ na sposób testowania algorytmów.
Przycisk Find Matches powoduje uruchomienie mechanizmu systemowego Android
znanego jako AsyncTask (jest to odpowiednik wątku). Powoduje to, że aplikacja przetwarza
współbieżnie, jest wielowątkowa i wykorzystuje liczne rdzenie procesorów z urządzeniami
OS Android. W trakcie obliczeń widać pasek postępu, który wskazuje ile obrazów z listy
zadanej zostało już porównanych. Daje to użytkownikowi pewność, że aplikacja działa, nie
jest zawieszona. Istotne jest, że AsyncTask pozwala na wykonywanie niezbyt długich,
trwających maksymalnie 30 sekund, operacji. Testy wykazały, że jest to czas wystarczający,
aby przy pierwszym przetwarzaniu porównać około pięćdziesięciu zdjęć. Należy zaznaczyć,
że liczba ta wystarcza, aby uznać testy za wiarygodne.
Z punktu widzenia programisty, AsyncTask posiada bardzo wygonde API. Jego
implementacja jest prosta. AsyncTask działa w sposób asynchroniczny, przez co, możemy
wykonywać równocześnie inne obliczenia, bez oczekiwania na wyniki. Bardzo istotny jest
brak konieczności samodzielnego zarządzania mutexami i innymi mechanizmami
synchronizacji wątków. Dzięki temu wątek główny wchodzący w interakcję z użytkownikiem
jest bezpieczny. Kod jest czytelny i krótki. Wyraźnie rozdziela logikę pomiędzy wątkami
roboczymi oraz głównym, dzięki czemu nie mieszają się one ze sobą.
57
Rysunek 40: AsyncTask w toku, komunikat postępu porównywania obrazów z listy ze wzorcem
W menu występują jeszcze 2 przyciski typu checkbox, które zachowują stan włączony
lub wyłączony. Pierwszym z nich jest przycisk Homography. Jeżeli jest włącznony,
dodatkowo wyznacza homografię między zadanymi obrazami przy wykorzystaniu
wspomnianej już funkcji OpenCV findHomography. Pozwala ona na najbardziej dokładne
stwierdzenie czy obrazy są identyczne. Drugim z nich jest przycisk Show Matches. Jeżeli po
przeliczeniu obrazów jest włączony, pozwala na wyświetlenie wszystkich punktów uznanych
za znalezione odpowiedniki. Łączy liniami w różnych kolorach te, które spełniły zadane przez
użytkownika kryterium dystansu i homografię (o ile ją zaznaczono).
Po zakończeniu analizy wszystkich zadanych obrazów i ich porównaniu z obrazem
refencyjnym, prezentowane jest okno dialogowe pokazujące najlepszy z dopasowanych
obrazów z listy oraz obraz referencyjny. Dodatkowo, pokazywane są nazwy algorytmów
użytych przy dokonywaniu porównania oraz czas jaki upłynął od rozpoczęcia operacji
porównywania (jest to czas liczony dla wszystkich obrazów z listy i obrazu zadanego).
58
Rysunek 41: Wynik najlepszego dopasowania dwóch klatek bez narysowanych złączeń
Rysunek 42: Wynik najlepszego dopasowania dwóch klatek z narysowanymi złączeniami
Kliknięcie na przycisk Dismiss powoduje niejawne zapisanie do pamięci telefonu
zdjęcia o nazwie zawierającej wspomniane parametry i nazwy algorytmów. Taki schemat
nazewniczy gwarantuje unikatowość. Pozwala na identyfikowanie obrazów z plikami
zawierającymi dane z przebiegu testów.
59
Istnieje również możliwość wyboru jednej z dostępnych rozdzielczości
przetwarzanego obrazu:
Rysunek 43: Lista rozwijana z dostępnymi do wyboru rozdzielczościami dla przetwarzanych obrazów z kamery
Można zmniejszać rozdzielczość w celu przyspieszenia obliczeń. Jest to następny typ
optymalizacji. Przy jego użyciu ponosimy jednak koszty związane ze stratą jakości obrazu.
Bardzo ważnym przyciskiem jest przycisk prowadzący do ustawień algorytmów znajduje
się na skraju prawej strony. Dzięki niemu mamy dostęp do list wyborów z radio buttonami
algorytmów. Wybieramy na każdym z trzech kroków jeden z dostępnych algorytmów. Dla
detekcji mamy do wyboru algorytm wyszukiwania punktów charakterystycznych oraz jego
odmianę typu classic, pyramid, grid i dynamic.
60
Rysunek 44: Dostępne do wyboru algorytmy detekcji cech obrazu wraz z ich modyfikacjami
Dla ekstrakcji punktów mamy do wyboru algorytm z listy oraz próg dystansu określający
czy punkty złączone można uznać za „dobre". Im niższa wartość, tym lepsze punkty zostaną
wybrane do weryfikacji identyczności obrazu. Ponadto można wybrać próg określający
minimalną liczbę punktów spełniających zadany dystans (nie większych od niego), która
pozwala uznać, że obrazy są identyczne. Im mniej punktów potrzeba, tym bardziej liberalny
jest wybrany detektor.
Rysunek 45: Dostępne do wyboru deskryptory cech wraz z pewnymi parametrami algorytmu szukania najlepszego
dopasowania
61
Na koniec możemy wybrać jeden z algorytmów łaczenia w pary punktów na obrazach,
jedną z metod używanych przy wyznaczaniu homografii oraz próg odrzucania zbiorów dla
algorytmu Ransac.
Rysunek 46: Dostępne do wyboru algorytmy łączenia dopasowań pomiędzy klatkami oraz sposób przeprowadzania
procesu łączenia klatek
6 Metodyka badań Rozdział ten przedstawia opis metodyk badań oraz metod testowania powstałej
aplikacji wraz z wynikami oraz ich omówieniem. Na wstępie należy określić, jakie zależności
zbadano wraz z uzasadnieniem dlaczego były one przedmiotem badań.
Dzięki aplikacji, która powstała w ramach pracy magisterskiej, zbadano następujące
zależności, dzięki którym można było określić optymalny wzorzec kalibrujący :
wpływ rozdzielczości kamery na jakość oraz szybkość procesu kalibracji
wpływ strategii kalibrującej (wykorzystanych w algorytmie kalibracji wariancji
dotyczących uproszczeń modelu kalibracji) na jakość oraz czas procesu kalibracji dla
każdego ze wzorców
wpływ kształtu wzorca na jakość oraz czas procesu kalibracji
miarę odporności wzorców na zmienne natężenie światła, rotację oraz skalę
Następnym obszarem badawczym jest zbadanie (przy ustalonej optymalnej strategii
dla każdego wzorca) zachowań poszczególnych algorytmów detekcji cech w obrazie, z
uwzględnieniem wpływu kalibracji kamery. Celem tego badania, było odkrycie, czy pewne
algorytmy można usprawnić, dzięki procesowi kalibracji. Dokonano tego poprzez zbadanie:
62
wpływu jakości kalibracji kamery (mierzonej jako błąd reprojekcji) na liczbę
wykrytych cech w obrazie
wpływu wzorca kalibrującego na liczbę cech wykrytych przez algorytmy
wpływu błędnie przeprowadzonego procesu kalibracji na działanie algorytmów
wpływu rozdzielczości kamery na liczbę przetwarzanych i wykrywanych cech
wpływu kalibracji kamery na czas przetwarzania klatki przez algorytmy
wpływu kalibracji kamery na czas przetwarzaniu cechy w obrazie
wpływu kalibracji kamery na czas przetwarzania cechy, która została wyznaczona
przez homografię
wpływu kalibracji kamery na jakość wyznaczonych cech w obrazie poprzez mierzenie
dystansu Hamminga między cechami obrazu
wpływu procesu kalibracji na procentowy udział cech wyznaczonych poprzez
homografię (wysokich jakościowo cech) spośród wszystkich wykrytych cech
Ostatnim obszarem badawczym, była próba odkrycia związku łączącego proces
kalibracji kamery z renderowaniem AR. Celem było wykazać wpływ kalibracji na
wyznaczanie pozy kamery w przestrzeni 3W. W tym celu zbadano :
Różnicę w odległości względnej (położenie w układzie świata) i bezwzględnej (cm)
od środka znacznika do renderowanego obiektu 3D przed i po procesie kalibracji
6.1.1 Metody testowania
Dzięki automatycznemu zapisywaniu plików o unikatowych nazwach, służących do
identyfikowania użytych algorytmów i wygenerowanych przez nie wyników, na karcie
pamięci urządzenia można zobaczyć jak działa aplikacja. Ponadto szybki dostęp do menu oraz
zapamiętanie obrazów i ustawień przyspiesza proces testowania, czyniąc go przejrzystym. Ze
względu na potrzebę przetwarzania wyników na komputerze PC, w celach wizualizacji
danych oraz wybrania najciekawszych wyników zdecydowano się na generowanie plików
csv. Aplikacja dostarcza danych w formacie csv i dzięki temu można je łatwo dalej
przetwarzać. Ze względu na problem z testowaniem generacji rzeczywistości rozszerzonej i
wpływu kalibracji na ten proces, zdecydowano się również wykonać kilka zrzutów ekranów
dowodzących zmian. Tutaj również dodatkowo generujemy pliki csv, mające na celu
zbadanie centryczności generowanych modeli AR.
Na bazie dziesięciu zdjęć przetestowane zostały wszystkie dostępne algorytmy.
Przyjmujemy, że trzy zdjęcia były zbliżone do zadanego. Dzięki temu możliwe było badanie
uzyskanych wyników pod kątem:
liczby uzyskanych punktów charakterystycznych,
jakości procesu kalibracji w zależności od strategii oraz wykorzystanych wzorców
szybkości oraz jakości działania algorytmów przu zmianach wynikających z
przeprowadzonego procesu kalibracji kamery
szybkości oraz jakości działania algorytmów przy zmianie rozdzielczości kamery
liczby punktów spełniających zadanych dystans,
liczby punktów będących wynikiem szukania homografii,
średniego czasu przetwarzania jednego zdjęcia.
63
Aby testy były powtarzalne wybraliśmy:
kilka scen z mieszkania bogatych w punkty charakterystyczne,
kilka obrazów z mieszkania ubogich w punkty charakterystyczne (aby zbadać jakość
znalezionych punktów),
kilka scen z mieszkania, bardzo bogatych w cechy.
Korzystne jest, że po podpięciu smartfona do laptopa można przeglądać dobrze
nazwane pliki i porównywać wyniki testów, które są powtarzalne.
Istotnym jest, że ze względu na niemożliwość powtórzenia testów z pracy
inżynierskiej będziemy mogli testować obrazy uprzednio skalibrowane oraz nie poddane
kalibracji. Dzięki temu zasymulujemy odtworzenie testów na bazie tych samych scen. W ten
sposób porównamy działanie algorytmów bez procesu kalibracji kamery jak również i
poddanych kompensacji zniekształceń.
Zgodnie z wcześniej przyjętymi założeniami, testujemy tylko wybrane algorytmy,
które w pracy inżynierskiej zostały uznane za najlepsze. Wynikiem testowania aplikacji
będzie analogiczna metryka w postaci tabelarycznej ze wskazaniem optymalnych algorytmów
pod kątem jakości przetwarzania, szybkości oraz ogólnego działania wraz z uwagi i
wnioskiami wynikającymi z zebranych danych.
6.2 Wyniki testów
Należy wróżnić 3 etapy testowania :
testowanie procesu kalibracji
testowanie wpływu kalibracji na generację rzeczywistości rozszerzonej AR
testowanie wpływu kalibracji na działanie algorytmów rozpoznawania cech oraz
wyszukiwania podobnych obrazów
Opiszemy po kolei poszczególne wyniki testów.
6.2.1 Wyniki testowania procesu kalibracji
Na wstępie przedstawię kilka wniosków, dotyczących wykorzystanych wzorców
kalibracji, które mają znaczenie na proces kalibracji.
Zaskakującym, okazuje się być fakt, że wzorzec symetrycznych kół, posiada
nieznaczną odporność na przedstawianie go w ujęciu kamery. Poniżej mamy przykład, gdy
wzorzec został wykryty w scenie, ale niepoprawnie.
64
Rysunek 47: Widoczne niepoprawne wykrycie wzorca (w prawym rzędzie 3-4 mamy ukośne połączenie)
W wyniku testów okazało się, że wzorzec symetrycznych kół nie sprawdza się, gdy
mamy niezbyt jasne tło, lub ostry kąt widzenia kamery, to zbyt łatwo otrzymać zakłamane
wyniki. Jest to spowodowane dużą czułością detektorów na ten wzorzec i przez to łatwo
wprowadzić ujęcie wzorca kalibrującego, które będzie outlinerem i spowoduje niepoprawną
kalibrację kamery. Ze wszystkich trzech wzorców ten wypada zdecydowanie najgorzej. W
przypadku wykrycia takiego outlinera i zaburzenia procesu kalibracji, średni błąd reprojekcji
jest o rząd wielkości gorszy niż w przypadku pozostałych wzorców. Warto niemniej jednak,
zbadać, jak wpływa kalibracja z użyciem tego wzorca na algorytmy oraz generację AR.
65
Rysunek 48: Uzyskany z symetrycznym wzorcem kalibrującym średni błąd reprojekcji rzędu 10-krotnie większego
niż wskazujący na poprawną kalibrację.
Wzorzec szachownicy oraz wzorzec asymetrycznych kół są zdecydowanie bardziej
odporne na zakłócenia w obrazie i tło. W trakcie procesu testowania nie udało się uzyskać 10-
krotnie gorszych wyników zależnych od otoczenia.
Rysunek 49: Efekt niepoprawnej kalibracji kamery tzw. efekt poduszki
66
Warto nadmienić, że w przypadku wzorca szachownicy mamy znacząco wolniejszy
proces przetwarzania obrazu. Dla rozdzielczości 320x240 pikseli różnica względem wzorców
kolistych jest niewidoczna, ale dla rozdzielczości 800x480 pikseli jest to już znacząca
różnica, która wpływa na proces kalibracji. Dla rozdzielczości 800x480 pikseli uzyskaliśmy
średnio :
dla wzorców kolistych - szybkość przetwarzania około 20 klatek / sekunda
dla wzorca szachownicy - szybkość przetwarzania około 5 klatek / sekunda
Należy podkreślić, iż nie jest to czas potrzebny na wykonanie procesu kalibracji, lecz
czas swobodnego przetwarzania obrazu przez kamerę w trakcie analizy sceny i wyszukiwania
wzorca. Znaczenie tego eksperymentu jest takie, że dla użytkownika końcowego wzorce
koliste stwarzają wrażenie ciągłego przetwarzania obrazu, podczas gdy szachownica
powoduje efekt klatkowania.
Ciekawą zależnością jest wpływ rozdzielczości klatek na jakość procesu kalibracji.
Zgodnie z oczekiwaniami, im mniejsza rozdzielczość, tym proces kalibracji jest szybszy, ale
jego dokładność jest gorsza. Obrazuje to następujący wykres:
Zgodnie z powyższym wykresem, z punktu widzenia procesu kalibracji rozdzielczość
analizowanych klatek ma niebagatelne znaczenie. Dlatego też, dla dalszych testów
wykonywaliśmy kalibrację kamery z obrazów 800x480 pikseli. Ogólnie, warto zawsze
rozpatrywać proces kalibracji z największą dostępną dla urządzenia rozdzielczością, gdyż
utrata jakości kalibracji spowodowana zmniejszaniem rozdzielczości jest znacząca. Dzieje się
tak dlatego, że przy mniejszej rozdzielczości, dla każdego błedu w dopasowaniu narożnika,
różnica w pikselach będzie względnie większa. Dla porównania prezentujemy wykresy
czasów kalibracji pojedynczej klatki w zależności od wybranej rozdzielczości kamery :
0
0,5
1
1,5
2
2,5
3
320x240 640x480 800x480
Błą
d r
ep
roje
kcji
rozdzielczość
67
Jak widać, zysk czasowy na przetwarzaniu jednej klatki nie jest znaczący. Oczywiście, czas
przetwarzania klatki rośnie wraz z rozdzielczością ponieważ do przetworzenia mamy więcej
pikseli. Biorąc pod uwagę fakt, że w procesie kalibracji bierze udział około 10 - 20 klatek, to
łączny zysk czasowy wyniesie około 1 sekundy. W zamian za kalibrację kamery szybszą o 1
sekundę, która jest niezauważalna dla człowieka, pogarszamy ponad dwukrotnie jakość
procesu. Stąd wniosek, że należy wybierać możliwie największą rozdzielczość.
Następnym wyzwaniem przy projektowaniu optymalnego procesu kalibracji jest wyznaczenie
najlepszej strategii kalibrującej dla każdego ze wzorców kalibrujących. W tym celu
przeprowadziliśmy badania, których celem było wyszukanie odpowiednich strategii poprzez
obliczenie średniego błędu reprojekcji oraz czasów kalibracji klatki. Najlepsza strategia
będzie cechowała się tym, że ma możliwie niski średni błąd reprojekcji oraz możliwie szybko
przetwarza klatkę. Na potrzeby testów powtarzaliśmy 10-krotnie każdą strategię kalibrującą,
aby uzyskać uśrednione wyniki pozbawione zakłóceń.
Przed przystiąpieniem do mówienia wyników testów, warto przypomnieć, w jaki sposób
działają algorytmy kalibracji. Opisane funkcje wykorzystują model kamery małoobrazkowej.
Dla przypomnienia klatka (widok) powstaje jako projekcja punktów pochodzących z
przestrzeni 3D na płaszczyznę 2D z wykorzystaniem transformacji perspektywicznej, co
można zapisać jako :
lub w postaci macierzowej jako:
0
0,02
0,04
0,06
0,08
0,1
0,12
0,14
0,16
320x240 640x480 800x480
Cza
s p
rze
twar
zan
ia k
latk
i [s]
Rozdzielczosć
68
gdzie :
są współrzędnymi 3D w układzie świata
są współrzędnymi 2D projekcji w pikselach
jest macierzą kamery lub inaczej, jej parametrów wewnętrznych
jest punktem skupienia, zazwyczaj znajdującym się w centrum
obrazu
są długościami ogniskowych kamery wyrażonymi w pikselach
Zatem, jeżeli obraz pochodzący z kamery jest skalowany przez jakąś stałą, wszystkie
pozostałe parametry kamery również muszą podlegać skalowaniu przez tę samą stałą.
Macierz kamery nie zależy w żaden sposób od wyświetlanej sceny, gdyż jest to macierz
parametrów wewnętrznych kamery. Jest zatem reużywalna, pod warunkiem niezmienności
długości ogniskowych. W przypadku kamer wbudowanych w urządzenia mobilne, właśnie
taki przypadek ma miejsce. Połączona macierz rotacji oraz translacji jest nazywana
macierzą zewnętrzną kamery. Używa się jej, aby opisać ruch kamery dookoła statycznej
sceny lub vice versa, ruch sceny względem statycznej kamery. Zatem macierz
przeprowadza współrzędne punktu do współrzędnych systemu, z ustalonym
położeniem kamery. Taka transformata jest równoważna poniższej (gdy ):
Rzeczywiste soczewki w kamerach mają pewne zniekształcenia, głównie radialne i
tangensoidalne. Zatem należy zmodyfikować nasze równania i rozszerzyć je do następujących
:
69
, , , , , oraz są współczynnikami zniekształceń radialnych.. oraz są
współczynnikami tangensoidalnych zniekształceń. Współczynniki wyższego rzędu nie są
uwzględniane przez algorytmy. Zatem wektor współczynników zniekształceń kamery jest
następujący :
Zatem, jeżeli wektor zawiera tylko 4 elementy oznacza to, że . Współczynniki
zniekształceń nie zależą od wyświetlanej sceny. Dlatego też, niekiedy są zaliczane do
parametrów wewnętrznych kamery. Są również niezmienne względem rozdzielczości kamery.
Jeżeli kamera była kalibrowana przy rozdzielczości 320 x 240 to, takie same efekty uzyskamy
kalibrując kamerę obrazami o rozdzielczości 640 x 480 pozyskanymi z tej samej kamery.
Jednakże parametry , , , oraz muszą być odpowiednio przeskalowane.
Opisane poniżej funkcje działają zgodnie z następującymi założeniami :
Przeprowadzają projekcję punktów 3D na płaszczyznę mając dane parametry
wewnętrzne i zewnętrzne kamery
Obliczają parametry zewnętrzne kamery mając dane parametry wewnętrzne
kamery oraz kilka punktów 3D oraz ich projekcji.
Szacują parametry wewnętrzne oraz zewnętrzne kamery mając danych kilka
ujęć znanego i zdefiniowanego wzorca kalibrującego (każdy widok jest
opisany mapowaniem odpowiednich punktów 3D-2D i zależnościami
pomiędzy tymi punktami).
Szacują pozycję względna oraz orientację kamery, tak aby osie optyczne
kamery były równoległe do siebie.
Metoda o nagłówku: double calibrateCamera(objectPoints, imagePoints, pointCounts,
imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, flags=0)
Metoda ta oblicza parametry wewnętrzne i zewnętrzne kamery, otrzymując na wejściu kilka
zdjęć z różnych perspektyw danego i znanego wzorca kalibrującego.
Opis parametrów :
objectPoints – jest to lista zawierająca listy punktów należących do wzorca
kalibrującego oraz określonych we współrzędnych należących do wzorca
70
kalibrującego kamery. Zewnętrzna lista zawiera tyle list, ile jest dostarczonych zdjęć
wzorca. Jeżeli wszystkie ujęcia wzorca będą identyczne lub zbliżone do siebie,
wówczas każda z list punktów będzie do siebie podobna lub identyczna. Dlatego
ważne jest, aby ujęcia były zbierane pod różnymi kątami w celu zapewnienia
różnorodności. Punkty są 3D, ale ponieważ należą do układu współrzędnych wzorca,
to jeżeli jest on planarny, to można przyjąć, że Z = 0.
imagePoints – jest to lista zawierająca listy punktów będących projekcjami wzorca
kalibrującego. Rozmiar listy imagePoints musi być identyczny jak rozmiar listy
objectPoints dla każdej listy w imagePoints oraz objectPoints.
point_counts – jest to lista zawierająca zliczoną ilość wystąpień punktów w każdym
ujęciu wzorca. Typowo jest to lista jednakowych elementów, które wynoszą tyle ile
liczba punktów kluczowych we wzorcu.
imageSize – rozmiar obrazu użyty do zainicjalizowania macierzy wewnętrznej
kamery.
cameraMatrix – wynikowa macierz 3x3 liczb rzeczywistych będąca macierzą
kamery .
Jeżeli flaga CV_CALIB_USE_INTRINSIC_GUESS lub
flaga CV_CALIB_FIX_ASPECT_RATIO są zdefiniowane, to niektóre lub
wszystkie ze współczynników fx, fy, cx, cy muszą być zdefiniowane przed
wywołaniem metody.
distCoeffs – wynikowy wektor współczynników zniekształceń kamery
zawierający 4, 5, lub 8 elementów.
rvecs – wynikowa macierz rotacji obliczona dla każdego ujęcia wzorca. Oznacza to,
że każdy k-y wektor rotacji występuje wspólnie z wektorem przesunięcia, dzięki
czemu można przeprowadzić wzorzec kalibrujący z jego własnego układy
współrzędnych do współrzędnych świata, czyli rzeczywistego położenia wzorca w
każdym k-tym ujęciu.
tvecs – wynikowa macierz przesunięcia zawierająca wektory przesunięć oszacowane
dla każdego ujęcia wzorca.
flags – różne flagi, które mogą tworzyć kombinację, wyjaśnimy znaczenie
poszczególnych flag :
o CV_CALIB_USE_INTRINSIC_GUESS oznacza, że macierz kamery zawiera
początkowe poprawne wartości dla fx, fy, cx, cy które podlegają następnie
optymalizacji. W przeciwnym wypadku, (cx, cy) jest ustawiony jako środek obrazu,
natomiast wartości ogniskowych są wyliczane z wykorzystaniem metody
najmniejszych kwadratów.
o CV_CALIB_FIX_PRINCIPAL_POINT ustawia niezmienną wartość dla punktu
skupienia, która nie podlega optymalizacji. Pozostanie ustawiona jako środek
obrazu. CV_CALIB_FIX_ASPECT_RATIO wówczas funkcja wylicza jedynie
wartość ogniskowej fy . Stosunek fx/fy pozostaje niezmienny. Jeżeli nie użyto flagi
CV_CALIB_USE_INTRINSIC_GUESS wówczas nie są wyliczane ani fx ani fy,
a jedynie ich stosunek.
o CV_CALIB_ZERO_TANGENT_DIST ustawia tangensoidalne zniekształcenia
kamery jako zera i tak już zostaje.
o CV_CALIB_FIX_K1,...,CV_CALIB_FIX_K6 zadany k-ty parametr zniekształceń
71
radialnych nie podlega zmianie w trakcie optymalizacji.
o CV_CALIB_RATIONAL_MODEL pozwala pozyskać 8 parametrów
zniekształceń, zamiast 5.
criteria – specyficzne kryteria zatrzymania algorytmu optymalizacyjnego.
term_crit – analogicznie jak criteria.
Opisywana funkcja wylicza wewnętrzne i zewnętrzne parametry kamery dla każdej
dostarczonej klatki. Algorytm opiera się na algorytmach Zhanga i Bougeta. Współrzędne
3D oraz ich odpowiedniki 2D muszą być dostarczone dla każdej projekcji. Można tego
dokonać pokazując kamerze wzorzec, bogaty w cechy. Algorytm działa następująco:
1. Oblicz początkowe parametry wewnętrzne kamery.
2. Oszacuj początkową pozę kamery, znając parametry wewnętrzne kamery.
3. Wykonaj globalną optymalizację Levenberg-Marquardt aby zminimalizować błąd
reprojekcji. Błąd reprojekcji jest to suma pierwiastków ze wszystkich różnic w
odległości pomiędzy cechami występującymi we wzorcu oraz w projekcji.
Funkcja zwraca średni błąd projekcji jako miarę jakości procesu kalibracji. Im mniejszy
błąd tym lepsza kalibracja.
Wyniki testów ze względu na jakość kalibracji (średni błąd reprojekcji), dla wzorca
szachownicy obrazuje poniższy wykres :
Analizując powyższy wykres widzimy, że najlepszą jakościowo strategią jest połączenie
strategii PP, TD, FR, K4, K5. Przyczyną tego jest fakt, że punkt główny PP nie powinien
zmieniać swojego położenia i powinien być w środku obrazu, parametry K4 i K5 mają
znikomy wpływ na korekcję zniekształceń względem parametrów K1 i K2, a dodatkowo FR
czyli niezmienna proporcja między bokami obrazu również nie powinna ulegać zmianie.
0
0,2
0,4
0,6
0,8
1
1,2
1,4
Błą
d r
ep
roje
kcji
Startegia kalibracji
72
Dzięki temu mamy ograniczoną liczbę parametrów od których zależy proces kalibracji i
możemy je dokłądniej wyznaczyć, traktując je w izolacji od pozostałych. Inną wartą
rozważenia startegią jest niemodyfikowanie oryginalnego algorytmu kalibrującego o żadne
założenia. Pozostałe strategie przekraczają próg wartości 1.0 dla średniego błędu reprojekcji,
który potwierdza wysoką jakość kalibracji.
Dla wzorca szachownicy oraz powyższych strategii przeprowadziliśmy również test
szybkości przetwarzania klatki w trakcie działania algorytmu kalibracji :
Analiza wykresu szybkości przetwarzania klatki w algorytmie kalibrującym pokazuje, że
najszybszą startegią jest ustalenie niezmiennej wartości dla parametrów K1 lub K2. Niestety
poprzedni wykres pokazuje, że ustalenie K1 lub K2 jako niezmiennej w procesie kalibracji
obniża jakość procesu, ponieważ w korekcji zniekształceń parametry K1 i K2 mają większą
wagę od pozostałych Kn. Również szybko działa startegia AR - o ustalonym i niezmiennym
stosunku ogniskowych, ale jej jakość z poprzedniego wykresu, jest poniżej progu akceptacji.
Pośród startegii PP, TD, FR, K4, K5 lub algorytmu bez żadnych modyfikacji szybszy i
dokładniejsza jest strategia PP, TD, FR, K4, K5. Oznacza to, że jest to optymalna strategia w
przypadku kalibracji kamery z wykorzystaniem wzorca szachownicy.
Dla wzorca asymetrycznych kół przeprowadziliśmy identyczne badania. Poniżej
prezentujemy wykres jakościowy algorytmu kalibracji w zależności od wykorzystanej
startegii :
0
0,02
0,04
0,06
0,08
0,1
0,12
0,14
Cza
s p
rze
twar
zan
ia k
latk
i [s]
Strategia kalibrująca
73
Po uśrednieniu wyników, widzimy, że identyczna startegia PP, TD, FR, K4, K5 daje znacząco
najlepsze rezultaty jakościowe w przypadku wzorca asymetrycznych kół. Uzyskany średni
błąd reprojekcji jest zdecydowanie niższy niż w przypadku zastosowania pozostałych
strategii. Wytłumaczenie jest analogiczne jak w poprzednim przypadku testowym z
wykorzystaniem wzorca szachownicy.
Poniżej prezentujemy wykres zależności wykorzystanej strategii i czasu przetwarzania
pojedynczej klatki :
Analiza czasów przetwarzania pojedynczej klatki wskazuje na zasadność korzystania ze
strategii PP, TG, K1, K2 oraz K4, K5. Porównując jednakże uzyskane na poprzednim
0 0,05
0,1 0,15
0,2 0,25
0,3 0,35
0,4 0,45
0,5 Śr
ed
ni b
łąd
re
pro
jekc
ji
Strategia kalibrująca
0
0,02
0,04
0,06
0,08
0,1
0,12
0,14
0,16
0,18
Cza
s p
rze
twar
zan
ia k
latk
i [s]
Strategia kalibrująca
74
wykresie jakościowe wyniki dla wspomnianych strategii dochodzimy do wniosku, że są one
co najmniej 20% gorsze jakościowo niżli startegia PP, TD, FR, K4, K5. Dla tej startegii czas
przetwarzania klatki jest wysoki, ale biorąc pod uwagę fakt, że w procesie kalibracji udział
bierze około 15 klatek, to sumaryczna starta czasowa wynosi około 0,5 s względem
najszybszej startegii K1, która to różnica jest pomijalna.
Zatem analogicznie, jak w przypadku wzorca szachownicy, w przypadku wzorca
asymetrycznych kół najlepszą startegią kalibrującą jest startegia PP, TD, FR, K4, K5.
Analogicznie poniżej prezentujemy wykres zależności jakości procesu kalibracji od
wykorzystanej startegii w przypadku wzorca symetrycznych kół :
Co ważne, wspomnieliśmy już poprzednio, że wzorzec symetrycznych kół, nie jest odporny
na gwałtwone zmiany w oświetleniu obrazu lub tła. Widać to w przypadku prawie o rząd
wielkości większego błędu reprojekcji dla strategii uznających za stałe i wynoszące 0
parametry korekcyjne K4, K5 oraz K2, K1, K3, K4, K5.
Poniżej prezentujemy wykres pozbawiony tych strategii, aby zwiększyć czytelność i
wyszukać optymalną strategię:
0
2
4
6
8
10
12
Błą
d r
ep
roje
kcji
Strategia kalibrująca
75
Analizując powyższy wykres widzimy odmienny trend niż w przypadku wzorców
asymetrycznych kół oraz szachownicy. W przypadku wzorca symetrycznych kół najlepsze
strategie to te powiązane ze strategią AR. W szczególności najlepiej pod względem
jakościowym sprawdza się strategia AR, PP. Należy tutaj nadmienić, że w przypadku
symetrycznego wzorca kół, pominięcie zniekształceń tangensoidalnych (TD) ma znaczący i
niekorzystny wpływ na kalibrację. Wynika to z faktu, że wzorzec symetryczny przy ujęciach
klatek o zmiennym kącie może fałszywie rozpoznać narożniki kół. Wówczas założenie, że nie
istnieją tangensoidalne zniekształcenia się nie sprawdza i powoduje gorszą jakościowo
kalibrację.
Poniżej prezentujemy wykres zależności wykorzystanej strategii i czasu przetwarzania
pojedynczej klatki :
Analiza wykresu pokazuje, że startegie AR, TD, AR + PP są najszybsze, jeżeli chodzi o
przetwarzanie obrazu. Strategie zawierające jako składową strategię AR miały najwyższą
jakość i są najszybsze. Dlatego też uznajemy, że do kalibracji kamery z wykorzystaniem
wzorca symetrycznego wykorzystywać będziemy startegię AR, PP.
0
0,1
0,2
0,3
0,4
0,5
0,6
[] [IG] [AR] [PP] [TD] [AR, PP] [PP,TD,FR, K4, K5]
Błą
d r
ep
roje
kcji
Strategia kalibrująca
0
0,05
0,1
0,15
0,2
0,25
Cza
s p
rze
twar
zan
ia k
latk
i [s]
Strategia kalibrująca
76
Po przeprowadzeniu testów wykorzystując wszystkie strategie, na wszystkich wzorcach
kalibrujących, należy porównać ze sobą optymalne strategie dla każdego wzorca. Porównamy
je ze względu na jakość kalibracji oraz szybkość przetwarzania klatek. Poniżej prezentujemy
wykres obrazujący porównanie jakościowe optymalnych algorytmów dla różnych wzorców
Wyraźnie widać, że wzorce kołowe dają wyższą jakość kalibracji kamery. Najlepszy
jakościowo okazuje się być wzorzec asymetrycznych kół. Dodatkowo, wzorzec asymetryczny
jest bardziej odporny na zmiany oświetlenia oraz kąta widzenia kamery względem wzorca
symetrycznego. Wzorce kołowe dają lepszą jakość kalibracji od wzorca szachownicy,
ponieważ różnica między punktami wyliczonymi z modelu (wzorca) a wyznaczonymi na
podstawie parametrów zewnętrznych kamery będzie dla nich mniejsza. Jest tak dlatego, że w
sensie klasycznego detektora Harrisa, koła tworzą wierzchołki i zmiana w każdym kierunku
poza przekątną daje praktycznie pewność, że nie pomylimy się przy wyznaczaniu
narożników, podczas gdy w przypadku szachownicy, możemy uznać punkt krawędzi za
narożnik. Warto nadmienić, że wszystkie optymalne strategie gwarantują wysoką jakość
kalibracji (błąd kalibracji jest mniejszy od jedności w każdym przypadku).
Poniżej prezentujemy wykres porównujący czasy przetwarzania klatki dla optymalnych
startegii dla wybranych wzorców :
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
[SYMMETRIC CIRCLE - AR, PP] [ASSYMETRIC CIRCLE PP,TD,FR, K4, K5]
[CHESSBOARD PP,TD,FR, K4, K5]
Błą
d r
ep
roje
kcji
Optymalna strategia dla wzorców
77
Jeżeli porównywać czasy przetwarzania klatki przez optymalne algorytmy dla różnych
wzorców, to widzimy, że różnice czasowe, nie są znaczące. Najlepiej wypadł symetryczny
wzorzec kołowy. Wzorzec asymetryczny jest jednakże jedynie o 0,05s wolniejszy w
przypadku przetwarzania klatki. Nie jest to istotna różnica, ponieważ w procesie kalibracji
przy 15 klatkach daje to nam 0,75 s co nie jest zauważalne dla użytkownika końcowego.
Podsumowując, analiza przeprowadzonych badań pokazuje optymalne startegie kalibrujące
dla każdego ze wzorców. Można wyciągnąć wniosek, że czasy przetwarzania klatek nie
różnią się znacząco ani między wzorcami, ani między poszczególnymi stategiami i są mniej
istotne, w porównaniu do jakości kalibracji. Warto wspomnieć, że wzorzec symetrycznych
kół okazał się być najmniej odpornym na zmiany w oświetleniu oraz tle obrazu. Ze względu
na jego wysoką czułość, należy cenić go niżej niż dwa pozostałe. W przypadku szachownicy,
mamy kosztowny proces analizy obrazu, co jak już wspomniano jest widoczne dla
użytkownika końcowego (utrata około 5 - 10 klatek FPS) i nie powoduje płynności w
przetwarzaniu obrazu. Najmniej problematyczny okazał się być wzorzec asymetrycznych kół.
Badania pokazują, że jest to optymalny wzorzec. W dalszych testach będziemy już
wykorzystywać jedynie optymalne strategie dla każdego wzorca oraz dodatkowo w celach
eksperymentalnych zbadamy jak zniekształcona (niepoprawna) kalibracja z użyciem wzorca
symetrycznych kół o błędzie reprojekcji rzędu 10 jednostek wpływa na działania algorytmów
opartych o cechy obrazu.
6.2.2 Wyniki testowania wpływu procesu kalibracji na detekcję, deskrypcję cech w
obrazie oraz łączenie podobnych scen
Testowane są jedynie następujące algorytmy:
FAST
ORB
STAR
HARRIS
0
0,02
0,04
0,06
0,08
0,1
0,12
0,14
[SYMMETRIC CIRCLE - AR, PP] [ASSYMETRIC CIRCLE PP,TD,FR, K4, K5]
[CHESSBOARD PP,TD,FR, K4, K5]
Cza
s p
rze
twar
ania
kla
tki [
s]
Optymalna strategia dla wzorców
78
GFTT
Jest tak dlatego, że zostały one zbadane w ramach pracy inżynierskiej oraz uznane za
najlepsze pod względem jakości oraz szybkości przetwarzania cech w obrazach na
urządzeniach mobilnych.
Dodatkowo, do wyznaczanie deskryptorów cech wykorzystamy również zbadany w ramach
pracy inżynierskiej algorytm ORB.
Do ekstrakcji cech oraz łączenia ich ze sobą między poszczególnymi klatkami wykorzystamy
algorytm LMeDS - Least Median of Squares.
Na potrzeby testów wybrano 3 sceny rzeczywiste. Jedna z nich jest uboga pod względem
występujących w obrazie cech, jedna zawiera średnią liczbę cech a ostatnia jest bogata w
punkty charakterystyczne. Dla każdej ze scen wykonamy obowiązkowo testy :
bez kalibracji kamery
z optymalną strategią kalibrującą z wykorzystaniem wzorca szachownicy
z optymalną strategią kalibrującą z wykorzystaniem wzorca symetrycznych kół
z optymalną strategią kalibrującą z wykorzystaniem wzorca asymetrycznych kół
Dodatkowo, aby zbadać wpływ niewłaściwej kalibracji kamery wykonamy serię testów dla
jednej ze scen z wyraźnie niepoprawnie przeprowadzoną kalibracją. Analogicznie aby zbadać
wpływ rozdzielczości kamery przy procesie kalibracji na dalszą jakość przetwarzania obrazu
wykonamy serię testów na jednej ze scen.
Poniżej prezentujemy sceny, które służyły jako testowe:
Scena z niewielką liczbą cech :
Scena ze średnią liczbą cech:
79
Scena z dużą liczbą cech :
Dla każdego algorytmu oraz typu kalibracji będziemy analizować następujące wyniki testów:
Liczbę wykrytych w obrazie cech, złączeń oraz złączeń wynikających z homografii
Średni dystans Hamming pomiędzy wykrytymi w obrazie cechami
Czas przetwarzania klatki, punktu kluczowego, cechy złączonej
Dodatkowo, dla każdej sceny pokażemy jak wyglądały obrazy referencyjne wraz z wykrytymi
duplikatami w ramach serii przetwarzanych scen. Dzięki temu, będziemy mogli zobaczyć, czy
algorytmu poprawnie złączył i wykrył w bazie wiedzy zadaną scenę.
Zacznijmy od analizy pierwszej sceny:
80
Poniżej prezentujemy wykres dla algorytmu GFTT
Analiza powyższego wykresu pokazuje, że istnieje znaczący i pozytywny wpływ kalibracji
kamery na liczbę złączonych i wysokich jakościowo (pochodzących z wyznaczenia
homografii) cech obrazu. Najlepiej algorytm działał w przypadku kalibracji kamery z
wykorzystaniem wzorca asymetrycznego koła, gdzie błąd reprojekcji wyniósł 0.41. Można
więc wysnuć hipotezę, że kalibracja kamery zwiększa jakość wykrywanych cech, skoro
większy ich procent zostaje wyznaczony w wyniku homografii. Wykonano dalsze testy, które
mają na celu weryfikację tej hipotezy
Poniżej prezentujemy wykres obrazujący jakość uzyskanych cech obrazu :
0
20
40
60
80
100
120
140
160
180
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Licz
ba
wyk
ryty
ch c
ech
Typ kalibracji
Porównanie działania algorytmu GFTT
Punkty charakterystyczne
Złączone punkty charakterystyczne
Punkty homografii
12,8
13
13,2
13,4
13,6
13,8
14
14,2
14,4
14,6
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Dys
tan
s h
amm
inga
Typ kalibracji
Porównanie działania algorytmu GFTT
81
Analiza wykresu pokazuje, że wpływ kalibracji na jakość uzyskanych cech obrazu jest
pozytywny. Najlepsze efekty uzyskujemy stosując kalibrację z wykorzystaniem
asymetrycznych kół. Wykres ten potwierdza wcześniejszą hipotezę, że dzięki kalibracji
zmniejsza się dystans Hamminga między cechami obrazu. Co ciekawe, kalibracja wykonana
ze wzorcem szachownicy (o błędzie reprojekcji 0.71) pozwala uzyskać mniejszy dystans
Hamminga między cechami obrazu niż kalibracja o mniejszym błędzie reprojekcji z
wykorzystaniem symetrycznych kół. Przyczną tego zjawiska jest fakt, że błąd reprojekcji nie
jest jedyną miarą świadczącą o jakości kalibracji kamery. Dodatkowo, wystarczy aby w
podatnym na wykrywanie błędnych cech wzorcu symetrycznych kół wzięto pod uwagę kilka
obserwacji odstających (ang. outliers), których występowanie nie będzie tak częste we wzorcu
szachownicy, a wówczas średni dystans hamminga będzie wyższy, jak na powyższym
wykresie. Wniosek jest następujący : wzorzec szachownicy ma mniejsze odchylenie
standardowe względem symetrycznych kół pod względem dystansu hamminga.
Czas przetwarzania cech:
Analiza wykresu dowodzi również pozytywnego wpływu na szybkość przetwarzania klatki.
Najlepiej działa algorytm po wykorzystaniu kalibracji z wykorzystaniem symetrycznych kół.
Dzieje się tak dlatego, że wzorzec symetrycznych kół wykrywa najmniejszą liczbę cech,
przez co pomimo wysokiego czasu przetwarzania pojedynczej cechy, sumarycznie jest
najszybszy.
Poniżej wykres dla algorytmu GFTT prezentujący czas przetwarzania pojedynczej cechy
obrazu:
680
690
700
710
720
730
740
750
760
770
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Cza
s p
rze
twar
zan
ia k
latk
i [m
s]
Typ kalibracji
82
Analiza wykresu pokazuje, że po przeprowadzeniu procesu kalibracji wzrasta czas
przetwarzania cechy w obrazie. Istotą tego zjawiska jest to, że dzięki kalibracji, znamy model
porównawczy, a ponieważ cechy są przyrównane do tego modelu, to zajmuje to więcej czasu.
Najmniejszy wzrost jest przy wykorzystaniu wzorca asymetrycznego.
Pozostała jeszcze analiza czasu przetwarzania złączonego w wyniku procesu homografii
punktu charakterystycznego :
Analiza wykresu pokazuje, że czas przetwarzania wykorzystanych w homografii cech maleje
po wykorzystaniu algorytmu kalibracji. Wyniki mają swoje uzasadnienie, ponieważ cechy
mają wyższą jakość (dzięki kalibracji), a większość algorytmów rozpatruje tylko N
najlepszych cech obrazu, to pośród N najlepszych cech, dokładne i długotrwałe sprawdzenia,
czy cecha będzie brała udział w złączeniu obrazów następuje dla mniejszej liczby cech, co
przyspiesza proces. Największy zysk czasowy uzyskujemy z wykorzystaniem wzorców
kołowych.
Dla tej samej sceny prezentujemy wyniki dla algorytmu FAST :
0
1
2
3
4
5
6
7
8
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Cza
s p
zetw
arza
nia
ce
chy
[ms]
Typ kalibracji
0
10
20
30
40
50
60
70
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Cza
s p
rze
twar
zan
ia z
łącz
on
ej c
ech
y [m
s]
Typ kalibracji
83
Przeprowadzimy analizę analogicznych danych jak w przypadku powyżej i będziemy tak
postępować dla każdego algorytmu oraz każdej sceny.
Powyższy wykres potwierdza tendendencje wynikająca z analizy analogicznego wykresu dla
algorytmu GFTT. Strategia kalibracyjna z wykorzystaniem asymetrycznych kół oraz
szachownicy okazała się być najlepsza. Wnioski i ich przyczyny są analogiczne, jak dla
algorytmu GFTT.
Powyższy wykres uwidacznia zysk jakościowy, poprzez zmniejszenie dystansu hamminga
między cechami obrazu referencyjnego oraz złączonego. Najlepiej wypadła startegia
asymetrycznych kół. Wnioski i ich przyczyny są analogiczne, jak dla algorytmu GFTT.
Teraz przedstawimy kilka wykresów prezentujących czasy działania algorytmów:
0
100
200
300
400
500
600
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Licz
ba
wyk
ryty
ch c
ech
Typ kalibracji
Punkty charakterystyczne
Złączone cechy obrazu
Punkty homografii
12
12,5
13
13,5
14
14,5
15
15,5
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Śre
dn
i dys
tan
s h
amm
ing
Typ kalibracji
84
Analogicznie jak w przypadku algorytmu GFTT, dzięki kalibracji kamery udało się skrócić
czas przetwarzania klatki. Wnioski i ich przyczyny są analogiczne, jak dla algorytmu GFTT.
Jeżeli rozpatrzymy czas przetwarzania cechy w obrazie, to kalibracja spowalnia proces
przetwarzania cech w obrazie. Wnioski i ich przyczyny są analogiczne, jak dla algorytmu
GFTT.
320
325
330
335
340
345
350
355
360
365
370
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Cza
s p
rze
twar
zan
ia k
latk
i [m
s]
Typ kalibracji
0
0,2
0,4
0,6
0,8
1
1,2
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Cza
s p
rze
twar
zan
ej c
ech
y [m
s]
Typ kalibracji
85
Raz jeszcze podobnie jak dla GFTT mamy szybsze przetwarzania punktów wykorzystanych
przy złączeniu obrazów. Wnioski i ich przyczyny są analogiczne, jak dla algorytmu GFTT.
Ze względu na podobieństwo uzyskanych wyników przy analizie czasowej (bez względu na
ilość cech w scenie, oraz algorytm wykorzystany), od tej pory będziemy prezentować
najważniejszy test obrazujący czas przetwarzania cechy wykorzystanej w złączeniu między
obrazami. Analiza czasów przetwarzania klatek dowiodła, że sumaryczny czas maleje po
wykonaniu kalibracji kamery. Zatem, wzrost czasu przetwarzania cech w obrazie nie jest tak
istotny, jak zysk czasowy na skróceniu przetwarzania punktów wykorzystanych w złączeniu
obrazów.
Analiza algorytmu HARRIS:
Poniższy wykres przedstawia liczbę wykrytych cech:
0
2
4
6
8
10
12
14
16
18
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Cza
s p
rze
twar
zan
ia p
un
ktu
ho
mo
graf
ii [m
s]
Typ kalibracji
0
10
20
30
40
50
60
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Licz
ba
wyk
ryty
ch c
ech
w o
bra
zie
Typ kalibracji
Punkty charakterystyczne
Złączone cechy obrazu
Punkty homografii
86
Ponownie daje się zauważyć korzyści płynące z przeprowadzenia procesu kalibracji. Typ
kalibracji asymetrycznych kół ponownie działał najlepiej. Raz jeszcze uwidacznia się, że
wzorzec symetryczny dostarcza najgorszych jakościowo cech spośród badanych wzorców
kalibrujących.
Dalej zajmiemy się analizą jakości wykrytych cech:
Można wyciągnąć wniosek, że działanie procesu kalibracji zwiększa jakość wykrytych cech
obrazu. W odróżnieniu od algorytmów GFTT oraz FAST, tutaj wzorzec symetrycznych kół
wykrył cechy o mniejszym średnim dystansie Hamminga względem wzorca szachownicy.
Jeżeli połączymy analizę tego wykresu oraz poprzedniego, to można wnioskować, że
algorytm Harrisa dla wzorca symetrycznych kół dostarczył około 10 bardzo wysokich
jakościowo cech oraz całkiem sporo cech, o niskiej jakości, ale poniżej wartości progowej,
aby uznać je za złączenia. W przypadku szachownicy, więcej było cech uznanych za
złączenie, ale o średniej niższej jakości. W efekcie, średni dystans Hamminga jest niższy dla
symetrycznych kół, pomimo faktu, że wzorzec ten dostarczył mniej cech będących
złączeniami.
Warto zaprezentować analizę powiązania algorytmu Harrisa na czasie przetwarzania
złączonej cechy:
12,8
13
13,2
13,4
13,6
13,8
14
14,2
14,4
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Śre
dn
i dys
tan
s H
amm
inga
mię
dzy
ce
cham
i ob
razu
Typ kalibracji
0
20
40
60
80
100
120
140
160
180
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Cza
s p
rze
twar
zan
ia p
un
ktu
ho
mo
graf
ii [m
s[
Typ kalibracji
87
Raz jeszcze widzimy, korzystne działanie prawidłowo przeprowadzenog procesu kalibracji
kamery. Ponownie największy zysk przyniosła strategia z wykorzystaniem asymetrycznych
kół.W tym przypadku wyniki i ich analiza jest identyczna jak w przypadku pozostałych
algorytmów.
Przenalizujemy jeszcze algorytmy ORB i STAR. Zacznijmy od algorytmu ORB:
Oto wykres wykrytych cech w obrazie :
Wyniki nie zadziwiają, albowiem prezentują identyczną tendencję, jak wcześniejsze wykresy
dla innych algorytmów. Również analiza tych wyników jest analogiczna jak poprzednio.
Oto wykres prezentujący jakość cech wykrytych w scenie :
Przy analizie powyższego wykresu warto zwrócić uwagę, że dystans Hamminga jest
najwyższy spośród wszystkich dotychczasowych testów, niezależnie od wybranego wzorca.
Zgodnie z tabelą prezentowaną w rozdziale 3.3, algorytm ORB, wykrywa cechy o gorszych
jakościowo metrykach niż inne badane algorytmy. Fakt, że wzorzec szachownicy dostarczył
0
20
40
60
80
100
120
140
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Licz
ba
wyk
ryty
ch c
ech
w o
bra
zie
Typ kalibracji
Punkty charakterystyczne
Złączone cechy obrazu
Punkty homografii
14,6
14,7
14,8
14,9
15
15,1
15,2
15,3
15,4
15,5
15,6
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Śre
dn
i dys
tan
s H
amm
inga
mię
dzy
ce
cham
i ob
razu
Typ kalibracji
88
najlepszych pod względem dystansu Hamminga cech, nie powinien być szczególnie
interpretowany. Jest tak dlatego, że ogólny dystans Hamminga jest wysoki i wyniki mogą nie
być reprezentatywne.
Oto wykres prezentujący czasy przetwarzania punktu biorącego udział w wyznaczeniu
homografii:
W przypadku algorytmu ORB, czasy przetwarzania złączonych cech okazały się być bardzo
zbliżone do siebie, w przeciwieństwie do pozostałych algorytmów. Stało się tak dlatego, że
algorytm ORB wykrył znaczną liczbę cech o przeciętnej jakości (wysokim dystansie
Hamminga), dlatego też czasy przetwarzania cech są podobne, bo jakościowo, nie ma istotnej
różnicy w analizowanych cechach obrazu.
Pozostał do przeanalizowania algorytm STAR.
Oto wykres wykrytych cech w obrazie :
Zaskakującym jest fakt, że na powyższym wykresie, wzorzec asymetrycznych kół, dostarcza
procentowo zdecydowanie więcej cech homografii i złączenia w stosunku do wszystkich cech
0
5
10
15
20
25
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Cza
s p
rze
twar
zan
ia p
un
ktu
ho
mo
graf
ii [m
s[
Typ kalibracji
0
5
10
15
20
25
30
35
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Licz
ba
wyk
ryty
ch c
ech
w o
bra
zie
Typ kalibracji
Punkty charakterystyczne
Złączone cechy obrazu
Punkty homografii
89
obrazu. Oznacza to wysoką jakość wykrytyc cech w obrazie oraz wyższą od pozostałych
wzorców.
Oto wykres prezentujący jakość cech wykrytych w scenie :
Powyższy wykres prezentuje identyczne tendencje jak ten sam wykres dla pozostałych
algorytmów, z tą istotną różnicą, że algorytm STAR, dostarcza nam cech o bardzo niewielkim
dystansie Hamminga (rzędu 10.0, podczas, gdy algorytm ORB rzędu 15.0). Znacząco lepiej
zachowywał się wzorzec asymetrycznych kół. Ma to swoje uzasadnienie w budowie
algorytmu STAR, który wykorzystuje próbkowanie i badanie kąta obrotu cechy z progiem 15
stopni. Oznacza to, że STAR będzie lepiej działał, po kalibracji z wykorzystaniem wzorców
kolistych. Jak widać na wykresie, nawet, typowo gorsza kalibracja z symetrycznymi kołami
daje porównywalne wyniki dla algorytmu STAR co szachownica, ze względu na
kompatybilność z detekcją wokół koła z progową wartościową kątową, która uzupełnia się z
kalibracją kolistą.
Oto wykres prezentujący czasy przetwarzania punktu biorącego udział w wyznaczeniu
homografii :
Analiza powyższego wykresu, pokazuje, że wzorce koliste dla algorytmu STAR, powodują
szybsze przetwarzania niż wzorzec szachownicy. Jest tak ze względu na wykorzystany w
algorytmie kolisty deskryptor.
0
2
4
6
8
10
12
14
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Śre
dn
i dys
tan
s H
amm
inga
mię
dzy
ce
cham
i ob
razu
Typ kalibracji
0
50
100
150
200
250
Brak kalibracji Asymetryczne koła - 0.41
Symetryczne koła - 0.45
Szachownica - 0.71
Cza
s p
rze
twar
zan
ia p
un
ktu
ho
mo
graf
ii [m
s[
Typ kalibracji
90
Ze względu na uzyskane podobne wyniki potwierdzające wpływ procesu kalibracji na
przetwarzanie i łączenie obrazów, niezależnie od wykorzystanego algorytmu oraz liczby cech
występujących w scenie (powyższe wykresy prezentują identyczne tendencje dla pozostałych,
bogatszych w cechy scen), zdecydujemy się na pokazanie ciekawego wpływu błędnej
kalibracji kamery na opisane działanie algorytmów oraz wpływu rozdzielczości kamery w
procesie kalibracji na dalsze przetwarzanie obrazu.
Zacznijmy od niepoprawnie przeprowadzonego procesu kalibracji :
Warto zaprezentować przykład obrazujący efekt wizualny niepoprawnej kalibracji :
Co gorsza, taka kalibracjia o błędzie reprojekcji rzędu 10 jednostek umożliwia porównywanie
sceny referencyjnej takiej jak ta na poniższym rysunku :
Już na pierwszy rzut oka widać, że te dwie złączone klatki, są podobne, ale nie są identyczne.
Sprawdźmy teraz, jak taka niepoprawna kalibracja wpływa na przetwarzanie cech przez
algorytmy :
Zacznijmy od wykresu prezentującego liczbę wykrytych cech ( i jego porównaniu z
działaniem algorytmów bez przeprowadzenia błędnej kalibracji):
91
Analiza powyższego wykresu jest jednoznaczna. W przypadku błędnej kalibracji kamery,
otrzymamy zarówno mniej cech w obrazie, mniej złączeń oraz wyznaczymy homografię na
podstawie mniejszej liczby cech. Jest to spowodowane wysoką entropią cech w obrazie.
Błędny model kalibracji powoduje błędne dopasowania cech w obrazach, przez co maleje
liczba złączeń.
Teraz rozpatrzmy jakość uzyskanych cech obrazu:
Analiza wykresu jednoznacznie potwierdza, że błędna kalibracja wypływa negatywnie
(powoduje wzrost dystansu Hamminga) na jakość pozyskanych cech w obrazie. Błędna
kalibracja kamery powoduje dostarczenie niepoprawnego modelu, na podstawie którego
wyznaczymy położenie cechy. Jeżeli porównamy je z położeniem cechy wynikającym z
parametrów kamery, to różnicą będzie większa niż w przypadku braku kalibracji, ponieważ
nie ma dodatkowego narzutu spowodowanego błędnym modelem kalibracji.
Ostatnie badanie dotyczy czasu przetwarzania cech, które brały udział w złączeniu:
0
100
200
300
400
500
600
700
800
900 Li
czb
a w
ykry
tych
ce
ch
Typ kalibracji wraz z algorytmem
Punkty charakterystyczne
Złączone cechy obrazu
Punkty homografii
0 2 4 6 8
10 12 14
Śre
dn
i dys
tan
s H
amm
inga
Typ kalibracji wraz z algorytmem
92
Błędna kalibracja wpływa negatywnie również na czas przetwarzania cech obrazu. Jest to
spowodowane narzutem czasowym na zbudowanie błędnego modelu. Następnie na bazie
błędnego modelu homografia rozpatruje gorsze jakościowo cechy (wyższy dystans
Hamminga) więc wiele testów np. 12 punktówych dla algorytmu FAST, musi być
przeprowadzanych w pełnii.
Zatem błędna kalibracja wpływa niekorzystnie na działanie algorytmów operujących na
cechach obrazu. Istotnym jest zatem, aby proces kalibracji kamery zakończył się sukcesem, w
przeciwnym wpadku należy powtórzyć kalibrację, gdyż przejście ze źle skalibrowaną kamerą
do przetwarzania obrazu pogorszy uzyskane rezultaty.
Kolejny badany przypadek to wpływ rozdzielczości klatek przy procesie kalibracji na
działanie algorytmów operujących na cechach. W tym celu, wykonane zostały badania po
kalibracji kamery zakończonej z sukcesem w rozdzielczości 800x480 o błędzie reprojekcji
0.41 z wykorzystaniem wzorca asymetrycznych kół oraz kalibracji w rozdzielczości 640 x
480, również z wykorzystaniem wzorca asymetrycznych kół, gdzie uzyskano błąd reprojekcji
0.52.
Zacznijmy od porównania liczby wykrytych i wykorzystanych w złączeniach i homografii
cech w obrazie:
0
10
20
30
40
50
60
70
80
90 C
zas
prz
etw
arza
nia
pu
nkt
u h
om
ogr
afii
[ms]
Typ kalibracji wraz z algorytmem
93
Na podstawie powyższego wykresu, widzimy, że korzystając z tego samego wzorca
kalibrującego, ale mniejszej rozdzielczości uzyskamy gorsze wyniki. Niższa rozdzielczość
kalibracji wpływa niekorzystnie na liczbę wykrytych cech w obrazie. Przyczyną tego
zjawiska jest to, że wraz ze zmniejszaniem rozdzielczości wzrasta dystan Hamminga i
pogarsza się jakość wykrywanych cech. Jest tak dlatego, że każda różnica o piksel jest przy
mniejszej rozdzielczości bardziej znacząca.
Przeanalizujmy teraz jakość uzyskanych cech uwzględniając rozdzielczość kalibracji:
Analiza jakościowa wskazuje, że w przypadku wszystkich algorytmów zmniejszenie
rozdzielczosci obrazów w procesie kalibracji ma swoje odzwierciedlenie w jakości
uzyskanych złączeń cech w procesie dalszego przetwarzania obrazu. Uzasadnienie jest proste,
jako, że dystans Hamminga jest operacją XOR na bitach, to przekłamanie nawet o 1 piksel
(które to ma większe znaczenie przy mniejszej rozdzielczości) zwiększa dystans Hamminga.
Poniżej przedstawiamy wykres zależności czasu przetwarzania cech obrazu od rozdzielczości
użytej w procesie kalibracji :
0
50
100
150
200
250
300
350
400
450 Li
czb
a w
ykry
tych
ce
ch
Algorytm wraz z kalibracją asymetryczną o podanej rozdzielczości
Punkty charakterystyczne
Złączone cechy obrazu
Punkty homografii
0
2
4
6
8
10
12
14
16
18
GFTT 800x480
GFTT 640x480
FAST 800x480
FAST 640x480
HARRIS 800x480
HARRIS 640x480
ORB 800x480
ORB 640x480
STAR 800x480
STAR 640x480
Śre
dn
i dys
tan
s H
amm
inga
Algorytm wraz z rozdzielczoscią kalibracji
94
Analiza czasów przetwarzania punktów homografii również wypada niekorzystnie względem
zmniejszania rozdzielczości przetwarzanych w trakcie procesu kalibracji klatek. Różnice w
przeciwieństwie do poprzednich testów nie są znaczące.
Na koniec przedstawione zostaną dla każdego algorytmu w każdej scenie analogiczne
powyższe 3 wykresy, aby dla każdego algorytmu wybrać optymalny wzorzec kalibrujący oraz
zysk z wykonania poprawnej kalibracji. Dzięki temu, będzie można ponownie oszacować i
porównać działania testowanych algorytmów.
Zacznijmy od algorytmu GFTT:
0
20
40
60
80
100
120
140
160
180
GFTT 800x480
GFTT 640x480
FAST 800x480
FAST 640x480
HARRIS 800x480
HARRIS 640x480
ORB 800x480
ORB 640x480
STAR 800x480
STAR 640x480
Cza
s p
rze
twar
zan
ia p
un
ktu
ho
mo
graf
ii [m
s]
Algorytm wraz z rodzielczością kalibracji
0
100
200
300
400
500
600
700
800
900
1000
Licz
ba
wyk
ryty
ch c
ech
w o
bra
zie
Typ kalibracji oraz stopień liczności cech w scenie
Punkty charakterystyczne
Złączone cechy obrazu
Punkty homografii
95
Analiza wyników pokazuje, że w każdym przypadku sceny, najlepiej zadziałała kalibracja
asymetryczna. To dla tego wzorca uzyskaliśmy najwięcej cech wykrytych w obrazie, które
następnie zostały uznane za złączenia. Przyczyną tego zachowania jest fakt, że wzorzec
asymetryczny dostarcza najlepsze jakościowo pojedyncze cechy, które są następnie
wykorzystane przy złączeniach.
Wykres obrazujący jakość wykrytych cech:
Również powyższy wykres utwierdza nas w przekonaniu, że najlepszym wzorcem
kalibrującym jest wzorzec asymetrycznych kół. Wzorzec asymetrycznych kół dzięki pokryciu
się z różnymi deskryptorymi opartymi o analizę kolistych obiektów (ORB, STAR, SIFT,
SURF) dostarcza dodatkowych parametrów w modelu kalibracji, dzięki czemu uzyskujemy
sumarycznie lepszy efekt.
Zobaczmy jeszcze analogiczny wykres dla czasów przetwarzania punktu złączenia :
0
2
4
6
8
10
12
14
16
96
Powyższy wykres raz jeszcze potwierdza, że optymalnym wyborem jest wzorzec
asymetrycznych kół. Co prawda, często wzorzec symetrycznych kół pozwala uzyskać
mniejsze czasy, to porównanie z poprzednimi wykresami dowodzi, że zysk czasowy nie
rekompensuje braku znaczącej poprawy jakości przetwarzanych cech oraz braku odporności
na zmienne oświetlenie, które cechują wzorzec symetryczny.
W pracy pominięto analogiczne serie wykresów dla pozostałych algorytmów, gdyż
przedstawiają one zbieżne wyniki. Należy zatem przyjąć, że wzorzec asymetrycznej
szachownicy najlepiej oddziałowywuje na dalsze przetwarzanie obrazów. Ten wniosek
potwierdza wcześniejsze przypuszczenia, że uzyskując najmniejszy średni błąd reprojekcji w
procesie kalibracji kamery, uzyskujemy możliwie najlepszą kalibrację. Istotnym jest fakt, że
liczba cech w scenie nie wpływała znacząco na wybór optymalnego wzorca.
Na koniec przedstawimy wykresy, które porównają zysk, jaki niesie za sobą kalibracja
kamery dla każdego z testowanych algorytmów. Obliczać będziemy procentową różnicę po
uśrednieniu ze wszystkich scen względem przetwarzanych obrazów bez kalibracji.
Zacznimy od porównania liczby wykrywanych cech:
0
10
20
30
40
50
60
70
97
Analiza wykresu pokazuje, że w każdym przypadku zastosowania optymalnej kalibracji
maleje liczba wykrywanych cech w obrazie. Rosną natomiast liczby złączonych cech oraz
punktów wynikających z wyznaczenia homografii. Oceniając powyższe algorytmy wypada
wspomnieć, że najgorsze wyniki prezentuje algorytm ORB. Jako miarę oceny należy wziąć
pod uwagę przede wszystkim procent punktów uznanych za wartościowe po wyznaczeniu
homografii. Zgodnie z tym kryterium lepiej radzą sobie algorytmy HARRIS, FAST, STAR
oraz największy zysk odnotowywujemy w przypadku algorytmu GFTT. Działanie
algorytmów jest zgodne z oczekiwanym, ponieważ kalibracja powinna dzięki dostarczonemu
modelowi dodatkowo filtrować i nie przepuszczać cech, które nie przekroczą wartości
progowej. Również dzięki dostarczonemu modelowi, można precyzyjniej wybrać cechy
biorące udział w złączeniu i w efekcie czego takich cech jest więcej.
Teraz rozpatrzmy podobną analizę w przypadku badania dystansu hamminga dla algorytmów:
-30
-20
-10
0
10
20
30
40
50
60
70
80
GFTT FAST HARRIS ORB STAR
Pro
cen
tow
a zm
ian
a p
o o
pry
mal
ne
j kal
ibra
cji
Algorytm
Punkty charakterystyczne
Złączone cechy obrazu
Punkty homografii
0
1
2
3
4
5
6
7
8
GFTT FAST HARRIS ORB STAR
Pro
cen
tow
a ró
żnic
a w
śre
dn
im
dys
tan
sie
Ham
min
ga
Algorytm
98
Analiza wykresu jest prosta. Im większa procentowa różnica, tym większa korzyść z
zastosowania procesu kalibracji. Najlepiej pod tym względem wypadają algorytmy FAST
oraz STAR.
Na koniec przeanalizujmy jeszcze procentową zmianę czasu przetwarzania cech w obrazie:
Analiza tego wykresu jest również jednoznaczna. Im większa procentowa różnica, tym
bardziej zasadne stosowanie algorytmu kalibracji. Najlpiej wypadają algorytmy GFTT, STAR
oraz FAST.
Dzięki wnikliwej analizie testów, widzimy, że optymalnym wzorcem okazała się być
asymetryczne koła. Dodatkowo, badając wpływ kalibracji na działanie algorytmów można
uznać, że
Maleje liczba wykrytych cech w obrazach
Wzrasta liczba cech uznanych za homograficzne
Wzrasta liczba cech biorących udział w złączeniu
Wzrasta jakość wykrtytych cech
Maleje czas przetwarzania cech biorących udział w złączeniu obrazów
Zastanawiając się, które kryterium jest najważniejsze, dochodzimy do wniosku, że
najistotniejsze jest aby wzrastała jakość wykrywanych cech, dalej w kolejności mamy czas
przetwarzania cechy. Biorąc to pod uwagę należy uznać, że dzięki procesowi kalibracji
kamery możemy sklasyfikować jej oddziaływanie na poszczególne algorytmy od najlepszej
do najmniej znaczącej następująco :
1) FAST
2) STAR
3) GFTT
4) HARRIS
5) ORB
Oznacza to, że największymi beneficjentami kalibracji są algorytmy FAST oraz STAR.
0
10
20
30
40
50
60
GFTT FAST HARRIS ORB STAR
Pro
cen
tow
a ró
żnic
a w
cza
sie
p
rze
twar
zan
ia c
ech
y zł
ącze
nia
Algorytm
99
6.2.3 Wyniki testowania wpływu procesu kalibracji na renderowanie rzeczywistości
rozszerzonej
Na potrzeby testów zakładamy, że do detekcji cech wykorzystamy algorytm STAR,
deskryptory cech wyliczamy za pomocą ORB, a do łączenia obrazów wykorzystamy algorytm
oparty na dystanise Hamminga. Dodatkowo, załóżmy, że za optymalny wzorzec do
przeprowadzenia procesu kalibracji kamery uznajemy asymetryczne koła.
Na początek przedstawimy dowód, że kalibracja kamery pozytywnie wpływa na wyznaczanie
pozycji kamery w przestrzenii 3W. Jako miarę jakości należy uznać dystans pomiędzy
wyrenderowanym obiektem AR, a środkiem znacznika (im renderowany sześcian będzie
bliżej środka znacznika, tym lepiej określona jest poza kamery):
Powyższy obraz prezentuje działanie renderowania AR na wskazanym obiekcie 2D
(znaczniku) bez kalibracji kamery. Widzimy, że sześcian został wyrenderowany w otoczeniu
znacznika, ale jego odległość od środka znacznika jest znacząca. Spójrzmy teraz, jak wygląda
renderowanie AR, po zastosowaniu kalibracji kamery optymalną metodą wzorca
asymetrycznych kół.
100
Powyższy przykład obrazuje, że dzięki kalibracji kamery renderowany sześcian znajduje się
bliżej środka znacznika, co oznacza lepsze wyznaczenie pozy kamery w świecie, czyli
przestrzeni 3W.
Przyjrzyjmy się następującym danym :
Ustalono, że środek wykrytego znacznika znajduje się w środku układu współrzędnych, czyli
w przestrzenii 3W w punkcie (0,0,0). W trakcie serii testów renderowania AR zbierano dane
przed i po procesie kalibracji, w szczególności wektory transalcji oraz obrotu, które pozwalają
określić stopień poprawności renderowania AR i jej odległość od środka znacznika. Po
przeprowadzeniu przekształceń, możemy zbierać dane macierzy określających pozę kamery
w OpenGL oraz w OpenCV. Dzięki danym z tych macierzy będzie można wyliczyć w
odległość wyrednerowanej AR od punktu (0,0,0). Im mniejsza odległość w każdym z
wymiarów, tym bliżej środka znacznika renderowany jest sześcian.
Dane prezentują się następująco :
101
Ujemne wartości na osi z należy interpretować jako renderowanie się AR poniżej płaszczyzny
o z = 0 i obejmującej znacznik. Potocznie oznacza to "wtapianie się" AR w scenę. Powyższy
wykres obrazuje, że dzięki procesowi kalibracji możemy zmniejszyć odległość dla każdej z
osi od środka znacznika. Podsumowanie wraz z analizą przeniesiemy na koniec, wszak nie ma
znaczenia, czy rozpatrujemy względną odległość, czy też bezwględną.
Aby zaprezentować bardziej wymierne wartości, w przeciwieństwie do pikseli, autor
postanowił zmierzyć w trakcie renderowania AR dystans w cm od środka znacznika. Poniżej
wykres obrazujący wpływ kalibracji kamery na tę wartość :
Analizując powyższy wykres widzimy, że optymalna kalibracja kamery, zmniejsza odległość
renderowania AR od środka znacznika. Oznacza to, że kalibracja kamery pozwala z większą
dokładnością wyznaczyć położenie kamery w przestrzeni 3W. Przyczyną takiego działania
renderingu jest fakt, że dzięki kalibracji kamery dostajemy informację o parametrach
wewnętrznych i zewnętrznych kamery, których korelacja jest taka, że możemy wyznaczyć
macierz projekcji, która precyzyjniej określi pozę kamery, co zmniejszy dystanse względne i
bezwzględne rednerowanej AR od znacznika.
-100
-50
0
50
100
150
200
250
300
350
x y z Od
legł
ość
sze
ścia
nu
AR
od
śro
dka
zn
aczn
ika
Osie układu współrzędnych
Brak kalibracji
Optymalna kalibracja
0
2
4
6
8
10
12
14
16
18
Brak kalibracji Optymalna kalibracja
Od
legł
ość
śro
dka
sze
ścia
nu
od
śro
dka
zn
aczn
ika
[cm
]
102
7 Podsumowanie i wnioski końcowe
7.1 Wnioski końcowe
Celem mojej pracy magisterskiej było zbadanie wpływu kalibracji kamery na
wyszukiwanie pozy kamery w przestrzeni 3W. Po przeprowadzeniu licznych testów oraz
wnikliwej analizie, mogę stwierdzić, że teza brzmiąca, że kalibracja kamery w urządzeniach
mobilnych ma wpływ na wyznaczanie pozy w przestrzeni 3W jest prawdziwa. Wykazałem, że
istotne jest, aby przeprowadzać kalibrację z możliwie największą dostępną rozdzielczością.
Przetestowałem 3 typy znaczników oraz wykazałem ich zalety i wady. Symetryczne koła
okazały się być zbyt wrażliwe na gwałtownie zmieniające się oświetlenie. Wzorzec
szachownicy powoduje nieprzyjemny efekt "klatkowania" obrazu, niemniej jednak w trakcie
dalszego przetwarzania obrazu jest porównywalny jakościowo oraz czasowo do optymalnego
wzorca jakim okazały się być asymetryczne koła. Ważne jest, aby monitorować błąd
reprojekcji wynikający z przeprowadzenia kalibracji. Zależność jest taka, że im jest on
mniejszy, tym lepsza jakość skalibrowanego obrazu i mniejszy jest wpływ zniekształceń.
Ponadto wykazałem, że pośród różnych strategii kalibrujących każdy wzorzec ma swoją
najlepszą. Następnie zbadałem wpływ kalibracji na przetwarzanie sekwencji klatek w celu
wyszukiwania możliwie najlepiej dopasowanego wzorca w scenie. Badaniu poddałem
najlepsze wg mojej pracy inżynierskiej algorytmy GFTT, FAST, HARRIS, ORB, STAR.
Wykazałem, że poprawnie przeprowadzona kalibracja (taka, której średni błąd reprojekcji jest
mniejszy od jedności), przyspiesza złączanie obrazów, odfiltrowywuje przeciętne jakościowo
cechy obrazu oraz zmniejsza średni dystans Hamminga między cechami wykorzystanymi w
procesie wyznaczania homografii. Wyniki badań wskazały, że algorytmy FAST, STAR oraz
GFTT mają tendencję ulegać wzmocnieniu w wyniku kalibracji i są na nią bardziej podatne
od pozostałych. Co ważne, udowodniłem praktyczne zastosowanie procesu kalibracji przy
renderowaniu rzeczywistości rozszerzonej. Dzięki kalibracji kamery obiekty znajdują się
bliżej znacznika, w obszarze którego powinny zostać wyrenderowane na ekranach
użytkowników. To właśnie pośrednio dowodzi pozytywnego wpływu kalibracji kamery na
odnajdywanie pozy kamery w przestrzeni 3W.
7.2 Perspektywy rozwoju
Aplikacja stworzona w mojej pracy inżynierskiej umożliwia dodatkowo kalibrację
kamery, testy jej wpływu na algorytmy przetwarzania obrazu, a tym bardziej generację AR.
Realizacja opisywanej aplikacji zakończyła się sukcesem. Wraz z jej rozwojem odkrywałem
coraz szersze możliwości biblioteki OpenCV, platformy OS Android oraz wzorców
projektowych i dobrych praktyk programowania obiektowego. Aplikacja, która powstała jest
typem "grubego klienta", przez co nie ma możliwości dostępu do jej wyników w wygodnej
formie jak np. przeglądarka internetowa. Na pewno jest to jeden z możliwych kierunków
rozwoju aplikacji w stronę platformy z panelem administratora do zarządzania testami i
zbieraniu wyników. Można przypuszczać, że ewentualny rozwój aplikacji powinien
uwzględniać:
Stworzenie bliższego obiektowym praktykom programistycznym API niże to, które
dostarcza biblioteka OpenCV
103
Włączenie mechanizmów Dependency Inection do projektu, być może z
wykorzystaniem frameworku Spring
Stworzenie odpowiednich testów jednostkowych na platformę OS Android
Komunikację z serwerem, który gromadziłby dane i przetwarzał je w czasie
rzeczywistym
Stworzenie własnego wzorca kalibrującego kamerę, asymetrycznego, który
umożliwiłby jeszcze skuteczniejszą kalibrację kamery
Stworzenie algorytmu kalibracji kamery, który będzie wspierał dowolny, zadany
wzorzec kalibrujący
Wsparcie do wspierania dynamicznego dodawania znaczników, na których podstawie,
generowana będzie AR
Udostępnienie kodów źródłowych projektu na otwartym i dostępnym publicznie
repozytorium GitHub
Udostępnienie aplikacji w serwisie Google Play Store, aby każdy mógł ją
zainstalować na swoim telefonie
Stworzenie instrukcji obsługi programu
Wsparcie urządzeń mobilnych działających na platformach iOS oraz Windows Phone
7.3 Zastosowanie w praktyce
W chwili tworzenia pracy magisterskiej, rynek aplikacji mobilnych coraz
powszechniej wykorzystuje znaczniki oraz generowania AR. Głównymi typami aplikacji,
które wykorzystują ten model są reklamy oraz aplikacje o charakterze rozrywkowym.
Warto wspomnieć, że możliwości aplikacji mobilnych wykorzystujących cechy
obrazów oraz kalibrację kamery będą stawały się z roku na rok coraz większe. Przykładowo
telefon komórkowy Samsung Galaxy S2, na którym przeprowadzano testy, posiada
przestarzałe w 2015 roku parametry techniczne, aczkolwiek wystarczające do wykorzystania
opisywanych algorytmów i AR w czasie rzeczywistym. Wraz z rozwojem sprzętu mobilnego
prognozuje się odchodzenie od drogich kamer i aparatów fotograficznych. Dodatkowo
pojawienie się na rynku urządzeń takich jak Google glass oraz Oculus Rift otwiera przed
aplikacjami przetwarzającymi obraz nowe dziedziny zainteresowania takie jak: leczenie
lęków u pacjentów, wideokonferencje, nawigacja w przestrzenii 3D, gry komputerowe,
przewodniki po miastach, aplikacje symulacyjne dla różnego rodzaju środków transportu.
Rynek aplikacji wykorzystujących rzeczywistośc rozszerzoną AR lub wirtualną VR
jest rynkiem stale roznącym o następujących prognozach odnośnie wzrostu oraz wartości:
104
Analizując powyższy wykres, widzimy, że branża dotycząca zagadnień AR jest
przyszłościowa. Ciekawe, jaka przyszłość czeka aplikacje, które przetwarzają obraz, ale na
podstawie wspomnianych prognoz, można mieć przypuszczenia, że rzeczywistość
rozszerzona ma przed sobą świetlaną przyszłość.
Bibliografia:
1. Szeliski Richard: Computer Vision: Algorithms and Applications 2010
2. Bradski Gary, Kaebler: Learning OpenCV Computer Vision with the OpenCV Library
O'Leary 2008
3. Laganière Robert: OpenCV Computer Vision Application Programming Cookbook Pack
Publishing 2012
4. The OpenCV Tutorials Release 2.4.10
5. Pavlenko Andrey: OpenCV for Android ECCV 2012: 1-35
6. Baggio Daniel Lelis: Mastering OpenCV with Practical Computer Vision Projects Packt
Publishing 2011
7. Rublee Ethan, Rabaud Vincent, Konolige Kurt, Bradski Gary R: ORB: An efficient
alternative to SIFT or SURF. ICCV 2011: 2564-2571
8. Collins Charlie, Galpin Michael, Kaeppler Matthias: Android w praktyce Helion 2012
9. Howse Joseph: OpenCV for Secret Agents Packt Publishing 2015
10. Brown, D. C.: Close-range camera calibration. Photogrammetric Engineering,
105
1971 : 855–866.
11. Collins Charlie, Galpin Michael, Kaeppler Matthias: Android w praktyce Helion 2012
12. Zuliani Marco: RANSAC for Dummies With examples using the RANSAC toolbox for
Matlab & Octave 2011
13. Zabrodzki Jan ( red. ): Grafika Komputerowa, metody i narzędzia, 1994, Wydawnictwo
Naukowo-Techniczne, ISBN 83-204-1716-3
14. Shao, J. Han, J:Computer Vision and Machine Learning with RGB-D Sensors (Springer,
2014). ISBN 978-3-319-08651-4
15. Jink Kong: Camera Calibration Using Vertical Lines Packt Publishing ISBN 978-3-642-
37409-8
16. Hanning Tobias: High Precision Camera Calibration Packt Publishing ISBN 978-
3834814135
17. Guzik Piotr: Metody wyszukiwania punktów charakterystycznych i wyznaczania ich cech,
Wydział Elektroniki i Technik Informacyjnych Politechniki Warszawskiej, Instytut
Informatyki 2014 r.
18. Z. Zhang. Flexible Camera Calibration By Viewing a Plane From Unknown
Orientations. International Conference on Computer Vision (ICCV'99), Corfu, Greece, pages
666-673, September 1999.
19. Bouguet Jean-Yves Camera Calibration from Points and Lines in Dual-Space Geometry -
Technical Report, ECCV 1998