30 #ifndef LSST_AFW_IMAGE_IMAGEBASE_H 31 #define LSST_AFW_IMAGE_IMAGEBASE_H 52 struct ImageWriteOptions;
65 template <
typename ImageT>
77 operator bool()
const {
return _check; }
84 template <
typename PixelT>
86 typedef typename boost::gil::channel_traits<PixelT>::reference
type;
89 template <
typename PixelT>
91 typedef typename boost::gil::channel_traits<PixelT>::const_reference
type;
101 template <
typename PixelT>
104 typedef typename lsst::afw::image::detail::types_traits<PixelT>::view_t _view_t;
105 typedef typename lsst::afw::image::detail::types_traits<PixelT>::const_view_t _const_view_t;
107 typedef ndarray::Manager Manager;
149 typedef typename ndarray::Array<PixelT, 2, 1>
Array;
151 typedef typename ndarray::Array<PixelT const, 2, 1>
ConstArray;
153 template <
typename OtherPixelT>
157 template <
typename SinglePixelT>
159 return SinglePixel(rhs);
167 template <
typename,
typename,
typename>
209 const bool deep =
false);
216 template <
typename OtherPixelT>
220 "Only deep copies are permitted for ImageBases with different pixel types");
224 copy_and_convert_pixels(rhs._gilView, tmp._gilView);
239 explicit ImageBase(Array
const& array,
bool deep =
false,
260 [[deprecated(
"Use `assign` instead. To be removed after 20.0.0.")]]
281 PixelReference operator()(
int x,
int y);
283 PixelReference operator()(
int x,
int y,
CheckIndices const&);
285 PixelConstReference operator()(
int x,
int y)
const;
287 PixelConstReference operator()(
int x,
int y,
CheckIndices const&)
const;
294 [[deprecated(
"Use `operator[Point2I(x, y)]` instead. To be removed after 20.0.0.")]]
297 return operator()(x - getX0(), y - getY0());
300 [deprecated(
"No replacement; `operator[Point2I(x, y)]` provides unchecked lookup. To be " 301 "removed after 20.0.0.")]]
304 return operator()(x - getX0(), y - getY0(), check);
306 [[deprecated(
"Use `operator[Point2I(x, y)]` instead. To be removed after 20.0.0.")]]
309 operator()(x - getX0(), y - getY0()) = v;
312 [deprecated(
"No replacement; `operator[Point2I(x, y)]` provides unchecked lookup. To be " 313 "removed after 20.0.0.")]]
316 operator()(x - getX0(), y - getY0(), check) = v;
343 int getX0()
const {
return _origin.getX(); }
351 int getY0()
const {
return _origin.getY(); }
371 double const fullIndex = pos -
PixelZeroPos - (xy ==
X ? getX0() : getY0());
372 int const roundedIndex =
static_cast<int>(fullIndex + 0.5);
373 double const residual = fullIndex - roundedIndex;
398 ConstArray getArray()
const;
407 iterator begin()
const;
409 iterator
end()
const;
411 reverse_iterator rbegin()
const;
413 reverse_iterator rend()
const;
415 iterator at(
int x,
int y)
const;
424 fast_iterator begin(
bool contiguous)
const;
432 fast_iterator
end(
bool contiguous)
const;
438 x_iterator
row_begin(
int y)
const {
return _gilView.row_begin(y); }
441 x_iterator
row_end(
int y)
const {
return _gilView.row_end(y); }
444 x_iterator
x_at(
int x,
int y)
const {
return _gilView.x_at(x, y); }
450 y_iterator
col_begin(
int x)
const {
return _gilView.col_begin(x); }
453 y_iterator
col_end(
int x)
const {
return _gilView.col_end(x); }
456 y_iterator
y_at(
int x,
int y)
const {
return _gilView.y_at(x, y); }
462 xy_locator
xy_at(
int x,
int y)
const {
return xy_locator(_gilView.xy_at(x, y)); }
491 Manager::Ptr _manager;
500 const _view_t& view);
504 inline bool isContiguous()
const {
return begin() + getWidth() * getHeight() ==
end(); }
507 template <
typename PixelT>
512 template <
typename PixelT>
514 int rowStride =
reinterpret_cast<PixelT*
>(row_begin(1)) - reinterpret_cast<PixelT*>(row_begin(0));
515 return ndarray::external(reinterpret_cast<PixelT*>(row_begin(0)),
516 ndarray::makeVector(getHeight(), getWidth()), ndarray::makeVector(rowStride, 1),
520 template <
typename PixelT>
522 int rowStride =
reinterpret_cast<PixelT*
>(row_begin(1)) - reinterpret_cast<PixelT*>(row_begin(0));
523 return ndarray::external(reinterpret_cast<PixelT*>(row_begin(0)),
524 ndarray::makeVector(getHeight(), getWidth()), ndarray::makeVector(rowStride, 1),
bool isContiguous() const
boost::gil::channel_traits< PixelT >::reference type
reference type
_const_view_t::reverse_iterator const_reverse_iterator
An STL compliant const reverse iterator.
x_iterator fast_iterator
A fast STL compliant iterator for contiguous images N.b.
ConstReference< PixelT >::type PixelConstReference
A ConstReference to a PixelT.
_view_t::reverse_iterator reverse_iterator
An STL compliant reverse iterator.
std::pair< int, double > positionToIndex(double const pos, lsst::afw::image::xOrY const xy) const
Convert image position to index (nearest integer and fractional parts)
_view_t::x_iterator xy_x_iterator
An iterator for traversing the pixels in a row, created from an xy_locator.
void swap(ImageBase< PixelT > &a, ImageBase< PixelT > &b)
detail::basic_tag image_category
trait class to identify type of image
instead To be removed after PixelConstReference get0(int x, int y) const
int getHeight() const
Return the number of rows in the image.
provides unchecked lookup To be removed after PixelConstReference get0(int x, int y, CheckIndices const &check) const
_const_view_t::x_iterator const_x_iterator
A const iterator for traversing the pixels in a row.
PixelT Pixel
A pixel in this ImageBase.
_view_t::x_iterator x_iterator
An iterator for traversing the pixels in a row.
void setXY0(lsst::geom::Point2I const origin)
Set the ImageBase's origin.
int getX0() const
Return the image's column-origin.
The base class for all image classed (Image, Mask, MaskedImage, ...)
x_iterator row_begin(int y) const
Return an x_iterator to the start of the y'th row.
_const_view_t::iterator const_iterator
An STL compliant const iterator.
_view_t::iterator iterator
An STL compliant iterator.
y_iterator y_at(int x, int y) const
Return an y_iterator to the point (x, y) in the image.
afw::table::PointKey< int > dimensions
y_iterator col_begin(int x) const
Return an y_iterator to the start of the y'th row.
A base class for image defects.
lsst::geom::Box2I getBBox(ImageOrigin origin=PARENT) const
std::shared_ptr< RecordT > src
PixelReference operator[](lsst::geom::Point2I const &index)
Return a reference to a single pixel in PARENT coordinates (with no bounds check).
A class to manipulate images, masks, and variance as a single object.
_view_t::y_iterator y_iterator
An iterator for traversing the pixels in a column.
traits class for image categories
A class used to request that array accesses be checked.
y_iterator col_end(int x) const
Return an y_iterator to the start of the y'th row.
instead To be removed after void set0(int x, int y, const PixelT v)
PixelConstReference operator[](lsst::geom::Point2I const &index) const
Return a reference to a single pixel in PARENT coordinates (with no bounds check).
ndarray::Array< PixelT const, 2, 1 > ConstArray
An immutable ndarray representation of the image.
void setXY0(int const x0, int const y0)
Set the ImageBase's origin.
_view_t::xy_locator::const_t const_xy_locator
A const_xy_locator.
lsst::geom::Point2I getXY0() const
Return the image's origin.
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Extent< int, 2 > Extent2I
provides unchecked lookup To be removed after void set0(int x, int y, const PixelT v, CheckIndices const &check)
int getY0() const
Return the image's row-origin.
_const_view_t::y_iterator const_y_iterator
A const iterator for traversing the pixels in a column.
int getWidth() const
Return the number of columns in the image.
Reference< PixelT >::type PixelReference
A Reference to a PixelT.
static SinglePixel PixelCast(SinglePixelT rhs)
Convert a type to our SinglePixel type.
Reports invalid arguments.
x_iterator row_end(int y) const
Return an x_iterator to the end of the y'th row.
x_iterator x_at(int x, int y) const
Return an x_iterator to the point (x, y) in the image.
ImageT::image_category image_category
lsst::geom::Extent2I getDimensions() const
Return the image's size; useful for passing to constructors.
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects...
_view_t _getRawView() const
const double PixelZeroPos
position of center of pixel 0
_view_t::xy_locator xy_locator
An xy_locator.
ImageBase(const ImageBase< OtherPixelT > &rhs, const bool deep)
generalised copy constructor
ndarray::Array< PixelT, 2, 1 > Array
A mutable ndarray representation of the image.
xy_locator xy_at(int x, int y) const
Return an xy_locator at the point (x, y) in the image.
An integer coordinate rectangle.
PixelT SinglePixel
A single Pixel of the same type as those in the ImageBase.
CheckIndices(bool check=true)
double indexToPosition(double ind, lsst::afw::image::xOrY const xy) const
Convert image index to image position.
std::string const wcsNameForXY0
boost::gil::channel_traits< PixelT >::const_reference type
const reference type
A container for an Image and its associated metadata.
metafunction to extract reference type from PixelT
_view_t::y_iterator xy_y_iterator
An iterator for traversing the pixels in a row, created from an xy_locator.
metafunction to extract const reference type from PixelT