[0109] 2.计算块方向图特征,方法如下:
[0110] 块四方向 块四方向图如图7所示;
[0111] 方向图1:
[0112] 结构元素:
[0113] diag1=diag1Θse;使用se对diag1进行腐蚀,腐蚀后方向图1如图8(a)所示;
[0114] 如果连通分量中像素的数目n1大于5时,计算连通分量质心的8方向位置pos8,方法是:
[0115] xi,yi为像素(即块)的坐标;
[0116]
[0117] 同理计算方向图2、方向图3、方向图4;
[0118] 方向图2: 使用se对diag2进行腐蚀,腐蚀后方向图2如图8(b)所示,方向图2块数n2=2;
[0119] 方向图3: 使用se对diag3进行腐蚀,腐蚀后方向图3如图8(c)所示,方向3块数n3=2(连通分量中像素的数目n小于等于4时不算);
[0120] 方向图4: 使用se对diag4进行腐蚀,腐蚀后方向图4如图8(d)所示,方向图2块数n4=2。
[0121] 3.生成特征数组feature:
[0122] feature(k,1)=n1;feature(k,2)=n2;feature(k,3)=n3;feature(k,4)=n4;
[0123] feature(k,14)=指纹类型(1~5);第5~13列存放各块质心的8方向位置;
[0124] k为训练指纹编号;
[0125] 4.生成4方向块数数据库class_dire_num,方法如下:
[0126] 取特征数组feature第1~4列,第14列,生成数组class_dire_num(共5列);
[0127] 删除数组class_dire_num重复行;
[0128] 删除数组class_dire_num第1~4列相同,但第5列不同的行。
[0129] 5.生成方向块4方向位置数据库class_dire4,方法如下:
[0130] 复制特征数组:class_dire4=feature;
[0131] 删除按4方向块数可以分类的行,方法是删除class_dire4中第1~4列与4方向块数数据库class_dire_num各行中第1~4列相同的行;
[0132] 计算方向块4方向位置,方法是对class_dire4中第5~13列数值pos8进行变换:
[0133] 删除数组:class_dire4重复行;
[0134] 删除数组class_dire4第1~13相同,但第14列不同的行。
[0135] 6.生成方向块8方向位置数据库class_dire8及无法判定数据库cantjudge,方法如下:
[0136] 复制特征数组:class_dire8=feature;
[0137] 删除按4方向块数可以分类的行,方法是删除class_dire8中第1~4列与4方向块数数据库class_dire_num各行中第1~4列相同的行;
[0138] 删除按4方向位置可以分类的行,方法是:
[0139] class_dire8中第5~13列数值pos8进行变换: 存入临时数组class_dire8_temp中;
[0140] 记录临时数组class_dire8_temp中第1~13列与方向块4方向位置数据库class_dire4各行中第1~13列相同的行的行号id;
[0141] 删除class_dire 8中行号为id的行;
[0142] 删除数组:class_dire8重复行;
[0143] 复制数组:cantjudge=class_dire8;
[0144] 删除数组class_dire8第1~13相同,但第14列不同的行,得到方向块8方向位置数据库class_dire8。
[0145] 数组cantjudge去掉class_dire8含有的行,得到无法判定数据库cantjudge。
[0146] 测试过程如下:
[0147] 1.对测试指纹进行预处理,计算块方向图特征(4方向块数、方向块8方向位置),方法同训练过程步骤1,步骤2;
[0148] 2.根据4方向块数n1,n2,n3,n4搜索4方向块数数据库class_dire_num第1~4列,如果找到,输出该行第5列,即指纹类型,测试结束,否则执行步骤3;
[0149] 3.将方向块8方向位置pos8进行变换: 根据4方向块数n1,n2,n3,n4及方向块4方向位置pos4,搜索方向块4方向位置数据库class_dire4第1~13列,如果找到,输出该行第14列,即指纹类型,测试结束,否则执行步骤4;
[0150] 4.根据4方向块数n1,n2,n3,n4及方向块8方向位置pos8,搜索方向块8方向位置数据库class_dire8第1~13列,如果找到,输出该行第14列,即指纹类型,测试结束,否则执行步骤5;
[0151] 5.根据4方向块数n1,n2,n3,n4及方向块8方向位置pos8,搜索无法判定数据库cantjudge如果找到若干行,将所在行第14列存入类型数组lx中,否则记类型数组lx(1)=0;
[0152] 6.寻找奇异点,记录奇异点所在块位置和个数,方法是:
[0153] a.奇异点中心点个数singularcore和三角点个数singulardelta初始化为0;
[0154] b.对指纹块方向图dirbo中的除图像边缘(第一行,最后一行,第一列,最后一列)外的每一个方块,计算方向旋转的变化量总和Poincare(如图11(a)示):
[0155] △dk=dk-d(k+1)mod8,k=0,1……7;
[0156] 如果△dk≥90,△dk=△dk-180;
[0157] 如果△dk≤-90,△dk=△dk+180;
[0158]
[0159] c.如果块(i,j)、块(i-1,j),块(i-1,j-1),块(i,j-1)的Poincare值均为180,块(i,j)是前景块,且其3×3邻域有5块以上是前景块,中心点个数singularcore加1,将位置i,j记录在位置数组xx1和yy1中;
[0160] d.如果块(i,j)、块(i-1,j)或块(i-1,j-2),块(i-1,j-1),块(i,j-1)的Poincare值均为-180,块(i,j)是前景块,且其3×3邻域有5块以上是前景块,三角点个数singulardelta为0或singulardelta为1且与前一个三角点间距离大于3,三角点个数singulardelta加1,将位置记录i,j在位置数组xx2和yy2中。
[0161] 7.删除伪奇异点,方法是:
[0162] a.对每个含有中心点的块,如果其5×5的领域中含有Poincare值为-180的块,则该块中不含中心点,中心点个数singularcore减1,删除位置数组xx1及yy1中记录的相应位置;
[0163] b.对每个含有三角点的块,如果其5×5的领域中含有Poincare值为180的块,则该块中不含三角点,三角点个数singulardelta减1,删除位置数组xx2及yy2中记录的相应位置;
[0164] 8.如果没有找到奇异点,扩大范围搜索一个中心点,方法是:对第6步结果中Poincare值为180且不在图像边缘(第1,2行,倒数1,2行,第1,2列,倒数1,2列)的块(i,j),按图11(b)计算的方向旋转的变化量总和Poincare:
[0165] △dk=dk-d(k+1)mod8,k=0,1……7;
[0166] 如果△dk≥90,△dk=△dk-180;
[0167] 如果△dk≤-90,△dk=△dk+180;
[0168]
[0169] 如果Poincare(i,j)=180,中心点个数singularcore=1,记下中心点所在块位置i,j记录在位置数组xx1和yy1中,执行步骤(9)。
[0170] 9.按Henry分类方法(奇异点个数、位置)及类型数组lx判断指纹类型,无法判断的判为无法判断,方法是:
[0171] a.如果中心点个数singularcore=2或三角点个数singulardelta=2,且类型数组lx中含有3或类型数组lx(1)=0,判为斗型;
[0172] b.如果中心点个数singularcore=1或三角点个数singulardelta=1,类型数组lx有两个元素,且其中一个为4,则判为另一类型;
[0173] c.如果中心点个数singularcore=0且三角点个数singulardelta=0,且类型数组lx中含有元素4,判为拱型;
[0174] d.如果中心点个数singularcore=1且三角点个数singulardelta=0,按以下方法判断:
[0175] 如果中心点左下部分或右下部分前景小于5块,则不是拱型,但无法判断;
[0176] 设s1为中心点左下部分除了左边界和下边界外,大于-90度且小于0度的块数,s2为中心点右下部分除了右边界和下边界外,大于0度且小于90度的块数;
[0177] 如果s1<2,且类型数组lx中含有1,判为左箕型;
[0178] 如果s2<2,且类型数组lx中含有2,判为右箕型;
[0179] 如果s1-s2>thre1,s2
[0180] 如果s2-s1>thre3,s1
[0181] 如果s1>thre5,s2>thre5,且类型数组lx中含有3,判为斗型;
[0182] thre1,thre2,thre3,thre4,thre5为阈值;
[0183] e.如果中心点个数singularcore=0且三角点个数singulardelta=1,计算三角点位置在图中的相对位置yy2(1)/bj(bj为图像宽度,单位块);
[0184] 如果yy2/bj>thre6,且类型数组lx中含有1,判为左箕型;
[0185] 如果yy2/bj
[0186] thre6,thre7为阈值;
[0187] f.如果中心点个数singularcore=1且三角点个数singulardelta=1,计算中心点与三角点连线与中线夹角 按以下方法判断:
[0188] 如果π/12>slope>-π/12,且类型数组lx中含有5,判为尖拱型;
[0189] 如果π/12>slope>-π/12,且类型数组lx中不含有5,设s1为中心点左下部分除了左边界和下边界外,大于-90度且小于0度的块数,s2为中心点右下部分除了右边界和下边界外,大于0度且小于90度的块数;
[0190] 如果s1<2,且类型数组lx中含有1,判为左箕型;
[0191] 如果s2<2,且类型数组lx中含有2,判为右箕型;
[0192] 如果s1-s2>thre1,s2
[0193] 如果s2-s1>thre3,s1
[0194] 如果s1>thre5,s2>thre5,且类型数组lx中含有3,判为斗型;
[0195] thre1,thre2,thre3,thre4,thre5同步骤d,为阈值;
[0196] 如果slope≥π/12,且类型数组lx中含有1,判为左箕型;
[0197] 如果slope≤-π/12,且类型数组lx中含有2,判为右箕型;
[0198] g.如果不满足a,b,c,d,e,f,判为无法判断。