LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
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: