细节提取算法Java
我有一个从指纹设备获取数据的应用程序。 手指细节点提取有3个步骤:细节提取算法Java,java,image-processing,fingerprint,Java,Image Processing,Fingerprint,我有一个从指纹设备获取数据的应用程序。 手指细节点提取有3个步骤: 指纹图像二值化 图像细化 细节提取 我已经完成了图像二值化和图像细化部分。 现在我已经实现了细节提取的代码。代码如下所示: byte[][] outSkeleton = BasicOperations.copy(fingerprint.getSkeleton()); int margin = 50; int bif = 0; int eol = 0; for(int i=margin+20; i
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++;
}
}
}
}
private static byte[]drawRectangle(int x,int y,byte[]skeleton,int color){
int size=3;
对于(int i=-size;i,原因是,在获取细节点图的同时,还检测到错误的细节点。因此,在获取细节点后,我们必须从细节点图中删除错误的细节点
虚假细节的类型:
刺
桥
洞
中断
刺激
梯子
此外,在感兴趣区域的边界附近总是检测到大量虚假细节点(边界效应)
因此,为了去除这些虚假细节点,定义了各种算法。
其中一个是在中定义的。如果您需要的是以X,Y的形式获取微型点及其方向角,请查看源AFIS项目。我可以使用它从指纹图像中提取微型数据。到pdf的链接已断开
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;
}