36 m_image(detection_image),
37 m_variance_map(variance_map),
38 m_coordinate_system(coordinate_system),
40 m_saturation(saturation),
41 m_detection_threshold(0),
42 m_variance_threshold(variance_threshold),
43 m_interpolation_gap(interpolation_gap) {}
51 m_image(detection_image),
52 m_variance_map(variance_map),
53 m_coordinate_system(coordinate_system),
56 m_detection_threshold(0),
57 m_variance_threshold(1e6),
58 m_interpolation_gap(0) {
59 if (variance_map ==
nullptr && detection_image !=
nullptr) {
61 detection_image->getHeight(), .0001);
68 if (m_interpolation_gap > 0) {
69 if (m_interpolated_image ==
nullptr) {
72 getVarianceThreshold(), m_interpolation_gap)
75 return m_interpolated_image;
78 return getOriginalImage();
91 if (m_filtered_image ==
nullptr) {
92 const_cast<Frame<T> *
>(
this)->applyFilter();
94 return m_filtered_image;
112 if (m_filtered_variance_map ==
nullptr) {
113 const_cast<Frame<T> *
>(
this)->applyFilter();
115 return m_filtered_variance_map;
121 if (m_interpolation_gap > 0) {
122 if (!m_interpolated_variance) {
125 getVarianceThreshold(), m_interpolation_gap)
128 return m_interpolated_variance;
131 return m_variance_map;
138 struct ThresholdOperation {
139 static T process(
const T& a,
const T& b) {
return sqrt(a) * b; }
143 return ThresholdImage::create(m_variance_map, m_detection_threshold);
149 m_variance_map = variance_map;
152 m_interpolated_image =
nullptr;
153 m_filtered_image =
nullptr;
154 m_filtered_variance_map =
nullptr;
160 m_variance_threshold = threshold;
163 m_interpolated_image =
nullptr;
164 m_filtered_image =
nullptr;
165 m_filtered_variance_map =
nullptr;
171 if (m_background_level_map !=
nullptr) {
172 return m_background_level_map;
183 m_detection_threshold = detection_threshold;
195 m_background_level_map = background_level_map;
196 m_filtered_image =
nullptr;
203 m_filtered_image =
nullptr;
204 m_filtered_variance_map =
nullptr;
216 if (m_filter !=
nullptr) {
217 m_filtered_image = m_filter->processImage(getSubtractedImage(), getUnfilteredVarianceMap(), getVarianceThreshold());
218 auto filtered_variance_map = m_filter->processImage(getUnfilteredVarianceMap(), getUnfilteredVarianceMap(),
219 getVarianceThreshold());
221 m_filtered_image->getWidth(), m_filtered_image->getHeight(),
222 [filtered_variance_map](
int x,
int y) -> T {
223 return std::max(filtered_variance_map->getValue(
x,
y), 0.f);
229 m_filtered_image = getSubtractedImage();
230 m_filtered_variance_map = getUnfilteredVarianceMap();
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y