П .1.11. ТЕКСТ МОДУЛЯ TFingPicture.cpp
#include "StdAfx.h" #include "TFingPicture.h" /////////////////////////////////////////////////////////////////////////////// //Класс изображения. //Хранение изображения, выполнение простейших операции над ним /////////////////////////////////////////////////////////////////////////////// //координаты окружающих точек const CPoint incXY[8]= { CPoint(-1, -1), CPoint(0, -1), CPoint(1, -1), CPoint(1, 0), CPoint(1, 1), CPoint(0, 1), CPoint(-1, 1), CPoint(-1, 0)}; TFingPicture::TFingPicture(CDC *_Screen) { Screen = _Screen; pic.CreateCompatibleDC(Screen); IsLoad = false; } TFingPicture::~TFingPicture(void){} //отобразить изображение на окне в координатах (X,Y) bool TFingPicture::Show(int X, int Y) { if (!IsLoad) return false; int kx = bmp.bmWidth; int ky = bmp.bmHeight; return Screen->StretchBlt(X, Y, bmp.bmWidth, bmp.bmHeight, &pic, 0, 0, kx, ky, SRCCOPY)>0; } //загрузить изображение из файла 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) сравнение одного отпечатка с множеством других. Данная работа реализует такое преобразование изображения, при котором данные о расположение уникальных особенностей сохраняются наиболее полно и с наименьшим содержанием ложной информации. Создаваемая система облегчит разработку алгоритмов обработки изображений, упростит анализ экспериментальных данных и выявление общих закономерностей.
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (164)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |