Przykładowe sprawozdanie laboratoryjne
Transkrypt
Przykładowe sprawozdanie laboratoryjne
LABORATORIUM BIOMETRII I NADZORU WIZYJNEGO Michał Kaszuba, 88515 Grupa: MiEPU LOKALIZACJA TĘCZÓWKI OKA 1. Metoda lokalizacji środka z wykorzystaniem operatora wykrywania krawędzi Do tego celu wykorzystałem kolejno: progowanie (binaryzację), wykrywanie krawędzi filtrem Sobela, filtrację medianową maską 3x3, powtórną binaryzację (aby znormalizowad obraz) oraz wyznaczenie środka źrenicy. Kod w Matlabie: clear all; close all; clc; x=imread('001_1_1.bmp'); xOrig = x; [xSize ySize] = size(x); uppThr = max(x(:)); lowThr = min(x(:)); thr = 0.4*uppThr; %binaryzacja (progowanie): for i=1:xSize for j=1:ySize if(x(i,j) >= thr) x(i,j) = 255; else x(i,j) = 0; end end end figure; imshow(x); %filtr sobela xE=filter2('sobel',x); figure; imshow(xE); %filtracja medianowa maska 3x3 x=medfilt2(xE); figure; imshow(x); %binaryzacja (progowanie): for i=1:xSize for j=1:ySize if(x(i,j) >= thr) x(i,j) = 1; else x(i,j) = 0; end end end maxX = 0; maxY = 0; xCnt = 0; yCnt = 0; maxXCnt = 0; maxYCnt = 0; x1=0; x2=0; y1=0; y2=0; 1|Strona % wyszukiwanie wiersza o najwiekszej ilosci punktow for i=1:xSize yCnt = 0; for j=1:ySize if(x(i,j) == 0) yCnt = yCnt +1; end end if(yCnt > maxYCnt) maxYCnt = yCnt; maxY = i; end end %wyszukiwanie kolumny o najwiekszej ilosci punktow for i=1:ySize xCnt = 0; for j=1:xSize if(x(j,i) == 0) xCnt = xCnt +1; end end if(xCnt > maxXCnt) maxXCnt = xCnt; maxX = i; end end crossSize = 20; for i=0:crossSize xOrig(maxY,maxX-crossSize/2+i) = 255; xOrig(maxY-crossSize/2+i,maxX) = 255; end figure; imshow(xOrig); Wyniki: 1) Oryginalny obraz: 2) Obraz po binaryzacji: 2|Strona 3) Obraz po przefiltrowaniu filtrem krawędziowym Sobela: 4) Obraz po filtracji medianowej: 5) Wynikowy obraz – lokalizacja środka tęczówki: Jak widad środek tęczówki (a dokładniej źrenicy) został wykryty w miarę poprawnie. Wyliczone przez program współrzędne środka: maxX = 181 maxY = 136 Obraz wejściowy ma rozmiar 320x280. 3|Strona 2. Zastosowanie operacji morfologicznych do obrazu skwantowanego Do tego celu użyłem kwantyzacji obrazu, dylacji a następnie wyznaczyłem środek źrenicy podpobnie jak poprzednio. Kod w Matlabie: clear all; close all; clc; x=imread('001_1_1.bmp'); xOrig = x; [xSize ySize] = size(x); %kwantyzacja qCoeff=100; xQ = floor((QUANT(x,qCoeff))/qCoeff); imshow(xQ*qCoeff); %dylacja xD = bwmorph(xQ, 'dilate'); figure; imshow(xD); x=xD; maxX = 0; maxY = 0; xCnt = 0; yCnt = 0; maxXCnt = 0; maxYCnt = 0; x1=0; x2=0; y1=0; y2=0; % wyszukiwanie wiersza o najwiekszej ilosci punktow for i=1:xSize yCnt = 0; for j=1:ySize if(x(i,j) == 0) yCnt = yCnt +1; end end if(yCnt > maxYCnt) maxYCnt = yCnt; maxY = i; end end %wyszukiwanie kolumny o najwiekszej ilosci punktow for i=1:ySize xCnt = 0; for j=1:xSize if(x(j,i) == 0) xCnt = xCnt +1; end end if(xCnt > maxXCnt) maxXCnt = xCnt; maxX = i; end end crossSize = 20; for i=0:crossSize xOrig(maxY,maxX-crossSize/2+i) = 255; xOrig(maxY-crossSize/2+i,maxX) = 255; end figure; imshow(xOrig); 4|Strona Wyniki: 1) obraz po kwantyzacji: 2) obraz po operacji morfologicznej dylacji: 3) wynik działania programu: Jak widad środek tęczówki (a dokładniej źrenicy) został wykryty w obrębie źrenicy, ale jego położenie nieco się różni od rzeczywistego środka. Wynika to z faktu, że obraz powstały w wyniku dylacji nie jest idealnym okręgiem, a składa się z odcinków prostych (jego obrys), zwłaszcza widad to dobrze w obszarze kątów 0, 90, 180, 270 stopni, wobec czego jako maxX i maxY zostaje przyjęty pierwszy wiersz i pierwsza kolumna w których jest największa liczba punktów źrenicy, a w tym przypadku takich linii (i kolumn) jest więcej. Zatem program nie jest idealny, można by było go ulepszyd poprzez wykrywanie wierszy i kolumn o takich samych liczbach punktów i wzięcie jako wyniku średniej w osi X i w osi Y z „jednakowo maksymalnych” wierszy i kolumn. Wyliczone przez program współrzędne środka: maxX = 176 maxY = 130 5|Strona 3. Propozycja własnej metody Proponowana przeze mnie metoda opiera się na trzech zasadniczych krokach: 1) 10-krotna dylacja (w wyniku otrzymujemy wypełnione koło które odpowiada źrenicy) 2) Określenie czterech skalarów określających granice koła w osiach X i Y (minX, maxX, minY, maxY): Obrazowo przedstawia to rysunek: minY minX maxX maxY 3) Z czterech znalezionych wartości (minX, maxX, minY, maxY) obliczenie środka tęczówki poprzez uśrednienie wartości w osi X i Y. Kod w Matlabie: clear all; close all; clc; x=imread('001_1_1.bmp'); xOrig = x; x=im2bw(x,0.2); [xSize ySize] = size(x); for i=1:10 xD = bwmorph(x, 'dilate'); end x=xD; imshow(xD); %odwrócenie zer i jedynek for i=1:xSize for j=1:ySize if(x(i,j) == 0) x(i,j) = 1; else x(i,j) = 0; end end end minX = 0; maxX = 0; minY = 0; maxY = 0; %minX for i=1:xSize if(max(x(:,i)) == 1) minX = i; break; end end 6|Strona %maxX for i=minX+1:xSize if(max(x(:,i)) == 0) maxX = i-1; break; end end %minY for i=1:ySize if(max(x(i,:)) == 1) minY = i; break; end end %maxY for i=minY:ySize if(max(x(i,:)) == 0) maxY = i-1; break; end end %przeliczam wspolrzedne srodka ze zmiennych czastkowych xCenter = round((minX + maxX)/2); yCenter = round((minY + maxY)/2); %rysuje krzyzyk w srodku zrenicy crossSize = 20; for i=0:crossSize xOrig(yCenter, xCenter - crossSize / 2 + i) = 255; xOrig(yCenter - crossSize / 2 + i, xCenter) = 255; end figure; imshow(xOrig); Wyniki: 1) Obraz po 10-krotnej dylacji: 2) wynik działania programu: Wyliczone przez program współrzędne środka: xCenter = 183 yCenter = 136 7|Strona 4. Określenie miary dokładności wyznaczania środka Wyniki eksperymentów zebrałem w tabelce: Wynikowy punkt Wynikowy obraz Metoda lokalizacji środka z wykorzystaniem operatora wykrywania krawędzi Zastosowanie operacji morfologicznych do obrazu skwantowanego Własna metoda [181 136] [176 130] [183 136] Miara wyznaczania dokładności środka jaką proponuję opiera się na wrażeniu wzrokowym obserwatora (człowieka). Wg tej metody najlepsze rezultaty dała moja własna metoda oraz metoda pierwsza opierająca się o wykrywanie krawędzi. Tak było w tym przypadku. Przyczyny niedokładności drugiej metody opisałem wcześniej. Gdyby poprawid algorytm drugiej metody eliminując wykrytą przeze mnie niedoskonałośd w algorytmie, wszystkie metody dawałyby w przybliżeniu ten sam wynik. Ciężko więc zaproponowad jakiś sensowny sposób automatycznego sprawdzenia miary dokładności wyznaczenia środka tęczówki poza metodą „na oko”. Wszystkie metody dały wynik poprawny i zadowalający (zakładam przy tym poprawioną wersję metody drugiej). Ciekawym spostrzeżeniem jest bardzo dobra dokładnośd mojej autorskiej metody która jest bardzo prymitywna, ale daje zadowalające rezultaty, co widad wyżej. 8|Strona