Point Cloud Library (PCL)  1.7.0
/tmp/buildd/pcl-1.7-1.7.0/sample_consensus/sample_consensus.doxy
00001 /**
00002   \addtogroup sample_consensus Module sample_consensus
00003 
00004   \section secSampleConsensusPresentation Overview
00005 
00006   The <b>pcl_sample_consensus</b> library holds SAmple Consensus (SAC) methods like 
00007   <a href="http://en.wikipedia.org/wiki/RANSAC">RANSAC</a> and models like planes and cylinders.  These can
00008   combined freely in order to detect specific models and their paramters in point clouds.
00009 
00010   Some of the models implemented in this library include: lines, planes, cylinders, and spheres.  Plane fitting
00011   is often applied to the task of detecting common indoor surfaces, such as walls, floors, and table tops.
00012   Other models can be used to detect and segment objects with common geometric structures  (e.g., fitting a cylinder 
00013   model to a mug).
00014 
00015   \image html http://www.pointclouds.org/assets/images/contents/documentation/sample_consensus_planes_cylinders.png
00016 
00017   As of PCL 1.0, the following models are supported:
00018   <ul>
00019     <li><a href="classpcl_1_1_sample_consensus_model_plane.html">SACMODEL_PLANE</a> - used to determine plane models. The <b>four</b> coefficients of the plane are its <a href="http://mathworld.wolfram.com/HessianNormalForm.html">Hessian Normal form</a>: [<b>normal_x normal_y normal_z d</b>]</li>
00020     <li><a href="classpcl_1_1_sample_consensus_model_line.html">SACMODEL_LINE</a> - used to determine line models. The <b>six</b> coefficients of the line are given by a point on the line and the direction of the line as: [<b>point_on_line.x point_on_line.y point_on_line.z line_direction.x line_direction.y line_direction.z</b>]</li>
00021     <li><a href="classpcl_1_1_sample_consensus_model_circle2_d.html">SACMODEL_CIRCLE2D</a> - used to determine 2D circles in a plane. The circle's <b>three</b> coefficients are given by its center and radius as: [<b>center.x center.y radius</b>]</li>
00022     <li>SACMODEL_CIRCLE3D - not implemented yet</li>
00023     <li><a href="classpcl_1_1_sample_consensus_model_sphere.html">SACMODEL_SPHERE</a> - used to determine sphere models. The <b>four</b> coefficients of the sphere are given by its 3D center and radius as: [<b>center.x center.y center.z radius</b>]</li>
00024     <li><a href="classpcl_1_1_sample_consensus_model_cylinder.html">SACMODEL_CYLINDER</a> - used to determine cylinder models. The <b>seven</b> coefficients of the cylinder are given by a point on its axis, the axis direction, and a radius, as: [<b>point_on_axis.x point_on_axis.y point_on_axis.z axis_direction.x axis_direction.y axis_direction.z radius</b>]</li>
00025     <li>SACMODEL_CONE - not implemented yet</li>
00026     <li>SACMODEL_TORUS - not implemented yet</li>
00027     <li><a href="classpcl_1_1_sample_consensus_model_parallel_line.html">SACMODEL_PARALLEL_LINE</a> - a model for determining a line <b>parallel</b> with a given axis, within a maximum specified angular deviation. The line coefficients are similar to <a href="classpcl_1_1_sample_consensus_model_line.html">SACMODEL_LINE</a>.</li>
00028     <li><a href="classpcl_1_1_sample_consensus_model_perpendicular_plane.html">SACMODEL_PERPENDICULAR_PLANE</a> - a model for determining a plane <b>perpendicular</b> to an user-specified axis, within a maximum specified angular deviation. The plane coefficients are similar to <a href="classpcl_1_1_sample_consensus_model_plane.html">SACMODEL_PLANE</a>.</li>
00029     <li>SACMODEL_PARALLEL_LINES - not implemented yet</li>
00030     <li><a href="classpcl_1_1_sample_consensus_model_normal_plane.html">SACMODEL_NORMAL_PLANE</a> - 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 <a href="classpcl_1_1_sample_consensus_model_plane.html">SACMODEL_PLANE</a>.</li>
00031     <li><a href="classpcl_1_1_sample_consensus_model_parallel_plane.html">SACMODEL_PARALLEL_PLANE</a> - a model for determining a plane <b>parallel</b> to an user-specified axis, within a maximim specified angular deviation. <a href="../classpcl_1_1_sample_consensus_model_plane.html">SACMODEL_PLANE</a>.</li>
00032     <li><a href="classpcl_1_1_sample_consensus_model_normal_parallel_plane.html">SACMODEL_NORMAL_PARALLEL_PLANE</a> defines a model for 3D plane segmentation using additional surface normal constraints. The plane must lie <b>parallel</b> to a user-specified axis. SACMODEL_NORMAL_PARALLEL_PLANE therefore is equivallent to SACMODEL_NORMAL_PLANE + SACMODEL_PARALLEL_PLANE. The plane coefficients are similar to <a href="classpcl_1_1_sample_consensus_model_plane.html">SACMODEL_PLANE</a>.</li>
00033   </ul>
00034 
00035   The following list describes the robust sample consensus estimators implemented:
00036   <ul>
00037     <li><a href="http://en.wikipedia.org/wiki/RANSAC">SAC_RANSAC</a> - RANdom SAmple Consensus</li>
00038     <li><a href="http://research.microsoft.com/en-us/um/people/zhang/INRIA/Publis/Tutorial-Estim/node25.html">SAC_LMEDS</a> - Least Median of Squares</li> 
00039     <li><a href="http://www.robots.ox.ac.uk/~vgg/publications-new/Public/2000/Torr00/torr00.pdf">SAC_MSAC</a> - M-Estimator SAmple Consensus</li>
00040     <li><a href="http://cmp.felk.cvut.cz/~matas/papers/presentations/rransac-cvww02_pres.pdf">SAC_RRANSAC</a> - Randomized RANSAC</li>
00041     <li><a href="http://cmp.felk.cvut.cz/~matas/papers/presentations/rransac-cvww02_pres.pdf">SAC_RMSAC</a> - Randomized MSAC</li>
00042     <li><a href="http://www.robots.ox.ac.uk/~vgg/publications-new/Public/2000/Torr00/torr00.pdf">SAC_MLESAC</a> - Maximum LikeLihood Estimation SAmple Consensus</li>
00043     <li><a href="http://cmp.felk.cvut.cz/~matas/papers/chum-prosac-cvpr05.pdf">SAC_PROSAC</a> - PROgressive SAmple Consensus</li>
00044   </ul>
00045 
00046   By default, if you're not familiar with most of the above estimators and how they operate, use RANSAC to test your hypotheses.
00047 
00048   \section secSampleConsensusRequirements Requirements
00049   - \ref common "common"
00050 
00051 */