Point Cloud Library (PCL) 1.12.0
Loading...
Searching...
No Matches
octree_pointcloud_density.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2010-2011, Willow Garage, Inc.
6 *
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * * Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following
17 * disclaimer in the documentation and/or other materials provided
18 * with the distribution.
19 * * Neither the name of Willow Garage, Inc. nor the names of its
20 * contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 *
36 * $Id$
37 */
38
39#pragma once
40
41#include <pcl/octree/octree_pointcloud.h>
42
43namespace pcl {
44namespace octree {
45/** \brief @b Octree pointcloud density leaf node class
46 * \note This class implements a leaf node that counts the amount of points which fall
47 * into its voxel space.
48 * \author Julius Kammerl (julius@kammerl.de)
49 */
51public:
52 /** \brief Class initialization. */
53 OctreePointCloudDensityContainer() : point_counter_(0) {}
54
55 /** \brief Empty class deconstructor. */
57
58 /** \brief deep copy function */
60 deepCopy() const
61 {
62 return (new OctreePointCloudDensityContainer(*this));
63 }
64
65 /** \brief Equal comparison operator
66 * \param[in] other OctreePointCloudDensityContainer to compare with
67 */
68 bool
69 operator==(const OctreeContainerBase& other) const override
70 {
71 const OctreePointCloudDensityContainer* otherContainer =
72 dynamic_cast<const OctreePointCloudDensityContainer*>(&other);
73
74 return (this->point_counter_ == otherContainer->point_counter_);
75 }
76
77 /** \brief Read input data. Only an internal counter is increased.
78 */
79 void addPointIndex(uindex_t) { point_counter_++; }
80
81 /** \brief Return point counter.
82 * \return Amount of points
83 */
86 {
87 return (point_counter_);
88 }
89
90 /** \brief Reset leaf node. */
91 void
92 reset() override
93 {
94 point_counter_ = 0;
95 }
96
97private:
98 uindex_t point_counter_;
99};
100
101/** \brief @b Octree pointcloud density class
102 * \note This class generate an octrees from a point cloud (zero-copy). Only the amount
103 * of points that fall into the leaf node voxel are stored.
104 * \note The octree pointcloud is initialized with its voxel resolution. Its bounding
105 * box is automatically adjusted or can be predefined.
106 * \tparam PointT type of point used in pointcloud
107 * \ingroup octree
108 * \author Julius Kammerl (julius@kammerl.de)
109 */
110template <typename PointT,
111 typename LeafContainerT = OctreePointCloudDensityContainer,
112 typename BranchContainerT = OctreeContainerEmpty>
114: public OctreePointCloud<PointT, LeafContainerT, BranchContainerT> {
115public:
116 /** \brief OctreePointCloudDensity class constructor.
117 * \param resolution_arg: octree resolution at lowest octree level
118 * */
119 OctreePointCloudDensity(const double resolution_arg)
120 : OctreePointCloud<PointT, LeafContainerT, BranchContainerT>(resolution_arg)
121 {}
122
123 /** \brief Empty class deconstructor. */
124
126
127 /** \brief Get the amount of points within a leaf node voxel which is addressed by a
128 * point
129 * \param[in] point_arg: a point addressing a voxel \return amount of points
130 * that fall within leaf node voxel
131 */
133 getVoxelDensityAtPoint(const PointT& point_arg) const
134 {
135 uindex_t point_count = 0;
136
137 OctreePointCloudDensityContainer* leaf = this->findLeafAtPoint(point_arg);
138
139 if (leaf)
140 point_count = leaf->getPointCounter();
141
142 return (point_count);
143 }
144};
145} // namespace octree
146} // namespace pcl
147
148// needed since OctreePointCloud is not instantiated with template parameters used above
149#include <pcl/octree/impl/octree_pointcloud.hpp>
150
151#define PCL_INSTANTIATE_OctreePointCloudDensity(T) \
152 template class PCL_EXPORTS pcl::octree::OctreePointCloudDensity<T>;
Octree container class that can serve as a base to construct own leaf node container classes.
Octree pointcloud density leaf node class
bool operator==(const OctreeContainerBase &other) const override
Equal comparison operator.
virtual OctreePointCloudDensityContainer * deepCopy() const
deep copy function
~OctreePointCloudDensity()
Empty class deconstructor.
OctreePointCloudDensity(const double resolution_arg)
OctreePointCloudDensity class constructor.
uindex_t getVoxelDensityAtPoint(const PointT &point_arg) const
Get the amount of points within a leaf node voxel which is addressed by a point.
Octree pointcloud class
OctreePointCloudDensityContainer * findLeafAtPoint(const PointT &point_arg) const
detail::int_type_t< detail::index_type_size, false > uindex_t
Type used for an unsigned index in PCL.
Definition types.h:120
A point structure representing Euclidean xyz coordinates, and the RGB color.