Rozpoznawanie obrazów
Rozpoznawanie obrazu jest jedną z najczęstszych i najbardziej spektakularnych dziedzin inteligencji obliczeniowej.
Postawiony problem
Zadany system posiada zbiór obrazów wzorcowych (zwanych również uczącymi) w postaci dwuwymiarowej bitmapy.
Każda z tych map ma nadaną etykietkę, która określa na co wskazuje dana bitmapa (do jakiej klasy należy). Do systemu jest następnie dostarczona jakaś testowa dwuwymiarowa bitmapa. Zadaniem algorytmu jest wskazanie do jakiej klasy należy ta testowa mapa bitowa, czyli określenie do której z bitmap wzorcowych jest najbardziej podobna podana bitmapa testowa. Dla uproszczenia zakłada się, iż rozmiar bitmap wzorcowych i testowych jest jednakowy oraz każda z nich posiada co najmniej jeden punkt o wartości 1. Przyjmuje się, że kolor czarny oznacza wartość na bitmapie równą 1.
Przykładowe bitmapy wzorcowe o rozmiarze 5x4 (wysokość x szerokość):
znaki_wz{1} = [ ...
0 0 0 1 0 0 1 1 0 1 0 1 0 0 0 1 0 0 0 1 ];
znaki_wz{2} = [ ...
0 1 1 1 1 0 0 1 0 0 1 0 0 1 0 0 1 1 1 1 ];
znaki_wz{3} = [ ...
1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 ];
W wyżej wymienionych przykładach etykietką każdej bitmapy jest jej numer (numer klasy to numer wzoru). Przykładowe bitmapy testowe:
znaki_tst{1} = [ ...
0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 1 0 0 0 1 ];
znaki_tst{2} = [ ...
1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 ];
znaki_tst{3} = [ ...
1 1 1 1 0 0 0 1 0 0 1 0 1 1 0 0 1 1 1 1 ];
Algorytm zachłannego dopasowania punktu
Algorytm potrafi wskazać dla dowolnej bitmapy testowej, która bitmapa jest do niej najbardziej podobna. Dokonywane jest to przez zmierzenie i zsumowanie miary „niepodobieństwa” danej bitmapy testowej do poszczególnych bitmap wzorcowych i vice-versa. Przyjmuje się, iż ta bitmapa wzorcowa wskazywana jest jako najbardziej podobna, dla której suma miar „niepodobieństwa” między bitmapą wzorcową a testową i między bitmapą testową a wzorcową jest najmniejsza („niepodobieństwo” między bitmapą BA a BB nie musi być równe „niepodobieństwu” między BB a BA).
Sercem algorytmu jest określenie „niepodobieństwa” między dwoma bitmapami BA i BB, której pseudokod to:
miara = miara_niepodobienstwa(bitmapy BA, BB) 1. miara := 0
2. Wykonaj pętlę dla każdego czarnego punktu o pozycji (pay, pax) w BA 1. odl_min = + nieskończoność
2. Wykonaj pętlę dla każdego czarnego punktu o pozycji (pby, pbx) w BB 1. odl_akt := odległość między punktami (pay, pax) a (pby, pbx) 2. odl_min := min{odl_min, odl_akt}
3. miara := miara + odl_min
Aby określić miarę „obustronnego niepodobieństwa”, lub też miarę podobieństwa pomiędzy bitmapami należy użyć:
miara_podobieństwa_obustronnego(bitmapy BA, BB) =
= -( miara_niepodobieństwa(bitmapy BA, BB) + miara_niepodobieństwa(bitmapy BB, BA) )
Przykład działania:
Dla pewnej bitmapy testowej podanej niżej zastosowano wspomniany algorytm, dla uproszczenia zamiast zalecanej miary odległości euklidesowej zastosowano odległość typu manhattan:
1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1
bitmapa testowa Bitmapa wzorcowa 1. bitmapa wzorcowa 2 Bitmapa wzorcowa 3 1 1 1 1
0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1
0 0 0 1 0 0 1 1 0 1 0 1 0 0 0 1 0 0 0 1
0 1 1 1 1 0 0 1 0 0 1 0 0 1 0 0 1 1 1 1
1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 miara_niepodobieństwa
(bitmapa testowa, bitmapa wzorcowa x)
3+2+1+0+
0+0+0+0+
1+0+1+0+
0+0+1+0+
3+2+1+0 = 15
1+0+0+0+
0+0+0+0+
1+1+0+1+
0+0+1+1+
0+0+0+0 = 6
0+0+0+1+
0+0+0+0+
0+0+0+0+
0+0+1+0+
0+0+0+1 = 3 miara_niepodobieństwa
(bitmapa wzorcowa x, bitmapa testowa)
0+0+0+0+
0+0+1+0+
0+0+0+0+
0+0+0+0+
0+0+0+0 = 1
0+0+0+0+
1+0+0+0+
0+0+0+0+
0+1+0+0+
0+0+0+0 = 2
0+0+0+0+
0+0+0+0+
0+0+0+0+
0+0+0+0+
0+0+0+0 = 0
miara_podobieństwa_obust ronnego
(bitmapa testowa, bitmapa wzorcowa x)
-15-1=-16 -6 -2 = -8 -3 -0 = -3
Jak widać podany bitmapa testowa najbardziej jest podobna do trzeciej bitmapy wzorcowej, ponieważ dla niej najwyższa jest miara_podobieństwa_obustronnego.
Zadanie do wykonania
Należy za pomocą podanego algorytmu określić miarę podobieństwa obustronnego pomiędzy wszystkimi bitmapami testowymi a bitmapami wzorcowymi a następnie dla każdej bitmapy testowej wskazać najbardziej podobną bitmapę wzorcową. Należy użyć miary odległości typu euklidesowego.