RANSAC的改进(1): 渐进一致采样 PROSAC(PROgressive SAmple Consensus)

PROSAC是对RANSAC采样的一种优化,它从最相似的数据点开始采样,提高效率。算法包括生长函数确定采样集大小和基于非随机性和极大性的停止策略。实验表明,PROSAC在图像匹配等任务中能有效节省运算量并提升性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法简介

  渐进一致采样法1 (PROSAC) 是对经典的 RANSAC2 中采样的一种优化。相比经典的 RANSAC 方法均匀地从整个集合中采样,PROSAC 方法是从不断增大的最佳对应点集合中进行采样的。所以这种方法可以节省计算量,提高运行速度。

详细内容

1. 引入

  假设: 具有更高相似性的数据点更可能是类内点(根据相似性进行排序的半随机采样不会比完全随机采样的效果更差)

1.1. 标记说明

   N N N 个数据点的集合记作 U N \mathcal{U}_N UN,根据评价函数 q q q U N \mathcal{U}_N UN 内数据点被降排序为:
u i , u j ∈ U N : i &lt; j ⇒ q ( u i ) ≥ q ( u j ) \textbf{u}_i,\textbf{u}_j\in{\mathcal{U}_N}:i&lt;j\Rightarrow{q(\textbf{u}_i)\geq q(\textbf{u}_j)} ui,ujUN:i<jq(ui)q(uj)
  评价最好的 n n n 个数据点集合记作 U n \mathcal{U}_n Un
  从数据集 U n \mathcal{U}_n Un 中的采样点集合记作 M \mathcal{M} M,其元素个数为 ∣ M ∣ = m |\mathcal{M}|=m M=m
  采样点集合的评价函数被定义为其所有元素评价函数值中最小的评价函数值:
q ( M ) = min ⁡ u i ∈ M q ( u i ) q(\mathcal{M})=\mathop{\min}\limits_{\textbf{u}_i\in{\mathcal{M}}}q(\textbf{u}_i) q(M)=uiMminq(ui)

2. 算法

  由于 PROSAC 不是从所有数据点中进行随机采样,而是需要先对数据点进行排序,然后在评价函数值最高的数据点子集中进行随机采样,这个子集被称为假设生成集,并且这个假设生成集的元素数量是不断增大的。那么现在就会面临两个问题:

  1. 假设生成集的大小如何确定?
  2. 采样过程的停止策略是什么?

2.1 生长函数和采样

  生长函数是用来确定假设生成集的大小的。它既不能过分乐观地依赖评价函数的预排序作用,也不能太消极地对所有数据点都相同看待。用 P { u i } P\{\textbf{u}_i\} P{ui} 表示 u i \textbf{u}_i ui正确点的概率,我们对这个概率和评价函数之间的联系做一个最小的假设,即单调性假设:
i &lt; j ⇒ q ( u i ) ≥ q ( u j ) ⇒ P { u i } ≥ P { u j } i&lt;j\Rightarrow q(\textbf{u}_i)\geq q(\textbf{u}_j) \Rightarrow P\{\textbf{u}_i\}\geq P\{\textbf{u}_j\} i<jq(ui)q(uj)P{ui}P{uj}
  用 { M i } i = 1 T N \{\mathcal{M}_i\}_{i=1}^{T_N} {Mi}i=1TN 表示 T N T_N TN 次采样点集合的序列,且每次采样都是从 N N N 个数据点中选取其中的 m m m 个,即 M i ∈ U N \mathcal{M}_i\in \mathcal{U}_N MiUN。用 { M ( i ) } i = 1 T N \{\mathcal{M}_{(i)}\}_{i=1}^{T_N} {M(i)}i=1TN 表示根据评价函数排序之后的序列,则有:
i &lt; j ⇒ q ( M ( i ) ) ≥ q ( M ( j ) ) i&lt;j\Rightarrow q(\mathcal{M}_{(i)})\geq q(\mathcal{M}_{(j)}) i<jq(M(i))q(M(j))
  用 T n T_n Tn 表示 { M i } i = 1 T N \{\mathcal{M}_i\}_{i=1}^{T_N} {Mi}i=1TN 中所有元素都来源于 U n \mathcal{U}_n Un 的采样点集合 M i \mathcal{M}_i Mi 的平均个数,则有:
