2022年妈妈杯数学建模——A题
<4天时间><国一>
开源:TODO
融合DBSCAN的点-线-面“五层”指纹识别模型
- 首先对轴向坐标进行归一化处理;
- 利用DSCAN聚类算法以实现指纹图像数据的快速滤除,而后对指纹数据作旋转;
- 针对指纹细节特征点,建立基于双向点匹配机制的伪特征点剔除模型对比对指纹进行伪特征点剔除;
- 完成上述操作后,针对剔除伪特征点后的指纹图像数据进行点匹配,输出对应的匹配特征点位置及个数;
- 根据点匹配模型输出结果,进行线匹配,以匹配特征点对作为输出结果输入到面匹配模型,输出特征点连线对作为模型结果。
- 最后建立权重分配矩阵,综合点、线、面模型的输出结果作为模型的最终输出,从而实现在海量指纹数据库中的快速检索。
DSCAN指纹滤除
首先针对指纹数据的轴向坐标进行数据归一化处理,并保持其角度方向不变,随后利用DBSCAN聚类算法对指纹数据进行聚类。
为详细说明,演示DBSCAN
密度聚类分群原理: 对任意规模指纹数据样本集进行聚类,设定
I
I
I为 5,下图中空心点代表核心对象,实线圆内的点代表同核心对象间存在密度直达关系的样本集合,核心对象间的箭头则代表核心对象间存在密度可达关系,以此可以得到指纹样本数据集的分群处理结果。
通过基于DBSCAN
聚类算法实现对海量指纹数据样本的快速筛选,保留聚类数与对应匹配样本相同的指纹数据样本,去除掉绝大多数的不匹配样本以节省之后的时间开销。
在对指纹进行采样的过程中,指尖与采集平面接触部位的不同,会造成采集的指纹图像出现不同角度的旋转和偏移,即同一指纹细节点在不同时刻采集的指纹图像中的位置存在较大差异。这是非线性形变的一种常见现象,对后期指纹图像的特征采集和匹配产生一定的干扰,因此需在特征采集之前对指纹图像中的细节点坐标进行调整,以解决指纹图像中的旋转问题。
聚类算法在滤除样本的同时可以有效剔除噪声,剔除图像噪声后对图像数据作旋转调整,为具体量化细节点所处位置,可建立模型空间坐标系:
(1) 以采样图片左上角为坐标原点,以 x x x轴右方向为 x x x轴正方向,以 y y y轴下方向为 y y y轴正方向;
(2) 细节点方向表达约定:零度方向为 x x x轴正方向,90 度方向为 y y y轴负方向,180 度方向为 x x x轴负方向,270 度方向为 y y y轴正方向,最大角度为 359 度。角度的最小区分单位为1度。
细节点采用三元存储格式即 ( x , y , θ ) (x,y,\theta) (x,y,θ),其中, x x x、 y y y和 θ \theta θ分别表示 x x x轴像素坐标、 y y y轴像素坐标及细节点方向。
计算一组指纹图像的坐标均值 ( x 1 , y 1 , θ 1 ) (x_1,y_1,\theta_1) (x1,y1,θ1),与之匹配的指纹数据细节点均值向量 ( x 2 , y 2 , θ 2 ) (x_2,y_2,\theta_2) (x2,y2,θ2),取两者的对应差值作为偏差矢量,并以此偏差矢量作旋转平移。将最终的结果输出值下一模型进行匹配。
双向伪特征点剔除
针对所滤得指纹数据中的伪特征点,使用双向点匹配机制进行剔除。指纹图像数据特征可以被点集 P P P所表征,点集中所包含的元素为指纹图像的细节点。
设归一化处理后的指纹图像
A
A
A对应点集
P
1
=
(
p
1
,
p
2
,
p
3
,
⋯
,
p
m
)
P1=(p_1,p_2,p_3,\cdots,p_m)
P1=(p1,p2,p3,⋯,pm),指纹图像
B
B
B对应点集
Q
1
=
(
q
1
,
q
2
,
q
3
,
⋯
,
q
n
)
Q1=(q_1,q_2,q_3,\cdots,q_n)
Q1=(q1,q2,q3,⋯,qn)。本文采用欧式距离和
d
d
d角度偏差
ϕ
\phi
ϕ来具体衡量两组不同指纹图像一对细节点的相似度,具体量化方法如下所示:
ϕ
=
θ
p
−
θ
q
d
=
(
x
p
−
x
q
)
2
−
(
y
p
−
y
q
)
2
\phi=\theta_p-\theta_q\\ d=\sqrt{(x_p-x_q)^2-(y_p-y_q)^2}
ϕ=θp−θqd=(xp−xq)2−(yp−yq)2
针对指纹图像细节点数据进行正向特征点匹配,即在点集
P
1
P_1
P1中依次取各细节点,遍历点集
P
2
P_2
P2中特征点求取一组对应的欧式距离
d
1
,
d
2
,
⋯
,
d
n
d_1,d_2,\cdots,d_n
d1,d2,⋯,dn和角度偏差值
ϕ
1
,
ϕ
2
,
⋯
,
ϕ
n
\phi_1,\phi_2,\cdots,\phi_n
ϕ1,ϕ2,⋯,ϕn,取其中距离和角度偏差最小的点作为该细节特征点的对应点,由于伪特征点的存在,两点集特征点无法一一匹配,甚至可能会出现多对一的匹配情况,此时将
P
2
P_2
P2点集中的无匹配特征点作为伪特征点进行剔除。至此,正向特征点匹配已经完成。
在正向特征点匹配已经完成的基础上,进行特征点反向特征点匹配,类似的,在点集 P 2 P_2 P2中依次取各细节点,遍历点集 P 1 P_1 P1中特征点求取一组对应的欧式距离和角度偏差值,选取其中距离和角度偏差最小的点作为该细节特征点的对应点。
同样地,将 P 2 P_2 P2点集中的无匹配特征点作为伪特征点进行剔除,此时也会存在多对一的匹配情况。以正反双向匹配结果作为最终结果,剔除点集中的单向匹配特征点,将两点集中双向匹配的特征点最为一组对应特征点进行进行输出作下一步操作。
点匹配
针对上文所提取的各比对细节点,采用k近邻算法分别搜索出 P 1 P_1 P1点集和该节点距离最短的3个节点,称为邻节点。利用这一细节点与3个邻节点的拓扑结构和对应 P 2 P_2 P2点集的匹配情况进行决策。
具体的决策过程是对比细节点与邻节点的距离及连线角度,当欧式距离差值和角度偏差值均在某一范围内即小于设定阈值时,则认为该细节点匹配成功,其匹配得分加1;如果差值超过限值,那么则认为匹配失败,匹配分数不变。
P 1 P_1 P1点集中细节点 p i p_i pi和其对应邻节点的欧式距离存在差异,首先根据其长短进行降序排列,从而得出对应细节点与三个邻节点分别为 i 1 i_1 i1、 i 2 i_2 i2和 i 3 i_3 i3;采用相同方法,可以得到 P 2 P_2 P2点集中对应细节点与 p j p_j pj其三个邻节点的欧式距离分别为的 j 1 j_1 j1、 j 2 j_2 j2和 j 3 j_3 j3。
(a) 匹配成功 | (b) 匹配失败 |
根据上述信息即可得到6组匹配对象,它们分别为三组欧式距离信息
(
d
i
1
,
d
i
1
)
(d_{i1}, d_{i1})
(di1,di1)、
(
d
i
2
,
d
i
2
)
(d_{i2}, d_{i2})
(di2,di2)、
(
d
i
3
,
d
i
3
)
(d_{i3}, d_{i3})
(di3,di3),以及三组连线夹角信息
(
α
i
1
,
α
j
1
)
(\alpha_{i1}, \alpha_{j1})
(αi1,αj1)、
(
α
i
2
,
α
j
2
)
(\alpha_{i2}, \alpha_{j2})
(αi2,αj2)、
(
α
i
3
,
α
j
3
)
(\alpha_{i3}, \alpha_{j3})
(αi3,αj3)。具体点匹配过程即比对每一组匹配对象之间的差值与阈值之间的大小关系。差值与阈值的关系如下:
{
d
i
k
−
d
j
k
<
δ
d
1
α
i
k
−
α
j
k
<
δ
α
1
,
(
k
=
1
,
2
,
3
)
\left\{\begin{array}{l} d_{i k}-d_{j k}<\delta_{d 1} \\ \alpha_{i k}-\alpha_{j k}<\delta_{\alpha 1} \end{array},(k=1,2,3)\right.
{dik−djk<δd1αik−αjk<δα1,(k=1,2,3)
线匹配
(a) 匹配成功 | (b) 匹配失败 |
取点集
P
1
P_1
P1中提取的特征点对
M
i
M_i
Mi和
M
j
M_j
Mj,计算两者之间的欧式距离为
d
i
j
d_{ij}
dij,取点集
P
2
P_2
P2中对应的特征点对
M
k
M_k
Mk和
M
l
M_l
Ml,计算两者之间的欧式距离为
d
k
l
d_{kl}
dkl,当欧式距离
d
i
j
d_{ij}
dij和
d
k
l
d_{kl}
dkl的差值小于一定阈值时,即
d
i
j
−
d
k
l
=
δ
d
2
d_{ij} - d_{kl}=\delta_{d2}
dij−dkl=δd2
则认为该细节点对匹配成功,其中
δ
d
2
\delta_{d2}
δd2代表细节点对差值的阈值。
面匹配
(a) 匹配成功 | (b) 匹配失败 |
假设已知点集
P
1
P_1
P1和点集
P
2
P_2
P2中的两个细节点连线对
(
M
i
1
,
M
i
2
,
M
j
1
,
M
j
2
)
\left(M_{i 1}, M_{i 2}, M_{j 1}, M_{j 2}\right)
(Mi1,Mi2,Mj1,Mj2)和
(
M
k
1
,
M
k
2
,
M
l
1
,
M
l
2
)
\left(M_{k1}, M_{k2}, M_{l 1}, M_{l 2}\right)
(Mk1,Mk2,Ml1,Ml2),通过他们拓扑结构对匹配情况进行决策。 具体决策方法为:如果满足以下条件:
{
d
y
⃗
1
−
d
k
1
<
δ
d
3
d
y
⃗
2
−
d
k
2
<
δ
d
3
α
y
⃗
1
−
α
k
1
<
δ
a
3
α
y
⃗
2
−
α
k
2
<
δ
a
3
\begin{cases}d_{\vec{y}1}-d_{k1}<\delta_{d3}\\d_{\vec{y}2}-d_{k2}<\delta_{d3}\\\alpha_{\vec{y}1}-\alpha_{k1}<\delta_{a3}\\\alpha_{\vec{y}2}-\alpha_{k2}<\delta_{a3}\\\end{cases}
⎩
⎨
⎧dy1−dk1<δd3dy2−dk2<δd3αy1−αk1<δa3αy2−αk2<δa3
式中,
δ
d
3
\delta_{d3}
δd3与
δ
α
3
\delta_{\alpha3}
δα3依次代表距离与夹角的阈值。记录此时的细节点连线对个数为。
c
c
c至此,基于点-线-面的指纹图像数据匹配检索模型建立完毕。
匹配得分系数
通过上述模型可得到一对指纹图像数据中的点匹配成功数 a a a,线匹配最终细节点对个数 b b b以及细节点连线对个数 c c c,通常采用结果 c c c的来衡量指纹匹配程度,但由于这种模型方法过于依赖面匹配结果,忽略了点匹配和线匹配的作用权重,在“同一”指纹面匹配结果不佳或为0时容易造成误删,同时当面匹配结果相同时难以区分相似度,从而使得模型的泛化性大大降低。
为了避免“同一”指纹的误删操作,提高模型泛化性,给子模型分别赋予不同的权重系数,可定义系数矩阵
C
[
f
1
,
f
2
,
f
3
]
C[f_1,f_2,f_3]
C[f1,f2,f3]以提高点匹配模型与线匹配模型权重,最终以模型匹配得分衡
t
t
t量指纹数据相似度情况,具体计算公式如下:
t
=
a
f
1
+
b
f
2
+
c
f
3
t=af_1+bf_2+cf_3
t=af1+bf2+cf3
结果
- 不同过滤水平下的穿透率结果
过滤水平 | 80% | 90% | 95% | 97% |
---|---|---|---|---|
穿透率 | 0.894 | 0.826 | 0.784 | 0.738 |
- 开源: