Point Cloud Library (PCL)  1.7.2
Classes | Functions
Module segmentation

Detailed Description

Overview

The pcl_segmentation library contains algorithms for segmenting a point cloud into distinct clusters. These algorithms are best suited to processing a point cloud that is composed of a number of spatially isolated regions. In such cases, clustering is often used to break the cloud down into its constituent parts, which can then be processed independently.

Requirements

Classes

class  pcl::gpu::EuclideanClusterExtraction
 EuclideanClusterExtraction represents a segmentation class for cluster extraction in an Euclidean sense, depending on pcl::gpu::octree More...
 
class  pcl::gpu::EuclideanLabeledClusterExtraction< PointT >
 EuclideanLabeledClusterExtraction represents a segmentation class for cluster extraction in an Euclidean sense, depending on pcl::gpu::octree More...
 
class  pcl::ConditionalEuclideanClustering< PointT >
 ConditionalEuclideanClustering performs segmentation based on Euclidean distance and a user-defined clustering condition. More...
 
class  pcl::LabeledEuclideanClusterExtraction< PointT >
 LabeledEuclideanClusterExtraction represents a segmentation class for cluster extraction in an Euclidean sense, with label info. More...
 
class  pcl::ExtractPolygonalPrismData< PointT >
 ExtractPolygonalPrismData uses a set of point indices that represent a planar model, and together with a given height, generates a 3D polygonal prism. More...
 
class  pcl::GrabCut< PointT >
 Implementation of the GrabCut segmentation in "GrabCut — Interactive Foreground Extraction using Iterated Graph Cuts" by Carsten Rother, Vladimir Kolmogorov and Andrew Blake. More...
 
class  pcl::segmentation::detail::RandomWalker< Graph, EdgeWeightMap, VertexColorMap >
 Multilabel graph segmentation using random walks. More...
 
class  pcl::SACSegmentation< PointT >
 SACSegmentation represents the Nodelet segmentation class for Sample Consensus methods and models, in the sense that it just creates a Nodelet wrapper for generic-purpose SAC-based segmentation. More...
 
class  pcl::SACSegmentationFromNormals< PointT, PointNT >
 SACSegmentationFromNormals represents the PCL nodelet segmentation class for Sample Consensus methods and models that require the use of surface normals for estimation. More...
 
class  pcl::SeededHueSegmentation
 SeededHueSegmentation. More...
 
class  pcl::SegmentDifferences< PointT >
 SegmentDifferences obtains the difference between two spatially aligned point clouds and returns the difference between them for a maximum given distance threshold. More...
 

Functions

bool pcl::gpu::comparePointClusters (const pcl::PointIndices &a, const pcl::PointIndices &b)
 Sort clusters method (for std::sort). More...
 
bool pcl::gpu::compareLabeledPointClusters (const pcl::PointIndices &a, const pcl::PointIndices &b)
 Sort clusters method (for std::sort). More...
 
template<typename PointT >
void pcl::extractEuclideanClusters (const PointCloud< PointT > &cloud, const boost::shared_ptr< search::Search< PointT > > &tree, float tolerance, std::vector< PointIndices > &clusters, unsigned int min_pts_per_cluster=1, unsigned int max_pts_per_cluster=(std::numeric_limits< int >::max)())
 Decompose a region of space into clusters based on the Euclidean distance between points. More...
 
template<typename PointT >
void pcl::extractEuclideanClusters (const PointCloud< PointT > &cloud, const std::vector< int > &indices, const boost::shared_ptr< search::Search< PointT > > &tree, float tolerance, std::vector< PointIndices > &clusters, unsigned int min_pts_per_cluster=1, unsigned int max_pts_per_cluster=(std::numeric_limits< int >::max)())
 Decompose a region of space into clusters based on the Euclidean distance between points. More...
 
