41 #ifndef PCL_SAMPLE_CONSENSUS_MODEL_CIRCLE2D_H_
42 #define PCL_SAMPLE_CONSENSUS_MODEL_CIRCLE2D_H_
44 #include <pcl/sample_consensus/sac_model.h>
45 #include <pcl/sample_consensus/model_types.h>
59 template <
typename Po
intT>
73 typedef boost::shared_ptr<SampleConsensusModelCircle2D>
Ptr;
89 const std::vector<int> &indices,
113 tmp_inliers_ = source.tmp_inliers_;
124 Eigen::VectorXf &model_coefficients);
132 std::vector<double> &distances);
141 const double threshold,
142 std::vector<int> &inliers);
152 const double threshold);
162 const Eigen::VectorXf &model_coefficients,
163 Eigen::VectorXf &optimized_coefficients);
173 const Eigen::VectorXf &model_coefficients,
174 PointCloud &projected_points,
175 bool copy_data_fields =
true);
184 const Eigen::VectorXf &model_coefficients,
185 const double threshold);
196 isModelValid (
const Eigen::VectorXf &model_coefficients);
206 const std::vector<int> *tmp_inliers_;
208 #if defined BUILD_Maintainer && defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ > 3
209 #pragma GCC diagnostic ignored "-Weffc++"
220 pcl::
Functor<float>(m_data_points), model_ (model) {}
228 operator() (
const Eigen::VectorXf &x, Eigen::VectorXf &fvec)
const
230 for (
int i = 0; i < values (); ++i)
233 float xt = model_->input_->points[(*model_->tmp_inliers_)[i]].x - x[0];
234 float yt = model_->input_->points[(*model_->tmp_inliers_)[i]].y - x[1];
237 fvec[i] = sqrtf (xt * xt + yt * yt) - x[2];
244 #if defined BUILD_Maintainer && defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ > 3
245 #pragma GCC diagnostic warning "-Weffc++"
250 #ifdef PCL_NO_PRECOMPILE
251 #include <pcl/sample_consensus/impl/sac_model_circle.hpp>
254 #endif //#ifndef PCL_SAMPLE_CONSENSUS_MODEL_CIRCLE2D_H_
pcl::PointCloud< PointT >::Ptr PointCloudPtr
SampleConsensusModel< PointT >::PointCloud PointCloud
bool doSamplesVerifyModel(const std::set< int > &indices, const Eigen::VectorXf &model_coefficients, const double threshold)
Verify whether a subset of indices verifies the given 2d circle model coefficients.
bool isModelValid(const Eigen::VectorXf &model_coefficients)
Check whether a model is valid given the user constraints.
void getDistancesToModel(const Eigen::VectorXf &model_coefficients, std::vector< double > &distances)
Compute all distances from the cloud data to a given 2D circle model.
SampleConsensusModel< PointT >::PointCloudConstPtr PointCloudConstPtr
virtual int countWithinDistance(const Eigen::VectorXf &model_coefficients, const double threshold)
Count all the points which respect the given model coefficients as inliers.
SampleConsensusModelCircle2D(const PointCloudConstPtr &cloud, bool random=false)
Constructor for base SampleConsensusModelCircle2D.
void optimizeModelCoefficients(const std::vector< int > &inliers, const Eigen::VectorXf &model_coefficients, Eigen::VectorXf &optimized_coefficients)
Recompute the 2d circle coefficients using the given inlier set and return them to the user...
SampleConsensusModelCircle2D defines a model for 2D circle segmentation on the X-Y plane...
SampleConsensusModelCircle2D(const PointCloudConstPtr &cloud, const std::vector< int > &indices, bool random=false)
Constructor for base SampleConsensusModelCircle2D.
SampleConsensusModel represents the base model class.
void projectPoints(const std::vector< int > &inliers, const Eigen::VectorXf &model_coefficients, PointCloud &projected_points, bool copy_data_fields=true)
Create a new point cloud with inliers projected onto the 2d circle model.
bool computeModelCoefficients(const std::vector< int > &samples, Eigen::VectorXf &model_coefficients)
Check whether the given index samples can form a valid 2D circle model, compute the model coefficient...
A point structure representing Euclidean xyz coordinates, and the RGB color.
boost::shared_ptr< SampleConsensusModelCircle2D > Ptr
SampleConsensusModelCircle2D & operator=(const SampleConsensusModelCircle2D &source)
Copy constructor.
bool isSampleGood(const std::vector< int > &samples) const
Check if a sample of indices results in a good sample of points indices.
SampleConsensusModel< PointT >::PointCloudPtr PointCloudPtr
pcl::SacModel getModelType() const
Return an unique id for this model (SACMODEL_CIRCLE2D).
pcl::PointCloud< PointT >::ConstPtr PointCloudConstPtr
void selectWithinDistance(const Eigen::VectorXf &model_coefficients, const double threshold, std::vector< int > &inliers)
Compute all distances from the cloud data to a given 2D circle model.
PointCloud represents the base class in PCL for storing collections of 3D points. ...
Base functor all the models that need non linear optimization must define their own one and implement...
virtual ~SampleConsensusModelCircle2D()
Empty destructor.
SampleConsensusModelCircle2D(const SampleConsensusModelCircle2D &source)
Copy constructor.