LSSTApplications  1.1.2+25,10.0+13,10.0+132,10.0+133,10.0+224,10.0+41,10.0+8,10.0-1-g0f53050+14,10.0-1-g4b7b172+19,10.0-1-g61a5bae+98,10.0-1-g7408a83+3,10.0-1-gc1e0f5a+19,10.0-1-gdb4482e+14,10.0-11-g3947115+2,10.0-12-g8719d8b+2,10.0-15-ga3f480f+1,10.0-2-g4f67435,10.0-2-gcb4bc6c+26,10.0-28-gf7f57a9+1,10.0-3-g1bbe32c+14,10.0-3-g5b46d21,10.0-4-g027f45f+5,10.0-4-g86f66b5+2,10.0-4-gc4fccf3+24,10.0-40-g4349866+2,10.0-5-g766159b,10.0-5-gca2295e+25,10.0-6-g462a451+1
LSSTDataManagementBasePackage
warpExposure.h
Go to the documentation of this file.
1 // -*- LSST-C++ -*- // fixed format comment for emacs
2 
3 /*
4  * LSST Data Management System
5  * Copyright 2008, 2009, 2010 LSST Corporation.
6  *
7  * This product includes software developed by the
8  * LSST Project (http://www.lsst.org/).
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the LSST License Statement and
21  * the GNU General Public License along with this program. If not,
22  * see <http://www.lsstcorp.org/LegalNotices/>.
23  */
24 
35 #ifndef LSST_AFW_MATH_WARPEXPOSURE_H
36 #define LSST_AFW_MATH_WARPEXPOSURE_H
37 
38 #include <string>
39 
40 #include "boost/shared_ptr.hpp"
41 
42 #include "lsst/base.h"
43 #include "lsst/pex/exceptions.h"
44 #include "lsst/afw/geom.h"
49 #include "lsst/afw/math/Function.h"
51 #include "lsst/afw/math/Kernel.h"
52 
53 namespace lsst {
54 namespace afw {
55 namespace image {
56  class Wcs;
57 }
58 namespace math {
59 
73  public:
75  int order
76  )
77  :
78  SeparableKernel(2 * order, 2 * order,
80  {}
81 
82  virtual ~LanczosWarpingKernel() {}
83 
84  virtual PTR(Kernel) clone() const;
85 
86  int getOrder() const;
87 
88  protected:
89  virtual void setKernelParameter(unsigned int ind, double value) const;
90  };
91 
102  public:
104  :
105  SeparableKernel(2, 2, BilinearFunction1(0.0), BilinearFunction1(0.0))
106  {}
107 
109 
110  virtual PTR(Kernel) clone() const;
111 
120  public:
122 
127  double fracPos)
128  :
129  Function1<Kernel::Pixel>(1)
130  {
131  this->_params[0] = fracPos;
132  }
133  virtual ~BilinearFunction1() {}
134 
135  virtual Function1Ptr clone() const {
136  return Function1Ptr(new BilinearFunction1(this->_params[0]));
137  }
138 
139  virtual Kernel::Pixel operator() (double x) const;
140 
141  virtual std::string toString(std::string const& ="") const;
142  };
143 
144  protected:
145  virtual void setKernelParameter(unsigned int ind, double value) const;
146  };
147 
158  public:
160  :
162  {}
163 
165 
166  virtual PTR(Kernel) clone() const;
167 
176  public:
178 
183  double fracPos)
184  :
185  Function1<Kernel::Pixel>(1)
186  {
187  this->_params[0] = fracPos;
188  }
189  virtual ~NearestFunction1() {}
190 
191  virtual Function1Ptr clone() const {
192  return Function1Ptr(new NearestFunction1(this->_params[0]));
193  }
194 
195  virtual Kernel::Pixel operator() (double x) const;
196 
197  virtual std::string toString(std::string const& ="") const;
198  };
199 
200  protected:
201  virtual void setKernelParameter(unsigned int ind, double value) const;
202  };
203 
228  PTR(SeparableKernel) makeWarpingKernel(std::string name);
229 
240  public:
253  explicit WarpingControl(
254  std::string const &warpingKernelName,
255  std::string const &maskWarpingKernelName = "",
257  int cacheSize = 0,
262  int interpLength = 0,
266  lsst::afw::image::MaskPixel growFullMask = 0
268  ) :
269  _warpingKernelPtr(makeWarpingKernel(warpingKernelName)),
270  _maskWarpingKernelPtr(),
271  _cacheSize(cacheSize),
272  _interpLength(interpLength),
273  _devicePreference(devicePreference),
274  _growFullMask(growFullMask)
275  {
276  setMaskWarpingKernelName(maskWarpingKernelName);
277  _testDevicePreference(_devicePreference, _warpingKernelPtr);
278  }
279 
283  explicit WarpingControl(
284  SeparableKernel &warpingKernel,
285  int interpLength = 0,
291  ) :
292  _warpingKernelPtr(boost::dynamic_pointer_cast<SeparableKernel>(warpingKernel.clone())),
293  _maskWarpingKernelPtr(),
294  _cacheSize(warpingKernel.getCacheSize()),
295  _interpLength(interpLength),
296  _devicePreference(devicePreference),
297  _growFullMask(lsst::afw::image::Mask<lsst::afw::image::MaskPixel>::getPlaneBitMask("EDGE"))
298  {
299  _testDevicePreference(_devicePreference, _warpingKernelPtr);
300  }
301 
302 
303  virtual ~WarpingControl() {};
304 
308  int getCacheSize() const { return _cacheSize; };
309 
319  int cacheSize
320  ) { _cacheSize = cacheSize; };
321 
325  int getInterpLength() const { return _interpLength; };
326 
336  int interpLength
337  ) { _interpLength = interpLength; };
338 
342  lsst::afw::gpu::DevicePreference getDevicePreference() const { return _devicePreference; };
343 
348  lsst::afw::gpu::DevicePreference devicePreference
349  ) {
350  _testDevicePreference(devicePreference, _warpingKernelPtr);
351  _devicePreference = devicePreference;
352  }
353 
357  PTR(SeparableKernel) getWarpingKernel() const;
358 
362  void setWarpingKernelName(
363  std::string const &warpingKernelName
364  );
365 
371  void setWarpingKernel(
372  SeparableKernel const &warpingKernel
373  );
374 
378  PTR(SeparableKernel) getMaskWarpingKernel() const;
379 
383  bool hasMaskWarpingKernel() const { return static_cast<bool>(_maskWarpingKernelPtr); }
384 
388  void setMaskWarpingKernelName(
389  std::string const &maskWarpingKernelName
391  );
392 
398  void setMaskWarpingKernel(
399  SeparableKernel const &maskWarpingKernel
400  );
401 
405  lsst::afw::image::MaskPixel getGrowFullMask() const { return _growFullMask; };
406 
411  lsst::afw::image::MaskPixel growFullMask
412  ) { _growFullMask = growFullMask; }
413 
414  private:
421  void _testWarpingKernels(
422  SeparableKernel const &warpingKernel,
423  SeparableKernel const &maskWarpingKernel
424  ) const;
425 
431  void _testDevicePreference(
432  lsst::afw::gpu::DevicePreference const &devicePreference,
433  CONST_PTR(SeparableKernel) const &warpingKernelPtr
434  ) const;
435 
436  PTR(SeparableKernel) _warpingKernelPtr;
437  PTR(SeparableKernel) _maskWarpingKernelPtr;
438  int _cacheSize;
439  int _interpLength;
440  lsst::afw::gpu::DevicePreference _devicePreference;
441  lsst::afw::image::MaskPixel _growFullMask;
442  };
443 
444 
450  template<typename DestExposureT, typename SrcExposureT>
451  int warpExposure(
452  DestExposureT &destExposure,
453  SrcExposureT const &srcExposure,
456  WarpingControl const &control,
457  typename DestExposureT::MaskedImageT::SinglePixel padValue =
458  lsst::afw::math::edgePixel<typename DestExposureT::MaskedImageT>(
459  typename lsst::afw::image::detail::image_traits<
460  typename DestExposureT::MaskedImageT>::image_category())
462  );
463 
469  template<typename DestExposureT, typename SrcExposureT>
470  int warpExposure(
471  DestExposureT &destExposure,
472  SrcExposureT const &srcExposure,
475  SeparableKernel &warpingKernel,
476  int const interpLength=0,
477  typename DestExposureT::MaskedImageT::SinglePixel padValue =
478  lsst::afw::math::edgePixel<typename DestExposureT::MaskedImageT>(
479  typename lsst::afw::image::detail::image_traits<typename DestExposureT::MaskedImageT>::image_category()),
481  lsst::afw::gpu::DevicePreference devPref = lsst::afw::gpu::DEFAULT_DEVICE_PREFERENCE
483  );
484 
529  template<typename DestImageT, typename SrcImageT>
530  int warpImage(
531  DestImageT &destImage,
532  lsst::afw::image::Wcs const &destWcs,
533  SrcImageT const &srcImage,
534  lsst::afw::image::Wcs const &srcWcs,
535  WarpingControl const &control,
536  typename DestImageT::SinglePixel padValue = lsst::afw::math::edgePixel<DestImageT>(
537  typename lsst::afw::image::detail::image_traits<DestImageT>::image_category())
539  );
540 
544  template<typename DestImageT, typename SrcImageT>
545  int warpImage(
546  DestImageT &destImage,
547  lsst::afw::image::Wcs const &destWcs,
548  SrcImageT const &srcImage,
549  lsst::afw::image::Wcs const &srcWcs,
550  SeparableKernel &warpingKernel,
551  int const interpLength=0,
552  typename DestImageT::SinglePixel padValue = lsst::afw::math::edgePixel<DestImageT>(
555  typename lsst::afw::image::detail::image_traits<DestImageT>::image_category()),
557  lsst::afw::gpu::DevicePreference devPref = lsst::afw::gpu::DEFAULT_DEVICE_PREFERENCE
559  );
560 
565  template<typename DestImageT, typename SrcImageT>
566  int warpImage(
567  DestImageT &destImage,
568  SrcImageT const &srcImage,
569  lsst::afw::geom::AffineTransform const &affineTransform,
570  WarpingControl const &control,
571  typename DestImageT::SinglePixel padValue = lsst::afw::math::edgePixel<DestImageT>(
572  typename lsst::afw::image::detail::image_traits<DestImageT>::image_category())
574  );
575 
579  template<typename DestImageT, typename SrcImageT>
580  int warpImage(
581  DestImageT &destImage,
582  SrcImageT const &srcImage,
583  SeparableKernel &warpingKernel,
584  lsst::afw::geom::AffineTransform const &affineTransform,
585  int const interpLength = 0,
586  typename DestImageT::SinglePixel padValue = lsst::afw::math::edgePixel<DestImageT>(
589  typename lsst::afw::image::detail::image_traits<DestImageT>::image_category()),
591  lsst::afw::gpu::DevicePreference devPref = lsst::afw::gpu::DEFAULT_DEVICE_PREFERENCE
593  );
594 
595 
600  template<typename DestImageT, typename SrcImageT>
601  int warpCenteredImage(
602  DestImageT &destImage,
603  SrcImageT const &srcImage,
604  lsst::afw::geom::LinearTransform const &linearTransform,
605  lsst::afw::geom::Point2D const &centerPosition,
606  WarpingControl const &control,
607  typename DestImageT::SinglePixel padValue = lsst::afw::math::edgePixel<DestImageT>(
608  typename lsst::afw::image::detail::image_traits<DestImageT>::image_category())
610  );
611 
615  template<typename DestImageT, typename SrcImageT>
616  int warpCenteredImage(
617  DestImageT &destImage,
618  SrcImageT const &srcImage,
619  SeparableKernel &warpingKernel,
620  lsst::afw::geom::LinearTransform const &linearTransform,
621  lsst::afw::geom::Point2D const &centerPosition,
622  int const interpLength = 0,
623  typename DestImageT::SinglePixel padValue = lsst::afw::math::edgePixel<DestImageT>(
626  typename lsst::afw::image::detail::image_traits<DestImageT>::image_category()),
628  lsst::afw::gpu::DevicePreference devPref = lsst::afw::gpu::DEFAULT_DEVICE_PREFERENCE
630  );
631 
632  namespace details {
633  template <typename A, typename B>
634  bool isSameObject(A const&, B const&) { return false; }
635 
636  template <typename A>
637  bool isSameObject(A const& a, A const& b) { return &a == &b; }
638  }
639 
640 }}} // lsst::afw::math
641 
642 #endif // !defined(LSST_AFW_MATH_WARPEXPOSURE_H)
virtual Function1Ptr clone() const
Return a pointer to a deep copy of this function.
Definition: warpExposure.h:191
virtual int getCacheSize() const
Get the current cache size (0 if none)
boost::uint16_t MaskPixel
void setInterpLength(int interpLength)
set the interpolation length
Definition: warpExposure.h:335
#define CONST_PTR(...)
Definition: base.h:47
An include file to include the header files for lsst::afw::geom.
Declare the Kernel class and subclasses.
1-dimensional Lanczos function
SeparableKernel()
Construct an empty spatially invariant SeparableKernel of size 0x0.
boost::shared_ptr< SeparableKernel > makeWarpingKernel(std::string name)
Return a warping kernel given its name.
A kernel described by a pair of functions: func(x, y) = colFunc(x) * rowFunc(y)
Definition: Kernel.h:986
lsst::afw::gpu::DevicePreference getDevicePreference() const
get the GPU device preference
Definition: warpExposure.h:342
Define a collection of useful Functions.
Parameters to control convolution.
Definition: warpExposure.h:239
void setCacheSize(int cacheSize)
set the cache size for the interpolation kernel(s)
Definition: warpExposure.h:318
Implementation of the WCS standard for a any projection.
Definition: Wcs.h:107
WarpingControl(SeparableKernel &warpingKernel, int interpLength=0, lsst::afw::gpu::DevicePreference devicePreference=lsst::afw::gpu::DEFAULT_DEVICE_PREFERENCE)
This constructor supports the deprecated legacy warping API.
Definition: warpExposure.h:283
int getCacheSize() const
get the cache size for the interpolation kernel(s)
Definition: warpExposure.h:308
int warpCenteredImage(DestImageT &destImage, SrcImageT const &srcImage, lsst::afw::geom::LinearTransform const &linearTransform, lsst::afw::geom::Point2D const &centerPosition, WarpingControl const &control, typename DestImageT::SinglePixel padValue=lsst::afw::math::edgePixel< DestImageT >(typename lsst::afw::image::detail::image_traits< DestImageT >::image_category()))
Warp an image with a LinearTranform about a specified point. This enables warping an image of e...
#define PTR(...)
Definition: base.h:41
DevicePreference
A type used to select whether to use CPU or GPU device.
const DevicePreference DEFAULT_DEVICE_PREFERENCE
Default DevicePreference value.
lsst::afw::image::MaskPixel getGrowFullMask() const
get mask bits to grow to full width of image/variance kernel
Definition: warpExposure.h:405
tbl::Key< int > cacheSize
Definition: CoaddPsf.cc:326
int warpImage(DestImageT &destImage, lsst::afw::image::Wcs const &destWcs, SrcImageT const &srcImage, lsst::afw::image::Wcs const &srcWcs, WarpingControl const &control, typename DestImageT::SinglePixel padValue=lsst::afw::math::edgePixel< DestImageT >(typename lsst::afw::image::detail::image_traits< DestImageT >::image_category()))
Warp an Image or MaskedImage to a new Wcs. See also convenience function warpExposure() to warp an Ex...
table::Key< table::Array< Kernel::Pixel > > image
Definition: FixedKernel.cc:117
int warpExposure(DestExposureT &destExposure, SrcExposureT const &srcExposure, WarpingControl const &control, typename DestExposureT::MaskedImageT::SinglePixel padValue=lsst::afw::math::edgePixel< typename DestExposureT::MaskedImageT >(typename lsst::afw::image::detail::image_traits< typename DestExposureT::MaskedImageT >::image_category()))
Warp (remap) one exposure to another.
boost::shared_ptr< Function1< Kernel::Pixel > > Function1Ptr
Definition: warpExposure.h:121
int getOrder() const
get the order of the kernel
1-dimensional bilinear interpolation function.
Definition: warpExposure.h:119
bool isSameObject(A const &, B const &)
Definition: warpExposure.h:634
A Function taking one argument.
Definition: Function.h:229
int getInterpLength() const
get the interpolation length (pixels)
Definition: warpExposure.h:325
Interface for CPU/GPU device selection.
ImageT::SinglePixel edgePixel(lsst::afw::image::detail::Image_tag)
Return an edge pixel appropriate for a given Image type.
void setGrowFullMask(lsst::afw::image::MaskPixel growFullMask)
set mask bits to grow to full width of image/variance kernel
Definition: warpExposure.h:410
Bilinear warping: fast; good for undersampled data.
Definition: warpExposure.h:101
int x
Convolve and convolveAtAPoint functions for Image and Kernel.
void setDevicePreference(lsst::afw::gpu::DevicePreference devicePreference)
set the GPU device preference
Definition: warpExposure.h:347
virtual void setKernelParameter(unsigned int ind, double value) const
Set one kernel parameter.
tbl::Key< std::string > warpingKernelName
Definition: CoaddPsf.cc:328
virtual Function1Ptr clone() const
Return a pointer to a deep copy of this function.
Definition: warpExposure.h:135
virtual boost::shared_ptr< Kernel > clone() const
Return a pointer to a deep copy of this kernel.
Nearest neighbor warping: fast; good for undersampled data.
Definition: warpExposure.h:157
Define the basic Function classes.
virtual std::string toString(std::string const &prefix="") const
Return a string representation of the kernel.
afw::table::Key< double > b
Lanczos warping: accurate but slow and can introduce ringing artifacts.
Definition: warpExposure.h:72
Point< double, 2 > Point2D
Definition: Point.h:286
1-dimensional nearest neighbor interpolation function.
Definition: warpExposure.h:175
boost::shared_ptr< Function1< Kernel::Pixel > > Function1Ptr
Definition: warpExposure.h:177
Kernels are used for convolution with MaskedImages and (eventually) Images.
Definition: Kernel.h:134
Definition of default types for Masks and Variance Images.
WarpingControl(std::string const &warpingKernelName, std::string const &maskWarpingKernelName="", int cacheSize=0, int interpLength=0, lsst::afw::gpu::DevicePreference devicePreference=lsst::afw::gpu::DEFAULT_DEVICE_PREFERENCE, lsst::afw::image::MaskPixel growFullMask=0)
Construct a WarpingControl object.
Definition: warpExposure.h:253
Include files required for standard LSST Exception handling.