RANSAC的实现与应用

news2024/9/22 15:36:04

一、前言

RANSAC(Random Sample Consensus)算法并不陌生,在上一篇博客中(基于SIFT的图像Matlab拼接教程)也提到过,之前代码中也多次用过,其在直(曲)线拟合、特征匹配、过滤外点(Outlier)等领域有着重要的应用。RANSAC出现的原因以及重要意义在于:虽然最小二乘可以十分有效地进行拟合,但其对离群点非常敏感,在离群点出现的情况下很有可能出现“一颗老鼠屎坏一锅汤”的情况。RANSAC就是为了解决这个问题而产生的。

二、介绍

正如其名字所说,RANSAC的核心思想是随机采样一致性,类似于投票:当有最多数据点符合某个模型时,即认为该模型是正确的,并且根据其算出的、误差在阈值内的数据点为内点。简单描述算法过程是:首先从数据点中随机选择指定数量的点构建模型,然后将全部数据点带入构建的模型中,若计算得到的结果与真实数据差异小于误差阈值,则认为其是内点,否则认为是外点。统计全部数据点中内点的个数并记录估计的模型参数。重复上述步骤一定次数,得到多个结果,选取内点数量最多时候对应的模型参数,即认为是正确的模型。根据这个模型计算出的误差在阈值内的所有点即为最终选择的内点。这样便完成了离群点的剔除。

RANSAC在实际使用中有几个常用的公式,整理如下:

选择某个点,其为内点的概率:

建立一个正确模型的概率,这里n表示建立一个模型所需要的样本点个数:

经过k次迭代后没有建立一个正确模型的概率:

经过k次迭代后,建立一个正确模型的概率(成功率):

期望RANSAC的成功率为p,最少迭代次数k:

若建立模型需要m个点,数据集有n个数据,遍历一遍数据集需要的次数:

可以看到,在实际中第四和第五个式子最为常用。一个用来估计当前状态下成功的概率,另一个是估计最少迭代次数。这里需要注意的是公式5只是给出了最少应该迭代的次数,并不是说只能迭代这么多次。其实对于RANSAC算法,只要迭代次数足够多,最终肯定能得到最优的结果。只是从实际角度希望可以在最少迭代次数下最大概率获得最优结果,这便是公式5存在的意义。从理论上说迭代次数没有上限,而且由于RANSAC的机制:取所有迭代次数中效果最好的,所以迭代次数越多越有可能得到最好的结果。若遍历了一遍所有数据,则肯定能获得最好结果。但从实际应用的角度希望找到最合适的次数,公式5和公式6一个给出了迭代次数下限,一个给出了迭代次数上限。若小于下限,则有非常大可能得不到最优结果;如果超过上限太多,则会增加冗余计算量,意义不大。

通过以上的介绍,需要注意以下几点:

  • RANSAC并不是一个“死板的”算法,而是一种思想。正是这种思想使其非常灵活,具体实现形式也可能千差万别。这里活就活在模型与误差评价指标。

  • RANSAC的内点选取是与模型估计紧密耦合的。

  • 误差阈值ε是项“技术活”。它一方面决定了估计模型的精度,另一方面决定了最终选取的内点个数。

  • 并非所有数据都适合用RANSAC去除外点,它适用与遵循某种分布规律、可用模型拟合的数据

  • RANSAC每次迭代的结果并不一定是更好的、进化的。因为是随机采样,所以每次迭代的结果也是随机的。不断增加的是我们获得最优模型和内点的概率。

三、RANSAC实例应用

3.1RANSAC拟合直线

首先可以使用最小二乘进行直线拟合,具体是利用SVD对系数矩阵A进行分解,取V的最右边一列为结果。拟合结果如下:

正如上文所说,最小二乘对于离群点非常敏感,下面动图演示了这一过程:

因此,为了能在有离群点的情况下拟合出直线,使用RANSAC算法,如下动图演示了RANSAC不断迭代的过程:

这里重要的就是误差定义,定义误差为某点到直线的垂直距离而不是Δx、Δy。

3.2RANSAC求解单应矩阵

下图为SVD进行单应矩阵估计:

可以很明显地发现,如果不去除离群点会对最终估计结果有非常大的影响。所以用RANSAC算法进行剔除,动图如下:

