一、基本思想

它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。它于1981年由 Fischler和Bolles最先提出[1]。

二、算法描述

(1)输入:

1、判断样本是否满足模型的误差容忍度t。t可以看作为对内点噪声均方差的假设,对于不同的输入数据需采用人工干预的方式预设合适的门限,且该参数对RANSAC性能有很大的影响;

2、随机抽取样本集S的次数。该参数直接影响SC中样本参与模型参数的检验 次数,从而影响算法的效率,因为大部分随机抽样都受到外点的影响;

3、表征得到正确模型时,一致集S*的大小N。为了确保得到表征数据集P的正确模型,一般要求一致集足够大;另外,足够多的一致样本使得重新估计的模型参数更精确。

4、算法的迭代次数k。

5、适应于数据的模型model。

6、随机在样本抽样的数目n。

(2)算法流程:

1、考虑一个最小抽样集的势为n的模型(n为初始化模型参数所需的最小样本数)和一个样本集P,集合P的样本数num(P)>n,从P中随机 抽取包含n个样本的P的子集S初始化模型M;
    2、余集SC=P\S中与模型M的误差小于某一设定阈值t的样本集以及S构成S*。S*认为是内点集,它们构成S的一致集(Consensus Set);
    3、若#(S*)≥N,认为得到正确的模型参数,并利用集S*(内点inliers)采用最小二乘等方法重新计算新的模型M*;重新随机抽取新的S,重复以上过程。
    4、在完成一定的抽样次数后,若没找到一致集则算法失败,否则选取抽样后得到的最大一致集判断内外点,算法结束。

  (3)输出:

1、best_model —— 跟数据最匹配的模型参数(如果没有找到好的模型,返回null)
    2、best_consensus_set —— 估计出模型的数据点
    3、best_error —— 跟数据相关的估计出的模型错误

三、优缺点

RANSAC的优点是它能鲁棒的估计模型参数。例如,它能从包含大量局外点的数据集中估计出高精度的参数。RANSAC的缺点是它计算参数的迭代次数没有上限;如果设置迭代次数的上限,得到的结果可能不是最优的结果,甚至可能得到错误的结果。RANSAC只有一定的概率得到可信的模型,概率与迭代次数成正比。RANSAC的另一个缺点是它要求设置跟问题相关的阀值。RANSAC只能从特定的数据集中估计出一个模型,如果存在两个(或多个)模型,RANSAC不能找到别的模型。

四、应用

RANSAC算法经常用于计算机视觉,例如同时求解相关问题与估计立体摄像机的基础矩阵。

五、伪代码描述

输入:
data —— 一组观测数据
model —— 适应于数据的模型
n —— 适用于模型的最少数据个数
k —— 算法的迭代次数
t —— 用于决定数据是否适应于模型的阀值
d —— 判定模型是否适用于数据集的数据数目
输出:
best_model —— 跟数据最匹配的模型参数(如果没有找到好的模型,返回null)
best_consensus_set —— 估计出模型的数据点
best_error —— 跟数据相关的估计出的模型错误

iterations = 0
best_model = null
best_consensus_set = null
best_error = 无穷大
while ( iterations < k )
    maybe_inliers = 从数据集中随机选择n个点
    maybe_model = 适合于maybe_inliers的模型参数
    consensus_set = maybe_inliers

for ( 每个数据集中不属于maybe_inliers的点 )
        if ( 如果点适合于maybe_model,且错误小于t )
            将点添加到consensus_set
    if ( consensus_set中的元素数目大于d )
        已经找到了好的模型,现在测试该模型到底有多好
        better_model = 适合于consensus_set中所有点的模型参数
        this_error = better_model究竟如何适合这些点的度量
        if ( this_error < best_error )
            我们发现了比以前好的模型,保存该模型直到更好的模型出现
            best_model =  better_model
            best_consensus_set = consensus_set
            best_error =  this_error
    增加迭代次数

返回 best_model, best_consensus_set, best_error

六、优化策略

①如果在选取子集S时可以根据某些已知的样本特性等采用特定的选取方案或有约束的随机选取来代替原来的 完全随机选取;

②当通过一致集S*计算出模型M*后,可以将P中所有与模型M*的误差小于t的样本加入S*,然后重新计算M*。

七、参考

http://www.cnblogs.com/tjulxh/archive/2011/12/31/2308921.html

http://blog.csdn.net/xufuyuan/article/details/7106040

