Point Cloud Library (PCL)
1.14.1-dev
|
Implements the well known Region Growing algorithm used for segmentation based on color of points. More...
#include <pcl/segmentation/region_growing_rgb.h>
Public Member Functions | |
RegionGrowingRGB () | |
Constructor that sets default values for member variables. More... | |
~RegionGrowingRGB () override | |
Destructor that frees memory. More... | |
float | getPointColorThreshold () const |
Returns the color threshold value used for testing if points belong to the same region. More... | |
void | setPointColorThreshold (float thresh) |
This method specifies the threshold value for color test between the points. More... | |
float | getRegionColorThreshold () const |
Returns the color threshold value used for testing if regions can be merged. More... | |
void | setRegionColorThreshold (float thresh) |
This method specifies the threshold value for color test between the regions. More... | |
float | getDistanceThreshold () const |
Returns the distance threshold. More... | |
void | setDistanceThreshold (float thresh) |
Allows to set distance threshold. More... | |
unsigned int | getNumberOfRegionNeighbours () const |
Returns the number of nearest neighbours used for searching K nearest segments. More... | |
void | setNumberOfRegionNeighbours (unsigned int nghbr_number) |
This method allows to set the number of neighbours that is used for finding neighbouring segments. More... | |
bool | getNormalTestFlag () const |
Returns the flag that signalize if the smoothness test is turned on/off. More... | |
void | setNormalTestFlag (bool value) |
Allows to turn on/off the smoothness test. More... | |
void | setCurvatureTestFlag (bool value) override |
Allows to turn on/off the curvature test. More... | |
void | setResidualTestFlag (bool value) override |
Allows to turn on/off the residual test. More... | |
void | extract (std::vector< pcl::PointIndices > &clusters) override |
This method launches the segmentation algorithm and returns the clusters that were obtained during the segmentation. More... | |
void | getSegmentFromPoint (index_t index, pcl::PointIndices &cluster) override |
For a given point this function builds a segment to which it belongs and returns this segment. More... | |
Public Member Functions inherited from pcl::RegionGrowing< PointT, pcl::Normal > | |
RegionGrowing () | |
Constructor that sets default values for member variables. More... | |
~RegionGrowing () override | |
This destructor destroys the cloud, normals and search method used for finding KNN. More... | |
pcl::uindex_t | getMinClusterSize () |
Get the minimum number of points that a cluster needs to contain in order to be considered valid. More... | |
void | setMinClusterSize (pcl::uindex_t min_cluster_size) |
Set the minimum number of points that a cluster needs to contain in order to be considered valid. More... | |
pcl::uindex_t | getMaxClusterSize () |
Get the maximum number of points that a cluster needs to contain in order to be considered valid. More... | |
void | setMaxClusterSize (pcl::uindex_t max_cluster_size) |
Set the maximum number of points that a cluster needs to contain in order to be considered valid. More... | |
bool | getSmoothModeFlag () const |
Returns the flag value. More... | |
void | setSmoothModeFlag (bool value) |
This function allows to turn on/off the smoothness constraint. More... | |
bool | getCurvatureTestFlag () const |
Returns the flag that signalize if the curvature test is turned on/off. More... | |
bool | getResidualTestFlag () const |
Returns the flag that signalize if the residual test is turned on/off. More... | |
float | getSmoothnessThreshold () const |
Returns smoothness threshold. More... | |
void | setSmoothnessThreshold (float theta) |
Allows to set smoothness threshold used for testing the points. More... | |
float | getResidualThreshold () const |
Returns residual threshold. More... | |
void | setResidualThreshold (float residual) |
Allows to set residual threshold used for testing the points. More... | |
float | getCurvatureThreshold () const |
Returns curvature threshold. More... | |
void | setCurvatureThreshold (float curvature) |
Allows to set curvature threshold used for testing the points. More... | |
unsigned int | getNumberOfNeighbours () const |
Returns the number of nearest neighbours used for KNN. More... | |
void | setNumberOfNeighbours (unsigned int neighbour_number) |
Allows to set the number of neighbours. More... | |
KdTreePtr | getSearchMethod () const |
Returns the pointer to the search method that is used for KNN. More... | |
void | setSearchMethod (const KdTreePtr &tree) |
Allows to set search method that will be used for finding KNN. More... | |
NormalPtr | getInputNormals () const |
Returns normals. More... | |
void | setInputNormals (const NormalPtr &norm) |
This method sets the normals. More... | |
pcl::PointCloud< pcl::PointXYZRGB >::Ptr | getColoredCloud () |
If the cloud was successfully segmented, then function returns colored cloud. More... | |
pcl::PointCloud< pcl::PointXYZRGBA >::Ptr | getColoredCloudRGBA () |
If the cloud was successfully segmented, then function returns colored cloud. More... | |
Public Member Functions inherited from pcl::PCLBase< PointT > | |
PCLBase () | |
Empty constructor. More... | |
PCLBase (const PCLBase &base) | |
Copy constructor. More... | |
virtual | ~PCLBase ()=default |
Destructor. More... | |
virtual void | setInputCloud (const PointCloudConstPtr &cloud) |
Provide a pointer to the input dataset. More... | |
PointCloudConstPtr const | getInputCloud () const |
Get a pointer to the input point cloud dataset. More... | |
virtual void | setIndices (const IndicesPtr &indices) |
Provide a pointer to the vector of indices that represents the input data. More... | |
virtual void | setIndices (const IndicesConstPtr &indices) |
Provide a pointer to the vector of indices that represents the input data. More... | |
virtual void | setIndices (const PointIndicesConstPtr &indices) |
Provide a pointer to the vector of indices that represents the input data. More... | |
virtual void | setIndices (std::size_t row_start, std::size_t col_start, std::size_t nb_rows, std::size_t nb_cols) |
Set the indices for the points laying within an interest region of the point cloud. More... | |
IndicesPtr | getIndices () |
Get a pointer to the vector of indices used. More... | |
IndicesConstPtr const | getIndices () const |
Get a pointer to the vector of indices used. More... | |
const PointT & | operator[] (std::size_t pos) const |
Override PointCloud operator[] to shorten code. More... | |
Protected Member Functions | |
bool | prepareForSegmentation () override |
This method simply checks if it is possible to execute the segmentation algorithm with the current settings. More... | |
void | findPointNeighbours () override |
This method finds KNN for each point and saves them to the array because the algorithm needs to find KNN a few times. More... | |
void | findSegmentNeighbours () |
This method simply calls the findRegionsKNN for each segment and saves the results for later use. More... | |
void | findRegionsKNN (pcl::index_t index, pcl::uindex_t nghbr_number, Indices &nghbrs, std::vector< float > &dist) |
This method finds K nearest neighbours of the given segment. More... | |
void | applyRegionMergingAlgorithm () |
This function implements the merging algorithm described in the article "Color-based segmentation of point clouds" by Qingming Zhan, Yubin Liang, Yinghui Xiao. More... | |
float | calculateColorimetricalDifference (std::vector< unsigned int > &first_color, std::vector< unsigned int > &second_color) const |
This method calculates the colorimetrical difference between two points. More... | |
void | findRegionNeighbours (std::vector< std::vector< std::pair< float, pcl::index_t > > > &neighbours_out, std::vector< std::vector< int > > ®ions_in) |
This method assembles the array containing neighbours of each homogeneous region. More... | |
void | assembleRegions (std::vector< unsigned int > &num_pts_in_region, int num_regions) |
This function simply assembles the regions from list of point labels. More... | |
bool | validatePoint (index_t initial_seed, index_t point, index_t nghbr, bool &is_a_seed) const override |
This function is checking if the point with index 'nghbr' belongs to the segment. More... | |
Protected Member Functions inherited from pcl::RegionGrowing< PointT, pcl::Normal > | |
void | applySmoothRegionGrowingAlgorithm () |
This function implements the algorithm described in the article "Segmentation of point clouds using smoothness constraint" by T. More... | |
int | growRegion (int initial_seed, int segment_number) |
This method grows a segment for the given seed point. More... | |
void | assembleRegions () |
This function simply assembles the regions from list of point labels. More... | |
Protected Member Functions inherited from pcl::PCLBase< PointT > | |
bool | initCompute () |
This method should get called before starting the actual computation. More... | |
bool | deinitCompute () |
This method should get called after finishing the actual computation. More... | |
Protected Attributes | |
float | color_p2p_threshold_ {1225.0f} |
Thershold used in color test for points. More... | |
float | color_r2r_threshold_ {10.0f} |
Thershold used in color test for regions. More... | |
float | distance_threshold_ {0.05f} |
Threshold that tells which points we need to assume neighbouring. More... | |
unsigned int | region_neighbour_number_ {100} |
Number of neighbouring segments to find. More... | |
std::vector< std::vector< float > > | point_distances_ |
Stores distances for the point neighbours from point_neighbours_. More... | |
std::vector< pcl::Indices > | segment_neighbours_ |
Stores the neighboures for the corresponding segments. More... | |
std::vector< std::vector< float > > | segment_distances_ |
Stores distances for the segment neighbours from segment_neighbours_. More... | |
std::vector< int > | segment_labels_ |
Stores new indices for segments that were obtained at the region growing stage. More... | |
Protected Attributes inherited from pcl::RegionGrowing< PointT, pcl::Normal > | |
pcl::uindex_t | min_pts_per_cluster_ |
Stores the minimum number of points that a cluster needs to contain in order to be considered valid. More... | |
pcl::uindex_t | max_pts_per_cluster_ |
Stores the maximum number of points that a cluster needs to contain in order to be considered valid. More... | |
bool | smooth_mode_flag_ |
Flag that signalizes if the smoothness constraint will be used. More... | |
bool | curvature_flag_ |
If set to true then curvature test will be done during segmentation. More... | |
bool | residual_flag_ |
If set to true then residual test will be done during segmentation. More... | |
float | theta_threshold_ |
Threshold used for testing the smoothness between points. More... | |
float | residual_threshold_ |
Threshold used in residual test. More... | |
float | curvature_threshold_ |
Threshold used in curvature test. More... | |
unsigned int | neighbour_number_ |
Number of neighbours to find. More... | |
KdTreePtr | search_ |
Search method that will be used for KNN. More... | |
NormalPtr | normals_ |
Contains normals of the points that will be segmented. More... | |
std::vector< pcl::Indices > | point_neighbours_ |
Contains neighbours of each point. More... | |
std::vector< int > | point_labels_ |
Point labels that tells to which segment each point belongs. More... | |
bool | normal_flag_ |
If set to true then normal/smoothness test will be done during segmentation. More... | |
std::vector< pcl::uindex_t > | num_pts_in_segment_ |
Tells how much points each segment contains. More... | |
std::vector< pcl::PointIndices > | clusters_ |
After the segmentation it will contain the segments. More... | |
int | number_of_segments_ |
Stores the number of segments. More... | |
Protected Attributes inherited from pcl::PCLBase< PointT > | |
PointCloudConstPtr | input_ |
The input point cloud dataset. More... | |
IndicesPtr | indices_ |
A pointer to the vector of point indices to use. More... | |
bool | use_indices_ |
Set to true if point indices are used. More... | |
bool | fake_indices_ |
If no set of indices are given, we construct a set of fake indices that mimic the input PointCloud. More... | |
Additional Inherited Members | |
Public Types inherited from pcl::RegionGrowing< PointT, pcl::Normal > | |
using | KdTree = pcl::search::Search< PointT > |
using | KdTreePtr = typename KdTree::Ptr |
using | Normal = pcl::PointCloud< pcl::Normal > |
using | NormalPtr = typename Normal::Ptr |
using | PointCloud = pcl::PointCloud< PointT > |
Public Types inherited from pcl::PCLBase< PointT > | |
using | PointCloud = pcl::PointCloud< PointT > |
using | PointCloudPtr = typename PointCloud::Ptr |
using | PointCloudConstPtr = typename PointCloud::ConstPtr |
using | PointIndicesPtr = PointIndices::Ptr |
using | PointIndicesConstPtr = PointIndices::ConstPtr |
Implements the well known Region Growing algorithm used for segmentation based on color of points.
Description can be found in the article "Color-based segmentation of point clouds" by Qingming Zhan, Yubin Liang, Yinghui Xiao
Definition at line 56 of file region_growing_rgb.h.
pcl::RegionGrowingRGB< PointT, NormalT >::RegionGrowingRGB |
Constructor that sets default values for member variables.
Definition at line 52 of file region_growing_rgb.hpp.
References pcl::RegionGrowing< PointT, pcl::Normal >::curvature_flag_, pcl::RegionGrowing< PointT, pcl::Normal >::min_pts_per_cluster_, pcl::RegionGrowing< PointT, pcl::Normal >::normal_flag_, and pcl::RegionGrowing< PointT, pcl::Normal >::residual_flag_.
|
override |
Destructor that frees memory.
Definition at line 66 of file region_growing_rgb.hpp.
|
protected |
This function implements the merging algorithm described in the article "Color-based segmentation of point clouds" by Qingming Zhan, Yubin Liang, Yinghui Xiao.
Definition at line 362 of file region_growing_rgb.hpp.
References pcl::comparePair().
|
protected |
This function simply assembles the regions from list of point labels.
[in] | num_pts_in_region | for each final region it stores the corresponding number of points in it |
[in] | num_regions | number of regions to assemble |
Definition at line 548 of file region_growing_rgb.hpp.
References pcl::PointIndices::indices.
|
protected |
This method calculates the colorimetrical difference between two points.
In this case it simply returns the euclidean distance between two colors.
[in] | first_color | the color of the first point |
[in] | second_color | the color of the second point |
Definition at line 505 of file region_growing_rgb.hpp.
|
overridevirtual |
This method launches the segmentation algorithm and returns the clusters that were obtained during the segmentation.
[out] | clusters | clusters that were obtained. Each cluster is an array of point indices. |
Reimplemented from pcl::RegionGrowing< PointT, pcl::Normal >.
Definition at line 160 of file region_growing_rgb.hpp.
References pcl::RegionGrowing< PointT, NormalT >::assembleRegions().
|
overrideprotectedvirtual |
This method finds KNN for each point and saves them to the array because the algorithm needs to find KNN a few times.
Reimplemented from pcl::RegionGrowing< PointT, pcl::Normal >.
Definition at line 269 of file region_growing_rgb.hpp.
|
protected |
This method assembles the array containing neighbours of each homogeneous region.
Homogeneous region is the union of some segments. This array is used when the regions with a few points need to be merged with the neighbouring region.
[out] | neighbours_out | vector of lists of neighbours for every homogeneous region |
[in] | regions_in | vector of lists, each list contains indices of segments that belong to the corresponding homogeneous region. |
Definition at line 516 of file region_growing_rgb.hpp.
References pcl::comparePair().
|
protected |
This method finds K nearest neighbours of the given segment.
[in] | index | index of the segment for which neighbours will be found |
[in] | nghbr_number | the number of neighbours to find |
[out] | nghbrs | the array of indices of the neighbours that were found |
[out] | dist | the array of distances to the corresponding neighbours |
Definition at line 308 of file region_growing_rgb.hpp.
|
protected |
This method simply calls the findRegionsKNN for each segment and saves the results for later use.
Definition at line 289 of file region_growing_rgb.hpp.
float pcl::RegionGrowingRGB< PointT, NormalT >::getDistanceThreshold |
Returns the distance threshold.
If the distance between two points is less or equal to distance threshold value, then those points assumed to be neighbouring points.
Definition at line 104 of file region_growing_rgb.hpp.
bool pcl::RegionGrowingRGB< PointT, NormalT >::getNormalTestFlag |
Returns the flag that signalize if the smoothness test is turned on/off.
Definition at line 132 of file region_growing_rgb.hpp.
unsigned int pcl::RegionGrowingRGB< PointT, NormalT >::getNumberOfRegionNeighbours |
Returns the number of nearest neighbours used for searching K nearest segments.
Note that here it refers to the segments(not the points).
Definition at line 118 of file region_growing_rgb.hpp.
float pcl::RegionGrowingRGB< PointT, NormalT >::getPointColorThreshold |
Returns the color threshold value used for testing if points belong to the same region.
Definition at line 76 of file region_growing_rgb.hpp.
float pcl::RegionGrowingRGB< PointT, NormalT >::getRegionColorThreshold |
Returns the color threshold value used for testing if regions can be merged.
Definition at line 90 of file region_growing_rgb.hpp.
|
overridevirtual |
For a given point this function builds a segment to which it belongs and returns this segment.
[in] | index | index of the initial point which will be the seed for growing a segment. |
cluster |
Reimplemented from pcl::RegionGrowing< PointT, pcl::Normal >.
Definition at line 672 of file region_growing_rgb.hpp.
References pcl::RegionGrowing< PointT, NormalT >::assembleRegions(), and pcl::PointIndices::indices.
|
overrideprotectedvirtual |
This method simply checks if it is possible to execute the segmentation algorithm with the current settings.
If it is possible then it returns true.
Reimplemented from pcl::RegionGrowing< PointT, pcl::Normal >.
Definition at line 214 of file region_growing_rgb.hpp.
|
overridevirtual |
Allows to turn on/off the curvature test.
[in] | value | new value for curvature test. If set to true then the test will be turned on |
Reimplemented from pcl::RegionGrowing< PointT, pcl::Normal >.
Definition at line 146 of file region_growing_rgb.hpp.
void pcl::RegionGrowingRGB< PointT, NormalT >::setDistanceThreshold | ( | float | thresh | ) |
Allows to set distance threshold.
[in] | thresh | new threshold value for neighbour test |
Definition at line 111 of file region_growing_rgb.hpp.
void pcl::RegionGrowingRGB< PointT, NormalT >::setNormalTestFlag | ( | bool | value | ) |
Allows to turn on/off the smoothness test.
[in] | value | new value for normal/smoothness test. If set to true then the test will be turned on |
Definition at line 139 of file region_growing_rgb.hpp.
void pcl::RegionGrowingRGB< PointT, NormalT >::setNumberOfRegionNeighbours | ( | unsigned int | nghbr_number | ) |
This method allows to set the number of neighbours that is used for finding neighbouring segments.
Neighbouring segments are needed for the merging process.
[in] | nghbr_number | the number of neighbouring segments to find |
Definition at line 125 of file region_growing_rgb.hpp.
void pcl::RegionGrowingRGB< PointT, NormalT >::setPointColorThreshold | ( | float | thresh | ) |
This method specifies the threshold value for color test between the points.
This kind of testing is made at the first stage of the algorithm(region growing). If the difference between points color is less than threshold value, then they are considered to be in the same region.
[in] | thresh | new threshold value for color test |
Definition at line 83 of file region_growing_rgb.hpp.
void pcl::RegionGrowingRGB< PointT, NormalT >::setRegionColorThreshold | ( | float | thresh | ) |
This method specifies the threshold value for color test between the regions.
This kind of testing is made at the second stage of the algorithm(region merging). If the difference between segments color is less than threshold value, then they are merged together.
[in] | thresh | new threshold value for color test |
Definition at line 97 of file region_growing_rgb.hpp.
|
overridevirtual |
Allows to turn on/off the residual test.
[in] | value | new value for residual test. If set to true then the test will be turned on |
Reimplemented from pcl::RegionGrowing< PointT, pcl::Normal >.
Definition at line 153 of file region_growing_rgb.hpp.
|
overrideprotectedvirtual |
This function is checking if the point with index 'nghbr' belongs to the segment.
If so, then it returns true. It also checks if this point can serve as the seed.
[in] | initial_seed | index of the initial point that was passed to the growRegion() function |
[in] | point | index of the current seed point |
[in] | nghbr | index of the point that is neighbour of the current seed |
[out] | is_a_seed | this value is set to true if the point with index 'nghbr' can serve as the seed |
Reimplemented from pcl::RegionGrowing< PointT, pcl::Normal >.
Definition at line 593 of file region_growing_rgb.hpp.
|
protected |
Thershold used in color test for points.
Definition at line 255 of file region_growing_rgb.h.
|
protected |
Thershold used in color test for regions.
Definition at line 258 of file region_growing_rgb.h.
|
protected |
Threshold that tells which points we need to assume neighbouring.
Definition at line 261 of file region_growing_rgb.h.
|
protected |
Stores distances for the point neighbours from point_neighbours_.
Definition at line 267 of file region_growing_rgb.h.
|
protected |
Number of neighbouring segments to find.
Definition at line 264 of file region_growing_rgb.h.
|
protected |
Stores distances for the segment neighbours from segment_neighbours_.
Definition at line 273 of file region_growing_rgb.h.
|
protected |
Stores new indices for segments that were obtained at the region growing stage.
Definition at line 276 of file region_growing_rgb.h.
|
protected |
Stores the neighboures for the corresponding segments.
Definition at line 270 of file region_growing_rgb.h.