自适应采样次数的Ransac算法

  • Ransac基本思想
  • 自适应采样次数的Ransac算法原理

对数据进行拟合操作的同学肯定对Ransac算法不陌生,之前接触过一段时间,最近有空才把这么经典的一个算法分享给大家。RANSAC(RAndom SAmple Consensus,随机采样一致)算法是从一组含有“外点”(outliers)的数据中正确估计数学模型参数的迭代算法。“外点”一般指的的数据中的噪声,比如说匹配中的误匹配和估计曲线中的离群点。所以,RANSAC也是一种“外点”检测算法。RANSAC算法是一种不确定算法,与通常的光滑技术相反:不是用尽可能多的点去获得一个初始解,并在以后消除无效点,而是使用满足可行条件的尽量少的初始数据集,并在可能时用一致性数据集扩大它。

Ransac基本思想

RANSAC是通过反复选择数据集去估计出模型,一直迭代到估计出认为比较好的模型。 具体的实现步骤可以分为以下几步:

 1.选择出可以估计出模型的最小数据集;(对于直线拟合来说就是两个点,对于计算Homography矩阵就是4个点) 2.使用这个数据集来计算出数据模型;3.将所有数据带入这个模型,计算出“内点”的数目;(累加在一定误差范围T内的适合当前迭代推出模型的数据) 4.比较当前模型和之前推出的最好的模型的“内点“的数量,记录最大“内点”数的模型参数和“内点”数; 5.重复1-4步,直到迭代结束或者当前模型已经足够好了(“内点数目大于一定数量”)。

以上的算法是最简单的版本,该算法有缺陷。因为迭代结束的条件没法很好的确定,准确来说,就是无法确定最大迭代次数,以及内点比阈值。那么有没有一种改进的方法可以不用这么麻烦的人为设定这些经验值呢?答案是有的,这个就是下面讲的自适应迭代次数的方法。

自适应采样次数的Ransac算法原理

设ω=内点个数所有点个数\omega=\frac{内点个数}{所有点个数}ω=所有点个数内点个数​,ω\omegaω为任意选择的数据点为内点的概率,
那么p0=ωnp_0=\omega ^np0​=ωn表示采样的n个点全为内点的概率(可重复)。
则采样点中至少有一个为外点的概率p1=1−p0=1−ωnp_1=1-p_0=1-\omega ^np1​=1−p0​=1−ωn
则重复K次实验,每次都至少有一个外点的概率p2=p1k=(1−ωn)kp_2=p_1^k=(1-\omega ^n)^kp2​=p1k​=(1−ωn)k
则K次采样中至少一次采样是全为内点的概率为:p=1−p2=1−(1−ωn)kp=1-p_2=1-(1-\omega ^n)^kp=1−p2​=1−(1−ωn)k
即:1−p=(1−ωn)k1-p=(1-\omega ^n)^k1−p=(1−ωn)k

k=log(1−p)log(1−ωn)k=\frac{log(1-p)}{log(1-\omega ^n)}k=log(1−ωn)log(1−p)​(1)
这个k即采样次数。
有的版本算法喜欢将里面的ω\omegaω替换成ε=1−ω\varepsilon=1-\omegaε=1−ω,即外点概率。
那么自适应算法伪代码如下:
1、 k=∞k=\inftyk=∞,sample_count=0
2、while(kkk>sample_count)
\space\space\space\space\space     选取一个样本并计算内点数
\space\space\space\space\space     令ω=内点数总点数\omega=\frac{内点数}{总点数}ω=总点数内点数​
\space\space\space\space\space     取p=0.99p=0.99p=0.99并由ω\omegaω及式(1)求k
\space\space\space\space\space     sample_count=sample_count+1
3、结束
以上便是确定Ransac样本次数的自适应算法。
注意:由于内点占比ω\omegaω的初始值未知,我们可以从最坏的估计开始,即设ω\omegaω为0,此时k的初始值无穷大。当发现有更大的一致集就把原估计更新。至于p的值取0.99,则是为了保守起见。实际意义可以理解为进行k次采样,至少一次采样是全为内点的概率为0.99,这个就是我们对需要拟合的数据的期望。
如有错误的地方,望各位指正。

