2022年MathorCup数学建模A题大规模指纹图像检索的模型与实现解题全过程文档加程序

news2024/9/22 15:37:56

2022年第十二届MathorCup高校数学建模

A题 大规模指纹图像检索的模型与实现

原题再现

  在生物特征识别领域,指纹作为最具独特性与持久性的生物特征之一,被广泛应用于身份识别。
  指纹识别过程分为特征提取和比对两个环节。其中特征提取环节会提取用于指纹识别的指纹特征,一般国际上最为常见的指纹特征为“细节点”特征,其可视化展示形式如图 1 中的浅蓝色小圆圈及对外伸出的浅蓝色短线段,短线段用于指示细节点处纹线方向。细节点一般采用三元存储格式:(x,y,θ),分别表示 x 轴像素坐标、y 轴像素坐标及细节点方向。一般而言:(1)指纹图像坐标体系:左上角为坐标原点,且 x 轴方向向右,y 轴方向向下;(2)细节点表达约定:细节点 x, y 的位置采用指纹图像坐标系表达,其方向规定:零度方向为 x 轴正方向(向右),90 度方向为 y 轴负方向(向上),180 度方向为 x 轴负方向(向左),270 度方向为 y 轴正方向(向下),最大角度为 359 度。角度的最小区分单位为 1 度。
在这里插入图片描述
  在指纹匹配环节,需要对两幅指纹图像的“同一性”进行定量评价,通常采用相似度指标。常见的两枚指纹之间的相似度评价主要依据每枚指纹图像中各个细节点之间的匹配关系。如图 1 所示,相互具有匹配关系的细节点之间用一根跨越两幅图像的红线将其互相连接,用于可视化展示。
  在指纹图像匹配环节,常需要考虑如下的情况:
  考虑到在采集指纹图像时,手指按压图像采集设备的角度、轻重及位置各不相同,因此两幅指纹图像需要做图像的旋转、平移后才能相互对准。由于手指皮肤较为柔软,通过按压方式采集到的指纹图像会发生一定程度的不规则弹性形变,在图 1 中会发现两幅指纹图像中,某些相互匹配的细节点在对准时,不能完全“重叠”,有一定幅度的位置及角度的偏差。这一现象也可以从“跨越两幅图像的红线并不是都平行”现象中观察到。
  考虑到手指可能存在临时性蜕皮、褶皱等因素,且空气中的湿度及皮肤表面的干燥程度或粘附在皮肤上的异物等都会导致采集到的指纹图像存在纹线模糊、遮挡等现象,最终导致某些原本应该提取到的特征没有提取到,或者提取了一定数量的伪特征。在图 1 中可以观察到并不是所有的细节点都有对应的红线进行关联。
  指纹识别问题中有一种一对多比对模式(one-to-many matching),是录入的查询指纹与指纹数据库中的所有已登记指纹逐一进行匹配,直至找到相似度最佳的已登记指纹或搜索完整个指纹数据库后给出无对应已登记指纹的结论。辨识模式主要应用于刑侦指纹自动识别系统、大型指纹考勤系统和门禁系统等。随着社会上指纹识别应用的普及,用于识别人员身份的指纹数据库规模也迅速上升,居民身份证指纹库容甚至达到了亿人级别。这也会导致“逐一”遍历全库的查找方式因每次遍历时间过长而无法具有实际应用价值,必须引入图像检索技术,缩短数据库的每次遍历时间。
  指纹图像的检索原理可以形象的看成:用若干大筛子快速、精准地筛除掉数据库中绝大多数与查询指纹图像明确不具有“同一”关系的图像。检索过程完成后,留下的少量图像和查询指纹具有高度相似性,需要进一步利用指纹识别算法做“逐一”识别。
  一般而言,图像检索过程筛选掉的指纹图像少,则在检索过程完成后保留下来“同一”关系指纹图像的可能性大,但是整个识别过程的耗时较长;反之,检索算法筛选掉的指纹图像多,则在筛选后保留下来“同一”关系指纹图像的可能性相对变小,但是整个识别过程的耗时较短。若检索过程中筛选掉了“同一”关系的指纹,则后续“逐一”比对算法无论怎么改进都无法再找到这枚“同一”关系的指纹。因此如何设计高效精准的搜索算法是大规模指纹图像检索的关键问题。
  问题 1:分析指纹图像的细节点特征(参见附件三所述三个数据文件),给出可用于指纹快速检索的检索方法,请阐述该检索方法的原理。重点说明:(1)检索过程中避免筛除掉“同一”指纹的机制;(2)完整、清晰的图像检索模型框架及实现方法;(3)给出该检索方法的时间复杂度、空间复杂度分析。估算检索方法自身占用的内存空间规模及由于采用该检索方法,每一枚指纹图像需要承担的内存空间大小。
  问题 2:针对提出的检索方法:将数据文件中提供的具有“同一”关系的全部指纹对子(TZ_同指.txt)作为查询图像在指纹数据集中进行检索方法验证。具体要求参见附件一。
  问题 3:针对 TZ_同指 200_乱序后_Data.txt 数据文件采用和问题 2 相同的方式进行检索,给出检索结果,并将结果数据压缩为.zip 格式后上传到竞赛系统的计算结果中。具体要求参见附件二。
  问题 4:(1)在完成本赛题时你们可能尝试了不同类型的数学模型及技术路线,并利用问题 2 的数据验证、优选出最佳的检索方法。请介绍并评价你们所考虑过的模型及技术路线的优缺点;(2)本赛题最高的筛选量为 97%,针对 97%以上的筛选量,你们在检索精度、检索时间及内存占用等方面有什么更好的改进策略或者会尝试什么新的检索方法?

