SourceXtractorPlusPlus 0.21
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
BenchRendering.cpp
Go to the documentation of this file.
1
17/*
18 * BenchRendering.cpp
19 *
20 * Created on: Aug 7, 2019
21 * Author: mschefer
22 */
23
24
25#include <boost/timer/timer.hpp>
26
27#include "ElementsKernel/ProgramHeaders.h"
28
33
45
47
50
51namespace po = boost::program_options;
52namespace fs = boost::filesystem;
53
54using namespace ModelFitting;
55using namespace SourceXtractor;
56
57template <typename ImageType>
58class DummyPsf {
59public:
60 DummyPsf() : m_kernel(VectorImage<SeFloat>::create(1, 1)) {}
61
62 double getPixelScale() const {
63 return 1.0;
64 }
65
67 return 1;
68 }
69
73
74 void convolve(ImageType& /*image*/) const {
75 }
76
77private:
79
80};
81
82
83template <typename ImageType>
84class DummyModel : public ExtendedModel<ImageType> {
85
86public:
92
93 virtual ~DummyModel() = default;
94
95 double getValue(double x, double y) const override { return 0.0; }
96
99 ImageType image = Traits::factory(size_x, size_y);
100 return image;
101 }
102};
103
104template <typename ImageType>
105class DummyFillModel : public ExtendedModel<ImageType> {
106
107public:
113
114 virtual ~DummyFillModel() = default;
115
116 double getValue(double x, double y) const override { return 0.0; }
117
120 ImageType image = Traits::factory(size_x, size_y);
121
122 for (std::size_t x=0; x<size_x; ++x) {
123 for (std::size_t y=0; y<size_y; ++y) {
124 Traits::at(image, x, y) = x+y;
125 }
126 }
127
128
129 return image;
130 }
131};
132
133template <typename ImageType>
134class DummyExpModel : public ExtendedModel<ImageType> {
135
136public:
142
143 virtual ~DummyExpModel() = default;
144
145 double getValue(double x, double y) const override { return 0.0; }
146
149 ImageType image = Traits::factory(size_x, size_y);
150
151 for (std::size_t x=0; x<size_x; ++x) {
152 for (std::size_t y=0; y<size_y; ++y) {
153 Traits::at(image, x, y) = std::exp(float(x+y));
154 }
155 }
156
157 return image;
158 }
159};
160
161template <typename ImageType>
162class DummySersicModel : public ExtendedModel<ImageType> {
163
164public:
170
171 virtual ~DummySersicModel() = default;
172
173 double getValue(double x, double y) const override { return 0.0; }
174
177 ImageType image = Traits::factory(size_x, size_y);
178
179 for (std::size_t x=0; x<size_x; ++x) {
180 for (std::size_t y=0; y<size_y; ++y) {
181 Traits::at(image, x, y) = 2.0f * std::exp(-1.5f * std::pow(float(x*x+y*y), 1.f / 4.0f));;
182 }
183 }
184
185 return image;
186 }
187};
188
189
190
191
193
194public:
195
196// po::options_description defineSpecificProgramOptions() override {
197// po::options_description config_options { "TestImage options" };
198//
199// // Add the specific program options
200// config_options.add_options()
201// ("output", po::value<string>()->required(), "filename to save the created test image")
202// ;
203//
204// return config_options;
205// }
206
207
208
227
232
233 // Devaucouleurs component
234
237
240
245
247 auto exp = Euclid::make_unique<SersicModelComponent>(Euclid::make_unique<OldSharp>(), dev_i0, dev_n, dev_k);
248 component_list.clear();
249 component_list.emplace_back(std::move(exp));
251 std::move(component_list), xs, ys, rot, 256, 256, x_param, y_param));
252
253
254 double pixel_scale = 1.0f;
255 int image_size = 256;
256
263 };
264
265 return frame_model;
266 }
267
304
305 template<typename T>
339
340
341 template<typename T>
343 auto image = VectorImage<SeFloat>::create(256, 256);
344
345 for (int i=0; i<iterations; i++) {
346 frame_model.rasterToImage(image);
347 }
348
349 return image;
350 }
351
354
355 int iterations = 300;
356
364
365 logger.info() << "Testing with empty frame";
366 {
367 boost::timer::auto_cpu_timer t;
369 }
370 logger.info() << "Testing with dummy (nop) model";
371 {
372 boost::timer::auto_cpu_timer t;
374 }
375 logger.info() << "Testing with dummy (fill) model";
376 {
377 boost::timer::auto_cpu_timer t;
379 }
380 logger.info() << "Testing with dummy (fill exp) model";
381 {
382 boost::timer::auto_cpu_timer t;
384 }
385 logger.info() << "Testing with dummy (sersic) model";
386 {
387 boost::timer::auto_cpu_timer t;
389 }
390 logger.info() << "Testing with old style Sersic model";
391 {
392 boost::timer::auto_cpu_timer t;
394 }
395 logger.info() << "Testing with compact Sersic model";
396 {
397 boost::timer::auto_cpu_timer t;
399 }
400
402 }
403
404};
405
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
const double pixel_scale
Definition TestImage.cpp:74
FrameModel< DummyPsf< ImageInterfaceTypePtr >, ImageInterfaceTypePtr > makeSersicFrameModel()
Elements::ExitCode mainMethod(std::map< std::string, po::variable_value > &args) override
std::shared_ptr< VectorImage< SeFloat > > measureRasterToImage(int iterations, T &frame_model)
FrameModel< DummyPsf< ImageInterfaceTypePtr >, ImageInterfaceTypePtr > makeCompactSersicFrameModel()
FrameModel< DummyPsf< ImageInterfaceTypePtr >, ImageInterfaceTypePtr > makeDummyFrameModel()
FrameModel< DummyPsf< ImageInterfaceTypePtr >, ImageInterfaceTypePtr > makeEmptyFrameModel()
virtual ~DummyExpModel()=default
ImageType getRasterizedImage(double pixel_scale, std::size_t size_x, std::size_t size_y) const override
double getValue(double x, double y) const override
DummyExpModel(std::shared_ptr< BasicParameter > x_scale, std::shared_ptr< BasicParameter > y_scale, std::shared_ptr< BasicParameter > rotation, double width, double height, std::shared_ptr< BasicParameter > x, std::shared_ptr< BasicParameter > y)
ImageType getRasterizedImage(double pixel_scale, std::size_t size_x, std::size_t size_y) const override
virtual ~DummyFillModel()=default
DummyFillModel(std::shared_ptr< BasicParameter > x_scale, std::shared_ptr< BasicParameter > y_scale, std::shared_ptr< BasicParameter > rotation, double width, double height, std::shared_ptr< BasicParameter > x, std::shared_ptr< BasicParameter > y)
double getValue(double x, double y) const override
DummyModel(std::shared_ptr< BasicParameter > x_scale, std::shared_ptr< BasicParameter > y_scale, std::shared_ptr< BasicParameter > rotation, double width, double height, std::shared_ptr< BasicParameter > x, std::shared_ptr< BasicParameter > y)
virtual ~DummyModel()=default
ImageType getRasterizedImage(double pixel_scale, std::size_t size_x, std::size_t size_y) const override
double getValue(double x, double y) const override
double getPixelScale() const
void convolve(ImageType &) const
std::size_t getSize() const
std::shared_ptr< VectorImage< SourceXtractor::SeFloat > > m_kernel
std::shared_ptr< VectorImage< SourceXtractor::SeFloat > > getScaledKernel(double) const
double getValue(double x, double y) const override
ImageType getRasterizedImage(double pixel_scale, std::size_t size_x, std::size_t size_y) const override
virtual ~DummySersicModel()=default
DummySersicModel(std::shared_ptr< BasicParameter > x_scale, std::shared_ptr< BasicParameter > y_scale, std::shared_ptr< BasicParameter > rotation, double width, double height, std::shared_ptr< BasicParameter > x, std::shared_ptr< BasicParameter > y)
static Logging getLogger(const std::string &name="")
Image implementation which keeps the pixel values in memory.
Definition VectorImage.h:52
static std::shared_ptr< VectorImage< T > > create(Args &&... args)
T exp(T... args)
#define MAIN_FOR(ELEMENTS_PROGRAM_NAME)
T make_shared(T... args)
T make_tuple(T... args)
T move(T... args)
static Elements::Logging logger
T pow(T... args)
static ImageInterfaceType::PixelType & at(ImageInterfaceTypePtr &image, std::size_t x, std::size_t y)
static ImageInterfaceTypePtr factory(std::size_t width, std::size_t height)