Point Cloud Library (PCL)
1.11.1-dev
|
43 #include <pcl/sample_consensus/sac_model.h>
44 #include <pcl/sample_consensus/model_types.h>
58 template <
typename Po
intT>
73 using Ptr = shared_ptr<SampleConsensusModelCircle2D<PointT> >;
74 using ConstPtr = shared_ptr<const SampleConsensusModelCircle2D<PointT>>;
133 Eigen::VectorXf &model_coefficients)
const override;
141 std::vector<double> &distances)
const override;
150 const double threshold,
161 const double threshold)
const override;
171 const Eigen::VectorXf &model_coefficients,
172 Eigen::VectorXf &optimized_coefficients)
const override;
182 const Eigen::VectorXf &model_coefficients,
184 bool copy_data_fields =
true)
const override;
193 const Eigen::VectorXf &model_coefficients,
194 const double threshold)
const override;
208 isModelValid (
const Eigen::VectorXf &model_coefficients)
const override;
221 const double threshold,
222 std::size_t i = 0)
const;
224 #if defined (__SSE__) && defined (__SSE2__) && defined (__SSE4_1__)
229 countWithinDistanceSSE (
const Eigen::VectorXf &model_coefficients,
230 const double threshold,
231 std::size_t i = 0)
const;
234 #if defined (__AVX__) && defined (__AVX2__)
239 countWithinDistanceAVX (
const Eigen::VectorXf &model_coefficients,
240 const double threshold,
241 std::size_t i = 0)
const;
261 operator() (
const Eigen::VectorXf &x, Eigen::VectorXf &fvec)
const
263 for (
int i = 0; i < values (); ++i)
266 float xt = (*model_->input_)[
indices_[i]].x - x[0];
267 float yt = (*model_->input_)[
indices_[i]].y - x[1];
270 fvec[i] = std::sqrt (xt * xt + yt * yt) - x[2];
280 inline __m256 sqr_dist8 (
const std::size_t i,
const __m256 a_vec,
const __m256 b_vec)
const;
284 inline __m128 sqr_dist4 (
const std::size_t i,
const __m128 a_vec,
const __m128 b_vec)
const;
289 #ifdef PCL_NO_PRECOMPILE
290 #include <pcl/sample_consensus/impl/sac_model_circle.hpp>
SampleConsensusModelCircle2D(const PointCloudConstPtr &cloud, bool random=false)
Constructor for base SampleConsensusModelCircle2D.
bool doSamplesVerifyModel(const std::set< index_t > &indices, const Eigen::VectorXf &model_coefficients, const double threshold) const override
Verify whether a subset of indices verifies the given 2d circle model coefficients.
SampleConsensusModelCircle2D(const SampleConsensusModelCircle2D &source)
Copy constructor.
bool isSampleGood(const Indices &samples) const override
Check if a sample of indices results in a good sample of points indices.
unsigned int sample_size_
The size of a sample from which the model is computed.
void selectWithinDistance(const Eigen::VectorXf &model_coefficients, const double threshold, Indices &inliers) override
Compute all distances from the cloud data to a given 2D circle model.
unsigned int model_size_
The number of coefficients in the model.
SampleConsensusModelCircle2D & operator=(const SampleConsensusModelCircle2D &source)
Copy constructor.
A point structure representing Euclidean xyz coordinates, and the RGB color.
bool computeModelCoefficients(const Indices &samples, Eigen::VectorXf &model_coefficients) const override
Check whether the given index samples can form a valid 2D circle model, compute the model coefficient...
bool isModelValid(const Eigen::VectorXf &model_coefficients) const override
Check whether a model is valid given the user constraints.
pcl::SacModel getModelType() const override
Return a unique id for this model (SACMODEL_CIRCLE2D).
void optimizeModelCoefficients(const Indices &inliers, const Eigen::VectorXf &model_coefficients, Eigen::VectorXf &optimized_coefficients) const override
Recompute the 2d circle coefficients using the given inlier set and return them to the user.
Base functor all the models that need non linear optimization must define their own one and implement...
void getDistancesToModel(const Eigen::VectorXf &model_coefficients, std::vector< double > &distances) const override
Compute all distances from the cloud data to a given 2D circle model.
std::size_t countWithinDistanceStandard(const Eigen::VectorXf &model_coefficients, const double threshold, std::size_t i=0) const
This implementation uses no SIMD instructions.
SampleConsensusModelCircle2D(const PointCloudConstPtr &cloud, const Indices &indices, bool random=false)
Constructor for base SampleConsensusModelCircle2D.
IndicesPtr indices_
A pointer to the vector of point indices to use.
shared_ptr< const SampleConsensusModel< pcl::PointXYZRGB > > ConstPtr
SampleConsensusModelCircle2D defines a model for 2D circle segmentation on the X-Y plane.
shared_ptr< SampleConsensusModel< pcl::PointXYZRGB > > Ptr
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.
std::string model_name_
The model name.
IndicesAllocator<> Indices
Type used for indices in PCL.
typename PointCloud::ConstPtr PointCloudConstPtr
typename PointCloud::Ptr PointCloudPtr
SampleConsensusModel represents the base model class.
void projectPoints(const Indices &inliers, const Eigen::VectorXf &model_coefficients, PointCloud &projected_points, bool copy_data_fields=true) const override
Create a new point cloud with inliers projected onto the 2d circle model.
~SampleConsensusModelCircle2D()
Empty destructor.