整体求解过程概述(摘要)

  生物识别领域中,指纹识别被广泛应用,指纹筛选和识别的问题受到广泛关注。对于指纹的筛选过程,筛选算法的设定尤为重要。
  针对问题 1,本文利用指纹图像的特征点坐标,将指纹图像进行分割为多个子空间。统计每个子空间内的特征点坐标,用来计算该子空间下的特征,并将所有子空间的坐标信息组合为该指纹的特征向量,利用 K-mean 聚类法,以特征向量为聚类标准,使用欧氏距离对指纹数据集进行聚类。在查询过程中,计算查询指纹的特征值,再与数据库中不同的子类中心坐标进行比对,确定距离最小的几个子类作为该查询指纹在数据库筛选的结果。在只使用特征向量进行检索的情况下,在 80%,90%,95%,97%筛选的条件下,穿透率分别为 80%、76%、64%和 36%。当需要筛选掉较多的指纹数据时,针对上述方法快速但容易泄露“同一”指纹的情况,本题利用特征向量预先筛选出一定的指纹,并对筛选出的指纹一一对比,确定相似程度最高的部分指纹作为筛选结果。通过引入第二次筛选,可以极大提升检索结果,同时避免遍历数据库的问题。
  将问题 1 中的算法应用于问题 2,并考虑到指纹数据收集的不稳定性,在二次筛选前进行指纹图片的校正。对于筛选算法,我们比较了利用欧氏距离、利用 BP 神经网络以及使用极坐标下增设自适应误差窗口判断不同图像中任意两个特征点的相似度。结果表明,对于本文的数据,使用简单的欧氏距离可以达到较好的效果,在 80%,90%,95%,97%筛选量的情况下,结果分别为 93.7%、88.7% 、84%、和 80.3%。而利用BP 神经网络和自适应误差窗口较差且需要较大的计算量。再将问题 2 的方法应用于问题 3 得出问题 3 的检索结果。
  提出的二次检索模型可以兼顾时间和检索效率,首先快速筛选掉大量不相关的样本,再通过逐一匹配得到高质量的筛选数据。对于 97%即以上的筛选量,单一的筛选方式几乎无法满足要求,因此需要不同的检索方式进行组合:先进行大量样本的筛除,之后利用精确度较高的算法进行继续筛选,直至达到要求。对于每一个步骤中的筛选,可以结合多个筛选方式,以集成学习投票的方式筛选目标样本,避免单一因素的影响。

模型假设:

  假设 1:所有数据来源于附件,TZ_同指.txt 全部 500 个匹配对子(合计1000 行)的数据均为真实的采样数据,且三组数据符合相同或者相似的分布,数据之间没有较大的差别。
  假设 2: 数据部分受脱皮等其他情况的影响,但不损坏整体的指纹特征或整体指纹特征受异常情况的影响的数据量很少。
  假设 3:所有来自文件的指纹特征点能反映指纹的大部分特征,彼此之间相互分散。

总体流程分析:

在这里插入图片描述

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:(代码和文档not free)

The actual procedure is shown in the screenshot

