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

Podobne dokumenty