原文:

http://blog.csdn.net/lanbing510/article/details/50053865


图像配准对于运动平台(无人机,移动机器人)上的视觉处理有着极其重要的作用。配准算法的第一步通常是找到两幅图像中一一对应的匹配点对(特征点提取、描述、点对匹配),然后通过匹配点对求取变换矩阵。在图像特征点匹配之KD-Tree一文中讲了配准中第一步中的点对匹配方法,本文将集中讨论配准第二步。

在获得匹配点对后,我们需要从中选取一定的匹配正确的点对计算变换矩阵,对于透射变换,需要选取4组点对,对于仿射变换,需要选取3组。但现在的问题是,我们获得的匹配点对中不能保证所有的匹配都是正确的,如何从中选取正确的匹配点对来计算变换矩阵,这就需要利用下面要讲到的匹配对提纯的问题。

匹配对提纯算法可分为两类:比值提纯法与一致提纯法。比值提纯法就是在图像特征点匹配之KD-Tree一文中进行最近邻查询的时候,也对次近邻的距离进行查询,最后保留最近邻>=次近邻*THR(一般取THR=0.49)的匹配点对来进行提纯,不予细述。。下面将对一致提纯法进行详述,主要介绍常用的最小中值法(LMedS)、M估计(M-estimators)与随机采样一致算法(RANSAC)。

最小中值法(LMedS)


LMedS的做法很简单,就是从样本中随机抽出N个样本子集,使用最大似然(通常是最小二乘)对每个子集计算模型参数和该模型的偏差,记录该模型参数及子集中所有样本中偏差居中的那个样本的偏差(即Med偏差),最后选取N个样本子集中Med偏差最小的所对应的模型参数作为我们要估计的模型参数。

最小中值法可用数学表达简练的表达为:

θ=argθminmedi∈Nri(xi,θ)

θ为拟合模型参数,ri(xi,θ)是模型第i个点的残留误差,N是我们随机抽出的样本子集,med为中值操作。

M估计(M-estimators)


对于含有外点的数据,如果对所有样本点使用一样的权重,在拟合模型时外点对模型会有较大的干扰,由此为出发点想到,如果降低外点的权重,则可以降低外点对模型的影响,这也就是M估计的一个思想。但问题是我们怎么知道哪些是外点呢,M估计中将与所估计模型偏差大的点视为外点,降低与模型偏差越大的点的权重。

一个M估计通过最小化下面的表达式来估计参数:

θ=argθ∑iρ(ri(xi,θ);σ)

一般的为了降低偏差大的点的影响,ρ(μ,σ)函数随着μ的增加变平。常用的选择是:

ρ(μ,σ)=μ2σ2+μ2

σ参数是控制函数变平点的变量,下图是当σ2=0.1,1,10时画的rho(x,σ)=x2σ2+x2

通过引入ρ,M估计可以保证外点作用被衰减的程度要比它们产生平方误差的程度要高。

从M估计的数学表达可以看出,问题是非线性的,必须迭代求解,下面是具体求解算法:

算法1 用M估计拟合概率模型参数

对于s从1到k

均匀随机抽取r个不同点组成样本子集

用最大似然(通常是最小二乘)对抽取的点集进行拟合获得θ0s

用θn−1s估计σn−1s,一个流行的估计式是:σn−1=1.4826mediani|rni;θn−1|

直到收敛(|θns−θn−1s|非常小)

用最小化方法通过θn−1s,σn−1s得到θns

计算σns

End

End

使用残差的中值作为准则获得这个集合的最好拟合,用最好拟合的参数作为模型的参数

随机采样一致算法(RANSAC)


M估计计算复杂性较高。另外一种最常用的方法是随机采样一致算法(RANSAC,Random Sample Consensus)。它的基本思路是随机选择一个小的数据点子集,然后对其进行拟合,查看有多少其他点匹配到拟合的模型上,迭代这个过程直至有较大的概率找到我们想要拟合的模型。

我们先看下RANSAC的算法流程,然后对其中的步骤进行详细阐述。

算法2 用随机采样一致(RANSAC)拟合概率模型参数

确定:

n——所需要的最少点数

k——需要的迭代次数

d——判断一个点是否拟合的很好的阈值,也称内外点距离阈值

t——判断一个模型是否拟合的很好所需要的邻近点数目,也称一致性集合大小阈值

直到k次迭代完成

从数据中均匀的采样n个点

对这n个点进行模型拟合

对于采样外的每个点

用d比较点到拟合模型的距离,如果距离小于d,则认为点是靠近的

End

如果有t个或者更多的点靠近模型,则认为该拟合是个好的拟合,重新用这些点和靠近的点拟合模型。

End

使用拟合误差最小的所对应的参数作为该模型的估计参数。

RANSAC的难点是n,k,d,t这几个参数的确定,下面就怎么确定参数做简单的讨论。

一、最少点数n的确定

相对比较容易,根据要拟合的模型确定。例,如果拟合一天直线,最少需要两个点;对于图片配准,拟合透射变换矩阵最少需要4租点对,拟合仿射变换,最少需要3组点对。

二、迭代次数k的确定

令w为数据是真实数学模型内点的概率,则一次估计中所有n个点(确定模型参数的最小点数)都为内点的概率为wn。我们需要保证k次迭代中至少一次估计中所有数据点都是内点的概率p较大,则k需要满足:

1−p=(1−wn)k⇒k=log(1−p)log(1−wn)

其中p取一个较大的值。

三、内外点距离阈值d的确定

这个阈值用来判断数据点是内点或是外点,没有一个统一的方法,只能通过实验得到。

