Point Cloud Library (PCL)  1.14.0-dev
List of all members | Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes
pcl::GrabCut< PointT > Class Template Reference

Implementation of the GrabCut segmentation in "GrabCut — Interactive Foreground Extraction using Iterated Graph Cuts" by Carsten Rother, Vladimir Kolmogorov and Andrew Blake. More...

#include <pcl/segmentation/grabcut_segmentation.h>

+ Inheritance diagram for pcl::GrabCut< PointT >:
+ Collaboration diagram for pcl::GrabCut< PointT >:

Classes

struct  NLinks
 

Public Types

using KdTree = pcl::search::Search< PointT >
 
using KdTreePtr = typename KdTree::Ptr
 
using PointCloudConstPtr = typename PCLBase< PointT >::PointCloudConstPtr
 
using PointCloudPtr = typename PCLBase< PointT >::PointCloudPtr
 
- 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
 

Public Member Functions

 GrabCut (std::uint32_t K=5, float lambda=50.f)
 Constructor. More...
 
 ~GrabCut () override=default
 Destructor. More...
 
void setInputCloud (const PointCloudConstPtr &cloud) override
 Provide a pointer to the input dataset. More...
 
void setBackgroundPoints (const PointCloudConstPtr &background_points)
 Set background points, foreground points = points \ background points. More...
 
void setBackgroundPointsIndices (int x1, int y1, int x2, int y2)
 Set background indices, foreground indices = indices \ background indices. More...
 
void setBackgroundPointsIndices (const PointIndicesConstPtr &indices)
 Set background indices, foreground indices = indices \ background indices. More...
 
virtual void refine ()
 Run Grabcut refinement on the hard segmentation. More...
 
virtual int refineOnce ()
 
float getLambda ()
 
void setLambda (float lambda)
 Set lambda parameter to user given value. More...
 
std::uint32_t getK ()
 
void setK (std::uint32_t K)
 Set K parameter to user given value. More...
 
void setSearchMethod (const KdTreePtr &tree)
 Provide a pointer to the search object. More...
 
KdTreePtr getSearchMethod ()
 Get a pointer to the search method used. More...
 
void setNumberOfNeighbours (int nb_neighbours)
 Allows to set the number of neighbours to find. More...
 
int getNumberOfNeighbours () const
 Returns the number of neighbours to find. More...
 
void extract (std::vector< pcl::PointIndices > &clusters)
 This method launches the segmentation algorithm and returns the clusters that were obtained during the segmentation. 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...
 
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 PointToperator[] (std::size_t pos) const
 Override PointCloud operator[] to shorten code. More...
 

Protected Types

using vertex_descriptor = pcl::segmentation::grabcut::BoykovKolmogorov::vertex_descriptor
 

Protected Member Functions

bool initCompute ()
 
void computeBetaOrganized ()
 Compute beta from image. More...
 
void computeBetaNonOrganized ()
 Compute beta from cloud. More...
 
void computeL ()
 Compute L parameter from given lambda. More...
 
void computeNLinksOrganized ()
 Compute NLinks from image. More...
 
void computeNLinksNonOrganized ()
 Compute NLinks from cloud. More...
 
void setTrimap (const PointIndicesConstPtr &indices, segmentation::grabcut::TrimapValue t)
 Edit Trimap. More...
 
int updateHardSegmentation ()
 
virtual void fitGMMs ()
 Fit Gaussian Multi Models. More...
 
void initGraph ()
 Build the graph for GraphCut. More...
 
void addEdge (vertex_descriptor v1, vertex_descriptor v2, float capacity, float rev_capacity)
 Add an edge to the graph, graph must be oriented so we add the edge and its reverse. More...
 
void setTerminalWeights (vertex_descriptor v, float source_capacity, float sink_capacity)
 Set the weights of SOURCE --> v and v --> SINK. More...
 
bool isSource (vertex_descriptor v)
 
- 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

std::uint32_t width_ {0}
 image width More...
 
std::uint32_t height_ {0}
 image height More...
 
std::uint32_t K_
 Number of GMM components. More...
 
float lambda_
 lambda = 50. This value was suggested the GrabCut paper. More...
 
float beta_ {0.0f}
 beta = 1/2 * average of the squared color distances between all pairs of 8-neighboring pixels. More...
 
float L_ {0.0f}
 L = a large value to force a pixel to be foreground or background. More...
 
KdTreePtr tree_ {nullptr}
 Pointer to the spatial search object. More...
 
int nb_neighbours_ {9}
 Number of neighbours. More...
 
bool initialized_ {false}
 is segmentation initialized More...
 
std::vector< NLinksn_links_ {}
 Precomputed N-link weights. More...
 
segmentation::grabcut::Image::Ptr image_
 Converted input. More...
 
