Point Cloud Library (PCL) 1.12.0
Loading...
Searching...
No Matches
sac_model_normal_sphere.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2009-2012, Willow Garage, Inc.
6 * Copyright (c) 2012-, Open Perception, Inc.
7 *
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 *
14 * * Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * * Redistributions in binary form must reproduce the above
17 * copyright notice, this list of conditions and the following
18 * disclaimer in the documentation and/or other materials provided
19 * with the distribution.
20 * * Neither the name of the copyright holder(s) nor the names of its
21 * contributors may be used to endorse or promote products derived
22 * from this software without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 * POSSIBILITY OF SUCH DAMAGE.
36 *
37 * $Id: sac_model_normal_sphere.h schrandt $
38 *
39 */
40
41#pragma once
42
43#include <pcl/sample_consensus/sac_model.h>
44#include <pcl/sample_consensus/sac_model_sphere.h>
45#include <pcl/sample_consensus/model_types.h>
46#include <pcl/memory.h>
47#include <pcl/pcl_macros.h>
48
49namespace pcl
50{
51 /** \brief @b SampleConsensusModelNormalSphere defines a model for 3D sphere
52 * segmentation using additional surface normal constraints. Basically this
53 * means that checking for inliers will not only involve a "distance to
54 * model" criterion, but also an additional "maximum angular deviation"
55 * between the sphere's normal and the inlier points normals.
56 *
57 * The model coefficients are defined as:
58 * <ul>
59 * <li><b>center.x</b> : the X coordinate of the sphere's center
60 * <li><b>center.y</b> : the Y coordinate of the sphere's center
61 * <li><b>center.z</b> : the Z coordinate of the sphere's center
62 * <li><b>radius</b> : radius of the sphere
63 * </ul>
64 *
65 * \author Stefan Schrandt
66 * \ingroup sample_consensus
67 */
68 template <typename PointT, typename PointNT>
70 {
71 public:
80
84
87
90
91 /** \brief Constructor for base SampleConsensusModelNormalSphere.
92 * \param[in] cloud the input point cloud dataset
93 * \param[in] random if true set the random seed to the current time, else set to 12345 (default: false)
94 */
96 bool random = false)
99 {
100 model_name_ = "SampleConsensusModelNormalSphere";
101 sample_size_ = 4;
102 model_size_ = 4;
103 }
104
105 /** \brief Constructor for base SampleConsensusModelNormalSphere.
106 * \param[in] cloud the input point cloud dataset
107 * \param[in] indices a vector of point indices to be used from \a cloud
108 * \param[in] random if true set the random seed to the current time, else set to 12345 (default: false)
109 */
111 const Indices &indices,
112 bool random = false)
113 : SampleConsensusModelSphere<PointT> (cloud, indices, random)
115 {
116 model_name_ = "SampleConsensusModelNormalSphere";
117 sample_size_ = 4;
118 model_size_ = 4;
119 }
120
121 /** \brief Empty destructor */
123
124 /** \brief Select all the points which respect the given model coefficients as inliers.
125 * \param[in] model_coefficients the coefficients of a sphere model that we need to compute distances to
126 * \param[in] threshold a maximum admissible distance threshold for determining the inliers from the outliers
127 * \param[out] inliers the resultant model inliers
128 */
129 void
130 selectWithinDistance (const Eigen::VectorXf &model_coefficients,
131 const double threshold,
132 Indices &inliers) override;
133
134 /** \brief Count all the points which respect the given model coefficients as inliers.
135 * \param[in] model_coefficients the coefficients of a model that we need to compute distances to
136 * \param[in] threshold maximum admissible distance threshold for determining the inliers from the outliers
137 * \return the resultant number of inliers
138 */
139 std::size_t
140 countWithinDistance (const Eigen::VectorXf &model_coefficients,
141 const double threshold) const override;
142
143 /** \brief Compute all distances from the cloud data to a given sphere model.
144 * \param[in] model_coefficients the coefficients of a sphere model that we need to compute distances to
145 * \param[out] distances the resultant estimated distances
146 */
147 void
148 getDistancesToModel (const Eigen::VectorXf &model_coefficients,
149 std::vector<double> &distances) const override;
150
151 /** \brief Return a unique id for this model (SACMODEL_NORMAL_SPHERE). */
152 inline pcl::SacModel
153 getModelType () const override { return (SACMODEL_NORMAL_SPHERE); }
154
156
157 protected:
161 };
162}
163
164#ifdef PCL_NO_PRECOMPILE
165#include <pcl/sample_consensus/impl/sac_model_normal_sphere.hpp>
166#endif
Iterator class for point clouds with or without given indices.
PointCloud represents the base class in PCL for storing collections of 3D points.
SampleConsensusModelFromNormals represents the base model class for models that require the use of su...
Definition sac_model.h:612
PointCloudNConstPtr normals_
A pointer to the input dataset that contains the point normals of the XYZ dataset.
Definition sac_model.h:670
typename pcl::PointCloud< PointNT >::ConstPtr PointCloudNConstPtr
Definition sac_model.h:614
typename pcl::PointCloud< PointNT >::Ptr PointCloudNPtr
Definition sac_model.h:615
double normal_distance_weight_
The relative weight (between 0 and 1) to give to the angular distance (0 to pi/2) between point norma...
Definition sac_model.h:665
SampleConsensusModel represents the base model class.
Definition sac_model.h:70
double radius_min_
The minimum and maximum radius limits for the model.
Definition sac_model.h:564
unsigned int sample_size_
The size of a sample from which the model is computed.
Definition sac_model.h:588
typename PointCloud::ConstPtr PointCloudConstPtr
Definition sac_model.h:73
IndicesPtr indices_
A pointer to the vector of point indices to use.
Definition sac_model.h:556
PointCloudConstPtr input_
A boost shared pointer to the point cloud data array.
Definition sac_model.h:553
std::string model_name_
The model name.
Definition sac_model.h:550
unsigned int model_size_
The number of coefficients in the model.
Definition sac_model.h:591
typename PointCloud::Ptr PointCloudPtr
Definition sac_model.h:74
std::vector< double > error_sqr_dists_
A vector holding the distances to the computed model.
Definition sac_model.h:585
SampleConsensusModelNormalSphere defines a model for 3D sphere segmentation using additional surface ...
typename SampleConsensusModelFromNormals< PointT, PointNT >::PointCloudNConstPtr PointCloudNConstPtr
typename SampleConsensusModel< PointT >::PointCloud PointCloud
void selectWithinDistance(const Eigen::VectorXf &model_coefficients, const double threshold, Indices &inliers) override
Select all the points which respect the given model coefficients as inliers.
typename SampleConsensusModelFromNormals< PointT, PointNT >::PointCloudNPtr PointCloudNPtr
SampleConsensusModelNormalSphere(const PointCloudConstPtr &cloud, bool random=false)
Constructor for base SampleConsensusModelNormalSphere.
typename SampleConsensusModel< PointT >::PointCloudPtr PointCloudPtr
std::size_t countWithinDistance(const Eigen::VectorXf &model_coefficients, const double threshold) const override
Count all the points which respect the given model coefficients as inliers.
void getDistancesToModel(const Eigen::VectorXf &model_coefficients, std::vector< double > &distances) const override
Compute all distances from the cloud data to a given sphere model.
pcl::SacModel getModelType() const override
Return a unique id for this model (SACMODEL_NORMAL_SPHERE).
typename SampleConsensusModel< PointT >::PointCloudConstPtr PointCloudConstPtr
SampleConsensusModelNormalSphere(const PointCloudConstPtr &cloud, const Indices &indices, bool random=false)
Constructor for base SampleConsensusModelNormalSphere.
SampleConsensusModelSphere defines a model for 3D sphere segmentation.
bool isModelValid(const Eigen::VectorXf &model_coefficients) const override
Check whether a model is valid given the user constraints.
#define PCL_MAKE_ALIGNED_OPERATOR_NEW
Macro to signal a class requires a custom allocator.
Definition memory.h:63
Defines functions, macros and traits for allocating and using memory.
IndicesAllocator<> Indices
Type used for indices in PCL.
Definition types.h:133
@ SACMODEL_NORMAL_SPHERE
Definition model_types.h:59
Defines all the PCL and non-PCL macros used.
A point structure representing Euclidean xyz coordinates, and the RGB color.