praca dyplomowa inŻynierska - repo.pw.edu.plinzynierska+piotr+guzik.pdf · 1 rok akademicki...
Post on 27-Feb-2019
258 Views
Preview:
TRANSCRIPT
1
Rok akademicki 2013/2014
Politechnika Warszawska
Wydział Elektroniki i Technik Informacyjnych
Instytut Informatyki
PRACA DYPLOMOWA INŻYNIERSKA
Piotr Guzik
Metody wyszukiwania punktów
charakterystycznych i wyznaczania ich cech.
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: 2010.10.01
Ż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. Współpracuję z tą firmą do dziś.
.......................................................
Podpis studenta
EGZAMIN DYPLOMOWY
Złożył egzamin dyplomowy w dniu .................................................................................. 2014 r
z wynikiem ..................................................................................................................................
Ogólny wynik studiów: ...............................................................................................................
Dodatkowe wnioski i uwagi Komisji: .........................................................................................
......................................................................................................................................................
......................................................................................................................................................
3
STRESZCZENIE
Celem pracy jest przedstawienie cech pozwalających opisać obrazy z wykorzystaniem
punktów charakterystycznych. Praca zawiera opis algorytmów łączenia oraz odnajdywania
punktów charakterystycznych w obrazach. Ze szczególną uwagą przyjrzano się różnicom w
opisywanych algorytmach. 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, detekcja punktów charakterystycznych,
deskryptory cech, rzeczywistość rozszerzona, AR, OpenCV, OS Android
Title: Feature points characteristics and detection algorithms
This paper shows characteristics of feature points and algorithms that can be used for their
detection and description. The main aim is to outline differences between the anlysed
algorithms. Futrhermore, the paper presents details of implementation working with OS
Android. Special attention was paid to analysis of tests and classification of available
algorithms 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, Feature Detection, Feature Descriptors, Augmented Reality, AR,
OpenCV, OS Android
4
1. Spis treści
Wstęp ........................................................................................................................................ 6
1 Wprowadzenie .................................................................................................................... 6
1.1 Cechy punktowe .......................................................................................................... 6
1.2 Rzeczywistość Rozszerzona ......................................................................................... 7
2 Algorytmy bazujące na punktach kluczowych .................................................................... 9
2.1 SIFT: Scale Invariant Feature Transform ................................................................... 10
2.1.1 Wykrywanie ekstremów w przestrzeni skali ...................................................... 10
2.1.2 Wyznaczanie dokładnego położenia punktów kluczowych ............................... 15
2.1.3 Usuwanie wpływu krawędzi ............................................................................... 16
2.1.4 Przypisanie orientacji ......................................................................................... 17
2.1.5 Lokalny deskryptor obrazu ................................................................................. 17
2.1.6 Dopasowanie punktów kluczowych ................................................................... 19
2.1.7 Wyznaczanie parametrów przekształcenia afinicznego .................................... 20
2.2 FAST: Features from Accelerated Segment Test ....................................................... 23
2.2.1 Podstawy algorytmu........................................................................................... 23
2.2.2 Implementacja detektora punktów kluczowych przy pomocy uczenia
maszynowego ................................................................................................................... 24
2.2.3 Minimalizacja oddziałowywania punktów niemaksymalnych ........................... 25
2.2.4 Deskryptor punktów kluczowych i ich dopasowanie ......................................... 26
2.3 Detektor narożników Harrisa .................................................................................... 26
2.3.1 Podstawy algorytmu........................................................................................... 26
2.3.2 Funkcja odpowiedzi narożnika ........................................................................... 28
2.3.3 Metoda implementacji algorytmu ..................................................................... 29
2.3.4 Deskryptor narożników i ich dopasowanie ........................................................ 29
2.4 Algorytm GFTT - Good Features To Track ................................................................. 29
2.5 BRISK - Binary Robust Invariant Scalable Keypoints .................................................. 30
2.6 DENSE ........................................................................................................................ 32
2.7 MSER .......................................................................................................................... 32
2.8 ORB - oriented BRIEF ................................................................................................. 33
2.9 SURF ........................................................................................................................... 34
2.10 STAR ........................................................................................................................... 37
5
2.11 BRIEF .......................................................................................................................... 37
2.12 SIMPLEBLOB ............................................................................................................... 39
2.13 FREAK ......................................................................................................................... 39
3 Adaptery dodatkowe ........................................................................................................ 40
4 Więcej o losowości, czyli RANSAC ..................................................................................... 42
5 Przegląd narzędzi .............................................................................................................. 44
6 Opis Aplikacji ..................................................................................................................... 44
6.1 Aplikacja pierwsza - własna implementacja wykrywania znacznika i generowania AR
44
6.1.1 Zmiany krawędzi kolorów w obrazie i ich miksowanie ...................................... 49
6.1.2 Filtry wykorzystujące sąsiedztwo zwane filtami konwolucji (filtry splotu) ........ 51
6.1.3 Szukanie i śledzenie obrazu w scenie ................................................................. 53
6.2 Aplikacja druga - badanie efektywności aglorytmów detekcji .................................. 56
6.2.1 Metody testowania ............................................................................................ 66
7 Wyniki testów ................................................................................................................... 66
7.1 Wyniki dla obrazu przedstawiającego książki na półce ............................................. 70
7.2 Wyniki dla obrazu z martwą naturą .......................................................................... 82
7.3 Wyniki dla obrazu przedstawiającego laptopa i Gwiaździstą Noc van Gogha .......... 85
7.4 Wyniki dla obrazu przedstawiają dwie fotografie wiszące na ścianie....................... 90
7.5 Wyniki dla obrazu przedstawiającego obraz na ścianie, fragment monitora i
fragment szafy ...................................................................................................................... 94
Załącznik A - Właściwości kamer i kalibracja .......................................................................... 102
Model i parametry wewnętrzne kamery ............................................................................ 102
Macierz rotacji i wektor przesunięcia ................................................................................. 104
Kalibracja kamery ............................................................................................................... 105
Załącznik B - Stereowizja i geometria epipolarna .................................................................. 106
Stereowizja ......................................................................................................................... 106
Geometria epipolarna ........................................................................................................ 107
Macierz zasadnicza i podstawowa ..................................................................................... 108
6
Wstęp
W niniejszej pracy przedstawimy zbiór dobrze poznanych i opisanych w literaturze
metod detekcji punktów charakterystycznych. Metody detekcji mają szeroki zbiór
zastosowań. Wykorzystuje się je np. w celu dopasowywania obrazów do wzroca,
wyszukiwaniu wzorca w obrazie z kamery w czasie rzeczywistym. Znane są również
przypadki wykorzystania opisywanych metod przy uczeniu maszynowym np. przy uczeniu
konturu i kształtu wzorców znaków drogowych dla automatów, które sterują samochodami.
W końcu szerokim spektrum zastosowań, które obecne prężnie się rozwija jest rzeczywistość
rozszerzona (AR), np. poprzez wykrywanie znaczników i wyświetlanie reklam 3D na
ekranach telefonów komórkowych (smartfonów).
Zaprezentowane zostaną wybrane aspekty ich taksonomii. Przede wszystkim sklasyfikujemy
je ze względu na ich najistotniejsze cechy oraz niezmienniki.
Najważniejszym kryterium klasyfikacji będzie konkretne zachowanie parametru, na
podstawie którego jest dokonywana detekcja. Rozpatrzone zostaną następujące cechy:
cechy obrazu,
krzywizny geometryczne,
przestrzenie skali,
piramidy i siatki,
zestaw danych wejściowych.
Po dokonaniu klasyfikacji przeprowadzimy testy wybranych algorytmów pod kątem
ich optymalizacji na potrzeby płynnego działania na urządzeniach mobilnych. W
szczególności będą to urządzenia z systemem operacyjnym OS Android.
Celem pracy jest stworzenie aplikacji - dema, które pozwoli na benchmarkowe
testowanie różnych algorytmów oraz wybranie najlepszych sugestii optymalizacyjnych,
przyspieszających obecnie dostępne algorytmy. Dodatkowo zaprezentujemy nowoczesny
sposób tworzenia aplikacji na system mobilny OS Android z wykorzystaniem elementów
rozszerzonej rzeczywistości (AR). Przedstawione zostanie praktyczne zastosowanie
opisywanych algorytmów na potrzeby przekazywania informacji oraz rozrywki.
1 Wprowadzenie
1.1 Cechy punktowe
Cechy punktowe są kluczowym zagadnieniem tej pracy. Sposób ich opisu oraz
działanie jest niezbędny do zrozumienia działania algorytmów oraz generowania
rzeczywistości rozszerzonej (AR).
Cechy (ang. features) rozumiane są jako specyficzne konfiguracje pikseli układające
się w określone struktury:
krawędzie,
7
linie,
zakończenia linii,
rogi,
skupiska (blobs) – koła lub kule,
tekstury,
grzbiety (ridges) i szkielety.
Struktury zwykle wykrywa się poprzez filtrowanie obrazu. Odpowiedź to najczęściej
liczba rzeczywista. Filtry mogą być 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).
Cechy punktowe obiektów pozwalają zmniejszyć rozmiar ich opisu na obrazie. Mogą
ułatwić przeprowadzenie operacji odnajdywania korespondujących elementów na kolejnych
obrazach w sekwencji. Wymagają uważnego doboru progów dyskryminacji dla uzyskania
obiektów istotnych do śledzenia elementów. Ważnymi własnościami punktów
charakterystycznych są:
mała czułość na zmiany orientacji i przesunięcia obiektów,
odporność na szum i wahania wartości pikseli obiektów w czasie wywołane zmianą
oświetlenia pola obserwacji,
mała złożoność obliczeniowa,
łatwość przeprowadzania operacji dopasowania w algorytmach śledzenia.
Cechy punktowe wyznacza się, analizując zmiany wartości pikseli lub wyliczając
statystyki wartości w kołowym obszarze wokół danego piksela. Przekroczenie zadanego
progu detekcji wskazuje na wystąpienie cechy punktowej. W zastosowaniach ważne są
detektory „narożników” Harrisa, FAST. Zostaną one zaprezentowane w dalszej części pracy,
wraz z innymi algorytmami.
Należy podkreślić, że przetwarzanie punktów charakterystycznych pozwala na
zwiększenie szybkości porównywania obrazów. Algorytm analizujący każdy piksel i
zestawiający wszystkie piksele między obrazami jest niewydajny. Ponadto nie daje pewności,
że rozpatrywane piksele są znaczące i niezmienne w czasie. Z tego powodu analizuje się
punkty cechujące się, o ile to możliwe, niezmiennością w zależności od rotacji, przesunięcia i
skali. W literaturze są one nazywane punktami kluczowymi lub charakterystycznymi.
Klasycznym podejściem do analizy obrazów jest trójfazowy algorytm polegający na:
detekcji punktów charakterystycznych,
wydobyciu cech (deskryptorów), czyli opisów tych punktów,
znalezieniu odpowiadających sobie punktów charakterystycznych dwóch obrazów.
Jednym z najpowszechniejszych zastosowań cech punktowych w aplikacjach są rozwiązania
powiązane z generowaniem rzeczywistości rozszerzonej (AR).
1.2 Rzeczywistość Rozszerzona
Rzeczywistość Rozszerzona (ang. Augmented Reality, AR) jest terminem
określającym metody łączenia scen rzeczywistych z elementami wirtualnymi
8
wygenerowanymi przez komputer. Łączenie elementów wirtualnych i rzeczywistych zachodzi
w czasie rzeczywistym. Ogólnie przyjętą definicję Rzeczywistości Rozszerzonej przedstawił
Ronald Azuma. Uwypukla ona następujące cechy Augmented Reality:
łączenie scen wirtualnych i rzeczywistych,
interaktywność w czasie rzeczywistym,
poprawne odwzorowywanie wzajemne położenie obiektów.
Definicja nie ogranicza Rzeczywistości Rozszerzonej jedynie do łączenia obrazów,
ponieważ coraz częściej spotyka się systemy oddziałujące na inne zmysły - słuch czy węch.
Systemy Rzeczywistości Rozszerzonej wywodzą się z systemów Rzeczywistości Wirtualnej
(VR), które przenoszą użytkownika do syntetycznie wygenerowanego środowiska. Systemy
AR należą do rodziny systemów Mixed Reality, którą zdefiniował Paul Milgram.
Dzięki Rzeczywistości Rozszerzonej percepcja użytkownika wzbogacona zostaje o
wirtualne informacje, które pomagają w wykonywaniu rzeczywistych zadań.
Podstawą działania każdego systemu AR jest odnalezienie oraz ciągłe śledzenie
wybranych punktów odniesienia na scenie rzeczywistej w celu odpowiedniego naniesienia na
nią obiektów wirtualnych. Obecne rozwiązania bazują między innymi na detekcji i śledzeniu
kształtów, krawędzi i innych cech charakterystycznych obrazu. Jeśli chodzi o zastosowania
nawigacyjne, detekcja struktur na obrazie może zostać wzbogacona o dane o położeniu
pochodzące z odbiornika GPS lub kompasu.
Oprogramowanie oraz sprzęt dedykowany systemom AR:
Współczesne zastosowania Systemów Rzeczywistości Rozszerzonej zyskują coraz
większą popularność. Systematycznie polepsza się jakość urządzeń optycznych. Następuje
miniaturyzacja komputerów, a ich ceny są coraz niższe. Czynniki te powodują, że
Rzeczywistość Rozszerzona stosowana jest w wielu dziedzinach życia. Wykorzystuje się ją w
pracach specjalistycznych, narzędziach użytkowych, reklamie oraz przemyśle rozrywkowym.
Aplikacje mobilne:
W zastosowaniach mobilnych dominują programy nawigacyjne oraz gry.
Zaprezentujemy teraz przykładowe aplikacje dostępne obecnie na telefonach komórkowych.
Wikitude jest aplikacją, która za pomocą algorytmów Rzeczywistości Rozszerzonej
wyświetla informacje o otoczeniu użytkownika widocznym poprzez zamontowaną w
telefonie kamerę. Aplikacja określa położenie użytkownika za pomocą odbiornika GPS,
kompasu oraz ackelereometru. Następnie na tej podstawie uzyskuje z bazy danych informacje
o istotnych punktach w otoczeniu. Istnieje kilka wersji omawianej aplikacji. Każda z nich
wyświetla informacje innego typu, np. o ważnych punktach turystycznych (Travel guide). Na
podobnej zasadzie działają aplikacje takie jak Layar czy SREngine.
TwittARound jest reprezentantem społecznościowych aplikacji AR. Za jego pomocą
można zobaczyć, kto w okolicy zamieszcza posty na serwisie Twitter. Na obraz z kamery
naniesione zostają ikony reprezentujące aktywnych użytkowników znajdujących się w
przestrzeni zawartej w polu widzenia kamery.
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.
Transmisje telewizyjne:
9
Podczas transmisji sportowych programy AR wykorzystywane są do wyświetlania
istotnych informacji (np. linii spalonego) wirtualnie nałożonych na obraz areny sportowej
nadawany na żywo. Systemy AR coraz częściej pełnią rolę wirtualnej interaktywnej
scenografii w studiach telewizyjnych. Z Rzeczywistości Rozszerzonej korzysta się też w celu
nakładania wirtualnych reklam podczas transmisji. Mogą one być odmienne dla każdej ze
stacji telewizyjnych nadających dany program, a tym samym skierowane do widzów w
konkretnym regionie nadawania.
Oprócz wymienionych wyżej zastosowań Rzeczywistość Rozszerzona jest obecnie
wdrażana i rozwijana w wielu innych dziedzinach, takich jak medycyna, militaria, edukacja,
projektowanie czy produkcja. W MIT Media Lab (laboratorium Szkoły Architektury i
Planowania będącej częścią Massachusetts Institute of Technology), opracowano prototyp
interfejsu użytkownika, będący realizacją pomysłu z filmu „Raport Mniejszości”. Sterowanie
w opisywanym interfejsie odbywa się za pomocą gestów dłoni. Istniejąca w rzeczywistości
wersja interfejsu za pomocą zestawu kamer śledzi specjalne znaczniki zamontowane na
opuszkach palców. W wersji filmowej użyto przezroczystego wyświetlacza. W przyszłości
pomysł ten mógłby otworzyć nowe zastosowania dla systemów Rzeczywistości Rozszerzonej.
Być może posłuży jako panel operatorski, który zapewni jednoznaczne rozpoznanie
poszczególnych urządzeń oraz bezpośrednią interakcję z nimi.
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.
Stworzyliśmy użyteczną aplikację mobilną - demo, które po wykryciu zadanego
obrazu (na potrzeby testów wybrano obrazy „Polowanie Akhbara" oraz „Gwiaździsta Noc"
Vincenta van Gogha), generuje w OpenGL sześcian podążający za kamerą. Ukazuje to
łatwość tworzenia aplikacji z elementami rzeczywistości rozszerzonej.
Podsumowanie:
Rzeczywistość Rozszerzoną można określić jako szerokie spektrum aplikacji
tworzonych na potrzeby różnych, często niespokrewnionych zastosowań. Wiele
przedstawionych rozwiązań to prototypy we wczesnym stadium rozwoju. Obecnie największą
popularność zdobywają aplikacje na urządzenia mobilne, ponieważ wymagają najmniejszego
nakładu ze strony użytkownika. Programy tego typu tworzone są niemal na każdy średniej
klasy telefon komórkowy. Inne rozwiązania, takie jak specjalne okulary, są jeszcze drogie
oraz pod wieloma względami niedoskonałe. Zostało to zaprezentowane we wcześniejszych
podrozdziałach. Programy przeprowadzające syntezę elementów w oparciu o informacje
zawarte na obserwowanym obrazie używają specjalnych markerów jako punktów odniesienia.
Inne metody niewymagające stosowania syntetycznych punktów odniesienia są trudne w
implementacji oraz ograniczone do niewielu zastosowań, jak np. śledzenie twarzy. Z tego
powodu postanowiliśmy stworzyć demo, które generuje AR korzystając z markera (obrazy
van Gogha). Nie sposób generować rzeczywistości rozszerzonej bez znajomości pojęcia cech
punktówych, które zostały opisane poniżej.
2 Algorytmy bazujące na punktach kluczowych
Algorytmy bazujące na cechach najpierw znajdują punkty szczególne w danych
obrazach. Następnie dopasowywują je parami i na podstawie ich położenia wyliczają wektor
przemieszczenia. Jakość algorytmu w znacznym stopniu zależy od jakości znalezionych
10
punktów szczególnych i ich opisu. Algorytm powinien wykrywać te punkty w odpowiednich
miejscach niezależnie od zmian w naświetleniu, położeniu i orientacji obrazu, a także w
pewnym stopniu od zmian punktu widzenia czy skali.
2.1 SIFT: Scale Invariant Feature Transform
Algorytm ten jest obecnie najpowszechniej stosowany przy tworzeniu obrazów
panoramicznych ze względu na jego bardzo dobre wyniki w porównaniu do innych tego typu
algorytmów (Mikolajczyk & Schmid). Operuje na obrazach w skali szarości.
2.1.1 Wykrywanie ekstremów w przestrzeni skali
Punkty mogące być kluczowymi identyfikowane są za pomocą wydajnego algorytmu,
a następnie sprawdzane pod względem niezależności od przekształceń (Lowe, Distinctive
Image Features from Scale-Invariant Keypoints, 2004). Najpierw są lokalizowane w obrazie
oraz w konkretnej skali w taki sposób, aby mogły być identycznie umiejscowione w innym
widoku tego samego obiektu. Następnie, przy wykorzystaniu ciągłej przestrzeni skali,
znajdowane są punkty niewrażliwe na zmianę skali poprzez wyszukiwanie cech stabilnych we
wszystkich możliwych skalach.
Przestrzeń skali obrazu zdefiniowana jest jako funkcja będąca splotem funkcji
Gaussa o różnych skalach z obrazem wejściowym :
(1)
Gdzie jest operatorem splotu oraz
(2)
Aby znalezione punkty kluczowe były stabilne w przestrzeni skali, stosuje się wyszukiwanie
ekstremów tej przestrzeni stworzonej poprzez splot różnic funkcji Gaussa (Difference-of-
Gaussian) z obrazem. , która może zostać obliczona poprzez różnicę dwóch
sąsiadujących skali z uwzględnieniem stałego mnożnika k:
( ) (3)
Funkcja ta wykorzystywana jest ze względu na łatwość obliczeń. Wygładzony obraz L musi
zostać wyznaczony w każdym przypadku opisu cech w przestrzeni skali. D jest obliczana
przez proste odjęcie obrazów (Lowe, Distinctive Image Features from Scale-Invariant
Keypoints, 2004).
Oprócz tego udowodniono, że różnica funkcji Gaussa, zwana DoG, jest bliską
aproksymacją znormalizowanego Laplasjanu z funkcji Gaussa , którego ekstrema są, w
porównaniu do wielu innych dostępnych funkcji, najbardziej stabilnymi punktami
kluczowymi w obrazach (Mikolajczyk K. , 2002).
Zależność pomiędzy D a może zostać wyprowadzona ze wzoru na dyfuzję ciepła:
11
(4)
Wynika stąd, że może zostać wyliczone ze skończonej aproksymacji
przy
wykorzystaniu różnicy pomiędzy sąsiadującymi skalami oraz :
(5)
a zatem:
(6)
Pokazuje to, że jeśli funkcja DoG posiada skale różniące się o stałą wartość, automatycznie
uwzględnia normalizację skali wymaganą przez Laplasjan niezależny od skali.
Współczynnik (k – 1) w równaniu jest stały dla wszystkich skali i nie wpływa na położenie
ekstremów. Błąd aproksymacji zbliża się do zera wraz ze zbliżaniem się k do 1. Jednak w
praktyce okazało się (Lowe, Distinctive Image Features from Scale-Invariant Keypoints,
2004), że aproksymacja ma znikomy wpływ na stabilność wykrywania ekstremów i ich
lokalizacji, nawet dla stosunkowo dużych różnic między skalami, jak √ .
12
Na Rysunek 1. została zaprezentowana wydajna metoda konstrukcji . Obraz
wejściowy jest przyrostowo splatany z funkcją Gaussa, aby dawać obrazy oddzielone w
przestrzeni skali stałą wartością współczynnika k, zaprezentowaną w lewej kolumnie. Każda
oktawa w przestrzeni skali (odpowiadająca podwajaniu ) została podzielona na stałą liczbę
interwałów s, takich, że ⁄ . Należy stworzyć s + 3 obrazy rozmyte dla każdej oktawy -
tak, aby końcowe wykrywanie ekstremów obejmowało pełną oktawę. Sąsiadujące obrazy są
od siebie odejmowane, aby stworzyć obrazy różnicowe DoG, pokazane po prawej stronie. Po
przetworzeniu pełnej oktawy obraz rozmyty funkcją Gaussa o równej dwukrotności
początkowej jej wartości (obraz ten będzie trzecim obrazem od początku zestawu obrazów)
jest skalowany poprzez wzięcie każdego wiersza i co drugiego piksela z każdej kolumny.
Rysunek 1: Dla każdej oktawy przestrzeni skali obraz jest poddawany splotowi z funkcją Gaussa, dając w wyniku
zestaw obrazów w lewej kolumnie. Sąsiadujące obrazy są odejmowane od siebie tworząc różnice w prawej kolumnie.
Po każdej oktawie obraz rozmyty jest zmniejszany dwukrotnie.
13
Jakość próbkowania zależna od nie różni się od tej na początku poprzedniej oktawy,
podczas gdy obliczenia są mocno zredukowane.
Rysunek 2: przykład piramidy rozmytych obrazów oraz piramidy DoG. Źródło: (Ostiak).
W celu wykrycia ekstremów w każdy piksel porównywany jest z ośmioma
sąsiadami w danym obrazie oraz z dziewięcioma w skali ponad i poniżej, tak jak na Rysunek
3. Piksel jest oznaczany jako ekstremum, jeśli jest większy bądź mniejszy od wszystkich
sąsiadujących. Koszt takiego sprawdzenia jest stosunkowo niski, gdyż większość
sprawdzanych punktów jest odrzucana podczas kilku pierwszych porównań.
Ważnym zagadnieniem jest ustalenie częstotliwości próbkowania przestrzeni obrazu i
skali niezbędnej do wiarygodnego znalezienia ekstremów. Niestety okazuje się, że nie istnieje
określona minimalna odległość pomiędzy dwoma ekstremami, jako że mogą one leżeć bardzo
blisko siebie. Można to zauważyć, rozważając przypadek białego koła na czarnym tle.
Pojedyncze maksimum w przestrzeni skali występuje w miejscu, gdzie pozytywny region
centralny funkcji DoG dopasuje się do rozmiaru i położenia okręgu. Dla bardzo wydłużonej
elipsy znajdziemy dwa ekstrema położone blisko jej końców. Jednak skoro położenie
maksimów jest ciągłą funkcją obrazu, to dla elipsy o umiarkowanym wydłużeniu znajdziemy
się pomiędzy powyższymi przypadkami, z dwoma maksimami leżącymi bardzo blisko siebie.
Z tego powodu należy znaleźć równowagę pomiędzy wydajnością a dokładnością. W
praktyce okazuje się (Lowe, Distinctive Image Features from Scale-Invariant Keypoints,
2004), że ekstrema leżące blisko siebie są dość niestabilne nawet przy niewielkich zmianach
w obrazie. Najlepsze wartości znajdowane są eksperymentalnie poprzez przestudiowanie
wyników dla różnych częstotliwości próbkowania. Wybiera się te dające najbardziej rzetelne
rezultaty w warunkach symulacyjnych.
14
Rysunek 3: Ekstrema funkcji DoG są wykrywane poprzez porównanie piksela (oznaczonego jako X) z jego
dwudziestoma sześcioma sąsiadami (oznaczone kołami) w obszarze 3x3 w obrazie oraz jego dwóch sąsiednich skalach.
Częstotliwość próbkowania w dziedzinie skali jest wyznaczona na podstawie badania
różnych obrazów z kamery. Eksperymenty opisane w literaturze (Lowe, Distinctive Image
Features from Scale-Invariant Keypoints, 2004) wykazały, że największa powtarzalność
osiągana jest przy trzech skalach na oktawę. Wynika to z faktu, że większa liczba skali na
oktawę powoduje wykrycie znacznie większej liczby ekstremów lokalnych, które okazują się
mało stabilne i nie są znajdowane w obrazach po przekształceniu. Dzięki tak małej
częstotliwości wykrywanie ekstremów jest mało kosztowne obliczeniowo.
Po określeniu częstotliwości próbkowania w dziedzinie skali należy ustalić
częstotliwość próbkowania w przestrzeni zależną od skali wygładzania. Również w tym
przypadku istnieje zależność pomiędzy częstotliwością a jakością wykrywania ekstremów,
wynikająca z możliwej małej odległości pomiędzy ekstremami. Oczywiście wygładzanie
takie powoduje efektywną stratę dużej ilości informacji o wysokiej częstotliwości. Z tego
powodu warto zastanowić się nad rozszerzeniem obrazu. Pozwala to otrzymać większą liczbę
punktów kluczowych. Rozmiar obrazu jest zwiększany dwukrotnie przed zbudowaniem
pierwszego poziomu piramidy, przy wykorzystaniu interpolacji liniowej. Zakładając, że obraz
wejściowy charakteryzuje się rozmyciem o co najmniej (jest to minimum wymagane
aby uniknąć efektu aliasingu), obraz o dwukrotnie większym rozmiarze rozmyty jest z
Oznacza to, że potrzeba niewielkiego dodatkowego rozmycia otrzymanego obrazu
przed rozpoczęciem tworzenia oktawy skali. Działanie takie zwiększa liczbę stabilnych
punktów kluczowych prawie czterokrotnie. Nie zauważono jednak innych pozytywnych
skutków dalszego rozszerzania obrazu (Lowe, Distinctive Image Features from Scale-
Invariant Keypoints, 2004).
15
2.1.2 Wyznaczanie dokładnego położenia punktów kluczowych
Po znalezieniu punktów mogących być kluczowymi poprzez porównanie ich z
sąsiednimi, następnym krokiem jest dokładne przeanalizowanie danych dotyczących ich
lokalizacji, skali oraz stosunku krzywizn w sąsiedztwie. Pozwala to odrzucić punkty o słabym
kontraście (tym samym wrażliwe na szum) lub niepoprawnie zlokalizowane na krawędzi.
Dzięki opracowaniu metody (Lowe, Distinctive Image Features from Scale-Invariant
Keypoints, 2004) dopasowania trójwymiarowej funkcji kwadratowej do lokalnych punktów
próbkowych w celu określenia interpolowanej lokalizacji ekstremum udało się znacznie
polepszyć dopasowanie i stabilność punktów kluczowych znalezionych jako piksele.
Dokonuje się tego używając rozszerzenia Taylora do funkcji przestrzeni skali .
Funkcja jest przesunięta tak, że początek układu współrzędnych znajduje się w punkcie
próbkowania:
(7)
gdzie D i jego pochodne przetwarzane są w punkcie próbkowania oraz jest
przesunięciem względem tego punktu. Położenie ekstremum , wyznaczane jest poprzez
przyrównanie różniczki powyższej funkcji względem x do zera, co daje
(8)
Hesjan oraz pochodna D są aproksymowane przy wykorzystaniu różnic sąsiednich punktów.
Jeśli przesunięcie jest większe niż 0,5 w którymkolwiek z kierunków, ekstremum leży
bliżej innego piksela. W takim przypadku próbkowany punkt jest zmieniany i na nim
dokonuje się interpolacja. Wynikowe przesunięcie jest dodawane do położenia tego punktu,
aby otrzymać interpolowane położenie ekstremum.
Obliczenie wartości funkcji w ekstremum jest przydatne przy odrzucaniu niestabilnych
punktów kluczowych o niskim kontraście. Wartość funkcji można obliczyć korzystjąc ze
wzoru:
(9)
16
2.1.3 Usuwanie wpływu krawędzi
Ze względu na stabilność usuwanie punktów kluczowych o niskim kontraście nie jest
konieczne. Funkcja DoG daje natomiast wysoką wartość wzdłuż krawędzi nawet jeśli
zlokalizowanie tam punktu kluczowego nie jest wyraźnie uzasadnione (Lowe, Distinctive
Image Features from Scale-Invariant Keypoints, 2004). Skutkuje to brakiem stabilności na
niewielki szum. Maksimum funkcji DoG nieznacznie wyróżniające się ponad otaczające je
wartości będzie charakteryzowało się wysoką wartością krzywizny poprzecznej do krawędzi,
a niską wzdłuż krawędzi. Krzywizny mogą zostać wyliczone z macierzy Hesjanu 2x2, H,
wyznaczonej dla miejsca i skali związanej z punktem kluczowym:
[
] (10)
Wartości pochodnych wyliczane są poprzez różnice sąsiednich pikseli.
Wartości własne macierzy H są proporcjonalne do krzywizn D. W związku z tym, że
interesują nas nie same wartości własne, ale ich stosunek, możemy wprowadzić α jako
większą z wartości własnych oraz β jako mniejszą. Sumę tych wartości możemy obliczyć jako
ślad H, natomiast iloczyn jako wyznacznik:
(11)
(12)
W przypadku, w którym wyznacznik jest ujemny, wartości krzywizn mają różne znaki.
Oznacza to, że punkt nie jest ekstremum i jest odrzucany. Niech r będzie stosunkiem większej
wartości własnej do mniejszej, tak, że . Wówczas poniższa formuła jest zależna
jedynie od stosunku wartości własnych, a nie ich wartości.
(13)
Wynik równania jest minimalny, jeśli wartości własne są sobie równe, a rośnie wraz ze
wzrostem r. Chcąc sprawdzić czy stosunek wartości własnych jest większy od danej wartości
r, musimy zweryfikować:
(14)
Sprawdzenie tej nierówności jest bardzo wydajne obliczeniowo. Zajmuje zwykle mniej niż 20
operacji zmiennoprzecinkowych dla każdego punktu kluczowego.
17
2.1.4 Przypisanie orientacji
Poprzez przypisanie orientacji do każdego znalezionego punktu kluczowego
deskryptor tego punktu będzie stworzony relatywnie do jego orientacji. Dzięki temu zyska
niezależność od orientacji. Pomimo kilku wad, takich jak ograniczenie możliwości
wykorzystania deskryptorów do niebazujących na spójności orientacji, metoda ta okazała się
najbardziej stabilna (Lowe, Distinctive Image Features from Scale-Invariant Keypoints,
2004). Skala punktu kluczowego wykorzystywana jest do wybrania obrazu L spleconego z
funkcją Gaussa o najbliższej skali. Dzięki temu wszystkie obliczenia dokonywane są
niezależnie od skali. Dla każdej próbki w danej skali obliczany jest kierunek i
wielkość gradientu. Wartości te obliczane są na podstawie różnic pomiędzy
pikselami:
√ (15)
( ) (16)
Histogram orientacji jest tworzony na podstawie orientacji gradientów w sąsiedztwie wokół
danego punktu. Histogram ten ma 36 przedziałów pokrywających 360 stopni. Każda wartość
dodawana do histogramu jest ważona wielkością gradientu oraz oknem gaussowskim o σ
równym 1,5 x skala danego punktu kluczowego.
Maksima histogramu orientacji odpowiadają dominującym kierunkom lokalnego
gradientu. Wybierany jest najwyższy wierzchołek. Jeśli w histogramie istnieje inne
maksimum o wielkości co najmniej 80% najwyższego, tworzony jest kolejny punkt kluczowy
z daną orientacją. Oznacza to, że w punktach, dla których w histogramie istnieje wiele
wierzchołków o podobnej wielkości, zostanie stworzonych wiele punktów kluczowych o tej
samej lokalizacji, ale różnych orientacjach. Zwykle około 15% punktów posiada wiele
orientacji, ale wpływa to znacząco na stabilność dopasowania punktów kluczowych (Lowe,
Distinctive Image Features from Scale-Invariant Keypoints, 2004). Na koniec trzy wartości
histogramu najbliższe każdego wierzchołka interpolowane są parabolą, aby lepiej wyznaczyć
położenie wierzchołka.
2.1.5 Lokalny deskryptor obrazu
Opisane powyżej operacje przyporządkowały każdemu punktowi kluczowemu
lokalizację, skalę oraz orientację. Parametry zostały wyliczone z powtarzalnością
zapewniającą niezmienniczość względem nich. Następnym krokiem jest stworzenie
deskryptora obszaru obrazu będącego indywidualnym, a jednocześnie możliwie
niezmienniczym względem pozostałych przekształceń, takich jak zmiana naświetlenia czy
punktu widzenia. Autor algorytmu, po analizie wielu badań (Lowe, Distinctive Image
Features from Scale-Invariant Keypoints, 2004), zdecydował się na zastosowanie podejścia
bazującego na biologicznym modelu widzenia jako funkcji neuronów w korze mózgowej.
Rysunek 4. przedstawia sposób tworzenia deskryptora. W pierwszym kroku
wyznaczane są wielkość i kierunek gradientu w punktach wokół punktu kluczowego. W tym
18
celu używa się skali punktu kluczowego jako poziomu rozmycia gaussowskiego obrazu. Dla
osiągnięcia niezmienniczości względem obrotu współrzędne deskryptora oraz kierunki
gradientów obracane są relatywnie do orientacji punktu kluczowego. Ze względów
wydajności gradienty są wyliczane zawczasu dla wszystkich poziomów piramidy. Widoczne
są jako małe strzałki po lewej stronie Rysunek 4.
Gaussowska funkcja ważąca o σ równym połowie wielkości okna deskryptora
stosowana jest do wyliczenia wielkości gradientu w każdym punkcie. Taki zabieg stosuje się,
aby zapobiec nagłym zmianom w deskryptorze przy niewielkich zmianach w pozycji okna
oraz aby nadać mniejsze znaczenie gradientom leżącym daleko od środka deskryptora,
ponieważ są one bardziej narażone na błędy.
Deskryptor punktu kluczowego pokazany jest po prawej stronie Rysunek 4. Pozwala
on na znaczne zmiany w położeniu gradientów dzięki zastosowaniu podobszarów o wielkości
4x4 pola. Na rysunku widocznych jest osiem kierunków dla każdego histogramu, z
długościami strzałek odpowiadającymi wielkościom gradientów. Próbka gradientu po lewej
stronie może przemieścić się aż o 4 pozycje próbkowania, dając wciąż ten sam histogram po
prawej stronie.
Ważne jest, aby zapobiec wszelkim efektom wynikającym z granicznego przejścia
danej próbki z jednego histogramu do drugiego lub z jednego kierunku gradientu w inny. W
związku z tym używana jest trójliniowa interpolacja przy przyporządkowywaniu danej
wartości do odpowiedniego przedziału histogramu. Innymi słowy, każda wartość mnożona
jest przez wagę równą 1 – d dla każdego wymiaru, gdzie d równe jest odległości próbki od
środkowej wartości przedziału histogramu.
Rysunek 4: Deskryptor punktu kluczowego tworzony jest poprzez obliczenie wartości i kierunku gradientów w każdym punkcie w
danym sąsiedztwie, co jest widoczne po lewej stronie. Wartości gradientów ważone są za pomocą okna gaussowskiego,
oznaczonego zielonym okręgiem. Wartości te są następnie akumulowane w histogramach obejmujących podobszary 4x4, widoczne
po prawej stronie.
Kierunki i wartości gradientu Deskryptor punktu kluczowego
19
Deskryptor budowany jest z wektorów zawierających wartości ze wszystkich
histogramów. Odpowiadają one długościom strzałek po prawej stronie Rysunek 4. Widać tam
macierz 2x2 histogramy. Eksperymentalnie (Lowe, Distinctive Image Features from Scale-
Invariant Keypoints, 2004) najlepsze rezultaty zostały osiągnięte dla macierzy 4x4
histogramy zawierające 8 przedziałów każdy. Daje to 128 wartości w deskryptorze dla
każdego punktu kluczowego.
Na koniec procesu tworzenia deskryptor jest modyfikowany tak, aby zapewnić
punktowi kluczowemu stabilność względem naświetlenia. Wektor wartości deskryptora jest
normalizowany do długości jednostkowej. Zmiana kontrastu w obrazie, podczas której
wartość każdego piksela jest mnożona przez stałą, spowoduje pomnożenie wartości
gradientów przez tę samą stałą. Oznacza to, że taka zmiana zostanie zredukowana przez
normalizację. Zmiana jasności poprzez dodanie stałej do każdego piksela nie wpłynie na
zmianę wartości gradientów, ponieważ są one liczone z różnicy pomiędzy pikselami. Wynika
to z własności, że deskryptor jest niezmienniczy względem liniowych zmian w naświetleniu.
W przypadkach rzeczywistych występują jednak również nieliniowe zmiany w naświetleniu,
wynikające ze zmian w nasyceniu kamery lub oświetlenia przy zmianie punktu widzenia.
Mogą one powodować duże różnice w wartościach gradientów. Jest jednak mało
prawdopodobne, że spowodują zmiany kierunków gradientów. Dlatego należy zredukować
wpływ dużych wartości gradientów poprzez obcięcie wartości w znormalizowanym wektorze
tak, aby żadna z nich nie była większa od 0,2, a następnie ponownie znormalizować wektor.
Oznacza to ograniczenie wpływu dużych wartości gradientu na dopasowanie, a zwiększenie
wpływu dopasowania kierunków gradientu. Wartość 0,2 została wyznaczona
eksperymentalnie (Lowe, Distinctive Image Features from Scale-Invariant Keypoints, 2004).
2.1.6 Dopasowanie punktów kluczowych
Zastosowanie algorytmów wyszukujących punkty kluczowe do rozpoznawania
obiektów polega na dopasowaniu znalezionych punktów lub ich grup do odpowiadających im
punktów dla obiektu modelowego. Zwykle najpierw szuka się dopasowania dla pojedynczych
punktów do punktów będących w bazie danych. Wiele z takich dopasowań jest błędnych,
dlatego grupy co najmniej trzech punktów są następnie dopasowywane w taki sposób, aby
zgadzały się co do klasy obiektu i jego pozycji. Dopasowuje się grupy punktów, ponieważ
daje to znacznie wyższe prawdopodobieństwo poprawności dopasowania. Następnie każda z
dopasowanych grup punktów jest sprawdzana dokładniej poprzez dopasowanie i
zastosowanie przekształceń geometrycznych modelu. Celem jest osiągnięcie takiego ułożenia
jak na obrazie. Znalezienie tych przekształceń decyduje o poprawności interpretacji.
Najlepsze dopasowanie dla każdego punktu kluczowego znajdowane jest poprzez
wyszukanie jego najbliższego sąsiada wśród punktów drugiego obrazu. Najbliższym sąsiadem
jest punkt o najmniejszej odległości euklidesowej pomiędzy wektorami deskryptorów
opisanych w poprzednim rozdziale. Wiele ze znalezionych punktów szczególnych będzie
leżało poza obszarem dopasowania. W związku z tym nie znajdą one właściwego
dopasowania. Dlatego potrzebne jest zastosowanie kryterium pozwalającego na odrzucenie
źle dopasowanych punktów. Odrzucenie dopasowań, dla których odległość od najbliższego
sąsiada jest większa od pewnej ustalonej wartości nie spełnia tego zadania (Lowe, Distinctive
20
Image Features from Scale-Invariant Keypoints, 2004). Z tego powodu zaproponowano
porównywanie odległości najbliższego sąsiada do drugiego najbliższego. Podejście takie
będzie skuteczniejsze, ponieważ wiadomo, że prawidłowe dopasowanie będzie oparte na
najbliższym sąsiedzie leżącym znacznie bliżej niż przy nieprawidłowym dopasowaniu, dla
którego występuje wiele prawdopodobnych złych dopasowań o podobnych odległościach.
Dopasowanie odległości drugiego najbliższego sąsiada może być uważane za estymowanie
gęstości niewłaściwych dopasowań w danym fragmencie przestrzeni skali. Z
przeprowadzonych eksperymentów (Lowe, Distinctive Image Features from Scale-Invariant
Keypoints, 2004) wynika, że odrzucając dopasowania o stosunku odległości pierwszego do
drugiego najbliższego sąsiada większym niż 0,8, odrzucamy aż 90% niewłaściwych
dopasowań oraz zaledwie 5% właściwych.
Posiadając 128-wymiarowy wektor deskryptora potrzebujemy wydajnego algorytmu
pozwalającego wyszukać najbliższych sąsiadów. Nie istnieje żaden znany algorytm będący
bardziej wydajny dla tak dużej liczby wymiarów niż dokładne przeszukanie. W związku z
tym wyszukiwaniem zajmuje się algorytm Best-Bin-First (BBF) (Lowe, Distinctive Image
Features from Scale-Invariant Keypoints, 2004). Korzysta on ze zmodyfikowanego porządku
przeszukiwania zastosowanego w algorytmie k-d tree. Wymaga konstrukcji stosu jako kolejki
pozwalającej na określenie porządku. Deskryptory w bazie są przeszukiwane względem ich
odległości od przetwarzanego punktu. Przybliżona odpowiedź może zostać podana po
sprawdzeniu określonej liczby punktów poprzez zagłębianie się w kolejne poziomy stosu i
estymowanie odległość znajdujących się tam punktów do aktualnie przetwarzanego. Proces
trwa do momentu stwierdzenia, że z dużym prawdopodobieństwem nie istnieje bliższy punkt.
Modyfikacja polega na przerwaniu przeszukiwania po sprawdzeniu pierwszych dwustu
punktów. Przy około 100 000 punktów w bazie działanie takie przyspiesza wyszukiwanie
dokładnego dopasowania o około dwa rzędy wielkości przy stracie mniej niż 5%
prawidłowych dopasowań.
2.1.7 Wyznaczanie parametrów przekształcenia afinicznego
Poprawność dopasowania każdej grupy punktów kluczowych jest ostatecznie
weryfikowana geometrycznie przy pomocy odpowiedniej metody znajdującej parametry
przekształcenia afinicznego opisującego położenie obrazów względem siebie. Autor
algorytmu SIFT proponuje metodę najmniejszych kwadratów (Lowe, Distinctive Image
Features from Scale-Invariant Keypoints, 2004). Obecnie lepszymi rezultatami cechuje się
metoda zwana RANSAC (RANdom SAmple Consensus), zastosowana przez tego samego
autora w aplikacji ilustrującej działanie algorytmu SIFT.
Transformacja afiniczna odpowiada obrotom trójwymiarowym płaszczyzny przy
rzutowaniu prostopadłym na płaszczyznę ekranu. Może być złą aproksymacją obrotów
trójwymiarowych obiektów niebędących płaszczyznami. Z tego powodu lepsze byłoby
rozwiązanie macierzy fundamentalnej przekształcenia. Jednak dla osiągnięcia dobrej
stabilności wymaga ono siedmiu, a nawet większej liczby par dopasowanych punktów.
Tymczasem rozwiązanie przekształcenia afinicznego wymaga tylko trzech par. Chcielibyśmy
rozwiązywać dopasowania mając tylko 3 pary dopasowanych punktów, w związku z czym
21
przekształcenie afiniczne jest lepszym punktem startowym. Słabą aproksymację możemy
zniwelować pozwalając na duże błędy residualne.
Przekształcenie afiniczne punktu modelu [ ] do punktu obrazu [ ] może zostać
zapisane jako:
[ ] [
] [
] [
] (17)
gdzie przesunięciem modelu jest [ ]
, natomiast afiniczny obrót, skalowanie i
rozciągnięcie opisane są parametrami .
Chcemy rozwiązać powyższe równanie względem parametrów transformacji, a zatem
przekształcamy je tak, aby zgrupować niewiadome w jednym wektorze:
[
]
[
]
[ ] (18)
Równanie to opisuje pojedynczą parę dopasowanych punktów. Każda następna para może
zostać dodana, tworząc kolejne dwa rzędy w pierwszej i ostatniej macierzy. Co najmniej 3
pary potrzebne są do rozwiązania równania. Zapisując powyższe równanie w formie
symbolicznej, otrzymamy
(19)
które może być rozwiązane metodą najmniejszych kwadratów. Rozwiązując
[ ] (20)
minimalizujemy sumę kwadratów odległości punktów modelu rzutowanych na punkty
obrazu. W przypadku, gdy nasze dopasowania zawierają błędne pary, dane nie są idealnie
dobrane. W związku z tym uzyskane rozwiązanie również nie będzie doskonałe. W wielu
przypadkach nie ma to dużego znaczenia, ponieważ może okazać się, że otrzymaliśmy
najlepsze możliwe rozwiązanie w sensie statystycznym. Jednak jeśli dane zawierają punkty
leżące w znacznej odległości od idealnego modelu, wyliczony model może być błędny.
W takim przypadku możemy zidentyfikować punkty o największych residuach w
stosunku do znalezionego modelu (Sonka, Hlavac, & Boyle, 2008). Mogą one zostać
odrzucone, a model dopasowania przeliczony. Taka metoda może wydawać się atrakcyjna i
często pozwala osiągnąć pożądany efekt, jednak zakłada pewne z góry ustalone schematy
pochodzenia błędnych danych. Nie jest to właściwe, ponieważ istnieją dwa rodzaje błędnych
danych.
Błędy pomiarowe - obserwacje dokonane na obrazie lub parametry z nich wyliczone
są błędne. Zwykle są niewielkie. Ich rozrzut opisany jest rozkładem normalnym, a
średnia wartość oscyluje wokół zera.
22
Błędy klasyfikacji - występują przy niewłaściwej klasyfikacji pewnych danych. Są
stosunkowo duże i nie ma powodów, aby sądzić, że ich średnia wartość będzie
zbliżona do zera.
Błędy drugiego typu mogą wprowadzić tak duże zakłócenia, że opisana wyżej metoda
częściej pogorszy niż polepszy rozwiązanie. Wynika to z założenia leżącego u podstaw
metody najmniejszych kwadratów, że używanie jak największej ilości dostępnych danych
będzie miało pozytywny efekt wygładzający. Jak opisano powyżej, w niektórych przypadkach
jest to błędne założenie. Wtedy przeciwne podejście używania jak najmniejszej ilości danych
może być lepsze. Takie podejście zastosowano w algorytmie RANSAC, czyli random sample
consensus, który można opisać następująco (Sonka, Hlavac, & Boyle, 2008): przy rozważaniu
dopasowania liniowego dwa punkty wystarczająco definiują linię biegnącą przez nie. Można
zatem wybrać losowe dwa punkty z dostępnego zestawu danych i założyć, że linia je łącząca
jest prawidłowym modelem. Model ten możemy przetestować przez sprawdzenie ile z
pozostałych danych leży „blisko” znalezionego rozwiązania – są to punkty consensusu. Jeśli
ich liczba jest duża, przeliczenie wylosowanego modelu bazując na zestawie punktów
consensusowych poprawi rozwiązanie bez potrzeby zajmowania się punktami leżącymi
daleko od rozwiązania, mogącymi powodować błędy.
Formalnie algorytm RANSAC można przedstawić następująco (Sonka, Hlavac, & Boyle,
2008):
1. Dane jest n punktów { }, których rozkład chcemy opisać modelem
określonym przez co najmniej m punktów ( , dla linii ).
2. Ustaw licznik iteracji .
3. Wybierz losowo m punktów z X i wylicz model na ich podstawie.
4. Dla ustalonej tolerancji ε określ ile elementów X leży w odległości mniejszej niż ε od
wyliczonego modelu. Jeśli liczba ta przekracza ustaloną wartość t, przelicz model
bazując na grupie consensusowej.
5. Ustaw licznik iteracji . Jeśli dla ustalonego , idź do kroku 3, w
przeciwnym przypadku przyjmij model o największej grupie consensusowej lub zgłoś
brak rozwiązania.
Algorytm wymaga ustalenia następujących parametrów:
ε - akceptowalne odchylenie od wyliczonego modelu. Jego wartość nie może zostać
ustalona analitycznie. Empirycznie można na przykład dopasować model do m
punktów, zmierzyć odchylenia i ustalić wartość ε jako liczbę punktów o odchyleniach
poniżej średniej.
t - zadowalająca wielkość grupy consensusowej, sugeruje się (Fischler & Bolles,
1981) ustalenie wartości .
K - liczba iteracji algorytmu w poszukiwaniu zadowalającego dopasowania.
Statystycznie uzasadniona wartość (Fischler & Bolles, 1981) to , gdzie w
jest prawdopodobieństwem z jakim losowo wybrany punkt będzie leżał w odległości
mniejszej niż ε od ustalonego modelu.
23
Algorytm RANSAC okazuje się godnym zaufania rozwiązaniem znajdującym
zastosowanie w wielu dziedzinach związanych z widzeniem komputerowym.
2.2 FAST: Features from Accelerated Segment Test
Algorytm ten został wybrany do analizy z powodu jego dużej szybkości działania oraz
stabilności znalezionych punktów kluczowych. Operuje na obrazach w skali szarości.
2.2.1 Podstawy algorytmu
Kryterium testu segmentowego bazuje na okręgu stworzonym przez 16 pikseli wokół
badanego punktu p (Rosten & Drummond, Machine learning for high-speed corner detection).
Detektor punktów kluczowych klasyfikuje p jako punkt kluczowy, jeśli w okręgu istnieje 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 Rysunek
5. Widzimy test segmentowy wykonany dla . Jest to wartość, dla której odrzucanie
punktów niebędących punktami kluczowymi jest ułatwione, ponieważ wystarczy sprawdzić 4
piksele: pierwszy, piąty, dziewiąty i trzynasty – odpowiadające kierunkom kompasu. Jeśli ta
część testu wypadnie pomyślnie, należy sprawdzić wszystkie pozostałe punkty.
Rysunek 5: Dwunastopunktowy test segmentowy wykrywający narożniki w obrazie. Oznaczone piksele
wykorzystywane są przy wykrywaniu punktów. Piksel p jest środkiem prawdopodobnego narożnika. Łuk oznaczony
linią przerywaną przechodzi przez 12 sąsiadujących ze sobą pikseli jaśniejszych od p co najmniej o wartość t. Źródło:
(Rosten & Drummond, Machine learning for high-speed corner detection)
Metoda ta może zostać zastosowana dla innych wartości n, jednak daje nieco gorsze
rezultaty. Mimo zalet testu segmentowego przeprowadzonego dla , na potrzeby
urządzeń mobilnych warto zastanowić się nad wyborem wartości . Uzasadnieniem jest
wyraźnie lepsza powtarzalność wykrywania punktów kluczowych, co widać na Rysunek 6.
24
Rysunek 6: Wykres powtarzalności wykrywania punktów kluczowych w zależności od liczby punktów kluczowych,
dla różnych wartości n. Dla n<9 wpływ krawędzi jest zbyt duży. Źródło: (Rosten & Drummond, Machine learning for
high-speed corner detection)
2.2.2 Implementacja detektora punktów kluczowych przy pomocy uczenia
maszynowego
Autorzy algorytmu (Rosten & Drummond, Machine learning for high-speed corner
detection) zaprezentowali sposób efektywnej implementacji niniejszego algorytmu przy
pomocy uczenia maszynowego. Jest to proces dwustopniowy. Budując detektor oparty o daną
wartość n, musimy najpierw wykryć wszystkie punkty kluczowe w zbiorze przykładowych
obrazów korzystając z testu segmentowego dla danego n oraz t, opartego na powolnym
algorytmie testującym wszystkie 16 pozycji położonych na okręgu wokół badanego punktu.
Dla każdej pozycji względem badanego punktu p, { } , piksel w niej leżący
oznaczony jako może przyjmować jeden z trzech stanów:
{
Wybierając kolejne x i obliczając ich dla każdego (zbiór wszystkich pikseli we
wszystkich obrazach) dzielimy P na trzy podzbiory: , gdzie każde p jest przypisane
do .
W drugim etapie wprowadzamy zmienną typu boolean przyjmującą wartość
prawda jeśli p jest punktem szczególnym, oraz fałsz w przeciwnym wypadku. Korzystamy z
algorytmu, który poprzez zmierzenie entropii zaczyna od wyboru x dostarczającego
najwięcej informacji o tym, czy badany piksel jest punktem szczególnym. Entropia K zbioru
P opisana jest wzorem:
(21)
gdzie |{ | }| (liczba punktów szczególnych)
oraz |{ | }| (liczba punktów nie będących szczególnymi)
Po
wta
rzal
no
ść %
Ilość punktów kluczowych
25
Przyrost informacji związany z wybranym x jest dany wzorem:
(22)
Po wybraniu x o największym przyroście informacji proces jest powtarzany rekursywnie dla
każdego z trzech podzbiorów. Przykładowo wybierane jest aby podzielić na
, analogicznie dla oraz , gdzie każdy x wybierany jest tak, aby
przynosić najwięcej informacji dla danego podzbioru. Proces jest zakończony, jeśli entropia
podzbioru jest zerowa, czyli gdy wszystkie punkty p w podzbiorze mają tą samą wartość ,
a zatem wszystkie są lub nie są punktami szczególnymi. Wystąpienie takiej sytuacji jest
pewne, ponieważ K jest funkcją danych uczących (Rosten & Drummond, Machine learning
for high-speed corner detection).
Stworzony w ten sposób zbiór danych pozwala zbudować drzewo decyzyjne mogące
skutecznie klasyfikować punkty szczególne w obrazach ze zbioru uczącego. Oznacza to, że z
opdowiednią aproksymacją drzewo zawiera zasady wybranego detektora punktów
szczególnych FAST. Drzewo decyzyjne jest następnie konwertowane do kodu języka
programistycznego, tworząc długi ciąg zagnieżdżonych dyrektyw if-else, który może zostać
skompilowany i używany jako detektor punktów szczególnych.
2.2.3 Minimalizacja oddziałowywania punktów niemaksymalnych
Ponieważ test segmentowy nie oblicza wartości funkcji odpowiedzi dla punktów
szczególnych, wytłumienie punktów niebędących maksymalnymi nie jest możliwe
bezpośrednio po ich wykryciu. Z tego powodu musi zostać wyznaczona funkcja 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 skwantowane, 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:
(∑| |
∑ | |
) (23)
gdzie
{ }
{ }
26
2.2.4 Deskryptor punktów kluczowych i ich dopasowanie
Po wykryciu punktów kluczowych w obu obrazach mających tworzyć panoramę,
należy dopasować w pary odpowiadające sobie punkty znalezione w obu obrazach. Aby
punkty te były jednoznacznie identyfikowalne, trzeba przyporządkować każdemu z nich
deskryptor opisujący dany punkt. Ze względnu na brak możliwości stworzenia deskryptora z
danych zwracanych przez algorytm FAST - wartości opisanej powyżej funkcji V nie są
dostatecznie unikalne - zdecydowano się na zastosowanie i implementację deskryptora
używanego przez algorytm SIFT, opisany wcześniej w rozdziale Lokalny deskryptor
obrazu. Warto podkreślić, że dopasowanie punktów kluczowych w pary odbywa się również
tak samo jak dla algorytmu SIFT, czego opis można znaleźć w rozdziale Dopasowanie
punktów kluczowych. Do wyznaczenia parametrów przekształcenia afinicznego opisującego
położenie obrazów tworzących panoramę względem siebie wybrano algorytm RANSAC,
opisany w rozdziale Wyznaczanie parametrów przekształcenia afinicznego.
2.3 Detektor narożników Harrisa
Detektor narożników Harrisa został opracowany w 1988 roku i do dziś jest często
wykorzystywanym algorytmem. Jego zaletą jest niezmienniczość względem przesunięć 2D
oraz obrotów, niewielkich zmian nasycenia oraz punktu widzenia, a także niska złożoność
obliczeniowa (Sonka, Hlavac, & Boyle, 2008). Jest on wrażliwy na większe zmiany skali oraz
duże zmiany kontrastu. Operuje na obrazach w skali szarości.
2.3.1 Podstawy algorytmu
Detektor narożników Harrisa opiera się o założenie, że jasności pikseli wokół
narożnika będą się silnie zmieniać w wielu kierunkach. Stanowi ulepszoną wersję detektora
Moravca, będącego najprostszym istniejącym detektorem narożników. Wykrywa punkty o
maksymalnym kontraście, czyli narożniki lub ostre krawędzie. Odbywa się to poprzez
badanie średnich zmian jasności w trakcie przesuwania lokalnego okna prostokątnego w
różnych kierunkach i (Harris & Stephens, 1988). Występują trzy przypadki:
1. Jeśli badane regiony są stałej jasności, przesunięcie okna spowoduje niewielką zmianę
jego wartości.
2. Jeśli okno leży na krawędzi, przesunięcie go wzdłuż krawędzi spowoduje niewielką
zmianę jego wartości, natomiast przesunięcie prostopadłe do krawędzi wywoła dużą
zmianę.
3. Jeśli okno leży na narożniku lub pojedynczym punkcie, wówczas każde przesunięcie
spowoduje dużą zmianę wartości. Punkty takie możemy wykryć poprzez znalezienie
punktów, dla których najmniejsza różnica wartości związana z przesunięciem okna
jest duża.
Zmiana E wartości okna związana z przesunięciem (x,y) dana jest wzorem:
∑
| | (24)
27
gdzie w opisuje zastosowane okno: jedność w obrębie prostokątnego regionu, zero poza nim,
obraz wejściowy opisany symbolem I. Przesunięcia (x,y) pochodzą ze zbioru
{ }. Detektor Moravca poszukuje lokalnego maksimum dla min{E}
powyżej pewnej wartości odcięcia.
Detektor Moravca nie jest wolny od błędów. Ich korekta pozwoliła skonstruować detektor
Harrisa. Problemy te wraz z rozwiązaniami opisano poniżej (Harris & Stephens, 1988).
1. Odpowiedź detektora nie jest izotropowa, ponieważ rozważane są tylko
dyskretne wartości przesunięć co 45°. Wszystkie możliwe pośrednie przesunięcia
można określić, dokonując analitycznego rozwinięcia wokół punktu startowego:
∑
[ ] ∑
[ ] (25)
gdzie gradienty aproksymowane są poprzez:
(26)
(27)
A zatem, dla małych przesunięć, E może zostać zapisane jako:
(28)
gdzie
2. Odpowiedź jest zaszumiona z powodu prostokątnego okna binarnego – należy
użyć gładkiego okna kolistego, na przykład gaussowskiego:
(29)
3. Detektor zbyt często odpowiada na krawędzie, ponieważ tylko minimum funkcji
E brane jest pod uwagę – 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:
(30)
gdzie macierz M jest symetryczną macierzą 2x2 postaci:
[
]
28
Można zauważyć, że E jest podobne do lokalnej funkcji autokorelacji, z macierzą M
opisującą jej kształt w badanych punkcie. Niech zatem α, β będą wartościami własnymi
macierzy M. α i β będą proporcjonalne do krzywizn funkcji autokorelacji, tworząc
niezmienniczy względem obrotu opis macierzy M. Tak jak przy detektorze Moravca, musimy
rozważyć trzy przypadki:
A. Jeśli obie krzywizny są niewielkie, tak,
że funkcja autokorelacji jest płaska,
badany region obrazu jest mniej więcej
jednakowej jasności. Odpowiada to
przypadkowi, kiedy przesunięcie okna
w dowolnym kierunku wprowadza
niewielką zmianę 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 poprzek grzbietu
wprowadza zmiany w E. Oznacza to, że
mamy do czynienia z krawędzią.
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.
Rozważmy wykres przestrzeni (α, β). W przypadku idealnym krawędź miałaby
wysoką wartość α oraz zerową β, jednak w rzeczywistości β przyjmie wartość większą od
zera, ale niewielką w porównaniu do α. Wynika to z szumu, pikselizacji oraz kwantyzacji
skali jasności. Narożnik będzie opisany wysokimi wartościami α oraz β, natomiast region
płaski, jednobarwny da niewielkie wartości α i β. Ponieważ wzrost kontrastu w obrazie o
wartość p spowoduje wzrost α oraz β proporcjonalnie o , to jeśli (α,β) należy do części
wykresu opisującej krawędzie, powinno również do niej należeć, dla dodatnich
wartości p. Podobna zasada dotyczy narożników. Z tych powodów przestrzeń (α,β)
podzielona jest jak na Rysunek 7.
2.3.2 Funkcja odpowiedzi narożnika
Do efektywnej klasyfikacji narożników, oprócz opisanego powyżej podziału
przestrzeni krzywizn, potrzebna jest miara jakości odpowiedzi narożnika. Pomaga to w
identyfikacji maksymalnych narożników.
Funkcja taka, oznaczona jako R, musi być funkcją jedynie α oraz β. Dzięki temu
zachowa niezmienniczość względem obrotów. Warto w tym momencie użyć śladu macierzy
M oraz jej wyznacznika. Pozwoli to uniknąć bezpośredniego obliczania wartości własnych tej
macierzy. A zatem (Harris & Stephens, 1988):
7
(31)
β
α
narożniki
krawędzie
krawędzie płasko
Rysunek 7: Przestrzeń krzywizn autokorelacji.
Liniami przerywanymi oznaczono klasyfikację
na regiony narożników, krawędzi bądź płaskie-o
stałej barwie.
29
(32)
Bazując na powyższym, funkcję odpowiedzi narożnika R zdefiniowano jako:
(33)
Funkcja ta przyjmuje wartości pozytywne dla narożników, negatywne dla krawędzi
oraz oscyluje wokół zera dla regionów o podobnej barwie. Warto zauważyć, że zwiększanie
kontrastu obrazu zwiększa wartość odpowiedzi narożnika. Regiony o podobnej barwie
rozpoznawane są poprzez opadanie wartości śladu poniżej ustalonej wartości odcięcia.
Wartość k jest parametrem sterującym algorytmu. W literaturze (Sonka, Hlavac, & Boyle,
2008) proponuje się, aby jego wartość była z przedziału (0,04; 0,15). Piksel oznaczany jest
jako narożnik, jeśli posiada lokalne maksimum dla funkcji odpowiedzi.
2.3.3 Metoda implementacji algorytmu
Planując implementację algorytmu, można rozpisać go następująco (Sonka, Hlavac, &
Boyle, 2008):
1. Wprowadź do obrazu rozmycie Gaussowskie.
2. Oblicz gradient nasycenia dla każdego piksela w dwóch prostopadłych kierunkach,
,
. Można tego dokonać splatając obraz z jednowymiarową maską
aproksymującą pochodną.
3. Dla każdego piksela oraz jego sąsiedztwa:
oblicz wartości macierzy M,
oblicz wartość funkcji odpowiedzi R(M).
4. Wybierz punkty narożników jako punkty o wartości R powyżej pewnej wartości
odcięcia, a następnie usuń punkty niebędące maksymalnymi.
2.3.4 Deskryptor narożników i ich dopasowanie
W związku z brakiem możliwości stworzenia deskryptora z danych zwracanych przez
algorytm - ponieważ wartości funkcji odpowiedzi nie są dostatecznie unikalne ani stabilne -
zdecydowano się na zastosowanie i implementację deskryptora używanego przez algorytm
SIFT oraz FAST, opisany wcześniej w rozdziale Lokalny deskryptor obrazu. Dopasowanie
punktów kluczowych w pary odbywa się również tak samo jak dla algorytmu SIFT, czego
opis można znaleźć w rozdziale Dopasowanie punktów kluczowych. Do wyznaczenia
parametrów przekształcenia afinicznego opisującego położenie obrazów tworzących
panoramę względem siebie wybrano algorytm RANSAC, opisany w rozdziale Wyznaczanie
parametrów przekształcenia afinicznego.
2.4 Algorytm GFTT - Good Features To Track
W 1994 Jianbo Shi oraz Carlo Tomasi wprowadzili modyfikacje do swojej pracy
zatytułowanej „Good Features to Track”, które dały lepsze wyniki w porównaniu do
30
klasycznego detektora krawędzi Harrisa. W algorytmie klasycznym Harrisa funkcja
oceniająca ma postać:
Natomiast Shi oraz Tomasi zaproponowali jej modyfikację do postaci:
Jeżeli wartość funkcji oceny przekracza pewien ustalony próg, wówczas tak samo jak w
algorytmie Harrisa punkt jest uznanwany za narożnik. Jeżeli narysujemy funkcję w wymiarze
, tak samo jak w klasycznym algorytmie Harrisa, otrzymamy poniższy rysunek:
Rysunek 8: Zielony kolor symbolizuje wykrycie narożnika. Widać, że tylko gdy oraz są poniżej pewnej
wartości minimalnej, , mamy wierzchołek.
Algorytm GFTT znajduje N najsilniejszych wierzchołków w obrazie. Obraz powinien
być dostarczony w skali szarości. Następnie należy zadać minimum wyrażone w procentach,
które określa próg jakości wierzchołka. Jeżeli nie jest ono osiągnięte, wszystkie badane
wierzchołki są odrzucane i nie są uznane za narożniki. Następnie ustalamy minimalny dystans
w sensie Euklidesa pomiędzy wykrytymi narożnikami. W ten sposób sortujemy wszystkie
wykryte wierzchołki i wybieramy N najlepszych.
2.5 BRISK - Binary Robust Invariant Scalable Keypoints
Algorytm Brisk pochodzi z 2011 roku, więc jest dość nowym algorytmem. Bazuje na
algorytmie przestrzennym-oktawowym FAST na potrzeby detekcji oraz na testowaniu
binarnych wzorców w celu opisania znalezionych punktów.
Punk kluczowy jest szukany w oktawie ci poprzez analizę ośmiu sąsiadujących
wyników w oktawie ci oraz w korespondujących ze sobą sąsiednich oktawach jedną wyżej i
jedną niżej. We wszystkich trzech oktawach lokalnym maximum jest pixel, znajdujący się
31
możliwie blisko przy wykresie paraboli, która jest dopasowana wzdłuż osi skali w celu
ustalenia prawdziwej skalowalności punktu charakterystycznego. Interpolację widać poniżej.
Rysunek 9: Obraz przedstawia działanie algorytmu BRISK w szczególności interpolację położenia oktawy oraz
porównanie jego działania z algorytem FAST na którym bazuje.
(źródło : http://littlecheesecake.me/blog/13804625/feature-detectors-and-descriptors)
Deskryptory dla algorytmu BRISK mają 512 bitów. Obliczają one ważoną
Gaussowaską średnią na zbiorze pochodzącym ze wzorca punktowego znajdującego się
blisko punktu charakterystycznego. Wzorzec jest skonstruowany jako N pozycji równo
rozmieszczonych na okręgach dookoła punku charakterystycznego. Aby uzyskać odporny na
rotację i skalę unormowany deskryptor, BRISK stosuje próbkowanie wzroca obróconego o
kąt alpha wokół punktu kluczowego k. Otrzymany bitowy deskryptor jest efektem wykonania
krótkodystansowych (pomiędzy sąsiednimi okręgami lub w ich obrębie) porównań par
punktów.
32
Rysunek 10: Obraz przedstawia wygląd bitowego deskryptora powstałego na skutek porównań krótkodystansowych
par punktów.
(źródło : http://littlecheesecake.me/blog/13804625/feature-detectors-and-descriptors)
2.6 DENSE
Detektor ten generuje kilka poziomów punktów charakterystycznych. Ich cechy na
każdym poziomie są umieszczone jako węzły regularnej siatki nakładanej na rozpatrywany
obrazek (poza jego konturami, które nie liczą się jako węzły). Wraz z każdym kolejnym
poziomem parametry cechy takie jak skala, rozmiar węzła, rozmiar granicy obrazka są
mnożone przez ustalony parametr w celu wyróżnienia najlepszych.
2.7 MSER
MSER - maximally stable extremal region extractor to algorytm polegający na
detekcji różniących się między sobą elementów obrazów. Początkowo szukał podobieństw w
dwóch obrazach prezentujących tę samą scenę z dwóch różnych punktów widzenia. Do
detekcji używa się głównie obiektów o określonych parametrach.
Algorytm polega na wyszukiwaniu maksymalnie stabilnych regionów w obrazie.
Można to wytłumaczyć odwołując się do progowania. Wszystkie piksele poniżej zadanego
progu są uważane za czarne, podczas gdy wszystkie powyżej są określane jako białe. W ten
sposób, sterując wartością progową, można spowodować rozrastanie się czarnych plam
reprezentujących czarne piksele. Im większy próg, tym czarny obszar bardziej się rozrasta.
Proces trwa dopóki cały obraz nie stanie się czarny. W trakcie powiększania się czarnego
obszaru konstruowane jest drzewo reprezentujące, przy jakiej wartości progowej piksel został
oznaczony na czarno.
W ten sposób określa się wspomniane regiony ekstremalne (nazwa pochodzi od
przeciwnstawnych kolorów białego i czarnego). Metoda ta jest bardzo wrażliwa na zmienne
naświetlenie obrazu oraz przemieszczający się cień.
W pracy Krystiana Mikolajczyka udowodniono, że jest to algorytm podatny na
rozmycia obrazu, co jest jego największa wadą.
33
2.8 ORB - oriented BRIEF
Detektor
ORB jest rozszerzeniem algorytmu BRIEF. Wprowadzono w nim niezmienność
wobec rotacji. Używa detektora FAST, a jako deskryptor wykorzystuje BRIEF rotujący swój
wzorzec. Na podstawie silnych zmian orientacji wybiera się dobry wzorzec.
Detektor oblicza jakość narożników metodą Harrisa w celu uporządkowania punktów
charakterystycznych wykrytych metodą FAST. Orientacja dla tak wykrytych punktów jest
liczona na podstawie intensywności centroidy. Centroidę definiujemy jako:
Można obliczyć wektor od środka narożnika do centroidy, zwany orientacją :
Warto zauważyć, że orientacji tej nie ma pierwotnie FAST.
Desktryptor
Wzorzec jest poddawany serii obrotów. Po wykonaniu serii obrotów algorytm BRIEF
cechuje niepewność i rozbieżności, ponieważ punkty kluczowe z uwzglednioną rotacją mają
gorsze własności przy testach binarnych.
Aby zneutralizować niekorzystną rozbieżność z klasycznym BRIEF stosuje się metodę
uczącą. Uczy się na podstawie rotujących wzorców. Dzięki temu osiąga się większą
rozróżnialność oraz mniejszą zależność od obrotów.
Algorytm ORB powstał dzięki twórcom biblioteki OpenCV. Uważany jest następcę
opatentowanych SIFT i SURF. Twórcy twierdzą, że jest najlepszym i najbardziej odpornym
bezpłatnym algorytmem.
Detekcja przebiega dzięki FAST, potem wybor N najlepszych punktów dokonuje się
poprzez Harrisa. Następnie dodaje się do nich orientacę, której nie daje algorytm FAST.
Do detekcji używa się algorytmu BRIEF, ale nie jest on wystarczająco skuteczny 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 koordynaty pikseli. Przy
wykorzystaniu orientacji obliczonej jako , wyznaczana jest macierz rotacji. Zostaje ona
zaaplikowana wobec macierzy . W efekcie powstaje wysterowana macierz .
34
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.
2.9 SURF
Detektor
Detektor SURF jest znany jako bardziej wydajny zamiennik algorytmu SIFT. Jego
detektor jest oparty o Hessjan, a deskryptor o położenie i rozmieszczenie punktów.
Detektor jest oparty o macierz będącą Hessjanem zdefiniowaną jako:
gdzie L jest konwolucją z Gaussowskiej drugiej pochodnej obliczonej dla obrazu. W
implementacji jądro przekształcenia Gaussowskiego jest zastępowane przez prostszy filtr.
Następnie jest interpolowane w skali obrazu i jego przestrzeni, aby posiadało właściwość
niezależności od skali.
Deskryptor
Najpierw punktowi kluczowemu przypisuje się orientację. Następnie dookoła punktu
budowany jest kwadratowy obszar. Potem obszar ten jest rotowany zgodnie z wyznaczoną
orientacją dla punktu.
Region jest podzielony na mniejsze regiony o wymiarach 4x4. Dzięki temu
zachowujemy istotne przestrzenne informacje. Dla każdego z podregionów liczymy cechy dla
przykładowych punktów rozłożonych regularnie w wierzchołkach siatki 5x5. Obliczamy
pionową i poziomą Falkę Haara. Dzięki temu mamy wyliczone dx oraz dy. Następnie
sumujemy je po każdym z podregionów i budujemy pierwszy zbiór cech (wektor). Wartości
bezwzględne |dx| oraz |dy| są również obliczone i razem z sumą wektora tworzą
czterowymiarowy deskryptor. Dla każdego z podregionów o rozmiarze 4x4 mamy dzięki
temu wektor cech o długości 64. Te wymiary to suma dx, suma modułów dx, suma dy oraz
suma modułów dy.
35
Rysunek 11: Sposób budowy wetkora dla każdego z podobszarów w podziale na wymiary
Algorytm ten powstał w celu przyspieszenia algorytmu SIFT. Jest mniej odporny i
mniej dokładny, jednak znacznie szybszy. W celu znalezienia skali przestrzennej nie korzysta
z aproksymacji Lapazjanu, filtrów Gaussowskich ani różnicy Gaussowskiej.
Lyy oraz Lxy obliczane są w następujący sposób:
Rysunek 12: Sposób olbiczania wymiarów
W celu przypisania punktom orientacji SURF używa falki Haara w dwóch kierunkach
- poziomym i pionowym. Docelowa główna orientacja jest obliczana na podstawie sumy
wszystkich odpowiedzi falowych w oknie o kącie rozwarcia 60 stopni. Ciekawe jest, że
odpowiedź falowa może być bardzo szybko wyznaczona dla obrazu niezależnie od skali. Dla
wielu aplikacji niezależność od obrotów nie jest wymagana, a wówczas długotrwały proces
można pominąć i dodatkowo przyspieszyć algorytm SURF.
36
Rysunek 13: Sposób przypisywania orientacji poszczególnym punktom
Sąsiedztwo o rozmiarze 20 x 20 wokół punktu jest dzielone na okna o rozmiarze 4x4.
Obliczony wektor cech składa się z . Jego rozmiar to 64.
W celu większej dokładności działania algorytmu SURF można rozbudować wektor
do rozmiaru 128. Robi się to poprzez liczenie osobno sum i dla i .
Analogicznie sumy i są liczone osobno w zależności od znaku . Dzieki temu
podwaja się liczba cech punktu. Jest to zalecana, a zarazem niekosztowna pod względem
obliczeniowym opcja.
Następnym ważnym usprawnieniem wobec SIFT jest użycie znaku Laplasjanu (tutaj
jest to ślad Hessjanu) dla punktu kluczowego. Należy zauważyć, że nie wymaga to
dodatkowych operacji, ponieważ jest liczone w trakcie detekcji. Ten znak odróżnia jasne
obszary od ciemnego tła. W trakcie łączenia punktów odpowiadających porównujemy tylko te
punkty charakterystyczne, które mają ten sam typ kontrastu. Pozwala to przyspieszyć proces
łączenia bez ponoszenia kosztów ubocznych. Widać to poniżej.
Rysunek 14: Wpływ znaku Laplasjanu na możliwość złączania cech obrazu
SURF dodaje wiele cech usprawniających algorytm. Badania pokazały, że jest około 3
razy szybszy niż SIFT, a jakość uzyskanych wyników była o około 10% niższa. SURF jest
37
algorytmem skutecznym przy przetwarzaniu obrazow rozmytych i podlegających rotacji,
natomiast nie powinien być stosowany do analizy zmiany punktu widzenia lub oświetlenia.
Patrząc na ten obraz można zobaczyć, że SURF jest też detektorem obszarowym.
Rysunek 15: Promienie z zaznaczonym kierunkiem dowodzą, że SURF jest detektorem obszarowym
2.10 STAR
Detektor STAR wywodzi się z detektora CenSurE (Center Surrounded Extrema).
Podczas gdy detektor CenSurE używał wielokątów takich jak kwadraty, sześciokąty i
ośmiokąty aproksymujące okręgi, STAR aproksymuje okręg poprzez 2 nakładające się na
siebie kwadraty przesunięte o 45 stopni. Krawędzie tych kwadratów posiadają wagi
przeciwnych znaków. Algorytm działa tylko w skali szarości.
Na obraz nakłada się najpierw wspomniane kwadraty. Następnie wykonuje się
aproksymację LoG poprzez Lapasjan lub Gaussa. Dzięki temu definiujemy region 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.
2.11 BRIEF
BRIEF to deskryptor wagi lekkiej. Jest łatwo implementowany w oparciu o binarne
Stringi. Testy binarne są wykonywane na podstawie algorytmu FERN, który jest najprostszą
wersją Bayesianowskiego klasyfikatora. Deskryptor BRIEF jest nastawiony na szybkość,
przez co idealnie nadaje się dla urządzeń o słabej mocy obliczeniowej. W celu zwiększenia
szybkości rezygnuje się z części odporności zmian skali i rotacji. Jest to jednak wyłącznie
38
deskryptor. Potrzebna jest też detekcja punktów. Z uwagi na niższą jakość punktów zaleca się
szybką detekcję FAST.
Rysunek 16: Wygląd przykładowych deskryptorów dla algorytmu BRIEF
SIFT używa 128-wymiarowego wektora deskryptorów. Ponieważ wykorzystuje liczby
zmiennoprzecinkowe, można uznać, że jest to 512 bajtów. Podobnie SURF wykorzystuje
minimum 256 bajtów dla wersji zawierającej 64 wymiary. Tworzenie takich deskryptorów dla
tysięcy punktów charakterystycznych jest trudne do wykonania, szczególnie dla urządzeń
mobilnych. Nawet jeśli pamięć obejmie wszystkie dane, proces łączenia punktów będzie
bardzo długi.
Warto zauważyć, nie wszystkie wymiary są niezbędne, aby przeprowadzić
matchowanie. Można je skompresować korzystając z takich metod jak PCA czy LDA. Można
też użyć Hashowania znanego jako LSH (Locality Sensitive Hashing) w celu
przeprowadzenia liczb zmiennoprzecinkowych w binarne tablice.
Binarne tablice są następnie wykorzystane w celu łączenia punktów na podstawie
dystansu Hamminga. Jest to bardzo szybki proces, ponieważ policzenie dystansu polega na
wykonaniu operacji XOR oraz zliczaniu bitów, a wykorzystywane procesory są bardzo
wydajne. Nie rozwiązuje to jednak problemu, że najpierw duży deskryptor musi powstać w
pamięci.
W tym przypadku BRIEF jest innowacyjny. Pomysł polega na znalezienu Stringów
binarnych (ciągów zer i jedynek) bez znajdowania deskryptorów. W tym celu obraz poddaje
się blurowi (wygładzeniu, rozmyciu) i wybiera się zbiór punktów (x,y). Potem porównuje
się je między sobą pewną funkcją, przyjmijmy I(x). Przykładowo nie pierwsza para to i .
Jeżeli , wynikiem jest 1, jeśli nie to 0. Wykonujemy taki test dla
każdego punktu, aby uzyskać -wymiarowy String.
39
Wartość może wynosić 128, 256 lub 512. OpenCV wspiera te 3 wartości -
reprezentuje je w bajtach, zatem odpowiednio 16, 32 i 64. Zaleca się użycie 256. Po
wyznaczeniu binarnych Stringów można łatwo obliczyć wspomniany dystans Hamminga.
BRIEF osiąga dobre wyniki poza przypadkiem gwałtownego obrotu kamery. Poprzez
gwałtowny obrót rozumie się odchylenie o +/- 15 stopni.
2.12 SIMPLEBLOB
Jest to algorytm, który wydobywa cechy obszarowe z obrazu. Na początku ustala się
zbiór progów od najmniejszego do największego wraz z krokiem. Obraz będzie przetwarzany
z uwzględnieniem tych wartości progowych przesuniętych każdorazowo o wartość krokową.
Następnie znajduje się kontury obrazu i wyznacza się ich środki. Potem grupuje się środki
pod względem ich współrzędnych. Te, które znajdują się blisko siebie, będą stanowiły jeden
obszar. Po uformowaniu grup należy obliczyć ich przybliżony promień oraz rozmiar punktów
kluczowych. Typowo różnicuje się obraz i wyznacza obszary na podstawie zmian w skali
szarości obrazu. Domyślnie wydobywa się poprzez filtrację ciemniejsze obszary w obrazie.
2.13 FREAK
FREAK jest samodzielnym deskryptorem. Stanowi ulepszenie algorytmu BRISK.
FREAK wyznacza 43 ważone średnie Gaussowskie w otoczeniu punktu charakterystycznego.
Warto wspomnieć, że wzorzec powstały poprzez średnie Gaussowskie jest inspirowany
kształtem ludzkiego oka. Piksele są mniej zróżnicowane i bardziej skupione wokół punktu
charakterystycznego. Z tego powodu dystans między nimi jest mniejszy. FREAK korzysta z
kaskady w celu porównywania tych par i wyróżnia 64 najbardziej znaczące bity w celu
przyspieszenia algorytmu matchowania.
Rysunek 17: Porównianie działania algorytmu FREAK z działaniem oka ludzkiego poprzez podobieństwo
40
Oto kształt pikseli wokół punktu charakterystycznego:
Rysunek 18: Kształt pikseli wokół punktu charakterystycznego
3 Adaptery dodatkowe
Adaptery dodatkowe uzupełniają algorytmy detekcji punktów charakterystycznych.
Adapter klasyczny nie wprowadza żadnych zmian wobec zaprezentowanych
algorytmów.
Adapter GRID dzieli obraz porównywany na siatkę i wykrywa punkty kluczowe w
każdej komórce siatki.
Adapter PYRAMID wprowadza piramidę Gaussowską prezentującą skalę obrazu.
Warto stosować to połączenie z algorytmami detekcji, ktore nie są odporne na zmiany
skali.
Adapter DYNAMIC iteracyjnie wykrywa porcje punktów charakterystycznych dopóki
zadana ich liczba nie zostanie wykryta.
Ekstrakcja algorytmów
Poza wspomnianymi algorytami wykorzystywanymi do opisania punktów i wydobycia
deskryptorów, każdy z nich istnieje w wersji odwróconej.
Opponent type to sposób ekstrakcji deskryptorów polegający na zamianie obrazu RGB
na odwrotną przestrzeń kolorów i jego analizę w tej odwrotnej przestrzeni. Deskryptory są
obliczane dla każdego z trzech kanałów osobono, a potem następuje ich konkatenacja w
jednokolorwy deskryptor.
Matchowanie algorytmów
Najbardziej typowym podejściem jest podejście typu brutalnego. Nie jest ono
skomplikowane. Wybieramy deskryptor opisujący jedną cechę z pierwszego zbioru i
porównujemy go ze wszystkimi cechami znajdującymi się z w drugim zbiorze. Porównanie
odbywa się na zasadzie badania dystansu dzielącego pary cech. Zwracany jest najlepiej
dopasowany, a więc ten, którego dystans był najmniejszy.
41
BRUTTEFORCE Matcher występuje w różnych wersjach. Różnią się one sposobem
wyliczania dystansu.
W wersji typowej, czyli NORM_L2 jest on dobry dla algorytmów SIFT oraz SURF.
W wersji HAMMING jest szczególnie zalecany dla algorytmów operujących na
tablicach (Stringach) binarnych z uwagi na nieskompikowany sposób wyliczania dystansu
(XOR na bitach i ich zliczanie).
W wersji SL2 nie ma specjalnych zastosowań. Jest to eksperymentalna wersja, która
może być zalecana dla algorytmu ORB.
Dodatkowo w trakcie łączenia cech w pary można wykonać łączenie obustronne.
Zwaca ono dokładniejsze wyniki. Jest stosowane i zalecane przy wyznaczaniu homografii.
Polega na tym, że cecha jest uznana za dopasowaną, jeżeli jest dopasowana w zbiorze A w B
oraz w zbiorze B w A (relacja dwustronna).
Warto wspomnieć o programistycznej strukturze służącej do badania znalezionych
dopasowań i odpowiedników.
Algorytm zwraca listę punktów dopasowanych, czyli tak zwanych DMatch. Każdy z nich
zawiera:
DMatch.distance – im mniejszy dystans pomiędzy deskryptorami, tym lepiej.
DMatch.trainIdx - indeks deskryptora w obrazie analizowanym
DMatch.queryIdx - indeks deskryptora w obrazie wzorcowym (z nim się porównuje)
DMatch.imgIdx - indeks obrazu porównywanego
Flanbased
Istnieje jeszcze algorytm FLANNBASED. Jednak jest on oparty na licencji i jest
płatny, aczkolwiek znane są reguły jego działania. Nieskorzystanie z tego algorytmu nie
wpłynie na wyniki niniejszej pracy. Jest bowiem on zoptymalizowany do przetwarzania
ogromnych obrazów i paronam. Polega na przeszukiwaniu najbliższych sąsiedztw i jest pod
tym względem zoptymalizowany.
Struktura danych wykorzystana w tym algorytmie jest typowa dla problemu
sąsiedztwa KD-tree (drzewo wielowymiarowe, czy też k-wymiarowe).
Nie jest tutaj badany każdy deskryptor z każdym jak w algorytmie brutalnym, lecz z
góry określona liczba sąsiedztw o coraz mniejszym promieniu.
LMeDS - Least-Median robust method
Algorytm ten jest wykorzystywany w celu znalezienia odpowiedniej homografii
pomiędzy dwiema płaszczyznami.
LMeDS bierze podzbiór punktów i szuka dla niego rozwiązania. Następnie wybiera z
listy pozostałych punktów tylko te, które są spójne z rozwiązaniem już odkrytym. Operacja ta
jest wykonywana wielokrotnie dopóki nie zostanie odrzuconych jak najmniej punktów w
rozrachunku końcowym (można zadać limit lub procent takich punktów).
Szukanie homografii
42
Homografia polega na znalezieniu odpowiedniej transformacji pomiędzy dwoma
płaszczyznami. Do jej wyszukania można użyć algorytmu brutalnego, czyli każdej pary
złączanych ze sobą punktów, LMeDS lub RANSAC z zadanym progiem dyskwalifikacji.
Ciekawy jest fakt, że LMeDS działa poprawnie i jest zalecany, o ile obraz nie zawiera
zbyt wielu błędnych połączeń. Granica błędu to około 50%.
Przy szukaniu homografii należy znaleźć transformację perspektywiczną pomiędzy
dwiema płaszczyznami.
Ważnym jest, aby błąd tego obliczenia był zminimalizowany:
Metoda każdy z każdym wykorzystuje metodę najmniejszych kwadratów, więc jest bardzo
podatna na grube błędy. Pod tym względem bardziej odpornymi metodami są LMeDS oraz
RANSAC. RANSAC jest metodą uniwersalną. Można go dostroić parametrycznie niezależnie
od liczby błędów grubych. Jest to jednak obszar znacznie wykraczący poza tematykę pracę.
Przy wyznaczaniu homografii znajduje się macierze wewnętrzną i zewnętrzną. Macierz
homografii jest określona poprzez skalę. Należy ją poddać normalizacji tak, aby: .
4 Więcej o losowości, czyli RANSAC
Algorytm RANSAC (RANdom SAmple Consensus) pozwala na iteracyjne
modelowanie płaszczyzn w zbiorze danych zawierających znaczną (nawet przekraczającą
połowę obserwacji) liczbę błędów grubych, czyli punktów nienależących do modelowanej
powierzchni. Metoda rozwinięta została początkowo dla celów widzenia komputerowego.
Jest to metoda iteracyjnego dopasowywania modelu do zbioru danych, który posiada
wiele skrajnych wartości. Podstawowym założeniem RANSAC jest obecność w zbiorze
zarówno danych, które pasują do modelu (inliers) jak i tych, których wartości odbiegają od
niego (outliers). Źródłem danych, które nie pasują do modelu są zwykle błędne pomiary lub
szumy i zakłócenia. Danymi wejściowymi algorytmu są zbiór danych oraz model
parametryczny, który będzie dopasowywany do tego zbioru. Dodatkowymi informacjami
mogą być:
minimalna liczba punktów wymagana do dopasowania modelu,
minimalna liczba iteracji,
próg określający zakres, w którym znajdują się dane pasujące do modelu,
rozmiar zbioru, który umożliwia zakończenie procesu iteracji.
Zaletą metody jest jej odporność. Punkty stanowiące przypadkowe odbicia od
powierzchni oraz punkty położone w bliskim sąsiedztwie estymowanej płaszczyzny, lecz
43
należące do innego obiektu, nie ulegają błędnej klasyfikacji. Działanie algorytmu obejmuje
dwa podstawowe, iteracyjnie powtarzane kroki: hipotezę oraz test.
Z etapem hipotezy związane jest pojęcie najmniejszego zbioru. To najmniejsza liczba
k danych niezbędnych do jednoznacznego zdefiniowania założonego modelu
geometrycznego. W przypadku ekstrakcji płaszczyzn minimalny zbiór składa się z trzech
punktów. Realizacja algorytmu rozpoczyna się od wylosowania wstępnie ustalonej liczby
minimalnych zbiorów, która jest sukcesywnie modyfikowana.
Następnie dla każdego ze zbiorów obliczane są parametry modelu (w rozpatrywanym
przypadku modelem jest płaszczyzna przechodząca przez trzy punkty). Zidentyfikowany
model stanowi hipotezę, która podlega sprawdzeniu w następnym kroku – teście. Etap testu
wymaga ustalenia wartości parametru md, określającego maksymalną odległość testowanego
punktu od hipotetycznego modelu. Jeżeli punkt spełnia kryterium odległości, dodany zostaje
do tzw. zbioru CS (Consensus Set). W tej pracy zbiór składa się z danych, które uznane
zostały za należące do rozpatrywanej płaszczyzny.
Po wykonaniu testu dla wszystkich danych, wybierany jest kolejny zbiór minimalny.
W oparciu o niego powtórzona zostaje sekwencja dwóch kroków – hipotezy i testu. W
przypadku znalezienia zbioru CS zawierającego większą liczbę punktów niż poprzedni,
dotychczasowy zbiór zastąpiony zostaje liczniejszym. Modyfikacji ulega liczba próbek
zbiorów minimalnych.
Algorytm RANSAC sprowadza się do wykonania następującej procedury:
1. Model jest tworzony na podstawie ustalonej liczby obiektów wybranych za pomocą
losowania.
2. Pozostałe obiekty zbioru porównywane są z utworzonym modelem. Jeśli obiekt pasuje
do estymowanego modelu, jest również uznawany za należący do modelu.
3. Estymowany model jest uznawany za poprawny, jeśli ustalona minimalna liczba
obiektów została sklasyfikowana jako poprawnie określająca model.
4. Jeśli model uznano za poprawny, zostaje zapisany w pamięci wraz ze wszystkimi
obiektami zaklasyfikowanymi wcześniej jako poprawnie określające.
5. W ostatnim kroku wyliczony zostaje średni błąd wybranych obiektów dla aktualnego
modelu.
Procedura ta jest powtarzana określoną przez projektanta liczbę razy. W każdej z
iteracji porównujemy otrzymany model z najlepszym ze wszystkich modeli wcześniej
uzyskanych. Jeśli średni błąd dla nowego modelu jest mniejszy niż dla najlepszego z
dotychczas utworzonych, aktualny model staje się modelem najlepszym.
Za pomocą algorytmu RANSAC można wykryć proste linie wchodzące w skład
przetwarzanego obrazu. Aby tego dokonać, stosuje się wersję algorytmu dostosowaną do tego
zadania. Model jest tworzony na podstawie dwóch losowo wybranych pikseli leżących na
krawędziach. Kierunki ich gradientu muszą być zgodne (projektant algorytmu definiuje
maksymalną różnicę ich orientacji). Jeśli kierunki nie są zgodne, losowanie zostaje
powtórzone. Wybrane piksele stanowią potencjalne końce prostej linii.
Proces porównywania pozostałych pikseli z modelem składa się z dwóch etapów. W
pierwszym porównywany jest kierunek wybranego piksela. Jeśli jest on zgodny z modelem,
sprawdzone zostaje, czy leży na linii wyznaczonej przez model. Algorytm kończy działanie
po przekroczeniu zadanej liczby iteracji lub w przypadku, kiedy wszystkie piksele obrazu leżą
na jednej linii. Takie ułożenie pikseli jest wysoce prawdopodobne, jeśli operujemy na
fragmencie obrazu. W przypadku dużej ilości danych obraz powinien zostać podzielony w
celu optymalizacji działania algorytmu.
44
5 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.
Wykorzystane w pracy narzędzia to:
OpenCV - biblioteka open source, która umożliwia testowanie algorytmów na
urządzeniach mobilnych z OS Android,
Android SDK - zbiór narzędzi pozwalających na implementacje rozwiązań na
platformę mobilną OS Android,
OpenCV Manager - zbiór narzędzi optymalizacyjnych pozwalających istotnie
przyspieszyć aplikację mobilną oraz oszczędzić miejsce na dysku smartfona,
OpenGL – biblioteka służąca do wyrysowania wielokolorowego sześcianu i
zobrazowania, że wykryto zadany obraz w aplikacji prezentującej rzeczywistość
rozszerzoną.
6 Opis Aplikacji
W ramach praktycznej części tej pracy powstały dwie aplikacje użytkowe. Pierwsza
opisana poniżej jest samodzielną implementacją prostego modelu wykrywania znacznika oraz
generowania rozszerzonej rzeczywistości. Druga aplikacja powstała po to, aby testować pod
różnymi aspektami opisywane algorytmy detekcji cech obrazów i porównywać ich działanie.
6.1 Aplikacja pierwsza - własna implementacja wykrywania znacznika i generowania
AR
Aplikacja pierwsza powstała, by zaprezentować praktyczne wykorzystania biblioteki
OpenCV w celu wygenerowania AR oraz aby pokazać możliwości jej łatwej integracji z
systemem OS Android i jego natywnymi funkcjami.
Dzięki API systemu Android można (o ile urządzenie na to pozwala) dokonywać
swobodnych przełączeń się między przednią i tylną kamerą. Jest to przykład łatwego
dodawania dostępnych opcji do aplikacji. Zmiany kamery dokonuje się za pomocą menu.
Drugim przyciskiem menu jest opcja pozwalająca na nałożenie filtra Sobela na kamerę.
Dzięki opisanym dwóm właściwościom możliwe jest nałożenie filtra na twarz użytkownika
(poprzez przełączenie się na kamerę wewnętrzną). Uzyskujemy w ten sposób ciekawy efekt.
Warto nadmienić, że aby aplikacja na system OS Android mogła korzystać z kamery i
zapisywać zdjęcia w pamięci urządzenia, należy wprowadzić poniższe dostępy w pliku w
formacie xml o nazwie AndroidManifest:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus"
android:required="false" />
<uses-feature android:name="android.hardware.camera.flash"
45
android:required="false" />
Należy zauważyć, że wiele metod systemowych na OS Android, takich jak
startActivity(), działa asynchronicznie. W trakcie pracy użytkownik ma opcję równoczesnego
korzystania z interfejsu. Dzięki temu może zainicjować zadanie niezwiązane z już
wykonywanymi. Efekt polega na tym, że gdy użytkownik szybko wciśnie wielokrotnie
przycisk, może to spowodować wielokrotne wykonanie tego samego zadania, co jest
niekorzystne. Rozwiązaniem jest blokowanie wciśniętego przycisku do momentu, gdy
obsługujący go wątek główny nie powróci do stanu bezczynności. Schemat ten pozwala
zrozumieć cykl życia aplikacji na OS Android. Dobrze widać to na poniższym rysunku.
W systemie OS Android występuje tzw. aktywność (ang. activity). Jest to element
systemu Android zbliżony do ciężkiego wątku. W momencie, gdy nowa aktywność startuje,
jest umieszczana na górze stosu żyjących aktywności. Starsze aktywności znajdują się zawsze
poniżej obecnie żyjącej i nie mogą wrócić na stos dopóki nie odda im ona kontroli.
Aktywność cechują cztery najważniejsze stany:
Jeżeli aktywność jest na pierwszym planie ekranu (znajduje się na górze stosu),
mówimy, że jest aktywna lub że żyje.
Jeżeli aktywność utraciła fokus, ale cały czas jest widoczna, mówimy, że została
spauzowana. Spauzowana aktywność to aktywność żyjąca. System może zniszczyć
taką aktywność tylko wtedy, gdy krytycznie brakuje mu zasobów.
Jeżeli aktywność jest całkowicie niewidoczna i zastąpiła ją inna, to mówimy, że
aktywność jest zatrzymana. Cały czas przechowuje swój stan i dane, ale nie jest już
widoczna, a system może ją zniszczyć pod warunkiem, że potrzebuje zajmowanych
przez nią zasobów.
Jeżeli aktywność jest spauzowana lub zatrzymana, system może ją zakończyć albo
zniszczyć związany z nią proces. Jeżeli zostanie ona wyświetlona użytkownikowi,
musi być zrestartowana i przywrócić swój poprzedni stan.
Poniższy diagram obrazuje cykl życia aktywności. Kolorowe owale to główne stany,
w których może znajdować się aktywność. Jak już wspomniano, aktywność to bardzo ciężki
odpowiednik wątku. Z tego powodu należy oszczędnie jej używać. Nie jest korzystnie
programować na zasadzie jedna klasa = jedna aktywność, bowiem koszt przełączenia między
aktywnościami jest bardzo wysoki, a jego częste zmiany wpływają niekorzystnie na
stabilność aplikacji.
46
Rysunek 19: Diagram stanów aktywności
Jak widać na powyższym rysunku najważniejsze działania można sprowadzić do trzech pętli:
Czas życia trwa pomiędzy wywołaniem metody onCreate() do zawołania metody
onDestroy(). W metodzie onCreate() należy zainicjować wszystkie zmienne potrzebne
do działania, natomiast w metodzie onDestroy() należy zwolnić wszystkie zajęte
zasoby, na przykład zatrzymać wszystkie wątki czy połączenia internetowe.
Widoczna część życia aktywności ma miejsce pomiędzy wywołaniem metody
onStart() aż do metody onStop(). W tym okresie użytkownik widzi pierwszy plan
aktywności oraz przechowuje zasoby niezbędne do wyświetlenia GUI.
Gdy ma miejsce pierwszoplanowa aktywność, czas życia trwa od metody onResume()
aż do metody onPause(). W tym czasie aktywność jest na górze stosu aktywności i
użytkownik może odbywać z nią interakcję. Aktywność często może zmieniać stany
pomiędzy wznowionym a zapauzowanym, np. gdy wygasi się ekran telefonu.
Wspomniane dwie aktywności powinny być lekkie i nie wykonywać kosztownych
obliczeń, gdyż są często wołane.
Następną praktyczną możliwością wynikającą z omawianej aplikacji jest zrobienie
zdjęcia oraz jego edycja przy użyciu zainstalowanych aplikacji edycyjnych takich jak np.
(Instagram), a potem możliwość wysłania tego zdjęcia poprzez E-mail czy Bluetooth.
47
Operacje te wykonuje się za pomocą Intentów Androidowych. Ich użycie jest
nieskomplikowane
Androidowe intenty służą do wystartowania nowej aktywności. Precyzyjnie rzecz
ujmując, powodują, że do życia powołana zostaje nowa aktywność (często systemowa, np.
dzwonienie, e-mail, galeria) i jest umieszczona na górze stosu, przez co staje się widoczna dla
uzytkownika. Jeśli OS Android ma do czynienia z typem aktywności, który można wykonać
na wiele sposobów (np. aby przejrzeć stronę internetową, można użyć jednej z kilku
przeglądarek), zawsze wyświetla okno dialogowe z możliwymi opcjami do wyboru lub
informuje o braku wbudowanych rozwiązań.
Z typowo graficznych cech tej aplikacji należy omówić Filtry i Efekty, które można
nakładać na obraz. W celu szybszego i poprawnego liczenia przekształceń wykorzystaliśmy
tutaj bibliotekę Apache Commons Math, która umożliwia liczenie zaawansowanych funkcji
matematycznych.
Jedną z dostępnych operacji jest miksowanie kanałów kolorów. Jak już wspomniano,
OpenCV przechowuje obrazy jako typ danych macierzowych o nazwie Mat, który jest
dwuwymiarową tablicą. Wiersze i kolumny odpowiadają x oraz y we współrzędnych obrazu.
Dane przechowywane w tych wierszach i kolumnach to wartości związane z pikselami.
Wartość piksela może być reprezentowana jako pojedyncza liczba (wówczas jest to obraz w
skali szarości) lub jak kilka liczb (tak dzieje się w przypadku obrazka kolorowego).
Każda z tych liczb przynależy do pewnego kanału. Obraz w skali szarości może
posiadać tylko jeden kanał (jasność), podczas gdy obrazy kolorowe mogą mieć do czterech
kanałów, na przykład czerwony, zielony, niebieski oraz kanał przezroczystości (znany jako
format RGBA). Innymi znanymi formatami są RGB (bez przezroczystości), HSV oraz
L*a*B. Skupimny się na RGB i RGBA, ponieważ są one wspierane przez OpenCV.
Biblioteka daje możliwość konwertowania pomiedzy formatami kolorów.
Rysunek 20: Możliwość przesyłania zdjęć w łatwy sposób za pomocą API Andorid SDK
48
Jeżeli odseparujemy kanały z obrazu w formacie RGB, możemy użyc trzech różnych
macierzy w skali szarosci, gdzie każda z nich zawiera osobny kanał. Następnie poprzez
operacje na jednokanałowych macierzach możemy złączyć je w jedną macierz reprezentującą
inny niż oryginalnie obraz w formacie RGB. Wynikowy obraz będzie wyglądał, jakby używał
innej palety kolorów niż oryginał. Taka technika znana jest jako mieszanie kanałow.
Dla obrazu RGB definiujemy kanały mieszające jako:
dst.b = funcB(src.b, src.g, src.r)
dst.g = funcG(src.b, src.g, src.r)
dst.r = funcR(src.b, src.g, src.r)
Każdy kanał w obrazie docelowm będzie powiązany z funkcją określającą wszystkie kanały
obrazu bazowego.
Warto przedstawić klasyczny zestaw:
dst.b = 0.5 * src.r + 0.5 * src.b
Powoduje to, że regiony obrazu, które w oryginale były bliskie niebieskiemu kolorowi, staną
się czerwone lub purpurowe.
Rysunek 21: Efekt działania mieszania kanałów wg wzoru dst.b = 0.5 * src.r + 0.5 * src.b
Programując w OpenCV należy pamiętać, że bezpiecznie jest do operacji bazujących
na macierzach przekazywać zawsze jako obraz docelowy i wynikowy tę samą macierz. Traci
się wtedy macierz docelową, gdyż staje się ona wynikową. Jednak jest to sposób szybszy,
niepowodujący wycieków pamięci oraz niebezpieczeństwa związanego ze spowolnieniem
aplikacji w czasie eksploatowania.
49
6.1.1 Zmiany krawędzi kolorów w obrazie i ich miksowanie
Patrząc na obraz widzimy w jak subtelny sposob zmieniają się barwy pomiedzy jego
regionami. Przykładowo w słoneczny dzień cienie na dworze są niebieskie, ponieważ
zabarwia je światło odbite od niebieskiego nieba. Tymczasem rzeczy oświetlone promieniami
Słońca (przeswietlone) mają lekko żółtą barwę. Widząc na fotografii zabarwione na niebiesko
cienie i żólte obiekty, mamy wrażenie ciepła. Taki efekt może być naturalny lub można go
uzyskać za pomoca filtra. Byłby to filtr krzywizn.
Filtry krzywizn są parametryzowane poprzez zbiory punktow kontrolnych.
Przykładowo taki zbiór punktów może istnieć dla kazdego kanalu. Kazdy punkt kontrolny jest
parą numerów reprezentujących wartości wejściowe i wyjściowe dla danego kanalu. Dla
przykladu para (128, 180) oznacza ze wartośc 128 danego koloru zostala rozjaśniona do
wartosci 180. Wartości pośrednie są interpolowane wzdluz krzywej (stad też nazwa filtry
krzywizn).
Dzięki tym własnościom filtry krzywizn idealnie slużą do stworzania wrażenia
subtelnych i naturalnie wyglądających efektów na zdjeciach. W pseudokodzie taki filtr dla
RGB wygląda następująco:
dst.b = funcB(src.b) gdzie funcB interpoluje punkty kanalu B
dst.g = funcG(src.g) gdzie funcG interpoluje punkty kanalu G
dst.r = funcR(src.r) gdzie funcR interpoluje punkty kanalu R
Aby powstaly w wyniku nakładania filtrów obraz wygladał naturalnie należy
przestrzegać określonych zasad.
Każdy zbiór punktów kontrolnych musi zawierać punkty (0, 0) i (255, 255). Dzięki
temu czarne pozostaje czarne, a białe nadal jest białe. Obraz unika niekorzystnego efektu
prześwietlenia i przejaskrawienia barwy.
Wraz ze wzrostem wartości wejściowych, wartości wyjściowe rownież rosną, co
znaczy, że jest to funkcja monotonicznie rosnąca. Dzięki temu cienie pozostaną cieniami,
prześwietlony fragment będzie nadal prześwietlony, a obaz nie będzie zbyt kontrastowy.
Niestety samo OpenCV nie daje mozliwosci interpolacji funkcji krzywizn, dlatego
wykorzystano bibliotekę Apache Commons Math, która oferuje taką opcję. Warto pamiętać,
że funkcje interpolujące są kosztowne obliczeniowo. Nie chcemy ich uruchamiać dla
wszystkich kanałów, pikseli i klatek. Ponadto nie jest to konieczne. Istnieje tylko 256
wartości wejściowych dla kanału, można zatem obliczyć wszystkie wartosci wyjściowe i
zapamiętac je w tablicy. Jest to sposób optymalizacji tego procesu.
Następnie przedstawimy algorytm Porta Kodak, ktorym zasłyneła firma fotograficzna
Kodak w czasach wywoływania zdjec z aparatów małoobrazkowych. Wartości dobrane do
tablic są zaczerpnięte właśnie z tego filtra.
public class PortraCurveFilter extends CurveFilter {
public PortraCurveFilter() {
super(
new double[] { 0, 23, 157, 255 }, // vValIn
new double[] { 0, 20, 173, 255 }, // vValOut
new double[] { 0, 69, 213, 255 }, // rValIn
new double[] { 0, 69, 218, 255 }, // rValOut
50
new double[] { 0, 52, 189, 255 }, // gValIn
new double[] { 0, 47, 196, 255 }, // gValOut
new double[] { 0, 41, 231, 255 }, // bValIn
new double[] { 0, 46, 228, 255 }); // bValOut
}
}
Filtr ten powoduje ogólne rozjasnienie obrazu. Sprawia, że cienie stają się bardziej błękitne i
miękkie oraz że prześwietlenia są bardziej żółte, a przez to cieplejsze. Dzięki temu obraz
wydaje się bardziej słoneczny i czystszy.
Rysunek 22: Efekt działania filtra Porta Kodak
Oto charakterystyczne wartości będące punktami kontrolnymi:
new double[] { 0, 255 }, // vValIn
new double[] { 0, 255 }, // vValOut
new double[] { 0, 59, 202, 255 }, // rValIn
new double[] { 0, 54, 210, 255 }, // rValOut
new double[] { 0, 27, 196, 255 }, // gValIn
new double[] { 0, 21, 207, 255 }, // gValOut
new double[] { 0, 35, 205, 255 }, // bValIn
new double[] { 0, 25, 227, 255 }); // bValOut
Powodują one, że obraz wyjściowy posiada większy kontrast pomiedzy cieniami oraz
przeswietlniami i przez to dąży do koloru niebieskiego. Niebo, woda i cienie są bardziej
wyeksponowane od światła słonecznego. Jest to filtr Fuji Provia, którego firma Fuji używała
do wywoływania widoków w celu lepszego uwidocznienia kolorów. Tymczasem produkt
Kodaka pozwalał lepiej prezentować zdjęcia ukazujące ludzi.
51
Rysunek 23: Efekt działania filtru Fuji Provia
Filtry krzywizn pozwalają manipulować kolorem i kontrastem. Mają jednak jedną
zasadniczą wadę, a w zasadzie ograniczenie. Mianowicie, jeden piksel obrazu zmienionego
jest zależny tylko od jednego piksela obrazu wejściowego.
Dalej omówimy ciekawsze filtry produkujące obraz w oparciu o sąsiedztwo pikseli
pochodzących z obrazu wejściowego.
6.1.2 Filtry wykorzystujące sąsiedztwo zwane filtami konwolucji (filtry splotu)
Filtry splotu charakteryzuje fakt, iż wartość wynikowana piksela jest średnią ważoną
pikseli sąsiednich. Wagi można umieścić w macierzy zwanej macierzą splotu lub jądrem.
Przykładowa macierz wygląda następująco:
{{ 0, -1, 0},
{-1, 4, -1},
{ 0, -1, 0}}
Centralny element powyższej macierzy jest wagą źródłowego piksela, mającego ten sam
indeks co piksel wynikowy. Pozostałe elementy symbolizują wagi pozostałych pikseli
źródłowych. Rozpatrujemy sąsiedztwo o wymiarze 3x3. Macierz ta jest filtrem, który
znajduje krawędzie. Nazywamy go Laplazjanem. Dla płaskiego sąsiedztwa (o tych samych
kolorach) produkuje on piksel o barwie czarnej. Dla sąsiedztwa o wysokim kontraście (a więc
np. krawędzi) produkuje piksel o barwie białej. Laplazjan charakteryzuje również fakt, że
suma elementów jest równa elementowi centralnemu.
Rozpatrzmy teraz macierz, której element centralny jest o 1 większy niż suma pozostałych.
52
{{ 0, -1, 0},
{-1, 5, -1},
{ 0, -1, 0}}
Macierz ta jest równoważna zastosowaniu macierzy Laplazjanu, a następnie zsumowaniu jej
wyniku z obrazem oryginalnym. Dzięki temu poza znajdowaniem krawędzi uzyskujemy efekt
wyostrzania krawędzi. W ten sposób krawiędzie stają się jaśniejsze, podczas gdy pozostałe
elementy obrazu pozostają niezmienione. Tego filtru użyjemy w naszej aplikacji.
Rysunek 24: Efekt działania filtra splotu
Ze względów opytmalizacyjnych zaleca się unikanie dużych sąsiedztw, a w
konsekwencji macierzy o większych wymiarach. Graniczną wielkością macierzy jest wymiar
5x5, czyli 25 pikseli obrazu wejściowego produkuje jeden piksel wyjściowy. Przetwarzając
obraz na żywo, system Android nie obsługuje sprawnie przekształceń macierzowych
większych niż 3x3.
W naszej aplikacji krawędzie są pogrubione i przez to ciemniejsze, a reszta obrazu
jaśniejsza. Jest tak dlatego, że posłużyliśmy się metodą negacji bitowej po zastosowaniu filtra
splotu. W ten sposób obraz jest lepiej widoczny, a krawędzie uwypuklone.
Kolejnym kluczowym aspektem aplikacji jest możliwość detekcji obrazu zadanego
(markera) i wyświetlenie jako AR sześcianu rotującego się wraz z ruchami kamery.
Nasza aplikacja może otrzymać jako parametry obrazy źródłowe, które będą
wyszukiwane w scenie. Należy jednak pamiętać, aby obrazy były bogate w punkty kluczowe.
Praca Vincenta van Gogha „Gwiaździsta Noc” stanowi odpowiedni przykład. Jako
przedstawiciel postimpresjonizmu malarz używał dużego kontrastu i ostrych posunięć pędzla,
co zaowocowało dużą liczbą punktów charakterystycznych. Dzięki temu możemy nauczyć
telefon znajdować taki obraz w scenie.
53
6.1.3 Szukanie i śledzenie obrazu w scenie
Aby znaleźć obraz człowieka, należy odpowiedzieć na pytanie jak dana osoba
wygląda. Dla komputera proces ten jest równie istotny jak dla człowieka. Najpierw należy
porównać obraz poszukiwany z obrazem dostarczonym. W tym celu używa się obrazu
referencyjnego, czyli tego, którego szukamy. Obraz ten będzie porównywany z kolejnymi
klatkami z kamery. Odnalezienie go w przestrzenii jest równoważne ze znalezieniem jego
pozycji w 3D. W finalnym obrazie 2D 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.
Istnieje kilka klasycznych metod szukania obrazu w scenie. Typowy algorytm uogólniony,
składający się z czterech faz, został przedstawiony ponizej:
1. Znajdź punkty charakterystyczne zarówno w obrazie szukanym, jak i porównywanym.
2. Znajdź deskryptory dla wszystkich znalezionych zbiorów punktów kluczowych.
Deskryptor to wektor danych opisujących punkt kluczowy. Nie każdy punkt kluczowy
daje się opisać, więc zawsze uzyskamy mniej deskryptorów niż punktów kluczowych.
3. Znajdź odpowiadające sobie punkty na obrazach. W tym celu korzystaj ze zbiorów
deskryptorów. Najcześciej oznacza to znalezienie punktów o pewnych cechach
dotyczących ich odległości w wielowymiarowych przestrzeniach.
4. Znajdź homografię pomiędzy obrazem referencyjnym a analizowanym. Homografia to
opis transformacji 3D niezbędnej do połączenia dwóch prezentowanych obrazów 2D
w celu nałożenia ich na siebie. Oblicza się ją na podstawie połączonych
(zmatchowanych) deskryptorów. Poprzez zastosowanie homografii do prostokąta
można uzyskać obrys szukanego obrazu.
W celu przeprowadzenia i wykonania tych operacji użyliśmy następujących algorytmów:
detektora STAR - bardzo dokładny, dostarcza wyselekcjonowane punkty kluczowe,
desktryptora FREAK,
matchera BRUTEFORCE HAMMING.
Powyższa kombinacja jest dostatecznie szybka, a jednocześnie odporna na zmiany obrazu.
Widać to w momencie obracania kamerą telefonu w pobliżu znalezionego obrazu. Nie jest on
szybko gubiony, pozostaje cały czas wykryty mimo zmian w scenie. Cechami
determinującymi dobór algorytmów jest ich niezależność od skali oraz rotacji. Dzięki temu
obraz może być szukany przy zastosowaniu różnych kątów oraz perspektyw. Ponadto STAR,
FREAK I BRUTTFORCE HAMMING nie należą do grupy algorytmów opatentowanych,
zatem są bezpłatne i można używać ich nawet w komerycyjnch aplikacjach.
W celu znalezienia homografii niezbędne są najlepsze możliwe złączenia punktów
kluczowych. Inny słowy, minimalizujemy dystans Hamminga. W celu wyznaczenia
homografii wystarczają 4 złączone (zmatchowane) punkty o bardzo wysokiej jakości. W tym
celu będziemy szukać wierzchołków obrazu. Posłużymy się opisanymi poniżej przypadkami.
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
54
czyścimy listę punktów, które próbujemy dopasować jako wierzchołki, gdyż
najprawdopodobniej jest ona błędna.
2. Jeżeli złączenia (matche) są częściowo poprawne, 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.
Przanalizujemy teraz pewną hipotetyczną sytuację. Wybieramy powszechnie znane
zdjęcie. Wiemy gdzie je wykonano, a chcemy ustalić jak zostało zrobione. W tym celu
musimy udać się w miejsce jego powstania, a następnie określić gdzie umiejscowiono aparat
oraz pod jakim kątem wykonano zdjęcie. Jeżeli nam się to uda, wiemy jakiej długości
ogniskowej użyto. Bez tej informacji idealnie odwzorowanie zdjęcia nie jest możliwe.
Podobny problem napotykamy w trakcie szukania obrazu w scenie. Aby go odnaleźć, trzeba
ustalić, jakie są horyzontalne i wertykalne pola widzenia kamery oraz jakie są wyrażone w
pikselach rozdzielczości w obu kierunkach.
Analizując parametry związane z kamerą urządzeń mobilnych, nie wolno zapomnieć o
konieczności zapamiętania flagi. Innymi słowy, należy ustalić czy macierze projekcji kamery
są brudne (nieaktualne) czy nie. Jeśli tak, należy je zaktualizować, a są to kosztowne operacje.
Ponadto trzeba odwołać się do klasycznego modelu kamery. Konieczna jest znajomość tzw.
płaszczyzny obcinanej bliskiej i płaszczyzny obcinananej dalekiej. 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 25: Szukanie pozy kamery zamiast homografii, czyli trackowanie 3D.
55
Chcemy ustalić położenie kamery w świecie 3D i znaleźć na tej pozie obraz
trackowany. W celu szukania pozy w 3D zamiast klasycznej homografii trzeba operować na
wszystkich dotychczasowych danych dotyczących punktów charakterystycznych i kamery.
Należy podkreślić, że konieczne jest też zastosowanie dodatkowych schematów.
Jeśli chcemy pobrać macierz projekcji kamery, a nie znaleźliśmy szukanego celu,
trzeba uznać że nie mamy danych do jej zwrócenia z funkcji. Ponadto szukamy punktów, ich
deskryptorów i złączeń (matchy). Nie dążymy już do znalezienia homografii, lecz do
właściwej pozy w 3D.
Widać tu różnice w implementacji. Po pierwsze, rozszerzamy wymiar punktów
kluczowych do 3D, dodając wartość 0 dla zmiennej z. Następnie, tak 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.
Efektem opisanych powyżej operacji jest odnalezienie macierzy obrotu i translacji.
Dzięki niej możemy wyrysować w OpenGL sześcian na znalezionym obrazie. Dokonujemy
tego na podstawie pozy kamery. Wyznaczamy ją w podobny sposób jak niegdyś homografię,
tylko w 3D, a nie w 2D.
Jeżeli obraz został znaleziony, wyrysujemy na nim kolorwy sześcian. Należy
zauważyć, że mały, więc nie obniża znacząco przetwarzanej liczby klatek na sekundę. Jeżeli
obraz nie został znaleziony, w lewym górnym rogu kamery wyrysujemy obraz szukany w
scenie. W ten sposób można zorientować się czy uzyskaliśmy zadowalające rezultaty.
Rysunek 26: Szukanie wzorcowego obrazu w scenie w czasie rzeczywistym
Pozostaje pytanie w jaki sposób można wrysować sześcian w scenę, a w efekcie jak
można zbudować własną AR. OS Android wspiera OpenGL i umożliwia rysowanie po
widgecie zwanym GLSurfaceView.
Interesują nas dwie cechy OpenGL: stosowanie macierzy do przekształceń 3D na
wierzchołkach sześcianu oraz rysowanie trójkątów na podstawie przekształconych
56
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).
Niekorzystne jest, że w OpenGL operacje na kolorach są przeprowadzane na buforach.
Z tego powodu trzeba stosować dużo niskopoziomowych przekształceń oraz alokować z góry
znaną liczbę określającą zasoby pamięci.
Aby skutecznie rysować w OpenGL należy pamiętać, żeby wyczyścić zawsze
poprzednio narysowany obraz poprzez zastąpienie go w pełni niewidocznym kolorem.
Następnie należy sprawdzić czy dostępne są macierze pozy kamery oraz macierz projekcji.
Jeżeli tak to przekazujemy je do OpenGL w celu przesunięcia i wyskalowania widocznego
sześcianu.
Jak widać poniżej sześcian renderuje się na wyszukanym obrazie, przez co tworzy
rozszerzoną rzeczywistość znaną jako AR.
Rysunek 27: Odnaleziony wzorczec charakteryzuje wygenerowany sześcian jako rozszerzona rzeczywistość
6.2 Aplikacja druga - badanie efektywności aglorytmów detekcji
Aplikacja ta powstała, aby przeprowadzić testy badania efektywności różnych
algorytmów detekcji, ekstrakcji oraz łączenia punktów charakterystycznych w celu
wykrywania podobnych obrazów.
Interfejs użytkownika został zaprojektowany tak, aby testowanie czytelne, intuicyjne i
możliwie najwygodniejsze.
Dysponujemy dwoma menu. Pierwsze to pasek z przyciskami widocznymi na górze.
Drugie jest ukryte pod przyciskiem opcji urządzenia i można je wysunąć.
Centralną część okien zajmuje widok "na żywo" z kamery z wrysowanym w prawym
górnym rogu licznikiem klatek na sekundę oraz rozdzielczością przetwarzania obrazu. W
prawym rogu będzie się wyświetlał obrazek wzorca - będzie to migawka zapamiętana jako
wzorzec służący do porównań między obrazami.
57
Należy podkreślić, że obie aplikacje działają tylko w orientacji poziomej urządzenia
(tzw. landscape), ponieważ obsługa kamery w bibliotece OpenCV nie jest kompatybilna ze
zmianami orientacji w OS Android. W związku z tym aplikacje wspierające obroty urządzeń
są niestabilne. Nie wpływa to znacząco na ich odbiór, ponieważ widok z kamery najczęściej
ogląda się w orientacji poziomej. Problematyczne jest, że OS Android w specyficzny sposób
przeładowuje kontekst aplikacji. W uproszczeniu można przyjąć, że startuje ją na nowo, choć
nie jest to do końca prawda. Wynika to z cyklu życia aplikacji na Androida. Problem ten
wykracza jednak poza tematykę niniejszej pracy.
Przycisk Clear w menu górnym służy do wyczyszczenia listy migawek
porównywanych do obrazu zadanego. 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 28: Przykładowe działanie aplikacji do porównywania algorytmów
58
Rysunek 29: Wiadomość do użytkownika, gdy próbuje porównać obrazy bez ich poprzedniego dodania.
W celu optymalizacji algorytmu należy poprzez porównanie każdego z obrazów z listy
z obrazem referencyjnym obliczyć punkty charakterystyczne dla obrazu referencyjnego tylko
raz (jak dla każdego obrazu). Z tego powodu przeprowadzanie obliczeń za pierwszym razem
dla nowych obrazów trwa znacznie dłużej niż za każdym kolejnym.
Korzystna jest opcja 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 elementu systemu 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.
AsyncTask pozwala na asynchroniczne wykonywanie prac i komunikację zwrotną z
interfejsem użytkownika. Powoduje blokowanie operacji w wątku roboczym, a następnie
zwraca wyniki do wątku użytkownika bez 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
części wątku roboczego i głównego, dzięki czemu nie mieszają się one ze sobą.
59
Rysunek 30: AsyncTask w toku, komunikat postępu porównywania obrazów z listy ze wzorcem
W menu górnym występują jeszcze 2 przyciski typu toggle button, które zachowują
stan włączony lub wyłączony.
Pierwszym z nich jest przycisk Homography. Jeżeli jest włącznony, dodatkowo
oblicza 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 przeliczeniu obrazów wyświetlane jest okno dialogowe pokazujące najlepszy z
dopasowanych obrazów z listy oraz obraz, z którym dokonywano porównania. W zależności
od ustawień może pokazywać jedynie złącznone lub dodatkowo niezłączone punkty
charakterystyczne. Ponadto pokazuje na liście numer indeksu najlepiej dopasowanego obrazu,
nazwy algrytmó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).
60
Rysunek 31: Wynik najlepszego dopasowania dwóch klatek bez narysowanych złączeń
Rysunek 32: Wynik najlepszego dopasowania dwóch klatek z narysowanymi złączeniami
Po wciśnięciu przycisku dismiss następuje niejawne zapisanie do pamięci telefonu
zdjęcia o nazwie zawierającej wspomniane parametry i nazwy algorytmów. Jest to niemalże
unikatowa nazwa, więc dobrze służy jako klucz identyfikujący wykonane testy. Jednak w
rozumieniu baz danych nie jest kluczem głównym.
61
Po wciśnięciu przycisku „menu” w urządzeniu widzimy 3 możliwe opcje:
Rysunek 28: Opcje do wyboru w menu
1. Możemy nałożyć na obraz z kamery jeden z filtrów.
mono - obraz będzie czarno - biały, ale jest to jedynie efekt wizualny, bowiem
porównywane obrazy zawsze są czarno-białe, co jest kolejnym krokiem
optymalizacyjnym przyspieszającym działanie algorytmów,
aqua - obraz cechuje charakterystyczne rozmycie zwane blurem,
sepia - obraz staje się sepią, więc wygląda jakby powstał na początku XX wieku,
none - obraz jest naturalny, czyli taki jaki powstałby bez filtrów z kamery.
62
Rysunek 29: Efekt wyboru opcji negatywu na działanie aplikacji
2. Możemy również wybrać jedną z dostępnych rozdzielczości przetwarzanego obrazu.
Należy jednak pamiętać, że zwiększenie rozdzielczości już przetwarzanego obrazu
może nie być możliwe. Dzieje się tak dlatego, że obraz musi zmieścić się na
wyświetlaczu, co jest możliwe tylko dla niższych rozdzielczości.
Rysunek 35: Lista rozwijana z dostępnymi do wyboru rozdzielczościami dla przetwarzanych obrazów z kamery
63
3. 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.
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.
Rysunek 30: 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.
64
Rysunek 37: Dostępne do wyboru deskryptory cech wraz z pewnymi parametrami algorytmu szukania najlepszego
dopasowania
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 38: Dostępne do wyboru algorytmy łączenia dopasowań pomiędzy klatkami oraz sposób przeprowadzania
procesu łączenia klatek
65
Warto wspomnieć, że aplikacja, która korzysta z kamery urządzenia działającego na
systemie Android ma jedną zasadniczą wadę. Chodzi o bardzo duże zużycie baterii. Dzieje się
tak, ponieważ ekran zużywa sporo energii, a algorytmy wykonują skomplikowane obliczenia.
Wykres odzwierciedla znaczny spadek poziomu baterii telefonu, co spowodowane jest
intensywnym testowaniem aplikacji.
Rysunek 39: Wpływ działania aplikacji na poziom zużycia baterii
66
6.2.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.
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,
liczby punktów spełniających zadanych dystans,
liczby punktów będących wynikiem szukania homografii,
średniego czasu przetwarzania jednego zdjęcia.
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 obrazów van Gogha - korzysta z nich druga aplikacja.
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.
7 Wyniki testów
Na początku trzeba powiedzieć, że dwa algorytmy w bibliotece OpenCV nie są bezpłatne.
Mowa o SIFT oraz SURF. Ich testowanie nie może zostać przeprowadzone bez uiszczenia
opłat. Aby otrzymać dostęp do kodów źródłowych tych algorytmów należy kupić licencję. Jej
cena spowodowała konieczność rezygnacji z ich badania.
Oto obrazy, na których testowano aplikację:
67
68
69
Rysunek 40: Przykładowe sceny na których testowano algorytmy
Algorytmy testowano pod kątem:
Czas detekcji na jednej klatce - całkowity czas w milisekundach potrzebny
algorytmowi do wykonania detekcji punktów charakterystycznych na jednym
zdjęciu/klatce.
Czas detekcji na jeden punkt charakterystyczny - całkowity czas w milisekuntach
potrzebny na detekcję pojedynczego punktu charakterystycznego. Wylicza się go jako
całkowity czas potrzebny na obraz/klatkę i podzielony przez liczbę wykrytych
punktów charakterystycznych.
Szybkość na punkt złączenia - całkowity czas potrzebny, aby odnaleźć jeden punkt
złączenia przy racjonalnie dobranym dystansie złączenia.
Procent odnalezionych punktów kluczowych obrazu - procent odnalezionych z
sukcesem punktów od obrazu oryginalnego do obrazu mierzonego. Powinien być
bliski 100%. Liczymy ile punktów wykryto dla obrazu oryginalnego, a ile dla
zmatchowanego.
Średni błąd detekcji - średni dystans między pozycją namierzonego punktu a
wyliczoną pozycją punktu w obrazie oryginalnym. Bada dokładność pomiaru punktów
charakterystycznych. Duże wartości oznaczają fałszywie pozytywne zbieżności
pomiędzy cechami obrazów.
Procent złączonych punktów charakterystycznych - określa ile spośród odnalezionych
cech obrazu zostało zmatchowanych z obrazem referencyjnym. Bierze pod uwagę
zadany dystans potrzebny do uznania punktów za połączone.
70
Procent punktów przeprowadzonych z detekcji na homografię - określa jaki procent
punktów uznanych za cechy obrazu został użyty w celu wyznaczenia homografii.
Bada jakość odrzuconych punktów. Im większy, tym punkty odnalezione były lepsze.
Procent punktów przeprowadzanych ze złączenia na homografię - określa ile z
punktów uznanych za złączeniowe zostało uznanych za wyznaczone w wyniku
homografii. Im więcej, tym lepsze były punkty złączeniowe.
7.1 Wyniki dla obrazu przedstawiającego książki na półce
Testowana scena:
Scena została wybrana do testów, ponieważ wg autora zawierała wiele cech.
Występuje w niej zmienne naświetlenie, w tym ewidentne prześwietlenia oraz obszary
niedoświetlone.
Poniżej prezentujemy wykresy obrazujące wyniki naszych testów. Pod każdym
wykresem znajduje się jego analiza.
Dodatkowo umieszczamy poniżej fotografie przedstawiające obraz zadany oraz
najlepiej dopasowany obraz ze zbioru migawek wykonanych w ramach testów. Dzięki temu
będziemy wiedzieli, że niektóre algorytmy nie potrafią odzwierciedlić szczególnych
przypadków. Będziemy też mogli zasugerować, jakich algorytmów należy używać, a jakich
należy unikać ze względu na ich omylność. To pozwoli nam na ich klasyfikację.
71
Wykresy dla testu wykrycia punktów kluczowych:
Wyraźnie widać, że detektor Dense wyselekcjonował najwięcej punktów kluczowych.
Bardzo dobrze wypadły algorytmy Fast oraz GFTT. Nieźle wypadły algorytmy ORB oraz
Harris. Na uwagę zasługuje fakt, że algorytm STAR wyszukał najmniej cech. Algorytm Grid
Star nie znalazł żadnych cech, więc najprawdopodobniej nie działa w tej odmianie. Należy
zwrócić uwagę, że algorytmy w odmianie Pyramid wykrywały więcej punktów kluczowych.
Algorytm Fast w odmianie Dynamic (jako jedyny posiada tę odmianę) wypadł przeciętnie.
Algorytmy w odmianie Grid wykrywały mniej punktów charakterystycznych. Wyjątkiem jest
algorytm Harris, dla którego odmiana Grid wykryła więcej cech. Należy pamiętać, że w
zależności od potrzeb niezbędna jest różna liczba wykrytych punktów charakterystycznych w
obrazie. Generalnie im więcej, tym lepiej, aczkolwiek można zaryzykować stwierdzenie, że
około 500 punktów powinno być zadowalającym wynikiem.
0 500 1000 1500 2000 2500
GRID STAR
GRID BRISK
GRID ORB
STAR
PYRAMID STAR
BRISK
PYRAMID BRISK
HARRIS
PYRAMID HARRIS
GRID HARRIS
DYNAMIC FAST
ORB
GRID FAST
PYRAMID ORB
GRID DENSE
GRID GFTT
GFTT
FAST
PYRAMID GFTT
PYRAMID FAST
DENSE
PYRAMID DENSE
Liczba wykrytych punktów kluczowych
72
Oto wykres obrazujący liczbę wykrytych puntków charakterystycznych, punktów
użytych w trakcie złączenia obrazów (a zatem najlepszych punktów kluczowych) oraz
punktów będacych wynikiem złączenia obrazów w wyniku znalezienia między nimi
homografii. Ostatnia wymieniona grupa obejmuje punkty będące jeszcze lepsze jakościowo
niż punkty złączenia.
Jak widać algorytm Dense nie najlepiej poradził sobie z przełożeniem dużej liczby
punktów kluczowych na punkty zlączenia oraz homografii. Zauważmy, że Pyramid Fast
wykrył więcej punktów złączenia i homografii niż Dense mimo tego, że znalazł mniej
punktów kluczowych. Widać tutaj kilka algorytmów, które zachowały spory procent
wykrytych cech obrazu. Świadczy to o wysokiej jakości wykrywanych przez nie cech. Takimi
algorytmami są Fast, Gftt, Orb, Harris oraz Star. Wyres pokazuje, że algorytmy w wersjach
Grid wykrywają niskiej jakości cechy – ich słupki punktów złączenia oraz homografii w
stosunku do punktów kluczowych są znacznie mniejsze. Algorytmy w wersji Pyramid mają
zbliżoną skalę odrzucania punktów na poszczególnych etapach co algorytmy w wersji
klasycznej. Im więcej punktów złączenia oraz homografii wybrano spośród punktów
kluczowych, tym lepiej. W omawianym teście wyraźnie widać słaby wynik algorytmów
Dense oraz Brisk.
0 500 1000 1500 2000 2500
GRID STAR
GRID BRISK
GRID ORB
STAR
PYRAMID STAR
BRISK
PYRAMID BRISK
HARRIS
PYRAMID HARRIS
GRID HARRIS
DYNAMIC FAST
ORB
GRID FAST
PYRAMID ORB
GRID DENSE
GRID GFTT
GFTT
FAST
PYRAMID GFTT
PYRAMID FAST
DENSE
PYRAMID DENSE
Liczba wykrytych poszczególnych rodzajów cech w obrazie
punkty homografii
punkty złączenia
punkty kluczowe
73
Oto wykres obrazujący średni dystans Hamminga. Jest to pewnego rodzaju miara jakości
wyszukiwanych cech. Im mniejsza wartość dystansu, tym lepsza cecha.
Wyraźnie widać, że algorytmy Dense oraz Brisk nie wypadły dobrze. Ponadto wykres
pokazuje, że algorytmy w wersji Grid uzyskały znacznie słabsze wyniki niż algorytmy w
wersji klasycznej. Algorytmy w wersji Pyramid również wypadły gorzej niż algorytmy w
wersji klasycznej. Nie jest to jednak zaskakujące zachowanie, ponieważ wykryły one więcej
cech o nieco niższej jakości. Natomiast algorytmy w wersji Grid znalazły mniej punktów
kluczowych, dodatkowo o niższej jakości. W opisywanym teście bardzo dobrze wypadły
algorytmy Star oraz Harris. Algorytm Star wykrył niewiele cech w obrazie, natomiast ich
jakość jest zdecydowanie najlepsza. Algorytmy GFTT oraz Fast także wypadły dość dobrze.
Wykryły bardzo dużą liczbę punktów kluczowych, więc należy stwierdzić, że jakość tych
punktów jest dobra. Nie zaskakują zatem poprzednie wykresy, a powyższy wykres pokazuje
dlaczego algorytm Dense odrzucał tak wiele punktów kluczowych i nie potrafił połączyć ich
między obrazami.
0 5 10 15 20 25 30 35
GRID STAR
GRID BRISK
GRID ORB
STAR
PYRAMID STAR
BRISK
PYRAMID BRISK
HARRIS
PYRAMID HARRIS
GRID HARRIS
DYNAMIC FAST
ORB
GRID FAST
PYRAMID ORB
GRID DENSE
GRID GFTT
GFTT
FAST
PYRAMID GFTT
PYRAMID FAST
DENSE
PYRAMID DENSE
Średni dystans Hamminga
74
Całkowity czas pomiaru oraz przebiegu testu w milisekundach
Im krótszy czas pomiaru, tym lepiej. Nie należy brać pod uwagę wyniku algorytmu
Grid Star, ponieważ nie wykrył on żadnych cech w obrazie. Wyraźnie widać, że algorytmy w
wersjach Grid wypadają korzystniej w omawianym teście. Nie jest to przypadek, ponieważ
swykrywają one mniej cech niż wersje klasyczne lub Pyramid. Ponadto dostarczają punkty o
niższej jakości, dlatego też działają szybciej. Algorytmy w wersji Pyramid pracują dłużej.
Dzieje się tak dlatego, że znajdują więcej cech w obrazie o nieznacznie niższej jakości niż
algorytmy w wersji klasycznej. W tym teście najlepiej wypadły algorytmy Star, Brisk, Harris,
Fast oraz wszystkie odmiany w wersji Grid. Algorytm Dense uzyskał najsłabszy wynik.
Algorytm Gftt również nie wypadł dobrze. Warto zwrócić uwagę, że algorytm ORB w wersji
klasycznej wypada przeciętnie, a w wersji Grid znakomicie. Należy jednak pamiętać, że w
wersji Grid wykrył on mało cech o bardzo słabej jakości. Trzeba podkreślić, że algorytm Star
wykrywa mało cech o najwyższej jakości i pracuje najkrócej. Zasługuje zatem na szczególną
uwagę. Dobrze wypadają Fast oraz Harris.
0 2000 4000 6000 8000 10000 12000
GRID STAR
GRID BRISK
GRID ORB
STAR
PYRAMID STAR
BRISK
PYRAMID BRISK
HARRIS
PYRAMID HARRIS
GRID HARRIS
DYNAMIC FAST
ORB
GRID FAST
PYRAMID ORB
GRID DENSE
GRID GFTT
GFTT
FAST
PYRAMID GFTT
PYRAMID FAST
DENSE
PYRAMID DENSE
Całkowity czas pomiaru
75
Oto wykres obrazujący jak wiele punktów kluczowych zostało użytych w złączeniu obrazów
oraz jak wiele spośród złączonych punktów zostało wybranych poprzez homografię. Im
więcej punktów złączenia oraz homografii w stosunku do kluczowych, tym lepiej.
Najpierw należy zwrócić uwagę na długość niebieskich słupków. Obrazuje ona, jaki
procent punktów kluczowych w obrazie zadanym i porówynywanym został wykryty jako
część wspólna. Oczywiście im ten procent większy, tym lepiej. Dobrze wypadły algorytmy
Dense, Orb, Gftt. Słabo wypadły algorytym Star, Brisk, Harris.
Następnie należy przeanalizować tendencję przydatności wykrytych punktów
kluczowych. Im większy procent punktów kluczowych został użyty w złączeniu obrazów,
tym lepiej. Im większy procent punktów użytych w złączeniu został wybrany w wyniku
homografii, tym lepiej. Zwróćmy uwagę na dobry wynik algorytmów Star, Harris, GFTT oraz
Fast. Wypadają one najlepiej, przy czym Fast nieco słabiej niż trzy pozostałe. Pokazuje to, że
algorytmy te wykrywają punkty charakterystyczne użyteczne przy złączeniu obrazów oraz
wyznaczeniu dla nich homografii. Świadczy to o ich wysokiej przydatności i jakości. Słabo
wypadły algorytmy Dense i Brisk. Przeciętny wynik dał algorytm ORB. Algorytmy w wersji
Grid zdecydowanie wypadły słabo. Potwierdza to, że wykrywane przez nie punkty są słabe
jakościowo, tylko część z nich jest przydatna. Algorytmy w wersji Pyramid wypadły nieco
0 0,2 0,4 0,6 0,8 1 1,2
GRID STAR
GRID BRISK
GRID ORB
STAR
PYRAMID STAR
BRISK
PYRAMID BRISK
HARRIS
PYRAMID HARRIS
GRID HARRIS
DYNAMIC FAST
ORB
GRID FAST
PYRAMID ORB
GRID DENSE
GRID GFTT
GFTT
FAST
PYRAMID GFTT
PYRAMID FAST
DENSE
PYRAMID DENSE
Skuteczność wykorzystania wykrytych punktów kluczowych przy łączeniu obrazów
punkty homografii
punkty złączenia
punkty kluczowe
76
gorzej niż od tych w wersji klasycznej, ale dalej zadowalająco. Szczególnie korzystnie
zaprezentowały się Pyramid Gftt oraz Pyramid Star i Pyramid Harris. Algorytm Pyramid Fast
wypadł dość dobrze, ale znacznie gorzej od wspomnianych.
Czas potrzebny na pełne przeanalizowanie obrazu zadanego i porównywanego. Im krótszy
czas, tym algorytm jest lepszy.
W tym teście bardzo dobrze wypadły algorytmy Star, Brisk i Harris. Dobry wynik
uzyskał algorytm Fast. Przeciętnie wypadły algorytmy ORB oraz GFTT. Słabo zaprezentował
się algorytm Dense. Algorytmy w wersji Grid wypadły lepiej niż algorytmy w wersjach
klasycznych, co zostało to już wytłumaczone. Analogicznie gorzej niż algorytmy w wersjach
klasycznych wypadły algorytmy w wersjach Pyramid, co również zostało wcześniej
wyjaśnione.
0 100 200 300 400 500 600
GRID STAR
GRID BRISK
GRID ORB
STAR
PYRAMID STAR
BRISK
PYRAMID BRISK
HARRIS
PYRAMID HARRIS
GRID HARRIS
DYNAMIC FAST
ORB
GRID FAST
PYRAMID ORB
GRID DENSE
GRID GFTT
GFTT
FAST
PYRAMID GFTT
PYRAMID FAST
DENSE
PYRAMID DENSE
Czas przetwarzania jednej klatki
77
Czas potrzebny algorytmowi na wykrycie punktu kluczowego. Im krótszy czas, tym lepiej.
W tym teście bardzo dobre wyniki uzyskały algorytmy Dense, Fast, GFTT oraz ORB.
Algorytm Harris wypadł przeciętnie. Algorytmy Brisk oraz Star wypadły niekorzystnie.
Algorytmy w wersji Grid zaprezentowały się porównywalnie do algorytmów w wersjach
klasycznych. Oznacza to, że korzyści czasowe z ich wykorzystywania są tak znaczące.
Algorytmy w wersjach Pyramid wypadły porównywalnie do wersji klasycznych. Oznacza to,
że czas przetwarzania cech obrazu nie jest dla nich znacznie większy, przez co
prawdopodobnie będą zalecane w pewnych sytuacjach. Algorytm Dense wypada w tym teście
dobrze, ponieważ wykrywa bardzo dużo punktów. Podobnie jest w przypadku algorytmu
Fast. Algorytm Star wypada tutaj niekorzystnie, ale pamiętajmy, że dostarcza on małej liczby
cech o bardzo wysokiej jakości. Łączny czas przetwarzania zdjęcia jest w jego przypadku
najkrótszy, a jednej cechy najdłuższy, co wynika to z wysokiej jakości dostarczonego punktu.
0 0,5 1 1,5 2 2,5 3 3,5 4 4,5 5
GRID STAR
GRID BRISK
GRID ORB
STAR
PYRAMID STAR
BRISK
PYRAMID BRISK
HARRIS
PYRAMID HARRIS
GRID HARRIS
DYNAMIC FAST
ORB
GRID FAST
PYRAMID ORB
GRID DENSE
GRID GFTT
GFTT
FAST
PYRAMID GFTT
PYRAMID FAST
DENSE
PYRAMID DENSE
Czas przetwarzania punktu kluczowego
78
Oto wykres obrazujący czas potrzebny na ekstrakcję i wykycie odpowiedników przy
złączeniu. Wszystkie testy były przeprowadzone z wykorzystaniem wspólnego ekstraktora
ORB oraz algorytmu łączenia Bruteforce Hamming, zatem pokazują, ile trwają specyficzne
dla algorytmów detekcji operacje zbudowania deskryptora i znalezienia odpowiednika. Im ten
czas jest krótszy, tym lepiej.
Z wykresu wynika, że bardzo niekorzystnie wypadły algorytmy Star oraz Brisk. Skala
wykresu utrudnia interpretację, dlatego poniżej przedstawiamy wykres, uwzględniający tylko
algorytmy, które wypadły zadowalająco.
0 10 20 30 40 50 60 70 80 90 100
GRID STAR
GRID BRISK
GRID ORB
STAR
PYRAMID STAR
BRISK
PYRAMID BRISK
HARRIS
PYRAMID HARRIS
GRID HARRIS
DYNAMIC FAST
ORB
GRID FAST
PYRAMID ORB
GRID DENSE
GRID GFTT
GFTT
FAST
PYRAMID GFTT
PYRAMID FAST
DENSE
PYRAMID DENSE
Czas przetwarzania punktu złączenia
79
Oto wykres obrazujący tylko algorytmy, dla których czas przetwarzania jest porównywalny i
zadowalający.
Jak widać algorytm Harris wypadł przeciętnie. Podobnie algorytm Orb. Dobrze
zaprezentowały się algorytmy Dense, Fast oraz Gftt. Nie widać istotnych różnic w przypadku
wersji Pyramid i Grid dla algorytmu Fast. Uogólniając, algorytmy w wersji Pyramid
dostarczają cech, dzięki którym czas ich ekstrakcji i złączenia jest nieznacznie krótszy.
Stanowi to ich zaletę. Algorytymy w wersji Grid znowu wypadły słabiej. Czas ekstrakcji oraz
złączenia punktów jest w ich przypadku dłuższy, co kwestionuje ich przydatność.
Oto obrazy dokumentujące powyższe testy wraz z komentarzami:
0 0,5 1 1,5 2 2,5
HARRIS
PYRAMID HARRIS
GRID HARRIS
DYNAMIC FAST
ORB
GRID FAST
PYRAMID ORB
GRID DENSE
GRID GFTT
GFTT
FAST
PYRAMID GFTT
PYRAMID FAST
DENSE
PYRAMID DENSE
Czas przetwarzania punktu złączenia
80
Powższy obraz pokazuje wykorzystanie detektora Star. Widać, że złączył on niewiele
punktów kluczowych. Ponadto było tylko kilka punktów, które nie zostały wykorzystane w
złączeniu. Co więcej, obraz uznany za odpowiednik jest bardzo podobny do zadanego.
Powyższy obraz pokazuje działanie detektora Orb. Wyraźnie widać większą liczbę
odnalezionych punktów kluczowych oraz złączeń. Krzywe linie złączeń dowodzą, że zdjęcie
uznane za złączone z zadanym jest nieco innym ujęciem sceny. Co ciekawe, jest innym
ujęciem niż odnalezione przez algorytm Star. Wydaje się, że algorytm Star znalazl lepszy
odpowiednik sceny.
Powżysze zdjęcie obrazuje działania detektora Gftt. W wyniku zwrócił on tę samą
klatkę co algorytm Star. Ponadto dostarczył bardzo dużej liczby punktów kluczowych oraz
złączeń.
81
Powyższe zdjęcie obrazuje działanie algorytmu Pyramid Fast. Detektor ten zwrócił w
wyniku obraz identyczny co Gfft oraz Star. Mamy tu bardzo dużo punktów kluczowych oraz
złączeń. Ich proste linie wskazują na poprawność działania.
Powyższe zdjęcie obrazuje działanie algorytmu Dense. Jest tu bardzo dużo złączeń
oraz punktów kluczowych. Wyraźnie widać, że niektóre złączenia mają krzywe linie
(odpowiedniki), co świadczy o kiepskim dopasowaniu punktów. Poniżej prezentujemy ujęcie
uznane za złączone (bez odpowiedników):
82
Wyraźnie wiadać, że klatka uznana za złączoną jest inna niż ujęcia wskazane przez
detektory Fast i Orb. Wynik ten nie jest właściwy. Oznacza to, że algorytm Dense jest
niewiarygodny.
7.2 Wyniki dla obrazu z martwą naturą
Analizowana scena:
83
Scena jest bogata w cechy i punkty kluczowe. Posiada oświetlenie dostarczone poprzez
światło sztuczne oraz odbicia światła w kieliszkach i na butelce. Wyraźnie widać refleksy
oraz duży kontrast kolorów.
Ze względu na objętość pracy nie zaprezentujemy poniżej analogicznych wykresów jak dla
poprzednio analizowanej sceny. Ograniczymy się do komentarza, że wyniki są niemalże
identyczne. Trend wyników jest jednakowy, jedyną różnicą były krótsze czasy przetwarzania
algorytmów wynikające z lepszej jakości cech obrazu.
Podobnie jak poprzednio zamieszczamy kilka obrazów z testów:
Powyższy obraz ukazuje działanie algorytmu Star. Widać zdecydowanie więcej cech oraz
złączeń niż w przypadku poprzedniej sceny. Co ciekawe, złączona scena jest nieco inna niż
zadana.
Powyższy obraz ukazuje działanie detektora Harris. Złączona scena wyraźnie różni się od
zadanej oraz tej wykrytej przez algorytm Star. Jest niestety mniej zadowalająca. Oznacza to,
że algorytm Harris poradził sobie słabiej mimo większej liczby wykrytych cech i złączeń.
84
Powyżyszy obraz prezentuje działanie detektora Orb. Widać równie dużo złączeń i cech co w
przypadku algorytmu Star. Złączenie też jest identyczne.
Powższy obraz ukazuje działanie algorytmu Gftt. Zwraca on w wyniku identyczną klatkę
złączenia co algorytmy Star oraz Orb.
85
Powyższy wynik to efekt działania detektora Fast. Jest on taki sam jak dla algorytmów Orb,
Star i Gftt. Należy zatem uznać, że algorytmy zadziałały równie dobrze dla tej sceny.
Powższe obrazy to wynik działania algorytmu Dense. Jest on niepoprawny, co widać
wyraźnie, ponieważ scena uznana za złączoną jest ewidentnie wynikiem zbliżenia kamery.
Patrząc na punkty kluczowe i ich złączenia widać dużo krzywych złączeń, które są
niepoprawne. W kolejnej scenie algorytm zwrócił fałszywy wynik.
7.3 Wyniki dla obrazu przedstawiającego laptopa i Gwiaździstą Noc van Gogha
Analizowana scena:
86
Scena została wybrana ze względu na duży kontrast oraz występowanie na niej obrazu van
Gogha, który jest wykorzystywany w drugiej aplikacji.
Podobnie, jak poprzednio, ze względu na ograniczone miejsce oraz identyczny wynik
jakościowy testów, nie będziemy umieszczać tutaj wykresów obrazujących zachowanie
algorytmów. Ograniczymy się do pokazania samych wyników działania poszczególnych
algorytmów.
Oto obrazy z przeprowadzonego testu wraz z ich interpretacją :
87
Powyższy obraz ukazuje działanie detektora Star. Widać, że znalazł on sporo cech i złączył je
ze sobą. Niepokojące są krzywe linie złączenia. Pokazują one, że obraz złączony został
uchwycony pod innym kątem niż zadany.
Jak widać detektor Harrisa zwrócił ten sam wynik co detektor Star. Wydobył jednak więcej
cech z obrazu.
Detektor Pyramid Orb zwrócił inny wynik. Jest on bliższy prawdzie. Co ciekawe, w tym
wypadku algorytm Orb okazał się dokładniejszy niż algorytm Star. O jakości złączenia
świadczą proste linie.
88
Detektor Gftt zwrócił ten sam wynik co Star i Harris, a inny niż Orb. Można stwierdzić, że
Orb zaprezentował się korzystniej.
Detektor Dense ponownie wybrał inny, niezachowujący skali obraz złączenia. Jest to
fałszywe złączenie. Co ciekawe, detektor Dense rozpoznał punkty kluczowe na obszarze
występowania liter i przycisków na klawiaturze laptopa. Wyraźnie widać, że algorytm Dense
89
niepoprawnie odczytuje zmieniającą się skalę obrazów, co wydaje się go dyskwalifikować w
przypadku przetwarzania obrazów w czasie rzeczywistym.
Detektor Pyramid Dense wypadł jeszcze słabiej. Widzimy, że złączył ze sobą obrazy o
różnych kątach obrotu. To bardzo niekorzystne zjawisko.
90
Na koniec widzimy, że detektor Fast wykrył jako złączenie te same obrazy co Star, Harris i
Gftt. Omawiany test jest bardzo ciekawy, bowiem wyraźnie ukazuje słabości Dense. Pokazuje
też, że czasami algorytmy Fast, Star, Gftt oraz Harris, które można z pewnością uznać za
bezpieczny wybór, wypadły gorzej niż nieco niedoceniony i średnio wypadający w testach
algorytm Orb w wersji Pyramid.
7.4 Wyniki dla obrazu przedstawiają dwie fotografie wiszące na ścianie
Analizowana scena:
Scena ta nie będzie aż tak bogata w cechy i punkty kluczowe jak poprzednio analizowane.
Dzięki temu zbadamy jak zachowują się badane algorytmy w nieco innych warunkach.
Ponadto ujęcie zostało wykonane pod kątem, więc testy będą ukazywały jak algorytmy
działają przy zmiennej orientacji obrazów.
Ponownie ograniczymy się do pokazania wyników działania poszczególnych algorytmów.
Raz jeszcze testy wykazały jakościowo identyczne wyniki. Na uwagę w tym przypadku
testowym zasługuje nieznacznie gorsza sprawność algorytmu FAST pod względem liczby
wykrytych cech oraz lepszy wynik działania GFTT. Co ciekawe, algorytm HARRIS uzyskał
porównywalny jakościowo wynik do algorytmu STAR pod względem dystansu Hamminga, a
więc jakości wykrytych cech.
91
Oto obrazy z przebiegu testu wraz z krótkim komentarzem :
Powyższy obrazek pokazuje działanie detektora Star. Wynik jest poprawny. Należy zwrócić
uwagę na prawie 100% złączenia. Tylko jeden punkt kluczowy nie znalazł swojego
odpowiednika. Oznacza to wysoką wiarygodność wyników.
Oto wynik działania detektora Harris. Wynik jest również poprawny. Trzeba podkreślić, że
cechy znalezione na obrazie tancerki nie zostały złączone z obrazem wynikowym. Dla
porównania:
92
Algorytm Pyramid Harris wyraźnie lepiej wykonał zadanie. W wyniku zwrócone zostały
również poprawnie złączone obrazy, przy czym ten sam detektor w wersji Pyramid znalazł i
złączył cechy na krawędziach obrazu tancerki (nieprzypadkowo są to krawędzie, gdyż jak
wiadomo detektor Harrisa pierwotnie wykrywał właśnie krawędzie).
Detektor Orb również dał taki sam wynik, przy czym zwrócił więcej cech obrazu.
93
Detektor Grid Gftt wykonał zadanie bardzo dobrze. Co ciekawe, wykrył znacznie więcej
cech, ale nie potrafił dla wielu z nich znaleźć dopasowania. Zaskakują jedynie cechy
znalezione na samej ścianie, co może świadczyć o jego zbytniej zachłanności (wykrywa
więcej niż powinien).
Dla porównania:
Detektor Pyramid Gftt nie znalazł cech obrazu na samej ścianie. Jest to korzystniejsze, gdyż
świadczy o większej dokładności algorytmu.
Detektor Fast również wypadł dobrze. Tym razem nie wykrył tak dużej liczby punktów, ale
jakościowo i wynikowo nie można mieć zastrzeżeń.
94
Typowo algorytm Dense wypadł bardzo słabo. Zwrócił w wyniku obraz fałszywy o
nieodpowiedniej skali i obrocie.
7.5 Wyniki dla obrazu przedstawiającego obraz na ścianie, fragment monitora i
fragment szafy
Analizowana scena :
95
Jest ona podobna do poprzedniej, nie zawiera dużej liczby punktów kluczowych ani obrótów.
Pozwoli zweryfikować poprawność poprzednich testów.
W tym teście algorytm FAST ponownie wypadł nieznacznie słabiej niż w pierwszych dwóch
testach. Tak samo jak poprzednio, algorytm GFTT wypadł lepiej niż w dwóch pierwszych
testach. Co ciekawe, ponownie, algorytm HARRIS uzyskał porównywalny jakościowo wynik
do algorytmu STAR pod względem dystansu Hamminga, a więc jakości wykrytych cech.
Interpretacja tych wyników powinna być następująca : w tej oraz w poprzedniej scenie jest
mniej cech oraz ich jakość jest niższa, a wówczas algorytmy GFTT oraz HARRIS działają
lepiej niż w pierwszych dwóch scenach, które są bogate w cechy oraz gdzie jakość tych cech
jest wysoka.
96
Oto obrazy dokumentujące przeprowadzone testy wraz z krótkim komentarzem:
Detektor Star dobrze złączył ze sobą obrazy. Nie wykrył jednak żadnych cech na krawędziach
występujących w obrazie.
Detektor Harrisa zgodnie z jego pierwotnym przeznaczeniem wykrył cechy na krawędziach i
równie dobrze wykonał zadanie.
97
Detektor Fast także dał w wyniku ten sam obraz. Również wykrył cechy na krawędziach.
Bardzo dużo cech wykrył algorytm Gftt. Co ciekawe, nie potrafił złączyć cech występujących
na krawędzi monitora i ściany w tle.
Detktor Orb również zadowalająco wykonał zadanie. Warto zwrócić uwagę na praktycznie
100% pokrycie punktów kluczowych w punkty złączenia.
98
Detektor Dense ponownie wypadł bardzo słabo. W scenie, w której występuje mało cech,
wykrył ich bardzo dużo. Oznacza to, że wyszukał w większości fałszywe cechy. Widać, że
złączone obrazy są różne
Podsumowanie i wnioski końcowe
Algorytmy detekcji SIFT i SURF są płatne. Nie mamy do nich dostępu, więc nie
jesteśmy w stanie ich przetestować.
Algorytmy detekcji MSER oraz SIMPLEBLOB nie są dostępne dla platformy OS
ANDROID, więc również nie mamy możliwości ich przetestowania.
Algorytm Star Grid wykrywa zawsze 0 punktów charakterystycznych, co świadczy
albo o jego złej implementacji albo o tym, że algorytmu typu Grid nie należy używać razem z
algorytmem Star.
Algorytmy typu Grid są znacznie mniej dokładne niż algorytmy klasyczne i ich
używanie nie jest zalecane. Zwracają dużo fałszywych cech, na podstawie których nie należy
łączyć obrazów. Zysk wydajnościowy nie jest aż tak znaczący, aby korzystać z tych
algorytmów.
Odmiana algorytmu Dynamic jest dostępna jedynie dla algorytmu Fast i nie jest
szczególnie ciekawa. We wszystkich testach wypada przeciętnie.
Algorytm Dense jest bardzo słabo napisany. Wykrywa bardzo dużo fałszywych
punktów w każdej z odmian. Nie należy go stosować.
Algorytm Star jest bardzo ciekawy. Jego wyniki dowodzą, że jakość wybranych przez
niego punktów jest wysoka. Algorytm ten ani razu nie dopasował złych obrazów, co daje
100% poprawnych wyników. Ponadto wykorzystaliśmy go w drugiej aplikacji właśnie ze
względu na jego wysoką wiarygodność oraz szybkość rozumianą jako szybkość całkowitej
detekcji (jak wykazaliśmy ogólną szybkość ma najlepszą, ale szybkość szczególną
wykrywania cech zdecydowanie nie)
Algorytmy w wersji Pyramid są nieznacznie wolniejsze od wersji klasycznych.
Wykrywają za to więcej cech w obrazach, przy czym jakość cech jest porównywalna. Jest to
odmiana algorytmów, o której warto pamiętać, gdy algorytm w wersji klaszycznej nie potrafi
wykonać zadania.
Co ciekawe, algorytm Harrisa, który ma już ponad 30 lat, dalej działa zadowalająco.
We wszystkich testach wypadł dobrze. W scenach, w których występuje sporo krawędzi
prezentuje się bardzo dobrze. Przeciętnie wypada w scenach, w których jest dużo cech.
Generalnie im trudniejsza scena zawierająca krawędzie, tym większa jego przydatność.
99
Algorytm Gftt jest wiarygodnym algorytmem. Ani razu się nie zwrócił błędnego
wyniku, we wszystkich testach wypadał dobrze. Co ciekawe, w scenach uboższych w cechy
prezentował się bardzo dobrze, lepiej niż pozostałe. W scenach bogatych w cechy również
wypadał satysfakcjonująco, ale czas przeprowadzonych obliczeń był wówczas przeciętny.
Algorytm Fast oraz jego odmiana Pyramid są bardzo dobrze zooptymalizowane pod
kątem działania na platformie OS Android. Co więcej, w scenach bogatych w cechy wypadły
najlepiej. W scenach uboższych w cechy działały zadowalająco, ale gorzej niż Gftt.
Algorytm Orb również prezentował się dobrze. Warto zwrócić uwagę, że w jednym z
testów w scenie bardzo bogatej w cechy w praktyce wypadł najlepiej, mimo przeciętnych
wyników w testach. Trzeba jednak zaznaczyć, że zwrócony przez niego wynik był tylko
nieznacznie lepszy niż rezultaty zwrócone przez inne algorytmy.
Reasumując, w zależności od potrzeb warto korzystać z następujących algorytmów:
Star, Harris, Orb, Gftt, Fast.
Wydaje się, że Fast jest najbezpieczniejszym wyborem. Jednak w sytuacjach, gdy
zależy nam na szybkości oraz dokładności Star jest ciekawym i dobrym wyborem, czego
dowodzi działanie drugiej aplikacji. Według autora warto również korzystać z algorytmu Gftt.
Algorytmy Harrisa oraz Orb są poprawne, ale nie widać szczególnych przypadków ich
zastosowania.
Nie należy natomiast wykorzystywać algorytmów Dense oraz Brisk. Ponadto nie
warto stosować algorytmów w odmianie Grid, gdyż nie przynoszą one spodziewanych
korzyści i powodują straty.
Poniżej znajduje się tabela, która ocenia powyższe algorytmy wg. poszczególnych
kryteriów. Dla uproszczenia nie będziemy ponownie rozpatrywać algorytmów w wersjach
grid, pyramid, a jedynie w wersji bazowej.
Przyjmujemy następujące kryteria oceny :
10 - algorytm w tej kategorii jest najlepszy
8 - algorytm jest bardzo dobry w danej kategorii ale nie najlepszy
6 - algorytm w danej kategorii jest przeciętny, ale zdatny do użytku
4 - algorytm w testach zachowywał się poniżej przeciętnej i jego użycie w
danym przypadku testowym jest wątpliwe
2 - algorytm w testach wypadł źle ale nie najgorzej spośród testowanych
algorytmów
0 - algorytm w tej kategorii dał najsłabsze wyniki
KATEGORIA FAST GFTT ORB STAR DENSE HARRIS BRISK
Czas przetwarzania
jednej klatki
(szybkość działania)
2 6 6 10 0 8 6
Czas przetwarzania
jednego punktu
charakterystycznego
(szybkość działania)
10 6 4 2 8 4 0
Czas przetwarzania
jednego punktu
złączenia (szybkość
działania)
10 8 4 2 8 6 0
Procent
odnalezionych cech
w obrazie i we
6 8 4 10 4 6 0
100
wzorcu
(wiarygodność
algorytmu)
Średni dystans
Hamminga - błąd
detekcji (odporność
na błędy -
niezawodność)
8 6 4 10 0 8 2
Procent złączonych
punktów
(selektywność
algorytmu)
10 8 6 8 2 6 0
Na podstawie powyższej tabeli pokusiliśmy się o stworzenie zbiorczej tabeli
zawierającej agregaty w podziale na kategorie otrzymane w następujący sposób (w skład
danej kategorii wchodzą z odpowiednimi wagami kategorie wymienione powyżej) :
Szybkość działania z wagami 1 x Czas przetwarzania jednej klatki , 2 x Czas
przetwarzania jednego punktu charakterystycznego, 1 x Czas przetwarzania
jednego punktu złączenia. Uznaliśmy, że czas przetwarzaniu cechy obrazu jest
jednakże główną miarą jakości algorytmu, stąd jego dwukrotnie większy
wpływ na wagę kategorii szybkość.
Wiargodność z wagami 1 x Procent odnalezionych cech w obrazie i we
wzorcu, 1 x Procent złączonych punktów
Niezawodność, odporność na szumy i zakłócenia z wagami 1 x Średni dystans
Hamminga - błąd detekcji
Dzięki temu prezentujemy poniżej tabelę, która wystawia zbiorcze oceny algorytmom,
przy założeniu, że każda z trzech zbiorczych kategorii jest równie ważna (co stanowi
bezpieczne założenie albowiem należy szukać kompromisu pomiędzy szybkością działania,
niezawodnością działania oraz wiarygodnością uzyskanych wyników).
Oto wyniki :
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ższą tabelą, należałoby wnioskować, że algorytm FAST jest
najlepszym algorytmem, algorytm STAR jest niewiele gorszy, kolejno GFTT oraz HARRIS,
podczas gdy algorytm ORB jest przeciętny, natomiast DENSE oraz BRISK wypadają w
przedstawionym zestawieniu znacznie poniżej przeciętnej. W rzeczywistości wiele zależy od
środowiska w którym przeprowadzamy testy przez co nie można na podstawie powyższej
tabeli jednoznacznie wyciągać tak dalekoidących wniosków. Niemniej jednak, wynik tego
porównania pokrywa się z prezentowanymi wynikami testów. Zatem algorytm FAST wydaje
się być bezpiecznym wyborem, tak samo jak GFTT, podczas gdy algorytm STAR wydaje się
być najdokładniejszy, kosztem wolniejszego działania. Stąd wniosek, że w zależności od
tego, na czym nam najbardziej zależy, należy wybierać różny algorytm.
101
Zastosowanie w praktyce
W dzisiejszych czasach powstaje coraz więcej aplikacji wykorzystujących markery i
AR. Doskonałym przykładem są aplikacje reklamowe. Reklama 3D to rynek rosnący,
pozwalający użytkownikom na poznanie reklamowanego produktu w ciekawy sposób.
Ponadto zobrazowaliśmy wiele filtrów i innych przekształceń wykonywanych na
obrazie w czasie rzeczywistym, co stanowi ciekawą alternatywę dla dostępnych już na rynku
aplikacji przetwarzających obrazy wcześniej zapamiętane (np. Instagram).
W aplikacjach takich jak Instagram można wykorzystywać punkty charakterystyczne i
homografie do produkcji zdjęć paronamicznych, ale to zagadnienia wykraczające poza obszar
badań niniejszej pracy.
Warto wspomnieć, że możliwości aplikacji mobilnych wykorzystujących cechy
punktów charakterystycznych stają się coraz większe. Przykładowo telefon komórkowy
Samsung Galaxy S2, na którym przeprowadzano testy, posiada najniższe parametry
wystarczające do wykorzystania opisywanych algorytmów i AR. Model ma obecnie ponad 2
lata, więc możemy przyjąć, że jest średnim wyposażeniem sprzętowym korzystającym z usług
OS Android.
Możliwości będą rosły i należy przypuszcać, że aplikacje AR będą dynamicznie się
rozwijać. Być może zrewolucjonizują one rynek reklam albo spowodują, że zdjęcia i filmy
staną się łatwo dostępne wraz z edycją dla użytkowników smartfonów i tabletów, a nie tylko
osób posiadających kamery i aparaty fotograficzne wysokiej klasy.
Bibliografia : 1. Pavlenko Andrey: OpenCV for Android ECCV 2012: 1-35
2. Bradski Gary, Kaebler: Adrian 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. Tuytelaars Tinne, Mikolajczyk Krystian: Local Invariant Feature Detectors ECCV 2010
5. Szeliski Richard: Computer Vision: Algorithms and Applications 2010
6. Baggio Daniel Lelis: Mastering OpenCV with Practical Computer Vision Projects Packt
Publishing 2011
7. The OpenCV Tutorials Release 2.4.4
8. Wolff David: OpenGL 4.0 Shading Language Cookbook Pack Publishing 2011
9. Bay, H., Tuytelaars, T., Van Gool, L.: SURF: Speeded up robust features. In
Ninth European Conference on Computer Vision ECCV 2006 : 404–417
10. Brown, D. C.: Close-range camera calibration. Photogrammetric Engineering,
1971 : 855–866.
102
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. Fergus Rob, Torralba Antonio, Fei Li Fei: Recognizing and Learning Object
Categories ICCV 2009
15. Leutenegger Stefan, Chli Margarita, Siegwart Roland: BRISK: Binary Robust Invariant
Scalable Keypoints. ICCV 2011: 2548-2555
16. Rublee Ethan, Rabaud Vincent, Konolige Kurt, Bradski Gary R: ORB: An efficient
alternative to SIFT or SURF. ICCV 2011: 2564-2571
17. Hartley Richard, Zisserman Andrew: Multiple view geometry in computer vision
Cambridge University Press 2003
18. Lowe David: Distinctive Image Features from Scale-Invariant Keypoints, 2004
19. http://www.prime-
junta.net/pont/How_to/100_Curves_and_Films/_Curves_and_films.html.
20. http://littlecheesecake.me/blog/13804625/feature-detectors-and-descriptors
21. http://computer-vision-talks.com/2012/08/a-battle-of-three-descriptors-surf-freak-and-
brisk/
Załączniki
Załącznik A - Właściwości kamer i kalibracja
Opiszemy teraz instrumenty matematyczne, dzięki którym możliwe jest symulowanie
podstawowych zachowań kamer. Przedstawimy wprowadzane przez kamery zniekształcenia i
pokażemy sposoby ich niwelowania.
Model i parametry wewnętrzne kamery
Analizując najprostszy model kamery (Pinhole camera model) możemy zgromadzić
niezbędne informacje na temat macierzy wewnętrznej jednej kamery, która jest kluczowa do
zrozumienia procesu kalibracji kamer. Najprostszy model kamery jest przestawiany jako
urojony mur z niewielką dziurą na środku. Światło wychodzi z oddalonego obiektu.
Promienie słoneczne przechodzą tylko przez dziurę na środku muru. W takim modelu obiekt
powstający na płaszczyźnie obrazu jest zawsze ostry, a jego wielkość zależy jedynie od
ogniskowej kamery.
103
Rysunek 41: Bradski Gary, Kaebler: Adrian Learning OpenCV Computer Vision with the OpenCV Library
O'Leary 2008, Klasyczny model kamery małoobrazkowej
Z rysunku wynika równanie:
Stąd :
Zamieniając miejscami płaszczyznę obrazu i model kamery z rysunku, możemy przekształcić
wzór do postaci:
W rzeczywistym modelu kamery środek matrycy nie znajduje sie 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). Widzimy to poniżej.
(
)
(
)
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:
104
[
]
Macierz rotacji i wektor przesunięcia
Fotografując obiekt, możemy określić jego położenie względem systemu
współrzędnych kamery jako macierz rotacji oraz wektor przesunięcia. Rotacja może zostać
przedstawiona jako mnożenie wektora współrzędnych i macierzy kwadratowej o
odpowiednich rozmiarach. Rysunek 42 pokazuje rotacje 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:
(ψ) = [
]
(φ) = [
]
(θ) = [
]
R = R(ψ) + R(φ) + R(θ)
Rysunek 42: 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.
105
Rysunek 43: Bradski Gary, Kaebler: Adrian 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.
Wektor przesunięcia to sposób ukazania przesunięcia z jednego układu współrzędnych
do drugiego. Innymi słowy, jest to wektor reprezentujący offset między początkami układów
współrzędnych. Zbierając informacje na temat macierzy rotacji oraz wektora przesuniecia
można wyprowadzić równanie na położenie rzeczywistego punktu (punktu obiektu ze świata
trójwymiarowego) 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 nimi
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 wraz z równaniami dotyczącymi korekcji parametrów
wewnętrznych kamery tworzy układ równań, którego rozwiązywanie nazywa sie procesem
kalibracji kamery.
Kalibracja kamery
Kalibracja kamery jest operacją znajdowania wewnętrznych parametrów kamery oraz
parametrów odpowiedzialnych za powstawanie zniekształceń filmowanych obrazów. Znając
wszystkie współczynniki wewnętrzne kamer i parametry zniekształceń, można za pomocą
kolejnych operacji matematycznych stworzyć obrazy pozbawione zdeformowań. Do
przeprowadzenia procesu kalibracji kamery potrzebny jest obiekt o znanych kształtach i
rozmiarach. Jest on fotografowany wiele razy i w wielu różnych pozycjach. Następnie
powstałe obrazy biorą udział w procesie kalibracji.
Obiekt kalibrujący
106
Obiekt biorący udział w procesie kalibracji może być dowolny, jednak jego wymiary
muszą być wiadome. Innymi słowy, punkty pochodzące z obiektu powinny być łatwe do
znalezienia, a odległości miedzy nimi znane. Dobrym i często wykorzystywanym obiektem w
procesie kalibracji jest szachownica. Punktami biorącymi udział w kalibracji są wewnętrzne
narożniki pól szachownicy. Odległości miedzy nimi łatwo mogą zostać zmierzone, gdyż
znana jest liczba pól, a więc wiadomo ile jest narożników i które wezmą udział w kalibracji.
Kolejnym argumentem uzasadniającym zastosowanie szachownicy jest fakt, iż istnieje wiele
algorytmów znajdujących jej narożniki, a zwracane położenia punktów na szachownicy mogą
zostać podane bezpośrednio jako dane wejściowe do algorytmu kalibrującego.
Zakładając, iż szachownica została wybrana jako obiekt wykorzystywany w procesie
kalibracji, należy zastanowić się, jak wiele narożników (zdjęć szachownicy) jest potrzebne do
przeprowadzenia kalibracji i uzyskania wysokiej jakości wyników. Wiadomo, że mamy
cztery parametry wewnętrzne kamery. Dodatkowo należy wyznaczyć pięć parametrów
zniekształceń oraz sześć parametrów odpowiedzialnych za rotację i 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ż dwa widoki
szachownicy o rozmiarach 3x3 to wystarczająca liczba do kalibracji kamery. Praktyka
pokazuje jednak, że aby uzyskać wysokiej jakości wyniki należy użyć co najmniej dziesięciu
ujęć szachownicy o wymiarach 7x8. Pozycja na każdym ujęciu powinna być inna, gdyż tylko
w takim przypadku kalibracja zostanie przeprowadzona poprawnie.
Załącznik B - Stereowizja i geometria epipolarna
Przed przystąpieniem do opisu procesu rektyfikacji oraz wykorzystywanych w nim
algorytmów niezbędne jest zapoznanie się z pojęciem stereowizji oraz geometrii epipolarnej.
W tym podrozdziale zawarte są też informacje na temat macierzy zasadniczej i podstawowej.
Stereowizja
Stereowizja komputerowa to próba symulacji możliwości ludzkich oczu. Zakłada
postrzeganie tych samych obiektów świata trójwymiarowego dwiema kamerami odsuniętymi
od siebie na pewną odległość. Dzięki temu otrzymujemy dwa obrazy. Każdy punkt na obrazie
z jednej kamery odpowiada punktowi na obrazie z drugiej kamery. Punkty te są przesunięte o
daną odległość. Posiadając informacje na temat położenia korespondujących ze sobą punktów
oraz dane dotyczące odległości między kamerami, możemy, korzystając z algorytmów
stereowizyjnych, symulować zachowania ludzkich oczu. Jesteśmy na przykład w stanie
wyliczyć położenie tych punktów w przestrzeni trójwymiarowej, co prowadzi do otrzymania
trójwymiarowego obrazu.
W praktyce próba uzyskania trójwymiarowego obrazu składa sie z czterech kroków.
1. Matematyczne usuniecie zniekształceń powodowanych przez obiektywy, na przykład
zgodnie z procedurą kalibracyjna opisaną w poprzednim podrozdziale.
2. Dopasowanie kątów i odległości pomiędzy kamerami w procesie rektyfikacji.
Wynikiem są zrektyfikowane obrazy, dopasowane do siebie wierszami.
107
3. Znalezienie tych samych cech w prawym i lewym obrazie, czyli korespondujących ze
sobą punktów. Po tym kroku otrzymujemy tzw. mapę rozbieżności między
korespondującymi punktami. Rozbieżności miedzy punktami to różnica
współrzędnych x tych punktów: xl - xr.
4. Znając geometryczne cechy kamer, możliwe jest przekształcenie mapy rozbieżności
na odległości miedzy punktami w rzeczywistym świecie. Ten krok nazywa się
reprojekcja. Dzięki niemu otrzymujemy mapę głębi.
Geometria epipolarna
Geometria epipolarna to geometria rzutowa pomiędzy dwoma widokami. Nie zależy
ona od filmowanej sceny, a jedynie od wewnętrznych parametrów kamer i ich położenia
względem siebie. Geometria epipolarna opiera się na przecięciach płaszczyzn obrazu.
Wszystkie płaszczyzny przecinają sie w jednej prostej, która łączy punkty główne kamer.
Załóżmy, ze obie kamery filmują jeden wspólny punkt X. Wtedy x jest obrazem punktu X w
widoku z pierwszej kamery, a punkt x’ jest jego obrazem z drugiej kamery. Wszystkie trzy
punkty leżą w jednej płaszczyźnie Π, są wiec współpłaszczyznowe.
Rysunek 44: Hartley Richard, Zisserman Andrew: Multiple view geometry in computer vision Cambridge
University Press 2003, (a) obserwowany punkt X, jego obraz na lewym obrazie x, jego obraz na prawym
obrazie x’ oraz punkty główne obu kamer C i C’ leżą na tej samej płaszczyźnie Π. (b) Znając położenie
punktu x oraz punkty główne kamer, można stwierdzić, ze obraz punktu X na prawym obrazie musi leżeć
na linii l’.
Załóżmy, ze znamy tylko położenie punktu x i chcemy znaleźć położenie punktu x’.
Płaszczyzna Π jest określona przez punkt x oraz podstawowe linie. Wiadomo, że punkt x’
musi leżeć na płaszczyźnie Π, a więc szukany punkt leży na linii l’ łączącej płaszczyznę Π z
płaszczyzną prawego obrazu.
Linia l’ jest linią epipolarną w odniesieniu do punktu x. W stereowizji nie trzeba zatem
przeszukiwać całej płaszczyzny prawego obrazu w celu znalezienia punktu x’ - obszar
poszukiwań można zagęścić do linii l’.
Geometryczne wielkości opisujące geometrie epipolarna widoczne są na rysunku 44b i
oznaczają:
Epipole (e lub e’) - punkty przecięcia linii podstawowej z płaszczyzną obrazu.
Płaszczyzna epipolarna - płaszczyzna zawierająca linię podstawową (np. płaszczyzna
na rysunku 44a).
108
Linia epipolarna – linia, w której przecina sie płaszczyzna epipolarna z płaszczyzną
obrazu (np. linia l’ na rysunku 44b).
Macierz zasadnicza i podstawowa
Macierz zasadnicza E zawiera informacje na temat rotacji i przesunięć, które łączą
widoki z obu kamer (Rysunek 46). Macierz podstawowa F obejmuje takie same dane,
wzbogacone o parametry wewnętrzne obu kamer.
Rysunek 45: Hartley Richard, Zisserman Andrew: Multiple view geometry in computer vision Cambridge
University Press 2003, przykład geometrii epipolarnej.
Rysunek 46: Bradski Gary, Kaebler: Adrian Learning OpenCV Computer Vision with the OpenCV Library
O'Leary 2008, macierz zasadnicza E zawierająca informacje na temat rotacji i przesunięć miedzy
kamerami w systemie stereowizyjnym
Macierz podstawowa przedstawia relacje punktów na płaszczyźnie obrazu jednej
kamery, we współrzędnych obrazu, do punktów na płaszczyźnie obrazu drugiej kamery,
również we współrzędnych obrazu. Macierz zasadnicza pokazuje wzajemną relację punktów
w przestrzeni fizycznej. Nie zawiera natomiast danych dotyczących wzajemnego położenia
punktów we współrzędnych obrazu.
109
Macierz zasadnicza
Jeśli przyjmiemy punkt widziany przez obie kamery jako P, macierz zasadnicza E
pokazuje relacje, we współrzędnych fizycznych, punktu P widzianego przez lewą kamerę
(punkt pl), do tego samego punktu widzianego przez prawą kamerę (punkt pr). Postępując
zgodnie z rozumowaniem przedstawionym w Bradski Gary, Kaebler: Adrian Learning OpenCV
Computer Vision with the OpenCV Library O'Leary 2008, można wykazać, że wzajemna relacja
miedzy punktami pl i pr jest określana przez macierz podstawową i wyraża się wzorem:
Macierz podstawowa
Z praktycznego punktu widzenia ciekawszym zagadnieniem jest wzajemna relacja
miedzy punktami na badanych obrazach, określana we współrzędnych obrazu. Aby znaleźć
relacje pomiędzy punktem na jednym obrazie i odpowiadającą mu linia epipolarną na drugim
obrazie, należy posłużyć sie parametrami wewnętrznymi obu kamer. Jeżeli za punkt ql
przyjmiemy obraz punktu P na lewym obrazie, we współrzędnych obrazu, a za punkt qr obraz
punktu P na prawym obrazie, w analogicznych współrzędnych, to postępując zgodnie ze
schematem przedstawionym w Bradski Gary, Kaebler: Adrian Learning OpenCV Computer Vision
with the OpenCV Library O'Leary 2008, okaże się, iż relacja między tymi punktami określana jest
przez macierz podstawową i opisywana jest wzorem:
Wzajemna relacja miedzy macierzą podstawową a macierzą zasadnicza opisana jest wzorem:
F =
Rektyfikując obrazy z lewej i z prawej kamery dochodzimy do sytuacji, w której
macierz podstawowa i macierz zasadnicza są takie same, E = F.
top related