2013-08-29 49 views
6

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

  1. hình ảnh vân tay binarization
  2. ảnh thưa
  3. 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.

enter image description here

bất kỳ ai có thể giúp tôi để tối ưu hóa mã?

Trả lời

2

Vì vậy, lý do cho điều này là, trong khi nhận được bản đồ minutiae sai minutiae cũng được phát hiện. Vì vậy, sau khi nhận được minutiae chúng ta phải loại bỏ các minutiae sai từ bản đồ minutiae.

Các loại chi tiết vụn vặt sai:

  1. Spike
  2. Cầu
  3. Lỗ
  4. Nghỉ
  5. Spur
  6. Ladder

Bên cạnh đó một số lượng lớn m sai inutiae luôn luôn được phát hiện gần ranh giới của khu vực quan tâm (hiệu ứng biên).

Vì vậy, để loại bỏ các minutiae sai có các thuật toán khác nhau được xác định. Một trong số chúng được xác định trong this link.

0

Nếu những gì bạn cần là để có được các điểm thu nhỏ ở dạng X, Y với góc hướng của chúng, hãy xem Dự án nguồn AFIS here. Tôi đã có thể trích xuất dữ liệu thu nhỏ từ hình ảnh vân tay với nó.

Các vấn đề liên quan