std::vector< segmentation::grabcut::TrimapValuetrimap_ {}
 
std::vector< std::size_t > GMM_component_ {}
 
std::vector< segmentation::grabcut::SegmentationValuehard_segmentation_ {}
 
std::vector< float > soft_segmentation_ {}
 
segmentation::grabcut::GMM background_GMM_
 
segmentation::grabcut::GMM foreground_GMM_
 
pcl::segmentation::grabcut::BoykovKolmogorov graph_
 Graph for Graphcut. More...
 
std::vector< vertex_descriptorgraph_nodes_ {}
 Graph nodes. 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...
 

Detailed Description

template<typename PointT>
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.

Author
Justin Talbot, jtalb.nosp@m.ot@s.nosp@m.tanfo.nosp@m.rd.e.nosp@m.du placed in Public Domain, 2010
Nizar Sallem port to PCL and adaptation of original code.

Definition at line 317 of file grabcut_segmentation.h.

Member Typedef Documentation

◆ KdTree

template<typename PointT >
using pcl::GrabCut< PointT >::KdTree = pcl::search::Search<PointT>

Definition at line 320 of file grabcut_segmentation.h.

◆ KdTreePtr

template<typename PointT >
using pcl::GrabCut< PointT >::KdTreePtr = typename KdTree::Ptr

Definition at line 321 of file grabcut_segmentation.h.

◆ PointCloudConstPtr

template<typename PointT >
using pcl::GrabCut< PointT >::PointCloudConstPtr = typename PCLBase<PointT>::PointCloudConstPtr

Definition at line 322 of file grabcut_segmentation.h.

◆ PointCloudPtr

template<typename PointT >
using pcl::GrabCut< PointT >::PointCloudPtr = typename PCLBase<PointT>::PointCloudPtr

Definition at line 323 of file grabcut_segmentation.h.

◆ vertex_descriptor

Definition at line 404 of file grabcut_segmentation.h.

Constructor & Destructor Documentation

◆ GrabCut()

template<typename PointT >
pcl::GrabCut< PointT >::GrabCut ( std::uint32_t  K = 5,
float  lambda = 50.f 
)
inline

Constructor.

Definition at line 329 of file grabcut_segmentation.h.

◆ ~GrabCut()

template<typename PointT >
pcl::GrabCut< PointT >::~GrabCut ( )
overridedefault

Destructor.

Member Function Documentation

◆ addEdge()

template<typename PointT >
void pcl::GrabCut< PointT >::addEdge ( vertex_descriptor  v1,
vertex_descriptor  v2,
float  capacity,
float  rev_capacity 
)
protected

Add an edge to the graph, graph must be oriented so we add the edge and its reverse.

Definition at line 150 of file grabcut_segmentation.hpp.

◆ computeBetaNonOrganized()

template<typename PointT >
void pcl::GrabCut< PointT >::computeBetaNonOrganized
protected

◆ computeBetaOrganized()

template<typename PointT >
void pcl::GrabCut< PointT >::computeBetaOrganized
protected

◆ computeL()

template<typename PointT >
void pcl::GrabCut< PointT >::computeL
protected

Compute L parameter from given lambda.

Definition at line 496 of file grabcut_segmentation.hpp.

◆ computeNLinksNonOrganized()

template<typename PointT >
void pcl::GrabCut< PointT >::computeNLinksNonOrganized
protected

◆ computeNLinksOrganized()

template<typename PointT >
void pcl::GrabCut< PointT >::computeNLinksOrganized
protected

◆ extract()

template<typename PointT >
void pcl::GrabCut< PointT >::extract ( std::vector< pcl::PointIndices > &  clusters)

This method launches the segmentation algorithm and returns the clusters that were obtained during the segmentation.

The indices of points belonging to the object will be stored in the cluster with index 1, other indices will be stored in the cluster with index 0.

Parameters
[out]clustersclusters that were obtained. Each cluster is an array of point indices.

Definition at line 502 of file grabcut_segmentation.hpp.

References pcl::segmentation::grabcut::SegmentationForeground.

◆ fitGMMs()

template<typename PointT >
void pcl::GrabCut< PointT >::fitGMMs
protectedvirtual

Fit Gaussian Multi Models.

Definition at line 185 of file grabcut_segmentation.hpp.

References pcl::segmentation::grabcut::buildGMMs().

◆ getK()

template<typename PointT >
std::uint32_t pcl::GrabCut< PointT >::getK ( )
inline
Returns
the number of components in the GMM

Definition at line 361 of file grabcut_segmentation.h.

References pcl::GrabCut< PointT >::K_.

◆ getLambda()

template<typename PointT >
float pcl::GrabCut< PointT >::getLambda ( )
inline
Returns
lambda

