Tôi có một ứng dụng lấy dữ liệu từ thiết bị vân tay. Có 3 bước cho Finger chi tiết vụn vặt Extraction:Thuật toán trích xuất Minutiae Java
- hình ảnh vân tay binarization
- ảnh thưa
- chi tiết vụn vặt Extraction
Tôi đang thực hiện với sự binarization hình ảnh và hình ảnh thinnig phần. Bây giờ tôi đã thực hiện mã cho khai thác Minutiae. Mã trông như thế này:
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;
}
Nhưng mã này tính toán khoảng trung bình 300 END OF LINES
. Nó đưa vào tài khoản mỗi đầu của dòng điểm.
bất kỳ ai có thể giúp tôi để tối ưu hóa mã?