T n = T N ( n m ) ( N m ) = T N ∏ i = 0 m − 1 n − i N − i T_n=T_N\frac{\binom{n}{m}}{\binom{N}{m}}=T_N\prod_{i=0}^{m-1}\frac{n-i}{N-i} Tn=TN(mN)(mn)=TNi=0m1Nini T n + 1 T n = ∏ i = 0 m − 1 n + 1 − i N − i ∏ i = 0 m − 1 N − i n − i = n + 1 n + 1 − m \frac{T_{n+1}}{T_n}=\prod_{i=0}^{m-1}\frac{n+1-i}{N-i}\prod_{i=0}^{m-1}\frac{N-i}{n-i}=\frac{n+1}{n+1-m} TnTn+1=i=0m1Nin+1ii=0m1niNi=n+1mn+1
  最终它们之间的递归关系为:
T n + 1 = n + 1 n + 1 − m T n T_{n+1}=\frac{n+1}{n+1-m}T_n Tn+1=n+1mn+1Tn
  平均来说有 T n T_n Tn 个采样点集合只包含 U n \mathcal{U}_n Un 的数据点,有 T n + 1 T_{n+1} Tn+1 个采样点集合只包含 U n + 1 \mathcal{U}_{n+1} Un+1 的数据点。由于 U n + 1 = U n ∪ { u n + 1 } \mathcal{U}_{n+1}=\mathcal{U}_n\cup \{\textbf{u}_{n+1}\} Un+1=Un{un+1},所以就有 T n + 1 − T n T_{n+1}-T_n Tn+1Tn 个采样点集合包括一个数据点 u n + 1 \textbf{u}_{n+1} un+1 m − 1 m-1 m1 个来源于 U n \mathcal{U}_n Un 的数据点。所以让 n n n m m m 一直取值到 N − 1 N-1 N1,这样就可以随机且高效地得到采样点集合 M ( i ) M_{(i)} M(i).
  由于 T n T_n Tn 的值一般不是整数,我们令 T m ′ = 1 T&#x27;_m=1 Tm=1,并且有:
T n + 1 ′ = T n ′ + ⌈ T n + 1 − T n ⌉ T&#x27;_{n+1}=T&#x27;_n+\lceil T_{n+1}-T_n\rceil Tn+1=Tn+Tn+1Tn
  其中 ceil 括号表示取大于或等于括号中值的最小整数。所以生长函数可以被定义为:
