Line data Source code
1 : #include "NoiseGenerators.h" 2 : 3 : namespace elsa 4 : { 5 : template <typename data_t> 6 : DataContainer<data_t> NoNoiseGenerator::operator()(const DataContainer<data_t>& dc) const 7 2 : { 8 2 : return dc; 9 2 : } 10 : 11 : template <typename data_t> 12 : DataContainer<data_t> GaussianNoiseGenerator::operator()(const DataContainer<data_t>& dc) const 13 2 : { 14 : // Define random generator with Gaussian distribution 15 2 : std::random_device randDevice{}; 16 2 : std::default_random_engine generator{randDevice()}; 17 2 : std::normal_distribution<data_t> dist(_mean, _stddev); 18 : 19 2 : auto newDc = dc; 20 : 21 2050 : for (int i = 0; i < dc.getSize(); ++i) { 22 2048 : newDc[i] += dist(generator); 23 2048 : } 24 2 : return newDc; 25 2 : } 26 : 27 : template <typename data_t> 28 : DataContainer<data_t> PoissonNoiseGenerator::operator()(const DataContainer<data_t>& dc) const 29 2 : { 30 : // Define random generator with Gaussian distribution 31 2 : std::random_device randDevice{}; 32 2 : std::default_random_engine generator{randDevice()}; 33 2 : std::exponential_distribution<data_t> dist(_mean); 34 : 35 2 : auto newDc = dc; 36 : 37 2050 : for (int i = 0; i < dc.getSize(); ++i) { 38 2048 : newDc[i] += dist(generator); 39 2048 : } 40 2 : return newDc; 41 2 : } 42 : 43 : // Explicit template instantiations 44 : template DataContainer<float> 45 : NoNoiseGenerator::operator()<float>(const DataContainer<float>&) const; 46 : template DataContainer<double> 47 : NoNoiseGenerator::operator()<double>(const DataContainer<double>&) const; 48 : 49 : template DataContainer<float> 50 : GaussianNoiseGenerator::operator()<float>(const DataContainer<float>&) const; 51 : template DataContainer<double> 52 : GaussianNoiseGenerator::operator()<double>(const DataContainer<double>&) const; 53 : 54 : template DataContainer<float> 55 : PoissonNoiseGenerator::operator()<float>(const DataContainer<float>&) const; 56 : template DataContainer<double> 57 : PoissonNoiseGenerator::operator()<double>(const DataContainer<double>&) const; 58 : 59 : } // namespace elsa