竞赛选题 python opencv 深度学习 指纹识别算法实现

1 前言

🔥 优质竞赛项目系列,今天要分享的是

🚩 python opencv 深度学习 指纹识别算法实现

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:4分
  • 创新点:4分

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

2 指纹识别方式

目前市面上有两种指纹识别,分别是光学式和电容式指纹识别。

2.1 电容式指纹识别

电容式指纹识别要比光学式的复杂得多,其原理是将压力感测、电容感测、热感测等感测器整合于一块芯片中,当指纹按压芯片表面时,内部电容感测器会根据指纹波峰与波谷而产生的电荷差(或是温差),形成指纹影像,再通过与算法内部的指纹库进行匹配,从而完成指纹识别。

在这里插入图片描述

电容式指纹识别技术较为复杂,对技术研发和积累有较高要求,并且涉及大量专利,算法得实现也相对困难,所以目前全球只有少数公司能在这方面提供领先的技术产品。

2.2 光学式指纹识别

然后是光学式指纹识别,大家常见的指纹考勤机就是光学式指纹识别。

这类光学式指纹识别主要包括4个方面功能

  • 1.指纹模块负责采集指纹图像。
  • 2.数字信号处理器主要把采集到的指纹图像转化为数字信号。
  • 3.微控制器是整个系统的控制单元,在这里将进行指纹的验证以及输出指令。
  • 4.液晶显示器将输出指纹验证结果。

当我们把手指放在指纹考勤机上时,通过镜面反射原理,指纹模块就会采集指纹图像

在这里插入图片描述

接着指纹图像就会被数字信号处理器转换成数字信号

在这里插入图片描述

然后通过微控制器将数字信号与指纹库里的指纹进行匹配,匹配结果将通过液晶显示器显示出来。这就是光学式指纹识别的工作原理。

电容式与光学式指纹识别主要在指纹的采集方式上拥有较大差异,而在指纹的验证过程中则基本类似。然而因为电容式指纹识别拥有体积小、适用性广的优点,已经有越来越多的设备采用电容式指纹识别,未来的主流将是电容式指纹识别。

3 指纹识别算法实现

3.1 指纹识别算法流程

在这里插入图片描述

3.2 指纹图像预处理

  • 1.图像归一化
  • 2.图像分割
  • 3.图像二值化
  • 4.细化

几个步骤 当然有一些算法为了追求极致,中间还利用了增强、多重滤波等方式,但最根本的目的都是为了在细化之后保留指纹信息并且方便后续处理。

预处理之后是特征点的提取,也就是找到指纹图像当中有价值,具有唯一性和不变性的信息。主要特征点有端点、分叉点几类,在提取部分除了简单的遍历检索确认之外,还有比较重要的一步是伪特征点的去除,主要是针对图像不清晰、不完整导致的断点和边缘端点等。

最后一步是特征点的匹配,将指纹库中的指纹信息与提取的目标图像特征点进行对比。主流算法是以指纹中心点为依据,根据特征点所在的角度及距离,确认其所在位置,根据匹配度计算是否是同一手指的指纹。

3.3 指纹图像目标提取

指纹图像目标提取主要是将指纹图片中提取出来,也叫做指纹图像分割。

图片的前景通过观察可知是由条状或者圆形的一些组成,而底图其他部分只是一个均匀的底色而已。

我们使用非常简单的手段,基于局部梯度就可以很容易实现我们的目标。

方差梯度法提取指纹:

指纹图像通常由前景区域(包含有指纹的脊线和谷线)和背景区域这两部分组成。一般来说,在指纹图像的前景区域中,指纹的脊线和谷线的灰度差是较大的,因而其灰度统计特性局部灰度方差很大;而在指纹图像的背景区域中,两者的方差是很小的。基于这一特性,可以利用指纹图像的局部方差来进行分割。因此,这种方法也被称为方差梯度法。

的灰度平均值 M和方差 Var计算方法:
在这里插入图片描述

提取前的指纹图像:

