include
mcl_3dl
noise_generators
diagonal_noise_generator.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2019, the mcl_3dl authors
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
*
8
* * Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* * Neither the name of the copyright holder nor the names of its
14
* contributors may be used to endorse or promote products derived from
15
* this software without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
* POSSIBILITY OF SUCH DAMAGE.
28
*/
29
30
#ifndef MCL_3DL_NOISE_GENERATORS_DIAGONAL_NOISE_GENERATOR_H
31
#define MCL_3DL_NOISE_GENERATORS_DIAGONAL_NOISE_GENERATOR_H
32
33
#include <random>
34
#include <vector>
35
36
#include <
mcl_3dl/noise_generator_base.h
>
37
38
namespace
mcl_3dl
39
{
40
template
<
typename
FLT_TYPE>
41
class
DiagonalNoiseGenerator
:
public
NoiseGeneratorBase
<FLT_TYPE>
42
{
43
public
:
44
using
Parent
=
NoiseGeneratorBase<FLT_TYPE>
;
45
46
template
<
typename
T>
47
DiagonalNoiseGenerator
(
const
T& mean,
const
T& sigma)
48
{
49
Parent::setMean
(mean);
50
setSigma
(sigma);
51
}
52
53
template
<
typename
T>
54
void
setSigma
(
const
T& sigma)
55
{
56
sigma_
.resize(sigma.size());
57
for
(
size_t
i = 0; i < sigma.size(); ++i)
58
{
59
sigma_
[i] = sigma[i];
60
}
61
}
62
63
template
<
typename
RANDOM_ENGINE>
64
std::vector<FLT_TYPE>
operator()
(RANDOM_ENGINE& engine)
const
65
{
66
std::vector<FLT_TYPE> noise(
sigma_
.size());
67
for
(
size_t
i = 0; i <
sigma_
.size(); i++)
68
{
69
if
(
sigma_
[i] == 0)
70
{
71
noise[i] =
Parent::mean_
[i];
72
continue
;
73
}
74
std::normal_distribution<FLT_TYPE> nd(
Parent::mean_
[i],
sigma_
[i]);
75
noise[i] = nd(engine);
76
}
77
return
noise;
78
}
79
80
protected
:
81
std::vector<FLT_TYPE>
sigma_
;
82
};
83
84
}
// namespace mcl_3dl
85
86
#endif // MCL_3DL_NOISE_GENERATORS_DIAGONAL_NOISE_GENERATOR_H
mcl_3dl::DiagonalNoiseGenerator::DiagonalNoiseGenerator
DiagonalNoiseGenerator(const T &mean, const T &sigma)
Definition:
diagonal_noise_generator.h:47
noise_generator_base.h
mcl_3dl::DiagonalNoiseGenerator::setSigma
void setSigma(const T &sigma)
Definition:
diagonal_noise_generator.h:54
mcl_3dl::DiagonalNoiseGenerator::sigma_
std::vector< FLT_TYPE > sigma_
Definition:
diagonal_noise_generator.h:81
mcl_3dl::DiagonalNoiseGenerator::operator()
std::vector< FLT_TYPE > operator()(RANDOM_ENGINE &engine) const
Definition:
diagonal_noise_generator.h:64
mcl_3dl::NoiseGeneratorBase
Definition:
noise_generator_base.h:38
mcl_3dl::NoiseGeneratorBase::mean_
std::vector< FLT_TYPE > mean_
Definition:
noise_generator_base.h:64
mcl_3dl::NoiseGeneratorBase::setMean
void setMean(const T &mean)
Definition:
noise_generator_base.h:46
mcl_3dl
Definition:
chunked_kdtree.h:43
mcl_3dl::DiagonalNoiseGenerator
Definition:
diagonal_noise_generator.h:41
mcl_3dl
Author(s): Atsushi Watanabe
autogenerated on Thu Oct 17 2024 02:18:04