SourceXtractorPlusPlus
0.13
Please provide a description of the project.
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
SEFramework
SEFramework
Image
ScaledImageSource.h
Go to the documentation of this file.
1
18
#ifndef _SEFRAMEWORK_IMAGE_SCALEDIMAGESOURCE_H
19
#define _SEFRAMEWORK_IMAGE_SCALEDIMAGESOURCE_H
20
21
#include "
SEFramework/Image/ImageSource.h
"
22
#include "
MathUtils/interpolation/interpolation.h
"
23
24
namespace
SourceXtractor {
25
33
template
<
typename
T>
34
class
ScaledImageSource
:
public
ImageSource
{
35
public
:
37
enum class
InterpolationType
{
38
BILINEAR
,
BICUBIC
39
};
40
52
ScaledImageSource
(
const
std::shared_ptr
<
Image<T>
>& image,
int
width
,
int
height
,
InterpolationType
interp_type =
InterpolationType::BICUBIC
)
53
:
m_image
(image),
m_width
(width),
m_height
(height) {
54
m_wscale
=
std::ceil
(static_cast<float>(width) / image->getWidth());
55
m_hscale
=
std::ceil
(static_cast<float>(height) / image->getHeight());
56
57
switch
(interp_type) {
58
case
InterpolationType::BICUBIC
:
59
m_interpolation_type
=
Euclid::MathUtils::InterpolationType::CUBIC_SPLINE
;
60
break
;
61
case
InterpolationType::BILINEAR
:
62
m_interpolation_type
=
Euclid::MathUtils::InterpolationType::LINEAR
;
63
break
;
64
}
65
66
// Generate y coordinates on the original image
67
std::vector<double>
y_coords(image->getHeight());
68
for
(
size_t
i = 0; i < y_coords.size(); ++i) {
69
y_coords[i] =
std::floor
((i + 0.5) * m_hscale);
70
}
71
72
// Generate x coordinates on the original image
73
m_x_coords
.
resize
(image->getWidth());
74
for
(
size_t
i = 0; i <
m_x_coords
.
size
(); ++i) {
75
m_x_coords
[i] =
std::floor
((i + 0.5) *
m_wscale
);
76
}
77
78
// Store interpolation along columns
79
m_interpolated_cols
.
reserve
(image->getWidth());
80
for
(
int
x
= 0;
x
< image->getWidth(); ++
x
) {
81
std::vector<double>
values(image->getHeight());
82
for
(
int
y
= 0;
y
< image->getHeight(); ++
y
) {
83
values[
y
] = image->getValue(
x
,
y
);
84
}
85
m_interpolated_cols
.
emplace_back
(
86
Euclid::MathUtils::interpolate
(y_coords, values,
m_interpolation_type
,
true
));
87
}
88
}
89
93
virtual
~ScaledImageSource
() =
default
;
94
98
std::string
getRepr
() const final {
99
return
std::string
(
"ScaledImageSource"
);
100
}
101
115
std::shared_ptr<ImageTile>
getImageTile
(
int
x
,
int
y
,
int
width
,
int
height
)
const
final
{
116
auto
tile =
ImageTile::create
(
ImageTile::getTypeValue
(T()),
x
,
y
,
width
,
height
);
117
118
for
(
int
off_y = 0; off_y <
height
; ++off_y) {
119
std::vector<double>
v(
m_x_coords
);
120
for
(
size_t
ix = 0; ix <
m_x_coords
.
size
(); ++ix) {
121
auto
& fy = *
m_interpolated_cols
[ix];
122
v[ix] = fy(
y
+ off_y);
123
}
124
auto
fx =
Euclid::MathUtils::interpolate
(
m_x_coords
, v,
m_interpolation_type
,
true
);
125
for
(
int
off_x = 0; off_x <
width
; ++off_x) {
126
tile->setValue(
x
+ off_x,
y
+ off_y, T((*fx)(
x
+ off_x)));
127
}
128
}
129
return
tile;
130
}
131
135
void
saveTile
(
ImageTile
&) final {
136
assert(
false
);
137
}
138
142
int
getWidth
() const final {
143
return
m_width
;
144
}
145
149
int
getHeight
() const final {
150
return
m_height
;
151
}
152
153
ImageTile::ImageType
getType
()
const override
{
154
return
ImageTile::getTypeValue
(T());
155
}
156
157
private
:
158
std::shared_ptr<Image<T>
>
m_image
;
159
int
m_width
,
m_height
;
160
Euclid::MathUtils::InterpolationType
m_interpolation_type
;
161
std::vector<std::unique_ptr<Euclid::MathUtils::Function>
>
m_interpolated_cols
;
162
std::vector<double>
m_x_coords
;
163
double
m_wscale
,
m_hscale
;
164
};
165
166
}
// end of namespace SourceXtractor
167
168
#endif // _SEFRAMEWORK_IMAGE_SCALEDIMAGESOURCE_H
SourceXtractor::ScaledImageSource::m_image
std::shared_ptr< Image< T > > m_image
Definition:
ScaledImageSource.h:158
std::shared_ptr
ImageSource.h
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:115
std::ceil
T ceil(T...args)
x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
Definition:
MoffatModelFittingTask.cpp:94
SourceXtractor::ScaledImageSource::getHeight
int getHeight() const final
Definition:
ScaledImageSource.h:149
SourceXtractor::ScaledImageSource::InterpolationType::BILINEAR
SourceXtractor::ScaledImageSource::m_wscale
double m_wscale
Definition:
ScaledImageSource.h:163
SourceXtractor::ScaledImageSource::InterpolationType
InterpolationType
Interpolation type: bilinear or bicubic.
Definition:
ScaledImageSource.h:37
std::floor
T floor(T...args)
interpolation.h
y
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
Definition:
MoffatModelFittingTask.cpp:94
SourceXtractor::ScaledImageSource::getRepr
std::string getRepr() const final
Definition:
ScaledImageSource.h:98
std::vector::resize
T resize(T...args)
std::string
STL class.
SourceXtractor::ImageTile::ImageType
ImageType
Definition:
ImageTile.h:37
SourceXtractor::ScaledImageSource::getWidth
int getWidth() const final
Definition:
ScaledImageSource.h:142
SourceXtractor::ScaledImageSource::m_x_coords
std::vector< double > m_x_coords
Definition:
ScaledImageSource.h:162
SourceXtractor::ScaledImageSource::m_hscale
double m_hscale
Definition:
ScaledImageSource.h:163
SourceXtractor::ScaledImageSource
Definition:
ScaledImageSource.h:34
SourceXtractor::ImageTile
Definition:
ImageTile.h:34
SourceXtractor::ScaledImageSource::InterpolationType::BICUBIC
Euclid::MathUtils::InterpolationType::LINEAR
SourceXtractor::ScaledImageSource::m_interpolation_type
Euclid::MathUtils::InterpolationType m_interpolation_type
Definition:
ScaledImageSource.h:160
SourceXtractor::ImageSource
Definition:
ImageSource.h:52
std::vector::size
T size(T...args)
std::vector< double >
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:96
ModelFitting::height
height
Definition:
CompactModelBase.icpp:19
SourceXtractor::Image
Interface representing an image.
Definition:
Image.h:43
SourceXtractor::ScaledImageSource::ScaledImageSource
ScaledImageSource(const std::shared_ptr< Image< T >> &image, int width, int height, InterpolationType interp_type=InterpolationType::BICUBIC)
Definition:
ScaledImageSource.h:52
Euclid::MathUtils::InterpolationType
InterpolationType
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)
ModelFitting::width
width
Definition:
CompactModelBase.icpp:19
Euclid::MathUtils::InterpolationType::CUBIC_SPLINE
SourceXtractor::ScaledImageSource::saveTile
void saveTile(ImageTile &) final
Definition:
ScaledImageSource.h:135
SourceXtractor::ScaledImageSource::m_height
int m_height
Definition:
ScaledImageSource.h:159
SourceXtractor::ImageTile::getTypeValue
static ImageType getTypeValue(float)
Definition:
ImageTile.h:109
SourceXtractor::ScaledImageSource::m_width
int m_width
Definition:
ScaledImageSource.h:159
SourceXtractor::ScaledImageSource::m_interpolated_cols
std::vector< std::unique_ptr< Euclid::MathUtils::Function > > m_interpolated_cols
Definition:
ScaledImageSource.h:161
SourceXtractor::ScaledImageSource::getType
ImageTile::ImageType getType() const override
Definition:
ScaledImageSource.h:153
std::vector::reserve
T reserve(T...args)
std::vector::emplace_back
T emplace_back(T...args)
Generated by
1.8.5