LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
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:229
lsst::geom::Point2I getCtr() const
Return index of kernel's center.
Definition: Kernel.h:234
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:173
int getWidth() const
Return the Kernel's width.
Definition: Kernel.h:224

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 (double kValY : _maskYList) {
146  typename DestImageT::Mask::SinglePixel destMaskValueY = 0;
147  for (k_iter kernelXIter = _maskXList.begin(), xEnd = _maskXList.end();
148  kernelXIter != xEnd; ++kernelXIter, ++srcMaskLoc.x()) {
149  typename lsst::afw::math::Kernel::Pixel const kValX = *kernelXIter;
150  if (kValX != 0) {
151  destMaskValueY |= *srcMaskLoc;
152  }
153  }
154 
155  if (kValY != 0) {
156  destMaskValue |= destMaskValueY;
157  }
158 
159  srcMaskLoc += lsst::afw::image::detail::difference_type(-_maskXList.size(), 1);
160  }
161 
162  destXIter.mask() = (destXIter.mask() & _growFullMask) | destMaskValue;
163  }
164  return true;
165  } else {
166  // Edge pixel
167  *destXIter = _padValue;
168  return false;
169  }
170  }
T begin(T... args)
T end(T... args)
T size(T... args)

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