Смекни!
smekni.com

Система идентификации личности по отпечаткам пальцев Подсистема анализа изображения (стр. 19 из 20)

}

// color = BGR;

COLORREF TFingPicture::GetPixel(CPoint dot)

{

if (!IsLoad) return false;

return pic.GetPixel(dot.x, dot.y);

}

COLORREF TFingPicture::GetPixel(int x, int y)

{

if (!IsLoad) return false;

return pic.GetPixel(x, y);

}

bool TFingPicture::FloodFill(CPoint dot, COLORREF color)

{

if(!IsLoad) return false;

COLORREF col = GetPixel(dot);

CBrush br(color);

pic.SelectObject(&br);

pic.ExtFloodFill(dot.x, dot.y, col, FLOODFILLSURFACE);

return true;

}

bool TFingPicture::FloodFill(int x, int y, COLORREF color)

{

if(!IsLoad) return false;

COLORREF col = GetPixel(x, y);

CBrush br(color);

pic.SelectObject(&br);

pic.ExtFloodFill(x, y, col, FLOODFILLSURFACE);

return true;

}

bool TFingPicture::Line(CPoint from, CPoint to, int width, COLORREF color)

{

if(!IsLoad) return false;

CPen pen(PS_SOLID, width, color);

pic.SelectObject(&pen);

pic.MoveTo(from.x, from.y);

pic.LineTo(to.x, to.y);

return true;

}

bool TFingPicture::Rectangle(CPoint from, CPoint to, int width, COLORREF color)

{

if(!IsLoad) return false;

Line(from, CPoint(from.x, to.y), width, color);

Line(CPoint(from.x, to.y), to, width, color);

Line(to, CPoint(to.x, from.y), width, color);

Line(CPoint(to.x, from.y), from, width, color);

return true;

}

bool TFingPicture::Copy(TFingPicture &from)

{

bmp = from.bmp;

IsLoad = from.IsLoad;

Screen = from.Screen;

return pic.BitBlt(0, 0, bmp.bmWidth, bmp.bmHeight, &from.pic, 0, 0, SRCCOPY)>0;

}

CPoint TFingPicture::NextDotCW(const CPoint dot, int &vec)

//Поиск следующей точки "_по часовой_ стрелке"

//vec вероятное направление поиска

{

int i = vec,

step = 0;

CPoint newdot = dot;

COLORREF clMas[9];

clMas[8] = clMas[0] = GetPixel(dot.x-1, dot.y-1);

clMas[1] = GetPixel(dot.x, dot.y-1);

clMas[2] = GetPixel(dot.x+1, dot.y-1);

clMas[3] = GetPixel(dot.x+1, dot.y);

clMas[4] = GetPixel(dot.x+1, dot.y+1);

clMas[5] = GetPixel(dot.x, dot.y+1);

clMas[6] = GetPixel(dot.x-1, dot.y+1);

clMas[7] = GetPixel(dot.x-1, dot.y);

do{

if(clMas[i+1] < clMas[i])

{

vec = (i + 1) % 8;

newdot.x = dot.x + incXY[vec].x;

newdot.y = dot.y + incXY[vec].y;

if(vec % 2 == 0) SetPixel(dot.x + incXY[vec+1].x, dot.y + incXY[vec+1].y, 0x000000);

vec = (vec + 5) % 8;

return newdot; //найдена новая точка

}

i = (i + 1) % 8;

step++;

}while(step <= 8);

return dot; //поиск ни к чему не привел

}

CPoint TFingPicture::NextDotCCW(const CPoint dot, int &vec)

//Поиск следующей точки "_против часовой_ стрелке"

//vec вероятное направление поиска

{

int i = vec,

step = 0;

CPoint newdot = dot;

COLORREF clMas[9];

clMas[8] = clMas[0] = GetPixel(dot.x-1, dot.y-1);

clMas[1] = GetPixel(dot.x-1, dot.y);

clMas[2] = GetPixel(dot.x-1, dot.y+1);

clMas[3] = GetPixel(dot.x, dot.y+1);

clMas[4] = GetPixel(dot.x+1, dot.y+1);

clMas[5] = GetPixel(dot.x+1, dot.y);

clMas[6] = GetPixel(dot.x+1, dot.y-1);

clMas[7] = GetPixel(dot.x, dot.y-1);

do{

if(clMas[i+1] < clMas[i])

{

vec = (i + 1) % 8;

newdot.x = dot.x + incXY[(8-vec)%8].x;

newdot.y = dot.y + incXY[(8-vec)%8].y;

if(vec % 2 == 0) SetPixel(dot.x + incXY[8-vec-1].x, dot.y + incXY[8-vec-1].y, 0x000000);

vec = (vec + 5) % 8;

return newdot; //найдена новая точка

}

i = (i + 1) % 8;

step++;

}while(step <= 8);

return dot; //поиск ни к чему не привел

}

