Matlab指纹提取细节 [英] Matlab FingerPrint Minutia Extraction

查看:236
本文介绍了Matlab指纹提取细节的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前对指纹验证和研究细节提取非常感兴趣.我在网上找到了以下代码,想知道是否有人会友好地解释它?我查找了质心,regionprops等,我对这些内容有所了解,但是下面的代码使我感到困惑!

I am very interested in fingerprint verification and studying minutia extraction at present. I have found the following code online and wonder if someone would be kind enough to explain it? I have looked up centroid, regionprops etc, I understand these a little but the code below has me puzzled!

fun=@minutie;
L = nlfilter(K,[3 3],fun);

%% Termination
LTerm=(L==1);
imshow(LTerm)
LTermLab=bwlabel(LTerm);
propTerm=regionprops(LTermLab,'Centroid');

CentroidTerm=round(cat(1,propTerm(:).Centroid));
imshow(~K)
set(gcf,'position',[1 1 600 600]);
hold on
plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro')

%% Bifurcation
LBif=(L==3);
LBifLab=bwlabel(LBif);
propBif=regionprops(LBifLab,'Centroid','Image');
CentroidBif=round(cat(1,propBif(:).Centroid));
plot(CentroidBif(:,1),CentroidBif(:,2),'go')

推荐答案

代码首先过滤3x3像素邻域的二进制图像. nfilter是移动滤波器功能.它将遍历作为参数给出的图像中的所有像素,并根据相邻像素的值进行运算.

The code first filters the binary image with a neighborhood of 3x3 pixels. nfilter is a moving filter function. It will go through all the pixels in the image given as argument and apply an operation based on the values of the neighboring pixels.

我不知道minutie过滤器的确切内容,但是从其余代码来看,它可能会在所有1的邻域中对值为1的像素进行计数.换句话说,它在段的末尾等于1,而在有3个分支(分支)时等于3.

I don't know the exact content of the minutie filter, but judging by the rest of the code, it probably counts the pixels with a value of 1 in the neighborhood of all 1s. In other words it will be equal to one at the end of a segment, and equal to 3 when there are 3 branches (a bifurcation).

示例:

让过滤器对附近的那些进行汇总,如下所示:

Let a filter sum up the ones in the neighborhood, like this:

sum(block(1,1:3), block(3,1:3), block(2,1), block(2,3))*block(2, 2);

其中block表示二进制图像每个像素周围的邻域.

where block denotes a neighborhood around each pixel of the binary image.

在下面的左矩阵(如果忽略边界异常)中,有一个位置的一个位置在其3x3邻域中正好是1,在右矩阵中,有一个位置的一个位置正好有三个1s.在其3x3社区中.

In the left matrix below (if you ignore the boundary exceptions) there is one position with a one that has exactly one 1 in its 3x3 neighborhood, in the right matrix, there is one position with a one that has exactly three 1s in its 3x3 neighborhood.

[0 0 0 0 0        [0 0 1 0 0
 0 0 0 0 0         0 0 1 0 0
 0 0 1 0 0         1 1 1 0 0
 0 0 1 0 0         0 0 1 0 0
 0 0 1 0 0]        0 0 1 0 0]

过滤后的输出为:

[0 0 0 0 0        [0 0 0 0 0
 0 0 0 0 0         0 0 0 0 0
 0 0 1 0 0         0 0 3 0 0
 0 0 0 0 0         0 0 0 0 0
 0 0 0 0 0]        0 0 0 0 0]

它在左矩阵中找到一个终止点,在右矩阵中找到一个分支.

It found a termination in the left matrix, and a bifurcation in the right matrix.

然后将滤波后的图像阈值设置为1和3,然后bwlabelregionprops的使用对我来说有点神秘†,因为分叉和终结点是单点,它们的位置只是它们的索引.我认为您可以使用以下方法简单地实现对末端和分叉点坐标的检测:

The filtered image are then thresholded at the value 1 and 3, then the use of bwlabel and regionprops is somewhat mysterious to me† since bifurcations and terminations are single points, their position is simply their index. I think you could simply achieve the detection of the coordinates of the terminations and bifurcation using something like:

[It Jt]= find(L==1);
[Ib Jb]= find(L==3);

†我能想到的一个原因是图像和数组中的坐标在matlab中是不同的,并且这两个函数以图像格式输出坐标,因此更容易在原始图像上绘制.

† one reason I can think of is that coordinates in images and arrays are different in matlab, and these two function output coordinates in the image format, which is easier to plot on top of the original image.

这篇关于Matlab指纹提取细节的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