2013-08-29 10 views
6

Ho un'applicazione che prende i dati dal dispositivo di impronte digitali. ci sono 3 passi per il dito Minutiae estrazione:Algoritmo di estrazione minuzie Java

  1. immagine Impronta digitale Binarizzazione
  2. Immagine assottigliamento
  3. Minutiae Estrazione

mi sono fatto con la binarizzazione Immagine e Immagine thinnig parte. Ora ho implementato il codice per l'estrazione di minuzie. Codice simile a questa:

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

Ma questo codice calcolare intorno media 300 END OF LINES. Prende in considerazione ogni punto di fine linea.

enter image description here

Potrebbe uno mi aiutano a ottimizzare il codice?

risposta

2

Quindi, la ragione di questo è, mentre si ottiene anche la mappa delle minuzie vengono visualizzate false minuzie. Quindi, dopo aver ottenuto le minuzie, dobbiamo rimuovere le false minuzie dalla mappa delle minuzie.

Tipi di falsa minuzie:

  1. Spike
  2. Ponte
  3. Hole
  4. Pausa
  5. Spur
  6. Ladder

Inoltre un gran numero di falsi m inutiae vengono sempre rilevate vicino al limite della regione di interesse (effetto limite).

Quindi per rimuovere queste false minuzie sono definiti vari algoritmi. Uno di questi è definito in this link.

0

Se ciò di cui hai bisogno è ottenere punti in miniatura nel formato X, Y con il loro angolo di orientamento, consulta il progetto Source AFIS here. Sono stato in grado di estrarre dati in miniatura da immagini di impronte digitali con esso.