源码已经上传到github,https://github.com/charlesLucky/FingerRecognitionFromScratch.git
上图为上一步拿到的图像预处理之后的细化图。在这个基础之上我们进行下一步操作。
指纹特征提取的主要目的是计算指纹核心点(Core)和细节点(Minutia)的特征信息。在提取指纹核心点时,采用的是Poincare Index算法,该算法的思路是在指纹图像某像素点区域内,按围绕该点的闭合曲线逆时针方向旋转一周,计算方向角度旋转变化量的和,最后以计算结果来寻找核心点。计算过程中如果某像素点的Poincare Index值为π则判定为核心点,然后便提取该点的坐标与方向场信息,记为P(Cx, Cy, θc)。
对于指纹的细节点特征,在本设计中只要求提取指纹脊线端点(Ending)和脊线分叉(Bifurcation)两种细节点。在细化的指纹图像中,这两种细节点的形态如图2和图3所示:

在提取指纹细节点时,首先为细化图像中的每个像素点P建立一个8邻域像素区,如图4所示。其中P1~P8为像素点P周围的邻近环绕像素点。P1~P8中黑色点的值设为1,白色点的值设为0。

图4 8邻域像素图

根据Crossing Number (CN)理论,在8邻域像素图中按照公式1计算像素点的CN值。例如在图2和图3中,8领域像素区域内中心点的CN值分别为1和3。

最后按上述方法对细化指纹图像中的所有像素点进行CN值计算,当CN值为1时,可判定所检测的P点为脊线端点,当CN值为3时,则可判定P点为脊线分叉点。检测到细节点之后返回该点的坐标(x,y),并根据CN的值返回细节点的类型T,然后再读取该点的方向角θ。因此,在本算法中一个指纹细节点的具体特征最后用M(x, y, θ ,T)算子来表征。(请注意,代码中,以及下文没有除以2)

把找到的端点位置存储在txy(Nx3),第一列存储x的位置,第二列存储y的位置,第三列标识点的类别,如果为交叉点则值为6,如果端点则值为2.然后对纹线再次进行光滑处理。

%找出细化后图像的所有端点
%将一个点的八个邻域依次两两相减并取绝对值,并将所有结果相加,从细化图像的特征来说
%和为2时为端点 和为6时为交叉点
function txy=point(thin)
count=1;
txy(count,:)=[0,0,0];
%取行数和列数的最小值
siz=min(size(thin,1),size(thin,2))
for x=40:siz-40for y=40:siz-40if(thin(y,x))CN=0;for i=1:8CN=CN+abs(p(thin,y,x,i)-p(thin,y,x,i+1));endif (CN==2)txy(count,:)=[x,y,2];count=count+1;endif(CN==6)txy(count,:)=[x,y,6];count=count+1;endendend
endfor i=1:count-1x(i)=txy(i,1);y(i)=txy(i,2);
end
imshow(double(thin));
% hold on 通知后面将要绘图
hold on;
plot(x,y,'.');

找到每个端点,使其沿着纹线的方向移动五个像素,如果在五个像素之内遇到交叉点则此点为毛刺,去除此点。判断离端点num个距离内是否有另一个端点的函数为walk判断的主要方法先将该点置为0然后根据八领域点和;和为0或大于2则证明该点距离num内有端点,然后循环向前遍历。

function [w,pxy]=guanghua(thin,txy)
%纹线光滑处理.原理:找到每个端点,使其沿着纹线的方向移动5个像素,如果在5个像素之内遇到交叉点,则认为此端点为毛刺,,去除此点
for j=1:5txy=point(thin);%txy第三列为2的变为1 否则变为0pxy=txy(find(txy(:,3)==2),:);%求取行数n=size(pxy,1);for i=1:nerror=0;error=walk(thin,pxy(i,1),pxy(i,2),5);if error==1;thin(pxy(i,2),pxy(i,1))==0;endend
end
w=thin;
imshow(w);
%判断离端点num距离内是否有另一端点
function [error,a,b]=walk(thin,x0,y0,num)
error=0;
thin(x0,y0)=0;
t1=0;
for n=1:numif error==1breakelsex=x0;y=y0;%判断该点八邻域点和该点的和 来找出想要的点for x=x0-1:x0+1if error==1break;elsefor y=y0-1:y0+1t1=(sum(sum(thin(y0-1:y0+1,x0-1:x0+1))));%=0代表一个断点(独立的点) dayu2代表不是端点if(t1==0||t1>2)error=1;a=x0;b=y0;break;else% x,y还是y,xif (thin(y,x)==1&&(x-x0)^2+(y-y0)^2~=0)if(t1>2)error=1;break;else thin(y,x)=0;x0=x;y0=y;a=x0;b=y0;plot(x0,y0,'r.');endendendendendendend
end