#统计直方图,用load()载入图片的像素pix,再分别读取每个像素点的R\G\B值进行统计(分别为0-255)
#将256个颜色值的统计情况投影到32个,返回R\G\B投影后的统计值数组,共32*3=96个元素
def calc_Hist(img):
    '''
    #120张图片,4.43s
    w,h = img.size
    pix = img.load() #载入图片,pix存的是像素
    calcR = [0 for i in range(0,32)]
    calcG = [0 for i in range(0,32)]
    calcB = [0 for i in range(0,32)]
    for i in range(0,w):
        for j in range(0,h):
            (r,g,b) = pix[i,j]
            #print (r,g,b)
            calcR[r/8] += 1
            calcG[g/8] += 1
            calcB[b/8] += 1
    calcG.extend(calcB)
    calcR.extend(calcG)

    return calcR
    '''
    #120张图,3.49s

    w,h = img.size
    pix = img.load() #载入图片,pix存的是像素
    calcR = [0 for i in range(0,256)]
    calcG = [0 for i in range(0,256)]
    calcB = [0 for i in range(0,256)]
    for i in range(0,w):
        for j in range(0,h):
            (r,g,b) = pix[i,j]
            #print (r,g,b)
            calcR[r] += 1
            calcG[g] += 1
            calcB[b] += 1
    calcG.extend(calcB)
    calcR.extend(calcG) #256*3

    #calc存放最终结果,32*3
    calc = [0 for i in range(0,96)]
    step = 0 #calc的下标,0~95
    start = 0 #每次统计的开始位置
    while step < 96:
        for i in range(start,start+8): #8个值为1组,统计值相加,eg:色彩值为0~7的统计值全部转换为色彩值为0的统计值
            calc[step] += calcR[i]
        start = start+8
        step += 1
    #print calc 
    return calc

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matplotlib: 绘制柱状图

通过matplotlib绘制柱形图 第一个例子 from matplotlib import pyplot as plty [10, 11, 12, 11, 9, 8, 13, 10] # 创建y轴坐标 x list(range(1,9)) # 创建x轴坐标# 创建x轴显示的参数&#xff08;此功能在与在图像中x轴仅显示能被10整除的刻度&#xff0c;避免刻度过多分…

比亚迪:全球最大电动汽车制造商的坎坷成长之路

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 特斯拉&#xff08;TSLA&#xff09;首席执行官埃隆马斯克表示&#xff0c;特斯拉最接近的竞争对手可能是一家中国电动汽车公司。猛兽财经认为&#xff0c;沃伦•巴菲特支持的比亚迪&#xff08;0211&#xff09;可能是马斯…

在ubuntu上部署与使用docker(python)

1.安装Docker首先&#xff0c;更新现有的包列表sudo apt update接下来安装一些允许童HTTPS才能使用的软件包&#xff1a;sudo apt install apt-transport-https ca-certificates curl software-properties-common然后将官方Docker存储库的GPG秘钥添加到您的系统curl -fsSL http…

关于 C# 引用参数和值参数

关于 C# 引用参数和值参数 C# 数据类型分为值类型和引用类型&#xff0c;两者的区别在于值类型的数据存储在栈中&#xff0c;而引用类型的数据存储在堆中&#xff0c;但是栈中会存放指向存储数据的堆的位置。 传递参数时&#xff0c;传递的是数据栈中的值&#xff0c;实参将数…

高等数学——一元函数微分学

文章目录导数与微分概念几何意义连续、可导、可微之间的关系求导法则基本初等函数的导数公式有理运算法则复合函数求导法奇偶性和周期性隐函数求导反函数求导参数方程求导对数求导法高阶导数概念常用的高阶导数公式微分中值定理和导数的应用微分中值定理导数的应用函数的单调性…

巾帼绽芬芳 一起向未来(下篇)

编者按&#xff1a;为了隆重纪念纪念“三八”国际妇女节113周年&#xff0c;快来与你全方位、多层次分享交流“三八”国际妇女节的前世今生。分上篇&#xff08;节日简介、节日发展和节日意义&#xff09;、中篇&#xff08;节日活动宗旨和世界各国庆祝方式&#xff09;和下篇&…

Linux学习第二十节-NTP网络时间协议

