camcom 1.0.0-pre2
 
Loading...
Searching...
No Matches
frameGenerator.hpp
Go to the documentation of this file.
1
8
9#ifndef CAMCOM_COMMON_FRAMEGENERATOR_HPP
10#define CAMCOM_COMMON_FRAMEGENERATOR_HPP
11
12#include <cstdint>
13#include <memory>
14#include <vector>
15
17
18namespace camcom::common {
19
31
34
43
44 // Dimensions
45 int32_t width{512};
46 int32_t height{512};
47 int32_t bin_x{1};
48 int32_t bin_y{1};
49 DataType output_type{DataType::BYTE};
50
51 // Exposure/gain scaling
52 double expo_time{1.0};
53 double gain{1.0};
54
55 // Frame drift (jitter between frames in a batch)
56 int16_t max_shift{50};
58
59 // Gaussian / MultiGaussian
60 double amplitude{10000.0};
61 double sigma{5.0};
62 int16_t nb_stars{1};
63
64 // Flat
65 double flat_intensity{1000.0};
66
67 // Grid
68 int16_t grid_spacing{50};
69 double spot_size{3.0};
70
71 // Gradient
73 double gradient_start{0.0};
74 double gradient_end{10000.0};
75
76 // Ring
77 double ring_inner_radius{5.0};
78 double ring_outer_radius{10.0};
79
80 // Checkerboard
81 int16_t checker_size{20};
82
83 // Noise
85 double noise_mean{1000.0};
86 double noise_std{100.0};
87
88 // Grating
89 double grating_dispersion{0.5};
92 int16_t grating_order{1};
93};
94
108public:
111
112 // Non-copyable, movable
116 FrameGenerator& operator=(FrameGenerator&&) noexcept;
117
122 void configure(const PatternConfig& config);
123
134 void generate(int32_t n_frames, std::vector<uint8_t>& output);
135
137 int32_t outputWidth() const;
138
140 int32_t outputHeight() const;
141
143 size_t bytesPerFrame() const;
144
146 size_t bytesPerPixel() const;
147
148private:
149 struct Impl;
150 std::unique_ptr<Impl> impl_;
151};
152
154PatternType parsePatternType(const std::string& type_str);
155
157GradientDirection parseGradientDirection(const std::string& dir_str);
158
160NoiseDistribution parseNoiseDistribution(const std::string& dist_str);
161
163size_t bytesPerPixelForType(DataType type);
164
165} // namespace camcom::common
166
167#endif // CAMCOM_COMMON_FRAMEGENERATOR_HPP
int32_t outputWidth() const
Output width after binning.
Definition frameGenerator.cpp:455
FrameGenerator()
Definition frameGenerator.cpp:437
int32_t outputHeight() const
Output height after binning.
Definition frameGenerator.cpp:459
FrameGenerator(FrameGenerator &&) noexcept
size_t bytesPerPixel() const
Bytes per pixel for the configured output type.
Definition frameGenerator.cpp:467
size_t bytesPerFrame() const
Bytes per single frame.
Definition frameGenerator.cpp:463
FrameGenerator & operator=(const FrameGenerator &)=delete
void generate(int32_t n_frames, std::vector< uint8_t > &output)
Generate a batch of frames into the output buffer.
Definition frameGenerator.cpp:447
FrameGenerator(const FrameGenerator &)=delete
void configure(const PatternConfig &config)
Configure the generator with pattern parameters.
Definition frameGenerator.cpp:442
CamCom data type — re-export of the ELT IFW (ifw-fnd) data type.
Definition adapterBase.cpp:18
PatternType
Definition frameGenerator.hpp:20
@ Grid
Definition frameGenerator.hpp:24
@ Grating
Definition frameGenerator.hpp:29
@ Gradient
Definition frameGenerator.hpp:25
@ Checkerboard
Definition frameGenerator.hpp:27
@ Flat
Definition frameGenerator.hpp:23
@ Noise
Definition frameGenerator.hpp:28
@ Ring
Definition frameGenerator.hpp:26
@ MultiGaussian
Definition frameGenerator.hpp:22
@ Gaussian
Definition frameGenerator.hpp:21
PatternType parsePatternType(const std::string &s)
Parse a pattern type string (case-insensitive) to PatternType enum.
Definition frameGenerator.cpp:44
NoiseDistribution
Definition frameGenerator.hpp:33
@ Poisson
Definition frameGenerator.hpp:33
@ Uniform
Definition frameGenerator.hpp:33
@ Gaussian
Definition frameGenerator.hpp:33
ifw::fnd::datatype::DataType DataType
Definition datatype.hpp:27
NoiseDistribution parseNoiseDistribution(const std::string &s)
Parse a noise distribution string to NoiseDistribution enum.
Definition frameGenerator.cpp:64
GradientDirection
Definition frameGenerator.hpp:32
@ Vertical
Definition frameGenerator.hpp:32
@ Horizontal
Definition frameGenerator.hpp:32
@ Radial
Definition frameGenerator.hpp:32
GradientDirection parseGradientDirection(const std::string &s)
Parse a gradient direction string to GradientDirection enum.
Definition frameGenerator.cpp:58
size_t bytesPerPixelForType(DataType type)
Get bytes per pixel for a given DataType.
Definition frameGenerator.cpp:28
Definition frameGenerator.cpp:73
Configuration for frame pattern generation.
Definition frameGenerator.hpp:41
double expo_time
Definition frameGenerator.hpp:52
double flat_intensity
Definition frameGenerator.hpp:65
double grating_wavelength_max
Definition frameGenerator.hpp:91
double ring_outer_radius
Definition frameGenerator.hpp:78
double amplitude
Definition frameGenerator.hpp:60
int16_t nb_stars
Definition frameGenerator.hpp:62
DataType output_type
Definition frameGenerator.hpp:49
double noise_mean
Definition frameGenerator.hpp:85
int16_t max_shift_per_frame
Definition frameGenerator.hpp:57
PatternType type
Definition frameGenerator.hpp:42
int32_t height
Definition frameGenerator.hpp:46
double ring_inner_radius
Definition frameGenerator.hpp:77
double gradient_start
Definition frameGenerator.hpp:73
double sigma
Definition frameGenerator.hpp:61
GradientDirection gradient_dir
Definition frameGenerator.hpp:72
int16_t grid_spacing
Definition frameGenerator.hpp:68
int32_t bin_y
Definition frameGenerator.hpp:48
double gain
Definition frameGenerator.hpp:53
double spot_size
Definition frameGenerator.hpp:69
int32_t width
Definition frameGenerator.hpp:45
int32_t bin_x
Definition frameGenerator.hpp:47
double grating_dispersion
Definition frameGenerator.hpp:89
double grating_wavelength_min
Definition frameGenerator.hpp:90
int16_t checker_size
Definition frameGenerator.hpp:81
double noise_std
Definition frameGenerator.hpp:86
int16_t grating_order
Definition frameGenerator.hpp:92
NoiseDistribution noise_dist
Definition frameGenerator.hpp:84
double gradient_end
Definition frameGenerator.hpp:74
int16_t max_shift
Definition frameGenerator.hpp:56