#ifndef PCL_REGISTRATION_SAMPLE_CONSENSUS_INITIAL_ALIGNMENT_H #define PCL_REGISTRATION_SAMPLE_CONSENSUS_INITIAL_ALIGNMENT_H

#include <pcl/registration/registration.h> #include <pcl/registration/correspondence_estimation.h> #include <pcl/registration/correspondence_rejection.h> #include <pcl/registration/transformation_estimation.h> #include <pcl/registration/transformation_estimation_svd.h> #include <pcl/registration/transformation_estimation_lm.h> #include <pcl/registration/transformation_estimation_point_to_plane.h> #include <pcl/registration/correspondence_rejection_trimmed.h> #include <pcl/registration/correspondence_rejection_surface_normal.h> #include <pcl/registration/correspondence_rejection_one_to_one.h>

namespace pcl { template<typename PointSource, typename PointTarget, typename Scalar = float> class SampleConsensusInitialAlignment : public Registration<PointSource, PointTarget, Scalar> { public: using Ptr = shared_ptr<SampleConsensusInitialAlignment<PointSource, PointTarget, Scalar> >; using ConstPtr = shared_ptr<const SampleConsensusInitialAlignment<PointSource, PointTarget, Scalar> >;

  using PointCloudSource = typename Registration<PointSource, PointTarget, Scalar>::PointCloudSource;
  using PointCloudSourcePtr = typename PointCloudSource::Ptr;
  using PointCloudSourceConstPtr = typename PointCloudSource::ConstPtr;

  using PointCloudTarget = typename Registration<PointSource, PointTarget, Scalar>::PointCloudTarget;
  using PointCloudTargetPtr = typename PointCloudTarget::Ptr;
  using PointCloudTargetConstPtr = typename PointCloudTarget::ConstPtr;

  using PointIndicesPtr = typename Registration<PointSource, PointTarget, Scalar>::PointIndicesPtr;
  using PointIndicesConstPtr = typename Registration<PointSource, PointTarget, Scalar>::PointIndicesConstPtr;

  using Matrix4 = typename Registration<PointSource, PointTarget, Scalar>::Matrix4;

  SampleConsensusInitialAlignment ()
    : min_sample_distance_ (0.05)
    , max_sample_distance_ (0.1)
    , nr_samples_ (3)
    , max_correspondence_distance_ (0.01)
    , nr_iterations_ (1000)
  {
    registration_name_ = "SampleConsensusInitialAlignment";
  }

  void setMinSampleDistance (double min_sample_distance) { min_sample_distance_ = min_sample_distance; }
  double getMinSampleDistance () const { return min_sample_distance_; }

  void setMaxSampleDistance (double max_sample_distance) { max_sample_distance_ = max_sample_distance; }
  double getMaxSampleDistance () const { return max_sample_distance_; }

  void setNumberOfSamples (unsigned int nr_samples) { nr_samples_ = nr_samples; }
  unsigned int getNumberOfSamples () const { return nr_samples_; }

  void setMaxCorrespondenceDistance (double max_correspondence_distance) { max_correspondence_distance_ = max_correspondence_distance; }
  double getMaxCorrespondenceDistance () const { return max_correspondence_distance_; }

  void setNumberOfIterations (unsigned int nr_iterations) { nr_iterations_ = nr_iterations; }
  unsigned int getNumberOfIterations () const { return nr_iterations_; }

  void getCorrespondences (const PointCloudSource &cloud_src,
                           const std::vector<int> &indices_src,
                           const PointCloudTarget &cloud_tgt,
                           std::vector<int> &indices_tgt,
                           std::vector<float> &dists) const;

  void selectSamples (const PointCloudSource &cloud_src,
                      const std::vector<int> &indices_src,
                      std::vector<int> &indices_tgt) const;

  bool computeTransformation (PointCloudSource &output, const Matrix4 &guess) override;

protected:
  double min_sample_distance_;
  double max_sample_distance_;
  unsigned int nr_samples_;
  double max_correspondence_distance_;
  unsigned int nr_iterations_;

}; }

#endif // PCL_REGISTRATION_SAMPLE_CONSENSUS_INITIAL_ALIGNMENT_

#include pclregistrationsample_consensus_initial_alignmenth帮我写这个完整的头文件

原文地址: https://www.cveoy.top/t/topic/hKJw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录