5

我有一个从指纹设备获取数据的应用程序。手指细节提取有 3 个步骤:

  1. 指纹图像二值化
  2. 图像细化
  3. 细节提取

我完成了图像二值化和图像细化部分。现在我已经实现了细节提取的代码。代码如下所示:

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

但是这段代码计算出平均 300 左右END OF LINES。它考虑了线的每个端点。

在此处输入图像描述

谁能帮我优化代码?

4

2 回答 2

2

所以这样做的原因是,在获取细节图的同时,也会检测到错误的细节。所以在得到细节之后,我们必须从细节图中删除虚假的细节。

虚假细节的类型:

  1. 长钉
  2. 休息
  3. 支线
  4. 梯子

此外,总是在感兴趣区域的边界附近检测到大量虚假细节(边界效应)。

因此,为了消除这些错误的细节,定义了各种算法。其中之一在此链接中定义。

于 2014-04-23T12:20:13.897 回答
0

如果您需要获取 X、Y 形式的微型点及其方向角,请在此处查看 Source AFIS 项目。我能够用它从指纹图像中提取微型数据。

于 2016-05-07T21:45:21.137 回答