Point Cloud Library (PCL)
1.14.1-dev
|
This class implements Implicit Shape Model algorithm described in "Hough Transforms and 3D SURF for robust three dimensional classification" by Jan Knopp, Mukta Prasad, Geert Willems, Radu Timofte, and Luc Van Gool. More...
#include <pcl/recognition/implicit_shape_model.h>
Classes | |
struct | LocationInfo |
This structure stores the information about the keypoint. More... | |
struct | TermCriteria |
This structure is used for determining the end of the k-means clustering process. More... | |
struct | VisualWordStat |
Structure for storing the visual word. More... | |
Public Types | |
using | ISMModelPtr = pcl::features::ISMModel::Ptr |
using | Feature = pcl::Feature< PointT, pcl::Histogram< FeatureSize > > |
using | FeaturePtr = typename Feature::Ptr |
Public Member Functions | |
ImplicitShapeModelEstimation () | |
Simple constructor that initializes everything. More... | |
virtual | ~ImplicitShapeModelEstimation () |
Simple destructor. More... | |
std::vector< typename pcl::PointCloud< PointT >::Ptr > | getTrainingClouds () |
This method simply returns the clouds that were set as the training clouds. More... | |
void | setTrainingClouds (const std::vector< typename pcl::PointCloud< PointT >::Ptr > &training_clouds) |
Allows to set clouds for training the ISM model. More... | |
std::vector< unsigned int > | getTrainingClasses () |
Returns the array of classes that indicates which class the corresponding training cloud belongs. More... | |
void | setTrainingClasses (const std::vector< unsigned int > &training_classes) |
Allows to set the class labels for the corresponding training clouds. More... | |
std::vector< typename pcl::PointCloud< NormalT >::Ptr > | getTrainingNormals () |
This method returns the corresponding cloud of normals for every training point cloud. More... | |
void | setTrainingNormals (const std::vector< typename pcl::PointCloud< NormalT >::Ptr > &training_normals) |
Allows to set normals for the training clouds that were passed through setTrainingClouds method. More... | |
float | getSamplingSize () |
Returns the sampling size used for cloud simplification. More... | |
void | setSamplingSize (float sampling_size) |
Changes the sampling size used for cloud simplification. More... | |
FeaturePtr | getFeatureEstimator () |
Returns the current feature estimator used for extraction of the descriptors. More... | |
void | setFeatureEstimator (FeaturePtr feature) |
Changes the feature estimator. More... | |
unsigned int | getNumberOfClusters () |
Returns the number of clusters used for descriptor clustering. More... | |
void | setNumberOfClusters (unsigned int num_of_clusters) |
Changes the number of clusters. More... | |
std::vector< float > | getSigmaDists () |
Returns the array of sigma values. More... | |
void | setSigmaDists (const std::vector< float > &training_sigmas) |
This method allows to set the value of sigma used for calculating the learned weights for every single class. More... | |
bool | getNVotState () |
Returns the state of Nvot coeff from [Knopp et al., 2010, (4)], if set to false then coeff is taken as 1.0. More... | |
void | setNVotState (bool state) |
Changes the state of the Nvot coeff from [Knopp et al., 2010, (4)]. More... | |
bool | trainISM (ISMModelPtr &trained_model) |
This method performs training and forms a visual vocabulary. More... | |
pcl::features::ISMVoteList< PointT >::Ptr | findObjects (ISMModelPtr model, typename pcl::PointCloud< PointT >::Ptr in_cloud, typename pcl::PointCloud< Normal >::Ptr in_normals, int in_class_of_interest) |
This function is searching for the class of interest in a given cloud and returns the list of votes. More... | |
Protected Member Functions | |
bool | extractDescriptors (std::vector< pcl::Histogram< FeatureSize > > &histograms, std::vector< LocationInfo, Eigen::aligned_allocator< LocationInfo > > &locations) |
Extracts the descriptors from the input clouds. More... | |
bool | clusterDescriptors (std::vector< pcl::Histogram< FeatureSize > > &histograms, Eigen::MatrixXi &labels, Eigen::MatrixXf &clusters_centers) |
This method performs descriptor clustering. More... | |
void | calculateSigmas (std::vector< float > &sigmas) |
This method calculates the value of sigma used for calculating the learned weights for every single class. More... | |
void | calculateWeights (const std::vector< LocationInfo, Eigen::aligned_allocator< LocationInfo > > &locations, const Eigen::MatrixXi &labels, std::vector< float > &sigmas, std::vector< std::vector< unsigned int > > &clusters, std::vector< std::vector< float > > &statistical_weights, std::vector< float > &learned_weights) |
This function forms a visual vocabulary and evaluates weights described in [Knopp et al., 2010, (5)]. More... | |
void | simplifyCloud (typename pcl::PointCloud< PointT >::ConstPtr in_point_cloud, typename pcl::PointCloud< NormalT >::ConstPtr in_normal_cloud, typename pcl::PointCloud< PointT >::Ptr out_sampled_point_cloud, typename pcl::PointCloud< NormalT >::Ptr out_sampled_normal_cloud) |
Simplifies the cloud using voxel grid principles. More... | |
void | shiftCloud (typename pcl::PointCloud< PointT >::Ptr in_cloud, Eigen::Vector3f shift_point) |
This method simply shifts the clouds points relative to the passed point. More... | |
Eigen::Matrix3f | alignYCoordWithNormal (const NormalT &in_normal) |
This method simply computes the rotation matrix, so that the given normal would match the Y axis after the transformation. More... | |
void | applyTransform (Eigen::Vector3f &io_vec, const Eigen::Matrix3f &in_transform) |
This method applies transform set in in_transform to vector io_vector. More... | |
void | estimateFeatures (typename pcl::PointCloud< PointT >::Ptr sampled_point_cloud, typename pcl::PointCloud< NormalT >::Ptr normal_cloud, typename pcl::PointCloud< pcl::Histogram< FeatureSize > >::Ptr feature_cloud) |
This method estimates features for the given point cloud. More... | |
double | computeKMeansClustering (const Eigen::MatrixXf &points_to_cluster, int number_of_clusters, Eigen::MatrixXi &io_labels, TermCriteria criteria, int attempts, int flags, Eigen::MatrixXf &cluster_centers) |
Performs K-means clustering. More... | |
void | generateCentersPP (const Eigen::MatrixXf &data, Eigen::MatrixXf &out_centers, int number_of_clusters, int trials) |
Generates centers for clusters as described in Arthur, David and Sergei Vassilvitski (2007) k-means++: The Advantages of Careful Seeding. More... | |
void | generateRandomCenter (const std::vector< Eigen::Vector2f, Eigen::aligned_allocator< Eigen::Vector2f > > &boxes, Eigen::VectorXf ¢er) |
Generates random center for cluster. More... | |
float | computeDistance (Eigen::VectorXf &vec_1, Eigen::VectorXf &vec_2) |
Computes the square distance between two vectors. More... | |
ImplicitShapeModelEstimation & | operator= (const ImplicitShapeModelEstimation &) |
Forbids the assignment operator. More... | |
Protected Attributes | |
std::vector< typename pcl::PointCloud< PointT >::Ptr > | training_clouds_ {} |
Stores the clouds used for training. More... | |
std::vector< unsigned int > | training_classes_ {} |
Stores the class number for each cloud from training_clouds_. More... | |
std::vector< typename pcl::PointCloud< NormalT >::Ptr > | training_normals_ {} |
Stores the normals for each training cloud. More... | |
std::vector< float > | training_sigmas_ {} |
This array stores the sigma values for each training class. More... | |
float | sampling_size_ {0.1f} |
This value is used for the simplification. More... | |
Feature::Ptr | feature_estimator_ |
Stores the feature estimator. More... | |
unsigned int | number_of_clusters_ {184} |
Number of clusters, is used for clustering descriptors during the training. More... | |
bool | n_vot_ON_ {true} |
If set to false then Nvot coeff from [Knopp et al., 2010, (4)] is equal 1.0. More... | |
Static Protected Attributes | |
static const int | PP_CENTERS = 2 |
This const value is used for indicating that for k-means clustering centers must be generated as described in Arthur, David and Sergei Vassilvitski (2007) k-means++: The Advantages of Careful Seeding. More... | |
static const int | USE_INITIAL_LABELS = 1 |
This const value is used for indicating that input labels must be taken as the initial approximation for k-means clustering. More... | |
This class implements Implicit Shape Model algorithm described in "Hough Transforms and 3D SURF for robust three dimensional classification" by Jan Knopp, Mukta Prasad, Geert Willems, Radu Timofte, and Luc Van Gool.
It has two main member functions. One for training, using the data for which we know which class it belongs to. And second for investigating a cloud for the presence of the class of interest. Implementation of the ISM algorithm described in "Hough Transforms and 3D SURF for robust three dimensional classification" by Jan Knopp, Mukta Prasad, Geert Willems, Radu Timofte, and Luc Van Gool
Authors: Roman Shapovalov, Alexander Velizhev, Sergey Ushakov
Definition at line 241 of file implicit_shape_model.h.
using pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::Feature = pcl::Feature<PointT, pcl::Histogram<FeatureSize> > |
Definition at line 246 of file implicit_shape_model.h.
using pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::FeaturePtr = typename Feature::Ptr |
Definition at line 247 of file implicit_shape_model.h.
using pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::ISMModelPtr = pcl::features::ISMModel::Ptr |
Definition at line 245 of file implicit_shape_model.h.
|
default |
Simple constructor that initializes everything.
|
virtual |
Simple destructor.
Definition at line 534 of file implicit_shape_model.hpp.
|
protected |
This method simply computes the rotation matrix, so that the given normal would match the Y axis after the transformation.
This is done because the algorithm needs to be invariant to the affine transformations.
[in] | in_normal | normal for which the rotation matrix need to be computed |
Definition at line 1164 of file implicit_shape_model.hpp.
References pcl::B.
|
protected |
This method applies transform set in in_transform to vector io_vector.
[in] | io_vec | vector that need to be transformed |
[in] | in_transform | matrix that contains the transformation |
Definition at line 1195 of file implicit_shape_model.hpp.
|
protected |
This method calculates the value of sigma used for calculating the learned weights for every single class.
[out] | sigmas | computed sigmas. |
Definition at line 905 of file implicit_shape_model.hpp.
|
protected |
This function forms a visual vocabulary and evaluates weights described in [Knopp et al., 2010, (5)].
[in] | locations | array containing description of each keypoint: its position, which cloud belongs and expected direction to center |
[in] | labels | labels that were obtained during k-means clustering |
[in] | sigmas | array of sigmas for each class |
[in] | clusters | clusters that were obtained during k-means clustering |
[out] | statistical_weights | stores the computed statistical weights |
[out] | learned_weights | stores the computed learned weights |
Definition at line 956 of file implicit_shape_model.hpp.
|
protected |
This method performs descriptor clustering.
[in] | histograms | descriptors to cluster |
[out] | labels | it contains labels for each descriptor |
[out] | clusters_centers | stores the centers of clusters |
Definition at line 879 of file implicit_shape_model.hpp.
|
protected |
Computes the square distance between two vectors.
[in] | vec_1 | first vector |
[in] | vec_2 | second vector |
Definition at line 1485 of file implicit_shape_model.hpp.
References pcl::geometry::distance().
|
protected |
Performs K-means clustering.
[in] | points_to_cluster | points to cluster |
[in] | number_of_clusters | desired number of clusters |
[out] | io_labels | output parameter, which stores the label for each point |
[in] | criteria | defines when the computational process need to be finished. For example if the desired accuracy is achieved or the iteration number exceeds given value |
[in] | attempts | number of attempts to compute clustering |
[in] | flags | if set to USE_INITIAL_LABELS then initial approximation of labels is taken from io_labels |
[out] | cluster_centers | it will store the cluster centers |
Definition at line 1227 of file implicit_shape_model.hpp.
References pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::TermCriteria::epsilon_, pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::TermCriteria::max_count_, and pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::TermCriteria::type_.
|
protected |
This method estimates features for the given point cloud.
[in] | sampled_point_cloud | sampled point cloud for which the features must be computed |
[in] | normal_cloud | normals for the original point cloud |
[out] | feature_cloud | it will store the computed histograms (features) for the given cloud |
Definition at line 1202 of file implicit_shape_model.hpp.
References pcl::PointCloud< PointT >::makeShared(), and pcl::FeatureFromNormals< PointInT, PointNT, PointOutT >::setInputNormals().
|
protected |
Extracts the descriptors from the input clouds.
[out] | histograms | it will store the descriptors for each key point |
[out] | locations | it will contain the comprehensive information (such as direction, initial keypoint) for the corresponding descriptors |
Definition at line 818 of file implicit_shape_model.hpp.
References pcl::PointCloud< PointT >::begin(), pcl::geometry::distance(), and pcl::PointCloud< PointT >::points.
pcl::features::ISMVoteList< PointT >::Ptr pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::findObjects | ( | ISMModelPtr | model, |
typename pcl::PointCloud< PointT >::Ptr | in_cloud, | ||
typename pcl::PointCloud< Normal >::Ptr | in_normals, | ||
int | in_class_of_interest | ||
) |
This function is searching for the class of interest in a given cloud and returns the list of votes.
[in] | model | trained model which will be used for searching the objects |
[in] | in_cloud | input cloud that need to be investigated |
[in] | in_normals | cloud of normals corresponding to the input cloud |
[in] | in_class_of_interest | class which we are looking for |
Definition at line 723 of file implicit_shape_model.hpp.
References pcl::features::ISMVoteList< PointT >::addVote(), pcl::PointCloud< PointT >::points, pcl::PointCloud< PointT >::size(), and pcl::InterestPoint::strength.
|
protected |
Generates centers for clusters as described in Arthur, David and Sergei Vassilvitski (2007) k-means++: The Advantages of Careful Seeding.
[in] | data | points to cluster |
[out] | out_centers | it will contain generated centers |
[in] | number_of_clusters | defines the number of desired cluster centers |
[in] | trials | number of trials to generate a center |
Definition at line 1393 of file implicit_shape_model.hpp.
|
protected |
Generates random center for cluster.
[in] | boxes | contains min and max values for each dimension |
[out] | center | it will the contain generated center |
Definition at line 1469 of file implicit_shape_model.hpp.
pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::FeaturePtr pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::getFeatureEstimator |
Returns the current feature estimator used for extraction of the descriptors.
Definition at line 610 of file implicit_shape_model.hpp.
unsigned int pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::getNumberOfClusters |
Returns the number of clusters used for descriptor clustering.
Definition at line 624 of file implicit_shape_model.hpp.
bool pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::getNVotState |
Returns the state of Nvot coeff from [Knopp et al., 2010, (4)], if set to false then coeff is taken as 1.0.
It is just a kind of heuristic. The default behavior is as in the article. So you can ignore this if you want.
Definition at line 655 of file implicit_shape_model.hpp.
float pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::getSamplingSize |
Returns the sampling size used for cloud simplification.
Definition at line 595 of file implicit_shape_model.hpp.
std::vector< float > pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::getSigmaDists |
Returns the array of sigma values.
Definition at line 639 of file implicit_shape_model.hpp.
std::vector< unsigned int > pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::getTrainingClasses |
Returns the array of classes that indicates which class the corresponding training cloud belongs.
Definition at line 562 of file implicit_shape_model.hpp.
std::vector< typename pcl::PointCloud< PointT >::Ptr > pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::getTrainingClouds |
This method simply returns the clouds that were set as the training clouds.
Definition at line 545 of file implicit_shape_model.hpp.
std::vector< typename pcl::PointCloud< NormalT >::Ptr > pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::getTrainingNormals |
This method returns the corresponding cloud of normals for every training point cloud.
Definition at line 578 of file implicit_shape_model.hpp.
|
protected |
Forbids the assignment operator.
void pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::setFeatureEstimator | ( | FeaturePtr | feature | ) |
Changes the feature estimator.
[in] | feature | feature estimator that will be used to extract the descriptors. Note that it must be fully initialized and configured. |
Definition at line 617 of file implicit_shape_model.hpp.
void pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::setNumberOfClusters | ( | unsigned int | num_of_clusters | ) |
Changes the number of clusters.
num_of_clusters | desired number of clusters |
Definition at line 631 of file implicit_shape_model.hpp.
void pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::setNVotState | ( | bool | state | ) |
Changes the state of the Nvot coeff from [Knopp et al., 2010, (4)].
[in] | state | desired state, if false then Nvot is taken as 1.0 |
Definition at line 662 of file implicit_shape_model.hpp.
void pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::setSamplingSize | ( | float | sampling_size | ) |
Changes the sampling size used for cloud simplification.
[in] | sampling_size | desired size of grid bin |
Definition at line 602 of file implicit_shape_model.hpp.
void pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::setSigmaDists | ( | const std::vector< float > & | training_sigmas | ) |
This method allows to set the value of sigma used for calculating the learned weights for every single class.
[in] | training_sigmas | new sigmas for every class. If you want these values to be computed automatically, just pass the empty array. The automatic regime calculates the maximum distance between the objects points and takes 10% of this value as recommended in the article. If there are several objects of the same class, then it computes the average maximum distance and takes 10%. Note that each class has its own sigma value. |
Definition at line 646 of file implicit_shape_model.hpp.
void pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::setTrainingClasses | ( | const std::vector< unsigned int > & | training_classes | ) |
Allows to set the class labels for the corresponding training clouds.
[in] | training_classes | array of class labels |
Definition at line 569 of file implicit_shape_model.hpp.
void pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::setTrainingClouds | ( | const std::vector< typename pcl::PointCloud< PointT >::Ptr > & | training_clouds | ) |
Allows to set clouds for training the ISM model.
[in] | training_clouds | array of point clouds for training |
Definition at line 552 of file implicit_shape_model.hpp.
void pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::setTrainingNormals | ( | const std::vector< typename pcl::PointCloud< NormalT >::Ptr > & | training_normals | ) |
Allows to set normals for the training clouds that were passed through setTrainingClouds method.
[in] | training_normals | array of clouds, each cloud is the cloud of normals |
Definition at line 585 of file implicit_shape_model.hpp.
|
protected |
This method simply shifts the clouds points relative to the passed point.
[in] | in_cloud | cloud to shift |
[in] | shift_point | point relative to which the cloud will be shifted |
Definition at line 1150 of file implicit_shape_model.hpp.
References pcl::PointCloud< PointT >::points.
|
protected |
Simplifies the cloud using voxel grid principles.
[in] | in_point_cloud | cloud that need to be simplified |
[in] | in_normal_cloud | normals of the cloud that need to be simplified |
[out] | out_sampled_point_cloud | simplified cloud |
[out] | out_sampled_normal_cloud | and the corresponding normals |
Definition at line 1086 of file implicit_shape_model.hpp.
References pcl::geometry::distance(), pcl::FilterIndices< PointT >::filter(), pcl::Filter< PointT >::filter(), pcl::VoxelGrid< PointT >::getCentroidIndex(), pcl::PCLBase< PointT >::setIndices(), pcl::PCLBase< PointT >::setInputCloud(), pcl::VoxelGrid< PointT >::setLeafSize(), pcl::VoxelGrid< PointT >::setSaveLeafLayout(), and pcl::PointCloud< PointT >::size().
bool pcl::ism::ImplicitShapeModelEstimation< FeatureSize, PointT, NormalT >::trainISM | ( | ISMModelPtr & | trained_model | ) |
This method performs training and forms a visual vocabulary.
It returns a trained model that can be saved to file for later usage.
[out] | trained_model | trained model |
Definition at line 669 of file implicit_shape_model.hpp.
|
protected |
Stores the feature estimator.
Definition at line 602 of file implicit_shape_model.h.
|
protected |
If set to false then Nvot coeff from [Knopp et al., 2010, (4)] is equal 1.0.
Definition at line 608 of file implicit_shape_model.h.
|
protected |
Number of clusters, is used for clustering descriptors during the training.
Definition at line 605 of file implicit_shape_model.h.
|
staticprotected |
This const value is used for indicating that for k-means clustering centers must be generated as described in Arthur, David and Sergei Vassilvitski (2007) k-means++: The Advantages of Careful Seeding.
Definition at line 613 of file implicit_shape_model.h.
|
protected |
This value is used for the simplification.
It sets the size of grid bin.
Definition at line 599 of file implicit_shape_model.h.
|
protected |
Stores the class number for each cloud from training_clouds_.
Definition at line 588 of file implicit_shape_model.h.
|
protected |
Stores the clouds used for training.
Definition at line 585 of file implicit_shape_model.h.
|
protected |
Stores the normals for each training cloud.
Definition at line 591 of file implicit_shape_model.h.
|
protected |
This array stores the sigma values for each training class.
If this array has a size equals 0, then sigma values will be calculated automatically.
Definition at line 596 of file implicit_shape_model.h.
|
staticprotected |
This const value is used for indicating that input labels must be taken as the initial approximation for k-means clustering.
Definition at line 617 of file implicit_shape_model.h.