Lab02 - Rozpoznawanie twarzy na podstawie barwy
Transkrypt
Lab02 - Rozpoznawanie twarzy na podstawie barwy
Politechnika Szczecińska - Wydział Informatyki Techniki biometryczne Sprawozdanie nr 1 Paweł Najgebauer Rok akademicki: 2007/2008 Semestr: I Temat: Rozpoznawanie twarzy na podstawie barwy Grupa ćw.: IU11 Data: 10.11.2007 Grupa lab.: 2 Ocena: Program wykorzystuje cechę charakterystyczną barwy skóry ludzkiej. Twarz na zdjęciu w formacie HSV można rozpoznać, ponieważ spełnia następujące warunki H ≥ 0,9 lub H ≤ 0,1 S ≥ 0,2 i S ≤ 0,6 V ≥ 0,4 Aby rozpoznać twarz należy przekształcić zdjęcie do formatu HSV. Następnie stworzyć maski spełniające warunki odpowiednio dla wartości częstotliwości, nasycenia koloru, mocy światła. Iloczyn poszczególnych masek tworzy nam część wspólną, czyli prawdopodobnie obszar zdjęcia na którym znajduje się twarz. W celu usunięciu szumów ze zdjęcia, stosuję się transformatę Fouriera oraz odwrotną transformatę Fouriera. Ostatnim etapem jest obrysowanie wykrytego obszaru ramką. function image = lab02(image_path) image = imread(image_path, 'JPG'); % zamiana z RGB na HSV imageHSV = rgb2hsv(image); % wykrywanie twarzy [x y z] = size(imageHSV); maska1 = zeros(x, y); maska2 = zeros(x, y); maska3 = zeros(x, y); maska1(find(imageHSV(:, :, 1) >= 0.9 | imageHSV(:, :, 1) <= 0.1)) = 1; maska2(find(imageHSV(:, :, 2) >= 0.2 & imageHSV(:, :, 2) <= 0.6)) = 1; maska3(find(imageHSV(:, :, 3) >= 0.4)) = 1; %usuniecie szumow przy pomocy transformaty i odwrotnosci transformaty %Fouriera spectrum = fftshift(fft2(maska1 .* maska2 .* maska3)); [a b] = size(spectrum); for i = 1:a for j = 1:b if(~((i > (a/2 - 3)) & (i < (a/2 + 3)) & (j > (b/2 - 3)) & (j < (b/2 + 3)))) spectrum(i, j) = 0; end end end spectrumR = round(ifft2(spectrum)); %znalezienie UpLeft i DownRight rogow twarzy UL = [x y]; DR = [1 1]; for i = 1:x for j = 1:y if(spectrumR(i, j) ~= 0) if(i > DR(1,1)) DR(1,1) = i; else if(i < UL(1,1)) UL(1,1) = i; end end if(j > DR(1,2)) DR(1,2) = j; else if(j < UL(1,2)) UL(1,2) = j; end end end end end %rysowanie ramki twarzy image(UL(1,1),UL(1,2):DR(1,2),:) = 1; image(UL(1,1):DR(1,1),DR(1,2),:) = 1; image(DR(1,1),UL(1,2):DR(1,2),:) = 1; image(UL(1,1):DR(1,1),UL(1,2),:) = 1; imagesc(image); Wyniki programu: Wnioski Na podstawie działania programu można stwierdzić, że bardzo duże znaczenie w procesie rozpoznawania ma oświetlenie oraz tło robionego zdjęcia. Należy zwrócić uwagę na ostanie zdjęcie, na którym twarz została rozpoznana na plakacie będącym tłem. Metoda dobrze się sprawdza na zdjęciach dobrej jakości dostosowanych w tym celu.