Lab05 - Porównanie metod rozpoznawania twarzy
Transkrypt
Lab05 - Porównanie metod rozpoznawania twarzy
Politechnika Szczecińska - Wydział Informatyki Techniki biometryczne Sprawozdanie nr 5 Rok akademicki: 2007/2008 Paweł Najgebauer Semestr: I Temat: Porównanie metod rozpoznawania twarzy Grupa ćw.: IU11 Data: 09.01.2008 Grupa lab.: 2 Ocena: Opis algorytmu działania Program ma porównać skuteczność działania czterech metod rozpoznawania twarzy. Testy zostały przeprowadzone na bazie zdjęć ORL, z której 5 pierwszych zdjęć służy do stworzenia bazy danych, a kolejnych pięć do porównania i testowania. Program wczytuje wszystkie zdjęcia w niezmiennej formie do wielowymiarowej tablicy Readed. Następnie każda z metod tworzy własną macierz DataBase, w której przechowywane są wzorce twarzy. I metoda Jako ekstraktor cech zdjęcia użyty został histogram. W celu porównania zdjęć i znalezieniu najlepiej pasującego został wykorzystany wzór na odległość Euklidesa: E= n ∑ (x i =1 i − yi ) 2 Metoda ta jest stosunkowo prosta w działaniu oraz porównania wykonywane są szybko. II metoda Druga metoda skaluje obraz na mniejszy o wielkości 16 x 16 pikseli. Następnie liczona jest różnica między poszczególnymi pikselami z wzoru i sprawdzanego rysunku. W miejscach gdzie różnica jest mniejsza bądź równa zmiennej delta (o wartości 25), zaliczamy ze piksele są podobne. Obrazek o największej liczbie pikseli podobnych uznajemy za właściwy. Metoda również prosta pod względem matematycznym i szybko wykonywana na komputerze. III metoda W tej metodzie role ekstraktora cech spełnia transformata Fouriera z której wycinamy dwa kwadraty wielkości 10 x 10 z górnych rogów. W ten sposób powstaje wektor cech. Do sprawdzania podobieństwa między zdjęciami została użyta odległość Euklidesa. Metoda trudniejsza i wolniej wykonywana przez komputer ze względu na bardziej skomplikowane operacje matematyczne. IV metoda W metodzie tej ponownie wykorzystywana jest transformata Fouriera, jednak do porównania zdjęć użyto korelacji. Tam gdzie współczynnik korelacji jest największy uznajemy, że znaleziono rysunek pasujący. Metoda ta jest bardzo skomplikowana wykonanie jej trwa zdecydowanie najdłużej. Kod programu function lab05 () K = 40; L = 5; M = 10; compare = K*(M-L); delta = 25; %counter = 0; recog = 0; %wczytanie obrazow do tablicy for k=1:K for m=1:M path_read = ['orl/s', num2str(k), '/', num2str(m), '.pgm']; X = double(imread(path_read, 'PGM')); Readed(:,:,k,m) = X; end end %metoda histogramu i odleglosci Euklidesa [I J a b] = size(Readed); for k=1:K for m=1:M for i=1:I for j=1:J Readed2(k,m,i,j) = Readed(i,j,k,m); end end end end for k=1:K for l=1:L DataBase(:,k,l) = hist(Readed2(k,l,:), [7:16:255]); end end for k = 1:K for l = L+1:10 min_coe = BITMAX; ind_coe = 0; X_hist = (hist(Readed2(k,l,:), [7:16:255]))'; for i = 1:K for j = 1:L Euclidean = sqrt(sum((DataBase(:,i,j) - X_hist).^2)); if Euclidean < min_coe min_coe = Euclidean; matematycznie, dlatego ind_coe = i; end end end if k == ind_coe; recog = recog + 1; end end end recog/compare %metoda skalowania i wektorow clear DataBase; recog = 0; for k=1:K for l=1:L DataBase(:,:,k,l) = imresize(Readed(:,:,k,l), [16 16]); end end for k = 1:K for l = L+1:10 pic_res_test = imresize(Readed(:,:,k,l), [16 16]); max_coe = 0; ind_coe = 0; for i = 1:K for j = 1:L sum_ones = sum(sum(abs(DataBase(:,:,i,j) - pic_res_test) <= delta)); if sum_ones > max_coe max_coe = sum_ones; ind_coe = i; end end end if k == ind_coe recog = recog + 1; end end end recog/compare %wyciecie z widma obrazka dwoch kwadratow 10x10 na potrzeby metody nr 2 clear DataBase; recog = 0; for k=1:K for l=1:L Xfft2 = fft2(Readed(:,:,k,l)); [x y] = size(Xfft2); DataBase(:,:,k,l) = abs([Xfft2(1:10, 1:10) Xfft2(1:10, y-9:y)]); end end for k = 1:K for l = L+1:10 Xfft2 = fft2(Readed(:,:,k,l)); [x y] = size(Xfft2); Xftt2 = abs([Xfft2(1:10, 1:10) Xfft2(1:10, y-9:y)]); min_coe = BITMAX; ind_coe = 0; for i = 1:K for j = 1:L Euclidean = sqrt(sum(sum((DataBase(:,:,i,j) - Xftt2).^2))); if Euclidean < min_coe min_coe = Euclidean; ind_coe = i; end end end if k == ind_coe recog = recog + 1; end end end recog/compare %wyliczenie widma obrazka i energii na potrzeby metody 3 clear DataBase; recog = 0; for k=1:K for l=1:L DataBase(:,:,k,l) = fft2(Readed(:,:,k,l)); DataBaseKorelacja(k,l) = sum(sum(Readed(:,:,k,l).^2)); end end for k = 1:K for l = L+1:10 korelacja = conj(fft2(Readed(:,:,k,l))); energy_test = sum(sum(Readed(:,:,k,l).^2)); max_coe = 0; ind_coe = 0; for i = 1:K for j = 1:L max_wsp = max(max(real(ifft2(DataBase(:, DataBaseKorelacja(i,j)))); if max_wsp > max_coe max_coe = max_wsp; ind_coe = i; end end end if k == ind_coe recog = recog + 1; end end end recog/compare :, i,j).*korelacja)) / sqrt(energy_test * Wyniki programu: Testy były wykonywane na komputerze PC Pentium III 1,2 GHz z 768 MB RAM z Windows XP Professional + SP2. Podane czasy są orientacyjne – mierzone przy pomocy stopera. wczytywanie I metoda Czas wykony 00:18:02 0:03:15 Skuteczność: 88 % II metoda 0:04:06 91 % Skuteczność metod III metoda IV metoda 0:04:06 5:39:02 93 % 97 % Czas wykonywania 06:00:00 98 5:39:02 96 97 04:48:00 94 93 92 03:36:00 91 90 88 88 02:24:00 86 01:12:00 84 0:18:02 82 0:03:15 00:00:00 I metoda S1 II metoda III metoda IV metoda wczytywanie I metoda 0:04:02 II metoda 0:04:06 S1 III metoda IV metoda Wnioski Wszystkie cztery metody dają zadowalające wyniki skuteczności. Najlepszą okazała się metodą czwarta – wykorzystująca korelacje. W porównaniu do pozostałych metod wykonuje się ona zdecydowanie najdłużej bo prawie 6 min. Najbardziej ‘ekonomiczna’ metodą jest 3. Jej przewaga polega na tym, że przy bardzo dobrym czasie wykonywania (około 4 sekund) osiąga skuteczność na poziomie 93 %.