I have an application that takes data from a fingerprint device. There are 3 steps to removing Finger Minutiae:
- Fingerprint Image Binarization
- Image reduction
- Minutiae extraction
I ended up working with image binarization and part of Image thinnig. Now I have implemented the code for Minutiae Extraction. The code is as follows:
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[xi][y+size] = (byte)color; skeleton[x+i][y-size] = (byte)color; skeleton[x-size][y+i] = (byte)color; skeleton[x+size][yi] = (byte)color; } return skeleton; }
But this code calculates about 300 END OF LINES . It counts each end of the line.

Can someone help me optimize the code?
source share