39 namespace ex = pex::exceptions;
63 bool const haveDefault = !
std::isnan(defaultValue);
70 }
else if (haveDefault) {
80 template <
typename ImageT>
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.");
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) {
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.") %
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); \
#define LSST_makeBackground_getApproximate_types
#define LSST_makeBackground_getImage_types
#define LSST_EXCEPT_ADD(e, m)
Add the current location and a message to an existing exception before rethrowing it.
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
y_iterator col_begin(int x) const
Return an y_iterator to the start of the y'th row.
y_iterator col_end(int x) const
Return an y_iterator to the start of the y'th row.
A class to represent a 2-dimensional array of pixels.
int getHeight() const
Return the number of rows in the image.
int getWidth() const
Return the number of columns in the image.
VariancePtr getVariance() const
Return a (shared_ptr to) the MaskedImage's variance.
ImagePtr getImage() const
Return a (shared_ptr to) the MaskedImage's image.
Pass parameters to a Background object.
std::shared_ptr< StatisticsControl > getStatisticsControl()
Property getStatisticsProperty() const
A virtual base class to evaluate image background levels.
std::vector< double > _ycen
y center ...
std::vector< double > _xcen
x center pix coords of sub images
std::vector< int > _xsize
x size of sub images
lsst::geom::Box2I _imgBBox
size and origin of input image
std::vector< int > _xorig
x origin pix coords of sub images
UndersampleStyle _asUsedUndersampleStyle
the undersampleStyle we actually used
std::vector< int > _ysize
y size ...
float InternalPixelT
type used for any internal images, and returned by getApproximate
std::vector< int > _yorig
y origin ...
Interpolate::Style _asUsedInterpStyle
the style we actually used
std::shared_ptr< BackgroundControl > _bctrl
control info set by user.
A class to evaluate image background levels.
BackgroundMI & operator-=(float const delta) override
Subtract a scalar from the Background (equivalent to subtracting a constant from the original image)
BackgroundMI & operator+=(float const delta) override
Add a scalar to the Background (equivalent to adding a constant to the original image)
BackgroundMI(ImageT const &img, BackgroundControl const &bgCtrl)
Constructor for BackgroundMI.
Value getResult(Property const prop=NOTHING) const
Return the value and error in the specified statistic (e.g.
An integer coordinate rectangle.
int getMinY() const noexcept
int getHeight() const noexcept
Point2I const getMin() const noexcept
int getMinX() const noexcept
int getWidth() const noexcept
int getMaxX() const noexcept
bool contains(Point2I const &point) const noexcept
Return true if the box contains the point.
int getMaxY() const noexcept
Extent2I const getDimensions() const noexcept
Provides consistent interface for LSST exceptions.
Reports invalid arguments.
Reports attempts to exceed implementation-defined length limits for some classes.
Reports attempts to access elements outside a valid range of indices.
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
Interpolate::Style lookupMaxInterpStyle(int const n)
Get the highest order Interpolation::Style available for 'n' points.
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)
@ ERRORS
Include errors of requested quantities.
int lookupMinInterpPoints(Interpolate::Style const style)
Get the minimum number of points needed to use the requested interpolation style.
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.
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.
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
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
A base class for image defects.