RANSC算法(随机样本一致性)相关推荐

  1. 3月9日 笔记:RANSAC随机样本一致性,灭点、对极几何计算、H矩阵、PNP估计相机位置,3D匹配、投影变换、N点定位求解姿态

    [修订]: 2020-03-11:特征匹配 分为:(1)2D-2D : (2)2D-3D : (3)3D-3D https://www.zhihu.com/question/51510464 2D-2 ...

  2. hash算法_一致性hash算法简介

    一致性hash算法有什么用?我们为什么需要一致性hash算法?这两个问题的答案可以看这篇文章 分布式系统路由算法简介. 了解了一致性hash算法出现的背景,我们来看看什么是一致性hash算法.一致性h ...

  3. 一致性哈希算法 mysql_一致性哈希算法,在分布式开发中你必须会写,来看完整代码...

    今天我想先给大家科普下一致性哈希算法这块,因为我下一篇文章关于缓存的高可用需要用到这个,但是又不能直接在里面写太多的代码以及关于一致性hash原理的解读,这样会失去对于缓存高可用的理解而且会造成文章很 ...

  4. 【算法】一致性哈希算法原理详解

    一.普通 hash 算法 (取模算法): 在了解一致性哈希算法之前,我们先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那 ...

  5. 哈希算法——murmurhash一致性哈希算法

    Murmurhash: 是一种非加密型哈希函数,适用于一般的哈希检索操作.高运算性能,低碰撞率,由Austin Appleby创建于2008年,现已应用到Hadoop.libstdc++.nginx. ...

  6. 大话分布式理论之二——共识算法与一致性的区别

    [系列目录] 大话分布式理论之二--共识算法与一致性的区别 大话分布式理论之一--从单体到SOA再到微服务 文章目录 共识算法 拜占庭将军问题 分布式理论中的将军们 共识算法-Paxos/Raft等 ...

  7. 软考2022高级架构师下午案例分析第4题:关于哈希算法、一致性哈希算法和布隆过滤器

    目录 [说明] [问题1] [问题2] [问题3] [说明] 某大型电商平台建立了一个在线 B2B 商店系统,并在全国多地建设了货物仓储中心,通过提前备货的方式来提高货物的运送效率.但是在运营过程中, ...

  8. 什么是一致性哈希算法?一致性哈希算法原理刨析

    一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,目的是解决分布式缓存的问题. 在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系.一致性哈 ...

  9. 【算法】哈希算法——murmurhash一致性哈希算法

    Murmurhash: 是一种非加密型哈希函数,适用于一般的哈希检索操作.高运算性能,低碰撞率,由Austin Appleby创建于2008年,现已应用到Hadoop.libstdc++.nginx. ...

最新文章

  1. init/main.c中的void init(void)
  2. 推荐几款vs2005的插件
  3. 自动化测试框架搭建-报告-4
  4. jQuery中操作元素节点appendTo()与prependTo()的区别
  5. 让线程等待10秒_把python程序变成多线程
  6. 互联网产品 从设计到运营 这中间提高须要关注的站点
  7. ReactNative之Flex布局总结
  8. IE8 新增的Javascript,css功能
  9. js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
  10. C++学生信息管理系统
  11. 2022电大国家开放大学网上形考任务-民事诉讼法学非免费(非答案)
  12. HDFS和FastDFS的上传、下载效率对比测试
  13. 腾讯应用宝市场的app 安全评估报告怎么写
  14. 智能家居的春天来临 曾经共患难的集成商如今能同享福吗?
  15. mysql -关联查询与分组查询
  16. Spring Boot 升级所遇到的坑们s 1.5.x升级到2.1.x
  17. SciDAVis:替代Origin的免费绘图软件之一
  18. Mac将运行iPhone和iPad应用程序:这是运行方式
  19. Origin如何做单因素方差分析
  20. 船舶水位检测系统解决方案

热门文章

  1. Android 用adb 打印linux内核调试信息dmesg和kmsg命令
  2. 仅仅用几行python代码偷偷复制U盘文件
  3. 【java设计模式】之 代理(Proxy)模式
  4. pyCharm 当中使用VirtualEnv
  5. 获取RadioButton选中的值
  6. Swing中事件的三种处理方法
  7. 让Windows 7揪出每一个暗中运行程序
  8. linux非root安装go,linux – go install总是使用GOROOT / bin而不是GOPATH
  9. Ethernet/IP 学习笔记二
  10. SpeedNet: Learning the Speediness in Videos