template<typename PointT , typename Normal >
void pcl::extractEuclideanClusters (const PointCloud< PointT > &cloud, const PointCloud< Normal > &normals, float tolerance, const boost::shared_ptr< KdTree< PointT > > &tree, std::vector< PointIndices > &clusters, double eps_angle, unsigned int min_pts_per_cluster=1, unsigned int max_pts_per_cluster=(std::numeric_limits< int >::max)())
 Decompose a region of space into clusters based on the euclidean distance between points, and the normal angular deviation. More...
 
template<typename PointT , typename Normal >
void pcl::extractEuclideanClusters (const PointCloud< PointT > &cloud, const PointCloud< Normal > &normals, const std::vector< int > &indices, const boost::shared_ptr< KdTree< PointT > > &tree, float tolerance, std::vector< PointIndices > &clusters, double eps_angle, unsigned int min_pts_per_cluster=1, unsigned int max_pts_per_cluster=(std::numeric_limits< int >::max)())
 Decompose a region of space into clusters based on the euclidean distance between points, and the normal angular deviation. More...
 
bool pcl::comparePointClusters (const pcl::PointIndices &a, const pcl::PointIndices &b)
 Sort clusters method (for std::sort). More...
 
template<typename PointT >
void pcl::extractLabeledEuclideanClusters (const PointCloud< PointT > &cloud, const boost::shared_ptr< search::Search< PointT > > &tree, float tolerance, std::vector< std::vector< PointIndices > > &labeled_clusters, unsigned int min_pts_per_cluster=1, unsigned int max_pts_per_cluster=std::numeric_limits< unsigned int >::max(), unsigned int max_label=std::numeric_limits< unsigned int >::max())
 Decompose a region of space into clusters based on the Euclidean distance between points. More...
 
bool pcl::compareLabeledPointClusters (const pcl::PointIndices &a, const pcl::PointIndices &b)
 Sort clusters method (for std::sort). More...
 
template<typename PointT >
bool pcl::isPointIn2DPolygon (const PointT &point, const pcl::PointCloud< PointT > &polygon)
 General purpose method for checking if a 3D point is inside or outside a given 2D polygon. More...
 
template<typename PointT >
bool pcl::isXYPointIn2DXYPolygon (const PointT &point, const pcl::PointCloud< PointT > &polygon)
 Check if a 2d point (X and Y coordinates considered only!) is inside or outside a given polygon. More...
 
template<class Graph >
bool pcl::segmentation::randomWalker (Graph &graph)
 Multilabel graph segmentation using random walks. More...
 
template<class Graph , class EdgeWeightMap , class VertexColorMap >
bool pcl::segmentation::randomWalker (Graph &graph, EdgeWeightMap weights, VertexColorMap colors)
 Multilabel graph segmentation using random walks. More...
 
template<class Graph , class EdgeWeightMap , class VertexColorMap >
bool pcl::segmentation::randomWalker (Graph &graph, EdgeWeightMap weights, VertexColorMap colors, Eigen::Matrix< typename boost::property_traits< EdgeWeightMap >::value_type, Eigen::Dynamic, Eigen::Dynamic > &potentials, std::map< typename boost::property_traits< VertexColorMap >::value_type, size_t > &colors_to_columns_map)
 Multilabel graph segmentation using random walks. More...
 
void pcl::seededHueSegmentation (const PointCloud< PointXYZRGB > &cloud, const boost::shared_ptr< search::Search< PointXYZRGB > > &tree, float tolerance, PointIndices &indices_in, PointIndices &indices_out, float delta_hue=0.0)
 Decompose a region of space into clusters based on the Euclidean distance between points. More...
 
void pcl::seededHueSegmentation (const PointCloud< PointXYZRGB > &cloud, const boost::shared_ptr< search::Search< PointXYZRGBL > > &tree, float tolerance, PointIndices &indices_in, PointIndices &indices_out, float delta_hue=0.0)
 Decompose a region of space into clusters based on the Euclidean distance between points. More...
 