自适应采样次数的Ransac算法相关推荐

  1. RANSAC算法(仅供学习使用)

    1.定义 RANSAC(Random Sample Consensus)算法是一种基于随机采样的迭代算法,用于估计一个数学模型参数.它最初由Fischler和Bolles于1981年提出,主要用于计算 ...

  2. openCV中的findHomography函数分析以及RANSAC算法的详解(源代码分析)

    本文将openCV中的RANSAC代码全部挑选出来,进行分析和讲解,以便大家更好的理解RANSAC算法.代码我都试过,可以直接运行. 在计算机视觉和图像处理等很多领域,都需要用到RANSAC算法.op ...

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

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

  4. RANSAC算法原理与应用(1)

    文章目录 前言 案例(直线RANSAC) RANSAC 抽样次数 距离阈值 终止阈值 最终估计 参考文献 前言 随机采样一致性(random sample consensus,RANSAC)是一种对带 ...

  5. RANSAC算法(附RANSAC直线拟合C++与Python版本)

    文章目录 RANSAC算法简介 RANSAC算法基本思想和流程 迭代次数推导 RANSAC与最小二乘区别 RANSAC直线拟合代码(C++及Python版本) C++版本代码 Python版本代码如下 ...

  6. RANSAC算法(2):(拟合平面)本文以地面为基础以及源码分布解读

    本章代码是本人根据一个未曾谋面的好人学习的(要怀抱希望,世界上好人真的是很多的,我要做一个去给别人带去正能量积极态度的人,加油喽),如需转载学习请注明.谢谢 ---------------基于rans ...

  7. 机器视觉:ransac算法详解

    一.说明: 在线性回归问题中,采样点具备明显的线性相关性:如下图左.然而有些情性中,噪声很大,线性性散布在非线性点的噪声中,将无法用线性回归 的方法进行直线提取. 随机样本一致性 (RANSAC) 是 ...

  8. (二十二)用RANSAC算法来求线性回归模型的参数

    线性回归模型 一.什么是线性回归? 举个例子, 某商品的利润在售价为2 元. 5 元. 10 元时分别为 4 元. 11 元. 20 元, 我们很容易得出商品的利润与售价的关系符合直线:y=2x. 在 ...

  9. 计算机视觉——SIFT特征提取与检索+匹配地理标记图像+RANSAC算法

    SIFT特征提取与检索 1. SIFT算法 1.1 基本概念 1.2 SIFT算法基本原理 1.2.1 特征点 1.2.2 尺度空间 1.2.3 高斯函数 1.2.4 高斯模糊 1.2.5 高斯金字塔 ...

最新文章

  1. 公司数据部培训讲义:ArcMap数字化培训教程
  2. 利用OpenCV的函数createTrackbar创建滑动条查看二值化的最优阈值的源码及讲解
  3. 【BZOJ】2190 [SDOI2008]仪仗队
  4. SmartUpload上传下载及文件名和文件内容中文问题
  5. C语言fscanf函数了解
  6. java word在线预览_java 生成word文档并且在线预览的问题
  7. jquery+ajax 实现text框模糊搜索并可利用listbox实时显示模糊搜索列表结果
  8. element动态form实现
  9. python列表套着列表_python 列表套列表去重
  10. 华为交换机一次性进入多个接口_华为交换机交换机常用配置(认证、批量操作)...
  11. CentOS 7下使用chkconfig添加的服务无法使用/etc/profile里面的环境变量
  12. [转载] python面向对象编程实例
  13. YBT 2.4 AC自动机
  14. linux 防火墙管理
  15. mac储存文件应该放在哪里_单位不能存档,个人档案应该放在哪里呢,影响今后退休金吗?...
  16. Redis集群环境下分布式锁方案-RedLock算法
  17. 9种常见的反爬虫策略思路
  18. java实现微信二维码支付
  19. 腾讯校招软件测试工程师题库
  20. 教你炒股票25:每日解盘

热门文章

  1. 15个优秀的第三方 Web 技术集成
  2. Zabbix 系统监控(二)Linux 系统监控
  3. ip和nmcli命令的的使用方法
  4. 【Oracle】DataGuard中 Switchover 主、备切换
  5. WebAPI框架里设置异常返回格式统一
  6. C语言异常处理机制——为您的C程序添加异常处理
  7. 一处折腾笔记:Android内嵌html5加入原生微信分享的解决的方法
  8. 解决vi/vim中粘贴会在行首多很多缩进和空格的问题
  9. fastclick.js解决移动端(ipad)点击事件反应慢问题
  10. DB2 sql报错后查证原因与解决问题的方法