最后在实际的图片上提取特征点并进行匹配,利用RANSAC剔除离群点:

可以看到,总体效果还是不错的,成功识别出了一些错误的匹配点对。这里的误差度量用的是重投影误差,简单来说就是根据随机选择的4个点求解单应矩阵,然后利用单应矩阵对数据点进行变换,将结算出来的点与实际点计算欧氏距离,若其小于阈值则认为是内点。

四、小结

在两个不同的应用场景中可以看到由于模型以及评价指标的不同,导致在代码实现上存在差异。所以RANSAC在具体实现中并没有什么固定格式,需要根据当前数据以及模型不断修改调整。但相比于这些千变万化的实现,RANSAC的思想才是不会改变的本源,是需要我们记住的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/196302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线性代数之线性基

在谈论线性基之前,先介绍什么是基向量. 根据高中数学,一个二维直角平面坐标系中的所有向量都可以只用(0, 1)和(1, 0)合成.那么(0, 1)和(1, 0)就是基向量,所有基向量能合成的所有向量被称为基向量的张成空间. 在二维空间中,有没有其他的向量能作为基向量呢?答案是肯定的. 上图…

Oracle事務簡述

簡述本文主要介紹內容有事務的隔離級別,oracle支持的事務隔離級別,事務的提交與回滾,保存點內容事務的ACID特征介紹事務繞不過事務的ACID四個特征,這裡簡單回顧以下原子性(Atomicity)事務的執行要麼全部成功…

广义霍夫变换和模板匹配的不同

简述说到霍夫变换,做图像的知道经典霍夫变换最常用于检测规则曲线,如直线、圆、椭圆等。而广义霍夫变换是为了检出那些无法写出解析式的不规则形状,虽然在深度学习大行其道的时代,霍夫变换也还是有很多应用场景,另外广…

2023年黑马Java入门到精通教程--面向对象

推荐教程:java零基础入门到精通 面向对象编程的例子 设计类,创建对象并使用 1. 类和对象是什么? 类:是共同特征的描述(设计图);对象:是真实存在的具体实例。 2. 如何设计类? 3. 如何创建对象…

CISP-PTE-Windows2003教程

为方便后续操作,建议和kali在同一网段。 获取到靶机IP后,扫描端口,1433是sqlserver的 测出用户名admin,但是密码爆破失败 扫描目录发现配置文件 配置文件中找到数据库的用户名和密码 使用Microsoft SQL Server Studio连接&#x…

MySQL从入门到精通(第0篇):全程有动画演示,适合入门学习

B站地址 文章目录一、MySQL的系统框架1. 连接池1.1 连接模块1.2 连接池2. SQL接口、SQL解析器、SQL优化器3. 存储引擎二、MySQL数据写入原理三、MySQL存储结构1. 使用InnoDB创建表2. 详述ibd文件中的存储结构2.1 页的数据连续存储2.2 行的结构2.3 区的结构2.4 组的结构2.5 段的…

剑指 Offer 33. 二叉搜索树的后序遍历序列

题目 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true&#xff0c;否则返回 false。假设输入的数组的任意两个数字都互不相同。 思路 二叉搜索树的特点是&#xff1a;左子树的值 < 根节点 < 右子树的值后序遍历的顺序是…

【逐步剖C】第三章-数组

一、一维数组 1. 一维数组的定义与使用 &#xff08;1&#xff09;数组的简单概念&#xff1a;一组具有相同类型的元素的集合 &#xff08;2&#xff09;数组的创建&#xff1a; 格式&#xff1a;类型名数组名[数组大小] 需要注意的是&#xff1a;对多数情况而言&#xff0c;…

# Vue中的Mixin混入

Vue中的Mixin混入 将组件的公共逻辑或者配置提取出来&#xff0c;哪个组件需要用到时&#xff0c;直接将提取的这部分混入到组件内部即可。这样既可以减少代码冗余度&#xff0c;也可以让后期维护起来更加容易。 1. 什么是Mixin&#xff1f; 混入 (mixin) 混入 (mixin) 将组…

数据库分类

关系型与非关系型 关系数据库 MySQL、MariaDB&#xff08;MySQL的代替品&#xff09;、 Percona Server&#xff08;MySQL的代替品&#xff09;、PostgreSQL、 Microsoft Access、Google Fusion Tables、SQLite、DB2、FileMaker、Oracle、SQL Server、INFORMIX、Sybase、dBASE…

阿里云中间件2024届校园招聘

【团队介绍】 阿里云云原生中间件团队负责分布式软件基础设施&#xff0c;为阿里云上万家企业提供如微服务引擎、服务网格、消息服务、分布式事务等分布式基础服务&#xff0c;加速企业上云的进程和创新速度。同时&#xff0c;云原生中间件团队也服务着阿里集团众多核心业务和…

智能指针(三)—— shared_ptr 循环引用问题

shared_ptr 作为智能指针&#xff0c;可以满足大多数场景&#xff0c;对于一些特殊情况&#xff0c;可能会引发循环引用问题。 目录 1、循环引用案例分析 (1) 案例介绍 (2) 原因分析 2、weak_ptr 解决循环引用 1、循环引用案例分析 (1) 案例介绍 我们通过实际案例来了解…

网络编程 1 相关基础概念 及 请求、响应类 定义

目录 一、HTTP基本概念 1、HTTP是什么 2、HTTP客户端是什么 3、HTTP消息结构 4、服务器响应信息 二、相关概念 1、网址 URL 2、IP地址 3、域名 4、域名与IP关系 5、域名解析 6、DNS 三、设计请求、响应类基本数据结构 1、请求类定义 2、响应类定义 一、HTTP基本概…

AD引脚交换

19年写过一篇AD交换引脚的文章&#xff0c;原文请查阅AD18调PIN方法及注意事项&#xff0c;该方法是手动更改焊盘的网络&#xff0c;如果是对于少量的或者零散的引脚交换还好&#xff0c;但遇到像FPGA、CPLD或者端子这种大量引脚需要调PIN的情况还是一个一个手动更改就很费时了…

java 微服务 RabbitMQ高级 消息可靠性问题 死信交换机 延迟队列 惰性队列

消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性问题&#xff08;面试很会问&#xff09; 针对这些问题&#xff0c;RabbitMQ分别给出了解决方案&#xff1a; 生产者确认机制 mq持久化 消费者确认机制 失败重试机制 下面我们就通过案…

基于Android的办公用品管理平台的设计与实现

需求信息&#xff1a; 教师端&#xff1a; &#xff08;1&#xff09;注册登录&#xff1a;教师通过输入自己的工号和密码登录系统&#xff1b; &#xff08;2&#xff09;信息修改&#xff1a;教师可以完善个人信息&#xff08;院系、职务等&#xff09;&#xff1b; &#xf…

DMS感知方案前装赛道「排位」,2025年750万辆市场争夺

对舱内驾驶员、乘客的关怀&#xff0c;正在成为车企新一轮体验升级的关键突破口。在2023年CES展上&#xff0c;类似的产品方案也成为汽车行业的焦点。 比如&#xff0c;一家名为Myant的创新材料技术公司&#xff0c;在今年CES期间推出了一款将传感器和执行器&#xff08;与编织…

深度解刨性能测试工具Locust

An open source load testing tool. 一个开源性能测试工具。 define user behaviour with python code, and swarm your system with millions of simultaneous users. 使用Python代码来定义用户行为。用它可以模拟百万计的并发用户访问你的系统。 如果你常关注我的博客&…

2022尚硅谷SSM框架跟学(十)SSM整合

2022尚硅谷SSM框架跟学 十 SSM整合四、SSM整合4.1ContextLoaderListener(1).创建Maven Module(2).导入依赖(3).配置web.xml(4).创建SpringMVC的配置文件并配置(5).创建Spring的配置文件并配置(6).创建组件(7).创建页面(8).访问测试功能4.2准备工作(1).创建Maven Module(2).导入…

【2023亲测可用】JS 获取电脑本地IP 和 电脑网络IP(外网IP|公网IP)

1、了解&#xff1a;电脑本地的IP地址&#xff08;内网IP&#xff09;和电脑本机在网络上的IP地址&#xff08;外网IP|公网IP&#xff09; 在运行窗口输入“cmd”&#xff0c;在弹出的界面里输入“ipconfig/all”。弹出的数据中&#xff0c;IPv4地址&#xff0c;就是电脑本地的…