SourceXtractorPlusPlus 1.0.3
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
FrameModel.icpp
Go to the documentation of this file.
1
22
23namespace ModelFitting {
24
25template <typename PsfType>
27
28template <typename PsfType>
30
31template <typename PsfType>
33 : PsfType(), m_psf_contexts(n_extended_models) {}
34
35template <typename PsfType>
37: PsfType(std::move(psf)), m_psf_contexts(n_extended_models) {}
38
39template <typename PsfType, typename ImageType>
41 std::vector<ConstantModel> constant_model_list,
42 std::vector<PointModel> point_model_list,
44 PsfType psf)
45 : m_pixel_scale{pixel_scale}, m_width{width}, m_height{height},
46 m_constant_model_list{std::move(constant_model_list)},
47 m_point_model_list{std::move(point_model_list)},
48 m_extended_model_list{std::move(extended_model_list)},
50}
51
52template <typename PsfType, typename ImageType>
54 std::vector<ConstantModel> constant_model_list,
55 std::vector<PointModel> point_model_list,
57 : m_pixel_scale{pixel_scale}, m_width{width}, m_height{height},
58 m_constant_model_list{std::move(constant_model_list)},
59 m_point_model_list{std::move(point_model_list)},
60 m_extended_model_list{std::move(extended_model_list)},
62}
63
64template <typename PsfType, typename ImageType>
66
67namespace _impl {
68
69template <typename ImageType>
70void addConstantModels(ImageType& image, const std::vector<ConstantModel>& model_list) {
71 using Traits = ImageTraits<ImageType>;
72 for (auto& model : model_list) {
73 double value = model.getValue();
74 for(auto it=Traits::begin(image); it!=Traits::end(image); ++it) {
75 *it += value;
76 }
77 }
78}
79
80template <typename ImageType, typename PsfType>
81void addPointModels(ImageType& image, const std::vector<PointModel>& model_list,
82 const PsfType& psf, double pixel_scale) {
83 using Traits = ImageTraits<ImageType>;
84 auto scale_factor = psf.getPixelScale() / pixel_scale;
85 for (auto& model : model_list) {
86 Traits::addImageToImage(image, psf.getScaledKernel(model.getValue()), scale_factor, model.getX(), model.getY());
87 }
88}
89
90template <typename ImageType, typename PsfType>
91void addExtendedModels(ImageType& image, const std::vector<std::shared_ptr<ExtendedModel<ImageType>>>& model_list,
92 PsfType& psf, double pixel_scale) {
93 using Traits = ImageTraits<ImageType>;
94 auto scale_factor = psf.getPixelScale() / pixel_scale;
95
96 for (size_t i = 0; i < model_list.size(); ++i) {
97 auto& model = model_list[i];
98 std::size_t width = std::ceil(model->getWidth() / psf.getPixelScale() + psf.getSize());
99 if (width % 2 == 0) {
100 ++width;
101 }
102 std::size_t height = std::ceil(model->getHeight() / psf.getPixelScale() + psf.getSize());
103 if (height % 2 == 0) {
104 ++height;
105 }
106
107 auto extended_image = model->getRasterizedImage(psf.getPixelScale(), width, height);
108 psf.convolve(i, extended_image);
109 Traits::addImageToImage(image, extended_image, scale_factor, model->getX(), model->getY());
110 }
111}
112
113} // end of namespace _impl
114
115template <typename PsfType, typename ImageType>
117 using Traits = ImageTraits<ImageType>;
118 m_model_image.reset(new ImageType(Traits::factory(m_width, m_height)));
120}
121
122template <typename PsfType, typename ImageType>
125 return *m_model_image;
126}
127
128template <typename PsfType, typename ImageType>
134
135template <typename PsfType, typename ImageType>
140
141template <typename PsfType, typename ImageType>
145
146template <typename PsfType, typename ImageType>
150
151} // end of namespace ModelFitting
152
const double pixel_scale
Definition TestImage.cpp:74
T ceil(T... args)
FrameModelPsfContainer(std::size_t n_extended_models)
FrameModelPsfContextContainer(std::size_t n_extended_models)
std::vector< typename PsfTraits< PsfType >::context_t > m_psf_contexts
Definition FrameModel.h:121
typename ImageTraits< ImageType >::iterator const_iterator
Definition FrameModel.h:143
std::vector< std::shared_ptr< ExtendedModel< ImageType > > > m_extended_model_list
Definition FrameModel.h:180
std::size_t size() const
void rasterToImage(ImageType &)
std::unique_ptr< ImageType > m_model_image
Definition FrameModel.h:182
psf_container_t m_psf
Definition FrameModel.h:181
std::vector< PointModel > m_point_model_list
Definition FrameModel.h:179
FrameModel(double pixel_scale, std::size_t width, std::size_t height, std::vector< ConstantModel > constant_model_list, std::vector< PointModel > point_model_list, std::vector< std::shared_ptr< ExtendedModel< ImageType > > > extended_model_list, PsfType psf)
const ImageType & getImage()
std::vector< ConstantModel > m_constant_model_list
Definition FrameModel.h:178
T move(T... args)
void addExtendedModels(ImageType &image, const std::vector< std::shared_ptr< ExtendedModel< ImageType > > > &model_list, PsfType &psf, double pixel_scale)
void addConstantModels(ImageType &image, const std::vector< ConstantModel > &model_list)
void addPointModels(ImageType &image, const std::vector< PointModel > &model_list, const PsfType &psf, double pixel_scale)
STL namespace.
static iterator begin(ImageType &image)
static iterator end(ImageType &image)