四、一致性集合大小阈值t的确定

令数据点集中外点的概率为y,我们需要选择t个点使得yt很小(比如小于0.05)。y通常是无法精确的估计,如果真实模型中内点占优势,经过随机采样后y一般比(1−w)要小,即可由y≤(1−w)。

确定这些参数后就可以用RANSAC算法估计模型参数了。

小注


图像配准过程中匹配点提纯最常用的算法是RANSAC,其收敛速度快,在噪声点(外点)较多时也能有不错的表现。

参考文献


[1] 图像局部不变性特征与描述.王永明 王贵锦. 国防工业出版社.

[2] Computer Vision: A Modern Approach. David A. Forsyth and Jean Poince.

相机模型与标定(十一)--LMEDS,M估计,RANSAC估计对比相关推荐

  1. 相机模型与标定(一)--相机标定概述

    以下内容来自: http://baike.baidu.com/link?url=RAjUg33ftcbDDjE_tFKS80p_azC9REyLOzBTbqqSq5iIIXo0sp20NJk28RW- ...

  2. 《Learning OpenCV3》ch18:相机模型与标定

    省赛期间用到双目视觉的时候,只是很粗浅地调用了下API,毕竟初学而且时间紧迫.最近打算跟一个硕士生再做一个相关项目,而且也想用Stereo Vision作为毕业设计,所以很有必要了解一下其中的原理.最 ...

  3. 相机模型与标定(十三)--鱼眼相机标定

    原文: http://blog.csdn.net/u010784534/article/details/50474371 先看一张鱼眼相机拍摄出来的结果: 从图中可以看出很明显的畸变.对鱼眼相机标定, ...

  4. 相机模型与标定(十)--RANSAC算法

    转自王先荣先生: http://www.cnblogs.com/xrwang/archive/2011/03/09/ransac-1.html 本文翻译自维基百科,英文原文地址是:http://en. ...

  5. 相机模型与标定(八)--传统相机标定算法简介

    原文: http://blog.sina.com.cn/s/blog_b364631a0101iopy.html 一.相机数学模型 相机模型为以后一切标定算法的关键,只有这边有相当透彻的理解,对以后的 ...

  6. 相机模型与标定(四)--opencv单目标定例子使用说明

    原文: http://blog.csdn.net/t247555529/article/details/47836233 最近一个项目要进行相机的标定,作为一个菜鸟,瞎搞一下午才搞定,于是写篇博客记录 ...

  7. 相机模型与标定(二)--相机模型

    原文: http://blog.csdn.net/lsh_2013/article/details/47615309 相机模型 数码相机图像拍摄的过程实际上是一个光学成像的过程.相机的成像过程涉及到四 ...

  8. SLAM中常用的相机模型及标定工具

    最近一段时间准备作多传感器的SLAM研究,第一步是要解决传感器间的联合标定.所要开展实验的机器人平台配置了相机.单线雷达和IMU,自然而然地,首先是要先确定各个传感器的内参数,然后再确定传感器之间的外 ...

  9. 相机模型与标定(十四)--误差分析

    原文: http://blog.sina.com.cn/s/blog_a492c33d0101d97n.html 看到论坛里有不少人在用OpenCV中的标定函数cvCalibrateCamera2 进 ...

最新文章

  1. 让智能手机和居家电脑互联互通(WM6 GPRS)
  2. 测试在MicroPython中对于main.py进行修改
  3. Java面试题基础知识(收集)
  4. 微信小程序asp服务器架设,asp写的微信小程序支付demo-服务器端是asp+mdb的
  5. python如何处理表格_Python是如何处理Excel表格的?方法简单!
  6. 技术上根本不思进取的金山词霸2007
  7. 工信部:2019年全国继续加大网络提速降费力度
  8. iOS archive(归档)的总结 (序列化和反序列化,持久化到文件)
  9. dell服务器无线网卡,dell笔记本内置无线网卡找不到怎么处理
  10. python遍历文件夹下所有文件
  11. Dijkstra算法
  12. 仿真BPSK调制在AWGN信道下分别使用卷积码和未使用卷积码的性能对比,其中,卷积码的约束长度为7,生成多项式为[171,133],码率为1/2,译码分别采用硬判决译码和软判决译码
  13. Vue中使用地图平台MapboxGL
  14. 美标线材AWG能通过电流到底多大?
  15. 2019年什么工作最有前景?互联网/IT行业职业方向大盘点!
  16. 破解STM32F103芯片的方法
  17. ubuntu卸载xilinx
  18. app中jeDate日期控件的使用
  19. Ansible纸上谈兵01:认识一下Ansible
  20. android 背光灯分析,Android灯光系统--深入理解背光灯

热门文章

  1. Abseil之New Join API
  2. LED显示驱动(六):LED显示设备显示单层图片调试(DE驱动测试)
  3. python中pass的用法_python学习之getpass模块使用
  4. 车子前进档为什么往后退_「前推倒车·后拉加速」自动挡的档杆为什么设计的这么奇怪?...
  5. tomcat套接字接受失败_07 | What? 还有本地套接字?
  6. 联想电脑锁屏界面设置被组织隐藏_Word Clock数字时钟动态屏保,让你的电脑锁屏瞬间科技感十足!...
  7. mysql多表关联update
  8. srgan要训练多久_有氧运动要多久才开始消耗脂肪?
  9. pcl 使用gpu计算法向量_异构计算系列文章(一):定义、场景及局限性
  10. C语言有好多7,[c语言]有1到100个数,现在从中提取7、和个位或十位上有7的数、以及7的倍数,然后输出。...