Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Minutiae Extraction Algorithm Java

I have an application which takes data from the fingerprint device. There are 3 steps for the Finger Minutiae Extraction:

  1. Fingerprint image Binarization
  2. Image Thinning
  3. Minutiae Extraction

I am done with the Image binarization and Image thinnig part. Now I have implemented code for the Minutiae Extraction. Code look like this:

byte[][] outSkeleton = BasicOperations.copy(fingerprint.getSkeleton());

    int margin = 50;
    int bif = 0;
    int eol = 0;
    for(int i=margin+20; i<width-margin-20; i++){
        for(int j=margin; j<height-margin; j++){
            int patterns = BasicOperations.timesPattern01(i,j,fingerprint.getSkeleton());
            if(fingerprint.getSkeleton()[i][j]==1){
                if(patterns==1){
                    outSkeleton = drawRectangle(i,j,outSkeleton,2);
                    eol++;
                }
                if(patterns==3){
                    outSkeleton = drawRectangle(i,j,outSkeleton,3);
                    bif++;
                }
            }
        }
    }

..........

public static int timesPattern01(int i, int j, byte[][] image){
    int pattern01 = 0;

    //Counting threads[0,1]
    if(image[i-1][j]==0 && image[i-1][j+1]==1) pattern01++;
    if(image[i-1][j+1]==0 && image[i][j+1]==1) pattern01++;
    if(image[i][j+1]==0 && image[i+1][j+1]==1) pattern01++;
    if(image[i+1][j+1]==0 && image[i+1][j]==1) pattern01++;
    if(image[i+1][j]==0 && image[i+1][j-1]==1) pattern01++;
    if(image[i+1][j-1]==0 && image[i][j-1]==1) pattern01++;
    if(image[i][j-1]==0 && image[i-1][j-1]==1) pattern01++;
    if(image[i-1][j-1]==0 && image[i-1][j]==1) pattern01++;

    return pattern01;
}

.....

private static byte[][] drawRectangle(int x, int y, byte[][] skeleton, int color){
    int size = 3;
    for(int i=-size; i<=size; i++){
        skeleton[x-i][y+size] = (byte)color;
        skeleton[x+i][y-size] = (byte)color;
        skeleton[x-size][y+i] = (byte)color;
        skeleton[x+size][y-i] = (byte)color;
    }
    return skeleton;
}

But this code calculate around average 300 END OF LINES. It takes into account every end of line point.

enter image description here

Could any one help me to optimize the code?

like image 403
code_fish Avatar asked Nov 02 '22 15:11

code_fish


1 Answers

So the reason for this is, while getting the minutiae map false minutiae are also detected. So after getting the minutiae we have to remove the false minutiae from the minutiae map.

Types of false minutiae:

  1. Spike
  2. Bridge
  3. Hole
  4. Break
  5. Spur
  6. Ladder

In addition a large number of false minutiae are always detected close to the boundary of the region of interest (boundary effect).

So for removing these false minutiae there are various algorithms defined. One of them is defined in this link.

like image 123
code_fish Avatar answered Nov 08 '22 04:11

code_fish