template<typename PointT >
void pcl::getPointCloudDifference (const pcl::PointCloud< PointT > &src, const pcl::PointCloud< PointT > &tgt, double threshold, const boost::shared_ptr< pcl::search::Search< PointT > > &tree, pcl::PointCloud< PointT > &output)
 Obtain the difference between two aligned point clouds as another point cloud, given a distance threshold. More...
 

Function Documentation

bool pcl::gpu::compareLabeledPointClusters ( const pcl::PointIndices a,
const pcl::PointIndices b 
)
inline

Sort clusters method (for std::sort).

Definition at line 157 of file gpu_extract_labeled_clusters.h.

References pcl::PointIndices::indices.

Referenced by pcl::gpu::EuclideanLabeledClusterExtraction< PointT >::extract().

bool pcl::compareLabeledPointClusters ( const pcl::PointIndices a,
const pcl::PointIndices b 
)
inline

Sort clusters method (for std::sort).

Definition at line 183 of file extract_labeled_clusters.h.

References pcl::PointIndices::indices.

bool pcl::gpu::comparePointClusters ( const pcl::PointIndices a,
const pcl::PointIndices b 
)
inline
bool pcl::comparePointClusters ( const pcl::PointIndices a,
const pcl::PointIndices b 
)
inline

Sort clusters method (for std::sort).

Definition at line 418 of file extract_clusters.h.

References pcl::PointIndices::indices.

template<typename PointT >
void pcl::extractEuclideanClusters ( const PointCloud< PointT > &  cloud,
const boost::shared_ptr< search::Search< PointT > > &  tree,
float  tolerance,
std::vector< PointIndices > &  clusters,
unsigned int  min_pts_per_cluster = 1,
unsigned int  max_pts_per_cluster = (std::numeric_limits<int>::max) () 
)

Decompose a region of space into clusters based on the Euclidean distance between points.

Parameters
cloudthe point cloud message
treethe spatial locator (e.g., kd-tree) used for nearest neighbors searching
Note
the tree has to be created as a spatial locator on cloud
Parameters
tolerancethe spatial cluster tolerance as a measure in L2 Euclidean space
clustersthe resultant clusters containing point indices (as a vector of PointIndices)
min_pts_per_clusterminimum number of points that a cluster may contain (default: 1)
max_pts_per_clustermaximum number of points that a cluster may contain (default: max int)

Definition at line 45 of file extract_clusters.hpp.

References pcl::PointIndices::header, pcl::PointCloud< T >::header, pcl::PointIndices::indices, and pcl::PointCloud< T >::points.

Referenced by pcl::EuclideanClusterExtraction< PointT >::extract().

template<typename PointT >
void pcl::extractEuclideanClusters ( const PointCloud< PointT > &  cloud,
const std::vector< int > &  indices,
const boost::shared_ptr< search::Search< PointT > > &  tree,
float  tolerance,
std::vector< PointIndices > &  clusters,
unsigned int  min_pts_per_cluster = 1,
unsigned int  max_pts_per_cluster = (std::numeric_limits<int>::max) () 
)

Decompose a region of space into clusters based on the Euclidean distance between points.

Parameters
cloudthe point cloud message
indicesa list of point indices to use from cloud
treethe spatial locator (e.g., kd-tree) used for nearest neighbors searching
Note
the tree has to be created as a spatial locator on cloud and indices
Parameters
tolerancethe spatial cluster tolerance as a measure in L2 Euclidean space
clustersthe resultant clusters containing point indices (as a vector of PointIndices)
min_pts_per_clusterminimum number of points that a cluster may contain (default: 1)
max_pts_per_clustermaximum number of points that a cluster may contain (default: max int)

Definition at line 118 of file extract_clusters.hpp.

References pcl::PointIndices::header, pcl::PointCloud< T >::header, pcl::PointIndices::indices, and pcl::PointCloud< T >::points.

template<typename PointT , typename Normal >
void pcl::extractEuclideanClusters ( const PointCloud< PointT > &  cloud,
const PointCloud< Normal > &  normals,
float  tolerance,
const boost::shared_ptr< KdTree< PointT > > &  tree,
std::vector< PointIndices > &  clusters,
double  eps_angle,
unsigned int  min_pts_per_cluster = 1,
unsigned int  max_pts_per_cluster = (std::numeric_limits<int>::max) () 
)

