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

Podobne dokumenty