lsst.afw
21.0.0-11-ga6ea59e8e+47cba9fc36
|
Go to the documentation of this file.
39 namespace ex = pex::exceptions;
63 bool const haveDefault = !
std::isnan(defaultValue);
70 }
else if (haveDefault) {
80 template <
typename ImageT>
82 :
Background(img, bgCtrl), _statsImage(
image::MaskedImage<InternalPixelT>()) {
93 for (
int iX = 0; iX < nxSample; ++iX) {
94 for (
int iY = 0; iY < nySample; ++iY) {
95 ImageT subimg = ImageT(img,
103 im(iX, iY) = res.first;
104 var(iX, iY) = res.second;
110 :
Background(imageBBox, statsImage.getWidth(), statsImage.getHeight()), _statsImage(statsImage) {}
118 _gridColumns[iX].
resize(height);
128 cullNan(
_ycen, _grid, ycenTmp, gridTmp);
134 switch (undersampleStyle) {
139 if (gridTmp.
empty()) {
152 e,
"The BackgroundControl UndersampleStyle INCREASE_NXNYSAMPLE is not supported.");
156 "UndersampleStyle %d is not defined.") %
165 for (
int iY = 0; iY < height; ++iY) {
166 _gridColumns[iX][iY] = intobj->interpolate(ypix[iY]);
171 _statsImage += delta;
176 _statsImage -= delta;
180 template <
typename PixelT>
189 str(boost::format(
"BBox (%d:%d,%d:%d) out of range (%d:%d,%d:%d)") %
bbox.getMinX() %
193 int const nxSample = _statsImage.
getWidth();
194 int const nySample = _statsImage.
getHeight();
213 switch (undersampleStyle) {
215 if (isXundersampled && isYundersampled) {
218 "nxSample and nySample have too few points for requested interpolation style.");
219 }
else if (isXundersampled) {
221 "nxSample has too few points for requested interpolation style.");
222 }
else if (isYundersampled) {
224 "nySample has too few points for requested interpolation style.");
228 if (isXundersampled || isYundersampled) {
231 interpStyle = (nxSample < nySample) ? xStyle : yStyle;
236 if (isXundersampled || isYundersampled) {
239 "The BackgroundControl UndersampleStyle INCREASE_NXNYSAMPLE is not supported.");
244 str(boost::format(
"The selected BackgroundControl "
245 "UndersampleStyle %d is not defined.") %
263 for (
int iY = 0; iY < height; ++iY) {
267 _gridColumns.
resize(width);
268 for (
int iX = 0; iX < nxSample; ++iX) {
269 _setGridColumns(interpStyle, undersampleStyle, iX, ypix);
288 for (
int y = 0, iY = bboxOff.getY();
y <
bbox.getHeight(); ++
y, ++iY) {
291 for (
int iX = 0; iX < nxSample; iX++) {
292 bg_x[iX] =
static_cast<double>(_gridColumns[iX][iY]);
294 cullNan(
_xcen, bg_x, xcenTmp, bgTmp, defaultValue);
299 }
catch (pex::exceptions::OutOfRangeError& e) {
300 switch (undersampleStyle) {
302 LSST_EXCEPT_ADD(e, str(boost::format(
"Interpolating in y (iY = %d)") % iY));
306 xcenTmp.push_back(0);
307 bgTmp.push_back(defaultValue);
318 "The BackgroundControl UndersampleStyle INCREASE_NXNYSAMPLE is not supported.");
322 "UndersampleStyle %d is not defined.") %
327 LSST_EXCEPT_ADD(e, str(boost::format(
"Interpolating in y (iY = %d)") % iY));
332 for (
int iX = bboxOff.getX(),
x = 0;
x <
bbox.getWidth(); ++iX, ++
x) {
333 (*bg)(
x,
y) =
static_cast<PixelT
>(intobj->interpolate(iX));
336 bg->setXY0(
bbox.getMin());
341 template <
typename PixelT>
343 ApproximateControl
const& actrl,
355 #define CREATE_BACKGROUND(m, v, TYPE) \
356 template BackgroundMI::BackgroundMI(image::Image<TYPE> const& img, BackgroundControl const& bgCtrl); \
357 template BackgroundMI::BackgroundMI(image::MaskedImage<TYPE> const& img, \
358 BackgroundControl const& bgCtrl); \
359 std::shared_ptr<image::Image<TYPE>> BackgroundMI::_getImage( \
360 lsst::geom::Box2I const& bbox, \
361 Interpolate::Style const interpStyle, \
362 UndersampleStyle const undersampleStyle, \
365 return BackgroundMI::doGetImage<TYPE>(bbox, interpStyle, undersampleStyle); \
368 #define CREATE_getApproximate(m, v, TYPE) \
369 std::shared_ptr<Approximate<TYPE>> BackgroundMI::_getApproximate( \
370 ApproximateControl const& actrl, \
371 UndersampleStyle const undersampleStyle, \
374 return BackgroundMI::doGetApproximate<TYPE>(actrl, undersampleStyle); \
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
y_iterator col_begin(int x) const
Return an y_iterator to the start of the y'th row.
std::shared_ptr< Interpolate > makeInterpolate(std::vector< double > const &x, std::vector< double > const &y, Interpolate::Style const style=Interpolate::AKIMA_SPLINE)
A factory function to make Interpolate objects.
BackgroundMI(ImageT const &img, BackgroundControl const &bgCtrl)
Constructor for BackgroundMI.
std::vector< int > _ysize
y size ...
int getHeight() const noexcept
std::shared_ptr< Approximate< PixelT > > makeApproximate(std::vector< double > const &x, std::vector< double > const &y, image::MaskedImage< PixelT > const &im, lsst::geom::Box2I const &bbox, ApproximateControl const &ctrl)
Construct a new Approximate object, inferring the type from the type of the given MaskedImage.
Extent2I const getDimensions() const noexcept
#define LSST_EXCEPT_ADD(e, m)
Point2I const getMin() const noexcept
A class to evaluate image background levels.
int getWidth() const
Return the number of columns in the image.
std::shared_ptr< StatisticsControl > getStatisticsControl()
int getHeight() const
Return the number of rows in the image.
#define LSST_makeBackground_getImage_types
std::vector< int > _yorig
y origin ...
Statistics makeStatistics(lsst::afw::image::Image< Pixel > const &img, lsst::afw::image::Mask< image::MaskPixel > const &msk, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Handle a watered-down front-end to the constructor (no variance)
Value getResult(Property const prop=NOTHING) const
Return the value and error in the specified statistic (e.g.
int getWidth() const noexcept
A virtual base class to evaluate image background levels.
std::vector< double > _xcen
x center pix coords of sub images
std::shared_ptr< BackgroundControl > _bctrl
control info set by user.
UndersampleStyle _asUsedUndersampleStyle
the undersampleStyle we actually used
bool contains(Point2I const &point) const noexcept
Pass parameters to a Background object.
std::vector< int > _xsize
x size of sub images
int lookupMinInterpPoints(Interpolate::Style const style)
Get the minimum number of points needed to use the requested interpolation style.
@ ERRORS
Include errors of requested quantities.
BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_COLUMNVIEW_SCALAR, _, BOOST_PP_TUPLE_TO_SEQ(AFW_TABLE_SCALAR_FIELD_TYPE_N, AFW_TABLE_SCALAR_FIELD_TYPE_TUPLE)) BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_COLUMNVIEW_ARRAY
A base class for image defects.
VariancePtr getVariance() const
Return a (shared_ptr to) the MaskedImage's variance.
#define LSST_EXCEPT(type,...)
BackgroundMI & operator+=(float const delta) override
Add a scalar to the Background (equivalent to adding a constant to the original image)
std::vector< int > _xorig
x origin pix coords of sub images
Interpolate::Style lookupMaxInterpStyle(int const n)
Get the highest order Interpolation::Style available for 'n' points.
#define LSST_makeBackground_getApproximate_types
int getMaxY() const noexcept
int getMaxX() const noexcept
Interpolate::Style _asUsedInterpStyle
the style we actually used
lsst::geom::Box2I _imgBBox
size and origin of input image
int getMinX() const noexcept
ImagePtr getImage() const
Return a (shared_ptr to) the MaskedImage's image.
BackgroundMI & operator-=(float const delta) override
Subtract a scalar from the Background (equivalent to subtracting a constant from the original image)
y_iterator col_end(int x) const
Return an y_iterator to the start of the y'th row.
std::vector< double > _ycen
y center ...
int getMinY() const noexcept
Property getStatisticsProperty() const