40 #ifndef PCL_SAMPLE_CONSENSUS_MODEL_CYLINDER_H_
41 #define PCL_SAMPLE_CONSENSUS_MODEL_CYLINDER_H_
63 template <
typename Po
intT,
typename Po
intNT>
78 typedef boost::shared_ptr<SampleConsensusModelCylinder>
Ptr;
85 axis_ (Eigen::Vector3f::Zero ()),
97 axis_ (Eigen::Vector3f::Zero ()),
108 axis_ (Eigen::Vector3f::Zero ()),
122 axis_ = source.axis_;
123 eps_angle_ = source.eps_angle_;
124 tmp_inliers_ = source.tmp_inliers_;
142 setAxis (
const Eigen::Vector3f &ax) { axis_ = ax; }
145 inline Eigen::Vector3f
156 Eigen::VectorXf &model_coefficients);
164 std::vector<double> &distances);
173 const double threshold,
174 std::vector<int> &inliers);
184 const double threshold);
194 const Eigen::VectorXf &model_coefficients,
195 Eigen::VectorXf &optimized_coefficients);
206 const Eigen::VectorXf &model_coefficients,
208 bool copy_data_fields =
true);
217 const Eigen::VectorXf &model_coefficients,
218 const double threshold);
230 pointToLineDistance (
const Eigen::Vector4f &pt,
const Eigen::VectorXf &model_coefficients);
239 projectPointToLine (
const Eigen::Vector4f &pt,
240 const Eigen::Vector4f &line_pt,
241 const Eigen::Vector4f &line_dir,
242 Eigen::Vector4f &pt_proj)
244 float k = (pt.dot (line_dir) - line_pt.dot (line_dir)) / line_dir.dot (line_dir);
246 pt_proj = line_pt + k * line_dir;
256 projectPointToCylinder (
const Eigen::Vector4f &pt,
257 const Eigen::VectorXf &model_coefficients,
258 Eigen::Vector4f &pt_proj);
262 getName ()
const {
return (
"SampleConsensusModelCylinder"); }
269 isModelValid (
const Eigen::VectorXf &model_coefficients);
276 isSampleGood (
const std::vector<int> &samples)
const;
280 Eigen::Vector3f axis_;
286 const std::vector<int> *tmp_inliers_;
288 #if defined BUILD_Maintainer && defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ > 3
289 #pragma GCC diagnostic ignored "-Weffc++"
300 pcl::
Functor<float> (m_data_points), model_ (model) {}
308 operator() (
const Eigen::VectorXf &x, Eigen::VectorXf &fvec)
const
310 Eigen::Vector4f line_pt (x[0], x[1], x[2], 0);
311 Eigen::Vector4f line_dir (x[3], x[4], x[5], 0);
313 for (
int i = 0; i <
values (); ++i)
316 Eigen::Vector4f pt (model_->input_->points[(*model_->tmp_inliers_)[i]].x,
317 model_->input_->points[(*model_->tmp_inliers_)[i]].y,
318 model_->input_->points[(*model_->tmp_inliers_)[i]].z, 0);
327 #if defined BUILD_Maintainer && defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ > 3
328 #pragma GCC diagnostic warning "-Weffc++"
333 #endif //#ifndef PCL_SAMPLE_CONSENSUS_MODEL_CYLINDER_H_