Point Cloud Library (PCL)
1.15.1
Toggle main menu visibility
Loading...
Searching...
No Matches
pcl
surface
marching_cubes_rbf.h
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Copyright (c) 2010, Willow Garage, Inc.
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
*
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* * Redistributions in binary form must reproduce the above
14
* copyright notice, this list of conditions and the following
15
* disclaimer in the documentation and/or other materials provided
16
* with the distribution.
17
* * Neither the name of Willow Garage, Inc. nor the names of its
18
* contributors may be used to endorse or promote products derived
19
* from this software without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
* POSSIBILITY OF SUCH DAMAGE.
33
*
34
*/
35
36
#pragma once
37
38
#include <
pcl/memory.h
>
39
#include <
pcl/pcl_macros.h
>
40
#include <pcl/surface/marching_cubes.h>
41
42
namespace
pcl
43
{
44
/** \brief The marching cubes surface reconstruction algorithm, using a signed distance function based on radial
45
* basis functions. Partially based on:
46
* Carr J.C., Beatson R.K., Cherrie J.B., Mitchell T.J., Fright W.R., McCallum B.C. and Evans T.R.,
47
* "Reconstruction and representation of 3D objects with radial basis functions"
48
* SIGGRAPH '01
49
*
50
* \note This algorithm in its current implementation may not be suitable for very
51
* large point clouds, due to high memory requirements.
52
* \tparam PointNT Use `pcl::PointNormal` or `pcl::PointXYZRGBNormal` or `pcl::PointXYZINormal`
53
* \author Alexandru E. Ichim
54
* \ingroup surface
55
*/
56
template
<
typename
Po
int
NT>
57
class
MarchingCubesRBF
:
public
MarchingCubes
<PointNT>
58
{
59
public
:
60
using
Ptr
= shared_ptr<MarchingCubesRBF<PointNT> >;
61
using
ConstPtr
= shared_ptr<const MarchingCubesRBF<PointNT> >;
62
63
using
SurfaceReconstruction
<PointNT>
::input_
;
64
using
SurfaceReconstruction
<PointNT>
::tree_
;
65
using
MarchingCubes
<PointNT>
::grid_
;
66
using
MarchingCubes
<PointNT>
::res_x_
;
67
using
MarchingCubes
<PointNT>
::res_y_
;
68
using
MarchingCubes
<PointNT>
::res_z_
;
69
using
MarchingCubes
<PointNT>
::size_voxel_
;
70
using
MarchingCubes
<PointNT>
::upper_boundary_
;
71
using
MarchingCubes
<PointNT>
::lower_boundary_
;
72
73
using
PointCloudPtr
=
typename
pcl::PointCloud<PointNT>::Ptr
;
74
75
using
KdTree
=
pcl::KdTree<PointNT>
;
76
using
KdTreePtr
=
typename
KdTree::Ptr
;
77
78
79
/** \brief Constructor. */
80
MarchingCubesRBF
(
const
float
off_surface_epsilon = 0.1f,
81
const
float
percentage_extend_grid = 0.0f,
82
const
float
iso_level = 0.0f) :
83
MarchingCubes
<PointNT> (percentage_extend_grid, iso_level),
84
off_surface_epsilon_
(off_surface_epsilon)
85
{
86
}
87
88
/** \brief Destructor. */
89
~MarchingCubesRBF
()
override
;
90
91
/** \brief Convert the point cloud into voxel data.
92
*/
93
void
94
voxelizeData
()
override
;
95
96
97
/** \brief Set the off-surface points displacement value.
98
* \param[in] epsilon the value
99
*/
100
inline
void
101
setOffSurfaceDisplacement
(
float
epsilon)
102
{
off_surface_epsilon_
= epsilon; }
103
104
/** \brief Get the off-surface points displacement value. */
105
inline
float
106
getOffSurfaceDisplacement
()
107
{
return
off_surface_epsilon_
; }
108
109
110
protected
:
111
/** \brief the Radial Basis Function kernel. */
112
double
113
kernel
(Eigen::Vector3d c, Eigen::Vector3d x);
114
115
/** \brief The off-surface displacement value. */
116
float
off_surface_epsilon_
;
117
118
public
:
119
PCL_MAKE_ALIGNED_OPERATOR_NEW
120
};
121
}
122
123
#ifdef PCL_NO_PRECOMPILE
124
#include <pcl/surface/impl/marching_cubes_rbf.hpp>
125
#endif
pcl::KdTree
KdTree represents the base spatial locator class for kd-tree implementations.
Definition
kdtree.h:56
pcl::KdTree< PointNT >::Ptr
shared_ptr< KdTree< PointNT > > Ptr
Definition
kdtree.h:69
pcl::MarchingCubes::grid_
std::vector< float > grid_
The data structure storing the 3D grid.
Definition
marching_cubes.h:439
pcl::MarchingCubes::res_x_
int res_x_
The grid resolution.
Definition
marching_cubes.h:442
pcl::MarchingCubes::upper_boundary_
Eigen::Array3f upper_boundary_
bounding box
Definition
marching_cubes.h:445
pcl::MarchingCubes::size_voxel_
Eigen::Array3f size_voxel_
size of voxels
Definition
marching_cubes.h:449
pcl::MarchingCubes::MarchingCubes
MarchingCubes(const float percentage_extend_grid=0.0f, const float iso_level=0.0f)
Constructor.
Definition
marching_cubes.h:379
pcl::MarchingCubes::res_y_
int res_y_
Definition
marching_cubes.h:442
pcl::MarchingCubes::res_z_
int res_z_
Definition
marching_cubes.h:442
pcl::MarchingCubes::lower_boundary_
Eigen::Array3f lower_boundary_
Definition
marching_cubes.h:446
pcl::MarchingCubesRBF::getOffSurfaceDisplacement
float getOffSurfaceDisplacement()
Get the off-surface points displacement value.
Definition
marching_cubes_rbf.h:106
pcl::MarchingCubesRBF::KdTree
pcl::KdTree< PointNT > KdTree
Definition
marching_cubes_rbf.h:75
pcl::MarchingCubesRBF::setOffSurfaceDisplacement
void setOffSurfaceDisplacement(float epsilon)
Set the off-surface points displacement value.
Definition
marching_cubes_rbf.h:101
pcl::MarchingCubesRBF::off_surface_epsilon_
float off_surface_epsilon_
The off-surface displacement value.
Definition
marching_cubes_rbf.h:116
pcl::MarchingCubesRBF::PointCloudPtr
typename pcl::PointCloud< PointNT >::Ptr PointCloudPtr
Definition
marching_cubes_rbf.h:73
pcl::MarchingCubesRBF::voxelizeData
void voxelizeData() override
Convert the point cloud into voxel data.
Definition
marching_cubes_rbf.hpp:50
pcl::MarchingCubesRBF::MarchingCubesRBF
MarchingCubesRBF(const float off_surface_epsilon=0.1f, const float percentage_extend_grid=0.0f, const float iso_level=0.0f)
Constructor.
Definition
marching_cubes_rbf.h:80
pcl::MarchingCubesRBF::KdTreePtr
typename KdTree::Ptr KdTreePtr
Definition
marching_cubes_rbf.h:76
pcl::MarchingCubesRBF::Ptr
shared_ptr< MarchingCubesRBF< PointNT > > Ptr
Definition
marching_cubes_rbf.h:60
pcl::MarchingCubesRBF::kernel
double kernel(Eigen::Vector3d c, Eigen::Vector3d x)
the Radial Basis Function kernel.
Definition
marching_cubes_rbf.hpp:108
pcl::MarchingCubesRBF::~MarchingCubesRBF
~MarchingCubesRBF() override
Destructor.
pcl::MarchingCubesRBF::ConstPtr
shared_ptr< const MarchingCubesRBF< PointNT > > ConstPtr
Definition
marching_cubes_rbf.h:61
pcl::PCLBase< PointNT >::input_
PointCloudConstPtr input_
Definition
pcl_base.h:147
pcl::PCLSurfaceBase< PointNT >::tree_
KdTreePtr tree_
Definition
reconstruction.h:96
pcl::PointCloud::Ptr
shared_ptr< PointCloud< PointT > > Ptr
Definition
point_cloud.h:414
pcl::SurfaceReconstruction
SurfaceReconstruction represents a base surface reconstruction class.
Definition
reconstruction.h:118
PCL_MAKE_ALIGNED_OPERATOR_NEW
#define PCL_MAKE_ALIGNED_OPERATOR_NEW
Macro to signal a class requires a custom allocator.
Definition
memory.h:86
memory.h
Defines functions, macros and traits for allocating and using memory.
pcl
Definition
convolution.h:46
pcl_macros.h
Defines all the PCL and non-PCL macros used.