40 #ifndef PCL_RECOGNITION_HOUGH_3D_H_
41 #define PCL_RECOGNITION_HOUGH_3D_H_
43 #include <pcl/recognition/cg/correspondence_grouping.h>
44 #include <pcl/recognition/boost.h>
59 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
67 HoughSpace3D (
const Eigen::Vector3d &min_coord,
const Eigen::Vector3d &bin_size,
const Eigen::Vector3d &max_coord);
81 vote (
const Eigen::Vector3d &single_vote_coord,
double weight,
int voter_id);
91 voteInt (
const Eigen::Vector3d &single_vote_coord,
double weight,
int voter_id);
102 findMaxima (
double min_threshold, std::vector<double> & maxima_values, std::vector<std::vector<int> > &maxima_voter_ids);
116 int partial_bin_products_[4];
143 template<
typename Po
intModelT,
typename Po
intSceneT,
typename Po
intModelRfT = pcl::ReferenceFrame,
typename Po
intSceneRfT = pcl::ReferenceFrame>
423 recognize (std::vector<Eigen::Matrix4f, Eigen::aligned_allocator<Eigen::Matrix4f> > &transformations);
433 recognize (std::vector<Eigen::Matrix4f, Eigen::aligned_allocator<Eigen::Matrix4f> > &transformations, std::vector<pcl::Correspondences> &clustered_corrs);
511 template<
typename Po
intType,
typename Po
intRfType>
void
516 #ifdef PCL_NO_PRECOMPILE
517 #include <pcl/recognition/impl/cg/hough_3d.hpp>
520 #endif // PCL_RECOGNITION_HOUGH_3D_H_
Eigen::Vector3i bin_count_
Number of bins for each dimension.
Hough3DGrouping()
Constructor.
PointCloud represents the base class in PCL for storing collections of 3D points. ...
void setUseDistanceWeight(bool use_distance_weight)
Sets whether the vote casting procedure uses the correspondence's distance as a score.
bool getUseInterpolation() const
Gets whether the vote casting procedure interpolates the score between neighboring bins of the Hough ...
pcl::PointCloud< PointSceneRfT > SceneRfCloud
std::vector< Eigen::Vector3f > model_votes_
The result of the training.
HoughSpace3D is a 3D voting space.
float getLocalRfNormalsSearchRadius() const
If the Local reference frame has not been set for either the model cloud or the scene cloud...
boost::shared_ptr< const Correspondences > CorrespondencesConstPtr
bool houghVoting()
Finds the transformation matrix between the input and the scene cloud for a set of correspondences us...
double getHoughThreshold() const
Gets the minimum number of votes in the Hough space needed to infer the presence of a model instance ...
SceneCloudConstPtr scene_
The scene cloud.
bool use_distance_weight_
Use the weighted correspondence distance when casting votes.
ModelRfCloud::ConstPtr ModelRfCloudConstPtr
void setLocalRfSearchRadius(float local_rf_search_radius)
If the Local reference frame has not been set for either the model cloud or the scene cloud...
bool use_interpolation_
Use the interpolation between neighboring Hough bins when casting votes.
CorrespondencesConstPtr model_scene_corrs_
The correspondences between points in the input and the scene datasets.
float getLocalRfSearchRadius() const
If the Local reference frame has not been set for either the model cloud or the scene cloud...
ModelRfCloudConstPtr getInputRf() const
Getter for the input dataset's reference frames.
void setUseInterpolation(bool use_interpolation)
Sets whether the vote casting procedure interpolates the score between neighboring bins of the Hough ...
double hough_bin_size_
The size of each bin of the hough space.
pcl::CorrespondenceGrouping< PointModelT, PointSceneT >::SceneCloudConstPtr SceneCloudConstPtr
void setSceneRf(const SceneRfCloudConstPtr &scene_rf)
Provide a pointer to the scene dataset's reference frames.
void setModelSceneCorrespondences(const CorrespondencesConstPtr &corrs)
Provide a pointer to the precomputed correspondences between points in the input dataset and points i...
std::vector< Eigen::Matrix4f, Eigen::aligned_allocator< Eigen::Matrix4f > > found_transformations_
Transformations found by clusterCorrespondences method.
void setLocalRfNormalsSearchRadius(float local_rf_normals_search_radius)
If the Local reference frame has not been set for either the model cloud or the scene cloud...
void setHoughBinSize(double bin_size)
Sets the size of each bin into the Hough space.
PointCloud::Ptr PointCloudPtr
void computeRf(const boost::shared_ptr< const pcl::PointCloud< PointType > > &input, pcl::PointCloud< PointRfType > &rf)
Computes the reference frame for an input cloud.
double hough_threshold_
The minimum number of votes in the Hough space needed to infer the presence of a model instance into ...
boost::shared_ptr< pcl::recognition::HoughSpace3D > hough_space_
The Hough space.
Class implementing a 3D correspondence grouping algorithm that can deal with multiple instances of a ...
pcl::PointCloud< PointModelRfT > ModelRfCloud
virtual void setInputCloud(const PointCloudConstPtr &cloud)
Provide a pointer to the input dataset.
bool getUseDistanceWeight() const
Gets whether the vote casting procedure uses the correspondence's distance as a score.
void setInputRf(const ModelRfCloudConstPtr &input_rf)
Provide a pointer to the input dataset's reference frames.
boost::shared_ptr< PointCloud< PointT > > Ptr
ModelRfCloudConstPtr input_rf_
The input Rf cloud.
Eigen::Vector3d min_coord_
Minimum coordinate in the Hough Space.
double getHoughBinSize() const
Gets the size of each bin into the Hough space.
bool recognize(std::vector< Eigen::Matrix4f, Eigen::aligned_allocator< Eigen::Matrix4f > > &transformations)
The main function, recognizes instances of the model into the scene set by the user.
SceneRfCloud::Ptr SceneRfCloudPtr
boost::shared_ptr< const PointCloud< PointT > > ConstPtr
ModelRfCloud::Ptr ModelRfCloudPtr
PointCloud::ConstPtr PointCloudConstPtr
Eigen::Vector3d bin_size_
Size of each bin in the Hough Space.
bool needs_training_
If the training of the Hough space is needed; set on change of either the input cloud or the input_rf...
SceneRfCloudConstPtr getSceneRf() const
Getter for the scene dataset's reference frames.
SceneRfCloudConstPtr scene_rf_
The scene Rf cloud.
SceneRfCloud::ConstPtr SceneRfCloudConstPtr
SceneCloud::ConstPtr SceneCloudConstPtr
int total_bins_count_
Total number of bins in the Hough Space.
Abstract base class for Correspondence Grouping algorithms.
float local_rf_search_radius_
Search radius for the potential Rf calculation.
bool train()
Call this function after setting the input, the input_rf and the hough_bin_size parameters to perform...
float local_rf_normals_search_radius_
Normals search radius for the potential Rf calculation.
void clusterCorrespondences(std::vector< Correspondences > &model_instances)
Cluster the input correspondences in order to distinguish between different instances of the model in...
std::vector< double > hough_space_
The Hough Space.
void setHoughThreshold(double threshold)
Sets the minimum number of votes in the Hough space needed to infer the presence of a model instance ...
boost::unordered_map< int, std::vector< int > > voter_ids_
List of voters for each bin.
void setSceneCloud(const SceneCloudConstPtr &scene)
Provide a pointer to the scene dataset (i.e.
pcl::PointCloud< PointModelT > PointCloud
bool hough_space_initialized_
Whether the Hough space already contains the correct votes for the current input parameters and so th...
void setInputCloud(const PointCloudConstPtr &cloud)
Provide a pointer to the input dataset.