光滑处理后的特征点比以前少了。但是我们采集指纹时由于采集器的关系,图像的边缘会有很多端点,这已然会影响后续的识别工作,所以我们需要在特征点中去除这些端点,cut函数主要做这些工作,边缘的主要特征就是黑色多白色少,也就是均值小,所以我主要里用灰度图的分区域(31*31)求均值如果灰度值小于70则在该区域的特征点去除,然后会得到更少的特征点.

%去除图像边缘的端点function txy=cut(thin,txy)
% thin=thin1;
% txy=txy1;
%声明一个8*8的矩阵
s(8,8)=0;
delta(8,8)=0;
n=size(txy,1);
for i=1:8for j=1:8%声明一个数组集合 m{1,2}=3   m=[] [3]
%          m{2,5}=6
%
% m =
%
%     [1,2,3]    [3]    []    []     []
%     []     []    []    []    [6]% 每次取31*31 先从上到下 再从做到右mp{i,j}=thin(1+31*(i-1):31+31*(i-1),1+31*(j-1):31+31*(j-1));s(i,j)=sum(sum(mp{i,j}))/(31*31);mp{i,j}=(mp{i,j}-s(i,j)).^2delta(i,j)=sum(sum(mp{i,j}));
%         边缘 黑色多 白色少if delta(i,j)<=70for k=1:nif (txy(k,1)>=1+31*(i-1)&&txy(k,1)<31+31*(i-1)&&txy(k,2)>=1+31*(j-1)&&txy(k,2)<=31+31*(j-1)&&txy(k,3)==2)txy(k,:)=[0,0,0];endendendend
end
% find()查询非零元素所在的位置
txy=txy(find(txy(:,1)),:);
plot(txy(:,1),txy(:,2),'ro');

但这些点依然不够少说明不够特殊,下面定义了combine(thin,r,txy,num)函数可以找出周围半径为r个像素的圆内没有任何端点和交叉点,沿纹线走num个距离没有交叉点和端点,comine为walk和single_point函数的综合,walk函数上面已经介绍,single_point函数主要是找出独特的点作为特征点,原理是根据两个端点之间的距离。求每个端点距离其他端点的距离,找取距离大于r的端点。执行完combine后会得到更少的端点(实验结果为3个端点)。

% 综合walk和single_point函数,通过执行[pxy3,error2]=combine(thin,r,txy,num)可以找出周围半径为r个像素的院内没有任何交叉点或端点,并且沿纹线走num个
% 距离内没有任何哟个交叉点或端点
function [pxy3,error2]=combine(thin,r,txy,num)
error=0;
[pxy2,error]=single_point(txy,r);
n=size(pxy2,1);
k=1;
erroe2=0;
for i=1:n[error,a,b]=walk(thin,pxy2(i,1),pxy2(i,2),num);if error~=1pxy3(k,1)=pxy2(i,1);pxy3(k,2)=pxy2(i,2);pxy3(k,3)=pxy2(i,3);k=k+1;error2=0;plot(pxy2(i,1),pxy2(i,2),'r+');end
end

