如何从指纹的细节中获得一个脊

时间:2014-11-16 11:11:33

标签: java fingerprint

我将指纹二值化,用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个脊?对不起,但我无法想办法做到这一点

1 个答案:

答案 0 :(得分:0)

NIST提供有关其模板算法的详细说明User Guide to NIST Biometric Image Software.如果您想查看源代码,该软件也属于公共领域。

文件第62-68页详细说明消除错误细节的方法。