Decompose a region of space into clusters based on the euclidean distance between points, and the normal angular deviation.

Parameters
cloudthe point cloud message
normalsthe point cloud message containing normal information
treethe spatial locator (e.g., kd-tree) used for nearest neighbors searching
Note
the tree has to be created as a spatial locator on cloud
Parameters
tolerancethe spatial cluster tolerance as a measure in the L2 Euclidean space
clustersthe resultant clusters containing point indices (as a vector of PointIndices)
eps_anglethe maximum allowed difference between normals in radians for cluster/region growing
min_pts_per_clusterminimum number of points that a cluster may contain (default: 1)
max_pts_per_clustermaximum number of points that a cluster may contain (default: max int)

Definition at line 99 of file extract_clusters.h.

References pcl::PointIndices::header, pcl::PointCloud< T >::header, pcl::PointIndices::indices, and pcl::PointCloud< T >::points.

template<typename PointT , typename Normal >
void pcl::extractEuclideanClusters ( const PointCloud< PointT > &  cloud,
const PointCloud< Normal > &  normals,
const std::vector< int > &  indices,
const boost::shared_ptr< KdTree< PointT > > &  tree,
float  tolerance,
std::vector< PointIndices > &  clusters,
double  eps_angle,
unsigned int  min_pts_per_cluster = 1,
unsigned int  max_pts_per_cluster = (std::numeric_limits<int>::max) () 
)

Decompose a region of space into clusters based on the euclidean distance between points, and the normal angular deviation.

Parameters
cloudthe point cloud message
normalsthe point cloud message containing normal information
indicesa list of point indices to use from cloud
treethe spatial locator (e.g., kd-tree) used for nearest neighbors searching
Note
the tree has to be created as a spatial locator on cloud
Parameters
tolerancethe spatial cluster tolerance as a measure in the L2 Euclidean space
clustersthe resultant clusters containing point indices (as PointIndices)
eps_anglethe maximum allowed difference between normals in degrees for cluster/region growing
min_pts_per_clusterminimum number of points that a cluster may contain (default: 1)
max_pts_per_clustermaximum number of points that a cluster may contain (default: max int)

Definition at line 198 of file extract_clusters.h.

References pcl::PointIndices::header, pcl::PointCloud< T >::header, pcl::PointIndices::indices, and pcl::PointCloud< T >::points.

template<typename PointT >
void pcl::extractLabeledEuclideanClusters ( const PointCloud< PointT > &  cloud,
const boost::shared_ptr< search::Search< PointT > > &  tree,
float  tolerance,
std::vector< std::vector< PointIndices > > &  labeled_clusters,
unsigned int  min_pts_per_cluster = 1,
unsigned int  max_pts_per_cluster = std::numeric_limits<unsigned int>::max (),
unsigned int  max_label = std::numeric_limits<unsigned int>::max () 
)

Decompose a region of space into clusters based on the Euclidean distance between points.

Parameters
[in]cloudthe point cloud message
[in]treethe spatial locator (e.g., kd-tree) used for nearest neighbors searching
Note
the tree has to be created as a spatial locator on cloud
Parameters
[in]tolerancethe spatial cluster tolerance as a measure in L2 Euclidean space
[out]labeled_clustersthe resultant clusters containing point indices (as a vector of PointIndices)
[in]min_pts_per_clusterminimum number of points that a cluster may contain (default: 1)
[in]max_pts_per_clustermaximum number of points that a cluster may contain (default: max int)
[in]max_label

Definition at line 44 of file extract_labeled_clusters.hpp.

References pcl::PointIndices::header, pcl::PointCloud< T >::header, pcl::PointIndices::indices, and pcl::PointCloud< T >::points.

Referenced by pcl::gpu::EuclideanLabeledClusterExtraction< PointT >::extract(), and pcl::LabeledEuclideanClusterExtraction< PointT >::extract().