指纹识别源代码(2)-特征点提取相关推荐

  1. 指纹识别源代码(1)-图像处理

    源码已经上传到github,https://github.com/charlesLucky/FingerRecognitionFromScratch.git 1.缩放处理 f=imread(image ...

  2. 【WAX云钱包】Cloudflare反爬虫突破(SSL指纹识别)

    WAX云钱包 在之前的多篇文章中,我们使用[Python]+[Selenium]来实现WAX链游脚本,主要是因为很多玩家一开始都是用WAX云钱包注册的账号,而WAX云钱包的私钥托管在云端,我们没法拿到 ...

  3. 墨奇科技汤林鹏:如何用 AI 技术颠覆指纹识别?

    受访者 | 墨奇科技联合创始人& CTO 汤林鹏 记者 | Aholiab,编辑 | Carol 出品 | AI科技大本营(ID:rgznai100) 随着深度学习等AI技术的成熟,生物识别成 ...

  4. 信息收集----CMS指纹识别

    一.什么是指纹识别 通过关键特征,识别出目标的CMS系统,服务器,开发语言,操作系统,CDN,WAF的类别版本等等 1.识别对象 1.CMS信息:比如Discuz,织梦,帝国CMS,PHPCMS,EC ...

  5. linux指纹登录实现原理,指纹识别技术原理与基于Linux系统的指纹识别门禁系统设计...

    指纹作为人体的身体特征,具有唯一性.稳定性和不易盗用等特点.随着指纹识别理论逐渐成熟.指纹采集工具这一难题得到解决,指纹识别已经成为目前最广泛应用的生物识别之一,逐渐取代了传统的认证识别方式,广泛应用 ...

  6. 信息收集域名、IP、端口服务、指纹识别相关信息

    信息收集域名.IP.端口服务.指纹识别.Googlehacking.目录信息.Githack相关信息 域名相关的信息 域名是什么 域名的分类 国际域名 国别域名 新顶级域名 域名联系人信息 whois ...

  7. 【指纹识别】指纹预处理+特征点提取【含GUI Matlab源码 1693期】

    ⛄一.指纹识别简介 0 引言 随着社会的发展,钥匙.证件.银行卡以及用户名密码等这些鉴定身份的标志性物品和标识的安全性越来越弱,很容易被伪造.被盗用.不小心丢失等,给人们带来了极大的困扰,如何才能更好 ...

  8. 指纹识别研究(一) 指纹的三级特征

    本文部分内容摘自书籍 Handbook of fingerprint recognition P111-P115 大多数指纹识别和分类算法都采用特征提取阶段来识别显著特征. 从指纹图像中提取的特征通常 ...

  9. python提取个十百千位数字_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...

    之前写过一篇关于实现人脸识别的文章, Z先生点记:Pyqt5 + 百度 API 打造一个图像人脸识别.分割的小程序​zhuanlan.zhihu.com 里面用到的技术是通过调用百度 API 实现的, ...

最新文章

  1. PDD面试题:new一个对象的过程中发生了什么?
  2. Keil精确测量代码运行时间
  3. Sympy计算结果带参数的方程组
  4. redis哈希表的rehash分析
  5. c++ 一维高斯拟合_χ2检验教案:拟合度检验与正态分布的关系
  6. server is DOWN now, please try again later!
  7. verycd下载资源
  8. 机器学习算法------6.4 模型评估(误差平方和、肘方法、轮廓系数法、CH系数)
  9. 安卓6.0系统一键激活XPOSED框架的方法
  10. 如何选择自己心仪的U盘
  11. 廊坊圣洁口去医院明星同款·隐形矫正试戴会圆满举办!
  12. efi模式装linux双系统,超详细!Win10(UEFI启动模式)安装Ubuntu18.04双系统
  13. 奥威软件大数据bi_2018中国大数据BI领域影响力企业 奥威实至名归
  14. idea easyYapi插件导入yapi接口使用及踩坑记录
  15. php网页视频播放插件下载_视频播放插件Video.js
  16. 创建自定义类型转换器
  17. 报错:java.net.bindexception: address already in use: jvm_bind:8082
  18. 洛天依 Chrome 主题
  19. CSS笔记 (参考很多文章 非原创)
  20. 记录我的缺点、优点、记录生活方式,总结并不断优化自己

热门文章

  1. linux 微信开发工具报错:System limit for number of file watchers reached, watch
  2. Debian\Ubuntu 系统中安装 Window10 字体
  3. my.cnf配置调优选项解读
  4. xshell的vbS脚本
  5. Docker实战教程
  6. 蓝桥杯「贪心的自助餐」
  7. 乔布斯4大经营理念:不纠结于错误 创意需要时间
  8. Ajax onreadystatechange事件
  9. 用免费开放的华为安全检测功能,评估App运行设备安全
  10. 矿工和投资方大规模逃离熊市?不,他们甚至找到了“一线生机”