I binarized the fingerprint, thinned it with YYZhang's algorithm, got the minutiaes looking around of a pixel with this method
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;
}
And
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)));
}
}
}
}
Where (Wx or Ex)+Xfactor and (Sy or Ny)+ Yfactor are the border of the fingerprint, so I wont get borderly false minutiaes
But My problem is, to get minutiae's orientation or even remove false minutiaes I need to track the ridge. How can I track the ridge, or even worse how can I track 3 ridge from a bifurcation point? Sorry but i can't think in a way to do this
NIST provides detailed descriptions of their algorithms for templating in their User Guide to NIST Biometric Image Software. The software is also in the public domain if you want to take a look at the source code.
Pages 62 - 68 of the document detail methods for elimination of erroneous minutia.