Sample Consensus

The following models are supported:

  • SACMODEL_PLANE- used to determine plane models. The four coefficients of the plane are its Hessian Normal form: [normal_x normal_y normal_z d]
  • SACMODEL_LINE- used to determine line models. The six coefficients of the line are given by a point on the line and the direction of the line as: [point_on_line.x point_on_line.y point_on_line.z line_direction.x line_direction.y line_direction.z]
  • SACMODEL_CIRCLE2D- used to determine 2D circles in a plane. The circle‘s three coefficients are given by its center and radius as: [center.x center.y radius]
  • SACMODEL_CIRCLE3D- used to determine 3D circles in a plane. The circle‘s seven coefficients are given by its center, radius and normal as: [center.x, center.y, center.z, radius, normal.x, normal.y, normal.z]
  • SACMODEL_SPHERE- used to determine sphere models. The four coefficients of the sphere are given by its 3D center and radius as: [center.x center.y center.z radius]
  • SACMODEL_CYLINDER- used to determine cylinder models. The seven coefficients of the cylinder are given by a point on its axis, the axis direction, and a radius, as: [point_on_axis.x point_on_axis.y point_on_axis.z axis_direction.x axis_direction.y axis_direction.z radius]
  • SACMODEL_CONE- used to determine cone models. The seven coefficients of the cone are given by a point of its apex, the axis direction and the opening angle, as: [apex.x, apex.y, apex.z, axis_direction.x, axis_direction.y, axis_direction.z, opening_angle]
  • SACMODEL_TORUS - not implemented yet
  • SACMODEL_PARALLEL_LINE- a model for determining a line parallel with a given axis, within a maximum specified angular deviation. The line coefficients are similar to SACMODEL_LINE.
  • SACMODEL_PERPENDICULAR_PLANE- a model for determining a plane perpendicular to an user-specified axis, within a maximum specified angular deviation. The plane coefficients are similar to SACMODEL_PLANE.
  • SACMODEL_PARALLEL_LINES - not implemented yet
  • SACMODEL_NORMAL_PLANE- a model for determining plane models using an additional constraint: the surface normals at each inlier point has to be parallel to the surface normal of the output plane, within a maximum specified angular deviation. The plane coefficients are similar to SACMODEL_PLANE.
  • SACMODEL_PARALLEL_PLANE- a model for determining a plane parallel to an user-specified axis, within a maximum specified angular deviation. SACMODEL_PLANE.
  • SACMODEL_NORMAL_PARALLEL_PLANEdefines a model for 3D plane segmentation using additional surface normal constraints. The plane must lie parallel to a user-specified axis. SACMODEL_NORMAL_PARALLEL_PLANE therefore is equivalent to SACMODEL_NORMAL_PLANE + SACMODEL_PARALLEL_PLANE. The plane coefficients are similar to SACMODEL_PLANE.

The following list describes the robust sample consensus estimators implemented:

#include <iostream>
#include <thread>

#include <pcl/console/parse.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/sample_consensus/ransac.h>
#include <pcl/sample_consensus/sac_model_plane.h>
#include <pcl/sample_consensus/sac_model_sphere.h>
#include <pcl/visualization/pcl_visualizer.h>

using namespace std::chrono_literals;

