LSST Applications  21.0.0+04719a4bac,21.0.0-1-ga51b5d4+f5e6047307,21.0.0-11-g2b59f77+a9c1acf22d,21.0.0-11-ga42c5b2+86977b0b17,21.0.0-12-gf4ce030+76814010d2,21.0.0-13-g1721dae+760e7a6536,21.0.0-13-g3a573fe+768d78a30a,21.0.0-15-g5a7caf0+f21cbc5713,21.0.0-16-g0fb55c1+b60e2d390c,21.0.0-19-g4cded4ca+71a93a33c0,21.0.0-2-g103fe59+bb20972958,21.0.0-2-g45278ab+04719a4bac,21.0.0-2-g5242d73+3ad5d60fb1,21.0.0-2-g7f82c8f+8babb168e8,21.0.0-2-g8f08a60+06509c8b61,21.0.0-2-g8faa9b5+616205b9df,21.0.0-2-ga326454+8babb168e8,21.0.0-2-gde069b7+5e4aea9c2f,21.0.0-2-gecfae73+1d3a86e577,21.0.0-2-gfc62afb+3ad5d60fb1,21.0.0-25-g1d57be3cd+e73869a214,21.0.0-3-g357aad2+ed88757d29,21.0.0-3-g4a4ce7f+3ad5d60fb1,21.0.0-3-g4be5c26+3ad5d60fb1,21.0.0-3-g65f322c+e0b24896a3,21.0.0-3-g7d9da8d+616205b9df,21.0.0-3-ge02ed75+a9c1acf22d,21.0.0-4-g591bb35+a9c1acf22d,21.0.0-4-g65b4814+b60e2d390c,21.0.0-4-gccdca77+0de219a2bc,21.0.0-4-ge8a399c+6c55c39e83,21.0.0-5-gd00fb1e+05fce91b99,21.0.0-6-gc675373+3ad5d60fb1,21.0.0-64-g1122c245+4fb2b8f86e,21.0.0-7-g04766d7+cd19d05db2,21.0.0-7-gdf92d54+04719a4bac,21.0.0-8-g5674e7b+d1bd76f71f,master-gac4afde19b+a9c1acf22d,w.2021.13
LSST Data Management Base Package
Public Member Functions | List of all members
lsst::afw::math::detail::WarpAtOnePoint< DestImageT, SrcImageT > Class Template Referencefinal

A functor that computes one warped pixel. More...

#include <WarpAtOnePoint.h>

Public Member Functions

 WarpAtOnePoint (SrcImageT const &srcImage, WarpingControl const &control, typename DestImageT::SinglePixel padValue)
 
bool operator() (typename DestImageT::x_iterator &destXIter, lsst::geom::Point2D const &srcPos, double relativeArea, lsst::afw::image::detail::Image_tag)
 Compute one warped pixel, Image specialization. More...
 
bool operator() (typename DestImageT::x_iterator &destXIter, lsst::geom::Point2D const &srcPos, double relativeArea, lsst::afw::image::detail::MaskedImage_tag)
 Compute one warped pixel, MaskedImage specialization. More...
 

Detailed Description

template<typename DestImageT, typename SrcImageT>
class lsst::afw::math::detail::WarpAtOnePoint< DestImageT, SrcImageT >

A functor that computes one warped pixel.

Definition at line 40 of file WarpAtOnePoint.h.

Constructor & Destructor Documentation

◆ WarpAtOnePoint()

template<typename DestImageT , typename SrcImageT >
lsst::afw::math::detail::WarpAtOnePoint< DestImageT, SrcImageT >::WarpAtOnePoint ( SrcImageT const &  srcImage,
WarpingControl const &  control,
typename DestImageT::SinglePixel  padValue 
)
inline

Definition at line 42 of file WarpAtOnePoint.h.

44  : _srcImage(srcImage),
45  _kernelPtr(control.getWarpingKernel()),
46  _maskKernelPtr(control.getMaskWarpingKernel()),
47  _hasMaskKernel(control.getMaskWarpingKernel()),
48  _kernelCtr(_kernelPtr->getCtr()),
49  _maskKernelCtr(_maskKernelPtr ? _maskKernelPtr->getCtr() : lsst::geom::Point2I(0, 0)),
50  _growFullMask(control.getGrowFullMask()),
51  _xList(_kernelPtr->getWidth()),
52  _yList(_kernelPtr->getHeight()),
53  _maskXList(_maskKernelPtr ? _maskKernelPtr->getWidth() : 0),
54  _maskYList(_maskKernelPtr ? _maskKernelPtr->getHeight() : 0),
55  _padValue(padValue),
56  _srcGoodBBox(_kernelPtr->shrinkBBox(srcImage.getBBox(lsst::afw::image::LOCAL))){};
int getHeight() const
Return the Kernel's height.
Definition: Kernel.h:230
lsst::geom::Point2I getCtr() const
Return index of kernel's center.
Definition: Kernel.h:235
lsst::geom::Box2I shrinkBBox(lsst::geom::Box2I const &bbox) const
Given a bounding box for an image one wishes to convolve with this kernel, return the bounding box fo...
Definition: Kernel.cc:183
int getWidth() const
Return the Kernel's width.
Definition: Kernel.h:225

Member Function Documentation

◆ operator()() [1/2]

template<typename DestImageT , typename SrcImageT >
bool lsst::afw::math::detail::WarpAtOnePoint< DestImageT, SrcImageT >::operator() ( typename DestImageT::x_iterator &  destXIter,
lsst::geom::Point2D const &  srcPos,
double  relativeArea,
lsst::afw::image::detail::Image_tag   
)
inline

Compute one warped pixel, Image specialization.

The Image specialization ignores the mask warping kernel, even if present

Definition at line 63 of file WarpAtOnePoint.h.

