python ransac拟合曲线,随机抽样一致算法(Random sample consensus,RANSAC 简单版)PYTHON实现...

本文介绍了RANSAC(随机抽样一致算法)的基本原理,通过Python实现展示了RANSAC如何优于普通最小二乘法在数据拟合上的效果,特别是对于存在噪声和异常值的数据。文章提供了简化版RANSAC算法的代码,并通过实例展示了其在直线和曲线拟合上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、RANSAC理论介绍

普通最小二乘是保守派:在现有数据下,如何实现最优。是从一个整体误差最小的角度去考虑,尽量谁也不得罪。

RANSAC是改革派:首先假设数据具有某种特性(目的),为了达到目的,适当割舍一些现有的数据。

给出最小二乘拟合(红线)、RANSAC(绿线)对于一阶直线、二阶曲线的拟合对比:

f761905bc0f4b6c249a88f8c98584560.png

可以看到RANSAC可以很好的拟合。RANSAC可以理解为一种采样的方式,所以对于多项式拟合、混合高斯模型(GMM)等理论上都是适用的。

RANSAC简化版的思路就是:

第一步:假定模型(如直线方程),并随机抽取Nums个(以2个为例)样本点,对模型进行拟合:

576f74faf532cb39f73214d61936d03a.png

第二步:由于不是严格线性,数据点都有一定波动,假设容差范围为:sigma,找出距离拟合曲线容差范围内的点,并统计点的个数:

68a4e36b3ddae48451e43871e4e58e5c.png

第三步:重新随机选取Nums个点,重复第一步~第二步的操作,直到结束迭代:

2956f67263d9b094726344ee419ba293.png

第四步:每一次拟合后,容差范围内都有对应的数据点数,找出数据点个数最多的情况,就是最终的拟合结果:

cddcb38fd9cdd8a541c770ef13eed17b.png

至此:完成了RANSAC的简化版求解。

这个RANSAC的简化版,只是给定迭代次数,迭代结束找出最优。如果样本个数非常多的情况下,难不成一直迭代下去?其实RANSAC忽略了几个问题:

每一次随机样本数Nums的选取:如二次曲线最少需要3个点确定,一般来说,Nums少一些易得出较优结果;

抽样迭代次数Iter的选取:即重复多少次抽取,就认为是符合要求从而停止运算?太多计算量大,太少性能可能不够理想;

容差Sigma的选取:sigma取大取小,对最终结果影响较大;

代码:

# _*_ coding:utf-8 _*_

import numpy as np

import scipy as sp

import scipy.linalg as sl

# ransac_fit, ransac_da

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值