我正在尝试检查大量指纹(100,000 个指纹)中是否存在/匹配指纹。按顺序搜索匹配项将花费更多时间。有没有更好的方法来搜索匹配?是否可以将指纹组织成二叉树结构以减少比较次数?如果是,我们该怎么做?如果答案是从 Java 角度来看的,那将会很有帮助。
编辑:
我所有的指纹都是 .gif 图像。如何将指纹图像转换为数据?
谢谢。
我正在尝试检查大量指纹(100,000 个指纹)中是否存在/匹配指纹。按顺序搜索匹配项将花费更多时间。有没有更好的方法来搜索匹配?是否可以将指纹组织成二叉树结构以减少比较次数?如果是,我们该怎么做?如果答案是从 Java 角度来看的,那将会很有帮助。
编辑:
我所有的指纹都是 .gif 图像。如何将指纹图像转换为数据?
谢谢。
1)您需要使用小波压缩算法按小波压缩参数的顺序对指纹进行编码:
0、-1、2.4、5.6.7.7、32.-1.5 等
2)你需要定义匹配函数,它会发现一些相似之处,有两种选择:
-几何方法(将象限与象限进行比较,所有场都通过某种空间算法以连续块间隔开)
优点:
硬件加速 (SSE) 像素匹配算法,使用仿射变换将所有指纹标准化为标准基础,fe 到正方形 512x512 px
缺点:
指纹质量的高灵敏度(如果搜索到的指纹的一部分完全省略)
-拓扑方法(线、弧、断点的连通性,相互定位)
优点:
对指纹的角度、位置和质量不敏感,可以使用原始图像的比例和方向;
缺点:
分析速度慢,高度依赖于分类函数的质量,
3)您需要定义某种遗传算法来在一组已知指纹上训练评估函数
您的知识系统将能够通过系统未知的给定样本找到指纹,但经过训练可以找到一些特定的差异/匹配,提高了成功搜索的概率,喜欢搜索时出现错误匹配的概率。
这不是我的专业领域(我是一名网络开发人员),但我认为你应该研究一下神经网络。我下载了一些演示代码,并做了一些字符识别实验。看到我设置的神经网络如何识别我在屏幕上绘制的字符,真是太神奇了。但在它能够做到这一点之前,它首先必须学习(反向传播学习)。
这是一个提供大纲的幻灯片: http ://www.slideshare.net/alessandrobaffa/fingerprints-recognition-using-neural-networks
最后一张幻灯片包含更多参考资料。
祝你好运!
/托马斯·卡恩
您不能只进行某种图像比较——有一些特定的方法可以分析和存储已经建立的指纹信息,例如,考虑到提取/扫描指纹的质量和存储的指纹数据的质量。
我搜索fingerprint encoding standard
并得出了几个有趣的结果,包括提到“各种指纹编码标准中的质量”的生物识别百科全书,以及一篇关于 FBI 图像编码标准的文章(除其他外)
我知道这个问题是 4 年前提出的,但是很多人正在查看它,对于观众来说,我认为我的回答可能会有所帮助。
提出了几个问题:- 1)有没有办法在大型数据库中尽可能快地搜索指纹匹配?
回答:是的 - 在匹配指纹之前,您缺少一个重要步骤。这个过程就是指纹分类,分为排他分类和连续分类。排他分类更容易实现,因为您识别指纹的一种模式,称为一个类别,并将其与数据库中属于同一类别的指纹进行比较。这是为加快指纹匹配所做的工作。
下面由 Peter kovesi 创建的链接提供了用于匹配的方向字段和细节提取的代码:- http://www.csse.uwa.edu.au/~pk/research/matlabfns/#fingerprints 奇异点检测和方向字段有助于识别类。它可以在链接上找到。
2)如何将指纹图像转换为数据?Ans: 好的,无论图像是什么格式,我都使用 tiff。你需要知道指纹是由脊和谷组成的。脊由较暗的线表示。您需要应用称为脊分割的方法来丢弃背景并仅提取脊。这存储在掩码中。
3)“现有图像和扫描的图像不会完全相似。这是我的问题”
Ans: 是否受噪声、旋转、平移等影响。降低噪声,使用增强技术。对于旋转,使用参考点并对齐指纹。
我知道这是一个简短的概述,但是我希望它可以为您指明正确的方向。祝你好运!
我无法评论完全 DIY 的最佳方法,但我确实在该领域拥有很多专业知识。所有大型(昂贵!)商业产品都有 2 种或更多算法来对较大的数据集进行指纹匹配。有一些使用指纹类(循环、螺纹等)进行一些预过滤,但通常指纹不能很好地索引,你必须以一种智能的方式强制它。这就是多种算法发挥作用的地方。
有几类算法可以进行非常快速的指纹比较(脊形),但很容易出错,因此它们本身不够准确,无法在合理大小的数据库上进行合理的识别。因此,这些算法通常部署为第一阶段。如果算法有任何疑问,它就会进入下一阶段。这可能是一些“中级”算法,例如光谱细节或“缓慢而准确”的算法,例如实际比较所有细节的算法。最终效果是二级阶段通常会纠正第一阶段的大多数错误接受。唯一不可恢复的损失是第一(和第二)阶段的错误拒绝。根据应用程序领域,这可以忽略不计或相当高。这是准确性和性能之间的权衡。在我们自己的测试环境中,我们已经看到以这种方式在单个(强大的)桌面上每秒比较超过 100.000.000 个指纹的速度,在大约 1 毫秒内解决了原始问题。然而,它是一个复杂、昂贵且非常专业的软件。
指纹匹配,如果您想要准确,最好使用几乎所有自动指纹匹配算法使用的经过验证的方法来完成。
提取细节点并将它们的位置和其他数据存储在模板中,然后使用两个模板内细节数据的相对定位的统计分析来计算两个模板匹配程度的分数。
使用这种技术通常需要考虑诸如手指在每次印象中被放置在指纹扫描仪上时的旋转和区域的差异。
生物识别算法并不完美,其性能是通过它们的错误接受率 (FAR) 和错误拒绝率 (FRR) 来衡量的。这两个措施彼此成反比,这意味着当您增加安全性(降低 FAR)时,您会增加 FRR。