ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:468.08KB ,
资源ID:4325632      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4325632.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(指纹识别系统实验报告概要.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

指纹识别系统实验报告概要.docx

1、指纹识别系统实验报告概要实验报告指纹识别系统【实验名称】 指纹识别系统【实验目的】 1.对指纹识别系统的图像预处理有一定的掌握; 2.对后续操作只简单了解; 3.通过功能模块实现指纹识别系统。【实验内容】 1.系统需求分析; 2.系统设计; 3.系统实现。【实验步骤】一、系统需求分析1、目的与背景在网络化时代的今天,我们每个人都拥有大量的认证密码,比如开机密码、邮箱密码、银行密码、论坛登录密码等;并配备了各种钥匙,如门钥匙,汽车钥匙,保险柜钥匙等。这些都是传统的安全系统所采用的方式,随着社会发展,其安全性越来越弱。而我们的生活随时都需要进行个人身份的确认和权限的认定,尤其是在信息社会,人们对于

2、安全性的要求越来越高,同事希望认证的方式简单快速。为了解决这一问题,人们把目光转向了生物识别技术,希望能借助人体的生理特征或行为来进行身份识别。这样人们可以不用携带大串钥匙,不用费心去记各种密码。另外,生物特征具有唯一性,不可复制性,例如指纹。生物特征识别技术所研究的生物特征包括脸、指纹、手掌纹、虹膜、视网膜、声音(语音)、体形。而人类在追寻文档、交易及物品的安全保护的有效性与方便性经历了三个阶段的发展。第一阶段也就是最初始的方法,是采用大家早已熟悉的各种机械钥匙。第二阶段是由机械钥匙发展到数字密钥如密码或条形码等。第三阶段是利用人体所固有的生物特征(指纹识别)来辨识与验证身份。生物识别(指纹

3、识别)是当今数字化生活中最高级别的安全密钥系统。对生物识别(指纹识别)技术来说,被广泛应用意味着它能在影响亿万人的日常生活的各个地方使用。通过取代个人识别码和口令,生物识别(指纹识别)技术可以阻止非授权的访问,可以防止盗用ATM、蜂窝电话、智能卡、桌面PC、工作站及其计算机网络;在通过电话、网络进行的金融交易时进行身份认证;在建筑物或工作场所生物识别技术(指纹识别)可以取代钥匙、证件、图章等。生物识别(指纹识别)技术的飞速发展及其广泛应用将开创个人身份鉴别的新时代!指纹识别二系统设计1.总体设计及系统架构 本系统有两大功能:指纹登记和指纹比对。指纹登记主要包括指纹采集、指纹图像预处理、特征点提

4、取、特征模板存储和输出显示;指纹比对的前三步与指纹登记相同,但在特征点提取后,是将生成的特征模板与存储在指纹特征模板库中的特征模板进行特征匹配,最后输出显示匹配结果。自动指纹识别系统的基本原理框图如图1所示。图1自动指纹识别的基本原理框图本系统在结构上分为三层:系统硬件平台、操作系统和指纹识别算法。系统层次结构如图2所示。图2系统层次 最底层系统硬件平台,是系统的物理基础,提供软件的运行平台和通信接口。系统的硬件平台在Altera的FPGA Cyclone嵌入式系统开发板上实现,指纹传感器采用美国Veridicom公司的FPS200。FPS200可输出大小为256300像素、分辨率为500 d

5、pi的灰度图像。 第二层是操作系统,采用C/OSII。C/OSII是一个基于抢占式的实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性。这一层提供任务调度以及接口驱动,同时,通过硬件中断来实现系统对外界的通信请求的实时响应,如对指纹采集的控制、对串口通信的控制等。这种方式可以提高系统的运行效率。 最上层是指纹识别核心算法的实现。该算法高效地对采集到的指纹进行处理和匹配。采用C语言在FPGA的集成开发环境(IDE)中实现。2 .系统硬件的设计与实现2.1 FPGA嵌入式软核处理器简介 FPGA嵌入式处理器是Altera公司于2004年6月推出的第二代用于可编程逻辑器件的可配置的软核处理器,性能

6、超过200 DMIPS。FPGA是基于哈佛结构的RISC通用嵌入式处理器软核,能与用户逻辑相结合,编程至Altera的FPGA中。处理器具有32位指令集,32位数据通道和可配置的指令以及数据缓冲。它特别为可编程逻辑进行了优化设计,也为可编程单芯片系统(SoPC)设计了一套综合解决方案。FPGA处理器系列包括三种内核:一种是高性能的内核(FPGA/f);一种是低成本内核(FPGA/e);一种是性能/成本折中的标准内核(FPGA/s),是前两种的平衡。本系统采用标准内核。 FPGA 处理器支持256 个具有固定或可变时钟周期操作的定制指令;允许FPGA设计人员利用扩展CPU指令集,通过提升那些对时

7、间敏感的应用软件的运行速度,来提高系统性能。2.2 硬件平台结构 系统的硬件平台结构如图3所示。图3系统硬件平台结构 本系统使用FPS200指纹传感器获取指纹图像。FPS200是电容式固态指纹传感器,采用CMOS技术,获取的图像为256300像素,分辨率为500 dpi。该传感器提供三种接口方式:8位微机总线接口、集成USB全速接口和集成SPI接口。本系统采用集成SPI接口。指纹采集的程序流程是:首先初始化FPS200的各个寄存器,主要是放电电流寄存器(DCR)、放电时间寄存器(DTR)和增益控制寄存器(PGC)的设置;然后查询等待,指纹被FPS200采集进入数据寄存器后,通过DMA存入内存。

8、由于从指纹传感器采集到的指纹图像数据在80 KB左右,以DMA方式存入片内RAM。FPGA对指纹图像数据进行处理后,生成指纹特征模板,在指纹登记模式下,存入片外Flash中;在指纹比对模式下,与存储在Flash中的特征模板进行匹配,处理结果通过LCD和七段LED显示器输出显示。 本系统的硬件平台主要是在Altera的FPGA Cyclone嵌入式开发板上实现,选用Altera的Cyclone版本的FPGA开发套件,包括FPGA处理器、标准外围设备库、集成了SoPC Builder系统设计工具的QuartusII开发软件等。系统的主要组件FPGA的标准内核、片内存储器、SPI、UART、DMA控

9、制器、并行I/O接口、Avalon总线、定时器等都集成在一块Altera的Cyclone FPGA芯片上,使用SoPC Builder来配置生成片上系统。 SoPC Builder是功能强大的基于图形界面的片上系统定义和定制工具。SoPC Builder库中包括处理器和大量的IP核及外设。根据应用的需要,本系统选用FPGA Processor、On Chip Memory、Flash Memory(Common Flash Interface)、SPI、JTAG UART、DMA、Interval timer、LCD PIO、Seven Segment PIO、Avalon Tri State

10、 Bridge等模块。对这些模块配置完成后,使用SoPC Builder进行系统生成。SOPC Builder自动产生每个模块的HDL文件,同时自动产生一些必要的仲裁逻辑来协调系统中各部件的工作。3.系统软件的设计与实现 本系统的指纹图像处理及识别算法采用C语言在FPGA IDE中实现。指纹识别算法的流程如图4所示。 图4指纹识别算法流程 背景分离是将指纹区与背景分离,从而避免在没有有效信息的区域进行特征提取,加速后续处理的速度,提高指纹特征提取和匹配的精度。采用标准差阈值跟踪法,图像指纹部分由黑白相间的纹理组成,灰度变化大,因而标准差较大;而背景部分灰度分布较为平坦,标准差较小。将指纹图像分

11、块,计算每个小块的标准差。若大于某一阈值(本文取20),则该小块中的所有像素点为前景;否则,为背景。 方向图是用纹线的方向来表示原来的纹线。本文采用块方向图,将源指纹图像分成小块,使用基于梯度值的方向场计算方法,计算出每个小块的脊线方向。 图像增强的目的是改善图像质量,恢复脊线原来的结构;采用方向滤波,设计一个水平模板,根据计算出的方向图,在每个小块中将水平模板旋转到所需要的方向进行滤波。 图像的二值化是将脊线与背景分离,将指纹图像从灰度图像转换为二值图像。 二值化后的图像经过细化,得到纹线的骨架图像。细化采用迭代的方法,使用Zhang Suen并行细化算法,可对二值图像并行处理。 特征提取阶

12、段,选择脊线端点和分叉点作为特征点,记录每一个特征点的类型、位置和方向信息,从而得到指纹的特征点集。但由于在指纹扫描和预处理阶段会引入噪声,产生大量伪特征点,因此需要进行伪特征点的去除。去除伪特征点后的特征点集作为特征模板保存。 特征匹配阶段采用基于特征点的匹配算法,通过平移和旋转变换实现特征点的大致对齐重合,计算坐标变换后两个模板中的特征点的距离和角度。如果小于某一阈值(本文的距离和角度阈值分别取5个像素和10),则认为是一对匹配的特征点。计算得出所有匹配的特征点对后,计算匹配的特征点占模板中所有特征点的百分比S。根据系统的拒识率(FRR)和误识率(FAR)要求设置阈值TS。如果S大于或等于

13、阈值TS,则认为是同一指纹;否则,匹配失败。4.系统程序语言用C语言和C+语言进行编程,程序各部分成员与方法如下:三系统实现打开程序进行指纹识别匹配成功匹配失败四、代码实现1.#include #include #include #include thin_image.hint nCol,nVS;void readBmp(char* bmpFile) FILE *bmpInput, *rasterOutput; sImage originalImage; unsigned char someChar; unsigned char* pChar; int nColors; long fileSi

14、ze; int vectorSize, r, c; /* initialize pointer */ someChar = 0; pChar = &someChar; printf(Reading filename %sn, bmpFile); /*-READ INPUT FILE-*/ bmpInput = fopen(bmpFile, rb); fseek(bmpInput, 0L, SEEK_END); rasterOutput = fopen(data.txt,w); /*-GET BMP DATA-*/ originalImage.cols = (int)getImageInfo(b

15、mpInput, 18, 4); originalImage.rows = (int)getImageInfo(bmpInput, 22, 4); fileSize = getImageInfo(bmpInput, 2, 4); nCol = nColors = getImageInfo(bmpInput, 46, 4); nVS = vectorSize = fileSize - (14 + 40 + 4*nColors); /*-PRINT TO SCREEN-*/ printf(Width: %dn, originalImage.cols); printf(Height: %dn, or

16、iginalImage.rows); printf(File size: %ldn, fileSize); printf(# Colors: %dn, nColors); printf(Vector size: %dn, vectorSize); image-Hres = originalImage.cols; image-Vres = originalImage.rows; image-Size = fileSize; image-i = new PixelfileSize; image-p = new Pixel*fileSize; for(int i=0;iHres;i+) image-

17、pi = new Pixelimage-Vres; printf(%d n,image-Hres); /*-READ RASTER DATA-*/ fseek(bmpInput, (54 + 4*nColors), SEEK_SET); int count = 0; for(r=0; r=originalImage.rows - 1; r+) for(c=0; cprc = int(*pChar)/255; / inverting the image if(image-prc=1) image-prc=0; else image-prc=1; fprintf(rasterOutput, (%d

18、, %d) = %dn, r, c, int(*pChar)/255); fclose(bmpInput); fclose(rasterOutput);void writeBmp(char* bmpFile) FILE *bmpOutput, *rasterOutput, *oldFile; sImage originalImage; unsigned char someChar; unsigned char* pChar; int nColors; long fileSize; int vectorSize, r, c; oldFile = fopen(output.bmp,rb); /*

19、initialize pointer */ someChar = 0; pChar = &someChar; printf(Writing filename %sn, bmpFile); /*-write INPUT FILE-*/ bmpOutput = fopen(bmpFile, wb); fseek(bmpOutput, 0L, SEEK_END); rasterOutput = fopen(data.txt,w); originalImage.cols = image-Hres; originalImage.rows = image-Vres; fileSize = image-Si

20、ze; nColors = nCol; vectorSize = nVS; /image-i = new PixelfileSize; /image-p = new Pixel*fileSize; / write the header / 54 + 4*nColors/ char ch2;/ for( int i=0; i 54 + 4* nColors; i+ )/ fread(ch, sizeof(char), 1, oldFile);/ fwrite(ch, sizeof(char), 1, bmpOutput);/ copyImageInfo(oldFile,bmpOutput); c

21、opyColorTable(oldFile,bmpOutput,nColors); /*-PRINT TO SCREEN-*/ printf(Width: %dn, originalImage.cols); printf(Height: %dn, originalImage.rows); printf(File size: %ldn, fileSize); printf(# Colors: %dn, nColors); /*-Write RASTER DATA-*/ fseek(bmpOutput, (54 + 4*nColors), SEEK_SET); for(r=0; r=origina

22、lImage.rows - 1; r+) for(c=0; cprc*255; fwrite(pChar, sizeof(char), 1, bmpOutput); /fprintf(rasterOutput, (%d, %d) = %dn, r, c, int(*pChar)/255); fclose(bmpOutput); fclose(rasterOutput);/*-COPIES HEADER AND INFO HEADER-*/void copyImageInfo(FILE* inputFile, FILE* outputFile) unsigned char* ptrC; unsi

23、gned char dummy; int i; dummy = 0; ptrC = &dummy; fseek(inputFile, 0L, SEEK_SET); fseek(outputFile, 0L, SEEK_SET); for(i=0; i=50; i+) fread(ptrC, sizeof(char), 1, inputFile); fwrite(ptrC, sizeof(char), 1, outputFile); /*-COPIES COLOR TABLE-*/void copyColorTable(FILE* inputFile, FILE* outputFile, int

24、 nColors) unsigned char* ptrC; unsigned char dummy; int i; dummy = 0; ptrC = &dummy; fseek(inputFile, 54L, SEEK_SET); fseek(outputFile, 54L, SEEK_SET); for(i=0; i=(4*nColors); i+) /* there are (4*nColors) bytesin color table */ fread(ptrC, sizeof(char), 1, inputFile); fwrite(ptrC, sizeof(char), 1, o

25、utputFile); /*-GET IMAGE INFO SUBPROGRAM-*/long getImageInfo(FILE* inputFile, long offset, int numberOfChars) unsigned char *ptrC; long value = 0L; unsigned char dummy; int i; dummy = 0; ptrC = &dummy; fseek(inputFile, offset, SEEK_SET); for(i=1; i=numberOfChars; i+) fread(ptrC, sizeof(char), 1, inp

26、utFile); /* calculate value based on adding bytes */ value = (long)(value + (*ptrC)*(pow(256, (i-1); return(value); /* end of getImageInfo */*-SET IMAGE INFO SUBPROGRAM-*/void setImageInfo(FILE* outputFile, long offset, int numberOfChars,long value) unsigned char *ptrC; /long value = 0L; unsigned ch

27、ar dummy; int i; dummy = 0; ptrC = &dummy; fseek(outputFile, offset, SEEK_SET); for(i=1; i=numberOfChars; i+) printf(%dn,value); fwrite( &(char *)(&value)i), sizeof(char),1, outputFile ); /* calculate value based on adding bytes */ /value = (long)(value + (*ptrC)*(pow(256, (i-1); /*ptrC = (unsigned

28、char) value/pow(256,(i-1); /value = fmod(value,pow(256,(i-1) ); /fwrite(ptrC, sizeof(char), 1, outputFile); /return(value); /* end of setImageInfo */2.#include #include #include #include thin_image.hstatic int masks = 0200, 0002, 0040, 0010 ;static unsigned char delet512 = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1