SourceXtractorPlusPlus 0.21
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
Frame.cpp
Go to the documentation of this file.
1
26
27
28namespace SourceXtractor {
29
30template<typename T>
35 SeFloat gain, SeFloat saturation, int interpolation_gap
36):
37 m_image(detection_image),
38 m_variance_map(variance_map),
39 m_coordinate_system(coordinate_system),
40 m_gain(gain),
41 m_saturation(saturation),
42 m_background_rms(0),
43 m_detection_threshold(0),
44 m_variance_threshold(variance_threshold),
45 m_interpolation_gap(interpolation_gap) {
48}
49
50
51template<typename T>
55):
56 m_image(detection_image),
57 m_variance_map(variance_map),
58 m_coordinate_system(coordinate_system),
59 m_gain(0),
60 m_saturation(0),
61 m_background_rms(0),
62 m_detection_threshold(0),
63 m_variance_threshold(1e6),
64 m_interpolation_gap(0) {
65 if (variance_map == nullptr && detection_image != nullptr) {
67 detection_image->getHeight(), .0001);
68 }
71}
72
73template<typename T>
75 // FIXME replace switch with a better system
76 switch(layer) {
77 default:
79 return getOriginalImage();
80 break;
82 return getInterpolatedImage();
83 break;
85 return getSubtractedImage();
86 break;
88 return getFilteredImage();
89 break;
91 return getThresholdedImage();
92 break;
94 return getSnrImage();
95 break;
97 return getOriginalVarianceMap();
98 break;
100 return getUnfilteredVarianceMap();
101 break;
102 case LayerVarianceMap:
103 return getVarianceMap();
104 break;
106 return getDetectionThresholdMap();
107 break;
108 }
109}
110
111template<typename T>
113 if (m_interpolated_image > 0) {
114 return m_interpolated_image;
115 }
116 else {
117 return m_image;
118 }
119}
120
121
122template<typename T>
124 return SubtractImage<T>::create(getInterpolatedImage(), getBackgroundLevelMap());
125}
126
127
128template<typename T>
130 return m_filtered_image;
131}
132
133
134template<typename T>
136 return ThresholdedImage<T>::create(getFilteredImage(), getVarianceMap(), m_detection_threshold);
137}
138
139
140template<typename T>
142 return SnrImage<T>::create(getFilteredImage(), getVarianceMap());
143}
144
145
146template<typename T>
148 return m_filtered_variance_map;
149}
150
151
152template<typename T>
154 if (m_interpolated_variance) {
155 return m_interpolated_variance;
156 }
157 else {
158 return m_variance_map;
159 }
160}
161
162
163template<typename T>
165 struct ThresholdOperation {
166 static T process(const T& a, const T& b) { return sqrt(a) * b; }
167 };
168
170 return ThresholdImage::create(m_variance_map, m_detection_threshold);
171}
172
173
174template<typename T>
176 m_variance_map = variance_map;
177
178 // resets the interpolated image cache and filtered image
179 m_interpolated_image = nullptr;
180 m_interpolated_variance = nullptr;
181 m_filtered_image = nullptr;
182 m_filtered_variance_map = nullptr;
183
184 applyInterpolation();
185 applyFilter();
186}
187
188
189template<typename T>
191
192 // set the variance threshold if it make sense
193 if (m_variance_threshold < std::numeric_limits<WeightImage::PixelType>::max()){
194 m_variance_threshold = threshold;
195 }
196 else{
197 return;
198 }
199
200 // resets the interpolated image cache and filtered image
201 m_interpolated_image = nullptr;
202 m_interpolated_variance = nullptr;
203 m_filtered_image = nullptr;
204 m_filtered_variance_map = nullptr;
205
206 applyInterpolation();
207 applyFilter();
208}
209
210
211template<typename T>
213 if (m_background_level_map != nullptr) {
214 return m_background_level_map;
215 }
216 else {
217 // background level = 0 by default
218 return ConstantImage<T>::create(m_image->getWidth(), m_image->getHeight(), 0);
219 }
220}
221
222
223template<typename T>
227
228
229template<typename T>
231 setBackgroundLevel(ConstantImage<T>::create(m_image->getWidth(), m_image->getHeight(), background_level), 0.);
232}
233
234
235template<typename T>
237 m_background_level_map = background_level_map;
238 m_background_rms = background_rms;
239 m_filtered_image = nullptr;
240 m_filtered_variance_map = nullptr;
241
242 applyFilter();
243}
244
245
246template<typename T>
248 m_filter = filter;
249 m_filtered_image = nullptr;
250 m_filtered_variance_map = nullptr;
251 applyFilter();
252}
253
254
255template<typename T>
257 m_label = label;
258}
259
260
261template<typename T>
263 if (m_filter != nullptr) {
264 m_filtered_image = m_filter->processImage(getSubtractedImage(), getUnfilteredVarianceMap(),
265 m_variance_threshold);
266 auto filtered_variance_map = m_filter->processImage(getUnfilteredVarianceMap(),
267 getUnfilteredVarianceMap(),
268 m_variance_threshold);
269 m_filtered_variance_map = FunctionalImage<T>::create(
271 return std::max(v, 0.f);
272 }
273 );
274 }
275 else {
276 m_filtered_image = getSubtractedImage();
277 m_filtered_variance_map = getUnfilteredVarianceMap();
278 }
279}
280
281template<typename T>
283 if (!m_interpolated_variance) {
284 m_interpolated_variance = BufferedImage<WeightImage::PixelType>::create(
286 m_variance_map, m_variance_map, m_variance_threshold, m_interpolation_gap)
287 );
288 }
289 if (!m_interpolated_image) {
290 m_interpolated_image = BufferedImage<T>::create(
292 m_image, m_variance_map, m_variance_threshold, m_interpolation_gap)
293 );
294 }
295}
296
297template
298class Frame<SeFloat>;
299
300} // end namespace SourceXtractor
static std::shared_ptr< ConstantImage< T > > create(int width, int height, T constant_value)
void applyInterpolation()
Definition Frame.cpp:282
std::shared_ptr< WeightImage > m_variance_map
Definition Frame.h:183
std::shared_ptr< Image< T > > getImage(FrameImageLayer layer) const
Definition Frame.cpp:74
Frame(std::shared_ptr< Image< T > > detection_image, std::shared_ptr< WeightImage > variance_map, WeightImage::PixelType variance_threshold, std::shared_ptr< CoordinateSystem > coordinate_system, SeFloat gain, SeFloat saturation, int interpolation_gap)
Definition Frame.cpp:31
Used to subtract a constant value from an Image.
T make_shared(T... args)
T max(T... args)
@ LayerVarianceMap
Definition Frame.h:45
@ LayerFilteredImage
Definition Frame.h:40
@ LayerOriginalImage
Definition Frame.h:37
@ LayerDetectionThresholdMap
Definition Frame.h:46
@ LayerUnfilteredVarianceMap
Definition Frame.h:44
@ LayerThresholdedImage
Definition Frame.h:41
@ LayerInterpolatedImage
Definition Frame.h:38
@ LayerOriginalVarianceMap
Definition Frame.h:43
@ LayerSubtractedImage
Definition Frame.h:39
@ LayerSignalToNoiseMap
Definition Frame.h:42
SeFloat32 SeFloat
Definition Types.h:32
T sqrt(T... args)