g ( t ) = min ⁡ { n : T n ′ ≥ t } g(t)=\min\{n:T&#x27;_n\geq t\} g(t)=min{n:Tnt}
  这样第 t t t 个采样点集合 M t \mathcal{M}_t Mt 可以表示为:
M t = { u g ( t ) ∪ M t ′ } \mathcal{M}_t=\{\textbf{u}_{g(t)}\cup \mathcal{M}&#x27;_t\} Mt={ug(t)Mt}
  其中 M t ′ ⊂ U g ( t ) − 1 \mathcal{M}&#x27;_t\subset \mathcal{U}_{g(t)-1} MtUg(t)1 是一个包含 m − 1 m-1 m1 个来源于 U g ( t ) − 1 \mathcal{U}_{g(t)-1} Ug(t)1 的数据点的集合,这样参数 T N T_N TN就表示需要多少次采样,PROSAC 算法的效果会和 RANSAC 算法保持一致。

2.2 停止策略

  如果集合 U n ∗ \mathcal{U}_{n^*} Un 中的类内点数 I n ∗ I_{n^*} In 满足下面的条件,PROSAC 算法就停止:

  • 非随机性—— n ∗ n^* n 个数据点中的类内点恰好也是任意一个错误模型的类内点的概率小于 Ψ \Psi Ψ (一般设为 5 % 5\% 5%)
  • 极大性——存在一个解在 U n ∗ \mathcal{U}_{n^*} Un 中有比 I n ∗ I_{n^*} In 更多的类内点的情况,并且这种情况在 k k k 次采样后还未被发现的概率小于 η o \eta_o ηo (一般设为 5 % 5\% 5%)

  非随机性可以防止由类外点产生的模型也和算法一致。随机类内点集合的元素个数的分布是二项分布:
P n R ( i ) = β i − m ( 1 − β ) n − i + m ( n − m i − m ) P_n^R(i)=\beta^{i-m}(1-\beta)^{n-i+m}\binom{n-m}{i-m} PnR(i)=βim(1β)ni+m(imnm)
  其中 β \beta β 是与一个错误模型相对应的点不在采样点集合中的概率,并且该采样点集合包含一个类外点。(上面的公式可以这样理解:错误模型是由 m m m 个采样点确定的,得到与该模型相对应的点有 i ≥ m i\geq m im 个【 i i i 个点就是错误模型认为的类内点,也就是所谓的随机类内点集合】,那么不在采样点集合 M \mathcal{M} M 中的点有 i − m i-m im 个,数据集中的一个点是这样的点的概率为 β \beta β,所以可以得到随机类内点集合( ⊂ U n \subset \mathcal{U}_n Un)的元素个数为 i i i 的概率就是 P n R ( I ) . P_n^R(I). PnR(I).
  最少的类内点数 I n min ⁡ I_n^{\min} Inmin 可以通过下面的式子得到(也就是限制随机类内点集合元素数量较大的概率):
I n min ⁡ = min ⁡ { j : ∑ i = j n P n R ( i ) &lt; Ψ } I_n^{\min}=\min \{j:\sum_{i=j}^nP_n^R(i)&lt;\Psi\} Inmin=min{j:i=jnPnR(i)<Ψ}
  在 U n ∗ \mathcal{U}_{n^*} Un 中发现一个非随机的结果必须要满足:
I n ∗ ≥ I n ∗ min ⁡ I_{n^*}\geq I_{n^*}^{\min} InInmin
  极大性定义了需要多少次采样才能保证解的置信度,这也是 RANSAC 算法中唯一的停止策略。从 U n \mathcal{U}_n Un 中采样得到的 m m m 个点都来自于类内点的概率为:
P I n = ( I n m ) ( n m ) = ∏ j = 0 m − 1 I n − j n − j ≈ ε n m P_{I_n}=\frac{\binom{I_n}{m}}{\binom{n}{m}}=\prod_{j=0}^{m-1}\frac{I_n-j}{n-j}\approx \varepsilon_n^m PIn=(mn)(mIn)=j=0m1njInjεnm
  其中 I n I_n In U n \mathcal{U}_n Un 中类内点的数量, ε n = I n / n \varepsilon_n=I_n/n εn=In/n 表示类内点数的比例。那么 k k k 次采样也没有一次采样都是类内点的概率为( g ( k ) ≤ n g(k)\leq n g(k)n):
η = ( 1 − P I n ) k \eta=(1-P_{I_n})^k η=(1PIn)k
  所以在给定概率阈值 η o \eta_o ηo 的后,采样次数需要满足下面的条件:
k n ∗ ( η o ) ≥ log ⁡ ( η o ) / log ⁡ ( 1 − P I n ∗ ) k_{n^*}(\eta_o)\geq \log(\eta_o)/\log(1-P_{I_{n^*}}) kn(ηo)log(ηo)/log(1PIn)
  最终 n ∗ n^* n 的大小是在满足 I n ∗ ≥ I n ∗ min ⁡ I_{n^*}\geq I_{n^*}^{\min} InInmin 的条件下最小化 k n ∗ ( η o ) k_{n^*}(\eta_o) kn(ηo) 得到的。

  PROSAC算法
PROSAC算法伪代码

3. 实验

  作者在基于 SIFT 的图像匹配中使用了 PROSAC 算法,并和 RANSAC 进行了对比,详细的实验内容和参数参考文献[1],下面的图片完全是为了好看才放在这里的。
运动分割PROSAC
  下面补充我自己做的实验内容(代码链接):

  参考链接:

  1. RANSAC算法原理与源码解析
  2. openCV中的findHomography函数分析以及RANSAC算法的详解
  3. 要点初见:OpenCV3中ORB特征提取算法的实现与分析

  这里说明一下,实验的内容是计算单映矩阵,并实现对图像中特征点的匹配,并将模板区域在场景图中标出(参考上述链接1)。实现的效果如下图所示:
在这里插入图片描述
代码注意事项:

  • 代码使用 OpenCV3,使用 OpenCV2 的朋友参考上面的链接,修改部分代码就可以运行
  • 代码中没有实现对 β \beta β 的动态估计
  • 代码中对 k n ∗ ( η o ) k_{n^*}(\eta_o) kn(ηo) n ∗ n^* n 的计算可能不能用于其他任务中
  • 代码中排序的程序可以根据自己的需求进行修改
  • PROSAC代码的关键部分是自己写的,所以一定有很多错误以及性能上的不足,希望大家指出

4. 结论

  这种方法可以非常有效地节省运算量和时间。由于减少了一个相关性阈值参数,所以可以对多种情况的检测有比较好的鲁棒性。
  这里抱怨一下,这篇论文对于我来说实在是太难读懂了,一大堆从句让人抓狂。不过还是挺佩服这两个作者的,几乎所有的 RANSAC 相关的论文都是他们写的。

参考文献


  1. O. Chum and J. Matas, “Matching with PROSAC – Progressive Sample Consensus,” Proc. IEEE Conf. Computer Vision and Pattern Recognition, 2005. ↩︎

  2. M.A. Fischler and R.C. Bolles, “Random Sample Consensus: A Paradigm for Model Fitting with Applications to Image Analysis and Automated Cartography,” Comm. ACM, vol. 24, no. 6, pp. 381- 395,1981. ↩︎

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值