Wyszukiwanie obrazów na podstawie zawartosci

Transkrypt

Wyszukiwanie obrazów na podstawie zawartosci
Politechnika Warszawska
Wydział Elektroniki i Technik Informacyjnych
Instytut Informatyki
Rok akademicki 2013/2014
Praca dyplomowa magisterska
Maciej Górnicki
Wyszukiwanie obrazów na podstawie
zawartości
Opiekun pracy:
prof. nzw. dr hab. inż. Przemysław Rokita
Ocena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.........................................
Podpis Przewodniczacego
˛
Komisji Egzaminu Dyplomowego
Specjalność:
Informatyka –
Inżynieria Systemów informatycznych
Data urodzenia:
19 kwietnia 1989 r.
Data rozpoczecia
˛
studiów:
20 lutego 2012 r.
Życiorys
Urodziłem sie˛ 19 kwietnia 1989 roku w Białymstoku. W roku 2002 skończyłem Szkole˛ Podstawowa˛ nr 10 im. dr. Henryka Jordana w Białymstoku. Wtedy
to rozpoczałem,
˛
w tym samym mieście, edukacje˛ w Publicznym Gimnazjum nr 3,
które wówczas nie miało jeszcze swojego patrona. W 2005 roku zostałem przyjety
˛
do I Liceum Ogólnokształcacego
˛
im. Adama Mickiewicza w Białymstoku do klasy
o profilu matematyczno-informatycznym. W roku 2008 ukończyłem nauke˛ w liceum, zdajac
˛ egzamin maturalny. W październiku tego samego roku rozpoczałem
˛
studia na kierunku Informatyka na Wydziale Elektroniki i Technik Informacyjnych.
Wybrałem specjalizacje˛ Inżynieria Systemów Informatycznych. W lutym 2012 roku
obroniłem tytuł inżyniera.
.....................................
podpis studenta
Egzamin dyplomowy
Złożył egzamin dyplomowy w dn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Z wynikiem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ogólny wynik studiów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dodatkowe wnioski i uwagi Komisji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
..........................................................................................
Streszczenie
Celem pracy była — z jednej strony — analiza i porównanie algorytmów umożliwiajacych
˛
wyszukiwanie obrazów na podstawie ich zawartości, po drugie — przeglad
˛ istniejacych
˛
systemów wykorzystujacych
˛
tego typu metody oraz, wreszcie,
stworzenie systemu implementujacego
˛
cze˛ ść opisanych technik. Szczególny nacisk
w badaniu algorytmów wyliczajacych
˛
deskryptory obrazów miał zostać położony na
czas oczekiwania użytkownika końcowego na ich wykonanie. W zamierzeniu aplikacja miała cechować sie˛ — w odróżnieniu od tych już istniejacych
˛
— funkcjonalnościa˛
wyszukiwania obrazów nie tylko na podstawie całego obrazu, lecz także regionu lub
konturu, zaznaczanego na obrazie wzorcowym recznie
˛
przez użytkownika, a także
możliwościa˛ wybrania przez niego kilku pożadanych
˛
algorytmów wyszukiwania,
których efekty zostałyby scalone w jeden skumulowany wynik.
Słowa kluczowe: wyszukiwanie obrazów na podstawie zawartości, obrazowa baza
danych, system CBIR, obraz, region, kontur, cecha obrazu, deskryptor obrazu, wektor cech obrazu, przepaść semantyczna, efektywność wyszukiwania, sprze˛ żenie
zwrotne istotności, OpenCV
Abstract
Title: Content-based image retrieval
The aim of the thesis was — on the one hand — the analysis and comparison of
algorithms enabling to retrieve images based on their content, secondly — the review
of existing systems using such methods and, eventually, the creation of system
implementing a part of described techniques. A particular emphasis in investigating
algorithms calculating image descriptors was to be put on the end user’s waiting time
for their execution. The application was to characterize — in contradistinction to the
already existing ones — a functionality of retrieving images based not only on a full
image, but also on a region or contour, marked on a pattern image manually by user,
and also a possibility of choosing by him several desired retrieval algorithms, whose
effects were to be brought together in a one cumulative result.
Key words: content-based image retrieval, image database, CBIR system, image,
region, contour, image feature, image descriptor, image feature vector, semantic gap,
retrieval effectiveness, relevance feedback, OpenCV
Spis treści
1. Wstep,
˛ idea, układ pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Podstawowe wiadomości . . .
2.1. Definicja obrazu cyfrowego
2.2. Przestrzeń barw . . . . . .
2.3. Filtr obrazu . . . . . . . . .
2.4. Segmentacja . . . . . . . .
2.5. Transformacja . . . . . . .
2.6. Metryka odległości . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
6
6
18
23
25
28
3. Deskryptor obrazu . . . . . . . . . .
3.1. Deskryptor całego obrazu . . .
3.2. Deskryptor regionu na obrazie
3.3. Deskryptor konturu na obrazie
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
32
42
52
4. Syntetyczne spojrzenie na systemy CBIR . . . . .
4.1. Sprze˛ żenie zwrotne istotności . . . . . . . . . .
4.2. Przepaść postrzegania i przepaść semantyczna
4.3. Efektywność wyszukiwania . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
58
58
62
63
5. Praktyczne wykorzystanie systemów CBIR . . . . . . . . . . . . . . . . . . . . . .
5.1. Zastosowanie systemów CBIR . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2. Przykłady systemów CBIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
66
67
6. Implementacja systemu CBIR . . . . . . . . . . . . . . . . . .
6.1. Zastosowane technologie . . . . . . . . . . . . . . . . . . .
6.2. Zrzuty ekranu aplikacji . . . . . . . . . . . . . . . . . . . .
6.3. Persystencja informacji o obrazach . . . . . . . . . . . . .
6.4. Monitorowanie i profilowanie aplikacji . . . . . . . . . . .
6.5. Internacjonalizacja . . . . . . . . . . . . . . . . . . . . . .
6.6. Biblioteka OpenCV . . . . . . . . . . . . . . . . . . . . . .
6.7. Komunikacja pomiedzy
˛
aplikacja˛ mobilna˛ i internetowa˛ .
6.8. Segmentacja nienadzorowana . . . . . . . . . . . . . . . .
6.9. Łaczenie
˛
wyników algorytmów . . . . . . . . . . . . . . . .
6.10.Testy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.11.Propozycja systemu rozproszonego . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
90
90
92
101
113
114
116
117
118
138
141
144
7. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Dodatek A. Spis zawartości dołaczonego
˛
nośnika danych . . . . . . . . . . . . . . . 156
1. Wstep,
˛ idea, układ pracy
„Użyj obrazu. Jest on wart tysiaca
˛ słów."
– Arthur Brisbane, 1864-1936, amerykański redaktor
1 najważWzrok to — obok słuchu, smaku, wechu
˛
i dotyku — jeden z pieciu
˛
niejszych zmysłów człowieka. U zdecydowanej wiekszości
˛
ludzi tym dominujacym
˛
jest właśnie on. Tego typu osoby określa sie˛ mianem wzrokowców, dla których
— w przeciwieństwie do słuchowców czy kinestetyków — informacja wizualna gra
o wiele wie˛ ksza˛ role˛ niż informacja dźwiekowa,
˛
czuciowa czy również tekstowa.
Szacuje sie˛ , że ok. 90% informacji o otoczeniu człowieka pobieranych jest przy
użyciu zmysłu wzroku, co koreluje z najwieksz
˛
a˛ ilościa˛ receptorów tego zmysłu —
wynoszac
˛ a˛ ok. 250 milionów — w porównaniu z ilościa˛ receptorów pozostałych
zmysłów (40 milionów dla we˛ chu, 2,5 miliona dla dotyku, 1 milion dla smaku oraz
25 tysie˛ cy dla słuchu) [51, rozd. 1.1].
Istnieje kilka rodzajów informacji wizualnej, rozpatrywanej z punktu widzenia
sygnału cyfrowego. Wyróżnić można:
— obraz cyfrowy dwuwymiarowy (grafika, zdjecie),
˛
— sekwencje˛ obrazów cyfrowych dwuwymiarowych (film, animacja),
— obraz cyfrowy trójwymiarowy,
— sekwencje˛ obrazów cyfrowych trójwymiarowych.
Najprostszym przypadkiem w reprezentacji i — co za tym idzie — przetwarzaniu jest
obraz2 cyfrowy dwuwymiarowy. W dobie ery cyfrowej, w której miliony tego typu
obrazów przechowywane sa˛ w sieci WWW, pojawiła sie˛ potrzeba przeszukiwania
tych wielkich zbiorów danych i odnajdowania pojedynczych obrazów, spełniajacych
˛
określone kryteria.
Każdemu obrazowi cyfrowemu można przypisać pewne jego cechy. Można rozróżnić co najmniej trzy rodzaje cech [60, s. 13–14]:
— cechy zwiazane
˛
z opisem tekstowym obrazu,
— cechy zwiazane
˛
z metadanymi obrazu,
— cechy zwiazane
˛
z rastrem obrazu (jego pikselami).
Wyszukiwanie obrazów na podstawie pierwszego rodzaju cech, czyli różnego rodzaju etykiet, adnotacji czy zbioru słów kluczowych, jest najcześciej
˛
nieefektywne,
ponieważ tekstowe opisy obrazów nie sa˛ w stanie wystarczajaco
˛ oddać treści obrazu. Poza tym przygotowanie opisu obrazu jest czasochłonne i wymaga ingerencji
człowieka, przez co procesu tworzenia bazy danych obrazów, a także procesu ich
1
Wyróżnia si˛e również cztery dodatkowe zmysły: zmysł bólu (nocycepcja), zmysł temperatury,
zmysł równowagi oraz zmysł świadomości ciała (propriocepcja).
2
W niniejszej pracy nast˛epujace
˛ poj˛ecia moga˛ być nierozróżniane: image (pol. obraz), picture
(pol. obraz), photo (pol. zdj˛ecie), photograph (pol. fotografia), photography (pol. fotografia), snap (pol.
fotka), shot (pol. zdj˛ecie), figure (pol. rycina), depiction (pol. przedstawienie), painting (pol. malunek,
malowidło), view (pol. widok), scene (pol. scena), illustration (pol. ilustracja), drawing (pol. rysunek),
portrait (pol. portret). Najcz˛eściej b˛eda˛ one jednak zast˛epowane słowem obraz.
1. Wstep,
˛ idea, układ pracy
2
wyszukiwania, nie da sie˛ w pełni zautomatyzować. Co wiecej,
˛
wyszukiwanie obrazów na podstawie opisów tekstowych uzależnia ten proces od słownictwa konkretnego je˛ zyka.
Drugi rodzaj cech opiera sie˛ na właściwościach obrazu takich jak format, rozmiar, czas utworzenia, algorytm kompresji czy rozdzielczość, choć nie tylko. Istnieje
norma Exif [9] (Exchangeable image file format), utrzymywana obecnie przez JEITA
(Japan Electronics and Information Technology Industries Association) oraz CIPA
(Camera & Imaging Products Association), która jest standardem zapisu metadanych w plikach be˛ dacych
˛
m.in. obrazami. W przypadku obrazów wspierane sa˛
pliki o rozszerzeniach .JPG oraz .TIF. Do metaznaczników obsługiwanych przez ten
standard należa:
˛
— data sporzadzenia
˛
obrazu,
— marka i model kamery,
— orientacja kamery,
— przesłona kamery,
— czas naświetlania,
— ogniskowa,
— tryb pomiaru światła,
— pre˛ dkość ISO,
— miniaturka,
— współrze˛ dne geograficzne,
— kompresja,
— rozdzielczość,
— lampa błyskowa,
— przestrzeń kolorów,
— prawa autorskie.
Z punktu widzenia wyszukiwania obrazów ten rodzaj cech jest jeszcze gorszy od
pierwszego, zwiazanego
˛
z opisem tekstowym. Można sobie przecież wyobrazić dwa
zupełnie różne obrazy, które posiadaja˛ taki sam format, rozmiar, czas utworzenia,
rozdzielczość czy czas naświetlania. Cechy te nie sa˛ w stanie efektywnie rozróżniać
obrazów.
Cała idea wyszukiwania obrazów na podstawie zawartości (ang. Content-Based
Image Retrieval, CBIR) — zwiazana
˛
z trzecim rodzajem cech — sprowadza sie˛ do
znalezienia efektywnego sposobu na porównywanie obrazów miedzy
˛
soba˛ bezpośrednio, czyli pod wzgle˛ dem ich zawartości, która˛ tworza˛ piksele, a nie poprzez
pośredników, takich jak metadane czy opisy tekstowe. Oprócz skrótu CBIR stosuje
si˛e również inne równoważne, takie jak QBIC3 (Query By Image Content) czy CBVIR
(Content-Based Visual Information Retrieval). Jak pokazuje rysunek 1.1, dziedzine˛
wyszukiwania obrazów na podstawie zawartości można traktować jako połaczenie
˛
(cz˛eść wspólna,
˛ kombinacje˛ ) kilku innych dziedzin, takich jak:
— cyfrowe przetwarzanie obrazów,
— widzenie komputerowe,
— wydobywanie informacji,
— wiedza domenowa,
— bazy danych.
3
Należy pami˛etać, że skrót QBIC to również nazwa jednego z systemów CBIR, omówionego w
5.2.6.
3
1. Wstep,
˛ idea, układ pracy
cyfrowe przetwarzanie obrazów
(ang. digital image processing)
widzenie komputerowe
(and. computer vision)
wydobywanie informacji
(ang. information retrieval)
wyszukiwanie obrazów
na podstawie zawartości
(ang. content-based image retrieval)
wiedza domenowa
(ang. domain knowledge)
bazy danych
(ang. databases)
Rysunek 1.1. Dziedzina wyszukiwania obrazów na podstawie zawartości jako połaczenie
˛
innych dziedzin.
Kluczowa˛ czynnościa˛ w dziedzinie CBIR jest wyekstrahowanie z każdego obrazu
pewnej ilości jego cech. Cecha obrazu to pewna jego właściwość, dajaca
˛ scharakteryzować sie˛ za pomoca˛ wartości numerycznej. Dana sekwencja cech tworzy wektor cech dystynktywnych, który staje sie˛ deskryptorem obrazu4 . Nastepnie
˛
można
skonfrontować obrazy pomie˛ dzy soba˛ poprzez porównanie ich wektorów cech, czyli
policzenie odległości mie˛ dzy nimi zgodnie z ustalona˛ metryka˛ — funkcja˛ podobieństwa lub odległości. Jeśli odpowiednie wartości cech sa˛ — z pewna˛ dokładnościa˛ —
liczbowo podobne do siebie, czyli jeśli wektory cech obrazów sa˛ położone relatywnie
blisko siebie, można wyciagn
˛ ać
˛ wniosek, że porównywane obrazy sa˛ — pod wzgle˛
dem zawartości — wzgle˛ dem siebie pokrewne. Rysunek 1.2 przedstawia ogólna,
˛
najbardziej popularna˛ architekture˛ systemu CBIR [28, s. 2] [4] [60, s. 13–14]
w wersji QBE (Query By Example, zapytanie przez przykład). W bazie danych
znajduje sie˛ zbiór obrazów. Dodatkowo, dla każdego obrazu przechowywany jest
jego wektor cech. W ramach zapytania użytkownik wskazuje obraz wejściowy jako
wzorzec (ang. query image), dla którego system oblicza — w czasie rzeczywistym —
wektor cech. Naste˛ pnie system porównuje wektor cech obrazu wejściowego z wektorami cech obrazów znajdujacych
˛
sie˛ w bazie danych (ang. similarity matching),
co wykonywane jest na podstawie zdefiniowanej miary podobieństwa (ang. similarity measure). Odpowiedź na zapytanie stanowia˛ te obrazy z bazy danych, które
wykazuja˛ wystarczajace
˛ podobieństwo wobec obrazu wejściowego.
4
Poj˛ecia wektor cech obrazu oraz deskryptor obrazu można stosować zamiennie.
4
1. Wstep,
˛ idea, układ pracy
Obraz
(zapytanie)
Kolekcja
obrazów
Ekstrakcja cech
Ekstrakcja cech
Wektor cech
obrazu
Baza danych
(obrazy z
wektorami cech)
Porównanie
podobieństwa
Proces "offline"
Proces "online"
Obrazy
wydobyte z bazy
danych
Rysunek 1.2. Ogólna architektura systemu CBIR.
Warto dodać, że wskazywanie całego obrazu na wejściu nie jest jedynym sposobem na inicjowanie zapytania. Użytkownik może również — zamiast kompletnego
obrazu — podawać [60, s. 13]:
— pożadany
˛
kolor (np. rozkład kolorów),
— pożadany
˛
obiekt — w postaci regionu (obiektu wraz z wnetrzem
˛
i obwiednia,
˛ np.
koło) lub konturu (obiektu stworzonego jedynie z obwiedni, czyli bez wnetrza,
˛
np. okrag),
˛
— pożadan
˛
a˛ teksture˛ (np. plik z wzorem tekstury),
— pożadan
˛
a˛ lokalizacje˛ obiektu lub koloru (np. położenie w prawym górnym rogu
obrazu obiektu o konkretnym kształcie i określonym kolorze),
— pożadan
˛
a˛ własność statystyczna˛ w postaci liczbowej (np. entropia).
Istnieje kilka sposobów tworzenia zapytań do obrazowej5 bazy danych:
— zapytanie przez słowa kluczowe (ang. Query By Keywords) — poprzez napisanie
jednego lub kilku słów określajacych
˛
obraz (stosowane tylko wtedy, jeśli obrazy
w obrazowej bazie danych posiadaja˛ swoje opisy w postaci tekstowej),
— zapytanie przez przykład (ang. Query By Example, QBE, lub Query By Image
Content, QBIC) — głównie poprzez podanie ścieżki dostepu
˛
do pliku z obrazem
czy fragmentem obrazu znajdujacego
˛
sie˛ na lokalnym dysku twardym lub podanie adresu URL pliku dostepnego
˛
w sieci internetowej,
— zapytanie przez grupe˛ przykładów (ang. Query By Group Example, QBGE) —
poprzez podanie listy obrazów, dla których system obliczy najlepsza˛ z możliwych
wspólnych charakterystyk, a nastepnie
˛
odnajdzie obrazy podobne do wspólnej
charakterystyki,
5
Poj˛ecie obrazowej bazy danych oznacza tu po prostu standardowa˛ baz˛e danych przechowujac
˛ a˛
obrazy i ich wektory cech. Nie oznacza ono — w tym kontekście — zaawansowanej multimedialnej
bazy danych wspierajacej
˛
wyszukiwanie obrazów ze wzgl˛edu na zawartość, takiej jak np. system
Oracle 9i.
1. Wstep,
˛ idea, układ pracy
5
— zapytanie przez szkic (ang. Query By Sketch, QBS, lub Query By Canvas, QBC)
— poprzez re˛ czne narysowanie, raczej uproszczonego, szkicu dzieki
˛ narz˛edziu
do rysowania, dostarczanemu najcześciej
˛
razem z systemem CBIR.
Zapytania takie jak przez przykład (QBE, QBIC) czy szkic (QBS, QBC) określane sa˛
również mianem Reverse Image Search.
Uogólnieniem systemu wyszukiwania obrazów na podstawie zawartości może
być system wyszukiwania mediów na podstawie zawartości, tj.:
— dźwie˛ ków audio (w tym poszczególnych kanałów),
— filmów wideo (w tym poszczególnych klatek oraz dźwieków
˛
audio),
— obrazów.
Powyższe uogólnienie można generalizować jeszcze bardziej — np. do wyszukiwania
nośników informacji na podstawie zawartości (w tym dokumentów itp.), lecz zakres
niniejszej pracy jest ściśle ograniczony do obrazów i na nich zostanie skupiona cała
uwaga.
Niniejszy rozdział 1 stanowi pewne wprowadzenie do tematyki wyszukiwania obrazów, służace
˛ ukazaniu potrzeby istnienia tej dziedziny i umiejscowieniu jej wzgle˛
dem innych dziedzin informatyki. Rozdział 2 prezentuje zbiór fundamentalnych
wiadomości z dziedziny przetwarzania obrazów — i nie tylko — które niezbedne
˛
sa˛
w zrozumieniu — de facto najważniejszego — rozdziału 3, przedstawiajacego
˛
algorytmy wyszukiwania obrazów na podstawie całego obrazu, regionu na obrazie oraz
konturu. Rozdział 4 odpowiada na pytania — zarówno filozoficzne jak i praktyczne
— które pojawiaja˛ sie˛ podczas spogladania
˛
na system CBIR syntetycznie, czyli jako
na czarna˛ skrzynke˛ . Rozdział 5 analizuje przypadki użycia metod wyszukiwania
obrazów w życiu codziennym oraz omawia od strony użytkowej niektóre implementacje systemów CBIR doste˛ pnych na rynku lub już z niego wycofanych. Rozdział 6
tłumaczy zawiłości implementacyjne systemu CBIR stworzonego na potrzeby niniejszej pracy. Rozdział ostatni 7 jest podsumowaniem pracy magisterskiej — zarówno
jej cze˛ ści analitycznej jak i implementacyjnej. Na końcu znajduje sie˛ bibliografia
— b˛edaca
˛ spisem ksia˛żek, artykułów i technologii programistycznych, na których
bazuje niniejsza praca — oraz dodatek A prezentujacy
˛ zawartość nośnika danych
dołaczonego
˛
do opracowania w wersji papierowej.
2. Podstawowe wiadomości
Niniejszy rozdział prezentuje podstawowe informacje z dziedziny obrazów cyfrowych, które sa˛ badź
˛ to niezbedne
˛
w rozdziałach kolejnych, badź
˛ użyte w ramach
implementacji systemu wyszukiwania obrazów na podstawie zawartości.
2.1. Definicja obrazu cyfrowego
Obraz jest szczególnym przypadkiem sygnału cyfrowego. Z formalnego punktu
widzenia [60, s. 1] obraz to funkcja I odwzorowujaca
˛ piksel p z przestrzeni pikseli
P (p ∈ P ) w kolor c z przestrzeni kolorów C (c ∈ C). Odwzorowanie to można zapisać
jako:
I:P →C
(2.1)
natomiast użycie powyższego odwzorowania nastepuj
˛
aco:
˛
I(p) = c
(2.2)
Przestrzeń P posiada skończona˛ ilość M · N pikseli p. Po ustawieniu ich w M rze˛
dach, gdzie każdy rzad
˛ ma identyczna˛ ilość N kolumn, otrzymuje sie˛ macierz pikseli
o wymiarach M × N . Wówczas odwzorowanie 2.1 można zapisać jako:
f :M ×N →C
(2.3)
f (i, j) = c
(2.4)
a użycie powyższego:
gdzie i = 0, 1, ..., M − 1 oraz j = 0, 1, ..., N − 1. Taki obraz określa sie˛ mianem
rastra, a funkcje˛ f funkcja˛ jasności. Raster można zwizualizować jako nastepuj
˛
ac
˛ a˛
macierz:


f (0, 0)
f (0, 1)
···
f (0, N − 2)
f (0, N − 1)
 f (1, 0)
···
···
···
f (1, N − 1) 




..
..
.
..
..
..
(2.5)


.
.
.
.


f (M − 2, 0)

···
···
···
f (M − 2, N − 1)
f (M − 1, 0) f (M − 1, 1) · · · f (M − 1, N − 2) f (M − 1, N − 1)
2.2. Przestrzeń barw
Przeciwdziedzina C funkcji jasności f nazywana jest przestrzenia˛ barw1 (ang.
color space). Zbiór C może zawierać elementy różnego typu. Najcześciej
˛
sa˛ to
wartości skalarne lub — w ogólności — wektory liczb skalarnych (tzw. wektory
1
Poj˛ecia barwa oraz kolor sa˛ w j˛ezyku polskim równoważne.
7
2.2. Przestrzeń barw
kanałów). Nie istnieje uniwersalna przestrzeń, która byłaby najskuteczniejsza
i najwygodniejsza w każdym przypadku użycia.
Element c ∈ C przestrzeni barw C, czyli po prostu barwa, może przechowywać
w sobie informacje o chrominancji i luminancji. Chrominancja odpowiada za odcień barwy i stopień jej saturacji (nasycenia, intensywności, żywości). Luminancja
z kolei odpowiada za stopień jej jasności, czyli nate˛ żenia oświetlenia. W układzie SI
jednostka˛ luminancji jest kandela na metr kwadratowy (cd/m2 ).
2.2.1. Przestrzeń binarna
Przestrzeń binarna [80] zawiera dwa kolory, interpretowane jako czarny i biały.
Przeciwdziedzina C funkcji jasności f jest w tym przypadku zbiorem dwuelementowym: C = {0, 1}. Przykładowy raster w przestrzeni binarnej — o wymiarach 4 × 5 —
może wygladać
˛
naste˛ pujaco:
˛


1 0 0 0 0
1 0 0 1 0


(2.6)
0 1 1 0 0
1 1 0 1 0
2.2.2. Przestrzeń w odcieniach szarości
Przestrzeń w odcieniach szarości [81] zawiera kolor czarny, biały i kolory pośrednie, rozumiane jako odcienie szarości. Przeciwdziedzina C funkcji jasności f
jest w tym przypadku zbiorem kolejnych liczb skalarnych. Najbardziej popularna˛
taka˛ przestrzenia˛ jest 256-elementowy zbiór kolorów C = {0, 1, 2, ..., 255}. Wówczas
wszystkie możliwe kolory c ∈ C da sie˛ zapisać na 8 bitach, a przykładowy raster
o wymiarach 4 × 5 może wygladać
˛
nastepuj
˛
aco:
˛


45 123 0 2 255
 65
0 0 255 12 


(2.7)
 0
12 1 243 255
255 255 0 11 345
Konwersja z przestrzeni RGB na przestrzeń w odcieniach szarości
Istnieje wiele sposobów na konwersje˛ obrazu zapisanego w przestrzeni RGB na
obraz w przestrzeni w odcieniach szarości. Nie istnieje jednoznaczne, najlepsze czy
najbardziej intuicyjne przekształcenie — tym bardziej, że jest to przekształcenie
stratne i można dobierać różne sposoby tracenia informacji o pełnym, trójwymiarowym kolorze. Trzy — w miare˛ powszechne, bo używane w programie do obróbki
grafiki rastrowej GIMP — metody to [46]:
— metoda oparta na jasności (ang. lightness),
— metoda oparta na średniej (ang. average),
— metoda oparta na jaskrawości (ang. luminosity).
Metoda oparta na jasności polega na policzeniu średniej arytmetycznej z najbardziej i najmniej wiodacej
˛
składowej koloru pierwotnego:
c=
max(R, G, B) + min(R, G, B)
2
(2.8)
8
2.2. Przestrzeń barw
Metoda oparta na średniej to nic innego jak wyliczenie średniej arytmetycznej
wszystkich trzech składowych koloru pierwotnego:
c=
R+G+B
3
(2.9)
Ostatnia z pokazywanych metod, oparta na jaskrawości, bazuje na obliczeniu
średniej ważonej wszystkich trzech składowych koloru pierwotnego, gdzie wieksze
˛
wagi przyznawane sa˛ tym składowym, na które ludzki wzrok jest bardziej wrażliwy.
Jako że narzad
˛ wzroku człowieka najlepiej dostrzega zmiany składowej zielonej,
wzór może przyjać
˛ naste˛ pujac
˛ a˛ postać:
c = 0, 21R + 0, 72G + 0, 07B
(2.10)
W użyciu istnieja˛ inne kombinacje wag poszczególnych składowych. Biblioteka
JScience proponuje naste˛ pujace
˛ warianty [41, r. GreyscaleFilter]:
c = 0, 2125R + 0, 7154G + 0, 0721B
(2.11)
c = 0, 5R + 0, 419G + 0, 081B
(2.12)
c = 0, 299R + 0, 587G + 0, 114B
(2.13)
Rysunek 2.1 prezentuje porównanie opisanych trzech metod na podstawie przykładowego obrazu. Jak widać, nie ma jednoznacznej odpowiedzi na pytanie, która
metoda jest najlepsza. Na przykładzie trzeciej od prawej kamienicy (żółtej na obrazie oryginalnym) widać, że w kolejnych obrazach w skali szarości kamienica jest co
raz jaśniejsza. Analogicznie jest z kamienica˛ druga˛ od prawej (zielona˛ na obrazie
oryginalnym), choć różnice jasności sa˛ tu mniejsze.
2.2. Przestrzeń barw
9
Rysunek 2.1. Od góry: obraz oryginalny w przestrzeni RGB oraz obrazy w skali
szarości po konwersji metoda˛ oparta˛ na — kolejno — jasności, średniej i jaskrawości.
2.2.3. Przestrzeń RGB
Przestrzeń RGB [73] (Red Green Blue) to addytywny model kolorów, w którym
kolor wyjściowy jest efektem połaczenia
˛
z soba˛ — w różnych proporcjach — trzech
kolorów głównych: czerwonego, zielonego, niebieskiego. Cecha addytywności oznacza, że dysponujac
˛ pewna˛ ilościa˛ kolorów można dodać je do siebie, otrzymujac
˛
kolor wynikowy.
10
2.2. Przestrzeń barw
W tym przypadku przeciwdziedzina C funkcji jasności f jest zbiorem trójwymiarowych wektorów cRGB ∈ C:
 
cR
(2.14)
cRGB = cG 
cB
gdzie cR , cG , cB należa˛ do zbiorów kolejnych liczb skalarnych. Najbardziej popularna˛
przestrzenia˛ RGB jest taka, w której każdy jej element jest wektorem trójwymiarowym, w którym wartość każdej składowej należy do zbioru {0, 1, 2, ..., 255}, tzn.
cR , cG , cB ∈ {0, 1, 2, ..., 255}. Przykładowy raster o wymiarach 3 × 5 może wówczas
wygladać
˛
naste˛ pujaco:
˛
    
    
255
0
122
19
234
 44  54  43   0   0 


 23

   0  207 33  0  
 99
4
21
17
34 


 2  254 23  0   0  
(2.15)


 255

  250  1   99   99 
 255
5
3
201
1 


 0  123 32  0  255
0
0
0
78
0
W tym przypadku raster o pikselach trójwymiarowych (z przestrzeni RGB) można
zapisać jako trzy oddzielne rastry o pikselach jednowymiarowych (z przestrzeni
skali szarości), przy czym każdy raster odpowiada za konkretny wymiar (składowa)
˛
koloru — kolejno, R, G i B:


255 0 122 19 234
 99 4 21 17 34 
(2.16)
255 5 3 201 1

44 54 43
 2 254 23
0 123 32

23
0 207
255 250 1
0
0
0

0 0
0 0 
0 255

33 0
99 99
78 0
(2.17)
(2.18)
Wada˛ przestrzeni RGB jest to, że nie odpowiada on zbyt dobrze ludzkiej percepcji
koloru. Mianowicie odległość Euklidesa pomiedzy
˛
dwoma kolorami z tej przestrzeni
słabo odzwierciedla odległość miedzy
˛
nimi postrzegana˛ przez człowieka.
2.2.4. Przestrzeń HSV (HSB)
Kolor przestrzeni HSV [16] (inaczej: HSB) jest określony przez trzy składowe:
— barwa (ang. hue, H), oznaczajaca
˛ czestotliwość
˛
fali światła i wyrażona liczba˛
z przedziału [0◦ , 359◦ ], gdzie barwie czerwonej odpowiada 0◦ lub 360◦ , barwie
zielonej 120◦ , a barwie niebieskiej 240◦ ,
— nasycenie (ang. saturation, S), wyrażone liczba˛ z przedziału (0, 1],
— wartość (ang. value, V lub brightness, B), oznaczajaca
˛ moc światła białego, czyli
jasność i wyrażona liczba˛ z przedziału (0, 1).
2.2. Przestrzeń barw
11
Model ten przedstawia sie˛ graficznie jako stożek o podstawie koła bed
˛ acego
˛
paleta˛ barw.
Aby obliczyć odległość mie˛ dzy dwoma kolorami z tej przestrzeni, można skorzystać z ważonej metryki Euklidesa. Jako że najważniejsza dla ludzkiego oka jest
składowa z barwa,
˛ można ustalić — dla przykładu — wagi:
— barwa: 80%,
— nasycenie: 10%,
— wartość: 10%.
Konwersja z przestrzeni RGB do przestrzeni HSV (HSB)
Pseudokod 1 przedstawia algorytm konwersji koloru z przestrzeni RGB do przestrzeni HSV (HSB), przy założeniu, że składowe koloru w przestrzeni RGB zostana˛
znormalizowane tak, aby R, G, B ∈ [0, 1] [11, Wykład 1, s. 16].
Algorytm 1 Algorytm konwersji z przestrzeni RGB do przestrzeni HSV (HSB).
procedure CONVER T F ROM RGBT O HSV(R, G, B)
Require: R, G, B ∈ [0, 1]
2:
max ← max(R, G, B)
3:
min ← min(R, G, B)
1:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
if max = min then
H ← niezdef iniowany
else if max = R ∧ G ≥ B then
G−B
H ← 60◦ max−min
+ 0◦
else if max = R ∧ G ≤ B then
G−B
H ← 60◦ max−min
+ 360◦
else if max = G then
B−R
H ← 60◦ max−min
+ 120◦
else if max = B then
R−G
+ 240◦
H ← 60◦ max−min
end if
19:
if max = 0 then
S←0
else
S ← max−min
max
end if
20:
V ← max
15:
16:
17:
18:
return H, S, V
22: end procedure
21:
2.2.5. Przestrzeń HSL (HLS, HSI)
Model HSL [13] jest bardzo interaktywny dla użytkownika, dzieki
˛ czemu jest
on w stanie bardzo łatwo — w przeciwieństwie do np. modelu RGB — wybrać
2.2. Przestrzeń barw
12
konkretna˛ barwe˛ . Kolor przestrzeni HSL (inaczej: HLS) jest określony przez trzy
składowe:
— barwa (ang. hue, H), oznaczajaca
˛ czestotliwość
˛
fali światła i wyrażona liczba˛
z przedziału [0◦ , 359◦ ], gdzie barwie czerwonej odpowiada 0◦ lub 360◦ , barwie
zielonej 120◦ , a barwie niebieskiej 240◦ ,
— nasycenie (ang. saturation, S), zdefiniowane inaczej niż nasycenie w modelu
HSV (HSB) i wyrażone liczba˛ z przedziału (0, 1],
— jasność (ang. lightness, L), oznaczajaca
˛ ilość średniego światła białego (ilość
bieli), zdefiniowana inaczej niż wartość w modelu HSV (HSB) i wyrażona liczba˛
z przedziału (0, 1).
Model ten przedstawia sie˛ graficznie jako dwa stożki złaczone
˛
podstawami (obustronny stożek). Definicja wartości składowej barwowej (H) jest identyczna jak
w modelu HSV (HSB).
Konwersja z przestrzeni RGB do przestrzeni HSL (HLS)
Pseudokod 2 przedstawia algorytm konwersji koloru z przestrzeni RGB do przestrzeni HSL (HLS), przy założeniu, że składowe koloru w przestrzeni RGB zostana˛
znormalizowane tak, aby R, G, B ∈ [0, 1] [11, Wykład 1, s. 17].
2.2. Przestrzeń barw
Algorytm 2 Algorytm konwersji z przestrzeni RGB do przestrzeni HSL (HLS).
1: procedure CONVER T F ROM RGBT O HSL(R, G, B)
Require: R, G, B ∈ [0, 1]
2:
max ← max(R, G, B)
3:
min ← min(R, G, B)
14:
if max = min then
H ← niezdef iniowany
else if max = R ∧ G ≥ B then
G−B
H ← 60◦ max−min
+ 0◦
else if max = R ∧ G ≤ B then
G−B
H ← 60◦ max−min
+ 360◦
else if max = G then
B−R
H ← 60◦ max−min
+ 120◦
else if max = B then
R−G
H ← 60◦ max−min
+ 240◦
end if
15:
L←
16:
if L = 0 ∨ max = min then
S←0
else if 0 < L ≤ 12 then
S ← max−min
2L
else if L > 21 then
S ← max−min
2−2L
end if
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
17:
18:
19:
20:
21:
22:
max+min
2
return H, S, L
24: end procedure
23:
13
14
2.2. Przestrzeń barw
2.2.6. Przestrzeń CIE XYZ
Przestrzeń CIE XYZ [39] została stworzona przez Miedzynarodow
˛
a˛ Komisje˛
Oświetleniowa˛ (Commission Internationale de I’Éclairage, CIE). Bazuje ona na ludzkiej percepcji kolorów. Kolor przestrzeni CIE XYZ jest określony przez trzy składowe:
— X (jedna z dwóch chrominancji, tworzaca
˛ barwe),
˛
— Y (jedna z dwóch chrominancji, tworzaca
˛ barwe),
˛
— Z (jasność).
Konwersja z przestrzeni RGB do przestrzeni CIE XYZ
Pseudokod 3 przedstawia algorytm konwersji koloru z przestrzeni RGB do przestrzeni CIE XYZ, przy założeniu, że składowe koloru w przestrzeni RGB zostana˛
znormalizowane tak, aby R, G, B ∈ [0, 1] [54, cz. 2].
Algorytm 3 Algorytm konwersji z przestrzeni RGB do przestrzeni CIE XYZ.
1: procedure CONVER T F ROM RGBT O CIEXYZ(R, G, B)
Require: R, G, B ∈ [0, 1]
2:
R ← SUB A LGORITHM(R)
3:
G ← SUB A LGORITHM(G)
4:
B ← SUB A LGORITHM(B)
5:
6:
7:
R ← R ∗ 100
G ← G ∗ 100
B ← B ∗ 100
. Observer. = 2◦ , Illuminant = D65
8:
9:
10:
X ← R ∗ 0.4124 + G ∗ 0.3576 + B ∗ 0.1805
Y ← R ∗ 0.2126 + G ∗ 0.7152 + B ∗ 0.0722
Z ← R ∗ 0.0193 + G ∗ 0.1192 + B ∗ 0.9505
return X, Y, Z
12: end procedure
11:
13:
14:
15:
16:
17:
18:
19:
procedure SUB A LGORITHM(N )
if N > 0.04045 then
+0.055 2.4
return ( N 1.055
)
else
N
return 12.92
end if
end procedure
Konwersja z przestrzeni CIE XYZ do przestrzeni RGB
Pseudokod 4 przedstawia algorytm konwersji koloru z przestrzeni CIE XYZ do
przestrzeni RGB [54, cz. 1].
2.2. Przestrzeń barw
15
Algorytm 4 Algorytm konwersji z przestrzeni CIE XYZ do przestrzeni RGB.
procedure CONVER T F ROM CIEXYZT O RGB(X, Y, Z) . Observer. = 2◦ , Illuminant
= D65
Require: X ∈ [0, 95.047]
Require: Y ∈ [0, 100.000]
Require: Z ∈ [0, 108.883]
X
2:
X ← 100
Y
3:
Y ← 100
Z
4:
Z ← 100
1:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
R ← X ∗ 3.2406 + Y ∗ −1.5372 + Z ∗ −0.4986
G ← X ∗ −0.9689 + Y ∗ 1.8758 + Z ∗ 0.0415
B ← X ∗ 0.0557 + Y ∗ −0.2040 + Z ∗ 1.0570
R ← SUB A LGORITHM(R)
G ← SUB A LGORITHM(G)
B ← SUB A LGORITHM(B)
R ← R ∗ 255
G ← G ∗ 255
B ← B ∗ 255
return R, G, B
end procedure
procedure SUB A LGORITHM(N )
if N > 0.0031308 then
1
return 1.055 ∗ (N 2.4 ) − 0.055
else
return 12.92 ∗ N
end if
end procedure
2.2. Przestrzeń barw
16
2.2.7. Przestrzeń CIE Lab
Przestrzeń CIE LAB [38] (inaczej: CIE La*b*), która powstała w roku 1976 wewnatrz
˛
komisji CIE, jest efektem pewnej transformacji przestrzeni CIE XYZ. Postać
tej transformacji jest wynikiem analizy ludzkiego narzadu
˛
wzroku pod katem
˛
różnicowania kolorów, przez co przestrzeń te˛ nazywa sie˛ przestrzenia˛ równomierna.
˛
Równomierność polega na tym, że odległość Euklidesa pomiedzy
˛
dwoma kolorami
w tej przestrzeni jest zgodna z różnica˛ tych kolorów postrzegana˛ przez człowieka
(w rzeczywistości i z formalnego punktu widzenia przestrzeń CIE LAB jest tylko
przybliżeniem przestrzeni równomiernej). Tak wiec
˛ przestrzeń ta ma taka˛ zalete,
˛ że
metryka Euklidesa do porównania dwóch kolorów zdefiniowanych w tej przestrzeni
bierze pod uwage˛ ludzka˛ percepcje˛ kolorów, tzn. jest skorelowana z różnicowaniem
kolorów przez ludzi. Odległość miedzy
˛
dwoma punktami w tej przestrzeni dobrze
przybliża odległość mie˛ dzy kolorami oceniana˛ przez ludzkie oko.
Kolor przestrzeni CIE Lab jest określony przez trzy składowe:
— L: jasność, luminancja — ang. lightness (wyrażona liczba˛ z przedziału [0, 100],
gdzie dolne i górne ograniczenia odpowiadaja,
˛ kolejno, kolorowi czarnemu i białemu),
— a: zmiana barwy od zielonej do czerwonej (wyrażona liczba˛ z przedziału
[−120, 120]),
— b: zmiana barwy od niebieskiej do żółtej (wyrażona liczba˛ z przedziału
[−120, 120]).
Odległość pomie˛ dzy dwoma kolorami C1 = (L1 , a1 , b1 ) i C2 = (L2 , a2 , b2 ) jest po
prostu odległościa˛ Euklidesa:
p
∆E = (L1 − L2 )2 + (a1 − a2 )2 + (b1 − b2 )2
(2.19)
Konwersja z przestrzeni CIE XYZ do przestrzeni CIE Lab
Pseudokod 5 przedstawia algorytm konwersji koloru z przestrzeni CIE XYZ do
przestrzeni CIE Lab [54, cz. 7].
17
2.2. Przestrzeń barw
Algorytm 5 Algorytm konwersji z przestrzeni CIE XYZ do przestrzeni CIE Lab.
procedure CONVER T F ROM CIEXYZT O CIEL AB(X, Y, Z)
Illuminant= D65
X
2:
X ← 95.047
Y
3:
Y ← 100.000
Z
4:
Z ← 108.883
1:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
X ← SUB A LGORITHM(X)
Y ← SUB A LGORITHM(Y )
Z ← SUB A LGORITHM(Z)
L ← 116 ∗ Y − 16
A ← 500 ∗ (X − Y )
B ← 200 ∗ (Y − Z)
return L, A, B
end procedure
procedure SUB A LGORITHM(N )
if N > 0.008856 then
1
return N 3
else
16
return 7.787 ∗ N + 116
end if
end procedure
. Observer= 2◦ ,
18
2.3. Filtr obrazu
Konwersja z przestrzeni CIE Lab do przestrzeni CIE XYZ
Pseudokod 6 przedstawia algorytm konwersji koloru z przestrzeni CIE Lab do
przestrzeni CIE XYZ [54, cz. 8].
Algorytm 6 Algorytm konwersji z przestrzeni CIE Lab do przestrzeni CIE XYZ.
procedure CONVER T F ROM CIEL AB T O CIEXYZ(L, A, B)
2:
Y ← L+16
116
A
3:
X ← 500
+Y
B
4:
Z ← Y − 200
1:
Y ← SUB A LGORITHM(Y )
X ← SUB A LGORITHM(X)
Z ← SUB A LGORITHM(Z)
5:
6:
7:
. Observer. = 2◦ , Illuminant = D65
X ← X ∗ 95.047
Y ← Y ∗ 100.000
Z ← Z ∗ 108.883
8:
9:
10:
return X, Y, Z
12: end procedure
11:
13:
14:
15:
16:
17:
18:
19:
procedure SUB A LGORITHM(N )
if N 3 > 0.008856 then
return N 3
else
16
N − 116
return 7.787
end if
end procedure
2.3. Filtr obrazu
Filtrowanie obrazu stosuje sie˛ najcześciej
˛
w ramach wstepnej
˛
obróbki obrazu po
to, aby usunać
˛ — możliwie najdokładniej — niepożadane
˛
cechy obrazu i jednocześnie podkreślić te pożadane.
˛
2.3.1. Filtr konwolucyjny
Filtr konwolucyjny [75] jest filtrem kontekstowym2 , czyli takim, w którym nowa
jasność (kolor) piksela zależy nie tylko od jego starej jasności, lecz również od
jasności pikseli z najbliższego otoczenia. Jasność piksela zależy wiec
˛ od jego
sasiedztwa
˛
— kontekstu. Operacja konwolucji jest również nazywana operacja˛
splotu.
2
Przeciwieństwem filtracji kontekstowej jest operacja punktowa, przeprowadzana na każdym
pikselu niezależnie od pozostałych.
19
2.3. Filtr obrazu
Dwuwymiarowa operacja splotu funkcji jasności f obrazu oraz maski splotu h
wyglada
˛ naste˛ pujaco:
˛
0
f (i, j) = (f ∗ h)(i, j) =
K
X
K
X
i0 =−K
j 0 =−K
f (i + i0 , j + j 0 )h(i0 , j 0 )
(2.20)
gdzie operator ∗ to operator splotu. Szerokość oraz wysokość maski splotu zależa˛
od stałej K i wynosza˛ 2K + 1. Aby uwidocznić kształt kontekstu piksela (i, j) oraz
kształt maski h, można przedstawić operacje˛ splotu graficznie (dla K = 1):

 

f (i − 1, j − 1) f (i − 1, j) f (i − 1, j + 1)
h(−1, −1) h(−1, 0) h(−1, 1)
 f (i, j − 1)
f (i, j)
f (i, j + 1)  ∗  h(0, −1)
h(0, 0)
h(0, 1) 
f (i + 1, j − 1) f (i + 1, j) f (i + 1, j + 1)
h(1, −1)
h(1, 0)
h(1, 1)


...
...
...
= . . . f 0 (i, j) . . . (2.21)
...
...
...
Operatora splotu ∗ nie należy w tym wypadku mylić z operatorem mnożenia macierzy. Graficzna forma 2.21 nie potrafi ukazać wszystkich szczegółów operacji splotu,
dlatego warto przedstawić wzór analityczny definiujacy
˛ ja˛ jednoznacznie:
f 0 (i, j) =
f (i − 1, j − 1) h(−1, −1) + f (i − 1, j) h(−1, 0) + f (i − 1, j + 1) h(−1, 1)
+
f (i, j − 1)
h(0, −1) +
f (i, j)
h(0, 0) +
f (i, j + 1)
h(0, 1)
+ f (i + 1, j − 1) h(1, −1) + f (i + 1, j) h(1, 0) + f (i + 1, j + 1) h(1, 1)
(2.22)
Istnieje problem z policzeniem jasności f 0 (i, j) dla pikseli leżacych
˛
na brzegu
rastra lub — w zależności od rozmiaru maski splotu — blisko jego brzegu, ponieważ
takie piksele moga˛ nie posiadać pełnego kontekstu. Ten problem można rozwiazać
˛
na wiele sposobów, np.:
— na czas liczenia splotu powielić wirtualnie brzegowe piksele (te leżace
˛ na obwodzie rastra) tyle razy, aby uzupełnić brakujacy
˛ kontekst pikseli brzegowych,
— pominać
˛ liczenie splotu dla problemowych pikseli, przez co obraz po filtracji
stanie sie˛ mniejszy.
2.3.2. Filtr dolnoprzepustowy
W przypadku filtru konwolucyjnego dolnoprzepustowego [36, s. 1–2] (ang.
low-pass), czyli uśredniajacego
˛
czy rozmazujacego,
˛
maska splotu może wygladać
˛
nast˛epujaco:
˛

 1 1 1
1 1 1
9
9
9
1
1 1 1 =  19 19 91 
(2.23)
h1 =
9
1
1
1
1 1 1
9
9
9

 1
1
1
1
1 
1 1 1 1 1
25
25
25
25
25
1
1
1
1 
1 1 1 1 1  1
25
25
25
25 
  25
1 
1
1
1
1
1 
1 1 1 1 1 = 
h2 =
(2.24)
25
25
25
25 
  25
25 
1
1
1
1 
1 1 1 1 1  1
25
25
25
25
25
1
1
1
1
1
1 1 1 1 1
25
25
25
25
25
20
2.3. Filtr obrazu
W takim filtrze wszystkie elementy maski splotu musza˛ być wartościami dodatnimi, natomiast suma tych elementów musi wynosić 1, aby kolor piksela na
wyjściu filtra był średnia˛ koloru pikseli sasiednich.
˛
2.3.3. Filtr górnoprzepustowy
W przypadku filtru konwolucyjnego górnoprzepustowego [36, s. 5–6] (ang.
high-pass), nakierowanego na wysokie czestotliwości
˛
obrazu, w tym jego krawedzie
˛
i detale — ale także szumy — maska splotu może wygladać
˛
nastepuj
˛
aco:
˛


−1 −1 −1
h = −1 8 −1
(2.25)
−1 −1 −1
W takim filtrze elementy maski splotu moga˛ być dodatnie jak i ujemne, natomiast suma tych elementów musi wynosić 0, aby wyeliminować składowa˛ stała˛
obrazu.
2.3.4. Filtr Gaussa
W przypadku konwolucyjnego dolnoprzepustowego filtru Gaussa [8] kolejne elementy maski splotu obliczane sa˛ z funkcji gestości
˛
f (i, j) dwuwymiarowego rozkładu normalnego N (µ1 , µ2 , σ1 , σ2 , ρ) = N (0, 0, σ, σ, 0) [11, Wykład 3, s. 18-21]:
f (i, j) =
1 − i2 +j22
e 2σ
2Πσ 2
(2.26)
Nazwa filtra bierze sie˛ stad,
˛ że wyobrażajac
˛ go jako obiekt trójwymiarowy, w którym
poszczególne wartości maski splotu interpretować jako słupki o wysokościach odpowiadajacych
˛
tym wartościom, otrzymuje sie˛ bryłe˛ podobna˛ wizualnie do krzywej
dzwonowej rozkładu normalnego. Przykładowo, dla σ = 1 i rozmiaru maski splotu
3x3 sama maska splotu może wygladać
˛
nastepuj
˛
aco:
˛


0, 06 0, 1 0, 06
(2.27)
h =  0, 1 0, 16 0, 1 
0, 06 0, 1 0, 06
P
Jak widać, maska ta nie jest idealna, ponieważ suma współczynników i,j h(i, j) =
0, 8 < 1. Bardziej praktyczna˛ maska˛ splotu 3x3 mogłaby być:


1/16 2/16 1/16
h = 2/16 4/16 2/16
(2.28)
1/16 2/16 1/16
Dla σ = 1 i rozmiaru 5x5 maska splotu może z kolei

0
0, 01 0, 02 0, 01
0, 01 0, 06 0, 1 0, 06

h=
0, 02 0, 1 0, 16 0, 1
0, 01 0, 06 0, 1 0, 06
0
0, 01 0, 02 0, 01
wygladać
˛
nastepuj
˛
aco:
˛

0
0, 01 

0, 02 

0, 01 
0
(2.29)
Ta maska splotu jest dokładniejsza niż poprzednia (2.27), ponieważ jest wieksza,
˛
przez co z krzywej Gaussa odcinanych jest mniej informacji. Dla tej maski suma
2.3. Filtr obrazu
21
P
współczynników jest oczywiście cały czas mniejsza od jedności ( i,j h(i, j) = 0, 96 <
1), choć widoczne jest spore zbliżenie w kierunku tej wartości w stosunku do
˛
o jednolitej masce
maski 3x3 (2.27). Filtr Gaussa różni sie˛ od filtru uśredniajacego
zmniejszonym efektem rozmycia.
2.3.5. Filtr Sobela
Filtr Sobela [15] (cze˛ ściej: operator Sobela) jest filtrem konturowym (i jednocześnie konwolucyjnym górnoprzepustowym) i służy do wykrywania krawedzi
˛
(poziomych, pionowych i ukośnych) na granicy obiektów na obrazie, obliczajac
˛ dla każdego punktu na obrazie pochodna˛ czastkow
˛
a.
˛ Zestaw pochodnych czastkowych
˛
w danym punkcie tworzy gradient. Przykładem maski splotu 3x3 wykrywajacej
˛
krawe˛ dzie poziomie jest:


1
2
1
0
0
h= 0
(2.30)
−1 −2 −1
Z kolei maska splotu 3x3 wykrywajaca
˛ krawedzie
˛
pionowe może wygladać
˛
nastepu˛
jaco:
˛


1 0 −1
h = 2 0 −2
(2.31)
1 0 −1
Maska splotu 3x3 wykrywajaca
˛ krawedzie
˛
ukośne (z lewego górnego rogu do prawego dolnego) może być naste˛ pujaca:
˛


0
1 2
h = −1 0 1
(2.32)
−2 −1 0
Działanie tak zdefiniowanych masek można interpretować jako średnia˛ ważona˛ —
z wagami 1, 2 oraz 1 — trzech pochodnych czastkowych
˛
dla trzech linii prostopadłych do wykrywanej krawedzi
˛
i równoległych do kierunku gradientu. Dla każdego z czterech kierunków (poziomy, pionowy i dwa ukośne) istnieja˛ dwie maski
splotu (z wzajemnie odwróconymi znakami), co daje łacznie
˛
osiem możliwych masek. W praktyce używa sie˛ dwóch masek splotu (np. wykrywajacych
˛
krawedzie
˛
poziome i pionowe), a naste˛ pnie oba wyniki uwspólnia sie˛ w jeden. Jeśli dla piksela (i, j) wynikiem działania filtru poziomego jest wartość fpoz (i, j), natomiast filtru
pionowego fpion (i, j), wyniki można połaczyć
˛
nastepuj
˛
aco:
˛
q
2 (i, j) + f 2 (i, j)
f 0 (i, j) = fpoz
(2.33)
pion
2.3.6. Filtr Prewitta
Filtr Prewitta [84] (cze˛ ściej: operator Prewitta) jest — tak jak filtr Sobela —
filtrem konturowym (oraz konwolucyjnym górnoprzepustowym) i również służy do
detekcji krawe˛ dzi poziomych, pionowych i ukośnych na granicy obiektów na obrazie. obliczajac
˛ dla każdego punktu na obrazie pochodna˛ czastkow
˛
a.
˛ Przykładem
maski splotu 3x3 wykrywajacej
˛
krawedzie
˛
poziomie jest:


−1 −1 −1
0
0
h= 0
(2.34)
1
1
1
22
2.3. Filtr obrazu
Z kolei maska splotu 3x3 wykrywajaca
˛ krawedzie
˛
pionowe może wygladać
˛
nastepu˛
jaco:
˛


1 0 −1
h = 1 0 −1
(2.35)
1 0 −1
Maska splotu 3x3 wykrywajaca
˛ krawedzie
˛
ukośne (z lewego górnego rogu do prawego dolnego) może być naste˛ pujaca:
˛


0
1 1
h = −1 0 1
(2.36)
−1 −1 0
Analogicznie jak w filtrze Sobela dla każdego z czterech kierunków (poziomy, pionowy i dwa ukośne) istnieja˛ dwie maski splotu (z wzajemnie odwróconymi znakami), co daje łacznie
˛
osiem możliwych masek.
2.3.7. Filtr Robertsa
Filtr Robertsa [66] (cze˛ ściej: krzyż Robertsa) to kolejny filtr konturowy (konwolucyjny górnoprzepustowy) służacy
˛ do wykrywania krawedzi
˛
na obrazie. Składa
si˛e z dwóch etapów. Pierwszym z nich jest obliczenie dwóch osobnych konwolucji
rastra z dwoma maskami splotu, reprezentujacymi
˛
pochodne kierunkowe:
1 0
(2.37)
h1 =
0 −1
h2 =
0 1
−1 0
(2.38)
Sposób przykładania obu masek jest inny niż standardowo z powodu jej nieparzystych wymiarów. Do piksela (i, j) przykłada sie˛ lewy górny róg maski:


f (i, j)
f (i, j + 1)
f (i + 1, j) f (i + 1, j + 1)
(2.39)
f (i + 2, j) f (i + 2, j + 1)
Drugim etapem jest scalenie wyników poprzez obliczenie sumy z ich wartości bezwzgl˛ednych. Oba etapy można — dla piksela (i, j) — zapisać w postaci trzech równań:
diag1 = f (i, j) − f (i + 1, j + 1)
(2.40)
diag2 = f (i, j + 1) − f (i + 1, j)
(2.41)
f 0 (i, j) = |diag1 | + |diag2 |
(2.42)
f 0 (i, j) = |f (i, j) − f (i + 1, j + 1)| + |f (i, j + 1) − f (i + 1, j)|
(2.43)
Ostatecznie:
23
2.4. Segmentacja
2.3.8. Filtr medianowy
Filtr medianowy [91] jest filtrem statystycznym. W tym wypadku każdy punkt
rastra zaste˛ powany jest wartościa˛ środkowa˛ (drugim kwartylem) spośród wszystkich pikseli znajdujacych
˛
sie˛ w obrebie
˛
maski. Dzieki
˛ temu filtr potrafi usuwać
szum impulsowy (ang. impulsive noise) typu sól i pieprz bez znaczacego
˛
pogarszania krawe˛ dzi w obrazie, co jest z kolei domena˛ filtrów konwolucyjnych dolnoprzepustowych. W przypadku maski 3x3 filtr medianowy wyglada
˛ nastepuj
˛
aco:
˛
f 0 (i, j) = mediana{
f (i − 1, j − 1) , f (i − 1, j) , f (i − 1, j + 1) ,
f (i, j − 1)
,
f (i, j)
,
f (i, j + 1)
,
f (i + 1, j − 1) , f (i + 1, j) , f (i + 1, j + 1) }
(2.44)
2.3.9. Filtr różnicowy Gaussa
Filtr różnicowy Gaussa [68] (ang. Difference of Gaussians, DoG) to algorytm,
który przekształca wartość f (i, j) każdego piksela obrazu w wartość:
f 0 (i, j) = [G(i, j, kσ) − G(i, j, σ)] ∗ f (i, j) = G(i, j, kσ) ∗ f (i, j) − G(i, j, σ) ∗ f (i, j) (2.45)
gdzie ∗ to operator konwolucji (splotu), natomiast
G(i, j, σ) =
1 −(i2 +j 2 )/(2σ2 )
e
2Πσ 2
(2.46)
to filtr wygładzajacy
˛ Gaussa (ang. Gaussian blur), omówiony w podsekcji 2.3.4.
Odchylenie standardowe w filtrze Gaussa informuje o skali (intensywności) wygładzania. Im jest ono wie˛ ksze, tym rozmazanie obrazu jest bardziej widoczne,
ponieważ przy liczeniu nowej wartości każdego piksela jego otoczenie, które jest
brane pod uwage˛ , jest wie˛ ksze — wiekszy
˛
jest zasieg.
˛
Istotne jest, aby odejmujac
˛ od siebie filtry Gaussa (G(i, j, kσ) − G(i, j, σ)) o różnych skalach, odejmować ten
o wi˛ekszej skali (rozmazaniu) od tego o mniejszej. Dlatego odchylenie standardowe
odjemnej musi być wie˛ ksze od odchylenia standardowego odjemnika kσ > σ, co
wymaga warunku k > 1. Różnica filtrów Gaussa to właśnie filtr różnicowy Gaussa.
2.4. Segmentacja
Obraz to uporzadkowany
˛
zbiór pikseli o ustalonych kolorach, który przedstawia
scen˛e składajac
˛ a˛ sie˛ z różnych obiektów. Wyodrebnienie
˛
obiektów znajdujacych
˛
sie˛
na scenie — czyli identyfikacja obszarów ich wystepowania
˛
— odbywa sie˛ w procesie
segmentacji [6]. Efektem segmentacji jest możliwość stwierdzenia, czy dany piksel
należy do tła czy obiektu, a jeśli do tego drugiego, to do którego spośród zbioru
wszystkich obiektów rozpoznanych na scenie. Zdecydowanie najcześciej
˛
algorytmy
segmentacji analizuja˛ granice miedzy
˛
obiektami i tłem, porównujac
˛ kolory sasied˛
nich pikseli. Segmentacja łaczy
˛
sie˛ z pojeciem
˛
indeksacji, które oznacza przypisanie
do każdego piksela etykiety jednego z obiektów lub etykiety tła.
Osiagni
˛ e˛ cie skutecznej segmentacji i jednocześnie takiej, która byłaby w pełni
zautomatyzowana i niewymagajaca
˛
interwencji człowieka, jest bardzo trudne do
2.4. Segmentacja
24
osiagni
˛ e˛ cia, a czasami — jak np. w medycynie — bardzo niebezpieczne. Błedy
˛
segmentacji sa˛ nieuniknione. Da˛ży sie˛ do zmniejszenia ryzyka ich wystapienia,
˛
a nie całkowitego wyeliminowania.
Najcze˛ ściej systemy CBIR umożliwiaja˛ tworzenie kwerend jedynie na poziomie
globalnym, czyli całego obrazu. Po zastosowaniu segmentacji i podziale obrazu
na poszczególne obiekty możliwe jest odpytywanie systemów CBIR również na poziomie lokalnym, poprzez dostep
˛ do obrazu przez pryzmat pojedynczych obiektów.
Najcze˛ stsza˛ potrzeba˛ użytkowników jest właśnie wyszukiwanie konkretnych obiektów. Natura obrazów, traktowanych jako kombinacje takich obiektów, to umożliwia. Aby uniknać
˛ zjawiska nadmiernej segmentacji (ang. oversegmenting), można,
w ramach wste˛ pnej obróbki obrazu, zastosować filtracje˛ w postaci filtrów medianowego, uśredniajacego
˛
czy gaussowskiego lub ich liniowa˛ kombinacje.
˛
Można zaproponować nastepuj
˛
ac
˛ a˛ klasyfikacje˛ metod segmentacji [1]:
— segmentacja punktowa:
— segmentacja przez progowanie (ang. thresholding segmentation):
— segmentacja metoda˛ Otsu,
— segmentacja przez klasteryzacje˛ (grupowanie) (ang. clustering segmentation):
— segmentacja metoda˛ ML–EM (Maximum Likelihood Estimation Maximization),
— segmentacja krawe˛ dziowa:
— segmentacja operatorem Sobela,
— segmentacja operatorem Robertsa,
— segmentacja operatorem Laplasjanu Gaussa (ang. Laplacian of Gaussian,
LoG),
— segmentacja operatorem Canny,
— sementacja obszarowa:
— segmentacja przez rozrost obszarów (ang. region growing),
— segmentacja przez łaczenie
˛
obszarów (ang. region merging),
— segmentacja przez podział obszarów (ang. region splitting),
— segmentacja przez podział i łaczenie
˛
(ang. split & merge),
— segmentacja wododziałowa (ang. watershed segmentation).
Można zaproponować klasyfikacje˛ metod segmentacji z punktu widzenia stopnia
ingerencji użytkownika:
— segmentacja automatyczna (nienadzorowana),
— segmentacja półautomatyczna,
— segmentacja re˛ czna (nadzorowana).
2.4.1. Segmentacja metoda˛ Otsu
Segmentacja metoda˛ Otsu [23, s. 10–13] jest szczególnym przypadkiem segmentacji przez progowanie. Segmentacja przez progowanie polega — w przypadku
jednego progu — na ustaleniu koloru progowego T , dzieki
˛ któremu dowolny piksel
o kolorze wyższym niż próg T (lub równym) traktowany jest jako element jakiegoś obiektu widocznego na obrazie, natomiast piksel o kolorze niższym niż próg T
traktowany jest jako element tła — lub vice versa. Rezultatem segmentacji przez
progowanie jest obraz binarny:
1 , f (i, j) ≥ T
0
f (i, j) =
(2.47)
0 , f (i, j) < T
2.5. Transformacja
25
Wzór 2.47 można uogólnić na n − 1 progów, otrzymujac
˛ obraz n-wartościowy:

0
, f (i, j) ≤ T1




, T1 < f (i, j) ≤ T2
 1
...
, ...
f 0 (i, j) =
(2.48)


n
−
2
,
T
<
f
(i,
j)
≤
T

n−2
n−1


n − 1 , Tn−1 < f (i, j)
Głównym problemem pozostaje dobór liczby n − 1 progów oraz ustalenie wartości Ti
każdego z progów (i = 1, 2, ..., n − 1).
Segmentacja metoda˛ Otsu3 , stanowiaca
˛
przykład progowania globalnego, pozwala znaleźć wartości Ti progów, optymalne pod wzgledem
˛
minimalizacji wariancji wewnatrzklasowej
˛
lub maksymalizacji wariancji miedzyklasowej
˛
[76, s. 3–5].
Metoda Otsu osiaga
˛ dobre rezultaty na przykład dla obrazów o histogramach bimodalnych, czyli takich, gdzie możliwa jest reprezentacja histogramu przez dwa
zachodzace
˛ na siebie rozkłady normalne o różnych wartościach średnich.
2.4.2. Segmentacja metoda˛ ML-EM
Segmentacja metoda˛ ML-EM [12, s. 5–6] (ang. Maximum Likelihood Estimation Maximization) polega na iteracyjnym szacowaniu parametrów modelu mikstur
Gaussa (ang. Gaussian mixture model). W takim modelu każdy klaster (segment)
jest reprezentowany jako rozkład normalny o pewnej wartości średniej i macierzy
kowariancji. Przestrzenia˛ przeszukiwań, w której osadzone sa˛ klastry, może być
przestrzeń 5-wymiarowa (R, G, B, i, j), gdzie R, G i B to składowe koloru piksela,
i numer wiersza piksela, j numer kolumny piksela. Każdy piksel, reprezentowany
jako element 5-wymiarowej przestrzeni, trafia do jednego klastra, majac
˛ szanse˛
zmienić swoja˛ przynależność w kolejnych iteracjach algorytmu. Wystepowanie
˛
w tak zdefiniowanej przestrzeni współrzednych
˛
i oraz j pikseli promuje tworzenie segmentów spójnych, w których piksele należace
˛ do danego segmentu granicza˛
z soba,
˛ ale nie wyklucza niespójności.
Metoda ta wymaga jednej odgórnej deklaracji (przez programiste˛ lub użytkownika) ilości klastrów n, na jakie obraz ma zostać podzielony — dlatego metode˛
ML-EM można nazwać półautomatyczna.
˛ Gdyby jednak uruchomić algorytm oddzielnie dla kilku różnych wartości n (np. n = 2, 3, 4, 5, 6), a nastepnie
˛
automatycznie
wybrać spośród tych wyników ten, w którym otrzymano najlepsze efekty segmentacji, wówczas metoda ML-EM staje sie˛ w pełni automatyczna. Oczywiście taka
forma automatyzacji nie uwzglednia
˛
ryzyka, że optymalny wynik może istnieć dla
wartości n wie˛ kszej niż maksymalna nmax wzieta
˛ pod uwage˛ w obliczeniach (w tym
wypadku nmax = 6).
2.5. Transformacja
Transformacja4 sygnału to, w ogólności, proces stratnego lub bezstratnego i odwracalnego lub nieodwracalnego matematycznego przekształcenia sygnału, które
3
Nazwa tej metody segmentacji pochodzi od jej twórcy — Nobuyuki Otsu.
Warto zwrócić uwag˛e na istnienie dwóch poj˛eć: transformacja (ang. transformation) oraz
transformata (ang. transform). Transformacja to nazwa ogólnego procesu przekształcenia, natomiast
transformata to konkretny wynik tego procesu. Istotnie, transformata jest rezultatem transformacji.
4
26
2.5. Transformacja
przenosi sygnał wejściowy o dziedzinie przestrzennej w sygnał wyjściowy o dziedzinie cze˛ stotliwościowej — lub w druga˛ strone.
˛
Istnieje wiele różnych rodzajów transformacji, np.:
— transformacja Fouriera,
— transformacja falkowa,
— transformacja kosinusowa,
— transformacja Walsha-Hadamarda.
Wzory analityczne wszystkich tych transformacji, czyli transformaty, wykazuja˛
bardzo duże podobieństwo — z dokładnościa˛ do pewnej różniacej
˛
je funkcji, nazywanej jadrem
˛
transformaty. Ogólny wzór na transformate˛ zależy wiec
˛ od jadra
˛
h
transformaty, natomiast wzór na transformate˛ odwrotna˛ od jadra
˛
h−1 transformaty
odwrotnej. Różnice pomie˛ dzy poszczególnymi transformacjami uwidaczniaja˛ sie˛
tylko wtedy, kiedy porówna sie˛ wzory na funkcje h i h−1 ich transformat.
Transformate˛ F (k) funkcji f (x) o jednowymiarowej, ciagłej
˛
dziedzinie można
zapisać ogólnym wzorem:
Z +∞
f (x)h(x, k) dx
(2.49)
F (k) =
−∞
Transformate˛ odwrotna˛ f (x) funkcji F (k) o jednowymiarowej, ciagłej
˛
dziedzinie
można zapisać ogólnym wzorem:
Z +∞
f (x) =
F (k)h−1 (k, x) dk
(2.50)
−∞
Transformate˛ F (k, l) funkcji f (x, y) o dwuwymiarowej, ciagłej
˛
dziedzinie można
zapisać ogólnym wzorem:
Z +∞ Z +∞
F (k, l) =
f (x, y)h(x, y, k, l) dxdy
(2.51)
−∞
−∞
Transformate˛ odwrotna˛ f (x, y) funkcji F (k, l) o dwuwymiarowej, ciagłej
˛
dziedzinie
można zapisać ogólnym wzorem:
Z +∞ Z +∞
f (x, y) =
F (k, l)h−1 (k, l, x, y) dkdl
(2.52)
−∞
−∞
Dyskretna˛ transformate˛ F (k) funkcji f (i) o jednowymiarowej, dyskretnej dziedzinie można zapisać ogólnym wzorem:
F (k) =
M
−1
X
f (i)h(i, k)
(2.53)
i=0
Dyskretna˛ transformate˛ odwrotna˛ f (i) funkcji F (k) o jednowymiarowej, dyskretnej
dziedzinie można zapisać ogólnym wzorem:
f (i) =
M
−1
X
F (k)h−1 (k, i)
(2.54)
k=0
Dyskretna˛ transformate˛ F (k, l) funkcji f (i, j) o dwuwymiarowej, dyskretnej dziedzinie można zapisać ogólnym wzorem:
F (k, l) =
M
−1 N
−1
X
X
i=0 j=0
f (i, j)h(i, j, k, l)
(2.55)
27
2.5. Transformacja
Dyskretna˛ transformate˛ odwrotna˛ f (i, j) funkcji F (k, l) o dwuwymiarowej, dyskretnej dziedzinie można zapisać ogólnym wzorem:
f (i, j) =
M
−1 N
−1
X
X
F (k, l)h−1 (k, l, i, j)
(2.56)
k=0 l=0
2.5.1. Transformacja Fouriera
Omówienie dyskretnej transformacji Fouriera [67] (ang. Discrete Fourier Transform, DFT) jest konieczne ze wzgledu
˛
na jej użycie w deskryptorze Fouriera, opisanym w rozdziale 3.3.2.
Transformate˛ Fouriera F (k) funkcji f (x) o jednowymiarowej, ciagłej
˛
dziedzinie
można zapisać ogólnym wzorem:
Z +∞
F (k) =
f (x)e−2Πixk dx
(2.57)
−∞
Transformate˛ odwrotna˛ Fouriera f (x) funkcji F (k) o jednowymiarowej, ciagłej
˛
dziedzinie można zapisać ogólnym wzorem:
Z +∞
f (x) =
F (k)e2Πikx dk
(2.58)
−∞
Dyskretna˛ transformate˛ Fouriera Fk funkcji fn o jednowymiarowej, dyskretnej
dziedzinie określonej w N punktach można zapisać ogólnym wzorem:
Fk =
N −1
kn
1 X
fn e−2Πi N , k = 0, 1, ..., N − 1
N
(2.59)
n=0
Dyskretna˛ transformate˛ odwrotna˛ Fouriera fn funkcji Fk o jednowymiarowej, dyskretnej dziedzinie określonej w N punktach można zapisać ogólnym wzorem:
fn =
N
−1
X
kn
Fk e2Πi N , n = 0, 1, ..., N − 1
(2.60)
k=0
Dyskretna˛ transformate˛ Fouriera Fk,l funkcji fm,n o dwuwymiarowej, dyskretnej
dziedzinie określonej w M × N punktach można zapisać ogólnym wzorem:
Fk,l =
M −1 N −1
km
ln
1 X X
fm,n e−2Πi( M + N ) , k = 0, 1, ..., M − 1, l = 0, 1, ..., N − 1
MN
(2.61)
m=0 n=0
Dyskretna˛ transformate˛ odwrotna˛ Fouriera fm,n funkcji Fk,l o dwuwymiarowej, dyskretnej dziedzinie określonej w M × N punktach można zapisać ogólnym wzorem:
fm,n =
M
−1 N
−1
X
X
k=0 l=0
km
Fk,l e2Πi( M
+ ln
)
N
, m = 0, 1, ..., M − 1, n = 0, 1, ..., N − 1
(2.62)
28
2.6. Metryka odległości
2.6. Metryka odległości
Wyekstrahowane cechy obrazu — omówione w rozdziale 3 — zapisywane sa,
˛ w
odpowiedniej kolejności, jako kolejne składowe wektora cech, najcześciej
˛
wektora
liczb rzeczywistych. Dzie˛ ki temu — chcac
˛ porównać dwa obrazy miedzy
˛
soba˛ —
zamiast porównywać poszczególne ich piksele, których jest zazwyczaj bardzo dużo,
można porównać ich odpowiednie wektory cech, których rozmiary sa˛ o wiele mniejsze. Wykonujac
˛ zapytanie do systemu CBIR, zawierajace
˛ obraz wejściowy, system
jest w stanie obliczyć miare˛ odległości miedzy
˛
jego wektorem cech a wektorem cech
każdego obrazu znajdujacego
˛
sie˛ bazie danych, a nastepnie
˛
uszeregować niemale˛ — znajjaco
˛ obrazy bazodanowe na podstawie tej metryki i wybrać pewna˛ ich cześć
dujac
˛ a˛ sie˛ na poczatku
˛
szeregu – jako wynik zapytania. Powstaje wiec
˛ problem wyboru najbardziej odpowiedniej miary odległości pomiedzy
˛
wektorami. Istnieje wiele
różnych miar podobieństwa — a tak naprawde˛ niepodobieństwa — mierzacych
˛
odległości pomie˛ dzy wektorami liczb rzeczywistych [49, s. 18–21] [60, s. 18–20].
Jeśli za d(x, y) przyjać
˛ miare˛ niepodobieństwa miedzy
˛
dwoma wektorami liczb
rzeczywistych x oraz y, wówczas można narzucić pewne warunki na te˛ miare˛ po to,
aby stała sie˛ ona metryka:
˛
1. symetryczność:
d(x, y) = d(y, x)
(2.63)
2. równoważność maksymalnego podobieństwa z identycznościa:
˛
d(x, y) = 0 ⇔ x = y
(2.64)
d(x, z) ≤ d(x, y) + d(y, z)
(2.65)
3. nierówność trójkata:
˛
W metrykach przedstawionych poniżej wystepuj
˛
a˛ nastepuj
˛
ace
˛ oznaczenia:
— x oraz y to dwa porównywane miedzy
˛
soba˛ wektory,
— xi oraz yi to i-te składowe wektorów — kolejno – x oraz y,
— d to ilość składowych zarówno wektora x jak i y, czyli ich wymiarowość (nie mylić
symbolu d z zapisem d(x, y)),
— wi to dowolna liczba be˛ daca
˛ waga,
˛
— p to liczba całkowita dodatnia.
2.6.1. Metryka Minkowskiego
Jeśli wi jest waga˛ i-tej składowej wektorów x oraz y (czyli dana waga jest taka
sama dla danego wymiaru obu wektorów), wówczas ważona metryka Minkowskiego
[47] przedstawia sie˛ jako:
d
X
d(x, y) = (
wi |xi − yi |p )1/p
(2.66)
i=1
Jeśli natomiast wi = 1, powstaje nieważona metryka Minkowskiego:
d(x, y) = (
d
X
|xi − yi |p )1/p
(2.67)
i=1
Waga danej składowej wektora odzwierciedla wrażliwość miary odległości na t˛e
składowa.
˛ Waga może służyć do wyłaczania
˛
istotności — czyli ignorowania — danej
29
2.6. Metryka odległości
j-tej składowej, co realizuje sie˛ poprzez zapewnienie warunku wj = 0. Dodatkowo
narzuca sie˛ kilka warunków:
wi ∈ [0; 1], i = 1, 2, ..., d
d
X
(2.68)
(2.69)
wi = 1
i=1
∃i∈{1,2,...,d} wi > 0
(2.70)
Metryka Minkowskiego jest metryka˛ ortogonalna,
˛ ponieważ bazuje ona na założeniu, że cechy sa˛ niezależne (ortogonalne) wzgledem
˛
siebie.
2.6.2. Metryka Euklidesa
Metryka Euklidesa [53] (euklidesowa) jest szczególnym przypadkiem metryki
Minkowskiego (2.6.1). Te˛ pierwsza˛ można otrzymać z tej drugiej, przyjmujac
˛ jednostkowe wagi (wi = 1) oraz parametr p w liczbie 2:
v
u d
uX
d(x, y) = t (xi − yi )2
(2.71)
i=1
2.6.3. Metryka Manhattan
Metryka Manhattan [64] (uliczna, nowojorska, L1 ) jest — podobnie jak metryka
Euklidesa — szczególnym przypadkiem metryki Minkowskiego (2.6.1). Otrzymuje
si˛e ja,
˛ przyjmujac
˛ jednostkowe wagi (wi = 1) oraz parametr p w liczbie 1:
d(x, y) =
d
X
|xi − yi |
(2.72)
i=1
2.6.4. Metryka Czebyszewa
Metryka Czebyszewa [48] (maksymalna) to również szczególny przypadek metryki Minkowskiego (2.6.1). Otrzymuje sie˛ ja,
˛ obliczajac
˛ granice˛ z metryki Minkowskiego dla p da˛żacego
˛
do nieskończoności (p → +∞). W takim przypadku:
d
X
d(x, y) = lim (
|xi − yi |p )1/p = max |xi − yi |
p→+∞
1≤i≤d
i=1
(2.73)
2.6.5. Metryka Canberra
Metryka Canberra [24, s. 1–4] jest podobna do metryki Euklidesa, tyle że każdy
1
:
iterowany i-ty wyraz sumy jest w pewnym sensie ważony waga˛ |xi |+|y
i|
d(x, y) =
d
X
|xi − yi |
|xi | + |yi |
i=1
(2.74)
2.6. Metryka odległości
30
2.6.6. Metryka Mahalanobisa
Jeśli C to macierz kowariancji (symetryczna, dodatnio określona), charakteryzujaca
˛ zbiór punktów danej klasy, a T to symbol operacji transpozycji macierzy, to
metryka Mahalanobisa [106] przyjmuje postać:
q
d(x, y) = (x − y)C −1 (x − y)T
(2.75)
3. Deskryptor obrazu
Sporym wyzwaniem może być wybranie zestawu cech, które bed
˛ a˛ użyte do
utworzenia deskryptora obrazu lub obiektu na obrazie. Idealna cecha powinna
być niezmiennicza wzgle˛ dem takich czynników jak [60, s. 13–14]:
— translacja (przesunie˛ cie obserwatora wzgledem
˛
sceny),
— rotacja (obrót obserwatora wzgledem
˛
sceny po płaszczyźnie równoległej do
sceny),
— skalowanie (zmiana odległości obserwatora wzgledem
˛
sceny wzdłuż linii prostopadłej do sceny),
— perspektywa (obrót obserwatora wzgledem
˛
punktu zawieszonego na scenie),
— poziom oświetlenia,
— przestawianie obiektów sceny,
— przesłanianie obiektu na scenie przez inny obiekt.
Idealna cecha powinna być jak najlepszym dyskryminatorem różnych obrazów lub
różnych obiektów na obrazach, tzn. rozrzut wartości danej cechy powinien być
jak najmniejszy w obre˛ bie podobnych obrazów lub obiektów i jednocześnie jak
najwie˛ kszy pomie˛ dzy niepodobnymi obrazami lub obiektami. Dość istotna jest
również niezbyt duża złożoność obliczeniowa algorytmu wyliczania cechy.
Istnieje poje˛ cie systemu widzenia człowieka (ang. Human Visual System, HVS)
[57]. Oznacza ono ludzki sposób postrzegania informacji wizualnych, bed
˛ acy
˛ wynikiem różnorodnych procesów biologicznych i psychologicznych w organizmie człowieka (siatkówce, nerwie wzrokowym, mózgu), a także ewolucyjnych. Wszak wiele
cech sposobu widzenia człowieka zostało nabytych — poprzez dobór naturalny —
w wyniku potrzeby zdolności skutecznej walki, obrony i zdobywania pożywienia.
Przykładowo, w wyniku eksperymentów ustalono, że w warunkach przyzwoitego
oświetlenia sceny wzrok ludzki reaguje przede wszystkim na kolor i jego jasność,
w dalszej kolejności na kształt i ruch, w jeszcze dalszej na teksture˛ oraz pozostałe
cechy [71, s. 3–4]. Tego typu wskazówki powinny — podczas analizy algorytmów
wyliczania deskryptorów obrazów — sugerować, które cechy obrazu sa˛ w stanie
najskuteczniej wyszukiwać obrazy podobne do wzorca.
Istnieje wiele kryteriów, ze wzgledu
˛
na które można dokonywać klasyfikacji
deskryptorów cech. W niniejszej pracy została użyta nastepuj
˛
aca
˛
kategoryzacja
deskryptorów:
— wyliczane na całym obrazie,
— wyliczane na konturze obiektu (ang. contour-based), bed
˛ acym
˛
zbiorem pikseli,
które co prawda należa˛ do obiektu, ale jednocześnie sasiaduj
˛
a˛ z pikselami
nienależacymi
˛
już do niego,
— wyliczane na regionie (ang. region-based), bed
˛ acym
˛
zbiorem wszystkich pikseli,
które należa˛ do obiektu (łacznie
˛
z pikselami należacymi
˛
do konturu).
Metody rozróżniania regionów lub konturów obiektów wymagaja˛ najpierw wyodrebnienia
˛
tych obiektów spośród całej sceny obrazu, co realizowane jest w procesie
segmentacji, omówionej w rozdziale 2.4.
32
3.1. Deskryptor całego obrazu
W poniższych sekcjach zakłada sie,
˛ że:
— M i N to, kolejno, liczba wierszy oraz liczba kolumn rastra,
— f (i, j) to wartość funkcji jasności rastra dla piksela o współrzednych
˛
(i, j) (rzad
˛
i, kolumna j).
P PN
Ponadto, zamiast
stosować zapis M
˛
czesto
˛
uproszi=1
j=1 F (i, j), stosowany bedzie
P
czony zapis i,j F (i, j), gdzie F (i, j) to dowolna funkcja dwóch zmiennych i oraz j.
3.1. Deskryptor całego obrazu
Deskryptor całego obrazu to algorytm wyliczajacy
˛ jego cechy na podstawie analizy wszystkich pikseli a nie cześci
˛
— tak jak ma to miejsce w przypadku regionu
czy konturu. Rysunek 3.1 przedstawia dwa obrazy podobne do siebie, bo przedstawiajace
˛ te˛ sama˛ scene˛ , tyle że z pewnym przesunieciem
˛
punktu obserwacji.
Rysunek 3.1. Dwa obrazy podobne do siebie. Źródło: Federation Wing Tsun
Kung-Fu System http://www.federationwingtsun.org/ (dostep:
˛ 23.02.2014).
Wyszukiwanie obrazów na podstawie cech zwiazanych
˛
z kolorem okazało sie˛
w historii dziedziny CBIR rozwiazaniem
˛
dość efektywnym. Jednak należy pamietać,
˛
że cecha oparta na kolorze nie jest zbyt stabilna [28, s. 2], ponieważ zależy od:
— warunków akwizycji obrazu (np. iluminacja),
— charakterystyki urzadzenia
˛
do akwizycji,
— katu
˛ urzadzenia
˛
do akwizycji.
3.1.1. Średnia jasność obrazu
Średnia jasność obrazu [60, s. 3] to deskryptor statystyczny. Definiuje sie˛ ja˛
jako:
1 X
E=
f (i, j)
(3.1)
NM
i,j
Mimo swojej prostoty jest bardzo skutecznym deskryptorem obrazu, ponieważ —
jak zostało powiedziane we wstepie
˛
do rozdziału 3 — w warunkach przyzwoitego
33
3.1. Deskryptor całego obrazu
oświetlenia sceny wzrok ludzki reaguje przede wszystkim na kolor i jego jasność.
W przypadku średniej jasności wyliczonej na obrazie reprezentowanym w systemie RGB koszt przechowywania takiego deskryptora to koszt przechowywania
trzech liczb zmiennoprzecinkowych.
3.1.2. Wariancja obrazu
Wariancja [2], czyli moment centralny drugiego rzedu,
˛
jest — w ujeciu
˛
matematycznym — miara˛ zróżnicowania zmiennej losowej. W przypadku obrazów wskazuje
zróżnicowanie pikseli w rastrze [60, s. 3]. Definiuje sie˛ ja˛ jako:
σ 2 = E((f − E)2 ) =
1 X
(f (i, j) − E)2
NM
(3.2)
i,j
3.1.3. Kontrast
Jeżeli:
— przestrzeń kolorów jest przestrzenia˛ RGB,
— fmax jest maksymalna˛ wartościa˛ funkcji jasności,
— fmin jest minimalna˛ wartościa˛ funkcji jasności,
wówczas kontrast [60, s. 3] można zdefiniować jako:
C=
fmax − fmin
255
(3.3)
Nietrudno zauważyć, że wielkość C przyjmuje wartości z przedziału [0; 1]. W rzeczywistości istnieć be˛ da˛ aż trzy wielkości C — po jednej dla każdej składowej R, G i B.
Można je oznaczyć np. jako CR , CG , CB .
3.1.4. Histogram koloru
W kontekście obrazów cyfrowych histogram [26] to sposób, najcz˛eściej graficzny, na przedstawienie liczności wystepowania
˛
poszczególnych kolorów w obrazie. Jest to ciag
˛ H = (H0 , H1 , ..., HK−1 ), którego długość K jest równa liczbie
kolorów doste˛ pnych w używanej przestrzeni kolorów (np. K = 255). Element Hk
(dla k = 0, 1, ..., K − 1) ciagu
˛
H niesie informacje˛ — w przypadku histogramu nieznormalizowanego — o liczbie pikseli w obrazie posiadajacych
˛
kolor oznaczony jako
k, co można zapisać wzorem [114, s. 38–40]:
Hk =
M
−1 N
−1
X
X
p(k, f (i, j))
(3.4)
i=0 j=0
gdzie p(k, f (i, j)) to funkcja stwierdzajaca,
˛
czy kolor f (i, j) piksela (i, j) jest równy
rozpatrywanemu aktualnie kolorowi k:
1 , f (i, j) = k
p(k, f (i, j)) =
(3.5)
0 , f (i, j) 6= k
norm ) eleW przypadku histogramu znormalizowanego H norm = (H0norm , H1norm , ..., HK−1
ment Hknorm jest równy liczbie pikseli posiadajacych
˛
kolor k podzielonej przez ilość
34
3.1. Deskryptor całego obrazu
wszystkich M N pikseli w obrazie, co można interpretować jako prawdopodobieństwo przyje˛ cia przez dowolny piksel koloru k:
Hknorm =
M −1 N −1
Hk
1 X X
=
p(k, f (i, j))
MN
MN
(3.6)
i=0 j=0
norm )
(H0norm , H1norm , ..., HK−1
Wektorem (H0 , H1 , ..., HK−1 ) lub
można posłużyć sie˛ jako
cecha˛ opisujac
˛ a˛ obraz. Zalety histogramu jako deskryptora obrazu to przede
wszystkim odporność na operacje obrotu, translacji czy skalowania, czyli wszelkich
zjawisk zwiazanych
˛
z — raczej nieznacznymi — zmianami pozycji kamery, a także
prostota całej idei, czyli niska złożoność obliczeniowa. Jednak jego wada˛ jest fakt,
że nie bierze pod uwage˛ zależności przestrzennych (inaczej: rozkładu przestrzennego, informacji przestrzennych) obrazu. Innymi słowy, histogram nie przechowuje
w sobie informacji o rozłożeniu pikseli obrazu wzgledem
˛
siebie. Jeśli dla danego obrazu wyliczy sie˛ jego histogram, a nastepnie
˛
losowo poprzestawia sie˛ piksele miedzy
˛
soba,
˛ nawet w tak dużym stopniu, że przerobiony obraz nie bedzie
˛
dla człowieka
w ogóle przypominał obrazu pierwotnego, wówczas histogram obliczony dla obrazu
zmodyfikowanego be˛ dzie dokładnie taki sam jak dla obrazu oryginalnego. Podobne
histogramy moga˛ mieć dwa obrazy o zupełnie różnej scenie — zrobione w różnych
miejscach i przedstawiajace
˛ różne obiekty.
Miary niepodobieństwa histogramów
Jeśli:
— H1 i H2 to histogramy dwóch obrazów,
— H1 (j) i H2 (j) to ilości pikseli o kolorze j w obu obrazach,
— N to całkowita ilość doste˛ pnych kolorów w obrazach, czyli ilość słupków (koszyków) histogramów H1 i H2 ,
— d(H1 , H2 ) to miara niepodobieństwa histogramów H1 i H2 ,
wówczas histogramy można porównywać za pomoca˛ miar odległości przedstawionych poniżej [27, s. 2–3] [60, s. 17–20].
Odległość Euklidesa:
v
uN
uX
d(H1 , H2 ) = t (H1 (j) − H2 (j))2
(3.7)
j=1
Odległość Manhattan:
d(H1 , H2 ) =
N
X
|H1 (j) − H2 (j)|
(3.8)
j=1
Odległość kosinusowa:
d(H1 , H2 ) = 1 − cos(φ)
H1 · H2
cos(φ) =
|H1 ||H2 |
(3.9)
(3.10)
Parametry statystyczne histogramu znormalizowanego
Jako że histogram znormalizowany H norm posiada informacje˛ o prawdopodobieństwie Hknorm , że dowolny piksel przyjmie kolor k, można traktować kolor k jako
zmienna˛ losowa˛ i zdefiniować najbardziej popularne parametry statystyczne, które
moga˛ pełnić role˛ cech obrazu [114, s. 41–43]:
35
3.1. Deskryptor całego obrazu
— Wartość oczekiwana (ang. expected value) (moment zwykły I rzedu)
˛
µ = m1 =
K−1
X
kHknorm
(3.11)
k=0
— Wariancja (ang. variance) (moment centralny II rzedu)
˛
σ 2 = µ2 =
K−1
X
(k − µ)2 Hknorm
(3.12)
k=0
— Odchylenie standardowe (ang. standard deviation)
v
uK−1
uX
(k − µ)2 Hknorm
σ=t
(3.13)
k=0
— Moment centralny III rze˛ du
µ3 =
K−1
X
(k − µ)3 Hknorm
(3.14)
k=0
— Moment centralny IV rze˛ du
µ4 =
K−1
X
(k − µ)4 Hknorm
(3.15)
k=0
— Skośność (ang. skewness) (współczynnik asymetrii)
PK−1
(k − µ)3 Hknorm
µ3
γ3 = 3 = k=0
σ
σ3
(3.16)
Skośność γ3 określa stopień asymetrii histogramu H norm , informujac,
˛ czy jest
on symetryczny czy asymetryczny i jeśli asymetryczny, to w która˛ strone˛ jest
przechylony — lewa˛ czy prawa.
˛ Jeśli γ3 = 0, to histogram jest symetryczny.
Jeśli γ3 < 0, to histogram jest asymetryczny lewostronnie, tzn. lewe ramie˛
rozkładu jest wydłużone. Analogicznie, jeśli γ3 > 0, histogram jest asymetryczny
prawostronnie — wydłużony jest prawy ogon.
Trzeci moment centralny ma podobne właściwości co skośność, jednak ma
on to ograniczenie, że można go stosować do porównywania asymetrii tylko
takich samych rozkładów. Normalizacja trzeciego momentu centralnego, czyli
podzielenie go przez potrójna˛ poteg
˛ e˛ odchylenia standardowego — w wyniku
czego otrzymuje sie˛ skośność — pozwala porównywać asymetrie˛ również różnych
rozkładów — poprzez porównanie ich skośności.
— Kurtoza (ang. kurtosis) (współczynnik spłaszczenia)
PK−1
(k − µ)4 Hknorm
µ4
γ4 = 4 = k=0
−3
(3.17)
σ
σ4
Kurtoza1 γ4 określa poziom spłaszczenia i koncentracji histogramu H norm , czyli
informuje, czy jest on wysoki i waski
˛
(ostry i niepłaski kształt) czy niski i szeroki
1
W starszej wersji literatury wielkość określona˛ tak jak we wzorze 3.17 określa si˛e mianem ekscesu (współczynnika ekscesu), natomiast wzór na kurtoz˛e jest podobny, lecz nie zawiera odejmowania
liczby 3 od ułamka.
3.1. Deskryptor całego obrazu
36
(kształt łagodny i płaski). Jeśli γ4 = 0, spłaszczenie histogramu jest podobne do
spłaszczenia rozkładu normalnego i badany rozkład nazywa sie˛ wówczas mezokurtycznym. Jeśli γ4 > 0, histogram jest mniej płaski, czyli kolory sa˛ bardziej
skoncentrowane wokół średniego koloru (rozkład leptokurtyczny), natomiast jeśli γ4 < 0, histogram jest bardziej płaski, czyli kolory w obrazie sa˛ bardziej zróżnicowane czy rozrzucone (rozkład platokurtyczny).
— Mediana
Po posortowaniu kolorów k = 0, 1, ..., K − 1 niemalejaco
˛ wzgledem
˛
ich prawdopodobieństw Hknorm pojawienia sie˛ na pikselu można wybrać ten kolor k, który
znajduje sie˛ „w połowie” ciagu
˛
— wówczas kolor ten nazywany jest mediana˛
(inaczej: wartościa˛ środkowa,
˛ wartościa˛ przecietn
˛ a,
˛ drugim kwartylem).
Mówiac
˛ ściślej, jeśli ilość kolorów K jest nieparzysta, mediana˛ bedzie
˛
kolor
K+1
˛
koloru w rzedzie
˛
z samym
2 -szy w kolejności (nie mylić numeru porzadkowego
kolorem, który, na potrzeby niniejszej pracy, również jest liczba,
˛ tyle że z zakresu
{0, 1, ..., K − 1} — natomiast pozycje kolorów w ciagu
˛
to liczby z zakresu {1,
2, ..., K}). Jeśli ilość kolorów K jest parzysta, to mediana˛ może być średnia
arytmetyczna dwóch środkowych kolorów — tych znajdujacych
˛
sie˛ na pozycjach
K
K
˛
ciagu
˛
lub, alternatywnie — nie chcac
˛ ryzykować
2 i 2 + 1 uporzadkowanego
wyprowadzenia koloru poza przestrzeń kolorów — jeden losowy kolor spośród
tych dwóch najbliżej środka.
3.1.5. Wektor spójności koloru
Wektor spójności koloru [27] (ang. Color Coherence Vector, CCV) to idea rozszerzajaca
˛ idee˛ histogramu, omówionego w podsekcji 3.1.4. Wada˛ histogramu jako
deskryptora obrazu jest fakt, że nie jest on uzależniony od rozkładu przestrzennego
pikseli. Wektor spójności koloru to nic innego jak histogram wzbogacony o zależności przestrzenne pomie˛ dzy pikselami.
Aby przedstawić koncepcje˛ wektora spójności koloru, należy najpierw zdefiniować poje˛ cie obszaru spójnego, piksela spójnego oraz piksela niespójnego. Obszar
spójny to spójny zbiór pikseli o jednakowym kolorze, czyli taki, że dla dowolnych
dwóch pikseli należacych
˛
do niego istnieje przejście od jednego do drugiego, poruszajac
˛ sie˛ , piksel po pikselu, po sasiednich
˛
pikselach, należacych
˛
do tego obszaru.
Dany obszar spójny składa sie˛ z pewnej liczby pikseli. Liczbe˛ te˛ można oznaczyć
jako τ .
Piksel spójny to taki, który należy do obszaru spójnego o liczności τ nie mniejszej
niż τmin , czyli τ ≥ τmin . Piksel niespójny to taki, który należy do obszaru spójnego
o liczności mniejszej niż τ , czyli τ < τmin . Każdy piksel należy do dokładnie jednego
obszaru spójnego. Wartość τmin należy ustalić doświadczalnie. Przykładowo, może
ona wynosić τmin = 25.
W wektorze spójności koloru każdy słupek (koszyk), zwiazany
˛
z danym kolorem,
reprezentuje nie — tak jak w przypadku standardowego histogramu (nieznormalizowanego) — jedna˛ liczbe˛ be˛ dac
˛ a˛ ilościa˛ pikseli w obrazie o tym kolorze, lecz dwie
liczby — liczbe˛ pikseli o tym kolorze określanych jako spójnych oraz liczbe˛ pikseli
niespójnych. CCV mierzy wiec
˛ spójność przestrzenna˛ pikseli danego koloru [60,
s. 15].
Przed przystapieniem
˛
do wyznaczenia wektora CCV warto zrealizować dwa kroki
przygotowawcze [27, s. 3–4]:
37
3.1. Deskryptor całego obrazu
1. rozmycie obrazu, czyli zastapienie
˛
wartości każdego piksela wartościa˛ średnia˛
z jego (maksymalnie) ośmiu sasiadów,
˛
2. dyskretyzacja przestrzeni barw w celu zmniejszenia ilości możliwych kolorów do
wybranej wartości N .
Tradycyjny histogram można przedstawić jako ciag
˛ N koszyków ξi dla i = 1, ..., N ,
gdzie każdy koszyk ξi jest liczba˛ oznaczajac
˛ a˛ ilość pikseli w obrazie o kolorze i:
(ξ1 , ξ2 , ..., ξN )
(3.18)
Zmodyfikowany histogram, czyli wektor spójności koloru, można z kolei przedstawić jako ciag
˛ nie liczb ξi , lecz par liczb (αi , βi ) dla i = 1, ..., N , gdzie dla każdej
takiej pary αi oznacza ilość pikseli spójnych, natomiast βi ilość pikseli niespójnych
w obre˛ bie koloru i:
((α1 , β1 ), (α2 , β2 ), ..., (αN , βN ))
(3.19)
Oczywiste jest, że ξi = αi + βi dla i = 1, ..., N .
Doświadczenia pokazuja,
˛ że podejście CCV prezentuje wyższa˛ jakość rozróżniania obrazów niż tradycyjny histogram. Wniosek ten jest zgodny z analiza˛ teoretyczna,
˛ ponieważ intuicyjnie oczywiste jest, że skoro CCV przechowuje wiecej
˛
informacji niż histogram, to lepiej rozróżnia obrazy.
Porównywanie wektorów spójności koloru
0
Jeśli dwa obrazy I oraz I posiadaja˛ wektory spójności koloru, odpowiednio,
0
0
0
0
0
0
GI = ((α1 , β1 ), (α2 , β2 ), ..., (αN , βN )) oraz GI 0 = ((α1 , β1 ), (α2 , β2 ), ..., (αN , βN )), wówczas
można zaproponować naste˛ pujac
˛ a˛ miare˛ odległości do porównania tych wektorów
[27, s. 6–7]:
N
X
0
0
∆(GI , GI 0 ) =
(|αj − αj | + |βj − βj |)
(3.20)
j=1
Tak zdefiniowana miara posiada jednak pewna˛ wade.
˛ Przykładowo, różnica miedzy
˛
0
0
0
0
dwoma koszykami (αi , βi ) = (0, 1) i (αi , βi ) = (0, 100), wynoszaca
˛ |αi − αi | + |βi − βi | =
99, jest taka sama jak różnica miedzy
˛
dwoma koszykami (αj , βj ) = (9000, 9001)
0
0
i (αj , βj ) = (9000, 9100), choć intuicyjnie jest jasne, że koszyki należace
˛ do drugiej
pary sa˛ do siebie bardziej podobne niż koszyki należace
˛ do pierwszej, ponieważ
w drugiej parze wyste˛ puja˛ wie˛ ksze liczby. W celu zachowania intuicyjności stosuje
si˛e normalizacje˛ :
∆(GI , GI 0 ) =
0
0
N
X
αj − αj
βj − βj
(|
|
+
|
|)
0
0
α
+
α
+
1
β
+
β
+
1
j
j
j
j
j=1
(3.21)
3.1.6. Korelogram i autokorelogram koloru
Korelogram koloru [44] (ang. color correlogram) przechowuje nie tylko informacje kolorystyczne, ale również zależności przestrzenne w obrazie [43]. Dla każdej
pary kolorów zapamie˛ tuje on prawdopodobieństwa znalezienia dwóch pikseli o tych
kolorach w danej odległości od siebie.
Korelogram można reprezentować jako trójwymiarowa˛ tablice˛ C, w której wartość C(c1 , c2 , d) równa jest prawdopodobieństwu znalezienia w obrazie piksela o kolorze c2 w odległości d ∈ D od piksela o kolorze c1 . Odległość należy do pewnej
38
3.1. Deskryptor całego obrazu
przestrzeni odległości D, która w ogólnym przypadku jest zbiorem wszystkich możliwych odległości mie˛ dzy pikselami, natomiast w praktyce jest zawe˛ żana tak, aby
ograniczyła badanie korelacji miedzy
˛
pikselami z globalnej na lokalna.
˛ Wynika to
z założenia, że korelacja lokalna stanowi wieksze
˛
znaczenie w informacji przestrzennej niż globalna.
Autokorelogram to korelogram ograniczony do tych komórek C(c1 , c2 , d) tablicy,
dla których c1 = c2 = c, czyli C(c, c, d) = C(c, d). Autokorelogram zapamietuje
˛
wiec
˛
korelacje jedynie pomie˛ dzy takimi samymi kolorami, przez co jest mniej dokładny,
lecz wymaga o wiele mniej pamieci
˛ do przechowania tablicy.
3.1.7. Entropia informacyjna Shannona
Entropia informacyjna Shannona2 [103] służy do mierzenia średniej ilości informacji danego źródła generujacego
˛
niezależne wiadomości. Nazywana jest także
miara:
˛
— nieuporzadkowania,
˛
— nieoznaczoności,
— losowości,
— nieczystości.
Rysunek 3.2 przedstawia dwa grafy: graf bed
˛ acy
˛ schematem teoretycznym poj˛ecia entropii oraz graf powstały w wyniku zastosowania teorii entropii do obrazu
cyfrowego. Jak widać, w ogólnym przypadku źródło informacji przekazuje odbiornikowi informacji kolejne wiadomości, przy czym każda z nich jest niezależna od
poprzednich i kolejnych. Źródłem generujacym
˛
wiadomości może być obraz cyfrowy [61, s. 1–4]. Wówczas wiadomościa˛ jest wartość (inaczej: kolor, jasność)
piksela (nie mylić z ilościa˛ pikseli, czyli wielkościa˛ rastra), a zbiór kolorów jest
dyskretny. Zakłada sie˛ , że jeśli w obrazie wystepuje
˛
N różnych kolorów pikseli
oznaczonych liczbami 1, 2, ..., N , a prawdopodobieństwo pojawienia sie˛ i-tego koloru
wynosi p(i), wówczas entropie˛ E definiuje sie˛ — przy założeniu 0log2 0 = 0 — jako:
E=
N
X
i=1
N
p(i)log2
X
1
=−
p(i)log2 p(i)
p(i)
(3.22)
i=1
Jednostka takiej wielkości to bity na wiadomość, a w szczególności — w przypadku
obrazów — bity na kolor. Wytłumaczenie sensu tego wzoru jest nastepuj
˛
ace.
˛
Jeden kolor oznaczony liczba˛ i, pojawiajacy
˛ sie˛ z prawdopodobieństwem p(i), niesie
1
za soba˛ I(i) = log2 p(i)
= −log2 p(i) informacji. Wykres zależności informacji I(i)
od prawdopodobieństwa p(i) koloru i pokazuje rysunek 3.3. Jak widać, logarytm
z odwrotności prawdopodobieństwa jest stosowany po to, aby uzyskać zgodność
z intuicyjnym postrzeganiem pojecia
˛
informacji, według którego zjawiska rzadkie
(mało prawdopodobne) niosa˛ duża˛ informacje,
˛ natomiast zjawiska czeste
˛
(bardzo
prawdopodobne) mała˛ informacje.
˛ Zgodnie z ta˛ intuicja˛ — w szczególnym przypadku — zjawisko niemożliwe niesie nieskończona˛ informacje,
˛ a zjawisko pewne
informacje˛ zerowa.
˛ Im dany kolor i jest bardziej prawdopodobny (im wieksze
˛
p(i)),
tym mniejsza˛ informacje˛ I(i) za soba˛ niesie.
2
Poj˛ecie entropii zostało pierwotnie zdefiniowane przez Claude’a E. Shannona (1916–2001).
39
3.1. Deskryptor całego obrazu
źródło
informacji
niezależne
wiadomości
odbiornik
informacji
zależne (!)
kolory pikseli
Rysunek 3.2. Schemat teoretyczny pojecia
˛
entropii w postaci grafu (wyżej) oraz
szczególny przypadek tego schematu w kontekście obrazu cyfrowego (niżej).
I(i)
3
2
p(i)
1
0.1
0.3
0.5
0.7
0.9
Rysunek 3.3. Wykres zależności informacji I(i) od prawdopodobieństwa p(i) koloru
i.
¯ czyli po prostu entropia E, to średnia ważona wszystkich
Średnia informacja I,
N informacji I(i), gdzie waga˛ i-tej informacji jest prawdopodobieństwo p(i) koloru
i:
p(1)I(1) + p(2)I(2) + ... + p(N )I(N )
p(1)I(1) + p(2)I(2) + ... + p(N )I(N )
=
I¯ =
p(1) + p(2) + ... + p(N )
1
= p(1)I(1) + p(2)I(2) + ... + p(N )I(N ) =
N
X
p(i)I(i) = E (3.23)
i=1
W zwiazku
˛
z tym, aby obliczyć entropie˛ — celem posłużenia sie˛ nia˛ jako cecha˛ obrazu — należy znać rozkład prawdopodobieństwa kolorów pikseli w obrazie. Rozkład ten można utożsamiać z histogramem obrazu. Wówczas prawdopodobieństwo danego koloru odpowiada (jest proporcjonalne do) wysokości słupka histogramu odpowiadajacego
˛
temu kolorowi3 . Nastepuje
˛
tu ciche założenie, że kolor
danego piksela jest zmienna˛ losowa˛ niezależna˛ wzgledem
˛
kolorów innych pikseli,
na przykład pikseli sasiednich,
˛
co w ogólności nie jest prawda,
˛ ponieważ obraz
charakteryzuje sie˛ wyste˛ powaniem zależności przestrzennych pomiedzy
˛
kolorami
pikseli znajdujacych
˛
sie˛ we wzglednie
˛
małej odległości od siebie [60, s. 8]. Analiza
wzoru 3.22 pozwala stwierdzić, że entropia E osiaga
˛ wartość maksymalna˛ dla jednostajnego rozkładu prawdopodobieństw p(i), czyli równych prawdopodobieństw
p(1) = p(2) = ... = p(N ) = N1 :
N
X
1
1
max
E=−
log2 = log2 N
N
N
{p(i):i=1,2,...,N }
(3.24)
i=1
3
Istnieja˛ dwie odmiany histogramu — histogram oparty na liczności (nieznormalizowany) oraz
na prawdopodobieństwie (znormalizowany). W przypadku histogramu opartego na prawdopodobieństwie każdy słupek reprezentuje ilość pikseli o danym kolorze podzielona˛ na ilość wszystkich pikseli,
czyli liczb˛e z zakresu [0; 1], która może od razu być traktowana jako prawdopodobieństwo pojawienia
sie˛ piksela o tym kolorze. W przypadku histogramu licznościowego każdemu słupkowi przyporzad˛
kowana jest jedynie ilość pikseli o danym kolorze, wi˛ec aby otrzymać wspomniane już prawdopodobieństwo, należy dodatkowo ja˛ znormalizować, czyli podzielić przez ilość wszystkich pikseli.
3.1. Deskryptor całego obrazu
40
natomiast wartość minimalna˛ 0 w sytuacji, gdy istnieje kolor piksela, dla którego
prawdopodobieństwo jest jednostkowe, czyli ∃i p(i) = 1.
Obliczenie entropii obrazu bazuje na jego histogramie i polega na zmapowaniu
ciagu
˛ kolorów (ciagu
˛ wartości słupków histogramu) na jedna˛ liczbe˛ (wartość entropii), czyli stratnym przejściu z wielowymiarowej cechy obrazu na jednowymiarowa.
˛
Dlatego entropia jako cecha obrazu rozróżnia obrazy o wiele słabiej niż histogram,
jednak jej zaleta˛ jest bardzo mała ilość pamieci
˛ potrzebnej na jej przechowanie.
3.1.8. Punkt charakterystyczny
W każdym obrazie można znaleźć pewne punkty charakterystyczne [93] (ang.
keypoints). Punkt charakterystyczny obrazu jest to szczególne miejsce na obrazie,
skoncentrowane wokół jakiegoś piksela i zaczepione na jakimś obiekcie (np. na
bombce od choinki sfotografowanej z pewnej niemałej odległości, która wówczas
widziana jest jako niezbyt duży acz wyraźny punkt). Dodatkowo, punkt jest charakterystyczny wtedy, gdy wydaje sie,
˛ że wystapi
˛ on również na innych obrazach,
na których wyste˛ puje ten sam obiekt.
Punkt charakterystyczny obrazu można nazwać lokalna˛ cecha˛ (lokalnym deskryptorem) obrazu, ponieważ zwiazany
˛
jest on nie z wszystkimi pikselami należa˛
cymi do obrazu, lecz tylko z ich cześci
˛ a,
˛ skupiona˛ dodatkowo na pewnym spójnym
fragmencie tego obrazu.
Choć to oczywiste, warto dodać, że punktem charakterystycznym może być nie
tylko ciemne punktowe zaburzenie na jasnym tle, ale również zaburzenie jasne na
tle ciemnym. Bardzo cze˛ sto za punkty charakterystyczne uznawane zostaja˛ punkty
leżace
˛ na krawe˛ dzi (granicy) dwóch obiektów, cechujacej
˛
sie˛ wysokim kontrastem.
Istnieja˛ dwa główne algorytmy do detekcji punktów charakterystycznych: SIFT
oraz SURF. Obie metody opisane sa˛ poniżej.
Skaloniezmiennicze przekształcanie cech
Algorytm skaloniezmienniczego przekształcania cech [18] (ang. Scale-Invariant
Feature Transform, SIFT) został zaproponowany przez Davida Lowe’a w roku 1999
[17]. Jak sama nazwa wskazuje, jest on szczególnie odporny na zmiany skali obrazu, tzn. znajac
˛ punkty charakterystyczne na obrazie oryginalnym (tym znajdujacym
˛
sie˛ w bazie danych) oraz obliczajac
˛ punkty charakterystyczne na bardzo
podobnym obrazie wejściowym, potrafi skojarzy te dwa obrazy ze soba˛ nawet wtedy,
jeśli różni je skala, tzn. jeden jest powiekszony,
˛
a drugi pomniejszony. Warunkiem
jest to, aby odpowiednie odległości pomiedzy
˛
poszczególnymi punktami charakterystycznymi w jednym obrazie były proporcjonalne wobec odpowiadajacych
˛
im odległości w obrazie drugim. Algorytm ten jest również odporny na zmiane˛ położenia
i rotacje˛ obrazu, a także — z pewna˛ dokładnościa˛ — zmiane˛ kata
˛ widzenia. Pewnym
problemem sa˛ dla niego zmiany oświetlenia. Algorytm można streścić w czterech
krokach [58, s. 2–5]:
1. detekcja ekstremów dla różnych skal obrazu (używajac
˛ filtru różnicowego
Gaussa (ang. Difference of Gaussians, DoG), omówionego w podsekcji 2.3.9),
2. lokalizacja punktów charakterystycznych,
3. nadanie orientacji punktom charakterystycznym,
4. wyliczenie (128-elementowych) deskryptorów dla punktów charakterystycznych.
Wada˛ metody SIFT może być to, że w obrazie o wiekszej
˛
szczegółowości (ostrości) znalezionych zostanie wiecej
˛
punktów charakterystycznych niż w obrazie mniej
3.1. Deskryptor całego obrazu
41
szczegółowym. Rysunek 3.4 prezentuje dwa obrazy podobne do siebie (dla przejrzystości połaczone
˛
w jeden). Z kolei rysunek 3.5 przedstawia te same dwa obrazy
z zaznaczonymi na zielono skojarzeniami odpowiednich punktów charakterystycznych znalezionych metoda˛ SIFT. Rysunek ten został wygenerowany przez biblioteke˛
OpenCV, opisana˛ w sekcji 6.6.
Rysunek 3.4. Dwa obrazy podobne do siebie (dla przejrzystości połaczone
˛
w jeden).
Rysunek 3.5. Dwa obrazy podobne do siebie (dla przejrzystości połaczone
˛
w jeden)
z zaznaczonymi na zielono skojarzeniami odpowiednich punktów charakterystycznych metody SIFT. Źródło generacji punktów charakterystycznych i ich skojarzeń:
własne na podstawie biblioteki OpenCV.
Przyspieszone silne cechy
Algorytm przyspieszonych silnych cech4 [29] (ang. Speeded Up Robust Features, SURF) to algorytm służacy
˛ do — podobnie jak SIFT, bo na nim bazujacy
˛ —
wykrywania lokalnych cech obrazu. Po raz pierwszy został zademonstrowany przez
Herberta Bay’a w roku 2006. Jest oparty na dwuwymiarowych falkach Haara.
Deskryptory punktów charakterystycznych składaja˛ sie˛ z 64 elementów. Metoda
SURF ma przewage˛ nad metoda˛ SIFT pod wzgledem
˛
predkości
˛
działania, co zostało
potwierdzone w testach szybkościowych omówionych w sekcji 6.10.2. Jednak jest
4
Polskie tłumaczenie można w tym wypadku uznać za dosyć niefortunne.
3.2. Deskryptor regionu na obrazie
42
ona mało odporna na rotacje˛ i zmiany oświetlenia. Rysunek 3.4 prezentuje dwa
obrazy podobne do siebie (dla przejrzystości połaczone
˛
w jeden). Z kolei rysunek
3.6 przedstawia te same dwa obrazy z zaznaczonymi na zielono skojarzeniami odpowiednich punktów charakterystycznych znalezionych metoda˛ SURF. Rysunek ten
został wygenerowany przez biblioteke˛ OpenCV, opisana˛ w sekcji 6.6.
Rysunek 3.6. Dwa obrazy podobne do siebie (dla przejrzystości połaczone
˛
w jeden)
z zaznaczonymi na zielono skojarzeniami odpowiednich punktów charakterystycznych metody SURF. Źródło generacji punktów charakterystycznych i ich skojarzeń:
własne na podstawie biblioteki OpenCV.
3.2. Deskryptor regionu na obrazie
Deskryptor regionu to algorytm opisujacy
˛ region obiektu na obrazie, czyli jego
obwiednie˛ wraz z wne˛ trzem. Wyszukiwanie danego obiektu na podstawie regionów
uwzgle˛ dnia zarówno jego kształt — wynikajacy
˛ z jego konturu — jak i zmienność
kolorystyczna,
˛ tkwiac
˛ a˛ w jego wnetrzu.
˛
Rysunki 3.7, 3.8 oraz 3.9 przedstawiaja˛
proces wycinania regionów danego obiektu na różnych obrazach.
Rysunek 3.7. Różne obrazy przedstawiajace
˛ ten sam obiekt. Źródła (od lewej): Wikimedia Commons http://commons.wikimedia.org/ (dostep:
˛
01.03.2014), SocialTravel http://www.socialtravel.pl/ (dostep:
˛ 01.03.2014).
43
3.2. Deskryptor regionu na obrazie
Rysunek 3.8. Obrazy z nałożonymi konturami na obiekt. Źródła (od lewej): Wikimedia Commons http://commons.wikimedia.org/ (dostep:
˛ 01.03.2014), SocialTravel http://www.socialtravel.pl/ (dostep:
˛ 01.03.2014).
Rysunek 3.9. Wyciete
˛
regiony obiektów. Źródła (od lewej): Wikimedia Commons
http://commons.wikimedia.org/ (dostep:
˛
01.03.2014), SocialTravel
http://www.socialtravel.pl/ (dostep:
˛ 01.03.2014).
3.2.1. Niezmiennik momentowy
Moment obrazu (ang. image moment) to ogólna nazwa pewnej funkcji wyliczanej
na cze˛ ści lub wszystkich pikselach obiektu należacego
˛
do obrazu. Moment obrazu
stosowany jest po etapie segmentacji i — odpowiednio zdefiniowany — potrafi identyfikować obiekt (obszar), na którym został wyliczony — podczas poszukiwania go
na innych obrazach. Wyróżnia sie˛ moment geometryczny, centralny, centralny
znormalizowany i niezmiennik momentowy. Ostatecznie, w rozpoznawaniu obrazów używany jest ten ostatni.
Moment geometryczny
Moment geometryczny [86, s. 157–158] (inaczej: zwykły, surowy) rzedu
˛
p + q (dla
p, q = 0, 1, 2, ...) funkcji ciagłej
˛
dwuwymiarowej f (x, y) wyraża sie˛ wzorem:
Z +∞ Z +∞
mpq =
xp y q f (x, y) dxdy
(3.25)
−∞
−∞
Dla funkcji o dyskretnej dziedzinie, takiej jak obraz cyfrowy, aproksymujac
˛ podwójna˛ całke˛ podwójna˛ suma,
˛ moment geometryczny rzedu
˛
p ze wzgledu
˛
na wiersze
44
3.2. Deskryptor regionu na obrazie
i oraz rze˛ du q ze wzgle˛ du na kolumny j wyraża sie˛ podobnym wzorem:
mpq =
N
−1M
−1
X
X
ip j q f (i, j)
(3.26)
i=0 j=0
Oczywiście zarówno całkowanie — w przypadku dziedziny ciagłej
˛
— jak i sumowanie — dla dziedziny dyskretnej — musi odbywać sie˛ tylko wewnatrz
˛
granic interesujacego
˛
obszaru, czyli — w przypadku obrazów cyfrowych — wewnatrz
˛
granic
obiektu znajdujacego
˛
sie˛ na obrazie a nie całego obrazu. Moment geometryczny
obiektu nie jest jeszcze niezmienniczy pod wzgledem
˛
translacji, rotacji czy zmiany
skali obiektu.
Moment centralny
Wprowadza sie˛ poje˛ cie momentu centralnego [86, s. 158–159], który jest niezależny od położenia obiektu na obrazie, przez co jest niezmienniczy wzgledem
˛
translacji obiektu na obrazie.
Moment centralny rze˛ du p + q funkcji dwuwymiarowej f (x, y) wyraża sie˛ wzorem:
Z +∞ Z +∞
Mpq =
(x − x̄)p (y − ȳ)q f (x, y) dxdy
(3.27)
−∞
−∞
gdzie punkt (x̄, ȳ) to tzw. centroid, którego współrzedne
˛
wyliczane sa˛ z poniższych
zależności:
m10
x̄ =
(3.28)
m00
m01
(3.29)
ȳ =
m00
Dla obrazu cyfrowego (funkcji o dyskretnej dziedzinie) moment centralny wyraża
si˛e wzorem:
N
−1M
−1
X
X
Mpq =
(i − ī)p (j − j̄)q f (i, j)
(3.30)
i=0 j=0
w którym współrze˛ dne centroidu (ī, j̄) — interpretowanego jako centrum obrazu5 ,
jak na rysunku 3.10 — pochodza˛ z wzorów:
5
ī =
m10
m00
(3.31)
j̄ =
m01
m00
(3.32)
Z prostej analizy wzorów 3.31 oraz 3.32 wynika, że każda z dwóch współrz˛ednych centroidu to
średnia ważona współrz˛ednych pikseli należacych
˛
do obiektu (odpowiednio: współrz˛ednych horyzontalnych i lub wertykalnych j), gdzie wagami sa˛ jasności pikseli f (i, j).
45
3.2. Deskryptor regionu na obrazie
(i, j)
Rysunek 3.10. Centroid obiektu na obrazie.
Momenty centralne można wyrazić za pomoca˛ momentów geometrycznych [86,
s. 158–161]:
M00 = m00
(3.33)
M01 = m01 − (m01 /m00 )m00 = 0
(3.34)
M10 = m10 − (m10 /m00 )m00 = 0
(3.35)
M11 = m11 − m10 m01 /m00 = m11 − īm01 = m11 − j̄m10
(3.36)
M20 = m20 − m210 /m00 = m20 − īm10
(3.37)
M02 = m02 − m201 /m00 = m02 − j̄m01
(3.38)
M21 = m21 − 2m11 ī − m20 j̄ + 2m01 ī2
(3.39)
M12 = m12 − 2m11 j̄ − m02 ī + 2m10 j̄ 2
(3.40)
M30 = m30 − 3m20 ī + 2m10 ī2
(3.41)
M03 = m03 − 3m02 j̄ + 2m01 j̄ 2
(3.42)
46
3.2. Deskryptor regionu na obrazie
Moment centralny znormalizowany
Moment centralny znormalizowany [86, s. 160] — jak sama nazwa wskazuje —
bazuje na momencie centralnym, a wiec
˛ jest odporny na translacje.
˛ Oprócz tego
jest on odporny na zmiane˛ skali obiektu na obrazie, czyli na jego powiekszenie
˛
lub
pomniejszenie. Jego wzór — przy założeniu p + q ≥ 2 — jest nastepuj
˛
acy:
˛
Npq =
Mpq
p+q
m002
+1
(3.43)
Moment centralny znormalizowany nie jest jednak odporny na rotacje˛ obiektu.
Niezmiennik momentowy
Niezmiennik momentowy [86, s. 159–160] jest dodatkowo odporny na rotacje˛
obiektu. Wzory na niezmienniki momentowe korzystaja˛ z wzorów na momenty
centralne znormalizowane:
M1 = N20 + N02
(3.44)
2
M2 = (N20 − N02 )2 + 4N11
(3.45)
M3 = (N30 − 3N12 )2 + (3N21 − N03 )2
(3.46)
M4 = (N30 + N12 )2 + (N21 + N03 )2
(3.47)
M5 = (N30 − 3N12 )(N30 + N12 )[(N30 + N12 )2 − 3(N21 + N03 )2 ]
+ (3N21 − N03 )(N21 + N03 )[3(N30 + N12 )2 − (N21 + N03 )2 ] (3.48)
M6 = (N20 − N02 )[(N30 + N12 )2 − (N21 + N03 )2 ] + 4N11 (N30 + N12 )(N21 + N03 )
(3.49)
2
M7 = N20 N02 − N11
(3.50)
2
2
M8 = N30 N12 + N21 N03 − N12
− N21
(3.51)
47
3.2. Deskryptor regionu na obrazie
2
2
M9 = N20 (N21 N03 − N12
) + N02 (N03 N12 − N21
) − N11 (N30 N03 − N21 N12 )
(3.52)
2
M10 = (N30 N03 − N12 N21 )2 − 4(N30 N12 − N21
)(N03 N21 − N12 )
(3.53)
Pierwsze siedem wzorów (3.44 – 3.50) zostało pierwotnie zaproponowanych przez
Ming-Kuei Hu. Niezmienniki momentowe można wyrazić bezpośrednio przez momenty centralne:
M1 = (M20 + M02 )/m200
(3.54)
2
M2 = {(M20 − M02 )2 + 4M11
}/m400
(3.55)
M3 = {(M30 − 3M12 )2 + (3M21 − M03 )2 }/m500
(3.56)
M4 = {(M30 + M12 )2 + (M21 + M03 )2 }/m500
(3.57)
M5 = {(M30 − 3M12 )(M30 + M12 )[(M30 + M12 )2 − 3(M21 + M03 )2 ]
+ (3M21 − M03 )(M21 + M03 )[3(M30 + M12 )2 − (M21 + M03 )2 ]}/m10
00 (3.58)
M6 = {(M20 − M02 )[(M30 + M12 )2 − (M21 + M03 )2 ]
+ 4M11 (M30 + M12 )(M21 + M03 )}/m700 (3.59)
2
M7 = {M20 M02 − M11
}/m400
(3.60)
2
2
M8 = {M30 M12 + M21 M03 − M12
− M21
}/m500
(3.61)
2
2
M9 = {M20 (M21 M03 − M12
) + M02 (M03 M12 − M21
)
− M11 (M30 M03 − M21 M12 )}/m700 (3.62)
2
M10 = {(M30 M03 − M12 M21 )2 − 4(M30 M12 − M21
)(M03 M21 − M12 )}/m10
00
(3.63)
Każdy niezmiennik momentowy jest — z pewna˛ dokładnościa˛ — niezmienniczy
ze wzgle˛ du na:
48
3.2. Deskryptor regionu na obrazie
— położenie (odporny na translacje),
˛
— skale˛ (odporny na skalowanie),
— orientacje˛ (odporny na rotacje).
˛
Wektorem cech stanowiacym
˛
deskryptor obrazu może być 10-wymiarowy wektor
(M1 , M2 , M3 , ..., M10 ). W praktyce wymiarowość takiego wektora można zmniejszyć,
pozostawiajac
˛ tylko te niezmienniki, które okazały sie˛ najlepsze podczas testów.
3.2.2. Moment Zernike’a
Moment Zernike’a [37] [94, s. 25–29] (ang. Zernike moment) służy do tego
samego celu co moment geometryczny — identyfikowania regionu na obrazie. Opisanie momentu Zernike’a wymaga najpierw zdefiniowania wielomianu Zernike’a
(ang. Zernike polynomial). Wielomian Zernike’a ma postać:
Vn±m (ρ, θ) = Rnm (ρ)e±imθ
(3.64)
gdzie n, m to liczby naturalne takie, że 0 ≤ m ≤ n oraz różnica n − m jest parzysta, ρ
oraz θ to współrze˛ dne biegunowe punktu (długość promienia wodzacego
˛
i wartość
m
kata
˛ skierowanego), natomiast Rn (ρ) to wielomian radialny o strukturze:
n−m
2
Rnm (ρ)
=
X
(−1)s
s=0
s!( n+m
2
(n − s)!
ρn−2s
− s)!( n−m
−
s)!
2
(3.65)
Majac
˛ zdefiniowany wielomian Zernike’a można zdefiniować moment (zespolony)
Zernike’a rze˛ du n, m funkcji f (x, y):
ZZ
n+1
An,m =
f (x, y)Vnm (ρ, θ)dxdy
(3.66)
Π
x2 +y 2 ≤1
gdzie n = 0, 1, 2, ..., +∞, m jest liczba˛ całkowita˛ taka,
˛ że 0 ≤ |m| ≤ n i różnica
pn − |m|
jest parzysta, ρ oraz θ to współrzedne
˛
biegunowe punktu (x, y), a wiec
˛ ρ = x2 + y 2
i θ = arctan( xy ), Vnm (ρ, θ) to wielomian (zespolony) Zernike’a, z oznacza sprze˛ żenie
liczby zespolonej z.
Istnieja˛ również rzeczywiste wielomiany Zernike’a (kolejno: parzysty i nieparzysty):
Wnm (ρ, θ) = Rnm (ρ)cos(mθ)
(3.67)
Znm (ρ, θ) = Rnm (ρ)sin(mθ)
(3.68)
Wówczas rzeczywisty moment Zernike’a — używany dla obrazu cyfrowego — przybiera postać:
ZZ
2(n + 1)
Cn,m =
f (x, y)Wnm (ρ, θ)dxdy
(3.69)
Π
x2 +y 2 ≤1
Sn,m
2(n + 1)
=
Π
ZZ
f (x, y)Znm (ρ, θ)dxdy
(3.70)
x2 +y 2 ≤1
Prawdziwe sa˛ naste˛ pujace
˛ zwiazki,
˛
łacz
˛ ace
˛ moment Zernike’a zespolony i rzeczywisty:
Cn,m = 2<(An,m )
(3.71)
49
3.2. Deskryptor regionu na obrazie
Sn,m = −2=(An,m )
(3.72)
An,m = An,−m
(3.73)
Moment Zernike’a jest inwariantny ze wzgledu
˛
na obrót i odbicie obrazu. Poza
tym umożliwia — w przeciwieństwie do standardowego momentu geometrycznego
— rekonstrukcje˛ obrazu.
3.2.3. Cecha Tamury
Tekstura [82] to cecha fragmentu obrazu, który — pod wzgledem
˛
doznań wzrokowych człowieka — wyróżnia sie˛ pewna˛ regularnościa˛ i jednorodnościa,
˛ a także
posiada charakterystyczne rozłożenie swoich elementów, które razem tworza˛ pewien wzór. Przykłady tekstur to kraciasta tkanina, marmur, dachówka czy drewno
ze słojami. Innymi słowy tekstura jest własnościa˛ charakteryzujac
˛ a˛ harmonijny kawałek obrazu. Regularność tekstur przeniesionych ze świata cyfrowego do świata
rzeczywistego da sie˛ bardzo czesto
˛
odczuwać dotykiem.
Identyfikacja tekstury jest o wiele trudniejsza od analizy koloru, ponieważ podczas gdy kolor jest cecha˛ pojedynczego piksela i bardzo łatwo go określić, tekstura
jest cecha˛ obszaru pikseli, z których każdy trzeba rozpatrywać w kontekście do
pozostałych.
Hideyuki Tamura wyróżnił sześć podstawowych cech tekstury, nazywanych cechami Tamury [56, s. 79] [74, s. 327–328] [5, r. Texture detectors, s. 7–12] [30,
s. 4–5] [69, s. 3–7], które odpowiadaja˛ wizualnej percepcji człowieka:
— gruboziarnistość,
— kontrastowość,
— regularność,
— kierunkowość,
— liniowość,
— chropowatość.
Każda z powyższych cech reprezentowana jest jedna˛ liczba˛ rzeczywista.
˛ Przykładowo, dla danej tekstury można wyliczać trzy najbardziej popularne cechy, tj. gruboziarnistość, kontrast i kierunkowość, a nastepnie
˛
w tak zdefiniowanej przestrzeni
trójwymiarowej porównywać tekstury za pomoca˛ wybranej miary niepodobieństwa.
Gruboziarnistość
Gruboziarnistość (ang. coarseness), nazywana również skrośnościa,
˛ informuje
o wielkości teksela, czyli jednostki elementarnej tekstury. Jest wiec
˛ zależna od
skali tekstury (oraz obrazu).
Wylicza sie˛ ja˛ w kilku krokach. Dla każdego piksela (i, j) wyliczana jest wartość
Ak (i, j), czyli średnia wartość funkcji jasności f w obrebie
˛
kwadratowego sasiedztwa
˛
k
k
(okna) o wymiarach 2 × 2 dla kilku wartości k (np. k = 1, 2, ..., 5):
Pi+2k−1 −1 Pj+2k−1 −1
Ak (i, j) =
i0 =i−2k−1
j 0 =j−2k−1
2k · 2k
f (i0 , j 0 )
=
k−1 −1 j+2k−1 −1
i+2X
X
i0 =i−2k−1
j 0 =j−2k−1
f (i0 , j 0 )
22k
(3.74)
Nast˛epnie dla każdego piksela (i, j) wybierana jest taka wartość k = kopt , dla której
wielkości:
Ek,h (i, j) = |Ak (i, j + 2k−1 ) − Ak (i, j − 2k−1 )|
(3.75)
Ek,v (i, j) = |Ak (i + 2k−1 , j) − Ak (i − 2k−1 , j)|
(3.76)
50
3.2. Deskryptor regionu na obrazie
przyjmuja˛ wartości maksymalne. Odpowiada to poszukiwaniu – zarówno w kierunku poziomym jak i pionowym — okresu tekstury. Jako że długość i szerokość
teksela sa˛ — w ogólnym przypadku — niezależne od siebie, pomiary w obu wymiarach trzeba przeprowadzać niezależnie od siebie. Wtedy dla piksela (i, j) zapamie˛
k
opt
tuje sie˛ wartość Sopt (i, j) = 2 . Ostatecznie gruboziarnistość Ccoars jest średnia˛
arytmetyczna:
˛
M −1 N −1
1 X X
Ccoars =
Sopt (i, j)
(3.77)
MN
i=0 j=0
Kontrastowość
Kontrastowość (ang. contrast) informuje o zakresie poziomów jasności pikseli
tekstury, która przekłada si˛e na jakość krawedzi
˛
w teksturze. Kontrast Cconstr
definiuje sie˛ jako:
σ
Ccontr = n
(3.78)
α4
µ4
(3.79)
α4 = 4
σ
gdzie α4 to kurtoza, µ4 moment centralny IV rzedu,
˛
σ odchylenie standardowe.
Wszystkie te trzy parametry omówione sa˛ w sekcji 3.1.4. Optymalna wartość
n, wyznaczona doświadczalnie przez Tamure˛ tak, aby kontrastowość zgadzała sie˛
z ludzkim jej postrzeganiem, wynosi:
n=
1
4
(3.80)
Kierunkowość
Kierunkowość (ang. directionality) informuje o stopniu określenia orientacji
przez wzór tekstury [63, s. 1–2]. W pierwszej kolejności dla każdego piksela
tekstury naste˛ puje wykrywanie krawedzi
˛
poziomej i pionowej za pomoca˛ dwóch
masek splotu filtru krawe˛ dziowego (głównie Prewitta, omówionego w podsekcji
2.3.6). Majac
˛ te dwie wartości, ∇H oraz ∇V , oblicza sie˛ w punkcie danego piksela
˛
|∇G| (mierzacej
˛
siłe˛ krawedzi)
˛
i kata
˛
gradient składajacy
˛ sie˛ z wartości bezwzglednej
θ:
|∇H| + |∇V |
|∇G| =
(3.81)
2
Π
∇V
θ = arctan
+
(3.82)
∇H
2
Nast˛epnie każdy piksel, dla którego intensywność |∇G| gradientu jest wieksza
˛
niż
wartość graniczna |∇G|min , uczestniczy w budowie histogramu prawdopodobieństw
krawe˛ dzi HD . Jest to histogram, który kumuluje prawdopodobieństwa poszczególnych katów
˛
θ. Tak skonstruowany histogram jest w stanie ujawnić kierunki
(katy)
˛ najcze˛ ściej sie˛ powtarzajace
˛ na podstawie analizy jego szczytów (maksimów).
W przypadku np szczytów dla każdego szczytu p można zdefiniować wielkość wp ,
b˛edac
˛ a˛ zbiorem katów
˛
θ od najbliższej lewej doliny szczytu p do najbliższej prawej.
Po oznaczeniu kata
˛ θ szczytu p jako φp można interpretować wp jako wzgórze ze
szczytem p o kacie
˛
φp . Jeśli za HD (φ) przyjmie sie˛ wartość histogramu HD w punkcie φ, wówczas kierunkowość można określić jako:
X X
Cdir =
(φ − φp )2 HD (φ)
(3.83)
p φ∈wp
51
3.2. Deskryptor regionu na obrazie
Liniowość
Liniowość (ang. linelikeness) informuje o stopniu wydłużenia, kolistości czy
elipsoidalności teksela. Odnosi sie˛ wiec
˛ do kształtu jednostki podstawowej. Aby
ja˛ obliczyć, należy najpierw znaleźć regiony zawierajace
˛ linie (krawedzie),
˛
wyznaczyć dla pikseli należacych
˛
do nich kierunki linii, a nastepnie
˛
stworzyć macierz
współwyste˛ powań6 (ang. co-occurrence matrix) kolejnych, skwantowanych kierunków wyste˛ pujacych
˛
dla sasiednich
˛
pikseli oddalonych od siebie o pewna˛ wartość.
Na samym końcu konieczne jest przetransformowanie macierzy współwystapie
˛ ń
w jedna˛ liczbe˛ , tutaj zdefiniowana˛ jako:
P P
2Π
i
j Pd (i, j)cos[(i − j) n ]
P P
Clin =
(3.84)
i
j Pd (i, j)
gdzie Pd jest macierza˛ współwystepowa
˛
ń (o wymiarach n · n) dla odległości miedzy
˛
pikselami wynoszacej
˛
d, natomiast Pd (i, j) to element tej macierzy, czyli czestotli˛
wość zdarzenia polegajacego
˛
na tym, że istnieja˛ dwa piksele należace
˛ do tekstury
o wzajemnej odległości od siebie wynoszacej
˛
d takie, że kierunek krawedzi
˛
w jednym
pikselu to i, a w drugim j.
Regularność
Regularność (ang. regularity) informuje o stopniu uporzadkowania
˛
i powtarzalności wzoru tekstury, czyli o poziomie zróżnicowania rozmieszczenia tekselów. Jeśli
teksel powtarza sie˛ cyklicznie i każde jego powtórzenie posiada taki sam rozmiar
i kierunek, wówczas tekstura uważana jest za regularna.
˛ W celu obliczenia regularności tekstura dzielona jest na podobrazy (podtekstury) — zachodzace
˛ na siebie
lub nie. Dla każdego podregionu niezależnie liczona jest gruboziarnistość, kontrastowość, kierunkowość i liniowość. Nastepnie
˛
oblicza sie˛ odchylenia standardowe
tych czterech cech, iterujac
˛ po wszystkich podregionach. Regularność definiuje
si˛e jako wyrażenie bazujace
˛ na kombinacji liniowej wspomnianych czterech cech
Tamury:
Creg = 1 − r(σcoars + σcontr + σdir + σlin )
(3.85)
gdzie r jest współczynnikiem normalizujacym,
˛
natomiast σx odchyleniem standardowym cechy x liczonej dla wszystkich wartości tej cechy, iterujac
˛ po wszystkich
podregionach. Czynnik normalizujacy
˛ może przyjac
˛ wartość:
r=
1
4
(3.86)
Chropowatość
Chropowatość (ang. roughness) informuje o wrażeniach dotykowych tekstury.
Jest miara˛ jej nierówności czy szorstkości. Chropowatość definiuje sie˛ jako sume˛
gruboziarnistości Ccoars i kontrastowości Ccontr :
Crough = Ccoars + Ccontr
6
(3.87)
Macierz współwyst˛epowań (ang. co-occurrence matrix) nazywana jest także macierza˛ współpojawień, macierza˛ przejść lub macierza˛ koincydencji.
3.3. Deskryptor konturu na obrazie
52
3.3. Deskryptor konturu na obrazie
Deskryptor konturu to algorytm opisujacy
˛ kontur obiektu na obrazie, czyli jego
obwiednie˛ (sylwetke˛ ) bez wne˛ trza. Wyszukiwanie danego obiektu na podstawie konturów jest przydatne wówczas, gdy obiekt ten — przykładowo — przyjmuje różne
kolory w zależności od okoliczności. Wówczas zignorowanie w analizie obiektu pikseli należacych
˛
do wne˛ trza i rozpatrywanie tylko pikseli jego obrysu jest podejściem
najbardziej skutecznym. W przeciwnym wypadku różnice w kolorach obiektu mogłyby na tyle zróżnicować jego deskryptory na różnych obrazach go przedstawiaja˛
cych, że uniemożliwiłoby to ich wyszukiwanie. Przedstawiony problem zilustrowany
jest na rysunkach 3.11, 3.12 oraz 3.13.
Rysunek 3.11. Różne obrazy przedstawiajace
˛
ten sam obiekt w różnej kolorystyce. Źródła (od lewej): Europa bez granic http://europabezgranic.com.pl/
(dostep:
˛
01.03.2014), City Photo
http://www.city-photo.org/ (dostep:
˛
01.03.2014), Globtroter http://www.globtroter.pl/ (dostep:
˛
01.03.2014), Flog
http://beautyfullily.flog.pl/ (dostep:
˛ 01.03.2014).
Rysunek 3.12. Obrazy z nałożonymi konturami na obiekt.
Źródła (od lewej):
Europa bez granic
http://europabezgranic.com.pl/ (dostep:
˛
01.03.2014), City Photo http://www.city-photo.org/ (dostep:
˛
01.03.2014),
Globtroter
http://www.globtroter.pl/ (dostep:
˛
01.03.2014),
Flog
http://beautyfullily.flog.pl/ (dostep:
˛ 01.03.2014).
53
3.3. Deskryptor konturu na obrazie
Rysunek 3.13. Kontury obiektów bez obrazów.
3.3.1. Współczynnik kształtu
Do rozróżniania obiektów można definiować i wyliczać na nich różne współczynniki kształtu [87, s. 263–269]. Najpopularniejsze współczynniki kształtu bazuja˛ na
podstawowych miarach opisujacych
˛
rozmiary obiektów, takich jak pole powierzchni
czy długość kraw˛edzi. Pole powierzchni obiektu to liczba pikseli, które należa˛ do
spójnego obszaru tworzacego
˛
ten obiekt. Długość krawedzi
˛
obiektu to — w najprostszym wariancie — liczba punktów brzegowych obiektu, choć istnieje wiele
bardziej wyrafinowanych sposobów na jej wyliczenie [87, s. 259–260].
Bezwymiarowy współczynnik kształtu
Bezwymiarowy współczynnik kształtu [87, s. 264] to jeden z prostszych współczynników, określony wzorem:
L2
CS =
(3.88)
4ΠS
gdzie L to obwód obiektu, S to pole jego powierzchni. Nie ulega watpliwości,
˛
że jest
on odporny na obrót i translacje˛ — operacje te nie zmieniaja˛ wartości L i S. Poza
tym można dość łatwo dojść do wniosku, że jest on raczej odporny na skalowanie,
ponieważ powie˛ kszenie/pomniejszenie obiektu co prawda zwieksza/zmniejsza
˛
obwód L, ale jednocześnie zwie˛ ksza/zmniejsza pole S, przez co iloraz tego pierwszego
(dokładniej: jego kwadratu) i tego drugiego pozostaje — z pewna˛ dokładnościa˛ —
stały. Kwadrat obwodu ma taka˛ sama˛ jednostke˛ jak pole („piksel2 ”), co jest warunkiem koniecznym do zachowania stałej proporcji.
Współczynnik Fereta
Współczynnik Fereta [87, s. 264], określony z kolei wzorem:
CF =
Lh
Lv
(3.89)
bazuje na maksymalnej średnicy obiektu w poziomie (szerokości) Lh oraz maksymalnej średnicy obiektu w pionie (wysokości) Lv . Wielkości Lh oraz Lv to tzw. średnice Fereta [87, s. 262–263]. Rozciagłość
˛
obiektu w poziomie (pionie) jest równa
wartości bezwzgle˛ dnej z różnicy miedzy
˛
maksymalna˛ wartościa˛ indeksu kolum˛
nowego (wierszowego) spośród indeksów wszystkich pikseli obiektu a minimalna.
Wartości Lv i Lh można interpretować jako — kolejno — długości pionowej i poziomej krawe˛ dzi minimalnego prostokata
˛ opisanego na obiekcie. Rysunek 3.14
przedstawia interpretacje˛ średnic Fereta.
54
3.3. Deskryptor konturu na obrazie
Lh
Lv
Rysunek 3.14. Średnice Fereta Lh i Lv używane we współczynniku Fereta.
Współczynniki cyrkularności
Współczynniki cyrkularności [87, s. 264–265] zdefiniowane sa˛ w nastepuj
˛
acy
˛
sposób:
r
S
CC1 = 2
(3.90)
Π
L
(3.91)
CC2 =
Π
gdzie L to obwód obiektu, S to pole jego powierzchni. CC1 interpretuje sie˛ jako
średnice˛ koła o polu równym polu analizowanego obiektu, natomiast CC2 jako
średnice˛ koła o obwodzie równym obwodowi analizowanego obiektu.
Współczynnik Malinowskiej
Współczynnik Malinowskiej [87, s. 264] określony jest wzorem:
L
CM = √
−1
2 ΠS
(3.92)
gdzie L to obwód obiektu, S to pole jego powierzchni. Współczynnik ten przyjmuje
wartość 0, gdy da sie˛ skonstruować koło o obwodzie i polu równych — kolejno —
obwodowi i polu analizowanego obiektu.
Współczynnik Blaira-Blissa
Współczynnik Blaira-Blissa [87, s. 264] zdefiniowany jest przez wzór:
CB = q
S
P
2Π i ri2
(3.93)
gdzie S to pole powierzchni obiektu, zaś ri odległość i-tego piksela konturu od
środka cie˛ żkości obiektu (centroidu). Sposób wyliczania centroidu, omówionego
w podsekcji 3.2.1, przedstawiony jest w postaci wzorów 3.31 oraz 3.32, natomiast
jego graficzna interpretacja na rysunku 3.10. Należy jednak pamietać,
˛
że taka
definicja centroidu oblicza środek obiektu, ważac
˛ każdy jego piksel waga˛ w postaci
jego funkcji jasności. Prostsza definicja centroidu (ī, j̄) wyglada
˛ nastepuj
˛
aco:
˛
P
p∈P pi
(3.94)
ī =
|P |
P
p∈P pj
j̄ =
(3.95)
|P |
3.3. Deskryptor konturu na obrazie
55
gdzie p to piksel obiektu, P zbiór pikseli tworzacych
˛
obiekt, pi oraz pj to — kolejno
— numer wiersza piksela p i numer kolumny piksela p.
Współczynnik Danielssona
Współczynnik Danielssona [87, s. 264–265] zdefiniowany jest przez wzór:
S3
CD = P 2
( i li )
(3.96)
gdzie S to pole powierzchni obiektu, zaś li minimalna odległość i-tego piksela
obiektu od konturu obiektu.
Współczynnik Haralicka
Współczynnik Haralicka [87, s. 265] bierze pod uwage˛ tylko i wyłacznie
˛
piksele
tworzace
˛ kontur obiektu. Jego wzór to:
s P
( i d2i )2
P
CH =
(3.97)
n i d2i − 1
gdzie di to odległość i-tego piksela należacego
˛
do konturu od środka cie˛ żkości
obiektu, zaś n liczba pikseli należacych
˛
do konturu.
3.3.2. Deskryptor Fouriera
Zestaw (ciag)
˛ deskryptorów Fouriera [72, s. 30–32] [19, s. 5–6] (ang. Fourier
descriptors) może posłużyć do utworzenia takiego wektora cech obiektu, który
b˛edzie wyliczony na podstawie jego konturu (obwiedni, granicy, linii brzegowej)
i który be˛ dzie identyfikował ten obiekt właśnie poprzez jego kontur, czyli kształt.
Obwiednie˛ obiektu można przedstawić jako ciag
˛ dwuwymiarowych punktów
(pikseli) na obrazie ((i0 , j0 ), (i1 , j1 ), ..., (iN −1 , jN −1 )), gdzie N to ilość punktów tworzacych
˛
kontur. Taki sposób przedstawienia konturu to postać parametryczna
((in , jn ) : n = 0, 1, ..., N − 1).
Aby wyznaczyć ciag
˛ deskryptorów Fouriera, najpierw należy potraktować szereg
((in , jn ) : √
n = 0, 1, ..., N − 1) jako szereg sygnałów zespolonych (zn ) = (in + ijn ),
gdzie i = −1 to jednostka urojona, a nastepnie
˛
poddać tak zdefiniowany sygnał7
dyskretnej transformacji Fouriera, opisanej w rozdziale 2.5.1:
N −1
kn
1 X
Fk =
zn e−2Πi N , k = 0, 1, ..., N − 1
N
(3.98)
n=0
Wówczas ciag
˛ (F0 , F1 , ..., FN −1 ) współczynników transformaty to zestaw deskryptorów Fouriera, które reprezentuja˛ kształt obiektu w dziedzinie czestotliwościowej.
˛
Deskryptory Fk niskich cze˛ stotliwości (te o małej wartości k) przechowuja˛ ogólne
informacje o kształcie, natomiast deskryptory wysokich czestotliwości
˛
(o dużej wartości k) informacje o szczegółach kształtu. Ciag
˛ (Fk ) nie może być jeszcze wykorzystany jako wektor cech obiektu, ponieważ nie jest on niezależny wzgledem
˛
translacji, skalowania, rotacji i wyboru punktu startowego konturu (i0 , j0 ).
7
Ciag
˛ (zn ) poddawany bezpośrednio transformacji jest w tym wypadku nazywany sygnatura˛
kształtu (ang. shape signature). Istnieja˛ również inne sygnatury kształtu.
56
3.3. Deskryptor konturu na obrazie
Aby uniezależnić deskryptory Fouriera od translacji obiektu na obrazie, można
zmienić reprezentacje˛ konturu (sygnature˛ kształtu) z szeregu ((in , jn ) : n =
0, 1, ..., N − 1) punktów go opisujacych
˛
na szereg (rn : n = 0, 1, ..., N − 1) odległości
kolejnych punktów konturu od środka obiektu [20, s. 1–2]:
q
rn = (in − ī)2 + (jn − j̄)2 , n = 0, 1, ..., N − 1
(3.99)
gdzie punkt (ī, j̄) to środek obiektu (centroid):
(ī, j̄) = (
N −1
N −1
1 X
1 X
in ,
jn )
N
N
n=0
(3.100)
n=0
Po poddaniu szeregu (rn ) dyskretnej transformacji Fouriera:
N −1
kn
1 X
Fk =
rn e−2Πi N , k = 0, 1, ..., N − 1
N
(3.101)
n=0
deskryptory Fouriera stana˛ sie˛ odporne na przesuwanie obiektu na obrazie, ponieważ jeśli obiekt zostanie poddany translacji o pewien wektor, translacji ulegaja˛ nie
tylko punkty konturu, lecz również punkt środkowy obiektu — o ten sam wektor,
w zwiazku
˛
z czym odległości pomiedzy
˛
punktami konturu a centroidem pozostaja˛
niezmienne.
Aby dodatkowo uniezależnić deskryptory Fouriera od rotacji obiektu na obrazie, należy zignorować informacje o fazie zawarte we współczynnikach Fk ,
czyli wziać
˛ pod uwage˛ jedynie ich wartości bezwzgledne
˛
|Fk |, otrzymujac
˛ ciag
˛
(|F0 |, |F1 |, ..., |FN −1 |). Uniezależnienie ciagu
˛
(|Fk |) od skalowania obiektu polega na
˛ a˛ |F0 | składowej stałej F0 ,
podzieleniu jego elementów przez wartość bezwzgledn
otrzymujac
˛ ciag:
˛
|F0 | |F1 |
|FN −1 |
(
,
, ...,
)
(3.102)
|F0 | |F0 |
|F0 |
Oczywiście pierwszy element powyższego ciagu
˛
ma stała˛ wartość
można go pominać:
˛
|F0 |
|F0 |
= 1, wiec
˛
|FN −1 |
|F1 | |F2 |
,
, ...,
)
(3.103)
|F0 | |F0 |
|F0 |
Jako że ciag
˛ (rn ) jest ciagiem
˛
liczb rzeczywistych, można wziać
˛ tylko połowe˛
powyższych współczynników, otrzymujac
˛ ostateczna˛ postać:
(
|F N |
|F1 | |F2 |
,
, ..., 2 )
(3.104)
|F0 | |F0 |
|F0 |
Aby ciag
˛ deskryptorów Fouriera dowolnego obiektu był uniwersalny, tzn. dajacy
˛ sie˛ porównywać z ciagami
˛
deskryptorów Fouriera innych obiektów, ciag
˛ (rn )
poddawany dyskretnej transformacji Fouriera należy przed transformacja˛ znormalizować, czyli sprowadzić liczbe˛ N elementów tego ciagu
˛ do konkretnej, stałej liczby
(np. N = 128).
Szum — rozumiany jako niedokładność zaznaczenia konturu na obiekcie —
nie jest w kontekście deskryptorów Fouriera dużym problemem, ponieważ tego
typu zniekształcenia sa˛ reprezentowane przez wysokie czestotliwości,
˛
a wiec
˛ —
co za tym idzie — przez współczynniki Fk o wiekszych
˛
wartościach k, a te sa˛
przecież wycinane. Deskryptory Fouriera można również liczyć za pomoca˛ szybkiej
transformacji Fouriera (ang. Fast Fourier Transform, FFT).
(
57
3.3. Deskryptor konturu na obrazie
3.3.3. Kod łańcuchowy
Kod łańcuchowy [105, s. 39–45] [72, s. 19–22] (ang. chain code) jest znanym
sposobem na reprezentacje˛ konturu obiektu. Po wybraniu punktu startowego
konturu należy przemieszczać sie˛ w jednym z ośmiu8 kierunków od tego punktu do
kolejnych punktów sasiednich.
˛
Tak otrzymana sekwencja zmian kierunku konturu
stanowi jego deskryptor. Każdemu z ośmiu kierunków przypisuje sie˛ pewna˛ liczbe˛
(kod), co pokazuje rysunek 3.15.
2
1
3
0
4
7
5
6
Rysunek 3.15. Kody wszystkich ośmiu zmian kierunków.
Kod da sie˛ zapisać na trzech bitach, co pozwala na użycie mniejszych typów
numerycznych. Aby uniezależnić kod łańcuchowy od wyboru punktu startowego,
można postapić
˛
według nastepuj
˛
acego
˛
schematu:
˛ od dowolnego punktu startowego,
1. zakodować kontur zaczynajac
2. sekwencje˛ otrzymanych cyfr (z zakresu 0–7) zinterpretować jako liczbe,
˛
3. przesuwać cyklicznie pierwsza˛ cyfre˛ tej liczby o jedna˛ pozycje˛ w prawo, otrzymujac
˛ za każdym razem nowa˛ liczbe,
˛
4. wybrać jako nowy punkt startowy ten, który jest pierwsza˛ cyfra˛ najwie˛ kszej
liczby.
W celu uniezależnienia kodu łańcuchowego od obrotu obiektu należy przetransformować go na kod różnicowy. Uniezależnienie od skalowania realizuje sie˛ z kolei
poprzez zmiane˛ wymiaru siatki.
8
Istnieje odmiana kodu łańcuchowego, w której przestrzeń możliwych kierunków jest czteroelementowa (góra, dół, lewo, prawo).
4. Syntetyczne spojrzenie na systemy CBIR
Spogladaj
˛ ac
˛ na system CBIR kompleksowo — przez pryzmat czarnej skrzynki
— należy zmierzyć sie˛ z pewnymi pytaniami i spróbować poszukać na nie odpowiedzi. Podstawowe pytanie brzmi, czy system informatyczny — nawet taki o cechach
inteligentnych — jest w stanie interpretować obraz tak jak robi to człowiek, co
wydaje sie˛ warunkiem koniecznym wyszukiwania obrazów relewantnych. Poza tym
watpliwości
˛
może budzić kwestia granicy możliwości takiego systemu w interakcji
z użytkownikiem, która jest kluczowa w poinformowaniu system, co użytkownik
ma naprawde˛ na myśli. Na końcu należy — mimo subiektywności pojecia
˛
relewantności wyników wyszukiwania — spróbować znaleźć w miare˛ obiektywne miary
mierzenia jego skuteczności.
4.1. Sprze˛ żenie zwrotne istotności
Możliwie najprostszy system CBIR wyglada
˛
tak, że gdy użytkownik wyśle do
niego zapytanie — np. podajac
˛ obraz wejściowy — system zwraca w odpowiedzi
obrazy podobne do wzorca. Jest to schemat, który nie posiada żadnej interakcji
pomi˛edzy człowiekiem a systemem. Wówczas nawet jeśli użytkownik dochodzi do
wniosku, że pewne obrazy wynikowe kompletnie nie pasuja˛ do zadanej kwerendy,
nie jest w stanie poinformować o tym system, co działa na szkode˛ obu stron. Pojecie
˛
istotności (ang. relevance) — w kontekście wyszukiwania obrazów na podstawie
zawartości — odpowiada na pytanie, w jakim stopniu zbiór wyszukanych obrazów
pasuje do zadanego przez użytkownika zapytania i na ile wynikowe obrazy go
satysfakcjonuja,
˛ czyli spełniaja˛ jego potrzebe˛ informacyjna.
˛
W celu poprawienia jakości wyszukiwania obrazów stosuje sie˛ wiec
˛ czesto
˛
sprze˛
żenie zwrotne istotności [113] (ang. relevance feedback), które wprowadza interakcj˛e w kierunku od użytkownika do systemu. Dzieki
˛ niej system jest w stanie skorzystać z rad użytkownika — modyfikujac
˛ kwerendy lub w jakiś sposób uczac
˛ sie˛ —
zwracajac
˛ w ostateczności lepsze wyniki. Sprze˛ żenie zwrotne redukuje w pewnym
stopniu przepaść semantyczna˛ (ang. semantic gap) — opisana˛ w sekcji 4.2 — pomi˛edzy niskopoziomowa˛ ekstrakcja˛ cech obrazu — opisana˛ z kolei w rozdziale 3 —
a wysokopoziomowym postrzeganiem obrazu przez człowieka, choć oczywiście nadal bardzo daleko tej metodzie do przyszłościowego wyszukiwania semantycznego.
Uwzgle˛ dniajac
˛ w systemie CBIR moduł sprze˛ żenia zwrotnego istotności, ogólna
architektura systemu — przedstawiona na rysunku 1.2 — może zostać zmodyfikowana [60, s. 13] do postaci takiej jak na rysunku 4.1.
59
4.1. Sprzeżenie
˛
zwrotne istotności
Obraz
(zapytanie)
Kolekcja
obrazów
Ekstrakcja cech
Ekstrakcja cech
Wektor cech
obrazu
Baza danych
(obrazy z
wektorami cech)
Sprzężenie
zwrotne
istotności
Porównanie
podobieństwa
Proces "offline"
Proces "online"
Obrazy
wydobyte z bazy
danych
Rysunek 4.1. Ogólna architektura systemu CBIR z modułem sprze˛ żenia zwrotnego
istotności.
Na rysunku 4.1 widoczna jest petla
˛
przechodzaca
˛ przez moduł sprze˛ żenia zwrotnego, ponieważ jest to metoda iteracyjna, tzn. dopuszczalna jest sekwencja wielu
kroków poprawiania rezultatów wyszukiwania — jeden po drugim. Pseudokod 7
przedstawia pe˛ tle˛ główna˛ sprze˛ żenia zwrotnego istotności [78, s. 43].
Algorytm 7 Petla
˛
główna sprze˛ żenia zwrotnego istotności.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure IMPROVE R ETRIEVAL R ESULTS(initialRetrievalResults)
improvedRetrievalResults ← initialRetrievalResults
while notRESULTS S ATISFY U SER(improvedRetrievalResults) do
f eedback ← GET F EEDBACK F ROM U SER(improvedRetrievalResults)
if FEEDBACK I S A BLE T O I MPROVE R ESULTS(f eedback) then
LEARN S YSTEM W ITH F EEDBACK (f eedback)
else
break
end if
end while
end procedure
Wyróżnia sie˛ trzy zasadnicze rodzaje sprze˛ żenia zwrotnego istotności:
— jawne,
— niejawne,
— ślepe (pseudosprze˛ żenie).
Jawne sprze˛ żenie zwrotne istotności (ang. explicit relevance feedback) polega na
tym, że użytkownik ocenia zwrócone przez system obrazy, majac
˛ pełna˛ świadomość
4.1. Sprzeżenie
˛
zwrotne istotności
60
tego, że jego działania wpływaja˛ na działanie systemu. Można sobie wyobrazić
nast˛epujace
˛ systemy ocen:
— binarny: użytkownik ocenia zwrócony obraz albo jako relewantny albo nierelewantny,
— stopniowany: użytkownik ocenia zwrócony obraz poprzez ocene˛ w pewnej —
zazwyczaj kilkustopniowej — skali lub szereguje zwrócone obrazy w kolejności
według stopnia istotności (np. od najbardziej do najmniej relewantnych).
System CBIR po otrzymaniu od użytkownika sprze˛ żenia zwrotnego z informacjami
o istotności dokonuje ich nałożenia na pierwotne zapytanie lub w inny sposób uczy
si˛e nowo pozyskanej wiedzy. Zmodyfikowana kwerenda jest wykonywana ponownie
— z zamiarem zwrócenia lepszych wyników niż poprzednio.
Niejawne sprze˛ żenie zwrotne istotności (ang. implicit relevance feedback) polega
z kolei na tym, że system pobiera od użytkownika — na podstawie obserwacji
jego zachowania — pewne informacje w celu poprawy jakości wyszukiwania, przy
czym użytkownik najcze˛ ściej nie jest tego świadomy i nie musi tracić czasu na
wykonywanie specjalnych ruchów, aby systemowi to umożliwić. Do najbardziej
znanych zjawisk, które system jest w stanie obserwować u użytkownika, należa:
˛
— obserwacja, które obrazy użytkownik wybiera do obejrzenia, a które nie,
— obserwacja czasu, jaki użytkownik poświeca
˛
poszczególnym obrazom.
Ślepe sprze˛ żenie zwrotne istotności (ang. blind relevance feedback), nazywane
również pseudosprze˛ żeniem istotności, nie wymaga interakcji systemu z użytkownikiem. Nie wymaga nawet obecności samego użytkownika w celu obserwacji jego
zachowania. Polega ono na tym, że na poczatku
˛
wykonywane jest zwykłe zapytanie
otrzymane od użytkownika. Nastepnie
˛
zakłada sie,
˛ że tylko pierwsze k obrazów jest
relewantnych (zazwyczaj 10 ≤ k ≤ 50). Spośród k obrazów wybiera l najbardziej
relewantnych (l ≤ k, zazwyczaj 20 ≤ l ≤ 30) i na ich podstawie modyfikuje sie˛ zapytanie (ang. query expansion). Otrzymywane w wyniku zmodyfikowanej kwerendy
rezultaty dołacza
˛
sie˛ do tych k już istniejacych.
˛
4.1.1. Modyfikacja zapytania
Istnieje kilka sposobów na modyfikacje˛ kwerendy (ang. query refining) w ramach
techniki sprze˛ żenia zwrotnego istotności [104, s. 26–27].
Przemieszczenie punktu zapytania
Jeśli zapytanie do systemu CBIR zawiera obraz wejściowy, to wektor cech na
nim policzony nazywa sie˛ punktem zapytania (ang. query point). Punkt zapytania
należy do przestrzeni punktów zapytania, która˛ jest przestrzeń wektorów cech obrazu. Wektory cech policzone na obrazach bazodanowych (na potrzeby tej sekcji
nazwane punktami bazodanowymi) również należa˛ do przestrzeni wektorów cech
obrazu. Przemieszczenie punktu zapytania (ang. query point movement) — nazywane również redefinicja˛ punktu zapytania — polega na znalezieniu możliwie
najlepszego położenia punktu zapytania, czyli przesunieciu
˛
go w strone˛ punktów
bazodanowych obrazów relewantnych i odsunieciu
˛
od punktów bazodanowych obrazów nierelewantnych. Proces przemieszczenia punktu zapytania jest procesem
iteracyjnym. Pojedyncza˛ iteracje˛ można zapisać za pomoca˛ wzoru Rocchio [78,
s. 44]:
61
4.1. Sprzeżenie
˛
zwrotne istotności
qn+1
NR
NN
1 X
1 X
R
= αqn + β
Di − γ
DiN
NR
NN
i=1
(4.1)
i=1
gdzie qn+1 to punkt zapytania w rundzie n + 1-szej, qn punkt zapytania w rundzie
n-tej (poprzedniej), NR liczba obrazów zaznaczonych przez użytkownika jako relewantne spośród tych zwróconych przez system w ostatniej rundzie, NN analogiczna
liczba obrazów nierelewantnych, DiR wektor czastkowego
˛
przemieszczenia punktu
zapytania w kierunku i-tego punktu bazodanowego obrazu relewantnego, DiN analogiczny wektor zwiazany
˛
z obrazem nierelewantnym, α, β, γ to stałe b˛edace
˛ wagami
określajacymi
˛
udział w nowym zapytaniu — kolejno — poprzedniego zapytania,
obrazów zaznaczonych jako relewantne i obrazów nierelewantnych.
Zmiana wag składowych wektora cech
Wektor cech be˛ dacy
˛ deskryptorem obrazu składa sie˛ z ciagu
˛ cech, które w standardowej konfiguracji posiadaja˛ identyczna˛ range,
˛ tzn. każda cecha jest tak samo
ważna i nie jest wyróżniana czy faworyzowana wzgledem
˛
innych cech — jej wpływ
podczas obliczania odległości pomiedzy
˛
wektorami cech obrazu wejściowego i bazodanowego jest taki sam. Warto przypomnieć wzór 2.6.1 na jedna˛ z najbardziej
ogólnych (generycznych) postaci metryki — metryke˛ Minkowskiego:
d
X
d(x, y) = (
wi |xi − yi |p )1/p
(4.2)
i=1
Jak widać, wagi poszczególnych cech można zróżnicować odgórnie i ich sie˛ konsekwentnie trzymać, nie modyfikujac
˛ ich. Zmiana wag składowych wektora cech
(ang. reweighting, updating weight vector) daje jednak szanse˛ na zwiekszenie
˛
jakości wyszukiwania obrazów.
4.1.2. Zmiana metryki odległości
Kolejnym z pomysłów na sprze˛ żenie zwrotne istotności może być całkowita
zmiana w każdej iteracji metryki odległości, porównujacej
˛
wektor cech obrazu wzorcowego z wektorami cech obrazów bazodanowych. Propozycje metryk odległości
omówione sa˛ w sekcji 2.6.
4.1.3. Redukcja wymiarowości wektora cech
Redukcja wymiarowości wektora cech — choć może nie być uważana za forme˛
sprz˛eżenia zwrotnego istotności — ma za zadanie pozbycie sie˛ niektórych składowych wektora, ostatecznie nie uwzgledniaj
˛
ac
˛ ich podczas obliczania miary odległości pomie˛ dzy wektorami cech dwóch obrazów: wejściowego oraz bazodanowego. Cel
ten wynika z obserwacji, że bardzo długi wektor cech nie poprawia wcale skuteczności wyszukiwania obrazów, a czesto
˛
wrecz
˛ ja˛ pogarsza. Efekt ten można osiagn
˛ ać
˛
stosujac
˛ naste˛ pujace
˛ metody:
— metoda KLT [85] (Karhunen-Loeve Transform),
— metoda PCA [52] (Principal Component Analysis).
Można wyobrazić sobie proces stopniowego, iteracyjnego zmniejszania wymiarowości wektora cech podczas interakcji z użytkownikiem, tzn. w reakcji na jego niezadowolenie z dotychczasowych rezultatów wyszukiwania można np. zmniejszać
wymiarowość wektora o jeden wymiar w jednej iteracji.
4.2. Przepaść postrzegania i przepaść semantyczna
62
4.2. Przepaść postrzegania i przepaść semantyczna
Istnieja˛ dwa poje˛ cia, które można traktować jako tożsame lub dostrzec w nich
pewna˛ subtelna˛ różnice˛ [14]:
— przepaść postrzegania (ang. perception gap),
— przepaść semantyczna (ang. semantic gap).
W kontekście wyszukiwania obrazów przepaść postrzegania — czy inaczej luka
postrzegania — oznacza różnice˛ jakościowa˛ pomiedzy
˛
rzeczywistym wygladem
˛
danej sceny (czy obiektu) a jej spłyconym, cyfrowym zapisem w postaci ciagu
˛ bajtów.
Z kolei przepaść semantyczna — inaczej luka semantyczna — to pojecie
˛
oznaczajace
˛ różnice˛ w interpretacji obrazu przez człowieka oraz komputer. Patrzac
˛ na obraz, człowiek wyciaga
˛ z niego pewne informacje i określa jego kontekst. Komputer
— analizujac
˛ obraz i opracowujac
˛ jego cechy — nie potrafi ocenić semantyki treści
w taki sposób, w jaki potrafi robić to ludzki umysł. Istnieje jeszcze pojecie
˛
luki
czułości (ang. sensory gap), której powodem jest skończona dokładność urzadze
˛
ń
akwizycji obrazu, jednak w dziedzinie wyszukiwania obrazów stanowi to zdecydowanie mniejszy problem.
Na obecnym etapie rozwoju informatyki usuniecie
˛
przepaści semantycznej wydaje sie˛ zadaniem niemożliwym. Teze˛ te˛ wzmacnia fakt, iż interpretacja obrazu
przez człowieka jest wzgle˛ dna, bo zależna od uwarunkowań kulturowych czy kontekstu. Dowodem na to jest choćby obraz pt. „Zima” autorstwa Giuseppe Arcimboldo, zaprezentowany na rysunku 4.2, który posiada co najmniej dwie odmienne
interpretacje.
Pewna˛ nadzieje˛ na przełamanie semantycznej bariery — z cech wizualnych do
semantycznych — może stanowić idea semantycznej wyszukiwarki obrazów, wykorzystujacej
˛
sieci semantyczne i stanowiacej
˛
wyższy poziom abstrakcji niż standardowa wyszukiwarka obrazów na podstawie zawartości. Umożliwiałaby ona tworzenie kwerend tekstowych typu: „Wyszukaj obrazy uradowanego me˛ żczyzny pełnego
optymizmu”. Musiałaby ona posiadać mocno rozwiniete
˛ silniki przetwarzania je˛
zyka naturalnego (ang. Natural Language Processing, NLP) oraz — co najważniejsze
i najtrudniejsze — rozumienia jezyka
˛
naturalnego (ang. Natural Language Understanding, NLU). Semantyczna wyszukiwarka obrazów mogłaby działać nastepuj
˛
aco:
˛
1. użytkownik podaje zapytanie tekstowe (np. „Wyszukaj obrazy uradowanego
m˛eżczyzny pełnego optymizmu”),
2. silnik NLP przeprowadza analize˛ syntaktyczna˛ zapytania,
3. silnik NLU przeprowadza analize˛ semantyczna˛ przeanalizowanego syntaktycznie
zapytania,
4. silnik wyszukiwania porównuje semantyke˛ zapytania z semantyka˛ każdego obrazu w bazie danych.
Wówczas konieczne byłoby reczne
˛
etykietowanie każdego obrazu za pomoca˛ opisu
tekstowego, tak aby możliwa była ekstrakcja jego semantyki, składowanej ostatecznie w bazie danych. Ekstrakcja semantyki z obrazu wzorcowego (a nie z zapytania
tekstowego) jest teoretycznie możliwa. Obrazuje to zmodyfikowany schemat wyszukiwarki:
1. użytkownik podaje zapytanie w formie obrazu wzorcowego,
2. silnik ekstrakcji cech ekstrahuje informacje wizualne o obrazie,
3. silnik przeglada
˛ predefiniowana˛ mape˛ typu klucz-wartość i dla klucza w postaci
wyekstrahowanych cech znajduje wartość w postaci odpowiadajacej
˛
tym cechom
semantyki,
4.3. Efektywność wyszukiwania
63
4. silnik wyszukiwania porównuje wyekstrahowana˛ semantyke˛ obrazu wzorcowego
z semantyka˛ każdego obrazu w bazie danych.
Ten przykład wymaga przygotowania zawczasu pewnej tablicy asocjacyjnej (mapy,
słownika) przechowujacej
˛
dla każdego wariantu cechy jej semantyke.
˛ Taka˛ tablice˛
można skonstruować, ekstrahujac
˛ z obrazów bazodanowych ich cechy, a nast˛epnie
kojarzyć te cechy z semantykami opisów tekstowych tych obrazów. Jedno wydaje
si˛e być pewne — w wyszukiwaniu semantycznym obrazów pośrednikiem pomie˛
dzy użytkownikiem a obrazem musi być jezyk
˛
naturalny, ponieważ to on potrafi
najlepiej utrwalać (konserwować) semantyke,
˛ czyli opisywać rzeczywistość.
Rysunek 4.2. Obraz „Zima” autorstwa Giuseppe Arcimboldo (1527–1593). Źródło:
Twoje Wiadomości http://www.twojewiadomosci.com.pl/ (dostep:
˛ 20.02.2014).
4.3. Efektywność wyszukiwania
Istnieje wiele sposobów oceny jakości wyszukiwania ogólnie pojetych
˛
danych,
w szczególności obrazów w obrazowej bazie danych.
Jak widać na rysunku 4.3, baze˛ danych można reprezentować jako zbiór Ω
wszystkich obrazów. W wyniku kwerendy q system CBIR powinien — w idealnych warunkach — zwrócić zbiór R(q) ⊆ Ω obrazów zawierajacy
˛ wszystkie obrazy
relewantne (i tylko takie), natomiast w warunkach rzeczywistych system zwraca
zbiór Q(q) ⊆ Ω mogacy
˛ zawierać obrazy relewantne jak i nierelewantne. Przecie˛
cie Q(q) ∩ R(q) obu tych zbiorów stanowi zbiór obrazów relewantnych zawartych
w odpowiedzi systemu na kwerende˛ q [60, s. 22]. Zazwyczaj trudno jest — dla
konkretnej kwerendy q — zdefiniować zbiór R(q) — decyzja ta musi zostać podjeta
˛
arbitralnie.
64
4.3. Efektywność wyszukiwania
R(q)
Q(q)
Ω
Rysunek 4.3. Relacje pomiedzy
˛
zbiorami: Ω (zbiór wszystkich obrazów w bazie danych), R(q) ⊆ Ω (zbiór obrazów zawierajacy
˛ wszystkie obrazy relewantne wzgledem
˛
kwerendy q), Q(q) ⊆ Ω (zbiór obrazów zwróconych w wyniku kwerendy q).
Poniżej zaprezentowane sa˛ najbardziej popularne sposoby oceny efektywności
wyszukiwania obrazów [28, s. 8359–8364].
4.3.1. Dokładność
Dokładność [65] (ang. precision) to stosunek liczności zbioru Q(q) ∩ R(q) zawierajacego
˛
te obrazy, które jednocześnie sa˛ relewantne i należa˛ do zbioru obrazów
uzyskanych w odpowiedzi na kwerende˛ q, do liczności zbioru Q(q) obrazów zwróconych w wyniku kwerendy q:
|Q(q) ∩ R(q)|
pr =
(4.3)
|Q(q)|
Wartość pr przyjmuje wartości z zakresu [0; 1] i da˛ży sie˛ do jej maksymalizacji.
4.3.2. Kompletność
Kompletność [65] (ang. recall) to stosunek liczności zbioru Q(q) ∩ R(q) zawierajacego
˛
te obrazy, które jednocześnie sa˛ relewantne i należa˛ do zbioru obrazów
uzyskanych w odpowiedzi na kwerende˛ q, do liczności zbioru R(q) obrazów relewantnych do kwerendy q:
|Q(q) ∩ R(q)|
rec =
(4.4)
|R(q)|
Wartość rec przyjmuje wartości z zakresu [0; 1] i — tak jak w przypadku dokładności
pr — da˛ży sie˛ do jej maksymalizacji.
Rysunek 4.4 przedstawia przykładowy wykres zależności dokładności od kompletności.
65
4.3. Efektywność wyszukiwania
dokładność
100
0
kompletność
100
Rysunek 4.4. Przykładowy wykres zależności dokładności od kompletności.
5. Praktyczne wykorzystanie systemów CBIR
Praktyczne wykorzystanie technik wyszukiwania obrazów musi być zawsze poprzedzone analiza˛ teoretyczna˛ ich przypadków użycia. Na poczatku
˛
omówione zostały ogólne pomysły użycia metod CBIR (rozdział 5.1), natomiast w drugiej kolejności ich przykładowe implementacje (rozdział 5.2).
5.1. Zastosowanie systemów CBIR
Idea wyszukiwania obrazów na podstawie zawartości otwiera pole to tworzenia
najróżniejszych systemów realizujacych
˛
pewne praktyczne zadania, niewykonalne
jeszcze w niedawnej przeszłości [96] [59, s. 100–105].
Znaczacym
˛
specjalistycznym zastosowaniem jest rozpoznawanie twarzy frontalnych (franc. en face) w celu:
— poszukiwania osób zaginionych,
— wyszukiwania osób podobnych (sobowtórów),
— poszukiwania przeste˛ pców w kryminalistyce, wywiadzie, kontrwywiadzie czy
służbach antyterrorystycznych (np. osób sfotografowanych na miejscu przest˛epstwa lub osób posługujacych
˛
sie˛ kilkoma tożsamościami z jednakowym zdje˛
ciem),
— poszukiwania osób na podstawie cześciowo
˛
uszkodzonego zdjecia,
˛
1
— kontrolowania doste˛ pu do komputerów, budynków ,
— spisywania (ewidencjonowania) ludności,
— wyliczania statystyk odwiedzin poprzez zliczanie twarzy ludzi (np. w środkach
komunikacji, sklepach czy na imprezach masowych),
— emitowania imiennych powitań dedykowanych dla konkretnych osób.
W tym kontekście można przywołać systemy polskiej firmy Telsat Electronics Systems [96, r. Systemy rozpoznawania twarzy]:
— FaReS-Mod (Face Recognition System Modeler): graficzne środowisko do projektowania systemów rozpoznawania twarzy,
— VIS (Visitor Identification): system do rozpoznawania twarzy na obrazach z kamery,
— FRS (Face Retrieval System): system do wyszukiwania obrazów twarzy podobnych do twarzy wzorcowej,
— FACE-LOC (Face Localization): system do lokalizacji twarzy na obrazie,
— BioFaP-Veri-Sys (Biometric Face-Photo Verification System): system do walidacji
zdje˛ ć twarzy do dokumentów biometrycznych stosownej do wymogów urzedów
˛
je wydajacych,
˛
1
W przypadku uwierzytelniania za pomoca˛ rozpoznawania twarzy twarz nie powinna służyć za
hasło, lecz co najwyżej za identyfikator — chyba, że obiekt, do którego dost˛ep jest kontrolowany, nie
wymaga krytycznego stopnia izolacji.
5.2. Przykłady systemów CBIR
67
— VERI-FAN: system do weryfikacji tożsamości właściciela karty lub biletu na
podstawie jego twarzy.
Oczywiście poszukiwanie przestepców
˛
odbywa sie˛ również za pośrednictwem cech
innych niż twarz. Biometria, nauka zajmujaca
˛ sie˛ pomiarami organizmów żywych,
wykorzystuje również m.in. takie — unikalne w skali ludzkości i wolnozmienne —
parametry jak:
— DNA,
— t˛eczówka czy siatkówka oka,
— linie papilarne,
— kształt dłoni, ucha czy ze˛ bów,
— rozkład temperatury na twarzy,
— zapach.
Wiele z nich ekstrahowanych jest z użyciem metod CBIR. Inne zastosowania metod
wyszukiwania obrazów na podstawie zawartości to:
— cenzurowanie obrazów, na których wykryto obszary mogace
˛ wskazywać na obecność treści niedozwolonych,
— medycyna diagnostyczna,
— wykrywanie nielegalnych przeróbek zastrzeżonych znaków firmowych,
— wojskowość (np. wykrywanie samolotów wroga na obrazach radarów),
— kultura i sztuka (np. wyszukiwanie podobnych dzieł w celu badania trendów
i podobieństw pomie˛ dzy różnymi epokami historycznymi),
— projektowanie architektury i wnetrz
˛
(np. wyszukiwanie podobnych projektów
budynków lub wystrojów wnetrz
˛
budynków) oraz mody (np. wyszukiwanie
materiałów).
W przypadku medycyny diagnostycznej techniki wyszukiwania obrazów sa˛ stosowane w badaniach radiologicznych (tomografia komputerowa, tomografia magnetycznego rezonansu i inne), neurologicznych czy kardiologicznych. Flagowy
przykład systemu obrazowania cyfrowego i wymiany obrazów w medycynie DICOM [21] (Digital Imaging and Communications in Medicine), opracowany przez
DICOM Standards Committee i używany przez sieci szpitalów, zawiera standardy
pozyskiwania, reprezentowania, drukowania i transmitowania medycznych danych
obrazowych o wysokiej jakości. Standard reprezentacji obrazów opiera sie˛ na autorskim formacie plików, natomiast standard transmisji na dedykowanym protokole sieciowym bazujacym
˛
na stosie protokołów TCP/IP, dzieki
˛ któremu możliwa
jest komunikacja pomie˛ dzy różnymi wezłami
˛
systemu DICOM i wymiana danych
medycznych. Tego typu standardy pozwalaja˛ na przykład — poprzez wizualne porównanie obrazów medycznych pacjenta chorego i pacjenta dopiero co badanego —
na stawianie diagnoz chorobowych w sposób w dużym stopniu zautomatyzowany.
5.2. Przykłady systemów CBIR
Istniejace
˛ obecnie — a nie historyczne, rozwijane w ośrodkach uniwersyteckich
— systemy CBIR w wie˛ kszości nie ujawniaja˛ szczegółów technicznych dotyczacych
˛
zaimplementowanych algorytmów wyszukiwania obrazów, tak wiec
˛ rzecza˛ trudna˛
jest ich analiza z punktu widzenia białej skrzynki. Pozostaja˛ wiec
˛ testy czarnej
skrzynki, polegajace
˛ na spojrzeniu na aplikacje od strony czysto użytkowej.
5.2. Przykłady systemów CBIR
68
5.2.1. Google Images: Search By Image
Funkcjonalność wyszukiwania obrazem Search By Image, stworzona przez
Google, jest szczególna˛ składowa˛ ogólnego systemu wyszukiwania obrazów Google Images (w którym wyszukiwanie obrazów może z kolei odbywać sie˛ również
w oparciu o słowa kluczowe a nie obraz). System dostepny
˛
jest pod adresem
http://images.google.com. Obraz wejściowy może być podany w formie adresu URL lub
w formie pliku znajdujacego
˛
sie˛ na lokalnym dysku użytkownika.
Rysunek 5.1 pokazuje przykład działania wyszukiwarki dla przypadku podania
obrazu wejściowego z lokalnego dysku użytkownika.
Rysunek 5.1. System wyszukiwania obrazów Search By Image dla przypadku podania obrazu wejściowego z lokalnego dysku użytkownika.
Z kolei rysunek 5.2 pokazuje przykład działania wyszukiwarki dla przypadku
podania obrazu wejściowego z adresu URL.
5.2. Przykłady systemów CBIR
69
Rysunek 5.2. System wyszukiwania obrazów Search By Image dla przypadku podania obrazu wejściowego z adresu URL.
Jak widać na powyższych rysunkach, wynikowa strona wyszukiwania składa
si˛e z kilku różnych segmentów. W ogólności wyróżnić można nastepuj
˛
ace
˛ [112]:
— miniaturka (podglad
˛ obrazu wzorcowego wraz z jego wymiarami),
— najtrafniejsze hasło (ciag
˛ słów kluczy stanowiacy
˛
najlepsze streszczenie tekstowe obrazu wzorcowego; jest ono określane na podstawie opisów tekstowych
wyszukanych obrazów podobnych),
— wyniki wyszukiwania dla najtrafniejszego hasła (kilka najlepszych wyników wyszukiwania tekstowego na podstawie najtrafniejszego hasła, opisanego wyżej),
— obrazy podobne wizualnie (lista obrazów najbardziej podobnych do obrazu wzorcowego pod katem
˛
ich zawartości),
— strony zawierajace
˛ podobne obrazy (lista stron, na których znajduja˛ sie˛ obrazy
podobne),
— podobne wyszukiwania (lista najlepszych alternatywnych zapytań tekstowych
powiazanych
˛
z obrazem wzorcowym).
5.2. Przykłady systemów CBIR
70
Informacje o sposobie implementacji systemu Google — czyli o użytych algorytmach i metodach łaczenia
˛
wyników poszczególnych algorytmów — nie sa˛ publicznie
dost˛epne.
5.2.2. TinEye
TinEye to serwis stworzony przez toroncka˛ firme˛ Idée Inc., który gromadzi
obrazy z sieci za pomoca˛ robota internetowego [35] (ang. web crawler). Jest on
dost˛epny pod adresem http://www.tineye.com/. Deskryptory obrazów, nazywane przez
autorów odciskami palców (ang. fingerprints), nie umożliwiaja˛ znalezienia obrazów
podobnych (np. obrazu tej samej budowli zrobionego innym aparatem z troche˛
innej perspektywy o innym czasie), lecz jedynie obrazy:
— b˛edace
˛ wycinkami wzorca,
— zmodyfikowane wzgle˛ dem wzorca pod wzgledem
˛
koloru czy — niezbyt dużego —
obrotu,
— przeskalowane wzgle˛ dem wzorca.
Tak wie˛ c serwis nie potrafi rozpoznawać zawartości obrazów, w tym np. twarzy.
Głównym celem aplikacji jest umożliwienie znalezienia:
— pochodzenia obrazu,
— informacji o obrazie,
— obrazu w wyższej rozdzielczości,
— stron internetowych używajacych
˛
obrazu.
Wyniki wyszukiwań sa˛ doste˛ pne pod wygenerowanymi adresami URL przez 72 godziny. Obrazy wzorcowe, wskazywane przez użytkownika w ramach kwerend, sa˛
zapisywane przez system tylko wtedy, gdy użytkownik jest zarejestrowany i ma
właczon
˛
a˛ opcje˛ historii wyszukiwań. Wersja darmowa aplikacji umożliwia zrealizowanie do 50 wyszukiwań dziennie i jednocześnie do 150 tygodniowo. Zliczanie
wyszukiwań odbywa sie˛ na podstawie adresu IP2 . Wersja płatna nie posiada tego
typu ograniczeń, a dodatkowo udostepnia
˛
interfejs programowania aplikacji [110]
(ang. Application Programming Interface, API) do zautomatyzowanych wyszukiwań.
Ograniczenia obrazu wzorcowego sa˛ nastepuj
˛
ace:
˛
— typ pliku obrazowego: JPEG, PNG, GIF,
— rozdzielczość: minimum 100 pikseli w każdym z dwóch wymiarów,
— rozmiar pliku: do 20 MB.
Obrazy wynikowe sa˛ domyślnie posortowane według jakości dopasowania, lecz
można zmienić to kryterium na:
— wielkość obrazu,
— stopień modyfikacji wzgle˛ dem wzorca,
— date˛ zaindeksowania przez robota internetowego.
W chwili opisywania tego systemu posiada on baze˛ danych zawierajac
˛ a˛ ok. 4,5 miliarda obrazów (4 560 689 874). Każdego miesiaca
˛ dodawane sa˛ kolejne dziesiatki
˛
milionów.
Rysunek 5.3 prezentuje wyniki wyszukiwania obrazów podobnych do przykładowego obrazu wzorcowego, natomiast rysunek 5.4 przykłady najlepszych wyszukiwań, dobranych przez autorów projektu w ramach potrzeb marketingowych.
2
W przypadku posiadania współdzielonego lub dynamicznego adresu IP istnieje ryzyko, że limit
wyszukiwań upłynie szybciej, ponieważ doliczane moga˛ być również wyszukiwania innych osób, które
posiadały/posiadaja˛ ten sam adres.
5.2. Przykłady systemów CBIR
71
Rysunek 5.3. System wyszukiwania obrazów TinEye dla przypadku podania obrazu wzorcowego.
5.2. Przykłady systemów CBIR
72
Rysunek 5.4. System wyszukiwania obrazów TinEye prezentujacy
˛ przykłady najlepszych wyszukiwań.
5.2. Przykłady systemów CBIR
73
5.2.3. Multi-service image search
Multi-service image search to serwis — dostepny
˛
pod adresem http://iqdb.org/
— którego kolekcja obrazów składa sie˛ z 11 zbiorów danych, z których każdy
zwiazany
˛
jest tematycznie z japońskimi komiksami (tzw. manga). Wystepuj
˛
a˛ w nim
nast˛epujace
˛ ograniczenia:
— wspierane typy plików obrazu wzorcowego: JPEG, PNG, GIF,
— maksymalny rozmiar pliku obrazu wzorcowego: 8192 KB,
— maksymalna rozdzielczość obrazu wzorcowego: 7500 na 7500 pikseli.
Rysunek 5.5 prezentuje moment wybrania obrazu wzorcowego i zaznaczenia pożadanych
˛
zbiorów danych, które maja˛ być przeszukiwane. Rysunek 5.6 prezentuje
wyniki wyszukiwania dla obrazu wzorcowego.
5.2. Przykłady systemów CBIR
74
Rysunek 5.5. System wyszukiwania obrazów Multi-service image search dla przypadku podania obrazu wzorcowego.
5.2. Przykłady systemów CBIR
75
Rysunek 5.6. System wyszukiwania obrazów Multi-service image search dla przypadku wyświetlania rezultatów wyszukiwania.
5.2. Przykłady systemów CBIR
76
5.2.4. CalPhotos (dawniej Chabot)
CalPhotos to system dostepny
˛
pod adresem http://calphotos.berkeley.edu/. Posiada baze˛ danych składajac
˛ a˛ sie˛ z ponad 407 tys. obrazów. Nie jest formalnie
systemem CBIR — został odnotowany tylko dlatego, że jego poprzednik — Chabot
— posiadał metody wyszukiwania obrazów na podstawie innego obrazu, z których
jednak zrezygnowano.
Pierwowzór, czyli Chabot, powstał w latach 1993-1994 na Uniwersytecie Kalifornijskim w Berkeley. Umożliwiał wyszukiwanie obrazów zarówno na podstawie
ich opisów tekstowych jak i właściwości kolorystycznych [108, s. 6–14].
Rysunek 5.7 przedstawia interfejs graficzny systemu, za pomoca˛ którego można
konstruować zapytania.
5.2. Przykłady systemów CBIR
77
Rysunek 5.7. Interfejs graficzny systemu CalPhotos, służacy
˛ do konstruowania zapytań.
5.2. Przykłady systemów CBIR
78
Istnieje możliwość wprowadzenia nastepuj
˛
acych
˛
parametrów wejściowych:
— rodzaj zdje˛ cia (np. zwierze˛ , skamielina, krajobraz),
— nazwa naukowa obiektu (np. agraulis vanillae),
— nazwa powszechna obiektu,
— lokalizacja geograficzna,
— kraj lokalizacji,
— stan (w Stanach Zjednoczonych),
— kolekcja (baza danych składa sie˛ z 24 niezależnych od siebie kolekcji zdjeć),
˛
— autor zdje˛ cia,
— identyfikator zdje˛ cia,
— liczba zdje˛ ć przypadajaca
˛ na jedna˛ strone˛ wynikowa.
˛
Jak widać, system nie posiada parametru wejściowego w postaci obrazu wzorcowego, co poważnie ogranicza jego możliwości.
5.2.5. Photobook
Photobook jest systemem stworzonym na uczelni MIT (Massachusetts Institute
of Technology), be˛ dacym
˛
darmowa˛ aplikacja˛ „pulpitowa”
˛ (ang. desktop application)
kompatybilna˛ z systemem UNIX/Linux. Wykorzystuje deskryptory bazujace
˛ na [3]:
— kolorze,
— teksturze,
— kształcie.
W ogólności w porównywaniu obrazów używa [62]:
— metryki Euklidesa,
— metryki Mahalanobisa,
— operatora dywergencji,
— kata
˛ pomie˛ dzy wektorami (ang. vector space angle),
— histogramu,
— wierzchołka Fouriera (ang. Fourier peak),
— odległości w drzewie falkowym (ang. wavelet tree distances),
— liniowych kombinacji powyższych.
System ten umożliwia m.in.:
— wyszukiwanie tekstur,
— rozpoznawanie twarzy,
— wyszukiwanie kształtów,
— dopasowywanie modeli mózgów,
— interaktywna˛ segmentacje˛ i etykietowanie wysegmentowanych obiektów.
5.2.6. QBIC
QBIC (Query By Image Content) to — zawieszona już — aplikacja „pulpitowa”
(ang. desktop application) stworzona przez firme˛ IBM (International Business Machines Corporation) w laboratorium Almaden Research Center. Umożliwia przeszukiwanie bazy danych zawierajacej
˛
ogromna˛ ilość obrazów oraz filmów i wyszukiwanie ich ze wzgle˛ du na zawartość wizualna.
˛ System ten pozwala na wyszukiwanie
oparte na [55, s. 1]:
— obrazie wejściowym,
— szkicu wejściowym stworzonym przez użytkownika,
— teksturze lub kształcie,
5.2. Przykłady systemów CBIR
79
— procentowym udziale kolorów,
— rozmieszczeniu kolorów na obrazie,
— położeniu obiektów na obrazie,
— słowach kluczowych.
Wymaga on instalacji złacza
˛
(ang. connector) DB2 Content Manager 7.1 i jest kompatybilny z systemami operacyjnymi Microsoft Windows i IBM AIX [32] (Advanced Interactive eXecutive) [31, r. Searching images using Query by Image Content
(QBIC)].
5.2.7. Cires
Cires to system posiadajacy
˛ w swojej bazie kolekcje˛ ok. 57 tysiecy
˛
obrazów.
Jest on doste˛ pny pod adresem http://amazon.ece.utexas.edu/~qasim/cires.htm. Obrazy
sa˛ pogrupowane w kilkadziesiat
˛ klas. Przed zleceniem zapytania należy wybrać
interesujac
˛ a˛ klase˛ , w obre˛ bie której ono sie˛ odbedzie.
˛
Rysunek 5.8 przedstawia
moment podawania parametrów wejściowych zapytania. Jak widać, nie jest możliwe podanie obrazu wzorcowego z zewnatrz
˛ 3 , co jest ogromna˛ wada˛ tego systemu.
Można go jedynie wybrać z listy obrazów predefiniowanych, należacych
˛
do wyselekcjonowanej wcześniej klasy, choć lista ta nie zawiera wszystkich obrazów z klasy.
Wyszukiwanie odbywa sie˛ za pomoca˛ trzech składników:
— grupowania percepcyjnego (ang. perceptual grouping),
— koloru,
— tekstury.
Sterować siła˛ oddziaływania poszczególnych składników można za pomoca˛ przypisywania im wag. Wyszukiwanie odbywa sie˛ w przestrzeni kolorów CIE Lab (omówionej w podsekcji 2.2.7). Użytkownik decyduje, czy ma być rozpatrywana tylko
pierwsza składowa tego modelu (L) czy wszystkie (L, a, b).
3
Autorzy deklaruja,
˛ że od sierpnia 2007 roku podanie obrazu wzorcowego z zewnatrz
˛
jest
już możliwe, choć adres URL majacy
˛
prowadzić do zaktualizowanej wersji systemu — na dzień
22.02.2014 — nie działa.
5.2. Przykłady systemów CBIR
80
Rysunek 5.8. System wyszukiwania obrazów Cires — podawanie parametrów wejściowych zapytania.
Rysunek 5.9 przedstawia rezultaty kwerendy. Nietypowa˛ — bo niezbyt powszechna˛ — cecha˛ systemu jest obecność sprze˛ żenia zwrotnego istotności (omówionego w sekcji 4.1). Jest ono realizowane w taki sposób, że przy każdym obrazie
wynikowym znajduje sie˛ przycisk wyboru (ang. checkbox) z trzema wykluczajacymi
˛
si˛e wzajemnie możliwościami oceny relewantności („Yes”, „No”, „Not Sure”), dzieki
˛
któremu dany obraz wynikowy można określić jako pasujacy
˛ do zapytania, niepasujacy
˛ lub można — w przypadku braku pewności użytkownika — wstrzymać sie˛
od kategorycznego stwierdzenia. Pod obrazami wynikowymi znajduja˛ sie˛ dwie opcje
sprz˛eżenia zwrotnego [79]:
— sprze˛ żenie zwrotne istotności oparte na grupowaniu (ang. clustering-based
relevance feedback) [89],
— wieloklasowe sprze˛ żenie zwrotne istotności (ang. multi-class relevance feedback) [45].
5.2. Przykłady systemów CBIR
81
Rysunek 5.9. System wyszukiwania obrazów Cires — wyświetlanie rezultatów zapytania.
5.2. Przykłady systemów CBIR
82
5.2.8. Fids
Doste˛ pny pod adresem http://www.cs.washington.edu/research/imagedatabase/demo/fids/
system Fids stworzony został przez naukowców z uczelni University of Washington.
Rysunek 5.10 przedstawia rezultaty zapytania dla obrazu wzorcowego widniejacego
˛
w prawym górnym rogu rysunku. Wada˛ systemu jest brak możliwości podania
obrazu wzorcowego z zewne˛ trznego źródła innego niż baza danych obrazów tego
projektu. Ciekawa˛ funkcjonalnościa˛ jest możliwość niewykluczajacego
˛
wyboru
algorytmów wyliczania deskryptorów oraz ustawiania wagi każdego wybranego. Do
dyspozycji sa˛ naste˛ pujace
˛ deskryptory:
— ColorHistL14x4x4: potrójny histogram (dla kanałów R, G i B) ograniczony do
czterech „koszyków” oraz metryka L1 ,
— ColorHist8x8x8: potrójny histogram (dla kanałów R, G i B) ograniczony do
ośmiu „koszyków”,
— SobelEdgeHist: histogram wyliczony dla rastra bed
˛ acego
˛
efektem filtracji Sobela
wykrywajacej
˛
krawe˛ dzie,
— LBPHIST: lokalne binarne wzorce (ang. Local Binary Patterns, LBP) teksturowe,
— fleshiness: zawartość (odsetek) skóry ludzkiej (ciała) na obrazie,
— Wavelets: transformacja falkowa.
Rezultaty wybranych deskryptorów można z soba˛ łaczyć
˛
za pomoca˛ trzech spójników:
— and: wynikowy obraz musi być satysfakcjonujacy
˛ z punktu widzenia każdego
z algorytmów niezależnie,
— or: wynikowy obraz musi być satysfakcjonujacy
˛ z punktu widzenia przynajmniej
jednego z algorytmów,
— sum: obraz wzorcowy be˛ dzie porównywany z obrazami bazodanowymi za pomoca˛ metryki odległości rozumianej jako suma metryk odległości każdego z algorytmów.
5.2. Przykłady systemów CBIR
83
Rysunek 5.10. System wyszukiwania obrazów Fids — wyświetlanie rezultatów
zapytania.
5.2. Przykłady systemów CBIR
84
5.2.9. QBIC Colour Search i QBIC Layout Search
QBIC Colour Search oraz QBIC Layout Search to aplikacje internetowe należace
˛
do rosyjskiego Państwowego Muzeum Ermitażu znajdujacego
˛
sie˛ w Sankt
Petersburgu. Muzeum dysponuje kolekcja˛ ponad 3 milionów dzieł sztuki, wśród
których sa˛ m.in. obrazy, rzeźby, znaleziska archeologiczne czy obiekty numizmatyczne. Aplikacje, doste˛ pne w przegladarce
˛
internetowej w formie apletów jezyka
˛
Java i umożliwiajace
˛ przeszukiwanie tego zbioru, znajduja˛ sie˛ — kolejno — pod adresami http://www.hermitagemuseum.org/fcgi-bin/db2www/qbicColor.mac/qbic?selLang=English i
http://www.hermitagemuseum.org/fcgi-bin/db2www/qbicLayout.mac/qbic?selLang=English. Pierwsza z nich pozwala na wyszukiwanie obrazów na podstawie procentowych udziałów
poszczególnych kolorów w obrazie, natomiast druga na wyszukiwanie na podstawie kompozycji obrazu, czyli ułożenia poszczególnych kolorów na obrazie w postaci
kształtów prostokatnych
˛
lub kołowych.
Rysunek 5.11 przedstawia moment ustawiania w aplikacji QBIC Colour Search
parametrów wejściowych zapytania, którymi sa˛ pożadane
˛
procentowe udziały poszczególnych kolorów w obrazie (na rysunku: 80% koloru żółtego i 20% koloru
niebieskiego). Rysunek 5.12 przedstawia wyniki dla tak przygotowanego zapytania. Jak widać, co najmniej cztery obrazy zwrócone przez system (na pozycjach 2,
3, 8, 12) można uznać za relewantne.
5.2. Przykłady systemów CBIR
85
Rysunek 5.11. System wyszukiwania obrazów QBIC Colour Search — podawanie
parametrów wejściowych zapytania.
5.2. Przykłady systemów CBIR
86
Rysunek 5.12. System wyszukiwania obrazów QBIC Colour Search — wyświetlanie
rezultatów zapytania.
5.2. Przykłady systemów CBIR
87
Rysunek 5.13 przedstawia z kolei moment ustawiania w aplikacji QBIC Layout
Search parametrów, którymi tym razem sa˛ kształty o określonych kolorach, usytuowane w ustalonych miejscach obrazu (na rysunku: niebieski prostokat
˛ u góry
obrazu, symulujacy
˛ niebo i zielony prostokat
˛ u dołu, symulujacy
˛ trawe).
˛ Rysunek
5.14 przedstawia wyniki dla tak przygotowanego zapytania. Jak widać, wszystkie
obrazy zwrócone przez system spełniaja˛ co najmniej jeden warunek (niebieskie piksele u góry obrazu), natomiast jeden obraz wynikowy — ten na czwartej pozycji —
spełnia oba zadane w zapytaniu warunki.
5.2. Przykłady systemów CBIR
88
Rysunek 5.13. System wyszukiwania obrazów QBIC Layout Search — podawanie
parametrów wejściowych zapytania.
5.2. Przykłady systemów CBIR
89
Rysunek 5.14. System wyszukiwania obrazów QBIC Layout Search — wyświetlanie rezultatów zapytania.
6. Implementacja systemu CBIR
W ramach pracy magisterskiej stworzony został system informatyczny implementujacy
˛ cze˛ ść metod wyszukiwania obrazów na podstawie zawartości. Otrzymał on nazwe˛ ImageGuide (Przewodnik Obrazowy). Rysunek 6.1 przedstawia jego
strukture˛ z punktu widzenia sieci komputerowej. Każdy z trzech elementów systemu jest jej we˛ złem i może być uruchomiony na osobnym fizycznym urzadzeniu.
˛
Jednym z we˛ złów jest system zarzadzania
˛
baza˛ danych, w którego bazie danych
przechowywane sa˛ obrazy oraz ich deskryptory (wraz z deskryptorami regionów
czy konturów znajdujacych
˛
sie˛ na tych obrazach). Kolejnym wezłem
˛
jest aplikacja internetowa, która zajmuje sie˛ wyszukiwaniem obrazów czy umieszczaniem ich
w bazie danych. Ostatnim z wezłów
˛
jest aplikacja mobilna, która pełni jedynie role˛
cienkiego klienta, przekierowujacego
˛
zapytania użytkownika do aplikacji internetowej i czekajacego
˛
na odpowiedź.
Obrazowa baza
danych
Aplikacja
internetowa
Aplikacja
mobilna
Rysunek 6.1. Struktura zaimplementowanego systemu CBIR z punktu widzenia
sieci komputerowej TCP/IP.
6.1. Zastosowane technologie
Aplikacja internetowa bazuje na nastepuj
˛
acych
˛
technologiach:
— Java 1.6 — je˛ zyk programowania,
— Servlet API 3.0 — pakiet standardu Java EE dla aplikacji internetowych bazujacych
˛
na serwletach (w implementacji z projektu Apache Geronimo [97] [98]),
— Jetty 8.1.10 [22]/Apache Tomcat 7.0.34 [100] — serwer HTTP i kontener serwletów,
— Spring 3.1.1 [92] — szkielet do wstrzykiwania zależności miedzy
˛
obiektami Javy
(posiadajacy
˛
również jako jeden ze swoich wiekszych
˛
elementów Spring Web
MVC, be˛ dacy
˛ szkieletem aplikacji internetowej),
— JUnit 4.8.1 [50] — narze˛ dzie wspomagajace
˛ tworzenie testów jednostkowych,
— OpenCV 2.4.7 [33] — biblioteka do widzenia komputerowego,
— SLF4J 1.6.6 [10] — fasada do logowania komunikatów diagnostycznych.
W kwestii persystencji danych należy wspomnieć o:
— PostgreSQL 9.2.2 [77] — system zarzadzania
˛
relacyjna˛ baza˛ danych,
91
6.1. Zastosowane technologie
— pgAdmin III 1.16.1 [101] — program do zarzadzania
˛
baza˛ danych PostgreSQL
przy pomocy interfejsu graficznego,
— Hibernate 4.1.9 [83] — szkielet do mapowania obiektowo-relacyjnego (miedzy
˛
obiektami POJO w je˛ zyku Java a tabelami w bazie danych i vice versa),
— transakcyjności zapewnianej przez adnotacje˛ @Transactional z pakietu
org.springframework.transaction.annotation szkieletu Spring.
Poniżej znajduja˛ sie˛ informacje o aplikacji mobilnej (w tym używane przez nia˛
biblioteki):
— testowana na urzadzeniu
˛
z systemem operacyjnym: Google Android 2.3.6 (API
poziomu 10),
— docelowa wersja SDK: 4.2.2 (API poziomu 17),
— minimalna wersja wspieranego SDK: API poziomu 9,
— Universal Image Loader 1.8.4 [88] — biblioteka do asynchronicznego ładowania
obrazów z adresów URL,
— Google Maps API v2 [25] — biblioteka do wyświetlania map geograficznych,
— Jackson 1.9.12 [95] — biblioteka do mapowania danych przesyłanych wewnatrz
˛
metody POST protokołu HTTP (miedzy
˛
obiektami POJO w jezyku
˛
Java a ich
tekstowa˛ wersja˛ zapisana˛ w formacie JSON i vice versa),
— Android-Custom-Gallery-And-Instant-Upload [107] — projekt do przesyłania
plików z aplikacji mobilnej do serwera.
System CBIR jest — z punktu widzenia programistycznego — projektem stworzonym i zarzadzanym
˛
przez narzedzie
˛
Apache Maven 3.0.4 [99], które służy do
automatyzacji procesu budowy aplikacji. Projekt składa sie˛ z poniższych modułów
Maven:
— Persistance — moduł dostepu
˛
do bazy danych,
— Logic — moduł logiki wyszukiwania,
— WebApp — moduł aplikacji internetowej,
— MobileApp — moduł aplikacji mobilnej,
— Shared — moduł z klasami wspólnymi dla WebApp i MobileApp.
Relacje mie˛ dzy modułami przedstawione sa˛ na rysunku 6.2.
Persistance
Logic
Shared
WebApp
MobileApp
Rysunek 6.2. Zależności miedzy
˛
modułami Maven systemu CBIR. Strzałka skierowana od modułu X do modułu Y oznacza, że moduł X korzysta z modułu Y jako
swojej zależności.
Zarówno aplikacja mobilna jak i internetowa zostały wytworzone przy pomocy
zintegrowanego środowiska programistycznego (Integrated Development Environment, IDE) Jetbrains IntelliJ IDEA 13.0.2 [42].
6.2. Zrzuty ekranu aplikacji
92
6.2. Zrzuty ekranu aplikacji
Niniejsza sekcja przedstawia reprezentatywne, przykładowe zrzuty ekranu aplikacji mobilnej oraz internetowej.
6.2.1. Zrzuty ekranu aplikacji mobilnej
Rysunki 6.3–6.41 przedstawiaja˛ zrzuty ekranu aplikacji mobilnej.
Rysunek
6.3. Ekran Rysunek
6.4. Ekran Rysunek 6.5. Ekran przyz ikona˛ aplikacji.
główny.
cisku „Menu”.
Rysunek 6.6. Ekran mapy Rysunek 6.7. Ekran usta- Rysunek 6.8. Ekran inforpozycji
geograficznych
wień aplikacji.
macyjny aplikacji.
wszystkich obrazów.
6.2. Zrzuty ekranu aplikacji
93
Rysunek 6.9. Ekran po- Rysunek 6.10. Ekran po- Rysunek 6.11. Ekran pobierania obrazu z kamery. bierania obrazu z systemu bierania obrazu z adresu
plików.
URL.
Rysunek 6.12. Ekran wybierania kryterium wyszukiwania obrazów (cały obraz, region lub kontur) dla
wybranego obrazu wzorcowego.
6.2. Zrzuty ekranu aplikacji
94
Rysunek 6.13. Ekran go- Rysunek 6.14. Ekran za- Rysunek 6.15. Ekran autowości do zaznaczania re- znaczania regionu na obra- tomatycznego domkniecia
˛
gionu.
regionu.
zie.
Rysunek 6.16. Ekran go- Rysunek 6.17. Ekran za- Rysunek 6.18. Ekran autowości do zaznaczania znaczania konturu na ob- tomatycznego domkniecia
˛
konturu.
razie.
konturu.
6.2. Zrzuty ekranu aplikacji
95
6.20. Ekran Rysunek
Rysunek
6.19. Ekran Rysunek
6.21. Ekran
ustawiania opcji wyszuki- ustawiania pozycji geo- ustawiania maksymalnej
graficznej
(recznie
˛
lub liczby zwróconych obrawania obrazów.
automatycznie — z odbiorzów.
nika GPS czy na podstawie
lokalizacji sieci komputerowej), wokół której maja˛
być wyszukiwane obrazy.
Rysunek 6.22. Ekran wybierania (z listy przewijalnej, cze˛ ściowo niewidocznej) algorytmów wyszukiwania całego obrazu.
Rysunek 6.23. Ekran wybierania (z listy przewijalnej, cze˛ ściowo niewidocznej) algorytmów wyszukiwania regionu na obrazie.
Rysunek 6.24. Ekran wybierania (z listy przewijalnej, cze˛ ściowo niewidocznej) algorytmów wyszukiwania konturu na obrazie.
6.2. Zrzuty ekranu aplikacji
Rysunek
6.26. Ekran
wyświetlania opcji danego
wyszukanego obrazu.
Rysunek 6.25. Ekran wyświetlania wyników wyszukiwania obrazów.
Rysunek
6.27. Ekran
wyświetlania
wyszukanego obrazu w wysokiej
rozdzielczości dla wyszukiwania całego obrazu.
96
Rysunek
6.28. Ekran
wyświetlania
wyszukanego obrazu w wysokiej
rozdzielczości dla
wyszukiwania regionu na
obrazie.
Rysunek
6.29. Ekran
wyświetlania
wyszukanego obrazu w wysokiej
rozdzielczości dla wyszukiwania konturu na
obrazie.
6.2. Zrzuty ekranu aplikacji
Rysunek 6.30. Ekran wy- Rysunek
6.31. Ekran
świetlania szczegółowego wyświetlania na mapie
opisu obrazu.
pozycji geograficznej obrazu.
97
Rysunek
6.32. Ekran
wyświetlania szczegółów
technicznych
danego
wyszukanego
obrazu
(jego odległości od wzorca
dla poszczególnych algorytmów) w postaci listy
przewijalnej
(cze˛ ściowo
niewidocznej — w poziomie i pionie).
6.35. Ekran
Rysunek
6.33. Ekran Rysunek 6.34. Ekran two- Rysunek
parametrów
wybierania obrazów do rzenia obrazu na potrzeby ustawiania
przesłania na serwer.
przesłania go na serwer. każdego wybranego do
przesłania obrazu.
98
6.2. Zrzuty ekranu aplikacji
Rysunek
6.36. Ekran
wstawiania pozycji geograficznej
przesyłanego
na serwer obrazu (recznie
˛
lub automatycznie — z
odbiornika GPS czy na
podstawie lokalizacji sieci
komputerowej).
Rysunek
6.37. Ekran
ustawiania polityki dotyczacej
˛
regionów i konturów
dla danego obrazu przesyłanego na serwer.
Rysunek
6.38. Ekran
pustej
listy
regionów
i konturów dla wybranego
do przesłania na serwer
obrazu.
Rysunek
6.39. Ekran
tworzenia kształtu, bed
˛ a˛
cego ostatecznie regionem
i/albo konturem należa˛
cym do danego obrazu
przesyłanego na serwer.
Rysunek
6.40. Ekran
decydowania o rodzaju
kształtu
dla
kształtu
uprzednio
utworzonego
(region, kontur lub jednocześnie region i kontur).
Rysunek
6.41. Ekran
niepustej listy regionów
i konturów dla wybranego
do przesłania na serwer
obrazu.
6.2.2. Zrzuty ekranu aplikacji internetowej
Rysunki 6.42–6.45 przedstawiaja˛ zrzuty ekranu aplikacji internetowej.
6.2. Zrzuty ekranu aplikacji
Rysunek 6.42. Ekran rejestracji nowego użytkownika.
Rysunek 6.43. Ekran logowania użytkownika do systemu.
99
6.2. Zrzuty ekranu aplikacji
100
Rysunek 6.44. Ekran zarzadzania
˛
kontem użytkownika.
Rysunek 6.45. Ekran wyników wyszukiwania tekstowego obrazów na podstawie
podanej frazy (przeszukiwane sa˛ trzy właściwości obrazów: oryginalna nazwa
pliku, krótki tytuł, szczegółowy opis).
6.3. Persystencja informacji o obrazach
101
6.3. Persystencja informacji o obrazach
Każdy obraz składowany w bazie danych reprezentowany jest przez obiekt klasy
Image, która mapowana jest na tabele˛ images, co pokazuje wydruk 6.1. Jak widać,
wyróżnić można m.in. naste˛ pujace
˛ właściwości:
— raster (obraz właściwy),
— miniatura obrazu,
— szerokość obrazu,
— wysokość obrazu,
— rozmiar obrazu (w bajtach),
— data utworzenia obrazu,
— data przesłania obrazu do systemu,
— identyfikator formatu pliku (typ MIME),
— oryginalna nazwa pliku obrazu,
— szerokość geograficzna miejsca wykonania obrazu,
— długość geograficzna miejsca wykonania obrazu,
— krótki tytuł obrazu,
— szczegółowy opis obrazu,
— lista regionów znajdujacych
˛
sie˛ na obrazie (nie wszystkich możliwych, lecz tylko
tych charakterystycznych czy wartych zainteresowania),
— lista konturów znajdujacych
˛
sie˛ na obrazie (nie wszystkich możliwych, lecz tylko
tych charakterystycznych czy wartych zainteresowania).
Zarówno obraz właściwy jak i jego miniatura zdefiniowane sa˛ w klasie Image jako
pola typu byte[] (i nazwach — odpowiednio — raster i thumbnail). Pola te mapowane
sa˛ w tabeli images na dwie różne kolumny o jednakowym typie. Typem tym w przypadku bazy danych PostgreSQL jest standardowy typ binarny bytea, nazywany
w ogólności w systemach baz danych typem BLOb (Binary Large Object). Alternatywa˛ wobec przechowywania obrazów (czyli danych binarnych) w bazie danych
było przechowywanie ich w systemie plików przy jednoczesnym przechowywaniu
w bazie danych jedynie informacji o lokalizacji tych obrazów w systemie plików.
W przypadku bardzo dużych plików binarnych (rzedu
˛
megabajtów) uznaje sie,
˛ że
takie rozwiazanie
˛
jest bardzo efektywne ze wzgledu
˛
na szybkość dostepu
˛
do plików.
Ostatecznie pomysł ten został jednak odrzucony ze wzgledu
˛
na przewage˛ typu BLOb
w kwestii:
— transakcyjności, która jest zapewniona w przypadku składowania obrazów bezpośrednio w bazie, dzie˛ ki czemu programista nie musi martwić sie,
˛ czy podczas
transakcji odbywajacej
˛
sie˛ na bazie danych został również odpowiednio zmodyfikowany system plików, który standardowo nie jest objety
˛ transakcja,
˛
— kopii bezpieczeństwa, która˛ jest łatwiej przeprowadzać na bazie danych, gdy
wszystkie informacje znajduja˛ sie˛ wewnatrz
˛
niej, ponieważ wówczas nie trzeba
martwić sie˛ o kopie˛ bezpieczeństwa systemu plików.
Warto w klasie Image zwrócić dodatkowo uwage˛ na adnotacje˛ @Index(name =
"id_index") przy polu id. Na identyfikator obrazu został założony indeks, ponieważ
odczyty obrazów (a w zasadzie ich miniatur) na podstawie identyfikatora wykonuja˛
si˛e bardzo cze˛ sto i o wiele cześciej
˛
niż zapisy nowych obrazów do bazy danych.
W takiej sytuacji zastosowanie indeksu wydaje sie˛ mieć sens. Tak zaadnotowane w
technologii Hibernate pole mapowane jest na polecenie jezyka
˛
SQL: CREATE INDEX
id_index ON images USING btree (id);. Skutkuje ono utworzeniem indeksu na bazie
B-drzewa.
6.3. Persystencja informacji o obrazach
102
Wydruk 6.1. Klasa Image.
1 @Entity
2 @Table(name = "images")
3 public class Image extends Data {
4
5
@Id
6
@GeneratedValue
7
@Index(name = "id_index")
8
private Long id;
9
10
@Version
11
private Long version;
12
13
@Column(nullable = false)
14
private byte[] raster;
15
16
@Column(nullable = false)
17
private byte[] thumbnail;
18
19
@Column(nullable = false)
20
private Integer width;
21
22
@Column(nullable = false)
23
private Integer height;
24
25
@Column(name = "size_in_bytes", nullable = false)
26
private Integer sizeInBytes;
27
28
@Column(name = "creation_date", nullable = true)
29
private Date creationDate;
30
31
@Column(name = "upload_date", nullable = false)
32
private Date uploadDate;
33
34
@Column(name = "content_type", nullable = false)
35
private String contentType;
36
37
@Column(name = "original_file_name", nullable = false)
38
private String originalFileName;
39
40
@Column(name = "geographic_position_latitude", nullable = true)
41
private Double geographicPositionLatitude;
42
43
@Column(name = "geographic_position_longitude", nullable = true)
44
private Double geographicPositionLongitude;
45
46
@Column(name = "short_title",
47
nullable = FieldRestriction.shortTitleNullable,
6.3. Persystencja informacji o obrazach
103
48
length = FieldRestriction.shortTitleMaxLength)
49
private String shortTitle;
50
51
@Column(name = "detailed_description",
52
nullable = FieldRestriction.detailedDescriptionNullable,
53
length = FieldRestriction.detailedDescriptionMaxLength)
54
private String detailedDescription;
55
56
@OneToMany(cascade = CascadeType.ALL)
57
@LazyCollection(LazyCollectionOption.TRUE)
58
private List<ImageRegion> imageRegions;
59
60
@OneToMany(cascade = CascadeType.ALL)
61
@LazyCollection(LazyCollectionOption.TRUE)
62
private List<ImageContour> imageContours;
63
64
// konstruktory, akcesory itp. (tu pomijane)
65 }
Region obrazu jest z kolei reprezentowany w postaci klasy ImageRegion, pokazanej
na wydruku 6.2.
Wydruk 6.2. Klasa ImageRegion.
1 @Entity
2 public class ImageRegion extends Data {
3
4
@Id
5
@GeneratedValue
6
private long id;
7
8
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
9
private List<ContourPoint> contourPoints;
10
11
@ManyToOne
12
@JoinColumn(name = "image_id", nullable = false)
13
private Image image;
14
15
// konstruktory, akcesory itp. (tu pomijane)
16 }
Kontur obrazu charakteryzowany jest analogicznie jak region. Wydruk 6.3 pokazuje klase˛ ImageContour.
Wydruk 6.3. Klasa ImageContour.
1 @Entity
2 public class ImageContour extends Data {
3
4
@Id
5
@GeneratedValue
6
private long id;
6.3. Persystencja informacji o obrazach
104
7
8
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
9
private List<ContourPoint> contourPoints;
10
11
@ManyToOne
12
@JoinColumn(name = "image_id", nullable = false)
13
private Image image;
14
15
// konstruktory, akcesory itp. (tu pomijane)
16 }
Obie klasy (ImageRegion i ImageContour) zawieraja˛ liste˛ punktów klasy ContourPoint, przedstawionej na wydruku 6.4. Klasa ta posiada współrzedne
˛
x i y punktu na
obrazie.
Wydruk 6.4. Klasa ContourPoint.
1 @Entity
2 public class ContourPoint extends Data {
3
4
@Id
5
@GeneratedValue
6
private long id;
7
8
@Column(name = "x", nullable = false)
9
private Integer x;
10
11
@Column(name = "y", nullable = false)
12
private Integer y;
13
14
// konstruktory, akcesory itp. (tu pomijane)
15 }
Z obrazem klasy Image jest zawsze skojarzony jego wektor cech klasy FullImageFeatureVector, przedstawiony na wydruku 6.5. Tego typu wektor cech odnosi sie˛ do
obrazu globalnie, tzn. nie jest on skojarzony z regionem czy konturem, lecz z obrazem jako całościa.
˛ Na podstawie wydruku da sie˛ wywnioskować, jakie algorytmy
wyliczania deskryptorów całego obrazu sa˛ dostepne
˛
w aplikacji mobilnej. Sa˛ to:
— średnia jasność w przestrzeni RGB,
— średnia jasność w przestrzeni CIE Lab,
— wariancja jasności w przestrzeni RGB,
— kontrast jasności w przestrzeni RGB,
— histogram znormalizowany skumulowany w przestrzeni RGB,
— entropia w przestrzeni RGB,
— autokorelogram w przestrzeni RGB,
— skaloniezmiennicze przekształcanie cech (SIFT) w przestrzeni skali szarości,
— przyspieszone silne cechy (SURF) w przestrzeni skali szarości,
— zorientowany BRIEF (ORB) w przestrzeni skali szarości.
Wydruk 6.5. Klasa FullImageFeatureVector.
1 @Entity
6.3. Persystencja informacji o obrazach
2 @Table(name = "full_image_feature_vectors")
3 public class FullImageFeatureVector extends Data
4
implements ImageFeatureVector {
5
6
@Id
7
@GeneratedValue
8
private Long id;
9
10
@Version
11
private Long version;
12
13
@ManyToOne
14
@JoinColumn(name = "image_id", unique = true, nullable = false)
15
private final Image image;
16
17
@Column(name = "rgb_mean_brightness_r", nullable = false)
18
private Integer rgbMeanBrightnessR;
19
20
@Column(name = "rgb_mean_brightness_g", nullable = false)
21
private Integer rgbMeanBrightnessG;
22
23
@Column(name = "rgb_mean_brightness_b", nullable = false)
24
private Integer rgbMeanBrightnessB;
25
26
@Column(name = "cielab_mean_brightness_l", nullable = false)
27
private Float cieLabMeanBrightnessL;
28
29
@Column(name = "cielab_mean_brightness_a", nullable = false)
30
private Float cieLabMeanBrightnessA;
31
32
@Column(name = "cielab_mean_brightness_b", nullable = false)
33
private Float cieLabMeanBrightnessB;
34
35
@Column(name = "rgb_brightness_variance_r", nullable = false)
36
private Integer rgbBrightnessVarianceR;
37
38
@Column(name = "rgb_brightness_variance_g", nullable = false)
39
private Integer rgbBrightnessVarianceG;
40
41
@Column(name = "rgb_brightness_variance_b", nullable = false)
42
private Integer rgbBrightnessVarianceB;
43
44
@Column(name = "rgb_brightness_contrast_r", nullable = false)
45
private Double rgbBrightnessContrastR;
46
47
@Column(name = "rgb_brightness_contrast_g", nullable = false)
48
private Double rgbBrightnessContrastG;
49
50
@Column(name = "rgb_brightness_contrast_b", nullable = false)
105
6.3. Persystencja informacji o obrazach
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
106
private Double rgbBrightnessContrastB;
@ElementCollection
@CollectionTable(name = "rgb_cumulative_normalized_histograms_r",
joinColumns = @JoinColumn(name =
"full_image_feature_vector_id"))
@Column(name = "rgb_cumulative_normalized_histogram_r")
private List<Double> rgbCumulativeNormalizedHistogramR;
@ElementCollection
@CollectionTable(name = "rgb_cumulative_normalized_histograms_g",
joinColumns = @JoinColumn(name =
"full_image_feature_vector_id"))
@Column(name = "rgb_cumulative_normalized_histogram_g")
private List<Double> rgbCumulativeNormalizedHistogramG;
@ElementCollection
@CollectionTable(name = "rgb_cumulative_normalized_histograms_b",
joinColumns = @JoinColumn(name =
"full_image_feature_vector_id"))
@Column(name = "rgb_cumulative_normalized_histogram_b")
private List<Double> rgbCumulativeNormalizedHistogramB;
@Column(name = "rgb_entropy_r", nullable = false)
private Double rgbEntropyR;
@Column(name = "rgb_entropy_g", nullable = false)
private Double rgbEntropyG;
@Column(name = "rgb_entropy_b", nullable = false)
private Double rgbEntropyB;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name =
"full_image_feature_vectors_rgb_auto_correlograms_r",
joinColumns = @JoinColumn(name =
"full_image_feature_vector_id"), inverseJoinColumns =
@JoinColumn(name = "distance_probabilities_for_color_id"))
@LazyCollection(LazyCollectionOption.TRUE)
private List<DistanceProbabilitiesForColor> rgbAutoCorrelogramR;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name =
"full_image_feature_vectors_rgb_auto_correlograms_g",
joinColumns = @JoinColumn(name =
"full_image_feature_vector_id"), inverseJoinColumns =
@JoinColumn(name = "distance_probabilities_for_color_id"))
@LazyCollection(LazyCollectionOption.TRUE)
private List<DistanceProbabilitiesForColor> rgbAutoCorrelogramG;
6.3. Persystencja informacji o obrazach
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
107
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name =
"full_image_feature_vectors_rgb_auto_correlograms_b",
joinColumns = @JoinColumn(name =
"full_image_feature_vector_id"), inverseJoinColumns =
@JoinColumn(name = "distance_probabilities_for_color_id"))
@LazyCollection(LazyCollectionOption.TRUE)
private List<DistanceProbabilitiesForColor> rgbAutoCorrelogramB;
@ElementCollection
@CollectionTable(name =
"greyscale_scale_invariant_feature_transform_descriptors",
joinColumns = @JoinColumn(
name = "full_image_feature_vector_id"))
@Column(name =
"greyscale_scale_invariant_feature_transform_descriptor")
private List<Float>
greyscaleScaleInvariantFeatureTransformDescriptor;
@Column(name =
"greyscale_scale_invariant_feature_transform_
descriptor_rows_count",
nullable = false)
private Integer
greyscaleScaleInvariantFeatureTransformDescriptorRowsCount;
@Column(
name = "greyscale_scale_invariant_feature_transform_
descriptor_columns_count",
nullable = true)
private Integer
greyscaleScaleInvariantFeatureTransformDescriptorColumnsCount;
@ElementCollection
@CollectionTable(
name = "greyscale_speeded_up_robust_features_descriptors",
joinColumns = @JoinColumn(
name = "full_image_feature_vector_id"))
@Column(name = "greyscale_speeded_up_robust_features_descriptor")
private List<Float>
greyscaleSpeededUpRobustFeaturesDescriptor;
@Column(
name = "greyscale_speeded_up_robust_features_
descriptor_rows_count",
nullable = false)
private Integer
greyscaleSpeededUpRobustFeaturesDescriptorRowsCount;
6.3. Persystencja informacji o obrazach
108
149
150
@Column(
151
name = "greyscale_speeded_up_robust_features_
152
descriptor_columns_count",
153
nullable = true)
154
private Integer
155
greyscaleSpeededUpRobustFeaturesDescriptorColumnsCount;
156
157
@ElementCollection
158
@CollectionTable(
159
name = "greyscale_oriented_brief_descriptors",
160
joinColumns = @JoinColumn(
161
name = "full_image_feature_vector_id"))
162
@Column(name = "greyscale_oriented_brief_descriptor")
163
private List<Byte>
164
greyscaleOrientedBRIEFDescriptor;
165
166
@Column(
167
name = "greyscale_oriented_brief_descriptor_rows_count",
168
nullable = false)
169
private Integer
170
greyscaleOrientedBRIEFDescriptorRowsCount;
171
172
@Column(
173
name = "greyscale_oriented_brief_descriptor_columns_count",
174
nullable = true)
175
private Integer
176
greyscaleOrientedBRIEFDescriptorColumnsCount;
177
178
// konstruktory, akcesory itp. (tu pomijane)
179 }
Z regionem obrazu jest natomiast skojarzony wektor cech reprezentowany przez
klas˛e ImageRegionFeatureVector, widoczny na wydruku 6.6. Jak widać, aplikacja
mobilna umożliwia wyszukiwanie regionów w oparciu o nastepuj
˛
ace
˛ deskryptory:
— niezmiennik momentowy M1,
— niezmiennik momentowy M2,
— niezmiennik momentowy M3,
— niezmiennik momentowy M4,
— niezmiennik momentowy M5,
— niezmiennik momentowy M6,
— niezmiennik momentowy M7.
Wydruk 6.6. Klasa ImageRegionFeatureVector.
1 @Entity
2 @Table(name = "image_region_feature_vectors")
3 public class ImageRegionFeatureVector extends Data implements
4
ImageFeatureVector {
5
6.3. Persystencja informacji o obrazach
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@Id
@GeneratedValue
private Long id;
@Version
private Long version;
@ManyToOne
@JoinColumn(name = "image_region_id", unique = true,
nullable = false)
private ImageRegion imageRegion;
@Column(name = "rgb_moment_invariant_m1_r", nullable = false)
private Double rgbMomentInvariantM1R;
@Column(name = "rgb_moment_invariant_m1_g", nullable = false)
private Double rgbMomentInvariantM1G;
@Column(name = "rgb_moment_invariant_m1_b", nullable = false)
private Double rgbMomentInvariantM1B;
@Column(name = "rgb_moment_invariant_m2_r", nullable = false)
private Double rgbMomentInvariantM2R;
@Column(name = "rgb_moment_invariant_m2_g", nullable = false)
private Double rgbMomentInvariantM2G;
@Column(name = "rgb_moment_invariant_m2_b", nullable = false)
private Double rgbMomentInvariantM2B;
@Column(name = "rgb_moment_invariant_m3_r", nullable = false)
private Double rgbMomentInvariantM3R;
@Column(name = "rgb_moment_invariant_m3_g", nullable = false)
private Double rgbMomentInvariantM3G;
@Column(name = "rgb_moment_invariant_m3_b", nullable = false)
private Double rgbMomentInvariantM3B;
@Column(name = "rgb_moment_invariant_m4_r", nullable = false)
private Double rgbMomentInvariantM4R;
@Column(name = "rgb_moment_invariant_m4_g", nullable = false)
private Double rgbMomentInvariantM4G;
@Column(name = "rgb_moment_invariant_m4_b", nullable = false)
private Double rgbMomentInvariantM4B;
@Column(name = "rgb_moment_invariant_m5_r", nullable = false)
109
110
6.3. Persystencja informacji o obrazach
55
private Double rgbMomentInvariantM5R;
56
57
@Column(name = "rgb_moment_invariant_m5_g", nullable
58
private Double rgbMomentInvariantM5G;
59
60
@Column(name = "rgb_moment_invariant_m5_b", nullable
61
private Double rgbMomentInvariantM5B;
62
63
@Column(name = "rgb_moment_invariant_m6_r", nullable
64
private Double rgbMomentInvariantM6R;
65
66
@Column(name = "rgb_moment_invariant_m6_g", nullable
67
private Double rgbMomentInvariantM6G;
68
69
@Column(name = "rgb_moment_invariant_m6_b", nullable
70
private Double rgbMomentInvariantM6B;
71
72
@Column(name = "rgb_moment_invariant_m7_r", nullable
73
private Double rgbMomentInvariantM7R;
74
75
@Column(name = "rgb_moment_invariant_m7_g", nullable
76
private Double rgbMomentInvariantM7G;
77
78
@Column(name = "rgb_moment_invariant_m7_b", nullable
79
private Double rgbMomentInvariantM7B;
80
81
// konstruktory, akcesory itp. (tu pomijane)
82 }
= false)
= false)
= false)
= false)
= false)
= false)
= false)
= false)
Z konturem obrazu jest skojarzony wektor cech reprezentowany przez klase˛ ImageContourFeatureVector, widoczny na wydruku 6.7. Jak widać, aplikacja mobilna
umożliwia wyszukiwanie konturów w oparciu o deskryptory Fouriera.
Wydruk 6.7. Klasa ImageContourFeatureVector.
1 @Entity
2 @Table(name = "image_contour_feature_vectors")
3 public class ImageContourFeatureVector extends Data implements
4
ImageFeatureVector {
5
6
@Id
7
@GeneratedValue
8
private Long id;
9
10
@Version
11
private Long version;
12
13
@ManyToOne
14
@JoinColumn(name = "image_contour_id", unique = true,
15
nullable = false)
6.3. Persystencja informacji o obrazach
111
16
private ImageContour imageContour;
17
18
@ElementCollection
19
@CollectionTable(name = "fourier_descriptors",
20
joinColumns = @JoinColumn(name =
21
"image_contour_feature_vector_id"))
22
@Column(name = "fourier_descriptor")
23
private List<Double> fourierDescriptors;
24
25
// konstruktory, akcesory itp. (tu pomijane)
26 }
Rysunek 6.46 przedstawia diagram zależności miedzy
˛
tabelami (zwiazanymi
˛
z informacjami obrazowymi) w bazie danych, wygenerowany za pomoca˛ programu
DbVisualizer Free 9.1.6.
112
6.3. Persystencja informacji o obrazach
images_imagecontour
images
image_contour_feature_vectors
imagecontour
imagecontour_contourpoint
contourpoint
imageregion_contourpoint
image_region_feature_vectors
imageregion
images_imageregion
fourier_descriptors
rgb_cumulative_normalized_histograms_g
rgb_cumulative_normalized_histograms_b
greyscale_speeded_up_robust_features_descriptors
greyscale_scale_invariant_feature_transform_descriptors
greyscale_oriented_brief_descriptors
full_image_feature_vectors
rgb_cumulative_normalized_histograms_r
full_image_feature_vectors_rgb_auto_correlograms_g
full_image_feature_vectors_rgb_auto_correlograms_r
distance_probabilities_for_colors
full_image_feature_vectors_rgb_auto_correlograms_b
distance_probabilities
Rysunek 6.46. Diagram zależności miedzy
˛
tabelami (zwiazanymi
˛
z informacjami
obrazowymi) w bazie danych.
6.4. Monitorowanie i profilowanie aplikacji
113
6.4. Monitorowanie i profilowanie aplikacji
W ramach dynamicznej analizy aplikacji zostało użyte — w celu optymalizacji
jej działania — narze˛ dzie JVisualVM [70] (Java VisualVM), dostepne
˛
w zestawie
narz˛edzi programistycznych JDK (Java Development Kit). Umożliwia ono monitorowanie i profilowanie aplikacji poprzez interfejs graficzny i — co za tym idzie
— rozwiazywanie
˛
problemów zwiazanych
˛
z wyciekami pamieci
˛ itp. Rysunek 6.47
przedstawia interfejs graficzny tego programu. Warto zwrócić na nim uwage˛ na nagły przyrost zużytej sterty (ang. heap) z kilkuset MB do ponad 3 GB, odnotowany
przy ustawionym parametrze maksymalnego rozmiaru sterty na nienaturalna,
˛ bo
bardzo duża˛ wartość 4 GB (parametr maszyny wirtualnej -Xmx4096m). Przyrost
ten spowodowany był — jak sie˛ okazało — błedn
˛ a˛ konfiguracja˛ strategii pobierania
danych z bazy danych w technologii Hibernate, a konkretnie użyciem adnotacji
@javax.persistence.OneToMany z elementem fetch = FetchType.EAGER (pobieranie
chciwe) zamiast fetch = FetchType.LAZY (pobieranie leniwe). Powodowało to nagłe
spowolnienie działania systemu, a ostatecznie — po kilkunastu minutach takiego
zdławienia — bład
˛ java.lang.OutOfMemoryError: GC overhead limit exceeded, pojawiajacy
˛ sie˛ w sytuacji, gdy działanie odśmiecacza pamieci
˛ (ang. garbage collector)
zajmuje nadmierna˛ ilość czasu (standardowo: 98% czasu procesora w skali procesu), po czym zwalnia on zbyt mała˛ ilość sterty (standardowo: 2%).
Rysunek 6.47. Interfejs graficzny narzedzia
˛
JVisualVM.
W przypadku zintegrowanego środowiska programistycznego JetBrains IntelliJ
IDEA korzystanie z narze˛ dzia JVisualVM polega na ściagni
˛ eciu
˛
wtyczki programowej VisualVM Launcher [109] (w postaci archiwum JAR), zainstalowaniu jej,
nast˛epnie podaniu — w ustawieniach wtyczki — ścieżki do pliku wykonywalnego
JVisualVM (<ścieżka_do_jdk>/bin/jvisualvm.exe) i — ostatecznie — uruchomieniu
aplikacji internetowej w trybie VisualVM.
6.5. Internacjonalizacja
114
6.5. Internacjonalizacja
Aplikacja mobilna przystosowana jest do obsługi dwóch jezyków
˛
— polskiego
i angielskiego. W trakcie uruchamiania aplikacji mobilnej jezyk
˛
komunikatów
w niej wyświetlanych dostosowywany jest do jezyka
˛
ustawionego bezpośrednio
w systemie operacyjnym urzadzenia.
˛
W przypadku ustawionego jezyka
˛
polskiego
komunikaty w aplikacji be˛ da˛ wyświetlane w jezyku
˛
polskim, natomiast w przypadku pozostałych je˛ zyków (w tym angielskiego) bed
˛ a˛ one wyświetlane w jezyku
˛
angielskim. Niestety, informacje o obrazach przechowywanych w bazie danych —
takie jak krótki tytuł obrazu czy jego szczegółowy opis — nie sa˛ internacjonalizowane, ponieważ baza danych jest obecnie w stanie przechowywać tego typu dane
tylko w jednej wersji je˛ zykowej. Poczatkowy
˛
fragment pliku XML, składujacego
˛
komunikaty aplikacji mobilnej w jezyku
˛
polskim, wyglada
˛ nastepuj
˛
aco:
˛
1 <resources>
2
3
<string name="work_mode_real_time_image_button">
4
Obraz z kamery</string>
5
6
<string name="work_mode_file_system_image_button">
7
Obraz z systemu plikow</string>
8
9
<string name="work_mode_url_image_button">
10
Obraz z adresu URL</string>
11
12
<string name="work_mode_upload_images_button">
13
Przeslanie obrazow</string>
14
15
<string name="work_mode_all_images_map_button">
16
Mapa wszystkich obrazow</string>
17
18
<string name="work_mode_app_settings_button">
19
Ustawienia</string>
20
21
<!-- ... -->
22 </resources>
Poczatkowy
˛
fragment analogicznego pliku XML, składujacego
˛
komunikaty aplikacji
mobilnej w je˛ zyku angielskim, wyglada
˛ nastepuj
˛
aco:
˛
1 <resources>
2
3
<string name="work_mode_real_time_image_button">
4
Captured image</string>
5
6
<string name="work_mode_file_system_image_button">
7
File-system image</string>
8
9
<string name="work_mode_url_image_button">
10
URL image</string>
11
6.5. Internacjonalizacja
115
12
<string name="work_mode_upload_images_button">
13
Images upload</string>
14
15
<string name="work_mode_all_images_map_button">
16
All images map</string>
17
18
<string name="work_mode_app_settings_button">
19
Settings</string>
20
21
<!-- ... -->
22 </resources>
Dość znany jest problem, który powstaje w sytuacji, gdy komunikat jezykowy
˛
powstaje po stronie serwera i jest nastepnie
˛
odsyłany klientowi (aplikacji mobilnej)
w ramach odpowiedzi na żadanie.
˛
Może sie˛ wydawać, że konieczne jest, aby serwer
znał ustawienia je˛ zykowe klienta po to, aby móc wygenerować treść we właściwym
j˛ezyku. Wymagałoby to wówczas przesyłania w każdym żadaniu
˛
do serwera informacji o je˛ zyku klienta, np. w formie zserializowanego obiektu java.util.Locale.
Jednak ten problem da sie˛ obejść, jeśli serwer bedzie
˛
odsyłał klientowi nie wiadomości zapisane w określonym jezyku,
˛
lecz uniwersalne klucze, na podstawie
których klient be˛ dzie mógł pobrać odpowiednia˛ wersje˛ jezykow
˛
a˛ wiadomości oznaczonej pewnym kluczem. Takie rozwiazanie
˛
zostało użyte w komunikacji pomiedzy
˛
aplikacja˛ mobilna˛ i internetowa.
˛ Fragment pliku tekstowego typu klucz–wartość,
składujacego
˛
komunikaty przesyłane aplikacji mobilnej przez serwer w jezyku
˛
polskim, wyglada
˛ naste˛ pujaco:
˛
1
2
3
4
5
6
7
8
9
imageFeature.RGBMeanBrightness=Srednia jasnosc (RGB)
imageFeature.RGBBrightnessVariance=Wariancja jasnosci (RGB)
imageFeature.RGBBrightnessContrast=Kontrast jasnosci (RGB)
imageFeature.CIELabMeanBrightness=Srednia jasnosc (CIE Lab)
imageFeature.RGBEntropy=Entropia (RGB)
imageFeature.RGBAutoCorrelogram=Auto korelogram (RGB)
imageFeature.RGBColorCoherenceVector=Wektor spojnosci koloru (RGB)
imageFeature.RGBZernikeMoments=Momenty Zernike’a (RGB)
# ...
Fragment analogicznego pliku w przypadku komunikatów w jezyku
˛
angielskim
wyglada
˛ naste˛ pujaco:
˛
1
2
3
4
5
6
7
8
9
imageFeature.RGBMeanBrightness=RGB mean brightness
imageFeature.RGBBrightnessVariance=RGB brightness variance
imageFeature.RGBBrightnessContrast=RGB brightness contrast
imageFeature.CIELabMeanBrightness=CIE Lab mean brightness
imageFeature.RGBEntropy=RGB entropy
imageFeature.RGBAutoCorrelogram=RGB auto correlogram
imageFeature.RGBColorCoherenceVector=RGB color coherence vector
imageFeature.RGBZernikeMoments=RGB Zernike moments
# ...
6.6. Biblioteka OpenCV
116
6.6. Biblioteka OpenCV
Implementacje niektórych z zastosowanych w aplikacji algorytmów zostały zaczerpnie˛ te z biblioteki OpenCV [33] (Open Source Computer Vision Library) w wersji 2.4.7, opisanej już w sekcji 6.1. W ogólności posiada ona ponad 2500 algorytmów z dziedziny widzenia komputerowego i uczenia maszynowego. Użycie tej biblioteki nie narusza wymagania wieloplatformowości (przenośności) systemu CBIR (mówiac
˛ bardziej precyzyjnie — wieloplatformowości serwera tego systemu), ponieważ stosować ja˛ można na wszystkich najbardziej popularnych systemach operacyjnych: Microsoft Windows, Linux, Mac OS X1 . Biblioteka ta, dost˛epna na licencji BSD, została natywnie napisana w jezyku
˛
C/C++, jednak ist2
nieje interfejs je˛ zyka Java opakowujacy
˛ biblioteke˛ OpenCV . Wydruk 6.8 przedstawia sposób ładowania natywnej biblioteki dynamicznej DLL (Dynamic-Link
Library) w czasie życia programu (serwera).
Po napotkaniu instrukcji System.loadLibrary(<nazwa_biblioteki>) wirtualna maszyna jezyka
˛
Java (JVM, Java
Virtual Machine) szuka biblioteki o podanej nazwie w katalogach podanych
w zmiennej systemowej java.library.path, która˛ można odpowiednio ustawić w linii poleceń: java -Djava.library.path=<ścieżka_do_katalogu_z_biblioteka_dll>
˛
<nazwa_aplikacji>. Interfejs OpenCV dla jezyka
˛
Java korzysta z natywnej biblioteki
OpenCV za pośrednictwem mechanizmu JNI (Java Native Interface).
Wydruk 6.8. Klasa AbstractGreyscaleKeyPointsBasedExtractor<T>.
1 public abstract class AbstractGreyscaleKeyPointsBasedExtractor<T>
2
extends RasterBasedImageFeatureExtractor<T> {
3
4
// pola itp. (tu pomijane)
5
6
static {
7
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
8
}
9
10
// konstruktory, metody itp. (tu pomijane)
11 }
W aplikacji internetowej używane sa˛ implementacje z biblioteki OpenCV naste˛
pujacych
˛
algorytmów:
— SIFT (Scale-Invariant Feature Transform),
— SURF (Speeded Up Robust Features),
— ORB (Oriented BRIEF).
1
Biblioteka może być również używana w mobilnych systemach operacyjnych, takich jak Google
Android czy Apple iOS, jednak w niniejszej pracy nie ma to znaczenia, ponieważ algorytmiczne
przetwarzanie obrazów odbywa si˛e w całości po stronie serwera, wi˛ec system operacyjny aplikacji
mobilnej nie musi jej wspierać.
2
Nie chodzi tu o interfejs j˛ezyka Java w postaci dość znanej biblioteki JavaCV, lecz o interfejs, który generowany jest automatycznie na podstawie parsowanych nagłówków C++ biblioteki
OpenCV [34]. Do zalet takiej automatycznej generacji kodu należa˛ aktualność interfejsu jezyka
˛
Java wzgl˛edem najnowszej wersji biblioteki oraz bardzo duże podobieństwo interfejsu j˛ezyka Java
wzgledem
˛
interfejsu oryginalnego j˛ezyka C/C++.
6.7. Komunikacja pomiedzy
˛
aplikacja˛ mobilna˛ i internetowa˛
117
6.7. Komunikacja pomiedzy
˛
aplikacja˛ mobilna˛ i internetowa˛
Wymiana danych pomie˛ dzy aplikacja˛ mobilna˛ i aplikacja˛ internetowa˛ odbywa
si˛e z użyciem protokołów HTTP (Hypertext Transfer Protocol) oraz HTTPS (Hypertext Transfer Protocol Secure), bazujacych
˛
z kolei na stosie protokołów TCP/IP
(Transmission Control Protocol/Internet Protocol), gwarantujacym
˛
wiarygodność
(ang. reliability) przesyłanych danych. Praktycznie wszystkie usługi udostepniane
˛
przez serwer wymagaja˛ połaczenia
˛
szyfrowanego HTTPS. Jedynie asynchroniczne
pobieranie obrazów w formie podstawowej (w wysokiej rozdzielczości) oraz miniaturowej — realizowane przez biblioteke˛ Universal Image Loader, opisana˛ w sekcji 6.1
— odbywa sie˛ przy pomocy nieszyfrowanego protokołu HTTP.
Na szczycie protokołu HTTP/HTTPS — w polu danych wewnatrz
˛
żada
˛ ń POST
oraz wewnatrz
˛
odpowiedzi na nie — umieszczane sa˛ dokumenty JSON (JavaScript
Object Notation). Do mapowania danych pomiedzy
˛
obiektami POJO w jezyku
˛
Java
a ich tekstowa˛ wersja˛ zapisana˛ w formacie JSON używana jest biblioteka Jackson,
co jest opisane w sekcji 6.1. Przesyłane przez sieć obrazy sa˛ kodowane przenośnym
kodem transportowym Base64.
W przypadku serwera Jetty szyfrowanie SSL (Secure Socket Layer) w postaci
protokołu HTTPS konfiguruje sie˛ w pliku <katalog_domowy_jetty>/etc/jetty.xml.
Polega to na dodaniu złacza
˛
(ang. connector) oraz jego zależności w postaci fabryki
kontekstu (ang. context factory):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<New id="sslContextFactory"
class="org.eclipse.jetty.http.ssl.SslContextFactory">
<Set name="KeyStore">C:\.key_jetty</Set>
<Set name="KeyStorePassword">myKeyStorePassword</Set>
<Set name="KeyManagerPassword">myKeyManagerPassword</Set>
<Set name="TrustStore">C:\.key_jetty</Set>
<Set name="TrustStorePassword">myTrustStorePassword</Set>
</New>
<Call name="addConnector">
<Arg>
<New class=
"org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
<Arg><Ref id="sslContextFactory"/></Arg>
<Set name="Port">8443</Set>
<Set name="maxIdleTime">30000</Set>
<Set name="Acceptors">2</Set>
<Set name="AcceptQueueSize">100</Set>
</New>
</Arg>
</Call>
W celu zachowania możliwości korzystania również z protokołu nieszyfrowanego
(HTTP) należy pozostawić złacze
˛
standardowe:
1 <Call name="addConnector">
2
<Arg>
3
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
4
<Set name="host"><Property name="jetty.host"/></Set>
6.8. Segmentacja nienadzorowana
118
5
<Set name="port"><Property name="jetty.port"
6
default="8080"/></Set>
7
<Set name="maxIdleTime">300000</Set>
8
<Set name="Acceptors">2</Set>
9
<Set name="statsOn">false</Set>
10
<Set name="confidentialPort">8443</Set>
11
<Set name="lowResourcesConnections">20000</Set>
12
<Set name="lowResourcesMaxIdleTime">5000</Set>
13
</New>
14
</Arg>
15 </Call>
To, aby określone usługi aplikacji internetowej — znajdujace
˛
sie˛ pod
określonymi adresami URL — były dostepne
˛
przez oba kanały (HTTP
i HTTPS) lub tylko przez jeden z nich (HTTP albo HTTPS), konfiguruje sie˛ już nie w samym serwerze (takim jak Jetty czy Tomcat), lecz
w konfiguracji szkieletu Spring.
W niniejszym projekcie jest to plik
WebApp/src/main/webapp/WEB-INF/spring/appServlet/spring-security.xml,
który posiada fragment typu:
1 <http auto-config="true">
2
<!-- ... -->
3
<intercept-url pattern="/" requires-channel="https"/>
4
<intercept-url pattern="/show_log_in_user_form"
5
requires-channel="https"/>
6
<intercept-url pattern="/log_out_user" requires-channel="https"/>
7
<intercept-url pattern="/show_manage_user_account_form"
8
requires-channel="https"/>
9
<intercept-url pattern="/show_register_user_form"
10
requires-channel="https"/>
11
<!-- ... -->
12 </http>
6.8. Segmentacja nienadzorowana
Podczas przesyłania nowych obrazów do serwera przez aplikacje˛ mobilna˛ użytkownik musi wybrać — dla każdego obrazu z osobna — jeden z trzech wariantów:
1. przesłanie obrazu bez zdefiniowanych dla niego regionów i konturów, przez co
w bazie danych zostanie umieszczony tylko obraz,
2. przesłanie obrazu z zaznaczona˛ opcja˛ automatycznej detekcji kształtów (regionów i konturów), odbywajacej
˛
sie˛ — już po stronie serwera — bez nadzoru użytkownika, przez co w bazie danych zostanie umieszczony obraz wraz z algorytmicznie znalezionymi kształtami,
3. przesłanie obrazu ze zdefiniowanymi recznie
˛
przez użytkownika kształtami (regionami i konturami), przez co w bazie danych zostanie umieszczony obraz wraz
z kształtami pożadanymi
˛
przez użytkownika bez kształtów odnajdowanych bez
jego nadzoru.
W przypadku drugim, czyli automatycznej detekcji kształtów, używany jest — zdefiniowany metoda˛ prób i błe˛ dów — pewien algorytm segmentacji nienadzorowanej,
6.8. Segmentacja nienadzorowana
119
którego ostatecznym rezultatem jest lista kształtów, przy czym każdy kształt bedzie
˛
uznany jednocześnie za region jak i kontur. Kształt jest z kolei zdefiniowany jako lista punktów tworzacych
˛
jego obwiednie˛ (dla uproszczenia obwiednia nazywana jest
po prostu konturem). Algorytm, reprezentowany przez funkcje˛ findShapes, przedstawiony jest w postaci pseudokodu 8. Funkcja findShapes, majaca
˛ swoja˛ implementacje˛ w postaci klasy ShapeFinderAlgorithm, znajduje spójne — pod wzgledem
˛
koloru — obszary (ang. blobs), a nastepnie
˛
dla każdego obszaru znajduje jego
obwiednie˛ , po czym zwraca liste˛ obwiedni. Podfunkcja findBlobs, implementowana
przez klase˛ BlobFinderAlgorithm, najpierw przeprowadza przetwarzanie wstepne
˛
obrazu w postaci uruchomienia — kolejno — filtru medianowego, uśredniajacego
˛
i wyostrzajacego,
˛
naste˛ pnie konwertuje obraz z przestrzeni RGB do przestrzeni CIE Lab,
aby ostatecznie znaleźć spójne obszary i wybrać z nich kilka tych najwiekszych,
˛
po
czym je zwrócić. Dla każdego takiego spójnego obszaru funkcja findContoursOfBlobs znajduje jego obwiednie˛ (kontur), co odbywa sie˛ w klasie ContourFinderAlgorithm. Zanim nastapi
˛ wyznaczenie obwiedni obszaru, jest on poddawany procesowi
dylacji (aby „wzmocnić” jego obwiednie,
˛ tj. uczynić ja˛ bardziej jednoznaczna˛ czy
zdeterminowana)
˛ oraz procesowi wypełniania dziur wewnatrz
˛
obszaru, nienależa˛
cych do niego (aby algorytm wyznaczajacy
˛ obwiednie˛ w trakcie „poruszania” sie˛ po
niej nie „zboczył z drogi” w strone˛ obwiedni dziury wtedy, gdy dziura znajdowałaby
si˛e blisko obwiedni). Wracajac
˛ do funkcji findBlobs, należy wspomnieć o jej podfunkcji findAllBlobs, która znajduje obszary spójne. Dwa sasiednie
˛
piksele należeć
b˛eda˛ do tego samego obszaru wtedy, gdy odległość Euklidesa miedzy
˛
ich kolorami
b˛edzie mniejsza niż pewna graniczna wartość. Porównywanie kolorów pikseli odbywa sie˛ w przestrzeni CIE Lab, ponieważ przestrzeń ta uznawana jest za przestrzeń równomierna,
˛ w której różnica miedzy
˛
jej dwoma kolorami jest skorelowana
z różnica˛ mie˛ dzy nimi postrzegana˛ przez ludzkie oko (2.2.7).
6.8. Segmentacja nienadzorowana
Algorytm 8 Algorytm segmentacji nienadzorowanej.
procedure FIND S HAPES(rgbArray)
booleanArrays ← FIND B LOBS(rgbArray)
3:
contours ← FIND C ONTOURS O F B LOBS(booleanArrays)
4:
return contours
5: end procedure
1:
2:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure FIND B LOBS(rgbArray)
rgbArray ← RUN M EDIAN F ILTER A LGORITHM(rgbArray)
rgbArray ← RUN B LUR F ILTER A LGORITHM(rgbArray)
rgbArray ← RUN S HARPENING F ILTER A LGORITHM(rgbArray)
cieLabArray ← CONVER T F ROM RGBA RRAY T O CIEL AB A RRAY(rgbArray)
booleanArrays ← FIND A LL B LOBS(cieLabArray)
booleanArrays ← CHOOSE B IGGEST B LOBS(booleanArrays)
return booleanArrays
end procedure
procedure FIND C ONTOURS O F B LOBS(booleanArrays)
for all booleanArray ∈ booleanArrays do
booleanArray ← RUN D ILATION F ILTER A LGORITHM(booleanArray)
booleanArray ← RUN H OLE F ILLER F ILTER A LGORITHM(booleanArray)
contour ← FIND C ONTOUR O F B LOB(booleanArray)
contours ← contours + contour
end for
return contours
end procedure
120
6.8. Segmentacja nienadzorowana
121
Od ustalenia granicznej wartości dopuszczalnej różnicy kolorów zależy skuteczność algorytmu. W tym celu przeprowadzone zostały testy majace
˛ za cel wyznaczyć
optymalna˛ wartość graniczna.
˛ Strojenie wspomnianego parametru odbywało sie˛
zarówno przy właczonym
˛
jak i wyłaczonym
˛
filtrze wyostrzajacym.
˛
Wszystkie poniższe czarno-białe rysunki w niniejszej sekcji posiadaja˛ — dla czytelności — czarna˛ ramke˛ o grubości 4 pikseli, która nie nie jest elementem prezentowanych wysegmentowanych kształtów czy ich konturów. Kontury wysegmentowanych obiektów, mimo że standardowo maja˛ grubość 1 piksela, na poniższych
rysunkach sa˛ — również dla czytelności — pogrubione w wyniku operacji dylacji.
Rysunki 6.48–6.56 pokazuja˛ rezultaty detekcji kształtów dla wartości granicznej
wynoszacej
˛
2,5 przy wyłaczonym
˛
filtrze wyostrzajacym.
˛
Rezultaty sa˛ bardzo dobre,
ponieważ algorytm znalazł pożadane
˛
kształty o dobrych jakościowo obwiedniach
w pożadanej
˛
ilości dwóch sztuk (budowla i tło).
Rysunek
6.48. Obraz Rysunek 6.49. Obraz wej- Rysunek 6.50. Obraz wejściowy po filtracji media- ściowy po filtracji mediawejściowy.
nowej.
nowej i uśredniajacej.
˛
6.8. Segmentacja nienadzorowana
122
Rysunek 6.51. Kształt nr Rysunek 6.52. Kształt nr
1 (czarne piksele).
1 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.53. Kontur
kształtu nr 1 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek 6.54. Kształt nr Rysunek 6.55. Kształt nr
2 (czarne piksele).
2 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.56. Kontur
kształtu nr 2 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunki 6.57–6.69 pokazuja˛ rezultaty detekcji kształtów dla wartości granicznej wynoszacej
˛
9 przy właczonym
˛
filtrze wyostrzajacym.
˛
Rezultaty sa˛ gorsze niż
w przypadku rezultatów 6.48–6.56, ponieważ kształt w postaci budowli — zamiast
być spójny, czyli pojedynczy — został podzielony na dwa oddzielne kształty (dach
i reszte˛ budowli), co nie jest oczekiwane przez użytkownika.
6.8. Segmentacja nienadzorowana
123
Rysunek
6.57. Obraz
wejściowy.
Rysunek 6.58. Obraz wejściowy po filtracji medianowej.
Rysunek
6.59. Obraz
wejściowy po filtracji medianowej i uśredniajacej.
˛
Rysunek 6.60. Obraz wejściowy po filtracji medianowej, uśredniajacej
˛
i wyostrzajacej.
˛
6.8. Segmentacja nienadzorowana
124
Rysunek 6.61. Kształt nr Rysunek 6.62. Kształt nr
1 (czarne piksele).
1 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.63. Kontur
kształtu nr 1 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek 6.64. Kształt nr Rysunek 6.65. Kształt nr
2 (czarne piksele).
2 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.66. Kontur
kształtu nr 2 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
6.8. Segmentacja nienadzorowana
Rysunek 6.67. Kształt nr Rysunek 6.68. Kształt nr
3 (czarne piksele).
3 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
125
Rysunek
6.69. Kontur
kształtu nr 3 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
6.8. Segmentacja nienadzorowana
126
Rysunki 6.70–6.76 pokazuja˛ rezultaty detekcji kształtów dla wartości granicznej
wynoszacej
˛
9,5 przy właczonym
˛
filtrze wyostrzajacym.
˛
Rezultaty sa˛ nie do przyjecia,
˛
ponieważ algorytm uzyskał jeden duży — pokrywajacy
˛ prawie cały obraz — kształt,
do którego należa˛ zarówno piksele budowli jak i piksele tła. Dalsze zwiekszanie
˛
wartości granicznej nie ma sensu, ponieważ powoduje co raz wieksze
˛
zamazywanie
różnić mie˛ dzy kształtami, które sa˛ wówczas ze soba˛ łaczone.
˛
Po analizie trzech
przypadków (6.48–6.56, 6.57–6.69, 6.70–6.76) optymalnym rozwiazaniem
˛
wydaje
si˛e wariant z:
— nie właczaniem
˛
filtru wyostrzajacego,
˛
— wartościa˛ graniczna˛ 2,5.
Warto zauważyć, że w parze z właczeniem
˛
filtru wyostrzajacego
˛
ida˛ wieksze
˛
wartości
graniczne. Wynika to z tego, że po wyostrzeniu krawedzi
˛
przepaść kolorystyczna
pomi˛edzy sasiednimi
˛
obszarami jest wieksza,
˛
ponieważ sa˛ one oddzielone bardziej
wyrazista˛ granica,
˛ a wie˛ c nie jest tak łatwo jej „przeskoczyć”, dlatego zwiekszenie
˛
wartości granicznej nie powoduje wówczas łaczenia
˛
różnych obszarów w jeden,
a umożliwia swobodniejsze powiekszanie
˛
jednego obszaru.
Rysunek
6.70. Obraz
wejściowy.
Rysunek 6.71. Obraz wejściowy po filtracji medianowej.
6.8. Segmentacja nienadzorowana
127
Rysunek
6.72. Obraz
wejściowy po filtracji medianowej i uśredniajacej.
˛
Rysunek 6.73. Obraz wejściowy po filtracji medianowej, uśredniajacej
˛
i wyostrzajacej.
˛
Rysunek 6.74. Kształt nr Rysunek 6.75. Kształt nr
1 (czarne piksele).
1 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.76. Kontur
kształtu nr 1 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunki 6.77–6.100 pokazuja˛ rezultaty detekcji kształtów dla wartości granicznej wynoszacej
˛
2 przy wyłaczonym
˛
filtrze wyostrzajacym.
˛
Rezultaty sa˛ zadowalajace,
˛
ponieważ najważniejszy dla obserwatora obszar — pomnik — został wyodreb˛
niony prawidłowo. Poza tym prawidłowo zostało wyodrebnione
˛
niebo. Pozostałe
kształty — mimo że nie prezentuja˛ zbyt dużej wartości użytkowej dla użytkownika
— sa˛ do zaakceptowania, ponieważ przedstawiaja˛ w miare˛ spójne cześci
˛
kamienic.
6.8. Segmentacja nienadzorowana
128
Wyodre˛ bnienie każdej kamienicy jako osobnego kształtu wydaje sie˛ zadaniem —
przy segmentacji nienadzorowanej — bardzo trudnym.
Rysunek
6.77. Obraz Rysunek 6.78. Obraz wej- Rysunek 6.79. Obraz wejściowy po filtracji media- ściowy po filtracji mediawejściowy.
nowej.
nowej i uśredniajacej.
˛
Rysunek 6.80. Kształt nr Rysunek 6.81. Kształt nr
1 (czarne piksele).
1 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.82. Kontur
kształtu nr 1 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek 6.83. Kształt nr Rysunek 6.84. Kształt nr
2 (czarne piksele).
2 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.85. Kontur
kształtu nr 2 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
6.8. Segmentacja nienadzorowana
129
Rysunek 6.86. Kształt nr Rysunek 6.87. Kształt nr
3 (czarne piksele).
3 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.88. Kontur
kształtu nr 3 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek 6.89. Kształt nr Rysunek 6.90. Kształt nr
4 (czarne piksele).
4 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.91. Kontur
kształtu nr 4 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek 6.92. Kształt nr Rysunek 6.93. Kształt nr
5 (czarne piksele).
5 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.94. Kontur
kształtu nr 5 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
6.8. Segmentacja nienadzorowana
130
Rysunek 6.95. Kształt nr Rysunek 6.96. Kształt nr
6 (czarne piksele).
6 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.97. Kontur
kształtu nr 6 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek 6.98. Kształt nr Rysunek 6.99. Kształt nr
7 (czarne piksele).
7 (czarne piksele) po filtracji dylacyjnej i usunieciu
˛
dziur.
Rysunek
6.100. Kontur
kształtu nr 7 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
6.8. Segmentacja nienadzorowana
131
Rysunki 6.101–6.112 pokazuja˛ rezultaty detekcji kształtów dla wartości granicznej wynoszacej
˛
3 przy wyłaczonym
˛
filtrze wyostrzajacym.
˛
Rezultaty sa˛ troche˛
gorsze niż w przypadku 6.77–6.100. Mniejsza ilość kształtów wynika ze zwiekszo˛
nej wartości granicznej, co z kolei zwieksza
˛
tolerancje˛ na łaczenie
˛
obszarów. Obszar
zwiazany
˛
z niebem został niepożadanie
˛
połaczony
˛
z obszarami niektórych kamienic,
natomiast główny obszar zainteresowania, czyli pomnik, został wyodrebniony
˛
bezbł˛ednie. Dalsze zwie˛ kszanie wartości granicznej jest bezprzedmiotowe, ponieważ
powoduje powstanie jednego kształtu reprezentujacego
˛
cały obraz.
6.102. Obraz Rysunek
6.103. Obraz
Rysunek
6.101. Obraz Rysunek
wejściowy
po
filtracji wejściowy po filtracji mewejściowy.
medianowej.
dianowej i uśredniajacej.
˛
Rysunek
6.104. Kształt Rysunek
6.105. Kształt
nr 1 (czarne piksele).
nr 1 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.106. Kontur
kształtu nr 1 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek
6.107. Kształt Rysunek
6.108. Kształt
nr 2 (czarne piksele).
nr 2 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.109. Kontur
kształtu nr 2 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
6.8. Segmentacja nienadzorowana
Rysunek
6.110. Kształt Rysunek
6.111. Kształt
nr 3 (czarne piksele).
nr 3 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
132
Rysunek
6.112. Kontur
kształtu nr 3 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunki 6.113–6.125 pokazuja˛ rezultaty detekcji kształtów dla wartości granicznej wynoszacej
˛
5 przy właczonym
˛
filtrze wyostrzajacym.
˛
Rezultaty wydaja˛ sie˛
być zadowalajace,
˛
ponieważ dwa najbardziej charakterystyczne obszary (pomnik
i niebo) zostały wyodre˛ bnione bezbłednie,
˛
a poza tym brak dodatkowych, nic nie
znaczacych,
˛
obszarów (poza jedynym).
Rysunek
6.113. Obraz
wejściowy.
Rysunek
6.114. Obraz
wejściowy
po
filtracji
medianowej.
Rysunek
6.115. Obraz
wejściowy po filtracji medianowej i uśredniajacej.
˛
Rysunek
6.116. Obraz
wejściowy
po
filtracji
medianowej, uśredniajacej
˛
i wyostrzajacej.
˛
6.8. Segmentacja nienadzorowana
133
Rysunek
6.117. Kształt Rysunek
6.118. Kształt
nr 1 (czarne piksele).
nr 1 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.119. Kontur
kształtu nr 1 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek
6.120. Kształt Rysunek
6.121. Kształt
nr 2 (czarne piksele).
nr 2 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.122. Kontur
kształtu nr 2 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek
6.123. Kształt Rysunek
6.124. Kształt
nr 3 (czarne piksele).
nr 3 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.125. Kontur
kształtu nr 3 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunki 6.126–6.153 pokazuja˛ rezultaty detekcji kształtów dla wartości granicznej wynoszacej
˛
9,2 przy właczonym
˛
filtrze wyostrzajacym.
˛
Obszar zwiazany
˛
z niebem został wyodre˛ bniony bezbłednie.
˛
Obszar pomnika został niepożadanie
˛
połaczony
˛
z obszarem jednej z kamienic, co nie stanowi mimo wszystko dużego
problemu. Oprócz tego jest nadmiar nic nieznaczacych
˛
nadmiarowych regionów.
6.8. Segmentacja nienadzorowana
134
Rysunek
6.126. Obraz
wejściowy.
Rysunek
6.127. Obraz
wejściowy
po
filtracji
medianowej.
Rysunek
6.128. Obraz
wejściowy po filtracji medianowej i uśredniajacej.
˛
Rysunek
6.129. Obraz
wejściowy
po
filtracji
medianowej, uśredniajacej
˛
i wyostrzajacej.
˛
Rysunek
6.130. Kształt Rysunek
6.131. Kształt
nr 1 (czarne piksele).
nr 1 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.132. Kontur
kształtu nr 1 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
6.8. Segmentacja nienadzorowana
135
Rysunek
6.133. Kształt Rysunek
6.134. Kształt
nr 2 (czarne piksele).
nr 2 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.135. Kontur
kształtu nr 2 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek
6.136. Kształt Rysunek
6.137. Kształt
nr 3 (czarne piksele).
nr 3 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.138. Kontur
kształtu nr 3 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek
6.139. Kształt Rysunek
6.140. Kształt
nr 4 (czarne piksele).
nr 4 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.141. Kontur
kształtu nr 4 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
6.8. Segmentacja nienadzorowana
136
Rysunek
6.142. Kształt Rysunek
6.143. Kształt
nr 5 (czarne piksele).
nr 5 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.144. Kontur
kształtu nr 5 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek
6.145. Kształt Rysunek
6.146. Kształt
nr 6 (czarne piksele).
nr 6 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.147. Kontur
kształtu nr 6 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
Rysunek
6.148. Kształt Rysunek
6.149. Kształt
nr 7 (czarne piksele).
nr 7 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
Rysunek
6.150. Kontur
kształtu nr 7 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
6.8. Segmentacja nienadzorowana
Rysunek
6.151. Kształt Rysunek
6.152. Kształt
nr 8 (czarne piksele).
nr 8 (czarne piksele) po
filtracji dylacyjnej i usunie˛
ciu dziur.
137
Rysunek
6.153. Kontur
kształtu nr 8 (czarne piksele) po uprzedniej filtracji
dylacyjnej
i
usunieciu
˛
dziur.
6.9. Łaczenie
˛
wyników algorytmów
138
Ostatecznie, w wyniku analizy różnych wariantów połaczenia
˛
wartości granicznej z właczeniem
˛
lub wyłaczeniem
˛
filtru wyostrzajacego
˛
te dwa parametry algorytmu detekcji kształtów zostały określone nastepuj
˛
aco:
˛
1. wartość graniczna: 2,5,
2. filtr wyostrzajacy:
˛
wyłaczony.
˛
Tak zaimplementowany algorytm segmentacji nienadzorowanej, prowadzacy
˛
do
otrzymania listy obwiedni obszarów (czyli listy list punktów obwiedniowych), nie
jest w stanie w każdych warunkach (dla każdego obrazu) prawidłowo wyodrebnić
˛
interesujace
˛ użytkownika obszary w pożadanej
˛
jakości i ilości, natomiast ograniczenie to można zracjonalizować faktem, że ocena jakości algorytmu detekcji obszarów
jest z definicji subiektywna, bo zależna od indywidualnych kryteriów przyj˛etych
przez oceniajacego.
˛
6.9. Łaczenie
˛
wyników algorytmów
Aplikacja mobilna umożliwia — po wybraniu obrazu wzorcowego i ewentualnie
zaznaczeniu na nim regionu lub konturu — wybór jednego lub wiecej
˛
algorytmów,
na podstawie których be˛ dzie sie˛ odbywało wyszukiwanie obrazów podobnych. Obrazuja˛ to zrzuty ekranu 6.22, 6.23 oraz 6.24 z podsekcji 6.2.1. W przypadku wyboru liczby algorytmów wie˛ kszej niż jeden należy połaczyć
˛
czastkowe
˛
wyniki wyszukiwania poszczególnych algorytmów w jeden zbiorczy.
Majac
˛ obraz wzorcowy, dowolny obraz bazodanowy oraz jeden określony algorytm wyliczania deskryptorów obrazów, można wyliczyć odległość pomiedzy
˛
deskryptorami obu tych obrazów. Dla kolejnego algorytmu można by obliczyć analogiczna˛ odległość pomie˛ dzy deskryptorami tych samych obrazów. Najprostsza˛
forma˛ połaczenia
˛
wyników obu tych algorytmów jest zsumowanie dwóch odległości i posługiwanie sie˛ ostatecznie odległościa˛ zbiorcza˛ podczas sortowania obrazów
bazodanowych pod wzgle˛ dem ich odległości od wzorca. Jednak bardzo możliwe,
że odległości pomie˛ dzy deskryptorami generowane dla różnych algorytmów posiadaja˛ różny zakres zmienności i różna˛ dynamike.
˛ Grozi to sytuacja,
˛ w której wpływ
jednego algorytmu na odległość zbiorcza˛ bedzie
˛
znacznie wiekszy
˛
niż drugiego. Dlatego przed scaleniem odległości czastkowych
˛
warto je znormalizować do identycznego zakresu. Aby znormalizować odległość uzyskiwana˛ pomiedzy
˛
deskryptorami
danego algorytmu, należy obliczyć maksymalna˛ możliwa˛ odległość, jaka˛ da sie˛ uzyskać dla danego algorytmu. Wówczas normalizacja odległości polega na podzieleniu odległości realnej przez odległość maksymalna˛ i — ewentualnie — pomnożeniu
takiego ilorazu przez pewna˛ stała˛ skalujac
˛ a,
˛ aby uzyskać liczby bardziej czytelne
dla człowieka. Majac
˛ tak znormalizowane odległości, można je swobodnie dodawać
do siebie, łacz
˛ ac
˛ w ten sposób wyniki porównywania deskryptorów dla różnych
algorytmów. Pozostaje tylko wyznaczyć dla każdego algorytmu jego odległość maksymalna.
˛
Przykładowo, w przypadku średniej jasności w przestrzeni RGB jako deskryptora obrazu deskryptorem o najniższej wartości jest wektor (0, 0, 0), natomiast o najwyższej wektor (255, 255, 255). Maksymalna odległość w przestrzeni tego deskryptora
wynosi wie˛ c:
p
max_RGB_brightness_distance = (255 − 0)2 + (255 − 0)2 + (255 − 0)2
(6.1)
139
6.9. Łaczenie
˛
wyników algorytmów
W przypadku średniej jasności w przestrzeni CIE Lab maksymalna odległość jest
analogiczna, tyle że zakresy poszczególnych składowych tej przestrzeni kolorów sa˛
różne:
max_brightness_L = 100
(6.2)
min_brightness_L = 0
(6.3)
max_brightness_A = 120
(6.4)
min_brightness_A = −120
(6.5)
max_brightness_B = 120
(6.6)
min_brightness_B = −120
(6.7)
power_L = (max_brightness_L − min_brightness_L)2
(6.8)
power_A = (max_brightness_A − min_brightness_A)2
(6.9)
power_B = (max_brightness_B − min_brightness_B)2
p
max_CIE_Lab_brightness_distance = power_L + power_A + power_B
(6.10)
(6.11)
W przypadku wariancji jasności w przestrzeni RGB aproksymacja maksymalnej
odległości jest przeprowadzana dla — z jednej strony — jednolitego pod wzgledem
˛
koloru rastra o dowolnych wymiarach i — z drugiej — rastra 2-elementowego o jednym pikselu czarnym (o wartości (0, 0, 0)) i jednym białym (o wartości (255, 255, 255)):
mean =
0 + 255
2
(6.12)
max_variance_1 = (0 − mean)2
(6.13)
max_variance_2 = (255 − mean)2
(6.14)
max_variance =
max_variance_1 + max_variance_2
2
min_variance = 0
power = (max_variance − min_variance)2
√
max_RGB_brightness_variance_distance = power + power + power
(6.15)
(6.16)
(6.17)
(6.18)
W przypadku kontrastu jasności w przestrzeni RGB analogiczna procedura jest
nast˛epujaca:
˛
max_contrast = 1
(6.19)
(6.20)
min_contrast = 0
2
power = (max_contrast − min_contrast)
√
max_RGB_brightness_contrast_distance = power + power + power
(6.21)
(6.22)
Dla deskryptora w postaci entropii przestrzeni RGB maksymalna odległość pomie˛
dzy deskryptorami wyliczana jest jak poniżej:
max_entropy = log2 (256)
(6.23)
min_entropy = 0
(6.24)
power = (max_entropy − min_entropy)2
(6.25)
140
6.9. Łaczenie
˛
wyników algorytmów
max_RGB_entropy_distance =
√
power + power + power
(6.26)
Dla histogramu znormalizowanego skumulowanego łatwo obliczyć maksymalna˛
różnice˛ mie˛ dzy dwoma histogramami, prowadzac
˛ do maksymalnej odległości mie˛
dzy trójwymiarowymi punktami w przestrzeni RGB:
max_histogram_dif f erence = 1 ∗ 255
(6.27)
power = (max_histogram_dif f erence)2
(6.28)
√
max_RGB_cumulative_normalized_histogram_distance = power + power + power
(6.29)
Maksymalna odległość mie˛ dzy niezmiennikami momentowymi (tego samego typu,
np. M3) jest aproksymowana dla przypadku obrazu o szerokości i wysokości —
kolejno — 640 i 480 pikseli. Przykładowo, dla niezmiennika M1 — o wzorze 3.54 —
procedura jest naste˛ pujaca:
˛
mean_image_width = 640
(6.30)
mean_image_height = 480
(6.31)
sth_a_little_bigger_than_zero = Double.M IN _P OSIT IV E_V ALU E
(6.32)
m00_max = 255 ∗ mean_image_height ∗ mean_image_width
(6.33)
m01_min = 0
(6.34)
m10_min = 0
(6.35)
m02_min = 0
(6.36)
m20_min = 0
(6.37)
m02_max = 255 ∗ mean_image_height∗
calculate_sum_of _N _to_the_power_of _2_f rom_0_to_K(mean_image_width − 1) (6.38)
m20_max = 255 ∗ mean_image_width∗
calculate_sum_of _N _to_the_power_of _2_f rom_0_to_K(mean_image_height − 1)
(6.39)
m10_max = 255 ∗ mean_image_width∗
calculate_sum_of _N _f rom_0_to_K(mean_image_height − 1) (6.40)
m01_max = 255 ∗ mean_image_height∗
calculate_sum_of _N _f rom_0_to_K(mean_image_width − 1) (6.41)
m10_min
m00_max
m10_max
mean_I_max =
sth_a_little_bigger_than_zero
mean_I_min =
(6.42)
(6.43)
141
6.10. Testy
m01_min
m00_max
m01_max
mean_J_max =
sth_a_little_bigger_than_zero
mean_J_M in =
(6.44)
(6.45)
M 20_max = m20_max − mean_I_min ∗ m10_min
(6.46)
M 02_max = m02_max − mean_J_min ∗ m01_min
(6.47)
M 20_min = m20_min − mean_I_max ∗ m10_max
(6.48)
M 02_min = m02_min − mean_J_max ∗ m01_max
M 20_max + M 02_max
max_M 1 =
sth_a_little_bigger_than_zero2
(6.49)
min_M 1 =
M 20_min + M 02_min
m00_max2
power = (max_M 1 − min_M 1)2
√
max_RGB_moment_invariant_M 1_distance = power + power + power
(6.50)
(6.51)
(6.52)
(6.53)
przy czym dwie wyste˛ pujace
˛ w powyższych wzorach funkcje zdefiniowane sa˛ naste˛
pujaco:
˛
k2 + k
calculate_sum_of _N _f rom_0_to_K(k) =
(6.54)
2
2 ∗ k2 + 3 ∗ k2 + k
calculate_sum_of _N _to_the_power_of _2_f rom_0_to_K(k) =
(6.55)
6
Dla pozostałych niezmienników (M2–M7) sposób postepowania
˛
jest analogiczny.
Różnice wynikaja˛ jedynie z różnic poszczególnych wzorów na niezmienniki.
6.10. Testy
Przeprowadzone zostały testy dwojakiego rodzaju:
— testy jednostkowe testujace
˛ niskopoziomowe komponenty algorytmów wyliczajacych
˛
deskryptory,
— testy porównujace
˛ szybkości wyliczania deskryptorów.
6.10.1. Testy jednostkowe
Testy jednostkowe (ang. unit tests), wspierane przez technologie˛ JUnit (opisana˛
w sekcji 6.1), przeprowadzane były na tej samej bazie danych (omówionej w sekcji
6.1), z której aplikacja korzysta w wersji rozwojowej i z której mogłaby docelowo
korzystać w wersji produkcyjnej. Wydruk 6.9 przedstawia przykładowy test jednostkowy GeographicPositionDistanceCalculatorTest testujacy
˛ klase˛ metode˛ getDistanceInMetres klasy GeographicPositionDistanceCalculator, służac
˛ a˛ do obliczania
odległości geograficznej pomiedzy
˛
dwoma pozycjami geograficznymi.
Wydruk 6.9. Przykładowy test jednostkowy w postaci klasy GeographicPositionDistanceCalculatorTest, testujacej
˛
metode˛ getDistanceInMetres klasy GeographicPositionDistanceCalculator.
1 @RunWith(JUnit4.class)
2 public class GeographicPositionDistanceCalculatorTest {
6.10. Testy
142
3
4
@Test
5
public void testGetDistanceInMetres() {
6
// given
7
GeographicPosition bialystokGeographicPosition =
8
new GeographicPosition(53.0 + 7.0 / 60.0, 23.0 + 9.0 / 60.0);
9
GeographicPosition warszawaGeographicPosition =
10
new GeographicPosition(52.0 + 14.0 / 60.0, 21.0 + 1.0 / 60.0);
11
12
// when
13
float distanceInMetres =
14
GeographicPositionDistanceCalculator.getDistanceInMetres
15
(bialystokGeographicPosition, warszawaGeographicPosition);
16
17
// then
18
Assert.assertEquals(175 * 1000, distanceInMetres, 1 * 1000);
19
}
20
21
// ...
22 }
Poniżej znajduje sie˛ lista klas testujacych
˛
stworzonych na potrzeby projektu:
— moduł Logic:
— AbstractGreyscaleKeyPointsBasedExtractorTest,
— FourierDescriptorsExtractorTest,
— GreyscaleOrientedBRIEFExtractorTest,
— GreyscaleScaleInvariantFeatureTransformExtractorTest,
— GreyscaleSpeededUpRobustFeatureExtractorTest,
— RGBAutoCorrelogramExtractorTest,
— RGBCumulativeNormalizedHistogramExtractorTest,
— BlobFinderAlgorithmTest,
— BresenhamAlgorithmTest,
— ContourFinderAlgorithmTest,
— ContourPointsCountNormalizationAlgorithmTest,
— DilationFilterAlgorithmTest,
— FourierTransform1DAlgorithmTest,
— GaussianFilterAlgorithmTest,
— GreyscaleBlurFilterAlgorithmTest,
— HoleFillerFilterAlgorithmTest,
— MedianFilterAlgorithmTest,
— ShapeFinderAlgorithmTest,
— ImageRetrievalLogicTest,
— GeographicPositionDistanceCalculatorTest,
— FullImageFeatureVectorManagerTest,
— ImageManagerTest,
— UserManagerTest,
— ColorConverterTest,
— moduł Shared:
— JSONConverterTest.
6.10. Testy
143
6.10.2. Testy porównawcze szybkości wyliczania deskryptorów
Jednym z kryteriów jakości deskryptora — czy to deskryptora wyliczanego na
całym obrazie, czy to na regionie obrazu, czy na jego konturze — jest szybkość ekstrakcji. Rysunek 6.154 przedstawia obraz, który został użyty do przeprowadzenia
testów porównawczych szybkości wyliczania deskryptorów. Tablica 6.1 przedstawia
porównanie czasu (czastkowego
˛
i średniego uśredniajacego
˛
trzy czasy czastkowe),
˛
jaki zajmuje wyliczenie deskryptora bazujacego
˛
na całym pojedynczym obrazie. Jak
widać, najmniej wydajny pod tym wzgledem
˛
jest deskryptor w postaci autokorelogramu (wyliczanego na przestrzeni RGB). Pozostałe algorytmy — może z wyjatkiem
˛
histogramu znormalizowanego skumulowanego — potrzebuja˛ podobna˛ ilość czasu.
Warto zwrócić uwage˛ na pewna˛ przewage˛ szybkościowa˛ metody SURF nad metoda˛
SIFT. Biorac
˛ pod uwage˛ podobne efekty jakości wyszukiwania dla wszystkich tych
algorytmów okazuje sie˛ , ze najwygodniej dla użytkownika stosować jest algorytmy
najprostsze typu średnia jasność w przestrzeni RGB, średnia jasność w przestrzeni
CIE Lab czy entropia w przestrzeni RGB. Tablica 6.2 przedstawia analogiczne porównanie czasu (czastkowego
˛
i średniego uśredniajacego
˛
trzy czasy czastkowe),
˛
jaki zajmuje wyliczenie deskryptora bazujacego
˛
na pojedynczym regionie obrazu.
Porównywane sa˛ tutaj tylko niezmienniki momentowe. Najkrócej wyliczane sa˛ niezmienniki M1, M2 i M7, a najdłużej M3, M4, M5 i M6, jednak różnice te nie robia˛
wi˛ekszego znaczenia. Jako że skuteczność poszczególnych niemienników nie jest
uniwersalna, bo zależna od konkretnego regionu, najlepiej jest — w procesie wyszukiwania obrazów — korzystać z ich wszystkich lub np. z trzech wybranych.
Ostatnia tablica 6.3 prezentuje porównanie czasu (czastkowego
˛
i średniego uśredniajacego
˛
trzy czasy czastkowe),
˛
jaki zajmuje wyliczenie deskryptora bazujacego
˛
na pojedynczym konturze obrazu. Jako że zaimplementowany jest tylko jeden
deskryptor wyszukiwania konturów — sa˛ to deskryptory Fouriera — nie da sie˛
porównać szybkości jego wyliczania z innymi algorytmami.
Rysunek 6.154. Obraz użyty do porównania szybkości obliczania deskryptorów.
144
6.11. Propozycja systemu rozproszonego
Tablica 6.1. Porównanie czasu (czastkowego
˛
i średniego uśredniajacego
˛
trzy czasy
czastkowe),
˛
jaki zajmuje wyliczenie deskryptora bazujacego
˛
na całym pojedynczym
obrazie.
średnia jasn. (RGB)
wariancja jasn. (RGB)
kontrast jasn. (RGB)
średnia jasn. (CIE Lab)
hist. zn. sk. (RGB)
entropia (RGB)
autokorelogram (RGB)
SIFT (skala szar.)
SURF (skala szar.)
ORB (skala szar.)
czas #1 (s.)
0.016082165
0.008054246
0.009943982
0.152408643
0.020943717
0.008834236
8.635662059
0.096513962
0.057783971
0.00593203
czas #2 (s.)
0.016465021
0.008014532
0.009785574
0.151051246
0.021546558
0.008762841
9.324223334
0.096898602
0.055427044
0.005753543
czas #3 (s.)
0.015885382
0.008014533
0.01005866
0.149869213
0.019250317
0.008684306
8.371873681
0.096154756
0.072921045
0.0058825
czas śr. (s.)
0.0161441893
0.0080277703
0.0099294053
0.1511097
0.0205801973
0.008760461
8.777253024
0.09652244
0.06204402
0.005856024
Tablica 6.2. Porównanie czasu (czastkowego
˛
i średniego uśredniajacego
˛
trzy czasy
czastkowe),
˛
jaki zajmuje wyliczenie deskryptora bazujacego
˛
na pojedynczym regionie obrazu.
niezm.
niezm.
niezm.
niezm.
niezm.
niezm.
niezm.
mom.
mom.
mom.
mom.
mom.
mom.
mom.
M1
M2
M3
M4
M5
M6
M7
(RGB)
(RGB)
(RGB)
(RGB)
(RGB)
(RGB)
(RGB)
czas #1 (s.)
0.00433189
0.006601805
0.039335509
0.045374186
0.038899554
0.039080272
0.006580832
czas #2 (s.)
0.00462104
0.006844547
0.039089197
0.045001593
0.038788445
0.039675974
0.006999385
czas #3 (s.)
0.004079777
0.006454999
0.038009347
0.043727193
0.038831729
0.038809864
0.006530409
czas śr. (s.)
0.004344236
0.006633784
0.038811351
0.04470099
0.0388399093
0.039188703
0.006703542
Tablica 6.3. Porównanie czasu (czastkowego
˛
i średniego uśredniajacego
˛
trzy czasy
czastkowe),
˛
jaki zajmuje wyliczenie deskryptora bazujacego
˛
na pojedynczym konturze obrazu.
Deskr. Fouriera
czas #1 (s.)
0.168472514
czas #2 (s.)
0.166091045
czas #3 (s.)
0.165958071
czas śr. (s.)
0.166840543
6.11. Propozycja systemu rozproszonego
Choć nie jest to celem niniejszej pracy, system powinien być w stanie obsłużyć
bardzo duża˛ liczbe˛ użytkowników. Aby zwiekszyć
˛
szybkość ekstrakcji cech obrazu wzorcowego, a także szybkość petli
˛ porównujacej
˛
deskryptor tego obrazu z deskryptorami obrazów bazodanowych, zwiekszaj
˛
ac
˛ ostatecznie szybkość odpowiedzi
systemu CBIR na kwerende˛ użytkownika, należałoby stworzyć system rozproszony
(ang. distributed system), charakteryzujacy
˛ sie˛ [40, cz. 13, s. 5–8] [7, r. Systemy
rozproszone, s. 4–5]:
— dzieleniem zasobów (możliwość używania danego zasobu przez wiele w˛ezłów
systemu),
— otwartościa˛ (zdolność systemu do dodawania do sieci nowych elementów sprze˛
towych i programowych bez potrzeby jego przeprojektowywania),
— skalowalnościa˛ (zdolność systemu do utrzymywania podobnej wydajności
w miare˛ jego rozbudowy, tj. zwiekszania
˛
liczby jego wezłów),
˛
— wydajnościa˛ (zdolność systemu do uzyskiwania dużej mocy obliczeniowej),
6.11. Propozycja systemu rozproszonego
145
— przezroczystościa˛ (postrzegalność systemu przez jego użytkowników jako całości, a nie poszczególnych wezłów),
˛
— tolerowaniem awarii (zdolność systemu do ciagłości
˛
jego działania mimo pojawiajacych
˛
sie˛ błe˛ dów programowych i sprzetowych).
˛
Rysunek 6.155 przedstawia propozycje˛ systemu rozproszonego. Jak widać,
klienci (w tym wypadku głównie aplikacje mobilne) komunikuja˛ sie˛ bezpośrednio
nie z serwerem, lecz z równoważnikiem obcia˛żenia (ang. load balancer), który
z kolei rozdysponowuje każde z żada
˛ ń klientów do jednego z N serwerów (aplikacji
internetowych). Charakter komunikacji klientów mobilnych z serwerem, tj. niezależność każdego żadania
˛
HTTP/HTTPS od poprzednich, pozwala na odprawianie
żada
˛ ń należacych
˛
do danej aplikacji mobilnej na różne serwery, przez co równoważnik obcia˛żenia nie musi zapamietywać,
˛
jaki serwer obsługuje danego klienta.
Wówczas wystarcza zastosowanie w równoważniku obcia˛żenia prostego algorytmu
karuzelowego (Round Robin). Ponadto, dzieki
˛ równoważnikowi obcia˛żenia system
rozproszony — a konkretnie serwery i ich ilość oraz tym bardziej baza danych — jest
dla klienta przezroczysty, tj. nie zna on struktury klastra (farmy) i relacji zachodza˛
cych pomie˛ dzy poszczególnymi wezłami,
˛
co utrudnia atak na wezły.
˛
Dzieki
˛ liczbie
serwerów, wynoszacej
˛
N , dysfunkcja dowolnego z nich nie przerywa działania systemu i jest niewidoczna dla użytkownika. Równoważenie obcia˛żenia realizuje sie˛
najlepiej w postaci sprze˛ towej a nie programowej. W tym celu moga˛ posłużyć np.
produkty firmy Cisco z serii ACE lub firmy F5 z serii BIG-IP.
Rozproszona baza danych, mimo że widziana jest dla bazodanowego klienta
(w tym wypadku aplikacji internetowych) jako logiczna całość, fizycznie składa sie˛
z wielu komputerów, na których składowane sa˛ dane. W tym momencie należy
rozróżnić [102] dwa poje˛ cia:
— klastrowanie (ang. clustering),
— partycjonowanie (ang. partitioning).
Klastrowanie danych polega na składowaniu na różnych maszynach tych samych
danych — głównie dla szybkości i niezawodności. Partycjonowanie danych polega
na składowaniu na różnych maszynach różnych danych. W takim przypadku dana
maszyna posiada tylko cze˛ ść zbioru danych — stad
˛ geneza pojecia
˛
partycjonowania
(podziału). Partycjonowanie stosowane jest nie tylko dla zwiekszenia
˛
szybkości
3
dost˛epu do danych, ale również dla poprawy ich zarzadzalności
˛
. W przypadku
rozproszonej bazy danych systemu CBIR dane, czyli zbiór obrazów i ich wektorów
cech, należałoby poddać procesowi klasteryzacji.
3
Dla przykładu, w przypadku składowania danych, do których dost˛ep odbywa si˛e według daty
i w danym momencie korzysta si˛e tylko z najświeższych rekordów (choćby z bieżacego
˛
roku), a ze starszych rekordów prawie w ogóle, partycjonowanie danych można zrealizować, przesuwajac
˛ nieużywane
dane na oddzielne partycje, aby nie trzeba było zużywać czasu na ich każdorazowe przeszukiwanie.
146
6.11. Propozycja systemu rozproszonego
rozproszona baza danych
baza
danych #1
baza
danych #2
...
baza
danych #P
aplikacja
internetowa
#1
aplikacja
internetowa
#2
...
aplikacja
internetowa
#N
równoważnik
obciążenia
klient #1 klient #2
...
klient #M
Rysunek 6.155. Propozycja systemu rozproszonego.
Tak skonstruowany system można nastepnie
˛
poddawać nie tylko standardowym
testom obcia˛żeniowym przy oczekiwanym obcia˛żeniu (ang. load testing), tj. przy
oczekiwanej liczbie równoległych użytkowników, lecz także testom skrajnych warunków (ang. stress testing), w których obcia˛żenie oscyluje wokół maksymalnego
lub je przekracza.
7. Podsumowanie
W ramach zakończenia należy poddać rzeczowej analizie wyniki i spojrzeć obiektywnie na efekt końcowy. Nie jest łatwo autorowi zachować obiektywizm w ocenie
swojej pracy, jednak to właśnie on najbardziej zdaje sobie sprawe˛ z zalet i wad
stworzonego projektu zarówno pod wzgledem
˛
analitycznym, funkcjonalnym, jak
i implementacyjnym.
Do celów pracy magisterskiej należały:
— analiza i porównanie algorytmów umożliwiajacych
˛
wyszukiwanie obrazów na
podstawie ich zawartości,
— przeglad
˛ istniejacych
˛
systemów wykorzystujacych
˛
analizowane metody,
— stworzenie systemu implementujacego
˛
cześć
˛ opisanych technik.
Wszystkie trzy powyższe intencje zostały zrealizowane i opisane — analiza algorytmów w rozdziale 3, przeglad
˛ systemów w rozdziale 5, zaś porównanie algorytmów
i implementacja systemu w rozdziale 6. Zaimplementowany system CBIR cechuje
si˛e możliwościa˛ wyszukiwania obrazów na podstawie zarówno całego obrazu jak
i regionu czy konturu, przy czym w przypadku tych dwóch ostatnich zaznaczane
sa˛ one przez użytkownika re˛ cznie na obrazie wzorcowym. Ponadto istnieje możliwość wybrania przez niego — dla pojedynczego wyszukiwania — pewnej liczby
algorytmów, których rezultaty łaczone
˛
sa˛ w jeden zbiorczy wynik.
W ograniczonych warunkach mocy obliczeniowej oraz zważywszy na istnienie
niedajacych
˛
sie˛ obecnie uniknać
˛ przepaści postrzegania (ang. perception gap)
i przepaści semantycznej (ang. semantic gap) — omówionych w sekcji 4.2 — można
uznać, że najprostsze algorytmy wyliczania deskryptorów obrazów daja˛ najlepsze
rezultaty, co współbrzmi z zasada˛ prostoty wyrażona˛ w postaci Brzytwy Ockhama
(ang. Occam’s razor). Połaczenie
˛
— w przypadku wyszukiwania całych obrazów —
kilku trywialnych deskryptorów, jak np. średnia jasność w przestrzeni CIE Lab, wariancja jasności w przestrzeni RGB i entropia w przestrzeni RGB, nie odbiega jakościowo od wielopłaszczyznowego deskryptora bazujacego
˛
na punktach charakterystycznych, takiego jak SIFT, SURF czy ORB. W przypadku wyszukiwania regionów
złaczenie
˛
kilku niezmienników momentowych potrafi dość poprawnie rozróżniać
obiekty. Spośród siedmiu niezmienników momentowych Hu najcześciej
˛
najlepsze
wydaja˛ sie˛ być naste˛ pujace
˛ trzy: M1, M2 i M7. Warto byłoby jednak porównać
ich skuteczność z momentami Zernike’a, co nie zostało poczynione. W przypadku
wyszukiwania konturów algorytm zwiazany
˛
z deskryptorami Fouriera (zaimplementowany tak, aby generować 64 deskryptory) jest w stanie faktycznie — tak jak w
założeniach teoretycznych — rozróżniać obiekty o bardzo różnych obwiedniach i kojarzyć te o bardzo podobnych, ale jego dokładność pozostawia wiele do życzenia
w miare˛ wzrostu subtelności różnic czy podobieństw. Idea semantycznej wyszukiwarki obrazów, przedstawiona również w sekcji 4.2, jest — na obecnym etapie
rozwoju nauki — par excellence ułuda.
˛
7. Podsumowanie
148
Aplikacja była testowana w ograniczonych warunkach mocy obliczeniowej i nie
była weryfikowana w środowisku produkcyjnym. Nie miała kontaktu z użytkownikiem masowym, wie˛ c nie da sie˛ jednoznacznie określić jej wydajności. Pewne
jest to, że w obliczu wielu algorytmów o dużej złożoności zarówno pamieciowej
˛
jak
i obliczeniowej pojedyczna instancja serwera wraz z pojedyncza˛ instancja˛ bazy danych nie jest w stanie in extremis poradzić sobie z duża˛ ilościa˛ żada
˛ ń użytkowników
aplikacji mobilnej, co — pre˛ dzej czy później — musi prowadzić do odmowy działania
usługi [90] (ang. Denial of Service, DoS). Implementacja systemu rozproszonego,
którego propozycja została przedstawiona w sekcji 6.11, jest wiec
˛ wymaganiem niezb˛ednym w przypadku che˛ ci urynkowienia zaimplementowanego systemu CBIR.
Praca, zmaterializowana w postaci systemu CBIR, posiada wiele ambitnych
kierunków rozwoju:
— implementacja którejś z form sprze˛ żenia zwrotnego istotności (opisanego w sekcji 4.1): przemieszczenia punktu zapytania, zmiany wag składowych wektora
cech, zmiany metryki odległości czy redukcji wymiarowości wektora cech,
— implementacja robota internetowego [35] (ang. web crawler), który zautomatyzowałby proces rozrostu obrazowej bazy danych dzieki
˛ indeksacji obrazów znalezionych w sieci internetowej,
— implementacja systemu rozproszonego (ang. distributed system) — opisanego
w sekcji 6.11 — z równoważnikiem obcia˛żenia (ang. load balancer), powielonymi
aplikacjami internetowymi i rozproszona˛ baza˛ danych,
— implementacja aplikacji mobilnych na systemy operacyjne inne niż Google Android:
— Apple iOS,
— Microsoft Windows Phone,
— Samsung Bada,
— Mozilla Firefox OS (implementacja w technologii HTML 5 zamiast natywnym
interfejsie programowania aplikacji),
— BlackBerry OS,
— implementacja kwerendy umożliwiajacej
˛
podanie pożadanej
˛
przez użytkownika
lokalizacji na obrazie danego obiektu o specyficznych cechach [60, s. 13] (np.
bł˛ekitnego obiektu na górze obrazu, symbolizujacego
˛
niebo) lub pożadanego
˛
rozkładu przestrzennego serii obiektów (np. zielonego obiektu, symbolizujacego
˛
konary drzewa, nad brazowym,
˛
symbolizujacym
˛
pień drzewa) z użyciem analizy
składowych głównych (ang. Principal Component Analysis, PCA) [94, s. 33–35]
[52].
Wyszukiwanie obrazów na podstawie zawartości to ciagle
˛
— niezmiennie od
roku 1992, gdy poje˛ cie to, jak sie˛ wydaje, zostało użyte po raz pierwszy — czynny
obszar badań akademickich jak również region zainteresowania rynku i podmiotów
komercyjnych. Problematyka – nawet biorac
˛ pod uwage˛ mnogość publikacji na ten
temat — z pewnościa˛ nie została wyczerpana, wiec
˛ warto sie˛ nia˛ zajmować, czego
przykładem jest niniejsza praca magisterska.
Biorac
˛ pod uwage˛ efekt końcowy, jaki udało sie˛ uzyskać, plany i ich realizacje,
teoretyczne pomysły i ich implementacje,
˛ autor może stwierdzić, że jest wzglednie
˛
zbudowany rezultatami. Praca nad projektem sprawiła mu wiele satysfakcji.
Bibliografia
[1] Segmentacja obrazu.
http://matlab.atspace.org/teoria/seg/seg.html, 2004–2006.
[2] A. J. Hildebrand. Variance, covariance, correlation, moment-generating functions.
http://www.math.uiuc.edu/~hildebr/461/variance.pdf, University of Illinois, Department
of Mathematics.
[3] A. Pentland, R. Picard, and S. Sclaroff. Photobook: Tools for Content-Based Manipulation of Image Databases.
http://vismod.media.mit.edu/pub/tech-reports/TR-255.pdf, Massachusetts Institute of
Technology, Perceptual Computing Section, The Media Laboratory.
[4] Abebe Rorissa. Image Retrieval. Benchmarking Visual Information Indexing and
Retrieval Systems.
http://www.asis.org/Bulletin/Feb-07/rorissa.html, 02-03.2007.
[5] Alberto Del Bimbo. Slide course.
http://www.micc.unifi.it/delbimbo/wp-content/uploads/2011/10/slide_corso/, University
of Firenze, Faculty of Engineering, Computer Engineering.
[6] Allan Jepson. Image Segmentation.
http://www.cs.toronto.edu/~jepson/csc2503/segmentation.pdf, University of Toronto, Department of Computer Science.
[7] Anna Kobusińska. Wykłady.
http://www.cs.put.poznan.pl/akobusinska/downloads/narzedzia/, Politechnika Poznańska, Instytut Informatyki.
[8] Baruch Zoltan Francisc. Gaussian Filter.
http://users.utcluj.ro/~baruch/resources/Image/gauss25092001.pdf, Technical University of Cluj-Napoca, Faculty of Automation and Computer Science, Computer
Science Department.
[9] Camera & Imaging Products Association. Exchangeable image file format for digital
still cameras: Exif Version 2.3.
http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf, 12.2012.
[10] Ceki Gülcü. Simple Logging Facade for Java (SLF4J).
http://www.slf4j.org/.
[11] Cezary Bołdak. Cyfrowe Przetwarzanie Obrazów (Digital Image Processing).
http://aragorn.pb.bialystok.pl/~boldak/DIP, Politechnika Białostocka.
[12] Chad Carson, Serge Belongie, Hayit Greenspan, Jitendra Malik. Blobworld: Image
segmentation using Expectation-Maximization and its application to image querying.
http://www.cs.berkeley.edu/~malik/papers/CBGM-blobworld.pdf, 08.2002.
[13] ChaosPro. HSL Colorspace.
http://www.chaospro.de/documentation/html/paletteeditor/colorspace_hsl.htm,
10.02.2011.
[14] Chip. Znajdź mnie, jeśli potrafisz — czyli jak znaleźć obrazy w Sieci.
http://www.chip.pl/mobile/artykuly/porady/2010/06/znajdz-mnie-jesli-potrafisz/,
18.06.2010.
[15] Chris Wyman. Sobel Filtering.
http://homepage.cs.uiowa.edu/~cwyman/classes/spring08-22C251/homework/sobel.pdf, The
University of Iowa, Department of Computer Science.
Bibliografia
150
[16] Darrin Cardani. Adventures in HSV Space.
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
[27]
[28]
[29]
[30]
[31]
[32]
[33]
[34]
http://visl.technion.ac.il/labs/anat/hsvspace.pdf, Technion - Israel Institute of Technology, Department of Electrical Engineering, The Vision and Image Sciences Laboratory.
David G. Lowe. Distinctive Image Features from Scale-Invariant Keypoints.
http://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf, University of British Columbia, Computer Science Department 5.01.2004.
David Lowe. SIFT: Scale Invariant Feature Transform.
http://web.eecs.umich.edu/~silvio/teaching/EECS598/lectures/lecture10_1.pdf, University of British Columbia, Computer Science Department.
Dengsheng Zhang, Guojun Lu. A Comparative Study on Shape Retrieval Using
Fourier Descriptors with Different Shape Signatures.
http://knight.temple.edu/~lakamper/courses/cis601_2008/etc/fourierShape.pdf,
Gippsland School of Computing and Information Technology, Monash University.
Dengsheng Zhang, Guojun Lu. Content-Based Shape Retrieval Using Different Shape
Descriptors: A Comparative Study.
http://users.monash.edu.au/~dengs/resource/papers/icme01.pdf, Gippsland School of
Computing and Information Technology, Monash University.
DICOM Standards Committee. DICOM.
http://medical.nema.org/.
Eclipse Foundation. Jetty — Servlet Engine and Http Server — Eclipse.
http://www.eclipse.org/jetty/.
George Bebis. Thresholding.
http://www.cse.unr.edu/~bebis/CS791E/Notes/Thresholding.pdf, University of Nevada,
Department of Computer Science & Engineering.
Giuseppe Jurman, Samantha Riccadonna, Roberto Visintainer, Cesare Furlanello.
Canberra distance on ranked lists.
http://mpba.fbk.eu/files/publications/jurman09canberra.pdf, 2006.
Google Inc. Google Maps Android API v2.
https://developers.google.com/maps/documentation/android/?hl=pl.
Greg Pass, Ramin Zabih. Comparing Images Using Joint Histograms.
http://www.cs.cornell.edu/~rdz/papers/pz-jms99.pdf, Cornell University, Computer
Science Department.
Greg Pass, Ramin Zabih, Justin Miller. Comparing Images Using Color Coherence
Vectors.
http://www.cs.cornell.edu/~rdz/Papers/PZM-MM96.pdf, Cornell University, Computer
Science Department.
H. B. Kekre, D. Mishra, S. Narula, V. Shah. Color feature extraction for CBIR.
http://www.ijest.info/docs/IJEST11-03-12-156.pdf, Mukesh Patel School of Technology
Management and Engineering 12.12.2011.
Herbert Bay, Tinne Tuytelaars, Luc Van Gool. SURF: Speeded Up Robust Features.
http://www.vision.ee.ethz.ch/~surf/eccv06.pdf, ETH Zurich, Katholieke Universiteit
Leuven.
Hsin-Chih Lin, Chih-Yi Chiu, Shi-Nine Yang. Finding textures by textual descriptions,
visual examples and relevance feedbacks.
http://cgit.nutn.edu.tw:8080/cgit/PaperDL/hclin_100311153754.PDF, 2.01.2003.
International Business Machines Corporation. DB2 Content Management Version 8.3
Information Center.
http://publib.boulder.ibm.com/infocenter/cmgmt/v8r3m0/index.jsp.
International Business Machines Corporation. IBM AIX.
http://www-03.ibm.com/systems/power/software/aix/.
Itseez. Biblioteka OpenCV.
http://opencv.org/.
Itseez. Interfejs programowania aplikacji jezyka
˛
Java dla biblioteki OpenCV.
http://opencv.org/opencv-java-api.htm.
151
Bibliografia
[35] J. Pei. Information Retrieval and Web Search — Web Crawling.
http://www.cs.sfu.ca/CourseCentral/456/jpei/web%20slides/L05%20-%20Web%20crawling.pdf,
Simon Fraser University, Computing Science.
[36] Jack Xin, J. Ernie Esser. Filtering and Convolutions.
http://www.math.uci.edu/icamp/courses/math77a/lecture_10f/filtering.pdf,
University of
California, Department of Mathematics.
[37] Jamie Shutler. Complex Zernike moments.
http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/SHUTLER3/node11.html.
[38] Janusz Ganczarski. CIE LAB.
http://lumen.iee.put.poznan.pl/do_pobrania/Wsp_chromat/CIE_Lab.pdf,
Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej, Zakład Techniki
Świetlnej i Elektrotermii.
[39] Janusz Ganczarski. CIE XYZ.
http://lumen.iee.put.poznan.pl/do_pobrania/Wsp_chromat/CIE_XYZ.pdf, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej, Zakład Techniki
Świetlnej i Elektrotermii.
[40] Jedrzej
˛
Ułasiewicz. Programowanie Współbieżne i Rozproszone.
http://jedrzej.ulasiewicz.staff.iiar.pwr.wroc.pl/Progr-Wspol-i-Rozprosz/wyklad/, Politechnika Wrocławska, Instytut Informatyki, Automatyki i Robotyki.
[41] Jean-Marie Dautelle. Dokumentacja pakietu org.jscience.computing.ai.vision biblioteki JScience.
http://jscience.org/experimental/javadoc/org/jscience/computing/ai/vision/.
[42] JetBrains. IntelliJ IDEA — The Best Java and Polyglot IDE.
http://www.jetbrains.com/idea/.
[43] Jing Huang, Ramin Zabih.
Combining Color and Spatial Information for
Content-based Image Retrieval.
http://www.cs.cornell.edu/rdz/Papers/ecdl2/spatial.htm, Computer Science Department, Cornell University.
[44] Jing Huang, S Ravi Kumar, Mandar Mitra, Wei-Jing Zhu, Ramin Zabih. Image
Indexing Using Color Correlograms.
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.96.7823&rep=rep1&type=pdf,
Cornell University.
[45] Jing Peng. Multi-class relevance feedback content-based image retrieval.
http://pages.csam.montclair.edu/~peng/publication/murf.pdf, Tulane University, Department of Electrical Engineering and Computer Science 17.01.2003.
[46] John D. Cook. Three algorithms for converting color to grayscale.
http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/.
[47] John P. Van de Geer. Some aspects of Minkowski distances.
http://www.datatheory.nl/pdfs/95/95_03.pdf, Leiden University, Department of Data
Theory.
[48] Kardi Teknomo. Chebyshev Distance.
http://people.revoledu.com/kardi/tutorial/Similarity/ChebyshevDistance.html, 2006.
[49] Katarzyna Stapor.
˛
Metody klasyfikacji obiektów w wizji komputerowej. Wydawnictwo
Naukowe PWN, Warszawa 2011.
[50] Kent Beck, Erich Gamma, David Saff, Mike Clark. JUnit. A programmer-oriented
testing framework for Java.
http://junit.org/, University of Calgary.
[51] Leszek Mazurek. Modelowanie poczatkowych
˛
etapów przetwarzania informacji wzrokowej.
http://195.117.188.199/, Akademia Górniczo-Hutnicza im. Stanisława Staszica
w Krakowie, Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki Kraków
2001.
[52] Lindsay I Smith. A tutorial on Principal Components Analysis.
http://www.cs.otago.ac.nz/cosc453/student_tutorials/principal_components.pdf,
26.02.2002.
Bibliografia
152
[53] Liwei Wang, Yan Zhang, Jufu Feng. On the Euclidean Distance of Images.
http://www.cis.pku.edu.cn/faculty/vision/wangliwei/pdf/IMED.pdf, Peking University,
School of Electronics Engineering and Computer Sciences.
[54] LOGICOL Color technology. Color conversion math and formulas.
http://www.easyrgb.com/index.php?X=MATH, 2014.
[55] M. Flickner, H. Sawhney, W. Niblack, J. Ashley, Q. Huang, B. Dom, M. Gorkani,
J. Hafner, D. Lee, D. Petkovic, D. Steele, P. Yanker. Query by Image and Video
Content: The QBIC System.
http://www1.cs.ucy.ac.cy/~nicolast/courses/cs422/ReadingProjects/qbic.pdf, 09.1995.
[56] M. Strzelecki, K. W. Zieliński, K. Niedzielski, A. Materka, R. Koktysz, M. Wilamski,
M. Synder. Komputerowa analiza tekstur w radiogramach kości z wykorzystaniem
programu MaZda.
[57] Maciej Bartkowiak, Marek Domański, Zbigniew Korus, Roger Świerczyński. Cyfrowa
reprezentacja obrazów.
http://www.multimedia.edu.pl/mmLab/MultimediaPL/mm_1_1.htm, Politechnika Poznańska,
Grupa Telekomunikacji Multimedialnej.
[58] Marcin Kiełczewski. Materiały do wykładu 11.
http://etacar.put.poznan.pl/marcin.kielczewski/POiSW11.pdf, Politechnika Poznańska,
Wydział Informatyki, Katedra Sterowania i Inżynierii Systemów.
[59] Marcin Strach. Wyszukiwanie obrazów na podstawie zawartości.
http://www.focus.agh.edu.pl/theses/MGR03.pdf, Akademia Górniczo-Hutnicza, Wydział
Elektrotechniki, Automatyki, Informatyki i Elektroniki, Katedra Informatyki Kraków
2010.
[60] Marcin Wilczewski. Algorytmy graficzne. Charakterystyki oraz wyszukiwanie obrazów cyfrowych.
http://www.mif.pg.gda.pl/homepages/marcin/Wyklad2.pdf, Politechnika Gdańska.
[61] Marek Doros. Informacja obrazowa. Ukrywanie informacji w obrazie (Steganografia).
Transformaty w przetwarzaniu obrazów.
http://korzen.org/wsisiz/przetwarzanie%20obrazow/wyklad/Wykl14fol.pdf, Wyższa Szkoła
Informatyki Stosowanej i Zarzadzania.
˛
[62] Massachusetts Institute of Technology. Photobook.
http://vismod.media.mit.edu/vismod/demos/photobook/.
[63] Md Monirul Islam, Dengsheng Zhang, Guojun Lu. A geometric method to compute
directionality features for texture images.
http://users.monash.edu.au/~dengs/resource/papers/icme08.pdf,
Monash University,
Gippsland Campus.
[64] Miles Mathis. The Manhattan Metric.
http://milesmathis.com/manh.pdf, 11.12.2012.
[65] Miriam Butt. Precision and Recall (based on Jurafsky and Martin).
http://ling.uni-konstanz.de/pages/home/butt/main/material/precision-recall.pdf,
01.2013.
[66] Moshe Shoham. Roberts Edge Detector.
http://www.robotics.technion.ac.il/courses/advanced_laboratory/lab7/arl_7_read.pdf.
[67] Nicholas M. Harrison. Fourier Series & Fourier Transforms.
http://www.ch.ic.ac.uk/harrison/Teaching/ft.pdf, Imperial College London, Department of Chemistry 19.10.2003.
[68] Nikos Drakos, Ross Moore. Difference of Gaussian (DoG).
http://fourier.eng.hmc.edu/e161/lectures/gradient/node10.html, University of Leeds
(Computer Based Learning Unit), Macquarie University (Mathematics Department).
[69] Nirupam Sarkar. On texture image analysis using fractal geometry based features.
http://library.isical.ac.in/jspui/bitstream/10263/3736/1/TH253.PDF, Indian Statistical
Institute, Computer Vision and Pattern Recognition Unit.
[70] Oracle Corporation. JVisualVM — Java Virtual Machine Monitoring, Troubleshooting,
and Profiling Tool.
http://docs.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html.
Bibliografia
153
[71] Paweł Forczmański. Wyszukiwanie informacji w dużych zbiorach obrazów.
http://it.rsi.org.pl/dane/artyku___CBIR.pdf, Zachodniopomorski Uniwersytet Technologiczny w Szczecinie, Wydział Informatyki, Katedra Systemów Multimedialnych.
[72] Pawel Strumillo. Opis i wydzielanie (ekstrakcja) cech.
http://eletel.p.lodz.pl/pstrumil/po/opis_cech.pdf, Instytut Elektroniki, Politechnika
Łódzka.
[73] Pesal Koirala. RGB Color Spaces.
http://www.cs.joensuu.fi/~pkoirala/article/RGB-space.pdf, University of Joensuu, Department of Computer Science and Statistics.
[74] Peter Howarth, Stefan Rüger. Evaluation of Texture Features for Content-Based
Image Retrieval.
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.141.2904&rep=rep1&type=pdf,
Imperial College London.
[75] Philip Baldwin. Convolution, Noise and Filters.
http://situs.biomachina.org/hn06/talks/Baldwin/convolution_filters_new.pdf, The University of Texas, Department of Biochemistry.
[76] Ping-Sung Liao, Tse-Sheng Chen, Pau-Choo Chung. A Fast Algorithm for Multilevel
Thresholding.
http://www.iis.sinica.edu.tw/JISE/2001/200109_01.pdf, ChengShiu Institute of Technology, Department of Electrical Engineering 2001.
[77] PostgreSQL Global Development Group. PostgreSQL: The world’s most advanced
open source database.
http://www.postgresql.org/.
[78] Pushpa B. Patil, Manesh B. Kokare. Relevance Feedback in Content Based Image
Retrieval: A Review.
http://jacs.usv.ro/getpdf.php?paperid=10_6.
[79] Qasim Iqbal, J. K. Aggarwaly. Feature Integration, Multi-image Queries and Relevance
Feedback in Image Retrieval.
http://amazon.ece.utexas.edu/~qasim/papers/iqbal_visual03_HDR.pdf, The University of
Texas at Austin, Department of Electrical and Computer Engineering, Computer
and Vision Research Center.
[80] R. Fisher, S. Perkins, A. Walker, E. Wolfart. Binary Images.
http://homepages.inf.ed.ac.uk/rbf/HIPR2/binimage.htm, 2003.
[81] R. Fisher, S. Perkins, A. Walker, E. Wolfart. Grayscale Images.
http://homepages.inf.ed.ac.uk/rbf/HIPR2/gryimage.htm, 2003.
[82] Rajesh Rao. Texture.
https://courses.cs.washington.edu/courses/cse455/09wi/Lects/lect12.pdf, University of
Washington, Computer Science & Engineering.
[83] Red Hat. Hibernate. Everything data.
http://hibernate.org/.
[84] RoboRealm. Prewitt Edge.
http://www.roborealm.com/help/Prewitt.php.
[85] Ruye Wang. Karhunen-Loeve Transform (KLT).
http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html, 05.11.2013.
[86] Ryszard Tadeusiewicz. Systemy wizyjne robotów przemysłowych. WNT, 1992.
[87] Ryszard Tadeusiewicz, Przemysław Korohoda. Komputerowa analiza i przetwarzanie
obrazów. Wydawnictwo Fundacji Postepu
˛
Telekomunikacji, Kraków 1997.
[88] Sergey Tarasevich. Android-Universal-Image-Loader.
https://github.com/nostra13/Android-Universal-Image-Loader, 2011–2014.
[89] Seung Yeol Yoo, Achim Hoffmann. Clustering-Based Relevance Feedback for Web
Pages.
http://www.cse.unsw.edu.au/~achim/PDFs/PRICAI06-1.pdf, University of New South Wales
Sydney, School of Computer Science and Engineering.
[90] Shay Chen. Application Denial of Service. Is it Really That Easy?
https://www.owasp.org/images/d/da/OWASP_IL_7_Application_DOS.pdf, Hackticks 05.2007.
Bibliografia
154
[91] Simon Perreault, Patrick Hebert. Median Filtering in Constant Time.
http://nomis80.org/ctmf.pdf, IEEE.
[92] SpringSource. Spring. Let’s build a better Enterprise.
http://spring.io/.
[93] Stefan Leutenegger. Image Keypoint Detection, Description and Matching.
http://www.roboticsschool.ethz.ch/airobots/programme/presentations/ImageKeypoints.pdf,
AIRobots Summer School 2012.
[94] Tatiana Jaworska. Zastosowania obliczeń inteligentnych do wyszukiwania w obrazowych bazach danych.
http://www.ibspan.waw.pl/~jaworska/baza_st_dok12_1.pdf, Instytut Badań Systemowych
Polskiej Akademii Nauk.
[95] Tatu Saloranta. Jackson. High-performance JSON processor.
http://jackson.codehaus.org/.
[96] TELSAT Electronic Systems. Rozpoznawanie obrazów.
http://555.pl/index.php?kat=394.
[97] The Apache Software Foundation. Apache Geronimo.
https://geronimo.apache.org/.
[98] The Apache Software Foundation. Apache Geronimo Servlet 3.0 API.
http://mvnrepository.com/artifact/org.apache.geronimo.specs/geronimo-servlet_3.0_spec.
[99] The Apache Software Foundation. Apache Maven.
http://maven.apache.org/.
[100] The Apache Software Foundation. Apache Tomcat.
http://tomcat.apache.org/.
[101] The pgAdmin Development Team. pgAdmin: PostgreSQL administration and management tools.
http://www.pgadmin.org/.
[102] T.J. Crowder. What is different between database clustering and database partitioning.
http://stackoverflow.com/questions/17021203/.
[103] Tomasz Downarowicz. Entropy.
http://prac.im.pwr.wroc.pl/~downar/english/documents/entropy.pdf, Wroclaw University
of Technology, Institute of Mathematics and Computer Science.
[104] Tomasz Rosiński. Techniki wyszukiwania danych multimedialnych oraz standard
MPEG-7.
http://helios.et.put.poznan.pl/~dgajew/download/PUT/, Zakład Telekomunikacji Multimedialnej i Radioelektroniki. Instytut Elektroniki i Telekomunikacji Politechniki Poznańskiej 2004.
[105] Tomasz Łucewicz. Principles of Digital Image Processing. Core Algorithms — Regions
in Binary Images.
http://www-users.mat.umk.pl/~kozak/PDI_RegionsInBinaryImages.pdf, 18.11.2009.
[106] Van Aelst. Mahalanobis distance.
http://classifion.sicyon.com/References/M_distance.pdf.
[107] Vikas Patel. Android-Custom-Gallery-And-Instant-Upload.
https://github.com/vikaskanani/Android-Custom-Gallery-And-Instant-Upload.
[108] Virginia E. Ogle, Michael Stonebraker. Chabot: Retrieval from a Relational Database
of Images.
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.64.989&rep=rep1&type=pdf,
University of California, Berkeley.
[109] Vojtech Krasa. VisualVM Launcher.
http://plugins.jetbrains.com/plugin/7115?pr=.
[110] Webopedia. API — application program interface.
http://www.webopedia.com/TERM/A/API.html.
[111] Witold Malina, Maciej Smiatacz. Rozpoznawanie obrazów. Akademicka Oficyna
Wydawnicza EXIT, Warszawa 2010.
Bibliografia
155
[112] Wyszukiwarka Google — Pomoc. Wyszukiwanie Obrazem.
https://support.google.com/websearch/answer/1325808.
[113] Yong Rui, Thomas S. Huang, Michael Ortega, Sharad Mehrotra. Relevance Feedback: A Power Tool for Interactive Content-Based Image Retrieval.
http://research.microsoft.com/en-us/um/people/yongrui/ps/csvt98.pdf, University of Illnois, Department of Electrical and Computer Engineering and Department of Computer Science, Beckman Institute for Advanced Science and Technology.
[114] Zbigniew Rudnicki. Przetwarzanie i analiza obrazów oraz złożonych danych.
http://www.kkiem.agh.edu.pl/dydakt/obrazy/Analiza%20obrazow.pdf, ZKiEM, AGH w Krakowie.
A. Spis zawartości dołaczonego
˛
nośnika danych
Do niniejszej pracy w formie papierowej dołaczono
˛
płyte˛ CD zawierajac
˛ a˛ naste˛
pujace
˛ materiały:
— bieżac
˛ a˛ prace˛ w wersji elektronicznej (katalog Opracowanie),
— kod źródłowy zaimplementowanego systemu (katalog Kod_zrodlowy),
— zbiór przykładowych testów funkcjonalnych systemu przedstawiajacych
˛
jego
możliwości, przy czym każdy test funkcjonalny ukazany jest w formie sekwencji
zrzutów ekranu aplikacji (katalog Testy_funkcjonalne).

Podobne dokumenty