41#include <pcl/sample_consensus/sac_model.h>
42#include <pcl/sample_consensus/model_types.h>
44#include <pcl/pcl_exports.h>
49 PCL_EXPORTS
int optimizeModelCoefficientsCone (Eigen::VectorXf& coeff,
const Eigen::ArrayXf& pts_x,
const Eigen::ArrayXf& pts_y,
const Eigen::ArrayXf& pts_z);
66 template <
typename Po
intT,
typename Po
intNT>
83 using Ptr = shared_ptr<SampleConsensusModelCone<PointT, PointNT> >;
84 using ConstPtr = shared_ptr<const SampleConsensusModelCone<PointT, PointNT>>;
93 , axis_ (
Eigen::Vector3f::Zero ())
95 , min_angle_ (-std::numeric_limits<double>::max ())
96 , max_angle_ (std::numeric_limits<double>::max ())
113 , axis_ (
Eigen::Vector3f::Zero ())
115 , min_angle_ (-std::numeric_limits<double>::max ())
116 , max_angle_ (std::numeric_limits<double>::max ())
129 eps_angle_ (), min_angle_ (), max_angle_ ()
146 axis_ = source.axis_;
147 eps_angle_ = source.eps_angle_;
148 min_angle_ = source.min_angle_;
149 max_angle_ = source.max_angle_;
167 setAxis (
const Eigen::Vector3f &ax) { axis_ = ax; }
170 inline Eigen::Vector3f
181 min_angle_ = min_angle;
182 max_angle_ = max_angle;
192 min_angle = min_angle_;
193 max_angle = max_angle_;
204 Eigen::VectorXf &model_coefficients)
const override;
212 std::vector<double> &distances)
const override;
221 const double threshold,
232 const double threshold)
const override;
243 const Eigen::VectorXf &model_coefficients,
244 Eigen::VectorXf &optimized_coefficients)
const override;
255 const Eigen::VectorXf &model_coefficients,
257 bool copy_data_fields =
true)
const override;
266 const Eigen::VectorXf &model_coefficients,
267 const double threshold)
const override;
282 pointToAxisDistance (
const Eigen::Vector4f &pt,
const Eigen::VectorXf &model_coefficients)
const;
288 isModelValid (
const Eigen::VectorXf &model_coefficients)
const override;
299 Eigen::Vector3f axis_;
310#ifdef PCL_NO_PRECOMPILE
311#include <pcl/sample_consensus/impl/sac_model_cone.hpp>
PointCloud represents the base class in PCL for storing collections of 3D points.
SampleConsensusModelCone defines a model for 3D cone segmentation.
void optimizeModelCoefficients(const Indices &inliers, const Eigen::VectorXf &model_coefficients, Eigen::VectorXf &optimized_coefficients) const override
Recompute the cone coefficients using the given inlier set and return them to the user.
void setAxis(const Eigen::Vector3f &ax)
Set the axis along which we need to search for a cone direction.
SampleConsensusModelCone(const PointCloudConstPtr &cloud, const Indices &indices, bool random=false)
Constructor for base SampleConsensusModelCone.
SampleConsensusModelCone(const SampleConsensusModelCone &source)
Copy constructor.
typename SampleConsensusModel< PointT >::PointCloudConstPtr PointCloudConstPtr
~SampleConsensusModelCone() override=default
Empty destructor.
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 cone model.
pcl::SacModel getModelType() const override
Return a unique id for this model (SACMODEL_CONE).
void getDistancesToModel(const Eigen::VectorXf &model_coefficients, std::vector< double > &distances) const override
Compute all distances from the cloud data to a given cone model.
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.
bool isSampleGood(const Indices &samples) const override
Check if a sample of indices results in a good sample of points indices.
bool computeModelCoefficients(const Indices &samples, Eigen::VectorXf &model_coefficients) const override
Check whether the given index samples can form a valid cone model, compute the model coefficients fro...
bool isModelValid(const Eigen::VectorXf &model_coefficients) const override
Check whether a model is valid given the user constraints.
SampleConsensusModelCone & operator=(const SampleConsensusModelCone &source)
Copy constructor.
Eigen::Vector3f getAxis() const
Get the axis along which we need to search for a cone direction.
double pointToAxisDistance(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)
shared_ptr< const SampleConsensusModelCone< PointT, PointNT > > ConstPtr
void setEpsAngle(double ea)
Set the angle epsilon (delta) threshold.
void getMinMaxOpeningAngle(double &min_angle, double &max_angle) const
Get the opening angle which we need minimum to validate a cone model.
double getEpsAngle() const
Get the angle epsilon (delta) threshold.
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 cone model coefficients.
typename SampleConsensusModel< PointT >::PointCloud PointCloud
shared_ptr< SampleConsensusModelCone< PointT, PointNT > > Ptr
void setMinMaxOpeningAngle(const double &min_angle, const double &max_angle)
Set the minimum and maximum allowable opening angle for a cone model given from a user.
SampleConsensusModelCone(const PointCloudConstPtr &cloud, bool random=false)
Constructor for base SampleConsensusModelCone.
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.
SampleConsensusModelFromNormals represents the base model class for models that require the use of su...
PointCloudNConstPtr normals_
A pointer to the input dataset that contains the point normals of the XYZ dataset.
double normal_distance_weight_
The relative weight (between 0 and 1) to give to the angular distance (0 to pi/2) between point norma...
SampleConsensusModel represents the base model class.
double radius_min_
The minimum and maximum radius limits for the model.
unsigned int sample_size_
The size of a sample from which the model is computed.
typename PointCloud::ConstPtr PointCloudConstPtr
IndicesPtr indices_
A pointer to the vector of point indices to use.
PointCloudConstPtr input_
A boost shared pointer to the point cloud data array.
std::string model_name_
The model name.
unsigned int model_size_
The number of coefficients in the model.
typename PointCloud::Ptr PointCloudPtr
std::vector< double > error_sqr_dists_
A vector holding the distances to the computed model.
Define standard C methods to do distance calculations.
PCL_EXPORTS int optimizeModelCoefficientsCone(Eigen::VectorXf &coeff, const Eigen::ArrayXf &pts_x, const Eigen::ArrayXf &pts_y, const Eigen::ArrayXf &pts_z)
IndicesAllocator<> Indices
Type used for indices in PCL.
A point structure representing Euclidean xyz coordinates, and the RGB color.