RANSAC 随机一致性采样

RANSAC(随机一致性采样)是一种用于从含有噪声数据中估计数学模型的算法。该算法通过随机选取子集来拟合模型,并确定哪些数据点与模型一致,从而有效地去除外点。在RANSAC的迭代过程中,它会计算内点比例并选择最佳模型。应用RANSAC的关键参数包括最小样本数、迭代次数、距离阈值和模型验证条件。
摘要由CSDN通过智能技术生成

随机一致性采样RANSAC是一种鲁棒的模型拟合算法,能够从有外点的数据中拟合准确的模型。


RANSAC过程中用到的参数

N-- 拟合模型所需要的最少的样本个数

K--算法的迭代次数

t--用于判断数据是否是内点

d--判定模型是否符合使用于数据集,也就是判断是否是好的模型


RANSAC算法过程

1  for K 次迭代

2     从数据中均匀随机采样N个点

3     利用采样的N个点拟合你个模型

4     for 对于除采样点外的每一个样本点

5          利用t检测样本点到模型的距离,如果小于t则认为是一致,否则认为是外点

6     end

7     如果有d或者更多的一致点,则认为拟合的模型是好的

8 end

9 使用拟合误差作为标准,选择最好的拟合模型



迭代次数的计算

假设 r = 内点个数/所有点的个数

 则:

   p0 = pow(r, N) 表示采样的N个点全为内点,也就是是一次有效采样的概率

   p1 = 1 - pow(r, N) 表示采样的N个点中至少有一个外点,即一次无效采样的概率

   p2 = pow(p1, K) 表示K次无效采样的概率

假设p表示K次采样中至少一次采样是有效采样,则有1-p = pow(p1, K), 两边取对数

则有 K = log(1- p )/log(1-p1).


 附一份来自google 的RANSAC的代码框架

#ifndef FVISION_RANSAC_H_
#define FVISION_RANSAC_H_

#include <fvision/utils/random_utils.h>
#include <fvision/utils/misc.h>

#include <vector>
#include <iostream>
#include <cassert>

namespace fvision {

class RANSAC_SamplesNumber {
public:
        RANSAC_SamplesNumber(int modelSampleSize) {
                this->s = modelSampleSize;
                this->p = 0.99;
        }
        ~RANSAC_SamplesNumber(void) {}

public:
        long calcN(int inliersNumber, int samplesNumber) {
                double e = 1 - (double)inliersNumber / samplesNumber;
                //cout<<"e: "<<e<<endl;
                if (e > 0.9) e = 0.9;
                //cout<<"pow: "<<pow((1 - e), s)<<endl;
                //cout<<log(1 - pow((1 - e), s))<<endl;
                long N = (long)(log(1 - p) / log(1 - pow((1 - e), s)));
                if (N < 0) return (long)1000000000;
                else return N;
        }

private:                
        int s;      //samples size for fitting a model
        double p;   //probability that at least one of the random samples if free from outliers
                    //usually 0.99
};

//fit a model to a set of samples
template
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值