在这里插入图片描述

提取后的指纹图像:
在这里插入图片描述

可以看到,学长做的还有些噪点,但是也很好解决,做一次形态学操作即可:

在这里插入图片描述

这样噪点就去除了。

3.4 指纹图像增强

在这里插入图片描述

3.5 指纹特征提取

人体指纹的特征可以反映在给定的人类群体里来自不同手指的指纹之间相似的程度。

指纹的特征信息很多,所有的这些指纹特征信息构成了庞大的指纹特征集合。

指纹的细节特征主要指的是纹线端点(RidgeEnding)和纹线分叉点(RidgeBifurcation)。

纹线端点指的是纹线突然结束的位置,而纹线分叉点则是指纹线一分为二的位置。

大量的统计结果表明,使用这两类特征点就足以描述指纹的唯一性。

在这里插入图片描述

Minutia Cylinder-Code (MCC) ,该算法是非常著名的指纹特征识提取算法,

第一次发表在:IEEE tPAMI

Minutia Cylinder-Code: a new representation and matching technique for
fingerprint recognition", IEEE tPAMI 2010

  • MCC提出了一种基于三维数据结构的圆柱编码算法,其从细节的距离和角度出发,构造了圆柱编码
  • 为一种多级的指纹匹配方法,其不仅使用了细节点特征也使用了方向场等特征
  • 特征视为一种局部结构,也是3D结构

在这里插入图片描述

部分实现代码:

# Compute the cell coordinates of a generic local structure# 计算
​    mcc_radius = 70
​    mcc_size = 16
​    g = 2 * mcc_radius / mcc_size
x = np.arange(mcc_size)*g - (mcc_size/2)*g + g/2
y = x[..., np.newaxis]
iy, ix = np.nonzero(x**2 + y**2 <= mcc_radius**2)
ref_cell_coords = np.column_stack((x[ix], x[iy]))mcc_sigma_s = 7.0mcc_tau_psi = 400.0mcc_mu_psi = 1e-2def Gs(t_sqr):"""Gaussian function with zero mean and mcc_sigma_s standard deviation, see eq. (7) in MCC paper"""return np.exp(-0.5 * t_sqr / (mcc_sigma_s**2)) / (math.tau**0.5 * mcc_sigma_s)def Psi(v):"""Sigmoid function that limits the contribution of dense minutiae clusters, see eq. (4)-(5) in MCC paper"""return 1. / (1. + np.exp(-mcc_tau_psi * (v - mcc_mu_psi)))​    
​    
​    
​    # n: number of minutiae# c: number of cells in a local structure
​    xyd = np.array([(x,y,d) for x,y,_,d in valid_minutiae]) # matrix with all minutiae coordinates and directions (n x 3)# rot: n x 2 x 2 (rotation matrix for each minutia)d_cos, d_sin = np.cos(xyd[:,2]).reshape((-1,1,1)), np.sin(xyd[:,2]).reshape((-1,1,1))
rot = np.block([[d_cos, d_sin], [-d_sin, d_cos]])# rot@ref_cell_coords.T : n x 2 x c# xy : n x 2xy = xyd[:,:2]# cell_coords: n x c x 2 (cell coordinates for each local structure)cell_coords = np.transpose(rot@ref_cell_coords.T + xy[:,:,np.newaxis],[0,2,1])# cell_coords[:,:,np.newaxis,:]      :  n x c  x 1 x 2# xy                                 : (1 x 1) x n x 2# cell_coords[:,:,np.newaxis,:] - xy :  n x c  x n x 2# dists: n x c x n (for each cell of each local structure, the distance from all minutiae)dists = np.sum((cell_coords[:,:,np.newaxis,:] - xy)**2, -1)# cs : n x c x n (the spatial contribution of each minutia to each cell of each local structure)cs = Gs(dists)
diag_indices = np.arange(cs.shape[0])
cs[diag_indices,:,diag_indices] = 0 # remove the contribution of each minutia to its own cells# local_structures : n x c (cell values for each local structure)local_structures = Psi(np.sum(cs, -1))

