问题
我需要匹配两个指纹,并给出相似的分数。
我以前发过一个similar question的帖子,但我认为我已经取得了足够的进步,可以提出一个新的问题。
输入
对于每个图像,我都有一个细节(重要点)列表。我想通过匹配这两个列表来匹配指纹。
当用图形表示时,它们看起来像这样:
algorithm - 基于细节的指纹匹配算法-LMLPHP
一个细节由一个三元组组成,其中:
(i, j, theta)是矩阵中的行
i是矩阵中的列
j是一个方向。我的匹配算法中还没有使用这个参数。
到目前为止我所做的
对于每个列表,找到“密集区域”或“簇”。有些领域比其他领域有更多的点,我已经写了一个算法来找到它们。如果你愿意的话,我可以进一步解释。
移动第二个列表以解释两个图像之间手指位置的差异我忽略了手指旋转的差异。移动是通过调整星团中心的重心来完成的。(它比所有细节的重心更可靠)
我试着为每个列表建立一个矩阵(post-shift),这样每一分钟对应的元素和它的近邻都会增加,如下所示。
theta
1 1 1 1 1 1 1
1 2 2 2 2 2 1
1 2 3 3 3 2 1
1 2 3 4 3 2 1
1 2 3 3 3 2 1
1 2 2 2 2 2 1
通过将两个矩阵相减,并将所得矩阵中所有元素的绝对值相加,我希望能得到接近指纹的低数值。
结果
我测试了一些指纹,发现簇的数量非常稳定。匹配的指纹通常具有相同数量的簇,不同的手指给出不同的数字。所以这肯定会成为整体相似性得分的一个因素。
然而,差异之和根本不起作用。相似性与总和之间没有相关性。
思想
我可能需要使用点的方向,但我还不知道怎么做
我可以使用点或簇的标准差。
我可以对不同类型的细节重复这个过程。现在,我的算法检测脊线端点和脊线分支,但也许我应该分别处理这些。
问题:如何改进算法?
编辑
我发布这个问题已经有很长的路要走了,下面是我的更新。
我完全放弃了分叉,因为我的细化算法经常会把它们弄糟不过,我最终还是用了很多角度。
在我进行的小规模测试中(我的手指和少数志愿者的手指的不同组合),我最初的聚类计算方法确实非常有效。
我根据下面的测试(10次测试,所以每次成功10%)给出分数。这有点天真,但我会找到更好的方法把这10个结果变成分数,因为每个测试都有其特殊性):
聚类(以下所有内容都不使用聚类,而是使用细节这是我唯一采取的与集群相关的方法)
平均1 1 1 1 1 1 1位置
平均角
i方差
i方差
角度变化
峰度
峰度
角峰度
j偏度
确实是一种统计方法。
同样的手指对比几乎总是在80%到100%之间。奇数指比较介于0和60%之间(不经常是60%)我这里没有确切的数字,所以我不会假装这是一个统计上显著的成功,但它似乎是一个很好的第一枪。

最佳答案

你的聚类方法很有意思,但有一件事我很好奇,那就是你测试得有多好。对于一个新的匹配算法,对于已经存在的所有研究和方法来说都是有用的,你需要有一个合理的低EER。你用标准数据库测试过你的方法吗?我怀疑集群计数和位置单独识别更大规模个体的能力。
1)指纹匹配是一个研究得很好的问题,有很多好的论文可以帮助您实现这一点。想要一个好的开始,请看这篇文章,"Fingerprint Minutiae Matching Based on the Local and Global Structures"由江和邱。这是一篇经典的论文,一个简短的阅读(只有4页),可以相当合理地实现。他们还定义了一个评分标准,可以用来量化两个指纹图像匹配的程度再说一遍,这应该只是一个起点,因为现在有很多算法性能更好。
2)如果你希望你的算法是健壮的,它应该考虑指纹在图像之间的转换。扫描的指纹和潜在的指纹在图像之间可能不一致。
此外,计算细节点的方向提供了处理指纹旋转的方法。通过测量细节点方向之间的角度,无论全局旋转如何,细节点方向在多个图像中保持相同或接近相同(尽管可能会出现小的不一致,因为皮肤不是刚性的,可能会轻微拉伸)你可以找到最佳的一组对应的细节对或三元组,并将它们用作旋转对齐的基础。
3)我建议你区分脊线末端和分叉。你能分离的特征越多,你就越能准确地判断指纹是否匹配。您还可以考虑每个细节点之间出现的脊线数量。
下图说明了江和邱使用的特征。
algorithm - 基于细节的指纹匹配算法-LMLPHP
d:细节点之间的欧氏距离
θ:节点方向间的角度测量
φ:全局细节点角
n:细节点i和j之间的脊线数
如果您还没有阅读Handbook of Fingerprint Recognition,我建议您阅读。

08-18 10:13