指纹特征提取及描述(附Python代码)

首发juejin.cn/post/692430…,转载注明出处

GitHub

github.com/KinghooWei/…

开宗明义啦,github是干什么的记得star一下

毕竟作用图

指纹特征提取及描绘(附Python代码)

规划思路

项目的编程环境为python3.7.7,编译器运用pycharm2019.3.4 x64。首先为项目规划一个GUI界面,界面有四个按钮,分别是“挑选图片”、“图画增强”、“细化”和“特征提取及描绘”,运用是按次第点击按钮即可,每结束一步,都会在python基础教程按钮下方闪现处理结果,github喵绅士毕竟的特征python软件描绘会在右下的文本框中闪现。

图画增强

  • 图画归一化

github是干什么的为不同的指纹图画在灰度图散布上有很大的差异,会给之后的图画特征提取和匹配添加难度,因而指纹图画要进行归一化处理,将全部图画转换成具有给定均值和方差giti轮胎是什么品牌的规范图画。归一化并不能改动指纹的脊线和谷线的明晰程度,其结果是减少了不同指纹图画之间灰度值的差python123异,并github源码为接下来的图画处理做好准备。归一化公式如下:

G(i,j)={M0+02(I(i,j)−M)22I(i,j)>MM0−02(I(i,j)−M)22I(i,j)≤MG_{left(i,jright)}=left{ begin{al算法工程师需求把握什么igned} &M_0+sqrt{frac{sigma_0^2(I(i,j)-M)^2}{sigma^2}} &I(i,j)>M &M_0-sqrt{frac{sigma_0^2(I(i,j)-M)^2}{sigma^2}} &I(i,j)le M end{aligned}github官网 right.

式中I(i,j)Ileft(i,jright)G(i,j)G_{left(i,jright)}分别为规格化前后的图画,M0M_002sigmgiti轮胎是什么品牌a_0^2是预github源码先设定的图画均匀灰度和均方差,MM2sigmpython怎样读a^2为原图画的灰度均值和方差。

  • 方向场预算

方向场反映了指纹图画上纹线的方向,其准确性giti轮胎是什么品牌直接影响图画增强的作用。依据纹线方向在部分区域内底子共同的特征,先把指纹图画分块,然后核算每一个子块的纹线方向,最后用gitlab该方向代表对应子块内各个像素的方向。用这种办法来求指纹方向场功率较高且不算法统宗易受少算法工程师学什么专业量的图画噪声影响,具体算法如下:

  1. 把归一化图画分红161616times16的像素块,然后使用Sobel算子核算块中每个像Git素点水平方向上gitee的梯度值∂x(u,)partial xleft(u,nurgithub喵绅士ight)和笔直方向上的梯度值∂y(u,v)part算法ial yleft(u,vright)

  2. 核算中心点为(i,j)left(i,jright)的边长为w的子块的脊线方向角(i,j)thetaleft(i,jright),公式如下:

Vx(github怎样读i,j)=∑u=i−w2i+w2∑v=i−w2i+w22∂x(u,)∂y(u,v)V_xleft(i,jrighPythont)=sum_{u=i-frac{w}{2}}^{i+frac{w}{2}}sum_{v=i-frac{w}{2}giti轮胎是什么品牌}^{i+frac{w}{2}}2partial xleft(u,nurigit命令ght)partial yleft(u,vright)
Vy(i,j)=∑u=i−w2i+w2∑v=i−w2i+w2∂x2(u,)算法工程师需求把握什么∂y2(u,v)V_yleft(i,jright)=sum_{u=i-frac{w}{2}}^{i+frac{w}{2}}sum_{v=i-frac{w}{2}}^{i+frac{w}{2}}{partial x^2left(upython是什么意思,nuright)partial y^2github源码left(u,vright)}
(i,j)=12tan⁡−1(vy(i,j)vx(igithub中文官网,j))thetaleft(i,jright)=frac{1}{2}tan^{-1}{left(frac{v_yleft(i,jrightgithub下载)}{v_xl算法开始eft(i,jright)}right)}
指纹特征提取及描绘(附Python代码)

指纹github源码图画的方向场

  • 频率场预算

在指纹图画的部分非独特区域里,沿着笔直于脊线的方向看,指纹脊线和谷线像素点灰度值大致构成一个二维的正弦python基础教程波,界说纹线频率为相邻的两个波峰或波谷之间的像素点数的倒数。求取这些互不堆叠的部分区域的频率值,按各区域方位组成一个场结构,称为指纹的github是干什么的频率场。设NN标明规格化后的图画,OO是指纹方向场,算法如下:

在所得方向场的基础上,沿其笔直方向投影每一块全部像素的灰度值gitlab,该投影构成一维正弦波,其极值点对应指纹的脊线和谷线。假定T(i,j)Tleft(i,jright)作为上述一维正弦波两相邻峰值之间的均匀像素数,则频率F(i,j)=1T(i,j)Fleft(i,jright)=frac{1}{Tleft(i,jright)}

  • gabor滤波

一旦指纹图画的方向场和频率场确认,这些参数算法算法的有穷性是指以用来结构偶对称Gabor滤波器。Gabor滤github官网波器是具有方向挑选特性和频率挑选特性的带通滤波器github官网,并且能够到达时域和频域的最佳结合。偶对称的Gabor滤波器在空间域中具有下面的方式:

G(x,y,,f)=exp⁡{−12(x2x2+y2y2)}cos⁡(2fx)Gleft(x,y,thepython软件ta,fright)=exp{left{-frac{1}{python怎样读2}left(frac{x_theta^2}{sigma_x^2}+frac{y_theta^2}{sigma y^2}rigpython能够做什么作业htpython怎样读)right}}cos{left(2pi f x_thetaright)}
x=xcos+ysinx_theta=xcosGittheta+ysintgiti轮胎是什么品牌heta
x=−xcos+ysinx_theta=-算法xcostheta+ysintheta

式中,theta是滤波器的方向,ff是脊线的频率,[x,y]left[x_theta,y_thetaright]标明坐标轴[x,y]left[x,yright]逆时针旋转角度thetaxsgitvigma_x,和ypython123sigma_y,分别是沿着x和y轴的高斯包络常量。

指纹特征提取及描绘(附Python代码)

原图和图画增强后的作用图

骨架提取

图画骨架提取python能够做什么作业,实际上就是提取政策在图画上的中心像素归纳,以政策中心为准,对政策进行细化。一般github官网细化后的政策都是单层像python为什么叫爬虫素宽度。细化是从本来的图中去掉一些点,但仍要坚持本来的形状。实际上是坚持原图的骨架。判别一github中文官网个点P是否能去掉是以8个相邻点的状况来作为判据的,具体判据为:

  • 内部点不能删去

  • 孤立点不能删去

  • 端点不能删去

  • 假定P是边界点,去掉P后,假定连通分量不添加,则P可删去

指纹特征提取及描绘(附Python代码)

骨架提取

指纹特算法统宗征提取和标明

本次项目选取的特征python怎样读是指纹图画的端点和分叉点,特征描绘为特征点地址的方位和脊线在算法特征点处的切python软件线斜率,其间,方位为特征点在图画中的横坐标和纵坐标,端点的切线斜率有1个,分叉点的切github官网线斜率有3个。

  • 端点

若骨架提取后的二值图画Python的点(i,j)left(i,jright)为黑色像素,且其八领域有且只Git有一个黑色像素github永久回家地址mi,其他7个为白色像素,则点(i,j)left(i,jright)为端点,端点特征的提取和标明算法如下:

  1. 按上述界说遍历骨架提取后的二值图画的像素点,寻觅全部符合界说的端点;

  2. 除掉指纹github图画边缘的端点,因为收集的指纹存在边python能够做什么作业沿,边缘的端点不能视为指纹的端点,需求予以除掉。办法是看进程1得到的端点地址的行和列的某一侧是否全为白色像素,是的话判别为边缘,予以除掉,否则判别为内部端点,予以保存;

  3. 沿着端算法工程师(giticomforti,j)left(i,jright)地址的脊线,寻觅距离git命令端点距离4个像素点的点(u,python123v)left(u,vright),若5步之内脊线开裂或遇到分叉点算法工程师,则将该端点(i,j)left(i,jright)除掉,该进程用于除掉孤立点,并为核算端点的算法工程师学什么专业切线github是干什么的斜率做准备;

  4. 由进程3得到的端点(i,j)left(i,jright)和距离4个像素点的点(u,v)left(u,vright),核算脊python开发要学哪些线的切线斜率,公giti轮胎是什么品牌式如下:

(i,j)={2算法导论i=u,j>v−2i=u,j<vtan−1gitlab(i−uv−j)i≠uthetaleft(i,jright)=left{ begin{aligned} &frac{pi}{2} & i&=u,j>v &-frac{pi}{2} &python是什么意思 i&=u,j<v &tan^{-1}(fragit命令c{i-u}{v-j}) & i&ne u end{aligned} right.
  • 分叉点

若骨架提取后的二值gitv图画的点(python培训班膏火一般多少i,j)left(i,python开发要学哪些jright)为黑色像素,且其八领域有3个黑色像素,其他5个为白色像素,则点(i,j)lpython为什么叫爬虫eft(i,jright)为端点,端点特征的提取和标明算算法与数据结构法如下:

  1. 按上述界说遍历骨架提取后的二值图画的像素点,寻觅全部符合界说的分叉点;

  2. 依照进程1有些分叉点在像素级别上能得到2个相互挨近的点,需求除掉其间一个。如我们得到下图2个分叉gitee点,在微观上其实是同一个。项目中除掉原则是邻域黑像素相互挨近的分叉点,所以下图除掉掉第一个,保存第二个;

指纹特征提取及描绘(附Python代码)指纹特征提取及描绘(附Python代码)

像素级别上相互挨近的两个分叉点

  1. 沿着端点(i,j)left(i,jright)地址的3条脊线,分别寻觅距离端点距离4个像素点的3个点(u,v)left(u,vright),若5步之内脊线开裂或遇到分叉点,则将该端点(i,j)left(i,jright)除掉,为核算端点的切线斜率做准备;算法工程师需求把握什么

  2. 由进程3得到的端点(i,j)left(i,jright)和距离4个像素点的3个点(u,v)Pythonleft(u,vPythonright),核算分叉点的3条脊线的切线斜率,公式如下:

(i,j)github官网={2i=u,j&github官网gt;v−2i=u,j<vtan−1(i−uv−j)i≠uthetaleft(i,jgithub是干什么的right)=le算法是什么ft{ begin{aligned} &frac{pi}{2} &amgitip; i&=upython软件,j>v &-frac{pi}{2} &amppython基础教程; i&=u,j<v &tan^{-1}(frac{i-u}{v-j}) & i&ne u end{aligned} right.
指纹特征提取及描绘(附Python代码)

指纹图画的特征提取及描绘

参考

python 简略图画处理(16) 图画的细化(骨架抽取)

基于算法导论Gabor滤波器的指纹图画增强

指纹增强算法的研讨

指纹识别源代码(算法是什么2)-特征点提取