CPoint TFingPicture::GetSize()

//получение размера изображения

{ if(!IsLoad) return false;

return CPoint(bmp.bmWidth, bmp.bmHeight);}


ПРИЛОЖЕНИЕ 2

РУКОВОДСТВО ПРОГРАММИСТА

П.2.1. НАЗНАЧЕНИЕ ПРОГРАММЫ

Программа распознавания личности по отпечаткам пальцев имеет идентификатор FingerAnalyser и предназначена для автоматической идентификации личности по папиллярному узору. Программа FingerAnalyser выполняет следующие функции:

1) модификация изображения, исправление искажений;

2) выделение локальных особенностей – минюций. формирование списка минюций в абсолютных параметрах;

3) сортировка списка абсолютных параметров, исключение ложных и ненадежных минюций;

4) конвертирование абсолютных параметров в отностительные, формирование списка относительных параметров;

5) установка системы допусков для учета корреляции изображений;

6) сравнение одного отпечатка с множеством других.

Данная работа реализует такое преобразование изображения, при котором данные о расположение уникальных особенностей сохраняются наиболее полно и с наименьшим содержанием ложной информации.

Создаваемая система облегчит разработку алгоритмов обработки изображений, упростит анализ экспериментальных данных и выявление общих закономерностей.

П.2.2. УСЛОВИЯ ПРИМЕНЕНИЯ ПРОГРАММЫ

Программа FingerAnalyser предъявляет следующие требования к техническим средствам:

- стандартный x86-совместимый ПК;

- тактовая частота процессора 900 МГц или более;

- объем оперативной памяти не менее 64 Мб;

- разрешение экрана монитора не менее 1024x768.

Программа FingerAnalyser предъявляет следующие требования к программным средствам:

- операционная система семейства Windows (Windows 9x/ME/NT/2000/XP);

- среда для разработки приложений Microsoft Visual Studio C++ 2003.

П.2.3. ХАРАКТЕРИСТИКА ПРОГРАММЫ

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

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

1) FingerAnalyser.exe – исполняемый файл, содержащий основной интерфейс программы;

2) MFC[1] – библиотеки для поддержки оконного среды;

3) blank.bmp – пустое изображение;

4) report.txt – файл отчет в который записываются все результаты сравнения;

