文章目录

  • 1 算法简介
  • 2 基本思想
  • 3 参数
  • 4 应用案例(直线拟合)

1 算法简介

RANSAC算法的基本假设是样本中包含正确数据(inliers,可以被模型描述的数据),也包含异常数据(outlies,偏离正常范围很远、无法适应数学模型的数据),即数据集中含有噪声。这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。

2 基本思想

RANSAC基本思想描述如下:

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

3 参数

t —— 用于决定数据是否适应于模型的阀值

N —— 判定模型是否适用于数据集的数据数目

k —— 迭代次数

我们不得不根据特定的问题和数据集,通过实验来确定参数t和N。然而参数k(迭代次数)可以从理论结果推断。当我们在估计模型参数时,用p表示一些迭代过程中从数据集内随机选取出的点均为局内点的概率;此时,结果模型很可能有用,因此p也表征了算法产生有用结果的概率。用w表示每次从数据集中选取一个局内点的概率,如下式所示:

w = 局内点的数目 / 数据集的数目

通常情况下,我们事先并不知道w的值,但是可以给出一些鲁棒的值。假设估计模型需要选定n个点, 是所有n个点均为局内点的概率;1− 是n个点中至少有一个点为局外点的概率,此时表明我们从数据集中估计出了一个不好的模型。表示算法永远都不会选择到n个点均为局内点的概率,它和1-p相同。因此,


值得注意的是,这个结果假设n个点都是独立选择的;也就是说,某个点被选定之后,它可能会被后续的迭代过程重复选定到。这种方法通常都不合理,由此推导出的k值被看作是选取不重复点的上限。例如,RANSAC算法拟合直线时,通常在每次迭代时选取2个点,计算通过这两点的直线maybe_model,要求这两点必须唯一。

为了得到更可信的参数,标准偏差或它的乘积可以被加到k上。k的标准偏差定义为:

4 应用案例(直线拟合)

  1. 随机选取2个点
  2. 由这2个点计算直线方程
  3. 计算所有点到直线的距离
  4. 得到满足条件(点到直线的距离小于预先设定的某个值)的点的数量
  5. 循环1-4步骤,记录点数最多的那组直线

与最小二乘法拟合直线的对比如下图:


其他应用

  • 特征点匹配滤除误匹配的点

  • 相机位姿估计

  • 图像拼接和点云匹配融合等

RANSAC算法简介相关推荐

  1. RANSAC算法及其代码解析

    RANSAC算法简介 随机抽样一致性算法(Random sample consensus,RANSAC)是一种使用迭代的方法,从受噪声污染的数据集中估计数学模型参数的算法,与最小二乘法所起作用相同,各 ...

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

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

  3. 计算机视觉——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 高斯金字塔 ...

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

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

  5. SIFT特征点匹配中KD-tree与Ransac算法的使用

    转自:http://blog.csdn.net/ijuliet/article/details/4471311 Step1:BBF算法,在KD-tree上找KNN.第一步做匹配咯~ 1.什么是KD-t ...

  6. OpenCV 4.5发布!更强的SIFT,OCR,RANSAC算法,新增目标跟踪网络SiamRPN++

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 OpenCV 4.5版本发布了! 详情:https://github.com/opencv/openc ...

  7. 数据结构与算法:算法简介

    数据结构与算法:算法简介 雪柯 大工生物信息 提笔为写给奋进之人 已关注 你说呢 . shenwei356 等 70 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国 ...

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

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

  9. Minimax 和 Alpha-beta 剪枝算法简介,及以此实现的井字棋游戏(Tic-tac-toe)

    前段时间用 React 写了个2048 游戏来练练手,准备用来回顾下 React 相关的各种技术,以及试验一下新技术.在写这个2048的过程中,我考虑是否可以在其中加入一个 AI 算法来自动进行游戏, ...

  10. 推荐系统算法_机器学习和推荐系统(二)推荐算法简介

    推荐算法简介 一. 基于人口统计学的推荐算法 二.基于内容的推荐算法 三. 基于协同过滤的推荐算法 协同过滤(Collaborative Filtering , CF) 基于近邻的系统过滤 基于用户( ...

最新文章

  1. flask项目中无法更改端口号
  2. ActivityRecord、TaskRecord、ActivityStack相互关系以及Activity启动模式
  3. Idea-LifecycleException when deploying
  4. NSTimer与Run loop Modes
  5. 我为什么要冒险从工业界离职做内容平台有三AI
  6. Here Document和Expect概述(免交互,变量设定,控制,注释,)(shell里使用EOF报错)
  7. eltree ref什么时候有_DBA:为什么你老写慢SQL
  8. linux 文件大小_整理 | Linux下列出目录内容命令
  9. 使用JavaScript的Platformer游戏教程
  10. 图解TCP 的重传、滑动窗口、流量控制和拥塞控制机制
  11. Futter基础第10篇: 实现替换路由、返回到根路由
  12. lvm 的用法和小案例
  13. 【转载】 CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)概念区分理解
  14. 机器学习Machine Learning学习笔记——回归Regression
  15. python -m spacy dowmload en失败
  16. 白大脑比超级计算机还,《精灵宝可梦》图鉴376:大脑的运算速度堪比计算机——巨金怪...
  17. 图扑数字孪生军演,构建跨域作战体系
  18. android手机时钟、闹钟、计时器、秒表app源码
  19. MSXML2.DOMDocument
  20. Android--百度地图学习笔记(二)--167错误、定位到非洲

热门文章

  1. 使用Excel背单词-高效-简单
  2. linux ftp命令下载目录,linux命令行下的ftp 多文件下载和目录下载
  3. 拼多多API接口调用方法(内附上多个可用API)
  4. JAVA-消息队列及分布式消息队列原理
  5. DNS原理及解析过程
  6. antd 设置表头属性_React表格固定表头/锁定列
  7. Axure 元件 模板 MES系统 全套(带下载地址)
  8. oracle exadata咨询,Oracle Exadata专家手册
  9. mysql类exadata功能_一些有用的Exadata诊断命令
  10. python五笔输入法_centos下安装五笔输入法的教程