28 namespace ModelFitting {
32 template <
typename ImageType>
35 auto size_x = Traits::width(image);
36 auto size_y = Traits::height(image);
38 std::size_t image_x = std::get<0>(sample) / pixel_scale + size_x/2.;
39 std::size_t image_y = std::get<1>(sample) / pixel_scale + size_y/2.;
40 if (image_x>=0 && image_x<size_x && image_y>=0 && image_y<size_y) {
41 Traits::at(image, image_x, image_y) += std::get<2>(sample);
46 template <
typename ImageType>
49 auto size_x = Traits::width(image);
50 auto size_y = Traits::height(image);
52 double x_model =
x - (size_x-1) / 2.;
55 double y_model =
y - (size_y-1) / 2.;
57 if (!component.
insideSharpRegion(x_model-pixel_scale/2., y_model-pixel_scale/2.) ||
69 template<
typename ImageType>
73 if (size_x % 2 == 0 || size_y % 2 == 0) {
75 <<
"but got (" << size_x <<
',' << size_y <<
")";
77 ImageType image = Traits::factory(size_x, size_y);
78 double r_max =
std::sqrt(size_x * size_x + size_y * size_y) / 2.;
80 component->updateRasterizationInfo(pixel_scale, r_max);
81 ImageType comp_image = Traits::factory(size_x, size_y);
84 for (
auto im_it = Traits::begin(image), comp_it = Traits::begin(comp_image);
85 im_it != Traits::end(image); ++im_it, ++comp_it) {
void addSharp(ImageType &image, double pixel_scale, ModelComponent &component)
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
virtual bool insideSharpRegion(double x, double y)=0
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
virtual std::vector< ModelSample > getSharpSampling()=0
virtual double getValue(double x, double y)=0
std::vector< std::unique_ptr< ModelComponent > > m_component_list
ImageType getRasterizedImage(double pixel_scale, std::size_t size_x, std::size_t size_y) const
void addSmooth(ImageType &image, double pixel_scale, ModelComponent &component)