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>
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 () | |
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... |
|
const PointCloudConstPtr | 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... |
|
const IndicesConstPtr | 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 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_ |
image width More... |
|
std::uint32_t | height_ |
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_ |
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< NLinks > | n_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_descriptor > | graph_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... |
|
Implementation of the GrabCut segmentation in "GrabCut — Interactive Foreground Extraction using Iterated Graph Cuts" by Carsten Rother, Vladimir Kolmogorov and Andrew Blake.
Definition at line 320 of file grabcut_segmentation.h.
using pcl::GrabCut< PointT >::KdTree = pcl::search::Search<PointT> |
Definition at line 323 of file grabcut_segmentation.h.
using pcl::GrabCut< PointT >::KdTreePtr = typename KdTree::Ptr |
Definition at line 324 of file grabcut_segmentation.h.
using pcl::GrabCut< PointT >::PointCloudConstPtr = typename PCLBase<PointT>::PointCloudConstPtr |
Definition at line 325 of file grabcut_segmentation.h.
using pcl::GrabCut< PointT >::PointCloudPtr = typename PCLBase<PointT>::PointCloudPtr |
Definition at line 326 of file grabcut_segmentation.h.
| protected |
Definition at line 411 of file grabcut_segmentation.h.
| inline |
Constructor.
Definition at line 332 of file grabcut_segmentation.h.
| inline |
Destructor.
Definition at line 339 of file grabcut_segmentation.h.
| 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.
| protected |
Compute beta from cloud.
Definition at line 387 of file grabcut_segmentation.hpp.
References pcl::GrabCut< PointT >::NLinks::dists, pcl::GrabCut< PointT >::NLinks::indices, pcl::isFinite(), pcl::GrabCut< PointT >::NLinks::nb_links, pcl::squaredEuclideanDistance(), and pcl::GrabCut< PointT >::NLinks::weights.
| protected |
Compute beta from image.
Definition at line 426 of file grabcut_segmentation.hpp.
References pcl::GrabCut< PointT >::NLinks::dists, pcl::GrabCut< PointT >::NLinks::indices, pcl::GrabCut< PointT >::NLinks::nb_links, pcl::squaredEuclideanDistance(), and pcl::GrabCut< PointT >::NLinks::weights.
| protected |
Compute L parameter from given lambda.
Definition at line 496 of file grabcut_segmentation.hpp.
| protected |
Compute NLinks from cloud.
Definition at line 334 of file grabcut_segmentation.hpp.
References pcl::GrabCut< PointT >::NLinks::dists, pcl::GrabCut< PointT >::NLinks::indices, pcl::GrabCut< PointT >::NLinks::nb_links, and pcl::GrabCut< PointT >::NLinks::weights.
| protected |
Compute NLinks from image.
Definition at line 360 of file grabcut_segmentation.hpp.
References pcl::GrabCut< PointT >::NLinks::dists, and pcl::GrabCut< PointT >::NLinks::weights.
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.
[out] | clusters | clusters 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.
| protectedvirtual |
Fit Gaussian Multi Models.
Definition at line 185 of file grabcut_segmentation.hpp.
References pcl::segmentation::grabcut::buildGMMs().
| inline |
Definition at line 368 of file grabcut_segmentation.h.
References pcl::GrabCut< PointT >::K_.
| inline |
Definition at line 360 of file grabcut_segmentation.h.
References pcl::GrabCut< PointT >::lambda_.
| inline |
Returns the number of neighbours to find.
Definition at line 389 of file grabcut_segmentation.h.
References pcl::GrabCut< PointT >::nb_neighbours_.
| inline |
Get a pointer to the search method used.
Definition at line 381 of file grabcut_segmentation.h.
References pcl::GrabCut< PointT >::tree_.
| protected |
Definition at line 87 of file grabcut_segmentation.hpp.
References pcl::segmentation::grabcut::SegmentationBackground, and pcl::segmentation::grabcut::TrimapUnknown.
| protected |
Build the graph for GraphCut.
Definition at line 269 of file grabcut_segmentation.hpp.
References pcl::GrabCut< PointT >::NLinks::indices, pcl::GrabCut< PointT >::NLinks::nb_links, pcl::segmentation::grabcut::TrimapBackground, pcl::segmentation::grabcut::TrimapUnknown, pcl::UNAVAILABLE, and pcl::GrabCut< PointT >::NLinks::weights.
| inlineprotected |
Definition at line 446 of file grabcut_segmentation.h.
References pcl::GrabCut< PointT >::graph_, and pcl::segmentation::grabcut::BoykovKolmogorov::inSourceTree().
| virtual |
Run Grabcut refinement on the hard segmentation.
Definition at line 212 of file grabcut_segmentation.hpp.
| virtual |
Definition at line 195 of file grabcut_segmentation.hpp.
References pcl::segmentation::grabcut::learnGMMs().
void pcl::GrabCut< PointT >::setBackgroundPoints | ( | const PointCloudConstPtr & | background_points | ) |
Set background points, foreground points = points \ background points.
void pcl::GrabCut< PointT >::setBackgroundPointsIndices | ( | const PointIndicesConstPtr & | indices | ) |
Set background indices, foreground indices = indices \ background indices.
Definition at line 163 of file grabcut_segmentation.hpp.
References pcl::segmentation::grabcut::SegmentationBackground, pcl::segmentation::grabcut::SegmentationForeground, pcl::segmentation::grabcut::TrimapBackground, and pcl::segmentation::grabcut::TrimapUnknown.
void pcl::GrabCut< PointT >::setBackgroundPointsIndices | ( | int | x1, |
int | y1, | ||
int | x2, | ||
int | y2 | ||
) |
Set background indices, foreground indices = indices \ background indices.
| overridevirtual |
Provide a pointer to the input dataset.
[in] | cloud | the const boost shared pointer to a PointCloud message |
Reimplemented from pcl::PCLBase< PointT >.
Definition at line 81 of file grabcut_segmentation.hpp.
| inline |
Set K parameter to user given value.
Suggested value by the authors is 5
[in] | K | the number of components used in GMM |
Definition at line 373 of file grabcut_segmentation.h.
References pcl::K, and pcl::GrabCut< PointT >::K_.
| inline |
Set lambda parameter to user given value.
Suggested value by the authors is 50
[in] | lambda |
Definition at line 365 of file grabcut_segmentation.h.
References pcl::GrabCut< PointT >::lambda_.
| inline |
Allows to set the number of neighbours to find.
[in] | nb_neighbours | new number of neighbours |
Definition at line 386 of file grabcut_segmentation.h.
References pcl::GrabCut< PointT >::nb_neighbours_.
| inline |
Provide a pointer to the search object.
tree | a pointer to the spatial search object. |
Definition at line 378 of file grabcut_segmentation.h.
References pcl::GrabCut< PointT >::tree_.
| protected |
Set the weights of SOURCE --> v and v --> SINK.
Definition at line 156 of file grabcut_segmentation.hpp.
| protected |
Edit Trimap.
Definition at line 252 of file grabcut_segmentation.hpp.
References pcl::segmentation::grabcut::SegmentationBackground, pcl::segmentation::grabcut::SegmentationForeground, pcl::segmentation::grabcut::TrimapBackground, and pcl::segmentation::grabcut::TrimapForeground.
| protected |
| protected |
Definition at line 475 of file grabcut_segmentation.h.
| protected |
beta = 1/2 * average of the squared color distances between all pairs of 8-neighboring pixels.
Definition at line 457 of file grabcut_segmentation.h.
| protected |
Definition at line 475 of file grabcut_segmentation.h.
| protected |
Definition at line 471 of file grabcut_segmentation.h.
| protected |
Graph for Graphcut.
Definition at line 478 of file grabcut_segmentation.h.
Referenced by pcl::GrabCut< PointT >::isSource().
| protected |
Graph nodes.
Definition at line 480 of file grabcut_segmentation.h.
| protected |
Definition at line 472 of file grabcut_segmentation.h.
| protected |
image height
Definition at line 450 of file grabcut_segmentation.h.
| protected |
Converted input.
Definition at line 469 of file grabcut_segmentation.h.
| protected |
is segmentation initialized
Definition at line 465 of file grabcut_segmentation.h.
| protected |
Number of GMM components.
Definition at line 453 of file grabcut_segmentation.h.
Referenced by pcl::GrabCut< PointT >::getK(), and pcl::GrabCut< PointT >::setK().
| protected |
L = a large value to force a pixel to be foreground or background.
Definition at line 459 of file grabcut_segmentation.h.
| protected |
lambda = 50. This value was suggested the GrabCut paper.
Definition at line 455 of file grabcut_segmentation.h.
Referenced by pcl::GrabCut< PointT >::getLambda(), and pcl::GrabCut< PointT >::setLambda().
| protected |
Precomputed N-link weights.
Definition at line 467 of file grabcut_segmentation.h.
| protected |
Number of neighbours.
Definition at line 463 of file grabcut_segmentation.h.
Referenced by pcl::GrabCut< PointT >::getNumberOfNeighbours(), and pcl::GrabCut< PointT >::setNumberOfNeighbours().
| protected |
Definition at line 474 of file grabcut_segmentation.h.
| protected |
Pointer to the spatial search object.
Definition at line 461 of file grabcut_segmentation.h.
Referenced by pcl::GrabCut< PointT >::getSearchMethod(), and pcl::GrabCut< PointT >::setSearchMethod().
| protected |
Definition at line 470 of file grabcut_segmentation.h.
| protected |
image width
Definition at line 448 of file grabcut_segmentation.h.
© 2009–2012, Willow Garage, Inc.
© 2012–, Open Perception, Inc.
Licensed under the BSD License.
https://pointclouds.org/documentation/classpcl_1_1_grab_cut.html