27 namespace SourceXtractor {
36 m_image(detection_image),
37 m_variance_map(variance_map),
38 m_coordinate_system(coordinate_system),
40 m_saturation(saturation),
42 m_detection_threshold(0),
43 m_variance_threshold(variance_threshold),
44 m_interpolation_gap(interpolation_gap) {}
52 m_image(detection_image),
53 m_variance_map(variance_map),
54 m_coordinate_system(coordinate_system),
58 m_detection_threshold(0),
59 m_variance_threshold(1e6),
60 m_interpolation_gap(0) {
61 if (variance_map ==
nullptr && detection_image !=
nullptr) {
63 detection_image->getHeight(), .0001);
70 if (m_interpolation_gap > 0) {
71 if (m_interpolated_image ==
nullptr) {
74 getVarianceThreshold(), m_interpolation_gap)
77 return m_interpolated_image;
80 return getOriginalImage();
93 if (m_filtered_image ==
nullptr) {
94 const_cast<Frame<T> *
>(
this)->applyFilter();
96 return m_filtered_image;
114 if (m_filtered_variance_map ==
nullptr) {
115 const_cast<Frame<T> *
>(
this)->applyFilter();
117 return m_filtered_variance_map;
123 if (m_interpolation_gap > 0) {
124 if (!m_interpolated_variance) {
127 getVarianceThreshold(), m_interpolation_gap)
130 return m_interpolated_variance;
133 return m_variance_map;
140 struct ThresholdOperation {
141 static T process(
const T& a,
const T& b) {
return sqrt(a) * b; }
145 return ThresholdImage::create(m_variance_map, m_detection_threshold);
151 m_variance_map = variance_map;
154 m_interpolated_image =
nullptr;
155 m_filtered_image =
nullptr;
156 m_filtered_variance_map =
nullptr;
162 m_variance_threshold = threshold;
165 m_interpolated_image =
nullptr;
166 m_filtered_image =
nullptr;
167 m_filtered_variance_map =
nullptr;
173 if (m_background_level_map !=
nullptr) {
174 return m_background_level_map;
185 m_detection_threshold = detection_threshold;
197 m_background_level_map = background_level_map;
198 m_background_rms = background_rms;
199 m_filtered_image =
nullptr;
206 m_filtered_image =
nullptr;
207 m_filtered_variance_map =
nullptr;
219 if (m_filter !=
nullptr) {
220 m_filtered_image = m_filter->processImage(getSubtractedImage(), getUnfilteredVarianceMap(), getVarianceThreshold());
221 auto filtered_variance_map = m_filter->processImage(getUnfilteredVarianceMap(), getUnfilteredVarianceMap(),
222 getVarianceThreshold());
224 m_filtered_image->getWidth(), m_filtered_image->getHeight(),
225 [filtered_variance_map](
int x,
int y) -> T {
226 return std::max(filtered_variance_map->getValue(x,
y), 0.f);
232 m_filtered_image = getSubtractedImage();
233 m_filtered_variance_map = getUnfilteredVarianceMap();
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y