5) sav/*.sav – файлы со структурным представлением отпечатков;

6) sav/fingbase.bse – база данных отпечатков;

7) report.txt – файл-отчет с результатами проведенных сравнений.

Программа является интерактивной, т.е. требующей взаимодействия с пользователем, поэтому время выполнения отдельных этапов обработки не превышает 0.5 с. при использовании требуемых технических средств.


П.2.4. ОБРАЩЕНИЕ К ПРОГРАММЕ

Для запуска программы необходимо убедиться в том, что необходимые библиотеки MFC находятся в том же каталоге, что и исполняемый файл или в каталоге Windows/System32.

Для корректной работы программы она должна находиться в каталоге, к которому есть права на чтение и запись.

Для запуска работы подсистемы необходимо в оболочке системы на главном окне нажать на кнопку «Анализ» - для сравнения нужного отпечатка с набором имеющимся в базе данных, или «Запомнить в базу» - для внесения указанных отпечатков в базу данных.

Интерфейс программы представлен на рис. П.2.2.

Интерфейс программы FingerAnalyser

Рис. П.2.2

На форме программы в визуальном виде представляется, после открытия через пункт «Открыть», исходное изображение, после нажатия на кнопку «Анализ», скорректированное изображение и визуальное представление структурного вида отпечатка. После чего можно нажатием на кнопку «Сравнить» отыскать в базе схожие отпечатки.

При каждом анализе отпечатка создается файл с его структурным описанием. Для того чтобы поместить отпечаток в базу данных отпечатков, для последующего сравнения с ним, необходимо нажать на кнопку «Запомнить в базу». Для запоминания в базу можно выбирать группу файлов для применения операции записи в базу данных для всех выбранных файлов.

П.2.5. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ

Входными и выходными данными для программы является файл базы данных отпечатков sav/fingbase.bse. Структура файла:

src [kol] [dpi] [date] [description]

src [kol] [dpi] [date] [description]

...

src [kol] [dpi] [date] [description]

В каждой записи файла базы данных отпечатков содержится описание одного отпечатка. В табл. П.2.1 приведен формат записи.

Таблица П.2.1

Формат записи базы данных

Поле Формат Описание
src Строка путь к образу из которого была получена информация
kol Целое количество точек
dpi Целое качество исходного отпечатка (dot per inch)
date Дата дата отпечатка
description строка описание

Выходными данными для программы является файл sav/*.sav со структурным представлением, содержащий статистические характеристики минюций на отпечатке. Этот файл имеет следующий формат:

x y alpha type

x y alpha type

...

x y alpha type

В каждой строке файла структурного представления содержится описание одной минюции. В табл. П.2.2 приведен формат строки файла структурного описания.

Таблица П.2.2

Формат строки файла со структурным описанием

Поле Формат Описание
x Целое Абцисса минюции на растре
y Целое Ордината минюции на растре
alpha Целое Ориентация минюции на растре
type Байт Тип минюции. Раздвоение или окончание

Кроме того, в результате работы программы формируется файл-отчет report.txt с результатами всех проведенных сравнений отпечатков.

report.txt имеет следующий формат:

------ Namei ------

Counti1 Pcti1 Sourcei1

Counti2 Pcti2 Sourcei2

...

Countik Pctik Sourceik

Всего в базе: NN

В табл. П.2.3 приведен формат данных файла report.txt.

Таблица П.2.3

Формат данных файла-отчета

Поле Формат Описание
Name Строка Имя отпечатка
Count Целое Абсцисса минюции на растре
Pct Целое Степень сходства отпечатков в процентах, принимает значения (0, 100]
Source Строка Путь к файлу, из которого были взяты параметры
NN Целое Количество отпечатков имеющихся в базе данных

На рис. П.2.1 приведен пример файла отчета.


Файл-отчет

------ hedgeR1_2.bmp ------

7 70 с:&bsol;мои документы&bsol;fing&bsol;fingc&bsol;fingeranalyser&bsol;pic&bsol;base&bsol;hedger1_1.bmp

Всего в базе: 58

------ starkyR2_2.bmp ------

5 50 с:&bsol;мои документы&bsol;fing&bsol;fingc&bsol;fingeranalyser&bsol;pic&bsol;base&bsol;starkyr2_1.bmp

Всего в базе: 58

------ karR2_2.bmp ------

3 30 с:&bsol;мои документы&bsol;fing&bsol;fingc&bsol;fingeranalyser&bsol;pic&bsol;base&bsol;karr2_1.bmp

Всего в базе: 58

------ vasL1_2.bmp ------

21 100 с:&bsol;мои документы&bsol;fing&bsol;fingc&bsol;fingeranalyser&bsol;pic&bsol;vasl1_1.bmp

56 100 с:&bsol;мои документы&bsol;fing&bsol;fingc&bsol;fingeranalyser&bsol;pic&bsol;vasl1_2.bmp

12 100 с:&bsol;мои документы&bsol;fing&bsol;fingc&bsol;fingeranalyser&bsol;pic&bsol;vasl1_3.bmp

Всего в базе: 58

------ tatL1_2.bmp ------

Ни одного отпечатка не найдено!

Рис. П.2.1

П.2.6. СООБЩЕНИЯ

Сообщения, выдаваемые программисту, приведены в табл. П.2.4.


Таблица П.2.4

Сообщения программисту

Сообщение Действие программиста
Отпечаток не обработан Прежде чем запускать сравнение необьходимо провести анализ
База данных пуста В базе данных нет информации ни об одном отпечатке. Необходимо заполнить базу данных отпечатков
Отпечаток не пригоден для сохранения в базу На отпечатке либо слишком мало обнаружено минюций, менее 10, либо слишком много, более 80
Ни одного отпечатка не найдено В результате поиска не совпало ни одного отпечтака
Невозможно создать базу данных с отпечатками Возможно нет прав на запись или нет свободного места на носителе
Невозможно создать файл Возможно нет прав на запись или нет свободного места на носителе
Невозможно открыть файл Возможно нет прав на чтение или не существует запрашиваемого файла на носителе
Найдены схожие отпечатки В базе данных были обнаружены отпечатки, имеющие схожее представление.

Визуализация результатов проведения анализа приведена на рис. П.2.2 в правой части экрана.