3.6 指纹识别结果

提取特征后,剩下的任务就是对特征进行分类了,可以使用的算法就很多了,比如svm,决策树、神经网络,都可以

在这里插入图片描述

4 整体效果

在这里插入图片描述

5 最后

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

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

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

相关文章

springBoot高校宿舍交电费系统-计算机毕业设计源码031552

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

忘记 iPhone 密码:如果忘记密码,如何解锁 iPhone

为了提高个人数据的安全性&#xff0c;用户通常会为不同的帐户和设备创建不同的复杂密码。虽然较新的 iPhone 型号具有生物识别和面部解锁功能&#xff0c;但这些功能并不总是有效 - 如果您忘记了 iPhone 的密码&#xff0c;您可能会遇到麻烦。 iPhone 用户和 Android 用户一样…

MYSQL 四、mysql进阶 4(索引的数据结构)

一、为什么使用索引 以及 索引的优缺点 1.为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;就好比一本教科书的目录部分&#xff0c;通过目录中找到对应文章的页码&#xff0c;便可快速定位到需要的文章。Mysql中也是一样的道理&#xff0c;进行数…

办公人必备宝藏网站,提升工作效率!

对于每个办公人来说&#xff0c;如何在繁杂的工作中保持高效&#xff0c;是每位职场人士追求的目标。其中&#xff0c;高效的工具和资源可以极大地提升我们的工作效率。下面小编就来和大家分享一些办公人必备的宝藏网站&#xff0c;提升大家的工作效率。 1. 办公人导航 办公人…

反激开关电源变压器设计2

实际计算 已知 Vin&#xff1a;AC176-264V Vo&#xff1a;5V Io2A Vmax264V*根号2373V PoVo*Io10W η0.8 PinPo/η12.5W DCM变压器&#xff0c;在开关电源的整个输入电压范围内满载工作时都工作在断续模式 CCM变压器&#xff0c;在开关电源的整个输入电压范围内满载工作时都工…

小程序开发的技术难点

小程序开发是一项技术难度较高的工作&#xff0c;需要开发者具备多方面的知识和技能&#xff0c;小程序开发的技术难点主要体现在以下几个方面。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 多端兼容 小程序需要在微信、支付宝…

渗透测试基础(五) 获取WiFi密码

1. 前提条件 需要无线网卡&#xff0c;kali无法识别电脑自带的网卡。 2. 实验步骤&#xff1a; 2.1 查看网卡 命令&#xff1a;airmon-ng 2.2 启动网卡监听模式 命令airmon-ng start wlan0 检查下是否处于监听模型&#xff1a;ifconfig查看一下&#xff0c;如果网卡名加…

ARM64汇编0C - inlinehook

本文是ARM64汇编系列的完结篇&#xff0c;主要利用前面学过的知识做一个小实验 完整系列博客地址&#xff1a;https://www.lyldalek.top/article/arm 这里只讨论 ARM64 下的 inlinehook&#xff0c;做一个简单的demo&#xff0c;只是抛砖引玉&#xff0c;有兴趣了解更多细节的可…

WordPress主题 酱茄免费主题

酱茄free主题由酱茄开发的一款免费开源的WordPress主题&#xff0c;主题专为WordPress博客、资讯、自媒体网站而设计&#xff0c;遵循GPL V2.0开源协议发布。 运行环境 酱茄Free主题当前版本&#xff1a;2020.11.25 V1.0.0 支持WordPress版本&#xff1a;5.4 兼容Chrome、Fire…

word复制技巧二则

1 纵向复制 按下Alt键&#xff0c;按下鼠标左键拖动&#xff0c;选中要纵向复制的内容&#xff0c;如下图&#xff0c; 再粘贴即可&#xff1b; 2 整页复制 在页的任意位置单击&#xff0c;然后按CtrlA&#xff0c;这会选中整页&#xff1b;然后再复制粘贴即可&#xff1b;