int
main(int argc, char** argv)
{
    // initialize PointClouds
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PointCloud<pcl::PointXYZ>::Ptr final(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile("D:\\pcd\\sphere.pcd", *cloud);
    pcl::SampleConsensusModelSphere<pcl::PointXYZ>::Ptr model_s(new pcl::SampleConsensusModelSphere<pcl::PointXYZ>(cloud));
    pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(model_s);
    ransac.setDistanceThreshold(2);
    ransac.computeModel();
    std::vector<int> inliers;
    ransac.getInliers(inliers);
    Eigen::VectorXf coff;
    ransac.getModelCoefficients(coff);
    //cout << coff << endl;

    // copies all inliers of the model computed to another PointCloud
    pcl::copyPointCloud(*cloud, inliers, *final);

    // creates the visualization object and adds either our original cloud or all of the inliers
    // depending on the command line arguments specified.

    pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
    viewer->setBackgroundColor(0, 0, 0);
    viewer->addPointCloud<pcl::PointXYZ>(final, "sample cloud");
    pcl::PointXYZ center(coff(0), coff(1), coff(2));
    double R = coff(3);
    cout << "center " << center.x << " " << center.y << " " << center.z << endl;
    cout << "R" << R << endl;
    //viewer->addSphere(center, coff(2),"mySphere");
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "sample cloud");
    viewer->addCoordinateSystem (1.0, "global");
    viewer->initCameraParameters();

    while (!viewer->wasStopped())
    {
        viewer->spinOnce(100);
        std::this_thread::sleep_for(100ms);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/larry-xia/p/11887572.html

时间: 2024-10-12 16:13:52

Sample Consensus的相关文章

Random Sample Consensus(RANSAC)算法介绍

转眼间2012年过了三个月了,最近在做目标跟踪,需要利用ransac算法进行图像匹配,使用Opencv+vs进行实现.终于初见成效啊,很激动也很兴奋,在这里mark一下,以备查用 !这里就不贴源码了,想想都是泪啊! RANSAC是"RANdom SAmple Consensus(随机抽样一致)"的缩写.它可以从一组包含"局外点"的观测数据集中,通过迭代方式估计数学模型的参数.它是一种不确定的算法--它有一定的概率得出一个合理的结果:为了提高概率必须提高迭代次数.该算

随机抽样一致算法(Random sample consensus,RANSAC)

作者:桂. 时间:2017-04-25  21:05:07 链接:http://www.cnblogs.com/xingshansi/p/6763668.html 前言 仍然是昨天的问题,别人问到最小二乘.霍夫变换.RANSAC在直线拟合上的区别.昨天梳理了霍夫变换,今天打算抽空梳理一下RANSAC算法,主要包括: 1)RANSAC理论介绍 2)RANSAC应用简介: 内容为自己的学习记录,其中很多地方借鉴了别人,最后一起给出链接. 一.RANSAC理论介绍 普通最小二乘是保守派:在现有数据下,

【论文学习记录】PTAM:Parallel Tracking and Mapping for Small AR Workspaces

论文地址:链接: http://pan.baidu.com/s/1kTAcP8r 密码: djm4 这是一篇可手持单目相机进行定位与制图方法的文章.它与传统slam的方法不一致的地方在于将定位跟踪与制图分离出了两个单独过程. 双线程机制: 一个线程用于鲁棒跟踪手持相机运动,另一个线程用于从之前观测到的视频帧中产生三维地图点特征 .  系统允许batch techniques复杂的计算,但不在实时操作下.. 这篇文章的研究目的是:  不需要任何模板与初始目标,跟踪校正的手持相机,并且绘制环境地图.

RANSAC

RANSAC是"RANdom SAmple Consensus(随机抽样一致)"的缩写.它可以从一组包含"局外点"的观测数据集中,通过迭代方式估计数学模型的参数.它是一种不确定的算法--它有一定的概率得出一个合理的结果:为了提高概率必须提高迭代次数.该算法最早由Fischler和Bolles于1981年提出.核心思想就是随机性和假设性,随机性用于减少计算,循环次数是利用正确数据出现的概率.所谓的假设性,就是说随机抽出来的数据都认为是正确的,并以此去计算其他点,获得其

计算机科学中最重要的32个算法

奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序. A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径.其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序.算法以得到的次

基于OpenCV进行图像拼接原理解析和编码实现(提纲 代码和具体内容在课件中)

一.背景 1.1概念定义 我们这里想要实现的图像拼接,既不是如题图1和2这样的"图片艺术拼接",也不是如图3这样的"显示拼接",而是实现类似"BaiDU全景"这样的全部的或者部分的实际场景的重新回放. 对于图像拼接的流程有很多定义方式,本教程中主要介绍实现主流方法,总结梳理如下: 图像采集->投影变换->特征点匹配->拼接对准->融合->反投影 图像采集不仅仅指的是普通的图像数据的获取.为了能够拼接过程能够顺利进行.

一些常用算法

1.A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径.其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序.算法以得到的次序访问这些节点.因此,A*搜索算法是最佳优先搜索的范例. 2.集束搜索(又名定向搜索,Beam Search)——最佳优先搜索算法的优化.使用启发式函数评估它检查的每个节点的能力.不过,集束搜索只能在每个深度中发现最前面的m个最符合条件的节点,m是固定数字——集束的宽度. 3.二分查找(Binary Search)——在线性数

视觉SLAM之RANSAC算法用于消除图像误匹配的原理

在基于特征点的视觉SLAM中,通常情况下,在特征匹配过程中往往会存在误匹配信息,使得计算获取的位姿精度低,易产生位姿估计失败的问题,因此,剔除这些错配点有很大的必要性.常会用到RANSAC算法进行消除两两匹配图像的误匹配点,如果只停留在应用的层面上很简单,直接调用opencv函数就行,看到效果时,感觉好神奇,到底怎么实现的啊,以前一直也没弄太明白,与图像结合的博客也比较少,在查阅了一些资料后,笔者似乎明白了一点,希望笔者的总结会对您的理解有帮助. 首先先介绍一下RANSAC算法(RANdom S

视频瞳孔跟踪之星团模型

1.预处理 1.1去除图像噪声 使用5*5的高斯平滑处理散粒噪声: 使用 模型处理线路噪声, 是第 i 帧图像,第 l 行像素的平均值,=0.2.当i=1时,C(i, l)  = : Adjustment = C (i, l) - Pixel (i, l, c) = Adjustment + Pixel (i, l, c)           Pixel (i, l, c) 是第 i 帧图像,坐标点为(l,c)的像素值. 3.  使用线性插值法去除角膜上的反光点. 2.瞳孔中心定位(核心算法)