2013-08-29 4 views
6

Mam aplikację, która pobiera dane z urządzenia odcisków palców. Istnieją 3 kroki dla Finger najdrobniejsze odkurzaczem:Minutiae Extraction Algorith Java

  1. Fingerprint obrazu binaryzacji
  2. Obraz Rozcieńczanie
  3. najdrobniejsze Extraction

mam zrobić z binaryzacji obrazu i obrazu thinnig części. Teraz mam zaimplementowany kod do ekstrakcji Minutiae. Kod wyglądać tak:

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; 
} 

Ale ten kod obliczyć średnią około 300 END OF LINES. Bierze pod uwagę każdy koniec linii.

enter image description here

Może ktoś mi pomóc w optymalizacji kodu?

Odpowiedz

2

Powodem tego jest, że podczas pobierania mapy minusa wykrywane są również błędne minu. Po uzyskaniu szczegółów musimy usunąć fałszywe minucje z mapy minutiae.

Rodzaje fałszywych najdrobniejszych szczegółów:

  1. Spike
  2. Most
  3. Hole
  4. Przerwa
  5. Spur
  6. Ladder

Ponadto duża liczba fałszywych m inutiae są zawsze wykrywane blisko granicy obszaru zainteresowania (efekt granicy).

W celu usunięcia tych fałszywych drobiazgów zdefiniowano różne algorytmy. Jeden z nich jest zdefiniowany w this link.

0

Jeśli potrzebujesz uzyskać miniaturowe punkty w postaci X, Y z kątem ustawienia, sprawdź Source AFIS project here. Byłem w stanie wydobyć z niego miniaturowe dane z obrazów odcisków palców.