指纹方向场估计

        指纹识别作为比较常见的应用,我们每个人都可能使用过。在指纹配准过程中一般都要经过图像预处理,特征提取,特征匹配的过程。尤其在图像预处理的过程相当重要,它影响到后面的特征提取,进而影响到特征比对的效果。然而,图像预处理最重要的一个步骤就是方向图的计算,得出方向图后,增强,二值化,特征点的方向计算,匹配等等都要用到,因此如何提取指纹图相当重要。

       计算指纹方向,第一步是想到角度,怎么计算角度,很容易想到计算角度的公式:

\tan \alpha = dy/dx;

\alpha= \arctan\left ( dy/dx \right );

        那么,在图像中如何计算某个点角度?就是计算梯度,dy代表竖直方向的梯度,dx代表水平方向的梯度,举例(只是简单表明意思):dx=b-a; dy=c-a;

a b
c

        然后就一个点计算梯度方向,很不准确。原因主要是指纹纹理的频率的特性,一般指纹脊的的宽度约为7~18个像素(500dpi),因此,我们计算的的角度,最好包含一个谷和一个脊线的宽度,这里取w=32作为参考值,即要通过w*w区域内的像素值的梯度来估计指纹的方向。那么,如何计算块内的方向呢,想到用这个块内的水平方向和竖直方向的梯度和(\sum dx,\sum dy\sin \alpha)计算,但是,存在梯度抵消的可能(其他文章看到,可以探讨),而且感觉也不准。还有其他什么方法呢?        

        在这里,想到正切函数的二倍角公式:

        \tan \left ( 2\alpha \right )=\frac{2\tan \alpha }{1-\tan^{2} \alpha}=\frac{2\sin \alpha \cos \alpha }{\cos ^{2}\alpha -\sin ^{2}\alpha }

        是不是发现,\sin \alpha\cos \alpha就是图像中对应的竖直方向的dy和dx,(公式中的斜边可以约去),由于我们计算的是通过区域内的像素梯度(一般使用sobel算子,这里不过多叙述)计算方向,因此公式中的都是累计值。设x,y为w*w的中心点,则

指纹方向场估计_第1张图片

         因此,可以得出公式:

\alpha (x,y)=\frac{1}{2}\tan^{-1}(\frac{G\: xy(x,y))}{G\, xx(x,y)-G\: yy(x,y)))})

         此时,计算的是梯度的方向,指纹的纹线方向是与梯度方向互相垂直的,因此加上90度,最终,公式如下:

\alpha (x,y)=\frac{1}{2}\tan^{-1}(\frac{G\: xy(x,y))}{G\, xx(x,y)-G\: yy(x,y)))})+90^{^{\circ} }

        到此,看着这个公式比较熟悉,很多论文都有提到,我这样简单的理解,哪里不足或者表述不清的,可以互相探讨学习。

你可能感兴趣的:(指纹识别,人工智能,深度学习,视觉检测,计算机视觉)