Definition at line 353 of file grabcut_segmentation.h.

References pcl::GrabCut< PointT >::lambda_.

◆ getNumberOfNeighbours()

template<typename PointT >
int pcl::GrabCut< PointT >::getNumberOfNeighbours ( ) const
inline

Returns the number of neighbours to find.

Definition at line 382 of file grabcut_segmentation.h.

References pcl::GrabCut< PointT >::nb_neighbours_.

◆ getSearchMethod()

template<typename PointT >
KdTreePtr pcl::GrabCut< PointT >::getSearchMethod ( )
inline

Get a pointer to the search method used.

Definition at line 374 of file grabcut_segmentation.h.

References pcl::GrabCut< PointT >::tree_.

◆ initCompute()

template<typename PointT >
bool pcl::GrabCut< PointT >::initCompute
protected

◆ initGraph()

template<typename PointT >
void pcl::GrabCut< PointT >::initGraph
protected

◆ isSource()

template<typename PointT >
bool pcl::GrabCut< PointT >::isSource ( vertex_descriptor  v)
inlineprotected
Returns
true if v is in source tree

Definition at line 439 of file grabcut_segmentation.h.

References pcl::GrabCut< PointT >::graph_, and pcl::segmentation::grabcut::BoykovKolmogorov::inSourceTree().

◆ refine()

template<typename PointT >
void pcl::GrabCut< PointT >::refine
virtual

Run Grabcut refinement on the hard segmentation.

Definition at line 212 of file grabcut_segmentation.hpp.

◆ refineOnce()

template<typename PointT >
int pcl::GrabCut< PointT >::refineOnce
virtual
Returns
the number of pixels that have changed from foreground to background or vice versa

Definition at line 195 of file grabcut_segmentation.hpp.

References pcl::segmentation::grabcut::learnGMMs().

◆ setBackgroundPoints()

template<typename PointT >
void pcl::GrabCut< PointT >::setBackgroundPoints ( const PointCloudConstPtr background_points)

Set background points, foreground points = points \ background points.

◆ setBackgroundPointsIndices() [1/2]

template<typename PointT >
void pcl::GrabCut< PointT >::setBackgroundPointsIndices ( const PointIndicesConstPtr indices)

◆ setBackgroundPointsIndices() [2/2]

template<typename PointT >
void pcl::GrabCut< PointT >::setBackgroundPointsIndices ( int  x1,
int  y1,
int  x2,
int  y2 
)

Set background indices, foreground indices = indices \ background indices.

◆ setInputCloud()

template<typename PointT >
void pcl::GrabCut< PointT >::setInputCloud ( const PointCloudConstPtr cloud)
overridevirtual

Provide a pointer to the input dataset.

Parameters
[in]cloudthe const boost shared pointer to a PointCloud message

Reimplemented from pcl::PCLBase< PointT >.

Definition at line 81 of file grabcut_segmentation.hpp.

◆ setK()

template<typename PointT >
void pcl::GrabCut< PointT >::setK ( std::uint32_t  K)
inline

Set K parameter to user given value.

Suggested value by the authors is 5

Parameters
[in]Kthe number of components used in GMM

Definition at line 366 of file grabcut_segmentation.h.

References pcl::K, and pcl::GrabCut< PointT >::K_.

◆ setLambda()

template<typename PointT >
void pcl::GrabCut< PointT >::setLambda ( float  lambda)
inline

Set lambda parameter to user given value.

Suggested value by the authors is 50

Parameters
[in]lambda

Definition at line 358 of file grabcut_segmentation.h.

References pcl::GrabCut< PointT >::lambda_.

◆ setNumberOfNeighbours()

template<typename PointT >
void pcl::GrabCut< PointT >::setNumberOfNeighbours ( int  nb_neighbours)
inline

Allows to set the number of neighbours to find.

Parameters
[in]nb_neighboursnew number of neighbours

Definition at line 379 of file grabcut_segmentation.h.

References pcl::GrabCut< PointT >::nb_neighbours_.

◆ setSearchMethod()

template<typename PointT >
void pcl::GrabCut< PointT >::setSearchMethod ( const KdTreePtr tree)
inline

Provide a pointer to the search object.

Parameters
treea pointer to the spatial search object.

Definition at line 371 of file grabcut_segmentation.h.

References pcl::GrabCut< PointT >::tree_.

◆ setTerminalWeights()

template<typename PointT >
void pcl::GrabCut< PointT >::setTerminalWeights ( vertex_descriptor  v,
float  source_capacity,
float  sink_capacity 
)
protected

Set the weights of SOURCE --> v and v --> SINK.

Definition at line 156 of file grabcut_segmentation.hpp.

◆ setTrimap()

