Point Cloud Library (PCL)
1.10.1
|
43 #include <pcl/sample_consensus/sac_model.h>
44 #include <pcl/sample_consensus/model_types.h>
63 template <
typename Po
intT,
typename Po
intNT>
90 , axis_ (
Eigen::Vector3f::Zero ())
104 const std::vector<int> &indices,
108 , axis_ (
Eigen::Vector3f::Zero ())
122 axis_ (
Eigen::Vector3f::Zero ()),
140 axis_ = source.axis_;
141 eps_angle_ = source.eps_angle_;
159 setAxis (
const Eigen::Vector3f &ax) { axis_ = ax; }
162 inline Eigen::Vector3f
173 Eigen::VectorXf &model_coefficients)
const override;
181 std::vector<double> &distances)
const override;
190 const double threshold,
191 std::vector<int> &inliers)
override;
201 const double threshold)
const override;
211 const Eigen::VectorXf &model_coefficients,
212 Eigen::VectorXf &optimized_coefficients)
const override;
223 const Eigen::VectorXf &model_coefficients,
225 bool copy_data_fields =
true)
const override;
234 const Eigen::VectorXf &model_coefficients,
235 const double threshold)
const override;
250 pointToLineDistance (
const Eigen::Vector4f &pt,
const Eigen::VectorXf &model_coefficients)
const;
260 const Eigen::Vector4f &line_pt,
261 const Eigen::Vector4f &line_dir,
262 Eigen::Vector4f &pt_proj)
const
264 float k = (pt.dot (line_dir) - line_pt.dot (line_dir)) / line_dir.dot (line_dir);
266 pt_proj = line_pt + k * line_dir;
277 const Eigen::VectorXf &model_coefficients,
278 Eigen::Vector4f &pt_proj)
const;
284 isModelValid (
const Eigen::VectorXf &model_coefficients)
const override;
291 isSampleGood (
const std::vector<int> &samples)
const override;
295 Eigen::Vector3f axis_;
316 operator() (
const Eigen::VectorXf &x, Eigen::VectorXf &fvec)
const
318 Eigen::Vector4f line_pt (x[0], x[1], x[2], 0);
319 Eigen::Vector4f line_dir (x[3], x[4], x[5], 0);
321 for (
int i = 0; i < values (); ++i)
324 Eigen::Vector4f pt (model_->input_->points[
indices_[i]].x,
325 model_->input_->points[
indices_[i]].y,
326 model_->input_->points[
indices_[i]].z, 0);
339 #ifdef PCL_NO_PRECOMPILE
340 #include <pcl/sample_consensus/impl/sac_model_cylinder.hpp>
void setAxis(const Eigen::Vector3f &ax)
Set the axis along which we need to search for a cylinder direction.
This file defines compatibility wrappers for low level I/O functions.
bool isSampleGood(const std::vector< int > &samples) const override
Check if a sample of indices results in a good sample of points indices.
SampleConsensusModelCylinder defines a model for 3D cylinder segmentation.
void projectPoints(const std::vector< int > &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 cylinder model.
void setEpsAngle(const double ea)
Set the angle epsilon (delta) threshold.
SampleConsensusModelFromNormals represents the base model class for models that require the use of su...
double pointToLineDistance(const Eigen::Vector4f &pt, const Eigen::VectorXf &model_coefficients) const
Get the distance from a point to a line (represented by a point and a direction)
unsigned int sample_size_
The size of a sample from which the model is computed.
SampleConsensusModelCylinder(const SampleConsensusModelCylinder &source)
Copy constructor.
void projectPointToCylinder(const Eigen::Vector4f &pt, const Eigen::VectorXf &model_coefficients, Eigen::Vector4f &pt_proj) const
Project a point onto a cylinder given by its model coefficients (point_on_axis, axis_direction,...
unsigned int model_size_
The number of coefficients in the model.
Eigen::Vector3f getAxis() const
Get the axis along which we need to search for a cylinder direction.
void selectWithinDistance(const Eigen::VectorXf &model_coefficients, const double threshold, std::vector< int > &inliers) override
Select all the points which respect the given model coefficients as inliers.
A point structure representing Euclidean xyz coordinates, and the RGB color.
SampleConsensusModelCylinder & operator=(const SampleConsensusModelCylinder &source)
Copy constructor.
bool computeModelCoefficients(const std::vector< int > &samples, Eigen::VectorXf &model_coefficients) const override
Check whether the given index samples can form a valid cylinder model, compute the model coefficients...
SampleConsensusModelCylinder(const PointCloudConstPtr &cloud, const std::vector< int > &indices, bool random=false)
Constructor for base SampleConsensusModelCylinder.
pcl::SacModel getModelType() const override
Return a unique id for this model (SACMODEL_CYLINDER).
~SampleConsensusModelCylinder()
Empty destructor.
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.
Base functor all the models that need non linear optimization must define their own one and implement...
IndicesPtr indices_
A pointer to the vector of point indices to use.
shared_ptr< const SampleConsensusModel< pcl::PointXYZRGB > > ConstPtr
SampleConsensusModelCylinder(const PointCloudConstPtr &cloud, bool random=false)
Constructor for base SampleConsensusModelCylinder.
bool isModelValid(const Eigen::VectorXf &model_coefficients) const override
Check whether a model is valid given the user constraints.
shared_ptr< SampleConsensusModel< pcl::PointXYZRGB > > Ptr
std::string model_name_
The model name.
bool doSamplesVerifyModel(const std::set< int > &indices, const Eigen::VectorXf &model_coefficients, const double threshold) const override
Verify whether a subset of indices verifies the given cylinder model coefficients.
typename PointCloud::ConstPtr PointCloudConstPtr
void optimizeModelCoefficients(const std::vector< int > &inliers, const Eigen::VectorXf &model_coefficients, Eigen::VectorXf &optimized_coefficients) const override
Recompute the cylinder coefficients using the given inlier set and return them to the user.
void getDistancesToModel(const Eigen::VectorXf &model_coefficients, std::vector< double > &distances) const override
Compute all distances from the cloud data to a given cylinder model.
double getEpsAngle() const
Get the angle epsilon (delta) threshold.
void projectPointToLine(const Eigen::Vector4f &pt, const Eigen::Vector4f &line_pt, const Eigen::Vector4f &line_dir, Eigen::Vector4f &pt_proj) const
Project a point onto a line given by a point and a direction vector.
typename PointCloud::Ptr PointCloudPtr
SampleConsensusModel represents the base model class.
double sqrPointToLineDistance(const Eigen::Vector4f &pt, const Eigen::Vector4f &line_pt, const Eigen::Vector4f &line_dir)
Get the square distance from a point to a line (represented by a point and a direction)
boost::shared_ptr< T > shared_ptr
Alias for boost::shared_ptr.