SourceXtractorPlusPlus  0.15
Please provide a description of the project.
ScaledImageSource.h
Go to the documentation of this file.
1 
18 #ifndef _SEFRAMEWORK_IMAGE_SCALEDIMAGESOURCE_H
19 #define _SEFRAMEWORK_IMAGE_SCALEDIMAGESOURCE_H
20 
24 
25 namespace SourceXtractor {
26 
34 template<typename T>
36 public:
38  enum class InterpolationType {
40  };
41 
53  ScaledImageSource(const std::shared_ptr<Image<T>>& image, int width, int height, InterpolationType interp_type = InterpolationType::BICUBIC)
54  : m_image(image), m_width(width), m_height(height) {
55  m_wscale = std::ceil(static_cast<float>(width) / image->getWidth());
56  m_hscale = std::ceil(static_cast<float>(height) / image->getHeight());
57 
58  ImageAccessor<T> accessor(image);
59 
60  switch (interp_type) {
63  break;
66  break;
67  }
68 
69  // Generate y coordinates on the original image
70  std::vector<double> y_coords(image->getHeight());
71  for (size_t i = 0; i < y_coords.size(); ++i) {
72  y_coords[i] = std::floor((i + 0.5) * m_hscale);
73  }
74 
75  // Generate x coordinates on the original image
76  m_x_coords.resize(image->getWidth());
77  for (size_t i = 0; i < m_x_coords.size(); ++i) {
78  m_x_coords[i] = std::floor((i + 0.5) * m_wscale);
79  }
80 
81  // Store interpolation along columns
82  m_interpolated_cols.reserve(image->getWidth());
83  for (int x = 0; x < image->getWidth(); ++x) {
84  std::vector<double> values(image->getHeight());
85  for (int y = 0; y < image->getHeight(); ++y) {
86  values[y] = accessor.getValue(x, y);
87  }
89  Euclid::MathUtils::interpolate(y_coords, values, m_interpolation_type, true));
90  }
91  }
92 
96  virtual ~ScaledImageSource() = default;
97 
101  std::string getRepr() const final {
102  return std::string("ScaledImageSource");
103  }
104 
118  std::shared_ptr<ImageTile> getImageTile(int x, int y, int width, int height) const final {
119  auto tile = ImageTile::create(ImageTile::getTypeValue(T()), x, y, width, height);
120 
121  for (int off_y = 0; off_y < height; ++off_y) {
123  for (size_t ix = 0; ix < m_x_coords.size(); ++ix) {
124  auto& fy = *m_interpolated_cols[ix];
125  v[ix] = fy(y + off_y);
126  }
128  for (int off_x = 0; off_x < width; ++off_x) {
129  tile->setValue(x + off_x, y + off_y, T((*fx)(x + off_x)));
130  }
131  }
132  return tile;
133  }
134 
138  void saveTile(ImageTile&) final {
139  assert(false);
140  }
141 
145  int getWidth() const final {
146  return m_width;
147  }
148 
152  int getHeight() const final {
153  return m_height;
154  }
155 
156  ImageTile::ImageType getType() const override {
157  return ImageTile::getTypeValue(T());
158  }
159 
160 private:
167 };
168 
169 } // end of namespace SourceXtractor
170 
171 #endif // _SEFRAMEWORK_IMAGE_SCALEDIMAGESOURCE_H
std::vector::resize
T resize(T... args)
std::floor
T floor(T... args)
SourceXtractor::ScaledImageSource::m_width
int m_width
Definition: ScaledImageSource.h:162
SourceXtractor::ScaledImageSource::m_interpolated_cols
std::vector< std::unique_ptr< Euclid::MathUtils::Function > > m_interpolated_cols
Definition: ScaledImageSource.h:164
SourceXtractor::ImageAccessor
Definition: ImageAccessor.h:41
std::string
STL class.
std::shared_ptr
STL class.
SourceXtractor::ScaledImageSource::getHeight
int getHeight() const final
Definition: ScaledImageSource.h:152
SourceXtractor::ScaledImageSource::InterpolationType::BICUBIC
@ BICUBIC
std::vector::reserve
T reserve(T... args)
std::vector< double >
std::vector::size
T size(T... args)
SourceXtractor::ScaledImageSource::InterpolationType
InterpolationType
Interpolation type: bilinear or bicubic.
Definition: ScaledImageSource.h:38
SourceXtractor::ScaledImageSource::~ScaledImageSource
virtual ~ScaledImageSource()=default
SourceXtractor::ScaledImageSource::getImageTile
std::shared_ptr< ImageTile > getImageTile(int x, int y, int width, int height) const final
Definition: ScaledImageSource.h:118
SourceXtractor::ScaledImageSource
Definition: ScaledImageSource.h:35
SourceXtractor::ImageTile::create
static std::shared_ptr< ImageTile > create(ImageType image_type, int x, int y, int width, int height, std::shared_ptr< ImageSource > source=nullptr)
Definition: ImageTile.cpp:24
SourceXtractor::ScaledImageSource::getWidth
int getWidth() const final
Definition: ScaledImageSource.h:145
SourceXtractor::Image
Interface representing an image.
Definition: Image.h:43
SourceXtractor::ScaledImageSource::m_x_coords
std::vector< double > m_x_coords
Definition: ScaledImageSource.h:165
SourceXtractor::ScaledImageSource::m_wscale
double m_wscale
Definition: ScaledImageSource.h:166
SourceXtractor::ImageTile
Definition: ImageTile.h:34
SourceXtractor
Definition: Aperture.h:30
SourceXtractor::ScaledImageSource::getRepr
std::string getRepr() const final
Definition: ScaledImageSource.h:101
SourceXtractor::ScaledImageSource::InterpolationType::BILINEAR
@ BILINEAR
SourceXtractor::ScaledImageSource::m_hscale
double m_hscale
Definition: ScaledImageSource.h:166
SourceXtractor::ScaledImageSource::m_interpolation_type
Euclid::MathUtils::InterpolationType m_interpolation_type
Definition: ScaledImageSource.h:163
SourceXtractor::ImageTile::getTypeValue
static ImageType getTypeValue(float)
Definition: ImageTile.h:99
std::ceil
T ceil(T... args)
SourceXtractor::ImageSource
Definition: ImageSource.h:52
SourceXtractor::ImageAccessor::getValue
T getValue(int x, int y)
Definition: ImageAccessor.h:100
Euclid::MathUtils::InterpolationType
InterpolationType
std::vector::emplace_back
T emplace_back(T... args)
interpolation.h
x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
Definition: MoffatModelFittingTask.cpp:94
SourceXtractor::ScaledImageSource::m_height
int m_height
Definition: ScaledImageSource.h:162
ImageSource.h
SourceXtractor::ScaledImageSource::getType
ImageTile::ImageType getType() const override
Definition: ScaledImageSource.h:156
y
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
Definition: MoffatModelFittingTask.cpp:94
SourceXtractor::ScaledImageSource::ScaledImageSource
ScaledImageSource(const std::shared_ptr< Image< T >> &image, int width, int height, InterpolationType interp_type=InterpolationType::BICUBIC)
Definition: ScaledImageSource.h:53
SourceXtractor::ScaledImageSource::m_image
std::shared_ptr< Image< T > > m_image
Definition: ScaledImageSource.h:161
ImageAccessor.h
SourceXtractor::ImageTile::ImageType
ImageType
Definition: ImageTile.h:37
Euclid::MathUtils::InterpolationType::LINEAR
@ LINEAR
Euclid::MathUtils::interpolate
ELEMENTS_API std::unique_ptr< Function > interpolate(const std::vector< double > &x, const std::vector< double > &y, InterpolationType type, bool extrapolate=false)
SourceXtractor::ScaledImageSource::saveTile
void saveTile(ImageTile &) final
Definition: ScaledImageSource.h:138