#include<iostream>
#include<opencv2/opencv.hpp>
#include<vector>
#include<stdlib.h>
#include <time.h>
using namespace std;
using namespace cv;
//此函数随机选取两点,求基础线的法线参数及一个选取点参数(得到的参数用于ransac计算内点)
void BasicLineParam(vector<Point> & data, vector<double> & param)
{
Point p1 = (0, 0), p2 = (0, 0);
//srand((unsigned)time(NULL)); //不能这样选取随机数,因为要迭代,速度太快了,时间基本没有改变,每次选出来的随机数是一样的。
while (p1 == p2) //保证选取的是两个不同的点
{
p1 = data[rand() % data.size()];
p2 = data[rand() % data.size()];
}
cout <<"选取的两个点" <<endl << p1<< endl;
cout << p2 << endl;
double nx = p1.y - p2.y;
double ny = p2.x - p1.x;// 原始直线的斜率为K,则法线的斜率为-1/k
double norm = sqrt(nx*nx + ny*ny);
param.push_back(nx / norm);
param.push_back(ny / norm);
param.push_back(p1.x);
param.push_back(p1.y);
cout << "直线的法线向量 (" << param[0] << ", " << param[1] << endl;
}
//此函数用于计算模型最多的内点,basic_point是直线上一点, nx,ny是上面算出来的法线向量,data是所有的点集,maxinner用来算出最好模型的内点数,
//delta是确定为内点的最短的点到直线的距离
int ComputeInnerPoint(Point basic_point, double nx, double ny, vector<Point> & data,/* int maxInne
ransac改进
最新推荐文章于 2023-09-16 12:57:28 发布
本文探讨了RANSAC(Random Sample Consensus)算法的基本原理及其在计算机视觉中的应用,并分享了针对RANSAC算法的改进策略,包括迭代次数优化、阈值设定和异常值检测等,以提高模型估计的准确性和效率。
摘要由CSDN通过智能技术生成