43 #include <boost/version.hpp>
45 #include <pcl/features/normal_3d.h>
47 #include <pcl/pcl_base.h>
49 #include <pcl/point_cloud.h>
51 #include <pcl/octree/octree_search.h>
52 #include <pcl/octree/octree_pointcloud_adjacency.h>
53 #include <pcl/search/search.h>
54 #include <boost/ptr_container/ptr_list.hpp>
66 template <
typename Po
intT>
75 using Ptr = shared_ptr<Supervoxel<PointT> >;
76 using ConstPtr = shared_ptr<const Supervoxel<PointT> >;
97 normal_arg.normal_x =
normal_.normal_x;
98 normal_arg.normal_y =
normal_.normal_y;
99 normal_arg.normal_z =
normal_.normal_z;
125 template <
typename Po
intT>
129 class SupervoxelHelper;
130 friend class SupervoxelHelper;
139 xyz_ (0.0f, 0.0f, 0.0f),
140 rgb_ (0.0f, 0.0f, 0.0f),
141 normal_ (0.0f, 0.0f, 0.0f, 0.0f),
152 getPoint (
PointT &point_arg)
const;
158 getNormal (
Normal &normal_arg)
const;
186 using VoxelAdjacencyList = boost::adjacency_list<boost::setS, boost::setS, boost::undirectedS, std::uint32_t, float>;
187 using VoxelID = VoxelAdjacencyList::vertex_descriptor;
188 using EdgeID = VoxelAdjacencyList::edge_descriptor;
206 setVoxelResolution (
float resolution);
210 getVoxelResolution ()
const;
214 setSeedResolution (
float seed_resolution);
218 getSeedResolution ()
const;
222 setColorImportance (
float val);
226 setSpatialImportance (
float val);
230 setNormalImportance (
float val);
243 setUseSingleCameraTransform (
bool val);
269 refineSupervoxels (
int num_itr, std::map<std::uint32_t,
typename Supervoxel<PointT>::Ptr > &supervoxel_clusters);
274 getVoxelCentroidCloud ()
const;
281 getLabeledCloud ()
const;
288 getLabeledVoxelCloud ()
const;
300 getSupervoxelAdjacency (std::multimap<std::uint32_t, std::uint32_t> &label_adjacency)
const;
312 getMaxLabel ()
const;
319 prepareForSegmentation ();
325 selectInitialSupervoxelSeeds (
Indices &seed_indices);
331 createSupervoxelHelpers (
Indices &seed_indices);
335 expandSupervoxels (
int depth);
343 reseedSupervoxels ();
353 float seed_resolution_;
361 transformFunction (
PointT &p);
376 float color_importance_;
378 float spatial_importance_;
380 float normal_importance_;
386 bool use_single_camera_transform_;
388 bool use_default_transform_behaviour_;
394 class SupervoxelHelper
406 return leaf_data_left.
idx_ < leaf_data_right.
idx_;
409 using LeafSetT = std::set<LeafContainerT*, typename SupervoxelHelper::compareLeaves>;
410 using iterator =
typename LeafSetT::iterator;
411 using const_iterator =
typename LeafSetT::const_iterator;
419 addLeaf (LeafContainerT* leaf_arg);
422 removeLeaf (LeafContainerT* leaf_arg);
450 {
return centroid_.normal_; }
454 {
return centroid_.rgb_; }
458 {
return centroid_.xyz_;}
461 getXYZ (
float &x,
float &y,
float &z)
const
462 { x=centroid_.xyz_[0]; y=centroid_.xyz_[1]; z=centroid_.xyz_[2]; }
465 getRGB (std::uint32_t &rgba)
const
467 rgba =
static_cast<std::uint32_t
>(centroid_.rgb_[0]) << 16 |
468 static_cast<std::uint32_t
>(centroid_.rgb_[1]) << 8 |
469 static_cast<std::uint32_t
>(centroid_.rgb_[2]);
475 normal_arg.normal_x = centroid_.normal_[0];
476 normal_arg.normal_y = centroid_.normal_[1];
477 normal_arg.normal_z = centroid_.normal_[2];
478 normal_arg.
curvature = centroid_.curvature_;
482 getNeighborLabels (std::set<std::uint32_t> &neighbor_labels)
const;
486 {
return centroid_; }
489 size ()
const {
return leaves_.size (); }
493 std::uint32_t label_;
495 SupervoxelClustering* parent_;
502 #if BOOST_VERSION >= 107000
508 using HelperListT = boost::ptr_list<SupervoxelHelper>;
509 HelperListT supervoxel_helpers_;
519 #ifdef PCL_NO_PRECOMPILE
520 #include <pcl/segmentation/impl/supervoxel_clustering.hpp>
PointCloud represents the base class in PCL for storing collections of 3D points.
shared_ptr< PointCloud< PointT > > Ptr
shared_ptr< const PointCloud< PointT > > ConstPtr
VoxelData is a structure used for storing data within a pcl::octree::OctreePointCloudAdjacencyContain...
SupervoxelHelper * owner_
Implements a supervoxel algorithm based on voxel structure, normals, and rgb values.
VoxelAdjacencyList::edge_descriptor EdgeID
std::vector< LeafContainerT * > LeafVectorT
pcl::IndicesPtr IndicesPtr
boost::adjacency_list< boost::setS, boost::setS, boost::undirectedS, std::uint32_t, float > VoxelAdjacencyList
VoxelAdjacencyList::vertex_descriptor VoxelID
~SupervoxelClustering() override
This destructor destroys the cloud, normals and search method used for finding neighbors.
Supervoxel container class - stores a cluster extracted using supervoxel clustering.
pcl::PointXYZRGBA centroid_
The centroid of the supervoxel - average voxel.
pcl::PointCloud< Normal >::Ptr normals_
A Pointcloud of the normals for the points in the supervoxel.
shared_ptr< const Supervoxel< PointT > > ConstPtr
void getCentroidPoint(PointXYZRGBA ¢roid_arg)
Gets the centroid of the supervoxel.
shared_ptr< Supervoxel< PointT > > Ptr
pcl::PointCloud< PointT >::Ptr voxels_
A Pointcloud of the voxels in the supervoxel.
pcl::Normal normal_
The normal calculated for the voxels contained in the supervoxel.
void getCentroidPointNormal(PointNormal &normal_arg)
Gets the point normal for the supervoxel.
Octree adjacency leaf container class- stores a list of pointers to neighbors, number of points added...
DataT & getData()
Returns a reference to the data member to access it without copying.
Octree pointcloud voxel class which maintains adjacency information for its voxels.
shared_ptr< OctreeAdjacencyT > Ptr
Octree pointcloud search class
search::KdTree is a wrapper class which inherits the pcl::KdTree class for performing search function...
shared_ptr< KdTree< PointT, Tree > > Ptr
Defines all the PCL implemented PointT point type structures.
Define methods for measuring time spent in code blocks.
#define PCL_MAKE_ALIGNED_OPERATOR_NEW
Macro to signal a class requires a custom allocator.
Defines functions, macros and traits for allocating and using memory.
IndicesAllocator<> Indices
Type used for indices in PCL.
shared_ptr< Indices > IndicesPtr
Defines all the PCL and non-PCL macros used.
A point structure representing normal coordinates and the surface curvature estimate.
A point structure representing Euclidean xyz coordinates, together with normal coordinates and the su...
A point structure representing Euclidean xyz coordinates, and the RGBA color.
A point structure representing Euclidean xyz coordinates, and the RGB color.
Comparator for LeafContainerT pointers - used for sorting set of leaves.