template<typename PointT >
void pcl::GrabCut< PointT >::setTrimap ( const PointIndicesConstPtr indices,
segmentation::grabcut::TrimapValue  t 
)
protected

◆ updateHardSegmentation()

template<typename PointT >
int pcl::GrabCut< PointT >::updateHardSegmentation
protected

Member Data Documentation

◆ background_GMM_

template<typename PointT >
segmentation::grabcut::GMM pcl::GrabCut< PointT >::background_GMM_
protected

Definition at line 468 of file grabcut_segmentation.h.

◆ beta_

template<typename PointT >
float pcl::GrabCut< PointT >::beta_ {0.0f}
protected

beta = 1/2 * average of the squared color distances between all pairs of 8-neighboring pixels.

Definition at line 450 of file grabcut_segmentation.h.

◆ foreground_GMM_

template<typename PointT >
segmentation::grabcut::GMM pcl::GrabCut< PointT >::foreground_GMM_
protected

Definition at line 468 of file grabcut_segmentation.h.

◆ GMM_component_

template<typename PointT >
std::vector<std::size_t> pcl::GrabCut< PointT >::GMM_component_ {}
protected

Definition at line 464 of file grabcut_segmentation.h.

◆ graph_

template<typename PointT >
pcl::segmentation::grabcut::BoykovKolmogorov pcl::GrabCut< PointT >::graph_
protected

Graph for Graphcut.

Definition at line 471 of file grabcut_segmentation.h.

Referenced by pcl::GrabCut< PointT >::isSource().

◆ graph_nodes_

template<typename PointT >
std::vector<vertex_descriptor> pcl::GrabCut< PointT >::graph_nodes_ {}
protected

Graph nodes.

Definition at line 473 of file grabcut_segmentation.h.

◆ hard_segmentation_

template<typename PointT >
std::vector<segmentation::grabcut::SegmentationValue> pcl::GrabCut< PointT >::hard_segmentation_ {}
protected

Definition at line 465 of file grabcut_segmentation.h.

◆ height_

template<typename PointT >
std::uint32_t pcl::GrabCut< PointT >::height_ {0}
protected

image height

Definition at line 443 of file grabcut_segmentation.h.

◆ image_

template<typename PointT >
segmentation::grabcut::Image::Ptr pcl::GrabCut< PointT >::image_
protected

Converted input.

Definition at line 462 of file grabcut_segmentation.h.

◆ initialized_

template<typename PointT >
bool pcl::GrabCut< PointT >::initialized_ {false}
protected

is segmentation initialized

Definition at line 458 of file grabcut_segmentation.h.

◆ K_

template<typename PointT >
std::uint32_t pcl::GrabCut< PointT >::K_
protected

Number of GMM components.

Definition at line 446 of file grabcut_segmentation.h.

Referenced by pcl::GrabCut< PointT >::getK(), and pcl::GrabCut< PointT >::setK().

◆ L_

template<typename PointT >
float pcl::GrabCut< PointT >::L_ {0.0f}
protected

L = a large value to force a pixel to be foreground or background.

Definition at line 452 of file grabcut_segmentation.h.

◆ lambda_

template<typename PointT >
float pcl::GrabCut< PointT >::lambda_
protected

lambda = 50. This value was suggested the GrabCut paper.

Definition at line 448 of file grabcut_segmentation.h.

Referenced by pcl::GrabCut< PointT >::getLambda(), and pcl::GrabCut< PointT >::setLambda().

◆ n_links_

template<typename PointT >
std::vector<NLinks> pcl::GrabCut< PointT >::n_links_ {}
protected

Precomputed N-link weights.

Definition at line 460 of file grabcut_segmentation.h.

◆ nb_neighbours_

template<typename PointT >
int pcl::GrabCut< PointT >::nb_neighbours_ {9}
protected

◆ soft_segmentation_

template<typename PointT >
std::vector<float> pcl::GrabCut< PointT >::soft_segmentation_ {}
protected

Definition at line 467 of file grabcut_segmentation.h.

◆ tree_

template<typename PointT >
KdTreePtr pcl::GrabCut< PointT >::tree_ {nullptr}
protected

Pointer to the spatial search object.

Definition at line 454 of file grabcut_segmentation.h.

Referenced by pcl::GrabCut< PointT >::getSearchMethod(), and pcl::GrabCut< PointT >::setSearchMethod().

◆ trimap_

template<typename PointT >
std::vector<segmentation::grabcut::TrimapValue> pcl::GrabCut< PointT >::trimap_ {}
protected

Definition at line 463 of file grabcut_segmentation.h.

◆ width_

template<typename PointT >
std::uint32_t pcl::GrabCut< PointT >::width_ {0}
protected

image width

Definition at line 441 of file grabcut_segmentation.h.


The documentation for this class was generated from the following files: