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

news2024/10/7 6:38:34

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.0
    mcc_tau_psi = 400.0
    mcc_mu_psi = 1e-2
    

def 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 2

xy = 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.coloradmin.cn/o/1084170.html

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

相关文章

【数据库系统概论】第二章关系数据库

2.1关系数据结构及其形式化定义 前面说过&#xff0c;数据模型由以下三部分构成 数据结构数据操作数据的完整性约束条件 而如今最为重要的数据模型便是关系模型。本书所学的关系数据库就是支持关系模型的数据库系统&#xff0c;因此本章重点研究的也是以下三个部分 一&…

unity发布微信小游戏,未找到 game.json报错原因

unity发布微信小游戏&#xff0c;未找到 game.json报错原因 同一个问题相隔一年遇到两次&#xff0c;两次原因都不一样&#xff0c;记录一下&#xff0c;以后不要再掉坑里 原因一&#xff1a;申请的appID是小程序不是小游戏 解决方法&#xff1a;需要在程序平台修改服务类目 如…

外发文件怎么保存

文件外发是企业日常业务中常见的场景&#xff0c;外发整个流程涉及外发的渠道、外发文件的大小、外发的效率、外发的合规性、文件的保存和管理等一系列的过程。外发文件的保存可以从两个角度着手&#xff1a; 一、接收方 接收方首先要对接收到的文件进行分级和分类&#xff0…

第P9周-YOLOv5Backbone模块

CSP Bottleneck块和C3 类的设计使其非常适合目标检测任务&#xff0c;充分考虑了多尺度特征融合、梯度流动和计算效率等因素。C3 类以及CSP&#xff08;Cross Stage Partial&#xff09; Bottleneck块作为YOLOv5中的一部分&#xff0c;具有以下优势&#xff0c;相对于传统的普通…

京东商品品牌数据采集接口,京东商品详情数据接口,京东API接口

采集京东商品品牌数据的方法如下&#xff1a; 打开网页。在首页【输入框】中输入目标网址批量输入多个关键词并搜索。创建【循环列表】&#xff0c;采集所有商品列表中的数据。编辑字段。创建【循环翻页】&#xff0c;采集多页数据。设置滚动和修改【循环翻页】XPath。启动采集…

日常开发中的图片处理系列工具

一键保存谷歌浏览器当前网页的图片和视频等的插件。 视频图片音乐下载助手_3.1.3_chrome扩展插件下载_极简插件 可高效实现下载管理&#xff0c;网页图片&#xff0c;视频&#xff0c;音频等内容的嗅探和下载&#xff0c;同时扩展集成多个网站的智能脚本&#xff0c;快速提取你…

1600*C. Hamburgers(二分贪心)

Problem - 371C - Codeforces 解析&#xff1a; 二分答案&#xff0c;每次check当前能做的蛋糕数量&#xff0c;判断剩余材料和金钱能否做出来。 注意check中的乘积可能会爆long long&#xff0c;所以二分右边界需要设置1e14以内&#xff08;因为可能会乘一个10000&#xff09;…

element-plus el-cascader 级联组件清空所选数据方法

话不多说直接上代码 import {ref, Ref, reactive} from vue; const cascaderOrg:Ref ref<any>(null) //获取级联组件的ref ref名称即cascaderOrg cascaderOrg.value.cascaderPanelRef.clearCheckedNodes(); //清空所选数据借用官方文档展示该方法 相关细节描述及全…

3.简单场景构建

在新建的项目中&#xff0c;默认存在 Main Camera 和 Directional Light两个对象。若是缺失&#xff0c;可通过选择菜单中的 Game Object->Camera 和 Geme Object->Light->Directional Light进行创建。 1.添加地形及底图 通过在Cesium面板中选择 Cesium World Terrai…

redis如何实现缓存预热

在业务系统中&#xff0c;我们需要在程序启动的时候加载一些常用的数据到内存数据库中&#xff0c;从而减少业务数据库的压力。这就是我们常提到的缓存预热。官方一点的解释是这样的&#xff1a; 缓存预热是一种在程序启动或缓存失效之后&#xff0c;主动将热点数据加载到缓存中…

使用注解新开事务 @Transactional

使用注解新开事务 Transactional(propagation Propagation.REQUIRES_NEW)

QSS样式表的使用

QSS样式表的使用 Chapter1 【Qt】样式表的使用——设置样式的方法一、简述二、开始总结1、先谈谈我们设置样式有几种方法2、再谈谈这几种设置样式方法的优缺点 个人建议 Chapter2 Qt样式表总结Chapter3 【QT】史上最全最详细的QSS样式表用法及用例说明Chapter4 Qt样式表使用总结…

计算机的计算单位

文章目录 前言一、容量单位二、速度单位1.网络速度2.CPU频率 总结 前言 今天给大家介绍计算机的计算单位&#xff0c;分为两个板块&#xff1a;容量单位、速度单位。 一、容量单位 对于容量单位&#xff0c;大家在日常生活中应该都有所了解&#xff0c;比如说 768M 的光盘、4…

内网穿透的应用-使用eXtplorer本地搭建免费在线文件管理器并实现远程登录

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件&#xff0c;是互联网最重要的应用之一&#xff0c;无论是…

PMP考试知识点(干货码住)

一、需要记忆的公式 1. 三点估算是指通过期望值、标准差和方差来进行估算的方法&#xff1b; 2. 关键路径计算包括ES、EF、LS、LF、总浮动时间和自由浮动时间等指标&#xff1b; 3. 挣值计算是一种常用的项目管理方法&#xff0c;包括CPI、SPI、ETC、EAC和TCPI等指标&#x…

为什么MyBatis是Java数据库持久层的明智选择

在Java应用程序的开发中&#xff0c;选择合适的数据库持久层框架至关重要。一个明智的选择可以帮助开发人员更好地管理数据库交互、提高性能和简化开发工作。 &#xff08;一&#xff09;为什么要选MyBatis JDBCHibernate / JPAMyBatis简单直接ORM轻量动态SQL关联查询开发效率…

VAE模型(详细推导+实例代码)

文章目录 EM算法思路E步M步直观感觉 GMM模型VAEVAE思想从GMM到VAE公式推导重参数VAE神经网络另一个视角的VAE思想为什么引入encoder为什么要重参数噪声与重建 Discrete VAE 本文会从EM算法&#xff0c;GMM模型一步一步的的推导&#xff0c;在过渡到VAE模型&#xff0c;如果有熟…

博华网龙设备命令执行漏洞复现 [附POC]

文章目录 博华网龙设备命令执行漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 博华网龙设备命令执行漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&…

【Vue】之Vuex的入门使用,取值,修改值,同异步请求处理---保姆级别教学

一&#xff0c;Vuex入门 1.1 什么是Vuex Vuex是一个专门为Vue.js应用程序开发的状态管理库。它用于管理应用程序中的共享状态&#xff0c;它采用集中式存储管理应用的所有组件的状态&#xff0c;使得状态的管理变得简单和可预测 官方解释&#xff1a;Vuex 是一个专为 Vue.js 应…

Python数据分析实战-实现Kruskal-Wallis H检验(附源码和实现效果)

实现功能 当需要比较多个&#xff08;大于两个&#xff09;独立样本之间的差异时&#xff0c;可以使用非参数的Kruskal-Wallis H检验。Kruskal-Wallis H检验是一种非参数的方差分析方法&#xff0c;用于检验多个独立样本是否来自于相同的总体分布。 在Python中&#xff0c;你…