【计算机视觉40例】案例14:指纹识别

2023-11-16

导读】本文是专栏《计算机视觉40例简介》的第14个案例《指纹识别》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。

目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。

大家可以在公众号“计算机视觉之光”回复关键字【案例14】获取本文案例的源代码及使用的测试图片等资料。

针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。

指纹识别过程中,非常关键的一个步骤是对指纹特征的处理。

通常情况下,要先提取已知指纹的特征,并将其存储在模板库中,以用于后续指纹识别时进行比对,指纹特征提取过程如图1所示。

图1 录入指纹特征

识别指纹时,可能存在两种不同的情况:

  1. 一对一验证。此时,主要验证当前指纹是否和已知指纹一致。例如,通常情况下使用的用指纹给手机解锁。此时,其过程如图2左侧所示。
  2. 一对多识别。此时,主要识别当前指纹和指纹库中众多个指纹的哪个指纹基本一致。例如,单位的打卡系统。此时,其过程如图2右侧所示。

图2  指纹识别

指纹识别的知识点较多,本案例从算法概述、SIFT、识别案例三个方面进行了系统深入的介绍,如图3所示。

图3 指纹识别提纲

为了方便理解,书中尽可能用通俗易懂的例题描述晦涩难懂的原理,现将其中《14.3.3 通过方向描述关键点》部分内容摘抄如下:

如图4所示是一幅由许多人构成的一幅图像,画中是许多人站在一个广场上。如果想根据方向来描述某一个人(作为一个人的特征),可以采用如下步骤:

  1. 步骤1:确定坐标系。
  2. 步骤2:通过某人面向的角度,描述该人。

图4 许多人的图像

不过,上面的方法有两个问题:

  1. 问题1:图像旋转后,坐标就变了。例如,设定了直角坐标系,在图像旋转前后,面向45度角度的人,是不同的人。很显然,我们希望在旋转前后,能够通过同样的角度描述同一个人。
  2. 问题2:以角度为依据,我们会找到许多结果。例如,面向45度方向的人,我们会找到一批人,他们都是面向45度的。这也就是说,单纯通过角度作为描述值,无法做到唯一性。例如,单纯的体重值,无法作为一个人的识别特征,这是因为很多人有同样的体重。

为了解决上述问题,我们做两个优化设计:

  1. 优化设计1:根据图像自身特征确定一个方向,将该方向作为图像的方向。图像内所有人的方向,都以该方向为参考确定一个相对方向。此时,无论图像如何旋转,任何人的相对方向都是保持不变的。如何确定图像的方向呢?图像内,哪个朝向的人最多,就将该方向确定为图像的方向。
  2. 优化设计2:单个人的朝向肯定是容易重复的,例如图像中,可能同时有许多人朝向了同一个方向。但是,一个人及其周围若干个人的方向往往具有独特性。将一个人及其旁边若干个人的方向,作为一个人的方向特征,该特征在图中往往是唯一的,通过该特征能够很好地描述一个人。也就是说,如果使用自身的方向描述一个人,则其描述符为“45”(表示45度朝向);而优化后,要使用一个人自身及其周围多个人的方向来描述一个人,则其描述符为“45/90/135/180/90/45/90/45/90”(不同的值表示其自身及周围人的方向)。很明显,经过优化设计后,该描述符能够很好地、唯一地代表一个人。

受上述思路启发,我们可以通过方向来描述图像中的关键点,具体步骤如下:

  1. 步骤1:确定当前图像的方向;
  2. 步骤2:根据图像方向确定关键点及其周边若干个点的方向;将该方向集合作为当前关键点的特征值;

具体实现时,主要包含三个步骤,具体如下:

  1. 步骤1:确定图像的角度:该方向是图像内所有像素点的参考角度。
  2. 步骤2:确定像素点相对角度:根据图像的角度及像素点自身角度,计算每个像素点的相对角度。
  3. 步骤3:生成描述符:根据关键点邻域内所有像素点的相对角度,生成当前关键点的描述符。

