Рефераты. Система идентификации личности по отпечаткам пальцев

}

//загрузить изображение из файла src

bool TFingPicture::Load(const CString src)

{   

IsLoad = false;

CBitmap bm;

bm.Detach();

IsLoad = bm.Attach(LoadImage(0, src, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE))>0;

bm.GetObject(sizeof(BITMAP), &bmp);

pic.SelectObject(&bm);

return IsLoad;

}

// color = BGR;

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

{

if (!IsLoad) return false;

pic.SetPixel(dot.x, dot.y, color);

return true;

}

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

{

if (!IsLoad) return false;

pic.SetPixel(x, y, color);

return true;

}

// 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.1.

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

Рис. П.2.1


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

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


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

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

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

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

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

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

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

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

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

7)       dll библиотеки MFC

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

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

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

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

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


П.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

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.