总的来说P-NAPSAC类似于对每个点p_i
单独使用了一个PROSAC。PROSAC里需要使用质量函数进行排序,而这里的质量函数就是其他点到p_i
的距离。
P-NAPSAC采样过程大致如下:
总共有n
个点,对于每个点有命中数t_i
,邻域大小k_i
(初始值为m
,m
为估计转换模型所需要的最少点数),会重复以下过程直到终止条件:
-
使用PROSAC选择初始点
p_i
(如果没有合适的质量函数则使用RANSAC?),使其对应的命中数t_i
增加,如果命中数t_i
大于一定值,k_i
增加(即根据命中数决定k_i
):
T k i + 1 ′ = T k i ′ + ⌈ m − 1 k i + 2 − m T k i ⌉ T'_{k_i+1}=T'_{k_i} + \lceil \frac{m-1}{k_i+2-m}T_{k_i} \rceil Tki+1′=Tki′+⌈ki+2−mm−1Tki⌉ -
一个样本中的点由:
p_i
,离p_i
第k_i
近的点,k_i-1
个最近的点中取剩余的m-2
个点组成(总共m
个点) -
将样本中点(除
p_i
)对应的命中数+1 -
估计转换模型参数(如单应矩阵、本质矩阵)
-
验证转换模型
迭代次数r’,采样终止条件:
r
′
=
l
o
g
(
1
−
μ
)
/
l
o
g
(
1
−
(
η
+
γ
)
m
)
γ
∈
[
0
,
1
−
η
]
r'=log(1-\mu)/log(1-(\eta+\gamma)^m)\\ \gamma \in [0, 1- \eta]
r′=log(1−μ)/log(1−(η+γ)m)γ∈[0,1−η]
m是估计模型所需要的最少点数,μ是结果需要的置信度,η 是内点所占比率,γ是一个自设参数。