在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书中,从算法原理、实现流程等角度系统深入地介绍了该案例的理论基础和实现过程,并对具体的代码实现进行了细致的介绍与解释。欢迎大家阅读第14章《指纹识别》获取详细内容。

《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【计算机视觉40例】案例14:指纹识别 的相关文章

  • 如何将 Google Cloud Storage 中的许多文件设为私有?

    我进行了很多研究 但无法为此提出解决方案 以下是我用来在 GCP 中公开所有文件的代码 def make blob public bucket name blob name Makes a blob publicly accessible
  • Pygame 让精灵按照给定的旋转行走

    很久以前我做了一个Scratch脚本 我想用Pygame将其转换为Python 有很多示例显示图像的旋转 但我想知道如何更改精灵的旋转以使其沿给定方向移动 而不更改图像 这是我的暂存代码 这是我的 Pygame 精灵类 class Star
  • 如何仅选择数组中的第一列并对其求和?

    这是我的代码 import numpy as np contrainte1 1080 0 65 minutes tous les jours contrainte2 720 0 55 minutes du lundi au vendredi
  • Seaborn regplot 中点和线的不同颜色

    中列出的所有示例西伯恩的regplot文档 https seaborn pydata org generated seaborn regplot html点和回归线显示相同的颜色 改变color争论改变了两者 如何为点设置与线不同的颜色 你
  • Colab 的使用限制持续多久?

    当我对同一帐户的两个笔记本同时使用两个 GPU 约半小时后 Colab 已 12 小时未运行 此消息不断弹出 由于 Colab 中的使用限制 您当前无法连接到 GPU 自从我上次使用 colab 以来已经过去了大约两个小时 但该消息仍然弹出
  • 如何在seaborn中绘制离散变量的分布图

    当我画画的时候displot对于离散变量 分布可能不像我想象的那样 例如 We can find that there are crevices in the barplot so that the curve in kdeplot is
  • 如何在每次运行 python 程序时添加新列

    我希望我的表的第一列作为卷号 第二列作为名称 每当我运行 python 程序时 我想在表中添加一列日期 在这个新列中 我想填充从 user list 获得的列表将包含值 P A P P 等 如何处理 我尝试首先通过 alter 命令添加一列
  • Scapy:如何将新层(802.1q)插入现有数据包?

    我有一个数据包转储 想要将 VLAN 标记 802 1q 标头 注入到数据包中 怎么做 为了找到答案 我查看了Scapy 插入新层和记录问题 https stackoverflow com q 17259592 1381638 这确实很有帮
  • Python 可选参数对

    我正在使用argparse模块获取两个可选的命令行参数 parser add argument start date nargs metavar START DATE help start date in YYYY MM DD parser
  • Python 中使用 globals() 的原因?

    Python 中有 globals 函数的原因是什么 它只返回全局变量的字典 这些变量已经是全局的 所以它们可以在任何地方使用 我只是出于好奇而问 试图学习Python def F global x x 1 def G print glob
  • python lxml 使用iterparse编辑并输出xml

    我已经在 lxml 库上摆弄了一段时间了 也许我没有正确理解它 或者我错过了一些东西 但我似乎无法弄清楚在捕获某个 xpath 后如何编辑文件并且然后能够在逐个元素解析时将其写回到 xml 中 假设我们有这个 xml 作为示例
  • TypeError:“NoneType”对象不可下标[重复]

    这个问题在这里已经有答案了 错误 names curfetchone 0 TypeError NoneType object is not subscriptable 我尝试检查缩进 但仍然有错误 我读到 如果数据库中没有文件名记录 变量名
  • 用于 C++ 中图像分析的 OpenCV 二进制图像掩模

    我正在尝试分析一些图像 这些图像的外部周围有很多噪声 但内部有一个清晰的圆形中心 中心是我感兴趣的部分 但外部噪声正在影响我对图像的二进制阈值处理 为了忽略噪音 我尝试设置一个已知中心位置和半径的圆形蒙版 从而使该圆之外的所有像素都更改为黑
  • 在 Qt 5 中嵌入 Python

    我想将 Python 解释器嵌入到 Qt 5 应用程序中 我在 Qt 5 中有一个工作应用程序 但是当我把 include
  • 在 Python 中将嵌套字典位置作为参数传递

    如果我有一个嵌套字典 我可以通过索引来获取键 如下所示 gt gt gt d a b c gt gt gt d a b c 我可以将该索引作为函数参数传递吗 def get nested value d path a b return d
  • 如何正确将 tflite_graph.pb 转换为 detector.tflite

    我正在使用tensorflow对象检测API使用tensorflow中的ssdlite mobilenet v2 coco 2018 05 09来训练自定义模型模型动物园 https github com tensorflow models
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • gnuplot:第 1 行:无效命令

    stackoverflow 上可爱的人们大家好 我正在尝试使用 gnuplot 绘制数据 我首先阅读表格并提取我想要的数据 我将此数据写入 dat 文件 截至目前 我只是尝试通过命令行绘制它 但会添加必要的代码以在 python 脚本工作后
  • Pandas 2 个字段中唯一值的数量

    我正在尝试查找覆盖 2 个字段的唯一值的数量 例如 一个典型的例子是姓氏和名字 我有一个数据框 当我执行以下操作时 我只获取每列的唯一字段数 在本例中为 最后一个 和 第一个 不是复合体 df Last Name First Name nu
  • 如何从Python枚举类中获取所有值?

    我正在使用 Enum4 库创建一个枚举类 如下所示 class Color Enum RED 1 BLUE 2 我要打印 1 2 作为某处的列表 我怎样才能实现这个目标 您可以执行以下操作 e value for e in Color

随机推荐

  • npm、yarn、pnpm如何清除缓存?

    前端工程化创建项目会经常使用各种安装包管理工具 安装各种前端依赖包 例如 npm yarn pnpm等 时间一长 各种安装包管理工具的在安装依赖时 留下的缓存文件就会变得很大 以至于影响系统的运行 因此必要时清除缓存就是一个不错的选择 本文
  • 磁盘调度算法(FCFS、SSTF)例题

    一 原理 先来先服务 FCFS first come first service 根据进程请求访问磁盘的先后次序进行调度 最短寻道时间优先 SSTF Shortest Seek Time First 选择访问的磁道与当前磁头所在的磁道距离最
  • 下列不是HTML网页开发工具的是,网页开发工具有哪些

    越来越多的移动端和桌面端应用开始使用HTML CSS和JS来开发了 而网页设计更是离不开这些语言所需要的工具 下面由小编为大家整理的网页开发工具 希望大家喜欢 网页开发工具 1 Prepo Prepo 是一款同时登录Mac和iOS平台的应用
  • 变分推断

    变分推断是近年来深度学习中一个非常重要的技术手段 推断困难通常是指难以计算p h v 或其期望 其中v指的是模型的可观测变量 而h表示隐藏变量 在深度神经网络中 多层的隐藏变量之间联系复杂 无法通过一个具体地概率密度函数来刻画隐藏变量的实际
  • 微信小程序wx.getUserProfile的用法

    接触了以前开发的一个微信小程序 发现wx getUserInfo这个官方接口不能获取用户的信息 我重新创建了一个新的项目 发现可以用wx getUserProfile这个官方接口来获取用户信息 具体操作如下 1 首先在xxxx jslim里
  • transformer的学习记录【完整代码+详细注释】(系列二)

    文章目录 1 编码器部分实现 1 1 掩码张量 1 1 1 用 np triu 生产上三角矩阵 1 1 2 生成掩码张量的代码 1 1 3 掩码张量可视化展示 1 1 4 掩码张量学习总结 1 2 注意力机制 1 2 1 注意力机制 vs
  • QT6.4制作动态组织架构图

    最近项目需要用QT开发组织架构图 本来先网上找个demo拿来即用 但是找了一圈 要么不能编译 要么运行崩溃 要么很粗糙什么细节都没做 离实际应用差距甚远 于是我自己重新编写调试 耗费几天时间 在Window10 X64上运行 五层级别 右键
  • Java TreeMap 源码解析

    Java TreeMap 源码解析 继上篇文章介绍完了HashMap 这篇文章开始介绍Map系列另一个比较重要的类TreeMap 大家也许能感觉到 网络上介绍HashMap的文章比较多 但是介绍TreeMap反而不那么多 这里面是有原因 一
  • 网络安全应急响应----4、DDoS攻击应急响应

    文章目录 一 DDoS攻击简介 二 DDoS攻击方法 1 消耗网络带宽资源 1 1 ICMP Flood ICMP洪水攻击 1 2 UDP Flood UDP洪水攻击 2 消耗系统资源 2 1 TCP Flood 2 2 SYN Flood
  • PoDoFo实现本地PDF加载

    PdfMemDocument类 未完成 继承 PdfDocument 友元 PdfWriter 构造函数 PdfMemDocument 构造空对象 PdfMemDocument bool bOnlyTrailer 构造对象 bOnlyTra
  • 若依前后端分离部署(二级域名+反向代理+负载均衡)

    前言 最近使用若依前后端进行二次开发 在部署时遇到了一些问题 在此记录一些经验 仅记录学习和供参考 如果错误请指正 谢谢 问题描述 由于服务器使用Nginx转发域名请求 无法使用根目录 于是在前端加入了二级目录 修改部分如下图 这里是前端入
  • 【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)

    目录 一 初始化列表 初始化列表概念 初始化列表的优点 使用场景 explicit关键字 二 Static成员 Static成员概念 静态数据成员 静态函数成员 使用静态成员的优点 使用静态成员的注意事项 三 友元 友元的概念 类友元 函数
  • vue2 img加载失败时给默认图片

  • python中的分页封装

    utils文件夹下面的pagination 自定义分页组件 import math from django utils safestring import mark safe class Pagination object def init
  • 《看完就懂系列》谈谈数据埋点的原理与实现

    这是大冰块2021年第7篇原创文章 和大冰块一起在前端领域努力吧 写在前面 之前公司接了个做广告的业务 甲方财大气粗 沟通也特别顺利 刚开始的时候 大家都摩拳擦掌兴致满满 觉得这个项目奖金一定会翻一番 于是第一版赶得很急 上线之后 点击率与
  • 高并发平台技术栈大起底

    技术栈 technology stack 就是一个公司的透视镜 从某些程度上可以展示出公司的技术实力 从技术桟也可以看出整个平台的技术要素 平台大小规模等 今天来给大家分享我司的技术全家桶 总览 闲来无事就想着还可以总结总结什么 平台架构
  • 时序分析基本概念介绍——时钟sdc

    上次介绍了sdc的基本概念 那接下来几期 我们来讲解一些比较常用的sdc命令 虽然sdc大大小小有上百条命令 但实际常用的其实就那么10几条 今天我们来介绍下与时钟相关的命令 主要有以下命令 create clock create gene
  • Zlib的安装与测试

    官方网址 http www zlib net 进入官网看到 如图所示 最新版本为zlib 1 2 11 然后你用wget http www zlib net zlib 1 2 11或者wget http www zlib net zlib
  • NGINX监听不同端口的配置

    server listen 81 监听的端口 server name localhost 监听的域名 location message 当当问这个路径时实际上会去访问下面这个地址 proxy pass http localhost xxx
  • 【计算机视觉40例】案例14:指纹识别

    导读 本文是专栏 计算机视觉40例简介 的第14个案例 指纹识别 该专栏简要介绍李立宗主编 计算机视觉40例 从入门到深度学习 OpenCV Python 一书的40个案例 目前 该书已经在电子工业出版社出版 大家可以在京东 淘宝 当当等平