我将指纹二值化,用YYZhang的算法对其进行稀释,用这种方法让细节看到像素周围
public static ArrayList<Point> timesPattern01(int i, int j, byte[][] image){
ArrayList<Point> ps = new ArrayList<>();
if(image[i-1][j]==0 && image[i-1][j+1]==1) ps.add(new Point(i-1,j+1));
if(image[i-1][j+1]==0 && image[i][j+1]==1) ps.add(new Point(i,j+1));
if(image[i][j+1]==0 && image[i+1][j+1]==1) ps.add(new Point(i+1,j+1));
if(image[i+1][j+1]==0 && image[i+1][j]==1) ps.add(new Point(i+1,j));
if(image[i+1][j]==0 && image[i+1][j-1]==1) ps.add(new Point(i+1,j-1));
if(image[i+1][j-1]==0 && image[i][j-1]==1) ps.add(new Point(i,j-1));
if(image[i][j-1]==0 && image[i-1][j-1]==1) ps.add(new Point(i-1,j-1));
if(image[i-1][j-1]==0 && image[i-1][j]==1) ps.add(new Point(i-1,j));
return ps;
}
和
for(int i=Wx+Xfactor; i<Ex-Xfactor; i++){
for(int j=Ny+Yfactor; j<Sy-Yfactor; j++){
ArrayList<Point> patterns = timesPattern01(i,j,fpImage);
if(fpImage[i][j]==1){
if(patterns.size() ==1){
termination.add(new Minutiae("termination",patterns,new Point(i,j)));
}
if(patterns.size()==3){
bifurcation.add(new Minutiae("bifurcation",patterns,new Point(i,j)));
}
}
}
}
其中(Wx或Ex)+ Xfactor和(Sy或Ny)+ Yfactor是指纹的边界,所以我不会得到边界错误的细节
但我的问题是,为了获得细节的方向,甚至删除假的细节,我需要追踪脊。如何跟踪脊,或者更糟糕的是如何从分叉点跟踪3个脊?对不起,但我无法想办法做到这一点
答案 0 :(得分:0)
NIST提供有关其模板算法的详细说明User Guide to NIST Biometric Image Software.如果您想查看源代码,该软件也属于公共领域。
文件第62-68页详细说明消除错误细节的方法。