Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Никеева РПЗ.doc
Скачиваний:
53
Добавлен:
09.02.2015
Размер:
3.45 Mб
Скачать
    1. Выбор типа оп и формирование глобальных признаков

Тип ОП характеризуется положением и количеством сингулярностей (ядер и дельт).

Рисунок 27. Расположение сингулярностей для типа отпечатка пальца «треугольная арка».

    1. Построение поля направлений

Поле направлений строится по модели Шерлока-Монро в зависимости от выбранного типа ОП.

Входными данными на данном этапе являются: cores и deltas – массивы с координатами центров и дельт данного отпечатка, size_x и size_y – размер выходной матрицы, задающей поле направлений.

function [ img ] = Sh_M_orientation( cores, deltas, size_x, size_y )

for a=(1:size_y)

for b = (1:size_x)

sum_c = 0;

sum_d = 0;

z = 0;

for c = (1:size(cores,1))

if(((size_y-a)==cores(c,2))&(b==cores(c,1)))

z=1;

end

end

for c = (1:size(deltas,1))

if(((size_y-a)==deltas(c,2))&(b==deltas(c,1)))

z=1;

end

end

if(z==0)

for c = (1:size(cores,1))

sum_c = sum_c + atan(((size_y-a)-cores(c,2))/(b-cores(c,1)));

end

for c = (1:size(deltas,1))

sum_d = sum_d + atan(((size_y-a)-deltas(c,2))/(b-deltas(c,1)));

end

line(b) = (sum_d - sum_c)/2;

else

line(b)=0;

end

end

if (a==1)

img = line;

else

img = cat(1, img, line);

end

end

end

На рисунке 27 представлен пример построения поля направлений.

Рисунок 28. Поле направлений с отмеченными позициями ядра и дельты.

    1. Построение шаблона

На этапе построения шаблона происходит заполнение пустого изображения растровыми прототипами, соответствующими разным типам минуций.

Рисунок 29. Используемые прототипы.

На вход функции добавления минуций поступают переменные:

  • форма отпечатка (эллипс);

  • растровые прототипы минуций;

  • поле направлений;

  • количество минуций.

В ходе работы функции генерируются случайные числа – координаты для минуций. Если сгенерированные координаты попали в область отпечатка (эллипс), то на этом месте ставится минуция, если нет – координаты генерируются еще раз. Минуция ставится с учетом поля направлений, в случайную сторону.

Код функции размещения одной минуции:

function [ img ] = place_min( img, minuc, x, y, alfa )

minuc = imadjust(minuc, [0 1], [1 0]);

minuc = imrotate(minuc, alfa);

minuc = imadjust(minuc, [0 1], [1 0]);

for a = (1:size(minuc,1))

for b = (1:size(minuc,2))

if(minuc(a,b)<253)

img(x-fix(size(minuc,1)/2)+a,y-fix(size(minuc,2)/2)+b) = minuc(a,b);

end

end

end

end

Код функции размещения всех минуций представлен в полном тексте программы в Приложении 1.

Рисунок 30. Расположение минуций.

    1. Применение фильтра Габора

Первым шагом на этом этапе является генерация фильтра Габора. Ниже приведен код функции, реализующий генерацию фильтра Габора по заданным углом theta.

function gb=gabor_fn(theta)

% bw = bandwidth, (1)

% gamma = aspect ratio, (0.5)

% psi = phase shift, (0)

% lambda= wave length, (>=2)

% theta = angle in rad, [0 pi)

bw = 0.7;

gamma = 1;

psi = 1;

lambda = 8;

sigma = lambda/pi*sqrt(log(2)/2)*(2^bw+1)/(2^bw-1);

sigma_x = sigma;

sigma_y = sigma/gamma;

sz=fix(8*max(sigma_y,sigma_x));

if mod(sz,2)==0, sz=sz+1;end

[x y]=meshgrid(-fix(sz/2):fix(sz/2),fix(sz/2):-1:fix(-sz/2));

% Rotation

x_theta=x*cos(theta)+y*sin(theta);

y_theta=-x*sin(theta)+y*cos(theta);

gb=exp(-0.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).*cos(2*pi/lambda*x_theta+psi);

end

Рисунок 31. Примеры сгенерированных фильтров Габора.

Следующим шагом является наложение фильтра Габора на изображение с учетом расположения минуций и значений углов. Функция наложения зависит от входного изображения img и поля направлений orient.

Ниже приведен код программы, реализующий данную функциию:

function [ img ] = gabbor_app( img, orient)

win_size = 3;

for a = (fix(win_size/2)+1:win_size:size(img,1)-fix(win_size/2)-10)

for b = (fix(win_size/2)+1:win_size:size(img,2)-fix(win_size/2)-10)

gab = gabor_fun(orient(ceil(a/9),ceil(b/9)));

%gab = gabor_fun(pi/4);

M = zeros(win_size, win_size);

for c = (1:win_size)

for d =(1:win_size)

M(c,d) = img(a-fix(win_size/2+1)+c, b-fix(win_size/2+1)+d);

end

end

M = imfilter(M, gab);

for c = (1:win_size)

for d =(1:win_size)

img(a-fix(win_size/2+1)+c, b-fix(win_size/2+1)+d) = M(c,d);

end

end

end

end

end

Обработка изображения фильтром Габора проходит в несколько итераций. При этом происходит постепенное наращивание папиллярных линий ОП.

Рисунок 32. Процесс наращивания папиллярных линий