1.概念 NTP(Network Time Protocol&#xff09;网络时间协议基于UDP用于网络时间同步的协议&#xff0c;使网络中的计算机时钟同步到UTC(世界统一时间)&#xff0c;再配合各个时区的偏移调整就能实现精准同步对时功能。 chrony是网络时间协议NTP的实现方式&#xff0c; Chron…

three.js 纹理贴图的使用

刚刚入门的小伙伴请先查看 three.js 基础认识与简单应用 本文章中的两个注意点&#xff0c;下面也有提到&#xff0c;分别是&#xff1a; 1、 vue项目中使用的贴图路径-->需要把 static文件夹 放到 public文件夹下,并使用 static 开头的绝对路径。 2、使用环境遮挡贴图时&a…

Air780E|阿里云|AT命令|物联网|三元组|鉴权|算法|密钥生成-阿里云物联网手动接入步骤

基础资料基于Air780E开发板&#xff1a;Air780E文档中心简介&#xff1a;AT开发探讨重点本系列主要探讨MQTT手动接入腾讯云物理网平台的基本操作及手动鉴权步骤、信息订阅及发布的基本原理。参考阅读&#xff1a;物联网模组AT命令接入云平台&#xff08;1&#xff09;-MQTT基本…

移动硬盘怎么恢复数据?怎么恢复硬盘删除的数据

移动硬盘可以随时插上或拔下&#xff0c;小巧而便于携带的硬盘存储器&#xff0c;以较高的速度与系统进行数据传输。由于其存储空间较大&#xff0c;性价比较高&#xff0c;存储和传输数据快速简便&#xff0c;是很多职场人士必备的外置设备之一。移动硬盘怎么恢复数据&#xf…

cuda代码高效策略--b站看课的笔记

1.1 高效公式 要么增大数据量&#xff0c;要么减少每个线程的内存&#xff08;每个线程读取的数据量变少&#xff0c;每个线程的读取数据的速度变快&#xff08;转变存储方式&#xff0c;对读取慢的地方做优化–合并全局内存&#xff09;&#xff09; 1.2 合并全局内存 一个线…

电子台账:模板制作之二——行过滤(垂直过滤)

1 简介大部分情况下&#xff0c;企业数据源表格中&#xff0c;只有部分行的数据可用于电子台账。例如&#xff0c;一共100行数据&#xff0c;我们只要取得其中20行即可。如果所有数据一股脑全部导入到台账中&#xff0c;再手工删除不需要的行&#xff0c;太麻烦了&#xff0c;有…

js变量和函数提升

1、变量提升 变量提升是JavaScript 中比较“奇怪”的现象&#xff0c;它允许在变量声明之前即被访问 (仅存在于var声明变量) 注意: 1.变量在未声明即被访问时会报语法错误 2.变量在var声明之前即被访问&#xff0c;变量的值为 undefined 3.let/const声明的变量不存在变量提升…

sqli-labs通关lesson36-40

1.lesson36 union select判断注入&#xff1a;为单引号注入?id1%df-- 查数据库&#xff1a;?id-1%df union select 1,2,database()-- 2.lesson-37 报错注入判断注入&#xff1a;为单引号注入通过下方判断password为单引号注入unamez&passwdg%df -- &submitSubmit查数…

神经网络之反向传播算法(自适应梯度算法Adagrad)

文章目录自适应梯度算法&#xff08;Adagrad&#xff09;1、算法原理2、算法实现2.1 训练过程2.2 测试过程及结果3、参考源码及数据集自适应梯度算法&#xff08;Adagrad&#xff09; 自适应梯度算法&#xff08;Adaptive gradient algorithm&#xff0c;Adagrad&#xff09;与…

惊!初中生也来卷了……

大家好&#xff0c;我是良许。 前两天在抖音直播的时候&#xff0c;突然来了一位不速之客…… 他自称是初中生&#xff0c;一开始我还有点不太相信&#xff0c;直到跟他连麦&#xff0c;听到他还略带一些稚嫩的声音&#xff0c;我才知道&#xff0c;他没有骗我…… 他说他想学…

Dynamic Movement Primitives (DMP) 学习

Dynamic Movement Primitives (DMP) 学习 【知乎】Dynamic Movement Primitives介绍及Python实现与UR5机械臂仿真 1. DMP的建模过程 链接&#xff1a;Dynamic Movement Primitives介绍及Python实现与UR5机械臂仿真 - 知乎 (zhihu.com) 沙漏大佬&#xff01;&#xff01;&am…

转行软件测试需要学习哪些知识点?来来来,都给你汇总在这里啦!

都说IT互联网行业吃香&#xff0c;那么如何才能高效转行&#xff0c;习得一技之长换取心仪offer&#xff1f; 一般来说&#xff0c;0基础小白想转行到软件测试行业&#xff0c;按照如下学习逻辑肯定是错不了的&#xff1a; 1.零基础小白入门篇&#xff08;学前扫盲&#xff09…

ThinkBook15电脑开机后马上蓝屏不能使用怎么办?

ThinkBook15电脑开机后马上蓝屏不能使用怎么办&#xff1f;最近有用户使用的ThinkBook15电脑出现了开机之后屏幕蓝屏的情况。出现这个问题&#xff0c;是系统底层的故障&#xff0c;一般用户很难找出问题进行彻底解决。但是我们可以通过以下重做系统的方法来恢复电脑系统的使用…

阶段二11_面向对象高级_学生管理系统案例3

主要功能&#xff1a; 完成学生信息添加&#xff0c;修改和删除功能。 一.查看学生 思路&#xff1a; 图片&#xff1a;5_查看学生思路图.png 代码&#xff1a; StudentController[客服类中] //查找学生 private void findAllStudent() {//1.方法内部创建StudentService业…