template<typename PointT >
void pcl::getPointCloudDifference ( const pcl::PointCloud< PointT > &  src,
const pcl::PointCloud< PointT > &  tgt,
double  threshold,
const boost::shared_ptr< pcl::search::Search< PointT > > &  tree,
pcl::PointCloud< PointT > &  output 
)

Obtain the difference between two aligned point clouds as another point cloud, given a distance threshold.

Parameters
srcthe input point cloud source
tgtthe input point cloud target we need to obtain the difference against
thresholdthe distance threshold (tolerance) for point correspondences. (e.g., check if f a point p1 from src has a correspondence > threshold than a point p2 from tgt)
treethe spatial locator (e.g., kd-tree) used for nearest neighbors searching built over tgt
outputthe resultant output point cloud difference

Definition at line 46 of file segment_differences.hpp.

References pcl::copyPointCloud(), pcl::PointCloud< T >::header, pcl::PointCloud< T >::height, pcl::PointCloud< T >::is_dense, pcl::isFinite(), pcl::PointCloud< T >::points, and pcl::PointCloud< T >::width.

Referenced by pcl::SegmentDifferences< PointT >::segment().

template<typename PointT >
bool pcl::isPointIn2DPolygon ( const PointT point,
const pcl::PointCloud< PointT > &  polygon 
)

General purpose method for checking if a 3D point is inside or outside a given 2D polygon.

Note
this method accepts any general 3D point that is projected onto the 2D polygon, but performs an internal XY projection of both the polygon and the point.
Parameters
pointa 3D point projected onto the same plane as the polygon
polygona polygon

Definition at line 47 of file extract_polygonal_prism_data.hpp.

References pcl::computeMeanAndCovarianceMatrix(), pcl::eigen33(), pcl::EIGEN_ALIGN16, pcl::isXYPointIn2DXYPolygon(), and pcl::PointCloud< T >::points.

template<typename PointT >
bool pcl::isXYPointIn2DXYPolygon ( const PointT point,
const pcl::PointCloud< PointT > &  polygon 
)

Check if a 2d point (X and Y coordinates considered only!) is inside or outside a given polygon.

This method assumes that both the point and the polygon are projected onto the XY plane.

