RANSAC 加Guass-newton拟合曲线

本文介绍了如何结合RANSAC(随机样本一致性)算法与Gauss-Newton算法来拟合一次函数和二次函数。通过参考链接提供了详细步骤和技术解释。
摘要由CSDN通过智能技术生成

这里写图片描述

#include <iostream>
#include <fstream>

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <Eigen/Core>
#include <Eigen/Dense>

using namespace std;



vector<int> getRandomSample(int n, int num)
{
    vector<int> sample;
    vector<int> total_set;
    for(int i = 0; i < n; ++i)
        total_set.push_back(i);
    for(int i = 0; i < num; ++i)
    {
        int j = rand()%total_set.size();
        sample.push_back( total_set[j] );
        total_set.erase( total_set.begin()+j );
    }
    return sample;
}

//k次函数
double funcX(double* a, double x, int k)
{
    double xx = 1.0;
    double y = 0;
    for(int i = 0; i < k; i++)
    {
        y = y + a[i]*xx;
        xx *= x;
    }
    return y;
}

vector<int> get_inliners(vector<cv::Point2d>& points, double* a, int k)
{
    double inlier_threshold = 5;
    vector<int> inliers;

    for(int i = 0; i < points.size(); i++)
    {
        cv::Point2d p = points[i];
        double y_predict = funcX(a, p.x, k);
        if( fabs(p.y - y_predict) < inlier_threshold)
            inliers.push_back( i );
    }
    cout << "inliers:" << inliers.size() << "\n";
    return inliers;
}

bool estimateLine(vector<cv::Point2d>& points, vector<int>&active, double* a, int k)
{
    const double learning_rate = 0.1;
    const int N = active.size();
    
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RANSAC是一种用于估计具有噪声的数据集中模型参数的算法。在拟合曲线的问题中,它可以用于从包含离群值的数据集中提取出最佳拟合曲线RANSAC算法的基本思想是:从数据集中随机选择一小部分数据点来拟合模型,然后用该模型去测试所有其它的数据点。如果某个数据点与模型匹配得足够好,则将其添到该模型的内部,并重复上述过程。最终,得到的模型应该能够拟合所有与之匹配的数据点,而对于那些离群值,该模型应该能够将其排除在外。 在拟合曲线的问题中,可以使用RANSAC算法来估计多项式曲线的系数。具体来说,可以将数据集中的每个数据点看作一个二维坐标点 (x, y),然后用一个n次多项式曲线来拟合这些点。于是,RANSAC算法的流程如下: 1. 从数据集中随机选择m个数据点,用一个n次多项式曲线来拟合它们。 2. 对于数据集中的每个点,计算它到该曲线的距离。 3. 对于每个距离小于阈值的点,将其添到内部集合中。 4. 如果内部集合的大小大于某个阈值,则重新用n次多项式曲线拟合该集合中的所有点,并计算该曲线的误差。 5. 如果误差小于当前最小误差,则将该曲线作为最佳拟合曲线,并更新最小误差。 6. 重复上述步骤,直到达到最大迭代次数或者误差小于某个阈值为止。 最终,RANSAC算法将返回最佳拟合曲线的系数。由于该算法能够排除离群值的影响,因此它在拟合带有噪声的数据时非常有用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值