Point Cloud Library (PCL)  1.8.1-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 >:

Classes

struct  NLinks
 

Public Types

typedef pcl::search::Search
< PointT
KdTree
 
typedef pcl::search::Search
< PointT >::Ptr 
KdTreePtr
 
typedef PCLBase< PointT >
::PointCloudConstPtr 
PointCloudConstPtr
 
typedef PCLBase< PointT >
::PointCloudPtr 
PointCloudPtr
 
- Public Types inherited from pcl::PCLBase< PointT >
typedef pcl::PointCloud< PointTPointCloud
 
typedef PointCloud::Ptr PointCloudPtr
 
typedef PointCloud::ConstPtr PointCloudConstPtr
 
typedef boost::shared_ptr
< PointIndices
PointIndicesPtr
 
typedef boost::shared_ptr
< PointIndices const > 
PointIndicesConstPtr
 

Public Member Functions

 GrabCut (uint32_t K=5, float lambda=50.f)
 Constructor. More...
 
virtual ~GrabCut ()
 Desctructor. More...
 
void setInputCloud (const PointCloudConstPtr &cloud)
 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...
 
uint32_t getK ()
 
void setK (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 ()
 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 (size_t row_start, size_t col_start, size_t nb_rows, size_t nb_cols)
 Set the indices for the points laying within an interest region of the point cloud. More...
 
IndicesPtr const 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[] (size_t pos) const
 Override PointCloud operator[] to shorten code. More...
 

Protected Types

typedef
pcl::segmentation::grabcut::BoykovKolmogorov::vertex_descriptor 
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

uint32_t width_
 image width More...
 
uint32_t height_
 image height More...
 
uint32_t K_
 Number of GMM components. More...
 
float lambda_
 lambda = 50. This value was suggested the GrabCut paper. More...
 
float beta_
 beta = 1/2 * average of the squared color distances between all pairs of 8-neighboring pixels. More...
 
float L_
 L = a large value to force a pixel to be foreground or background. More...
 
KdTreePtr tree_
 Pointer to the spatial search object. More...
 
int nb_neighbours_
 Number of neighbours. More...
 
bool initialized_
 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::TrimapValue
trimap_
 
std::vector< std::size_t > GMM_component_
 
std::vector
< segmentation::grabcut::SegmentationValue
hard_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

template<typename PointT >
typedef pcl::search::Search<PointT> pcl::GrabCut< PointT >::KdTree

Definition at line 320 of file grabcut_segmentation.h.

template<typename PointT >
typedef pcl::search::Search<PointT>::Ptr pcl::GrabCut< PointT >::KdTreePtr

Definition at line 321 of file grabcut_segmentation.h.

template<typename PointT >
typedef PCLBase<PointT>::PointCloudConstPtr pcl::GrabCut< PointT >::PointCloudConstPtr

Definition at line 322 of file grabcut_segmentation.h.

template<typename PointT >
typedef PCLBase<PointT>::PointCloudPtr pcl::GrabCut< PointT >::PointCloudPtr

Definition at line 323 of file grabcut_segmentation.h.

Definition at line 408 of file grabcut_segmentation.h.

Constructor & Destructor Documentation

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

Constructor.

Definition at line 329 of file grabcut_segmentation.h.

template<typename PointT >
virtual pcl::GrabCut< PointT >::~GrabCut ( )
inlinevirtual

Desctructor.

Definition at line 336 of file grabcut_segmentation.h.

Member Function Documentation

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 143 of file grabcut_segmentation.hpp.

template<typename PointT >
void pcl::GrabCut< PointT >::computeBetaNonOrganized ( )
protected
template<typename PointT >
void pcl::GrabCut< PointT >::computeBetaOrganized ( )
protected
template<typename PointT >
void pcl::GrabCut< PointT >::computeL ( )
protected

Compute L parameter from given lambda.

Definition at line 492 of file grabcut_segmentation.hpp.

template<typename PointT >
void pcl::GrabCut< PointT >::computeNLinksNonOrganized ( )
protected
template<typename PointT >
void pcl::GrabCut< PointT >::computeNLinksOrganized ( )
protected
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 498 of file grabcut_segmentation.hpp.

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

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

Fit Gaussian Multi Models.

Definition at line 178 of file grabcut_segmentation.hpp.

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

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

Definition at line 365 of file grabcut_segmentation.h.

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

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

Definition at line 357 of file grabcut_segmentation.h.

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

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

Returns the number of neighbours to find.

Definition at line 386 of file grabcut_segmentation.h.

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

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

Get a pointer to the search method used.

Definition at line 378 of file grabcut_segmentation.h.

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

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

Definition at line 443 of file grabcut_segmentation.h.

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

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

Run Grabcut refinement on the hard segmentation.

Definition at line 205 of file grabcut_segmentation.hpp.

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 188 of file grabcut_segmentation.hpp.

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

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

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

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

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

template<typename PointT >
void pcl::GrabCut< PointT >::setBackgroundPointsIndices ( const PointIndicesConstPtr indices)
template<typename PointT >
void pcl::GrabCut< PointT >::setInputCloud ( const PointCloudConstPtr cloud)
virtual

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 74 of file grabcut_segmentation.hpp.

template<typename PointT >
void pcl::GrabCut< PointT >::setK ( 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 370 of file grabcut_segmentation.h.

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

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 362 of file grabcut_segmentation.h.

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

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 383 of file grabcut_segmentation.h.

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

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 375 of file grabcut_segmentation.h.

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

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 149 of file grabcut_segmentation.hpp.

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

Member Data Documentation

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

Definition at line 472 of file grabcut_segmentation.h.

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

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

Definition at line 454 of file grabcut_segmentation.h.

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

Definition at line 472 of file grabcut_segmentation.h.

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

Definition at line 468 of file grabcut_segmentation.h.

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

Graph for Graphcut.

Definition at line 475 of file grabcut_segmentation.h.

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

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

Graph nodes.

Definition at line 477 of file grabcut_segmentation.h.

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

Definition at line 469 of file grabcut_segmentation.h.

template<typename PointT >
uint32_t pcl::GrabCut< PointT >::height_
protected

image height

Definition at line 447 of file grabcut_segmentation.h.

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

Converted input.

Definition at line 466 of file grabcut_segmentation.h.

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

is segmentation initialized

Definition at line 462 of file grabcut_segmentation.h.

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

Number of GMM components.

Definition at line 450 of file grabcut_segmentation.h.

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

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

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

Definition at line 456 of file grabcut_segmentation.h.

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

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

Definition at line 452 of file grabcut_segmentation.h.

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

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

Precomputed N-link weights.

Definition at line 464 of file grabcut_segmentation.h.

template<typename PointT >
int pcl::GrabCut< PointT >::nb_neighbours_
protected
template<typename PointT >
std::vector<float> pcl::GrabCut< PointT >::soft_segmentation_
protected

Definition at line 471 of file grabcut_segmentation.h.

template<typename PointT >
KdTreePtr pcl::GrabCut< PointT >::tree_
protected

Pointer to the spatial search object.

Definition at line 458 of file grabcut_segmentation.h.

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

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

Definition at line 467 of file grabcut_segmentation.h.

template<typename PointT >
uint32_t pcl::GrabCut< PointT >::width_
protected

image width

Definition at line 445 of file grabcut_segmentation.h.


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