SourceXtractorPlusPlus 1.0.3
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
Frame.cpp
Go to the documentation of this file.
1
17
26
27
28namespace SourceXtractor {
29
30template<typename T>
33 WeightImage::PixelType variance_threshold,
34 std::shared_ptr<CoordinateSystem> coordinate_system,
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),
44 m_variance_threshold(variance_threshold),
45 m_interpolation_gap(interpolation_gap) {
48}
49
50
51template<typename T>
53 std::shared_ptr<CoordinateSystem> coordinate_system,
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),
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;
98 break;
101 break;
102 case LayerVarianceMap:
103 return getVarianceMap();
104 break;
107 break;
108 }
109}
110
111template<typename T>
113 if (m_interpolated_image > 0) {
115 }
116 else {
117 return m_image;
118 }
119}
120
121
122template<typename T>
126
127
128template<typename T>
132
133
134template<typename T>
138
139
140template<typename T>
144
145
146template<typename T>
150
151
152template<typename T>
161
162
163template<typename T>
165 struct ThresholdOperation {
166 static T process(const T& a, const T& b) { return sqrt(a) * b; }
167 };
168
169 using ThresholdImage = ProcessedImage<T, ThresholdOperation>;
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
185 applyFilter();
186}
187
188
189template<typename T>
191
192 // set the variance threshold if it make sense
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
207 applyFilter();
208}
209
210
211template<typename T>
213 if (m_background_level_map != nullptr) {
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>
224void Frame<T>::setDetectionThreshold(T detection_threshold) {
225 m_detection_threshold = detection_threshold;
226}
227
228
229template<typename T>
230void Frame<T>::setBackgroundLevel(T background_level) {
231 setBackgroundLevel(ConstantImage<T>::create(m_image->getWidth(), m_image->getHeight(), background_level), 0.);
232}
233
234
235template<typename T>
236void Frame<T>::setBackgroundLevel(std::shared_ptr<Image<T>> background_level_map, T background_rms) {
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>
256void Frame<T>::setLabel(const std::string& label) {
257 m_label = label;
258}
259
260
261template<typename T>
263 if (m_filter != nullptr) {
266 auto filtered_variance_map = m_filter->processImage(getUnfilteredVarianceMap(),
270 filtered_variance_map, [](int, int, WeightImage::PixelType v) {
271 return std::max(v, 0.f);
272 }
273 );
274 }
275 else {
278 }
279}
280
281template<typename T>
296
297template
298class Frame<SeFloat>;
299
300} // end namespace SourceXtractor
static std::shared_ptr< BufferedImage< T > > create(std::shared_ptr< const ImageSource > source, std::shared_ptr< TileManager > tile_manager=TileManager::getInstance())
static std::shared_ptr< ConstantImage< T > > create(int width, int height, T constant_value)
std::shared_ptr< Image< T > > getSnrImage() const
Definition Frame.cpp:141
void setBackgroundLevel(T background_level)
Definition Frame.cpp:230
void applyInterpolation()
Definition Frame.cpp:282
std::shared_ptr< Image< T > > getDetectionThresholdMap() const
Definition Frame.cpp:164
void setFilter(std::shared_ptr< ImageFilter > filter)
Definition Frame.cpp:247
std::shared_ptr< WeightImage > m_variance_map
Definition Frame.h:183
std::string m_label
Definition Frame.h:203
SeFloat m_background_rms
Definition Frame.h:190
std::shared_ptr< Image< T > > m_interpolated_image
Definition Frame.h:198
std::shared_ptr< Image< T > > getImage(FrameImageLayer layer) const
Definition Frame.cpp:74
std::shared_ptr< Image< T > > m_background_level_map
Definition Frame.h:184
void setDetectionThreshold(T detection_threshold)
Definition Frame.cpp:224
void setLabel(const std::string &label)
Definition Frame.cpp:256
std::shared_ptr< ImageFilter > m_filter
Definition Frame.h:197
void setVarianceMap(std::shared_ptr< WeightImage > variance_map)
Definition Frame.cpp:175
std::shared_ptr< Image< T > > getBackgroundLevelMap() const
Definition Frame.cpp:212
std::shared_ptr< Image< T > > m_filtered_variance_map
Definition Frame.h:201
std::shared_ptr< WeightImage > getOriginalVarianceMap() const
Definition Frame.h:123
WeightImage::PixelType m_variance_threshold
Definition Frame.h:193
std::shared_ptr< Image< WeightImage::PixelType > > m_interpolated_variance
Definition Frame.h:199
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
std::shared_ptr< CoordinateSystem > m_coordinate_system
Definition Frame.h:186
std::shared_ptr< Image< T > > getInterpolatedImage() const
Definition Frame.cpp:112
std::shared_ptr< WeightImage > getUnfilteredVarianceMap() const
Definition Frame.cpp:153
SeFloat m_saturation
Definition Frame.h:189
std::shared_ptr< Image< T > > getOriginalImage() const
Definition Frame.h:79
std::shared_ptr< Image< T > > m_filtered_image
Definition Frame.h:200
std::shared_ptr< Image< T > > getThresholdedImage() const
Definition Frame.cpp:135
std::shared_ptr< Image< T > > getFilteredImage() const
Definition Frame.cpp:129
std::shared_ptr< Image< T > > getSubtractedImage() const
Definition Frame.cpp:123
std::shared_ptr< WeightImage > getVarianceMap() const
Definition Frame.cpp:147
std::shared_ptr< Image< T > > m_image
Definition Frame.h:182
void setVarianceThreshold(WeightImage::PixelType threshold)
Definition Frame.cpp:190
static std::shared_ptr< FunctionalImage< T, I > > create(Args &&... args)
Interface representing an image.
Definition Image.h:44
Processes two images to create a third combining them by using any function.
static std::shared_ptr< ProcessedImage< T, SubtractOperation< T > > > create(std::shared_ptr< const Image< T > > image_a, std::shared_ptr< const Image< T > > image_b)
static std::shared_ptr< ThresholdedImage< T > > create(std::shared_ptr< const Image< T > > image, std::shared_ptr< const Image< T > > variance_map, T threshold_multiplier)
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)