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).