Note
(This is highly optimized code taken from http://www.visibone.com/inpoly/) Copyright (c) 1995-1996 Galacticomm, Inc. Freeware source code.
Parameters
pointa 3D point projected onto the same plane as the polygon
polygona polygon

Definition at line 107 of file extract_polygonal_prism_data.hpp.

References pcl::PointCloud< T >::points.

Referenced by pcl::isPointIn2DPolygon(), and pcl::ExtractPolygonalPrismData< PointT >::segment().

template<class Graph >
bool pcl::segmentation::randomWalker ( Graph &  graph)

Multilabel graph segmentation using random walks.

This is an implementation of the algorithm described in "Random Walks for Image Segmentation" by Leo Grady.

Given a weighted undirected graph and a small number of user-defined labels this algorithm analytically determines the probability that a random walker starting at each unlabeled vertex will first reach one of the prelabeled vertices. The unlabeled vertices are then assigned to the label for which the greatest probability is calculated.

The input is a BGL graph, a property map that associates a weight to each edge of the graph, and a property map that contains initial vertex colors (the term "color" is used interchangeably with "label").

Note
The colors of unlabeled vertices should be set to 0, the colors of labeled vetices could be any positive numbers.
This is the responsibility of the user to make sure that every connected component of the graph has at least one colored vertex. If the user failed to do so, then the behavior of the algorithm is undefined, i.e. it may or may not succeed, and also may or may not report failure.

The output of the algorithm (i.e. label assignment) is written back to the color map.

Parameters
[in]graphan undirected graph with internal edge weight and vertex color property maps

Several overloads of randomWalker() function are provided for convenience.

See Also
randomWalker(Graph&, EdgeWeightMap, VertexColorMap)
randomWalker(Graph&, EdgeWeightMap, VertexColorMap, Eigen::Matrix <typename boost::property_traits<EdgeWeightMap>::value_type, Eigen::Dynamic, Eigen::Dynamic>&, std::map<typename boost::property_traits <VertexColorMap>::value_type, size_t>&)
Author
Sergey Alexandrov

Definition at line 283 of file random_walker.hpp.

template<class Graph , class EdgeWeightMap , class VertexColorMap >
bool pcl::segmentation::randomWalker ( Graph &  graph,
EdgeWeightMap  weights,
VertexColorMap  colors 
)

Multilabel graph segmentation using random walks.

This is an overloaded function provided for convenience. See the documentation for randomWalker().

Parameters
[in]graphan undirected graph
[in]weightsan external edge weight property map
[in,out]colorsan external vertex color property map
Author
Sergey Alexandrov

Definition at line 291 of file random_walker.hpp.

template<class Graph , class EdgeWeightMap , class VertexColorMap >
bool pcl::segmentation::randomWalker ( Graph &  graph,
EdgeWeightMap  weights,
VertexColorMap  colors,
Eigen::Matrix< typename boost::property_traits< EdgeWeightMap >::value_type, Eigen::Dynamic, Eigen::Dynamic > &  potentials,
std::map< typename boost::property_traits< VertexColorMap >::value_type, size_t > &  colors_to_columns_map 
)

Multilabel graph segmentation using random walks.

This is an overloaded function provided for convenience. See the documentation for randomWalker().

Parameters
[in]graphan undirected graph
[in]weightsan external edge weight property map
[in,out]colorsan external vertex color property map
[out]potentialsa matrix with calculated probabilities, where rows correspond to vertices, and columns correspond to colors
[out]colors_to_columns_mapa mapping between colors and columns in potentials matrix
Author
Sergey Alexandrov

Definition at line 317 of file random_walker.hpp.

void pcl::seededHueSegmentation ( const PointCloud< PointXYZRGB > &  cloud,
const boost::shared_ptr< search::Search< PointXYZRGB > > &  tree,
float  tolerance,
PointIndices &  indices_in,
PointIndices &  indices_out,
float  delta_hue = 0.0 
)

Decompose a region of space into clusters based on the Euclidean distance between points.

Parameters
[in]cloudthe point cloud message
[in]treethe spatial locator (e.g., kd-tree) used for nearest neighbors searching
Note
the tree has to be created as a spatial locator on cloud
Parameters
[in]tolerancethe spatial cluster tolerance as a measure in L2 Euclidean space
[in]indices_inthe cluster containing the seed point indices (as a vector of PointIndices)
[out]indices_out
[in]delta_hue

Definition at line 46 of file seeded_hue_segmentation.hpp.

References pcl::_PointXYZHSV::h, pcl::PointIndices::indices, pcl::PointCloud< T >::points, and pcl::PointXYZRGBtoXYZHSV().

Referenced by pcl::SeededHueSegmentation::segment().

void pcl::seededHueSegmentation ( const PointCloud< PointXYZRGB > &  cloud,
const boost::shared_ptr< search::Search< PointXYZRGBL > > &  tree,
float  tolerance,
PointIndices &  indices_in,
PointIndices &  indices_out,
float  delta_hue = 0.0 
)

Decompose a region of space into clusters based on the Euclidean distance between points.

Parameters
[in]cloudthe point cloud message
[in]treethe spatial locator (e.g., kd-tree) used for nearest neighbors searching
Note
the tree has to be created as a spatial locator on cloud
Parameters
[in]tolerancethe spatial cluster tolerance as a measure in L2 Euclidean space
[in]indices_inthe cluster containing the seed point indices (as a vector of PointIndices)
[out]indices_out
[in]delta_hue

Definition at line 122 of file seeded_hue_segmentation.hpp.

References pcl::_PointXYZHSV::h, pcl::PointIndices::indices, pcl::PointCloud< T >::points, and pcl::PointXYZRGBtoXYZHSV().