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);
73 return getOriginalImage();
76 return getInterpolatedImage();
79 return getSubtractedImage();
82 return getFilteredImage();
85 return getThresholdedImage();
91 return getOriginalVarianceMap();
94 return getUnfilteredVarianceMap();
97 return getVarianceMap();
100 return getDetectionThresholdMap();
107 if (m_interpolation_gap > 0) {
108 if (m_interpolated_image ==
nullptr) {
111 getVarianceThreshold(), m_interpolation_gap)
114 return m_interpolated_image;
117 return getOriginalImage();
130 if (m_filtered_image ==
nullptr) {
131 const_cast<Frame<T> *
>(
this)->applyFilter();
133 return m_filtered_image;
151 if (m_filtered_variance_map ==
nullptr) {
152 const_cast<Frame<T> *
>(
this)->applyFilter();
154 return m_filtered_variance_map;
160 if (m_interpolation_gap > 0) {
161 if (!m_interpolated_variance) {
164 getVarianceThreshold(), m_interpolation_gap)
167 return m_interpolated_variance;
170 return m_variance_map;
177 struct ThresholdOperation {
178 static T process(
const T& a,
const T& b) {
return sqrt(a) * b; }
182 return ThresholdImage::create(m_variance_map, m_detection_threshold);
188 m_variance_map = variance_map;
191 m_interpolated_image =
nullptr;
192 m_filtered_image =
nullptr;
193 m_filtered_variance_map =
nullptr;
199 m_variance_threshold = threshold;
202 m_interpolated_image =
nullptr;
203 m_filtered_image =
nullptr;
204 m_filtered_variance_map =
nullptr;
210 if (m_background_level_map !=
nullptr) {
211 return m_background_level_map;
222 m_detection_threshold = detection_threshold;
234 m_background_level_map = background_level_map;
235 m_background_rms = background_rms;
236 m_filtered_image =
nullptr;
243 m_filtered_image =
nullptr;
244 m_filtered_variance_map =
nullptr;
256 if (m_filter !=
nullptr) {
257 m_filtered_image = m_filter->processImage(getSubtractedImage(), getUnfilteredVarianceMap(), getVarianceThreshold());
258 auto filtered_variance_map = m_filter->processImage(getUnfilteredVarianceMap(), getUnfilteredVarianceMap(),
259 getVarianceThreshold());
261 m_filtered_image->getWidth(), m_filtered_image->getHeight(),
262 [filtered_variance_map](
int x,
int y) -> T {
263 return std::max(filtered_variance_map->getValue(x,
y), 0.f);
269 m_filtered_image = getSubtractedImage();
270 m_filtered_variance_map = getUnfilteredVarianceMap();
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y