首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab FingerPrint细节点提取

Matlab FingerPrint细节点提取
EN

Stack Overflow用户
提问于 2014-09-23 03:49:41
回答 1查看 2.7K关注 0票数 0

目前,我对指纹识别和细节提取非常感兴趣。我在网上找到了下面的代码,不知道有没有人愿意解释一下?我查过centroid,regionprops等,我对这些有一点了解,但下面的代码让我感到困惑!

代码语言:javascript
复制
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')
EN

回答 1

Stack Overflow用户

发布于 2014-09-23 06:19:42

代码首先对邻域为3x3像素的二值图像进行过滤。nfilter是一种移动滤波函数。它将遍历作为参数给定的图像中的所有像素,并根据相邻像素的值应用操作。

我不知道minutie过滤器的确切内容,但从其余代码判断,它可能计算所有1附近的值为1的像素。换句话说,它将等于线段末尾的1,当有3个分支(分支)时等于3。

示例:

让过滤器对邻域中的元素进行汇总,如下所示:

代码语言:javascript
复制
sum(block(1,1:3), block(3,1:3), block(2,1), block(2,3))*block(2, 2);

其中block表示二值图像的每个像素周围的邻域。

在下面的左侧矩阵中(如果忽略边界例外),有一个位置在其3x3邻域中恰好有一个1,在右侧矩阵中有一个位置在其3x3邻域中恰好有三个1。

代码语言:javascript
复制
[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]

过滤后的输出将是:

代码语言:javascript
复制
[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]

它在左边的矩阵中找到了一个终结点,在右边的矩阵中找到了一个分叉。

过滤后的图像在值1和3处设置阈值,然后bwlabelregionprops的使用对我来说有点神秘,因为分叉和终止是单点,它们的位置就是它们的索引。我认为您可以简单地使用如下命令来实现终止和分叉坐标的检测:

代码语言:javascript
复制
[It Jt]= find(L==1);
[Ib Jb]= find(L==3);

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25982080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档