更换域名流程记录

华为云的服务器&#xff0c;阿里云购买的域名。 1.购买域名 2.在域名服务商绑定服务器ip&#xff08;以阿里云为例&#xff09; 控制台->域名控制台->域名列表->点击域名->域名解析->添加记录 记录类型填A , 主机记录“”或“www”&#xff0c;记录值填服务器i…

最新暑假带刷规划:50天吃透660+880!

现在只刷一本题集根本不够 去做做24年的考研真题卷就什么都明白了&#xff0c;24年的卷子就是典型的知识点多&#xff0c;杂&#xff0c;计算量大。 而现在市面上的任何一本题集&#xff0c;都无法做到包含所有的知识点&#xff0c;毕竟版面有限&#xff01; 所以&#xff0…

iptables(3)规则管理

简介 上一篇文章中,我们已经介绍了怎样使用iptables命令查看规则,那么这篇文章我们就来介绍一下,怎样管理规则,即对iptables进行”增、删、改”操作。 注意:在进行iptables实验时,请务必在个人的测试机上进行,不要再有任何业务的机器上进行测试。 在进行测试前,为保障…

【JavaEE精炼宝库】多线程(7)定时器

目录 一、定时器的概念 二、标准库中的定时器 三、自己实现一个定时器 3.1 MyTimerTask 实现&#xff1a; 3.2 MyTimer 实现&#xff1a; 一、定时器的概念 定时器也是软件开发中的⼀个重要组件。类似于一个 "闹钟"。达到一个设定的时间之后&#xff0c;就执行…

聊一聊 Monitor.Wait 和 Pluse 的底层玩法

一&#xff1a;背景 1. 讲故事 在dump分析的过程中经常会看到很多线程卡在Monitor.Wait方法上&#xff0c;曾经也有不少人问我为什么用 !syncblk 看不到 Monitor.Wait 上的锁信息&#xff0c;刚好昨天有时间我就来研究一下。 二&#xff1a;Monitor.Wait 底层怎么玩的 1. 案…

Chromium 开发指南2024 Mac篇-Chromium项目编译小技巧(六)

1. 前言 在编译大型项目如 Chromium 时&#xff0c;优化编译速度是非常重要的。本文将介绍一些编译优化的小技巧&#xff0c;尤其是如何使用 ccache 来加速 C/C 代码的重新编译。ccache 是一个编译器缓存&#xff0c;通过缓存之前的编译并检测何时再次进行相同的编译&#xff…

“display interface“的43条信息,这条绝对被你忽略了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 大家好&#xff0c;我是张总。 上周和老杨唠嗑&#xff0c;他说我每次都是直播&#xff0c;或者视频号上给大家聊聊技术&#xff0c;都没发过技术…

U盘删除的文件怎么找回?数据恢复,5个方法

“我的u盘里有部分文件不小心被删除了&#xff0c;尝试了很多的方法都无法找回它们。U盘删除的文件怎么找回呢&#xff1f;希望大家给我出出主意&#xff01;” 保存了很多重要的文件在u盘中&#xff0c;查看u盘内存时却发现很多文件被删除了&#xff1f;别慌&#xff01;即使u…

B树(数据结构篇)

数据结构之B树 B-树(B-tree) 概念&#xff1a; B-树是一个非二叉树的多路平衡查找树(数据有序)&#xff0c;是一颗所有数据都存储在树叶节点上的树&#xff0c;不一定存储具体的数据&#xff0c;也可以是指向包含数据的记录的指针或地址 对于**阶为M(子节点数量在2和M之间)*…

Properties与xml知识点总结

文章目录 一、Properties1.1 构造方法1.2 从Properties文件中获取1.3 向Properties文件中存储 二、xml2.1 XML2.2 特点2.3 规则2.3 抬头声明2.4 特殊字符2.5 CDATA区段2.4 作用和应用场景 三、区别 一、Properties 定义&#xff1a;properties是一个双列集合集合&#xff0c;拥…