拟合与估计问题中的鲁棒方法

在一般的拟合与估计算法中,一般均假设测量数据点误差来源仅发生在对该点的位置测量,并服从高斯分布(如最小二乘)。实际情况中,普遍存在一些测量数据点的数值由于前级测量失效、突发干扰等原因而严重偏离真实值。这些测量数据点对于高斯(或其他类型)误差分布来说是外点(outlier),或称错误点。即使外点的数量极少,但由于其数值很大,故若使用一般线性估计方法,得到的估计值会由于少数的扰动而与真实值有极大的偏差。因此,必须使用某种方法识别外点,并在拟合估计运算前进行剔除。本文介绍常用的三种方法:RANSAC方法、M-估计、最小中值估计。此外还有最大后验RANSAC方法数学理论较复杂,详情请参阅文献1
由于鲁棒算法均为尝试型算法,在具体实现中需要将拟合估计算法包裹起来作为内循环,以估计的偏差大小控制外循环的算法流程及终止条件。

RANSAC方法

对于一般模型 M 和给定的测量数据点集 D,RANSAC估计模型参数 p 的步骤如下:
1. 设估计模型参数 p 所需的最小数据点数为 n 。由 n 个数据点组成的子集称为模型 M 的一个样本
2. 从数据点集 D 中随机抽取一个样本 J ,由该样本计算模型的一个实例 Mp(J),确定与 Mp(J) 之间几何距离小于阈值 t 的数据点所构成的集合,称为实例 Mp(J)一致集,记为 S(Mp(J))
3. 经过 K 次随机抽样,选择数据点的个数 #S(Mp(J))最大的一致集 S(Mp(J)) ,用 S(Mp(J)) 重新估计模型 M ,最后输出结果

几点说明:

  • 选择抽样次数K的依据是以某个极大的概率(如0.98)抽到不含外点的好样本,可通过K的期望和标准差估计得到。每个样本需要的数据点个数越少,所需抽样次数越少(指数级)。
  • 理论上,希望选择距离阈值t使得内点被接受的概率是 α,这在实践中是非常困难的,需要知道内点到模型之间几何距离的概率分布。故通常由经验选取。

    • 终止条件一般使用内点比例 w 、正确概率αf估计一个抽样次数,如果一致集大小相当于数据集的内点规模则终止。正确概率一般人工指定,内点比例采用自适应算法,初始时给出一个最保守(悲观)的内点比例估计,并由此确定抽样次数,在抽样过程中,一旦发现更大的内点比例,则按新比例更新该抽样次数。该算法保证了抽样次数,并且一定终止,是一种值得推荐的算法。
    • 在OpenCV中,函数SolvePnPRansac findHomography内部调用了RANSACPointSetRegistrator类进行RANSAC解算,详见这篇博客

      此外还有改进的PROSAC2方法,将点初始集匹配的结果作为排序的依据,使得在采样时根据匹配结果由高到低的得分进行排序,这样最有可能得到最佳参数的采样会较早出现,提高了速度。

      M-估计

      在M-估计中,对残差进行饱和函数运算,限制单个数据点对于误差函数的影响力。其思想类似于L1的稀疏性。
      使用的函数称为M-估计子,如通常使用的Huber估计子为

      ρ(t;σ)={t2σ2|t|<σ|t|>=σ

      在残差较小时取值为残差的平方,残差较大时取一个常值的平方。
      另一些选择
      ρ(t;σ)=t2t2+σ2

      ρ(t;σ)=t2σ|t|0|t|<σσ<=|t|<3σ|t|>=3σ

      最后这个估计子当残差较大时,被认为是错误的,在估计中不起作用。这是设置估计子是比较合理的,然而使得求解变为非凸优化,较难。

      最小中值估计

      最小中值方法通过求解下述最小化问题来估计模型参数

      Min Median{|r2j(xj,p)|}

      与RANSAC相比,不采用一致集内点的个数来衡量样本的好坏,而是根据样本,计算所有数据点到样本的偏差,以偏差的中位数衡量样本好坏,从而避免了使用划分内点和外点距离阈值的先验知识。缺点是,要求错误数据点必须小于50%才能取得正确结果。
      当数据测量误差符合高斯分布时,最小中值方法的效率非常差。


      1. 吴福朝. 计算机视觉中的数学方法. 科学出版社. 2008.3
      2. O. Chum and J. Matas, “Matching with PROSAC—Progressive Sample Consensus,” Proc. IEEE Conf. Computer Vision and Pattern Recognition, 2005.
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值