Matlab指纹细节提取
目前我对指纹识别和细节提取非常感兴趣。我在网上找到了以下代码,不知是否有人能解释一下?我查过形心、区域道具等,我对这些有点了解,但下面的代码让我感到困惑Matlab指纹细节提取,matlab,verification,fingerprint,Matlab,Verification,Fingerprint,目前我对指纹识别和细节提取非常感兴趣。我在网上找到了以下代码,不知是否有人能解释一下?我查过形心、区域道具等,我对这些有点了解,但下面的代码让我感到困惑 fun=@minutie; L = nlfilter(K,[3 3],fun); %% Termination LTerm=(L==1); imshow(LTerm) LTermLab=bwlabel(LTerm); propTerm=regionprops(LTermLab,'Centroid'); CentroidTerm=round(
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是一种移动过滤功能。它将遍历作为参数给出的图像中的所有像素,并基于相邻像素的值应用一个操作 我不知道
minutie
过滤器的确切内容,但从代码的其余部分判断,它可能在所有1的邻域中计算值为1的像素。换句话说,它将等于一个线段末端的一个,当有3个分支(分叉)时,它将等于3
例如:
让一个过滤器汇总附近的值,如下所示:
sum(block(1,1:3), block(3,1:3), block(2,1), block(2,3))*block(2, 2);
其中,块
表示二进制图像的每个像素周围的邻域
在下面的左矩阵中(如果忽略边界例外),有一个位置的3x3邻域中正好有一个1,在右矩阵中,有一个位置的3x3邻域中正好有三个1
[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]
它在左矩阵中发现了一个终止,在右矩阵中发现了一个分支
过滤后的图像在值1和3处设置阈值,然后使用bwlabel
和regionprops
对我来说有些神秘†因为分叉和终止是单点,它们的位置只是它们的索引。我认为您可以简单地使用以下方法检测端点和分叉的坐标:
[It Jt]= find(L==1);
[Ib Jb]= find(L==3);
†我能想到的一个原因是图像和数组中的坐标在matlab中是不同的,这两个函数以图像格式输出坐标,更容易在原始图像上绘制。非常感谢。当我删除bwlabel和regionprops时,它会给出一个错误。包含它们一定有一定的原因???@user1877082-如果删除这些代码行,您将得到一个错误,因为
bwlabel
和regionprops
后面的下一行依赖于在该阶段分配的输出变量,很明显,你会得到一个错误。你能再次解释一下下面的代码吗。和(块(1,1:3)、块(3,1:3)、块(2,1)、块(2,3))*块(2,2);我觉得很难理解。我是新来的,我发现这很难理解。我认为我的主要问题是不理解扫描过程是如何工作的。如果我能得到,我想我会没事的!