SourceXtractorPlusPlus
0.21
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
SEImplementation
src
lib
Background
SimpleBackgroundAnalyzer.cpp
Go to the documentation of this file.
1
17
/*
18
* Background.cpp
19
*
20
* Created on: Oct 11, 2016
21
* Author: mschefer
22
*/
23
24
#include "
SEFramework/Image/ImageAccessor.h
"
25
#include "
SEImplementation/Background/Utils.h
"
26
#include "
SEImplementation/Background/SimpleBackgroundAnalyzer.h
"
27
28
#include <memory>
29
#include <algorithm>
30
31
#include "
SEFramework/Image/ConstantImage.h
"
32
#include "
SEFramework/Image/VectorImage.h
"
33
#include "
SEFramework/Image/ProcessedImage.h
"
34
35
36
namespace
SourceXtractor
{
37
38
BackgroundModel
SimpleBackgroundAnalyzer::analyzeBackground
(
39
std::shared_ptr<DetectionImage>
image,
40
std::shared_ptr<WeightImage>
/*variance_map*/
,
std::shared_ptr
<
Image<unsigned char>
>
/*mask*/
,
41
WeightImage::PixelType
/*variance_threshold*/
)
const
{
42
43
// FIXME we use a VectorImage the same size as input which won't allow larger than memory images to be processed
44
45
auto
image_copy =
VectorImage<DetectionImage::PixelType>::create
(*image);
46
std::sort
(image_copy->getData().begin(), image_copy->getData().end());
47
bck_model_logger
.
debug
() <<
"Using the SimpleBackgroundLeverAnalyzer"
;
48
49
auto
background_level = image_copy->getData()[image_copy->getData().size()/2];
// the median
50
auto
background_level_map =
ConstantImage<SeFloat>::create
(image->getWidth(), image->getHeight(), background_level);
51
52
auto
subtracted_image =
SubtractImage<SeFloat>::create
(image, background_level_map);
53
54
auto
background_variance =
getVariance
(subtracted_image);
55
auto
background_variance_map =
ConstantImage<SeFloat>::create
(image->getWidth(), image->getHeight(), background_variance);
56
bck_model_logger
.
debug
() <<
"bg: "
<< background_level <<
" var: "
<< background_variance;
57
58
return
BackgroundModel
(background_level_map, background_variance_map, 1.0,
std::sqrt
(background_variance));
59
}
60
61
62
SeFloat
SimpleBackgroundAnalyzer::getVariance
(
std::shared_ptr<DetectionImage>
image) {
63
// Note: We compute the RMS by only taking into consideration pixels
64
// below the background value.
65
using
Accessor =
ImageAccessor<DetectionImage::PixelType>
;
66
Accessor accessor(image, Accessor::TOP_LEFT, 256, 1);
67
68
double
variance = 0;
69
int
pixels = 0;
70
for
(
int
y
= 0;
y
< accessor.getHeight();
y
++) {
71
for
(
int
x
= 0;
x
< accessor.getWidth();
x
++) {
72
auto
value = accessor.getValue(
x
,
y
);
73
if
(value < 0) {
74
variance += value * value;
75
pixels++;
76
}
77
}
78
}
79
80
if
(pixels > 0) {
81
variance /= pixels;
82
}
83
84
return
variance;
85
}
86
87
}
88
ConstantImage.h
ImageAccessor.h
x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
Definition
MoffatModelFittingTask.cpp:94
y
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
Definition
MoffatModelFittingTask.cpp:94
ProcessedImage.h
SimpleBackgroundAnalyzer.h
Utils.h
VectorImage.h
Elements::Logging::debug
void debug(const std::string &logMessage)
SourceXtractor::BackgroundModel
Definition
BackgroundAnalyzer.h:33
SourceXtractor::ConstantImage::create
static std::shared_ptr< ConstantImage< T > > create(int width, int height, T constant_value)
Definition
ConstantImage.h:42
SourceXtractor::ImageAccessor
Definition
ImageAccessor.h:41
SourceXtractor::Image
Interface representing an image.
Definition
Image.h:44
SourceXtractor::Image< SeFloat >::PixelType
SeFloat PixelType
Definition
Image.h:48
SourceXtractor::ProcessedImage::create
static std::shared_ptr< ProcessedImage< T, P > > create(std::shared_ptr< const Image< T > > image_a, std::shared_ptr< const Image< T > > image_b)
Definition
ProcessedImage.h:53
SourceXtractor::SimpleBackgroundAnalyzer::analyzeBackground
BackgroundModel analyzeBackground(std::shared_ptr< DetectionImage > image, std::shared_ptr< WeightImage > variance_map, std::shared_ptr< Image< unsigned char > > mask, WeightImage::PixelType variance_threshold) const override
Definition
SimpleBackgroundAnalyzer.cpp:38
SourceXtractor::SimpleBackgroundAnalyzer::getVariance
static SeFloat getVariance(std::shared_ptr< DetectionImage > image)
Definition
SimpleBackgroundAnalyzer.cpp:62
SourceXtractor::VectorImage::create
static std::shared_ptr< VectorImage< T > > create(Args &&... args)
Definition
VectorImage.h:100
SourceXtractor
Definition
Aperture.h:30
SourceXtractor::SeFloat
SeFloat32 SeFloat
Definition
Types.h:32
SourceXtractor::bck_model_logger
static Elements::Logging bck_model_logger
Definition
Utils.h:25
std::shared_ptr
std::sort
T sort(T... args)
std::sqrt
T sqrt(T... args)
Generated by
1.11.0