Point Cloud Library (PCL)
1.15.1
Toggle main menu visibility
Loading...
Searching...
No Matches
pcl
surface
3rdparty
poisson4
bspline_data.h
1
/*
2
Copyright (c) 2006, Michael Kazhdan and Matthew Bolitho
3
All rights reserved.
4
5
Redistribution and use in source and binary forms, with or without modification,
6
are permitted provided that the following conditions are met:
7
8
Redistributions of source code must retain the above copyright notice, this list of
9
conditions and the following disclaimer. Redistributions in binary form must reproduce
10
the above copyright notice, this list of conditions and the following disclaimer
11
in the documentation and/or other materials provided with the distribution.
12
13
Neither the name of the Johns Hopkins University nor the names of its contributors
14
may be used to endorse or promote products derived from this software without specific
15
prior written permission.
16
17
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
18
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES
19
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
20
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
22
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26
DAMAGE.
27
*/
28
29
#ifndef BSPLINE_DATA_INCLUDED
30
#define BSPLINE_DATA_INCLUDED
31
32
33
#include "ppolynomial.h"
34
35
#include <cstdio>
36
#include <cstring>
37
38
namespace
pcl
39
{
40
namespace
poisson
41
{
42
43
44
template
<
int
Degree ,
class
Real >
45
class
BSplineData
46
{
47
bool
useDotRatios;
48
bool
reflectBoundary;
49
public
:
50
struct
BSplineComponents
51
{
52
Polynomial< Degree >
polys
[Degree+1];
53
Polynomial< Degree >
&
operator[]
(
int
idx ) {
return
polys
[idx]; }
54
const
Polynomial< Degree >
&
operator[]
(
int
idx )
const
{
return
polys
[idx]; }
55
void
printnl
( )
const
{
for
(
int
d=0 ; d<=Degree ; d++ )
polys
[d].
printnl
(); }
56
BSplineComponents
scale
(
double
s )
const
{
BSplineComponents
b ;
for
(
int
d=0 ; d<=Degree ; d++ ) b[d] =
polys
[d].
scale
(s) ;
return
b; }
57
BSplineComponents
shift
(
double
s )
const
{
BSplineComponents
b ;
for
(
int
d=0 ; d<=Degree ; d++ ) b[d] =
polys
[d].
shift
(s) ;
return
b; }
58
};
59
const
static
int
VV_DOT_FLAG
= 1;
60
const
static
int
DV_DOT_FLAG
= 2;
61
const
static
int
DD_DOT_FLAG
= 4;
62
const
static
int
VALUE_FLAG
= 1;
63
const
static
int
D_VALUE_FLAG
= 2;
64
65
int
depth
,
functionCount
,
sampleCount
;
66
Real
*
vvDotTable
, *
dvDotTable
, *
ddDotTable
;
67
Real
*
valueTables
, *
dValueTables
;
68
PPolynomial< Degree >
baseFunction
,
leftBaseFunction
,
rightBaseFunction
;
69
PPolynomial
< Degree-1 >
dBaseFunction
,
dLeftBaseFunction
,
dRightBaseFunction
;
70
BSplineComponents
baseBSpline
,
leftBSpline
,
rightBSpline
;
71
PPolynomial<Degree>
*
baseFunctions
;
72
BSplineComponents
*
baseBSplines
;
73
74
BSplineData
();
75
virtual
~BSplineData
();
76
77
virtual
void
setDotTables
(
int
flags );
78
virtual
void
clearDotTables
(
int
flags );
79
80
virtual
void
setValueTables
(
int
flags,
double
smooth=0);
81
virtual
void
setValueTables
(
int
flags,
double
valueSmooth,
double
normalSmooth);
82
virtual
void
clearValueTables
();
83
84
void
setSampleSpan
(
int
idx ,
int
& start ,
int
& end ,
double
smooth=0 )
const
;
85
86
/********************************************************
87
* Sets the translates and scales of the basis function
88
* up to the prescribed depth
89
* <maxDepth> the maximum depth
90
* <useDotRatios> specifies if dot-products of derivatives
91
* should be pre-divided by function integrals
92
* <reflectBoundary> spcifies if function space should be
93
* forced to be reflectively symmetric across the boundary
94
********************************************************/
95
void
set
(
int
maxDepth ,
bool
useDotRatios=
true
,
bool
reflectBoundary=
false
);
96
97
inline
int
Index
(
int
i1 ,
int
i2 )
const
;
98
static
inline
int
SymmetricIndex
(
int
i1 ,
int
i2 );
99
static
inline
int
SymmetricIndex
(
int
i1 ,
int
i2 ,
int
& index );
100
};
101
102
template
<
int
Degree >
103
struct
BSplineElementCoefficients
104
{
105
int
coeffs
[Degree+1] = {};
106
BSplineElementCoefficients
( ) =
default
;
107
int
&
operator[]
(
int
idx ){
return
coeffs
[idx]; }
108
const
int
&
operator[]
(
int
idx )
const
{
return
coeffs
[idx]; }
109
};
110
template
<
int
Degree >
111
struct
BSplineElements
:
public
std::vector< BSplineElementCoefficients< Degree > >
112
{
113
static
const
int
_off
= (Degree+1)/2;
114
void
_addLeft
(
int
offset ,
int
boundary );
115
void
_addRight
(
int
offset ,
int
boundary );
116
public
:
117
enum
118
{
119
NONE
= 0,
120
DIRICHLET
= -1,
121
NEUMANN
= 1
122
};
123
// Coefficients are ordered as "/" "-" "\"
124
int
denominator
;
125
126
BSplineElements
( ) {
denominator
= 1; }
127
BSplineElements
(
int
res ,
int
offset ,
int
boundary=
NONE
);
128
129
void
upSample
(
BSplineElements
& high )
const
;
130
void
differentiate
(
BSplineElements< Degree-1 >
& d )
const
;
131
132
void
print
( FILE* )
const
133
{
134
for
(
int
i=0 ; i<this->size() ; i++ )
135
{
136
printf(
"%d]"
, i );
137
for
(
int
j=0 ; j<=Degree ; j++ ) printf(
" %d"
, (*
this
)[i][j] );
138
printf(
" (%d)\n"
,
denominator
);
139
}
140
}
141
};
142
template
<
int
Degree1 ,
int
Degree2 >
void
SetBSplineElementIntegrals
(
double
integrals[Degree1+1][Degree2+1] );
143
144
145
}
146
}
147
148
149
#include "bspline_data.hpp"
150
151
#endif
// BSPLINE_DATA_INCLUDED
pcl::poisson::BSplineData::baseFunction
PPolynomial< Degree > baseFunction
Definition
bspline_data.h:68
pcl::poisson::BSplineData::DD_DOT_FLAG
static const int DD_DOT_FLAG
Definition
bspline_data.h:61
pcl::poisson::BSplineData::dRightBaseFunction
PPolynomial< Degree-1 > dRightBaseFunction
Definition
bspline_data.h:69
pcl::poisson::BSplineData::VV_DOT_FLAG
static const int VV_DOT_FLAG
Definition
bspline_data.h:59
pcl::poisson::BSplineData::~BSplineData
virtual ~BSplineData()
Definition
bspline_data.hpp:94
pcl::poisson::BSplineData::baseBSplines
BSplineComponents * baseBSplines
Definition
bspline_data.h:72
pcl::poisson::BSplineData::functionCount
int functionCount
Definition
bspline_data.h:65
pcl::poisson::BSplineData::dvDotTable
Real * dvDotTable
Definition
bspline_data.h:66
pcl::poisson::BSplineData::set
void set(int maxDepth, bool useDotRatios=true, bool reflectBoundary=false)
Definition
bspline_data.hpp:116
pcl::poisson::BSplineData::SymmetricIndex
static int SymmetricIndex(int i1, int i2)
Definition
bspline_data.hpp:381
pcl::poisson::BSplineData::depth
int depth
Definition
bspline_data.h:65
pcl::poisson::BSplineData::D_VALUE_FLAG
static const int D_VALUE_FLAG
Definition
bspline_data.h:63
pcl::poisson::BSplineData::setValueTables
virtual void setValueTables(int flags, double smooth=0)
Definition
bspline_data.hpp:322
pcl::poisson::BSplineData::dBaseFunction
PPolynomial< Degree-1 > dBaseFunction
Definition
bspline_data.h:69
pcl::poisson::BSplineData::clearDotTables
virtual void clearDotTables(int flags)
Definition
bspline_data.hpp:290
pcl::poisson::BSplineData::rightBaseFunction
PPolynomial< Degree > rightBaseFunction
Definition
bspline_data.h:68
pcl::poisson::BSplineData::clearValueTables
virtual void clearValueTables()
Definition
bspline_data.hpp:372
pcl::poisson::BSplineData::DV_DOT_FLAG
static const int DV_DOT_FLAG
Definition
bspline_data.h:60
pcl::poisson::BSplineData::setDotTables
virtual void setDotTables(int flags)
Definition
bspline_data.hpp:175
pcl::poisson::BSplineData::ddDotTable
Real * ddDotTable
Definition
bspline_data.h:66
pcl::poisson::BSplineData::dLeftBaseFunction
PPolynomial< Degree-1 > dLeftBaseFunction
Definition
bspline_data.h:69
pcl::poisson::BSplineData::leftBaseFunction
PPolynomial< Degree > leftBaseFunction
Definition
bspline_data.h:68
pcl::poisson::BSplineData::sampleCount
int sampleCount
Definition
bspline_data.h:65
pcl::poisson::BSplineData::baseFunctions
PPolynomial< Degree > * baseFunctions
Definition
bspline_data.h:71
pcl::poisson::BSplineData::setSampleSpan
void setSampleSpan(int idx, int &start, int &end, double smooth=0) const
Definition
bspline_data.hpp:303
pcl::poisson::BSplineData::Index
int Index(int i1, int i2) const
Definition
bspline_data.hpp:379
pcl::poisson::BSplineData::valueTables
Real * valueTables
Definition
bspline_data.h:67
pcl::poisson::BSplineData::rightBSpline
BSplineComponents rightBSpline
Definition
bspline_data.h:70
pcl::poisson::BSplineData::baseBSpline
BSplineComponents baseBSpline
Definition
bspline_data.h:70
pcl::poisson::BSplineData::VALUE_FLAG
static const int VALUE_FLAG
Definition
bspline_data.h:62
pcl::poisson::BSplineData::vvDotTable
Real * vvDotTable
Definition
bspline_data.h:66
pcl::poisson::BSplineData::BSplineData
BSplineData()
Definition
bspline_data.hpp:84
pcl::poisson::BSplineData::leftBSpline
BSplineComponents leftBSpline
Definition
bspline_data.h:70
pcl::poisson::BSplineData::dValueTables
Real * dValueTables
Definition
bspline_data.h:67
pcl::poisson::PPolynomial
Definition
ppolynomial.h:59
pcl::poisson::Polynomial
Definition
polynomial.h:40
pcl::poisson
Definition
allocator.h:36
pcl::poisson::Real
float Real
Definition
multi_grid_octree_data.h:85
pcl::poisson::SetBSplineElementIntegrals
void SetBSplineElementIntegrals(double integrals[Degree1+1][Degree2+1])
Definition
bspline_data.hpp:473
pcl
Definition
convolution.h:46
pcl::poisson::BSplineData::BSplineComponents
Definition
bspline_data.h:51
pcl::poisson::BSplineData::BSplineComponents::operator[]
Polynomial< Degree > & operator[](int idx)
Definition
bspline_data.h:53
pcl::poisson::BSplineData::BSplineComponents::polys
Polynomial< Degree > polys[Degree+1]
Definition
bspline_data.h:52
pcl::poisson::BSplineData::BSplineComponents::shift
BSplineComponents shift(double s) const
Definition
bspline_data.h:57
pcl::poisson::BSplineData::BSplineComponents::printnl
void printnl() const
Definition
bspline_data.h:55
pcl::poisson::BSplineData::BSplineComponents::scale
BSplineComponents scale(double s) const
Definition
bspline_data.h:56
pcl::poisson::BSplineElementCoefficients::operator[]
int & operator[](int idx)
Definition
bspline_data.h:107
pcl::poisson::BSplineElementCoefficients::BSplineElementCoefficients
BSplineElementCoefficients()=default
pcl::poisson::BSplineElementCoefficients::operator[]
const int & operator[](int idx) const
Definition
bspline_data.h:108
pcl::poisson::BSplineElementCoefficients::coeffs
int coeffs[Degree+1]
Definition
bspline_data.h:105
pcl::poisson::BSplineElements
Definition
bspline_data.h:112
pcl::poisson::BSplineElements::_off
static const int _off
Definition
bspline_data.h:113
pcl::poisson::BSplineElements::differentiate
void differentiate(BSplineElements< Degree-1 > &d) const
Definition
bspline_data.hpp:459
pcl::poisson::BSplineElements::NONE
@ NONE
Definition
bspline_data.h:119
pcl::poisson::BSplineElements::DIRICHLET
@ DIRICHLET
Definition
bspline_data.h:120
pcl::poisson::BSplineElements::NEUMANN
@ NEUMANN
Definition
bspline_data.h:121
pcl::poisson::BSplineElements::BSplineElements
BSplineElements()
Definition
bspline_data.h:126
pcl::poisson::BSplineElements::_addRight
void _addRight(int offset, int boundary)
Definition
bspline_data.hpp:436
pcl::poisson::BSplineElements::print
void print(FILE *) const
Definition
bspline_data.h:132
pcl::poisson::BSplineElements::_addLeft
void _addLeft(int offset, int boundary)
Definition
bspline_data.hpp:424
pcl::poisson::BSplineElements::denominator
int denominator
Definition
bspline_data.h:124
pcl::poisson::BSplineElements::upSample
void upSample(BSplineElements &high) const
Definition
bspline_data.hpp:448