64  {
65  // Compute associated source pixel index as integer and nonnegative fractional parts;
66  // the latter is used to compute the remapping kernel.
67  std::pair<int, double> srcIndFracX = _srcImage.positionToIndex(srcPos[0], lsst::afw::image::X);
68  std::pair<int, double> srcIndFracY = _srcImage.positionToIndex(srcPos[1], lsst::afw::image::Y);
69  if (srcIndFracX.second < 0) {
70  ++srcIndFracX.second;
71  --srcIndFracX.first;
72  }
73  if (srcIndFracY.second < 0) {
74  ++srcIndFracY.second;
75  --srcIndFracY.first;
76  }
77 
78  if (_srcGoodBBox.contains(lsst::geom::Point2I(srcIndFracX.first, srcIndFracY.first))) {
79  // Offset source pixel index from kernel center to kernel corner (0, 0)
80  // so we can convolveAtAPoint the pixels that overlap between source and kernel
81  int srcStartX = srcIndFracX.first - _kernelCtr[0];
82  int srcStartY = srcIndFracY.first - _kernelCtr[1];
83 
84  // Compute warped pixel
85  double kSum = _setFracIndex(srcIndFracX.second, srcIndFracY.second);
86 
87  typename SrcImageT::const_xy_locator srcLoc = _srcImage.xy_at(srcStartX, srcStartY);
88 
89  *destXIter = lsst::afw::math::convolveAtAPoint<DestImageT, SrcImageT>(srcLoc, _xList, _yList);
90  *destXIter *= relativeArea / kSum;
91  return true;
92  } else {
93  // Edge pixel
94  *destXIter = _padValue;
95  return false;
96  }
97  }
bool contains(Point2I const &point) const noexcept
Return true if the box contains the point.
Definition: Box.cc:114

◆ operator()() [2/2]

template<typename DestImageT , typename SrcImageT >
bool lsst::afw::math::detail::WarpAtOnePoint< DestImageT, SrcImageT >::operator() ( typename DestImageT::x_iterator &  destXIter,
lsst::geom::Point2D const &  srcPos,
double  relativeArea,
lsst::afw::image::detail::MaskedImage_tag   
)
inline

Compute one warped pixel, MaskedImage specialization.

The MaskedImage specialization uses the mask warping kernel, if present, to compute the mask plane; otherwise it uses the normal kernel to compute the mask plane.

Definition at line 105 of file WarpAtOnePoint.h.

106  {
107  // Compute associated source pixel index as integer and nonnegative fractional parts;
108  // the latter is used to compute the remapping kernel.
109  std::pair<int, double> srcIndFracX = _srcImage.positionToIndex(srcPos[0], lsst::afw::image::X);
110  std::pair<int, double> srcIndFracY = _srcImage.positionToIndex(srcPos[1], lsst::afw::image::Y);
111  if (srcIndFracX.second < 0) {
112  ++srcIndFracX.second;
113  --srcIndFracX.first;
114  }
115  if (srcIndFracY.second < 0) {
116  ++srcIndFracY.second;
117  --srcIndFracY.first;
118  }
119 
120  if (_srcGoodBBox.contains(lsst::geom::Point2I(srcIndFracX.first, srcIndFracY.first))) {
121  // Offset source pixel index from kernel center to kernel corner (0, 0)
122  // so we can convolveAtAPoint the pixels that overlap between source and kernel
123  int srcStartX = srcIndFracX.first - _kernelCtr[0];
124  int srcStartY = srcIndFracY.first - _kernelCtr[1];
125 
126  // Compute warped pixel
127  double kSum = _setFracIndex(srcIndFracX.second, srcIndFracY.second);
128 
129  typename SrcImageT::const_xy_locator srcLoc = _srcImage.xy_at(srcStartX, srcStartY);
130 
131  *destXIter = lsst::afw::math::convolveAtAPoint<DestImageT, SrcImageT>(srcLoc, _xList, _yList);
132  *destXIter *= relativeArea / kSum;
133 
134  if (_hasMaskKernel) {
135  // compute mask value based on the mask kernel (replacing the value computed above)
136  int maskStartX = srcIndFracX.first - _maskKernelCtr[0];
137  int maskStartY = srcIndFracY.first - _maskKernelCtr[1];
138 
139  typename SrcImageT::Mask::const_xy_locator srcMaskLoc =
140  _srcImage.getMask()->xy_at(maskStartX, maskStartY);
141 
143 
144  typename DestImageT::Mask::SinglePixel destMaskValue = 0;
145  for (k_iter kernelYIter = _maskYList.begin(), yEnd = _maskYList.end(); kernelYIter != yEnd;
146  ++kernelYIter) {
147  typename DestImageT::Mask::SinglePixel destMaskValueY = 0;
148  for (k_iter kernelXIter = _maskXList.begin(), xEnd = _maskXList.end();
149  kernelXIter != xEnd; ++kernelXIter, ++srcMaskLoc.x()) {
150  typename lsst::afw::math::Kernel::Pixel const kValX = *kernelXIter;
151  if (kValX != 0) {
152  destMaskValueY |= *srcMaskLoc;
153  }
154  }
155 
156  double const kValY = *kernelYIter;
157  if (kValY != 0) {
158  destMaskValue |= destMaskValueY;
159  }
160 
161  srcMaskLoc += lsst::afw::image::detail::difference_type(-_maskXList.size(), 1);
162  }
163 
164  destXIter.mask() = (destXIter.mask() & _growFullMask) | destMaskValue;
165  }
166  return true;
167  } else {
168  // Edge pixel
169  *destXIter = _padValue;
170  return false;
171  }
172  }
T begin(T... args)
T end(T... args)
T size(T... args)

The documentation for this class was generated from the following file: