一、摘要
潜指纹的匹配是一个非常重要但未解决的问题。作为潜指纹匹配的一个关键步骤,潜指纹配准的性能对最终匹配结果影响显著。当下的潜指纹配准算法主要是基于建立指纹潜指纹和数据库指纹的细节点(或者关键点,minutiae)之间的联系的方法,当指纹面积较小或质量较差等因素导致提取出来的关键点较少时,这种方法自然很难取得好的效果。故指纹细节特征的提取成为了潜指纹配准的瓶颈。
本文提出了一种基于非细节点特征的指纹配准算法,通过对一对latent-rolled指纹图像进行密集的块对齐以及匹配,实现这组指纹空间变换参数的估计。对输入的一对指纹图像,我们绕过了细节点的提取,而是直接使用均匀密集采样点作为关键点。然后利用本文提出的块对齐和匹配算法,来比较latent和rolled指纹的所有采样点对,估计出各个组合的相似度以及对应块对的对齐参数。最后,利用频谱聚类求出一个由两个指纹图像相互匹配的关键点对组成的关键点集合,即完成了整个配准过程。
在NIST27和MOLF两个数据集进行的大量实验展示了本文提出的方法可以获得sota的效果,尤其是在潜指纹质量非常具有挑战的情况下。
二、介绍与相关研究
对潜指纹匹配及相关术语的介绍见另一篇博客。
为了克服(由指纹面积过小或在质量很差等造成的)提取出的minutia过少造成的匹配效果不佳,Cao等提出使用均匀密集采样点(即所谓的“虚拟细节点”)来进行前指纹识别的方法。虚拟细节点即均匀密集采样得到的点,同细节点的定义一样,虚拟细节点也具备方向信息,其方向由局部区域的岭方向(ridge orientation)给出。对于细节点较少的情况,Cao等方法用虚拟细节点来代替细节点,然后利用和普通细节点相同的过程来完成特征提取-匹配的过程。该方法一定程度上解决了minutia过少导致匹配不佳的问题,但是受到不稳定的局部岭方向预测的影响,而岭方向预测不佳的问题在潜指纹中非常常见,错误的虚拟细节点方向会导致后续提取的minutiae-based descriptor性能不佳,进而影响匹配效果。
常见指纹配准算法的工作流程:
-
提取特征点:
- Minutiae最为重要,但是相对稀疏,且特殊情况下无法准确提取
- Level 3特征点,如pore、岭轮廓点,可以提升性能但是同样不适用于低质量输入情况。
- Virtual minutiae,密集采样点以模拟minutiae,解决minutiae稀疏的问题,但是virtual minutiae的方向估计比较不稳定,易影响后续descriptor性能。
-
descriptor:用于判断两个关键点是否匹配
- Image based:利用图像的灰度信息
- texture based:利用岭方向等信息
- Minutiae based:利用minutiae等关键点得到邻域,再进行特征提取
配准:利用一组相互匹配的关键点,进行图像配准
本文算法的流程
分别在latent/rolled指纹图像中按照预设采样间隔,进行均匀密集采样,得到的无向采样点(与之对比,Cao等方法使用的是有向virtual minutiae)。抛弃传统的minutiae-based特征提取流程,使用采样点作为关键点,避免了minutiae提取不准确的问题。
在latent/rolled 指纹中,以成对采样点为中心的局部图像块对作为孪生网络的输入,通过网络并估计出空间变换参数,利用该参数将latent向rolled指纹对齐。对对齐后的小块分别提取深度特征并计算两特征之间的距离,来代表该组latent-rolled指纹图像中当前比较的两个关键点的相似度。
将2中以贪婪方式计算出的所有latent-rolled采样点对点的相似度数值与预设的阈值进行比较,得到一个潜在匹配对(potential correspondences)构成的集合。然后利用“spectral clustering based global patch matching”找到最终匹配的关键点集合。具体做法是:对潜在配对点中的每一组,首先利用2中估计点转换参数对latent中的采样点位置进行调整。然后选择N组调整之后的关键点对作为配准使用的初始匹配点。
上述1-3的完整流程作为一次registration。通过改变1中的采样密度和2中的比较策略和空间转换的范围,作者“重复”了两次1-3的流程,即所谓的coarse-to-fine framework,其中第二次流程中的精确配准使用的输入是第一次粗配准之后的结果。
本文涉及到的技术非常多,这里进行一下整理:
- FingerNet可以用于对输入的rolled fingerprint,预测出1⃣️ROI2⃣️minutiae3⃣️ridge orientation images,看起来相当强大。不过FingerNet可能对latent效果不是很好。故本文中latent的ROI需要使用专家手动标记的结果,不过latent和rolled的orientation field都是用FingerNet提取出来的。
- 使用孪生网络来输入成对的latent-rolled image patch,提取特征并估计出两个输入的空间转换参数。
- 使用多任务学习的思想,在网络中加入Orientation map的额外监督来辅助网络对特征的学习,让网络提取到的特征更加关注类似于骨骼的信息,而非content信息。
- 使用VeriFinger来估计rolled指纹图像中指纹中心所在位置
- 使用CycleGAN完成从rolled到latent的风格迁移
本文在训练过程中用到了一些技巧,也值得学习:
- 在3.B部分构建spatial transform训练数据时,加入一些并非真实输入情况(即 (, ) )但是更容易训练的样本,以辅助模型训练。
- 在3.C部分训练时先使用minutiae-based dataset从头训,因为minutiae更容易获得准确的关键点匹配对;再用sampling point-based dataset来finetune,提升泛化性能。
- 在3.C部分加入distance较小但是并不匹配的latent-rolled 数据对(即negative pairs),来实现onine hard negative sampling机制。
三、论文方法细节
这里记录下本文提出的配准算法各个流程细节。
3.a 整体框架
本文整体上采取了一个coarse-to-fine framework,即对相同的配准流程重复两次,第二次采用不同的采样密度和间隔、不同的比较范围及一些阈值等,实现对精度的提高和计算量的控制。
比如,在第二次精细配准的流程中,latent和rolled的采样间隔分别由32x32和64x64改成了均为16x16,且在比较每一组image patch时,对于latent的每一个采样点,只与其在rolled patch中对应那个采样点所在邻域内的所有采样点进行比较,而不是像粗配准中需要比较rolled patch上的所有采样点。
3.b 局部图像块对齐
对于minutiae-based方法,如果能够分别提取到rolled和latent的minutiae关键点,则可以认为对于latent中的每个minutiae,一定有一个rolled中的minutiae与之对应。不过对于本文提出的方法,由于初始阶段关键点是均匀采样所得,故对于latent中的每个采样点,其在rolled中对应的那个点可能并不算任何一个rolled上的采样点,而是在几个采样点中间的某个位置。
故为了找到最终的匹配点对,可以想到我们需要对latent(或rolled上也可以)的每个采样点的位置,根据其在rolled patch中最接近的那个采样点的位置,进行一些调整。然而一开始我们并不知道latent上每个采样点和rolled上的哪个采样点更接近。所以需要比较latent上每个采样点和rolled上所有采样点的相似程度。
而为了比较latent/rolled上一组采样点的相似程度,一种合理的做法是比较以这两个采样点为中心的邻域的相似程度。然而由于两个指纹图像一开始角度之类的并不一定都处于摆正状态,所以比较patch相似度之前最好把两个patch做一个align,以抵消由角度和平移等带来的差异,进而最大程度上比较两个patch ridge的差异。
为了完成这个对齐,只需要找到从latent patch到每个rolled patch的spatial transform parameter即可。作者这里应该是假设了两个patch之间是刚性变换的关系,故从latent patch到rolled patch之间的转换由平移和旋转完全确定。故对于网络输入的一组patch,只需要通过网络预测出latent相对于rolled patch的旋转和平移即可。这部分的网络结构如下:
对于两个输入patch,首先分别被送入特征提取模块,该模块的两个分支分别输出特征图以及上采样之后预测的orientation field map信息。其中后者通过监督影响前者的学习,引导网络更加关注ridge相关的纹理信息而不是图像块的颜色、亮度等信息,因为作者强调了自己并没有对image patch预先进行enhancement,故这些patch其实存在的差异没有得到任何normalize。
然后两个patch对应的特征被送入一个matching layer,回归出一个correlation map,值得注意的是这个matching layer的名字有点混淆,我之前一直以为这个layer要负责预测两个patch的match程度,即某种相似度。实际上这个matching layer只是为了整合两个patch的feature然后输出一个中间的correlation map用于预测包含旋转、平移信息的输出向量(这里的形式是一个长度为3的向量,分别代表水平/竖直平移量和相对选择角度。这个matching layer的细节暂时还不知道,也得查看参考文献29。
为了让这部分网络能够学习到一组输入patch的相对空间转换关系,我们需要两种监督的label:
latent和rolled patch各自的ridge orientation map。这个信息由FingerNet预测而得。
latent patch关于rolled patch的选择和平移参数。这个label的获取稍微有些麻烦:首先利用MCC descriptor与频谱聚类完成两个真实配对的latent和rolled图像(不是patch,而是完整的指纹图像)中的匹配minutiae检测(注意训练中未用minutiae,但是利用第三方方法配准时还是要用),进而完成图像配准。匹配的minutiae点可以进一步通过TPS模型,估计出distortion field,不过这一步暂时没用到,只是做了大图的配准。然后对配准之后的图像对随机cut出成对的160x160的patch。这里作者应该是认为大图配准之后,其每一个图像patch也相当于是aligned。然后对每组patch I_A和I_B进行随机旋转平移得到I_\hat{A}和I_\hat{B},这样就simulate出了用于训练上述网络的训练数据对。值得注意的是作者在构建数据时是将(I_A, I_\hat{B})以及(I_A, I_\hat{A})均作为training pairs,后者由于来自同一个patch,可以使得网络在学习预测空间关系时更加容易一些。
在预测出一组patch的转换参数之后,可以对latent patch apply这个transfrom进而将其与rolled patch对齐。对齐之后就可以比较这两个patch的相似程度,进而代表latent和rolled当前比较的这一组采样点之间的匹配程度。作者这里的做法是通过比较两个patch对应的deep descriptor之间的距离,输出这个相似度得分。从输入到align到matching(即计算匹配程度)的整体流程如下图:
3.c 局部图像块匹配
作者在论文图6中给出了特征提取网络,即上图中Deep descriptor部分的结构细节。看起来和图5的特征提取模块非常接近,甚至感觉有些冗余。
同3.b一样,3.c中的网络为了预测出patch 特征之间的相似度,需要相应的label:
latent和rolled patch各自的ridge orientation map,同3.b
同3.b一样,也是需要先对真正配对的一组latent和rolled大图进行配准,配准过程需要输出两个信息:1⃣️ROI;2⃣️distortion field(由TPS模型预测出),然后可以再记录下3⃣️获取该ROI所用rolled指纹的纹理中心点位置。(1⃣️,2⃣️,3⃣️)组成了一个仿真模板,可以作用于任一个rolled指纹图像,来产生一个simulated latent。具体针对给定的一个rolled图像,simulation过程如下:
用ROI在rolled指纹图像中crop出一块区域,作为模拟的latent指纹区域的初始结果。注意保持模板的中心于rolled指纹的纹理中心先对齐,这样可以保证crop的roi均包含纹理中心,质量更好一些。
然后对这块crop出的区域apply distortion field得到一个新的latent。此时生成的指纹在纹理方面就已经确定下来了,但是其外观(灰度级别等)和rolled一样。故作者通过CycleGAN(训练时用成对的配准后的latent和rolled指纹图像)对其外观进行改变,以模拟latent的外观。
总结一下,在3.c的latent simulation中,作者从任意rolled fingerprint出发,通过ROI对latent的不完整性进行仿真;通过distortion field对distortion进行仿真;通过CycleGAN对latent的style进行仿真,最终得到质量较好的simulated latent。数据集仿真部分的流程见下方:
3.d 全局块匹配
- 根据3.c得到的所有similarities与阈值进行比较,得到potential sampling point correspondences
- 利用3.b中计算出的每个latent patch - rolled patch的变换参数,对latent上的采样点位置逐一进行调整。然后按照相似度排序选出前N组调整后的采样点对,作为initial correspondences.
- 通过二阶图匹配的方法,取出错误的采样点对。
四、问题记录
- Deep descriptor模块主要功能是输出两个image patch的similarity。那么该模块中使用的监督是什么?是两个模块是否为mated?
- 在构建训练数据时,作者说只有一组图像块的公共前景区域大于阈值,才会被保留。如何求两个不规则ROI mask的公共区域?
- 为什么在使用Orientation map的监督时,不直接用latent/rolled的原始ridge orientation map(记作O)而是要用[sin(2O), cos(2O)]作为label?
- 为什么从latent patch到rolled patch的spatial transform由旋转和平移就可以确定?如果这两者之间并不是刚性变换,比如是similarity transform,或者甚至存在畸变,会不会影响patch alignment的性能呢?
- correlation layer(或者matching layer)中的网络细节是什么?为什么作者说correlation layer也计算了两个patch feature之间的相似度指标,这个相似度用在哪里?
- TPS模型估计出的是配准之后latent和rolled之间的distortion field还是配准之前的?TPS可否扩展到一般的图像对中用于求相对畸变关系?
- Global matching中从initial correspondences到最终的correspondences,主要需要做什么?