LSST Applications g180d380827+0f66a164bb,g2079a07aa2+86d27d4dc4,g2305ad1205+7d304bc7a0,g29320951ab+500695df56,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+e42ea45bea,g48712c4677+36a86eeaa5,g487adcacf7+2dd8f347ac,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+c70619cc9d,g5a732f18d5+53520f316c,g5ea96fc03c+341ea1ce94,g64a986408d+f7cd9c7162,g858d7b2824+f7cd9c7162,g8a8a8dda67+585e252eca,g99cad8db69+469ab8c039,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+c92fc63c7e,gbd866b1f37+f7cd9c7162,gc120e1dc64+02c66aa596,gc28159a63d+0e5473021a,gc3e9b769f7+b0068a2d9f,gcf0d15dbbd+e42ea45bea,gdaeeff99f8+f9a426f77a,ge6526c86ff+84383d05b3,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+f7cd9c7162,w.2024.17
LSST Data Management Base Package
Loading...
Searching...
No Matches
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
25/*
26 * Support for warping an image to a new WCS.
27 */
28
29#ifndef LSST_AFW_MATH_WARPEXPOSURE_H
30#define LSST_AFW_MATH_WARPEXPOSURE_H
31
32#include <memory>
33#include <string>
34
35#include "lsst/base.h"
36#include "lsst/pex/exceptions.h"
37#include "lsst/geom.h"
38#include "lsst/afw/geom.h"
46
47namespace lsst {
48namespace afw {
49namespace geom {
50class SkyWcs;
51}
52namespace math {
53
67public:
72
77
78 ~LanczosWarpingKernel() override = default;
79
80 std::shared_ptr<Kernel> clone() const override;
81
85 int getOrder() const;
86
87 bool isPersistable() const noexcept override { return true; }
88
89protected:
90 void setKernelParameter(unsigned int ind, double value) const override;
91
92 std::string getPersistenceName() const override { return "LanczosWarpingKernel"; }
93
94 std::string getPythonModule() const override { return "lsst.afw.math"; }
95
96 void write(OutputArchiveHandle &handle) const override;
97};
98
109public:
112
117
118 ~BilinearWarpingKernel() override = default;
119
120 std::shared_ptr<Kernel> clone() const override;
121
122 bool isPersistable() const noexcept override { return true; }
123
131 class BilinearFunction1 : public Function1<Kernel::Pixel> {
132 public:
134
138 explicit BilinearFunction1(double fracPos)
139 : Function1<Kernel::Pixel>(1) {
140 this->_params[0] = fracPos;
141 }
142 ~BilinearFunction1() override {}
143
144 Function1Ptr clone() const override { return Function1Ptr(new BilinearFunction1(this->_params[0])); }
145
153 Kernel::Pixel operator()(double x) const override;
154
158 std::string toString(std::string const & = "") const override;
159 };
160
161protected:
162 void setKernelParameter(unsigned int ind, double value) const override;
163
164 std::string getPersistenceName() const override { return "BillinearWarpingKernel"; }
165
166 std::string getPythonModule() const override { return "lsst.afw.math"; }
167
168 void write(OutputArchiveHandle &handle) const override;
169};
170
181public:
183
188
189 ~NearestWarpingKernel() override = default;
190
191 std::shared_ptr<Kernel> clone() const override;
192
193 bool isPersistable() const noexcept override { return true; }
194
202 class NearestFunction1 : public Function1<Kernel::Pixel> {
203 public:
205
209 explicit NearestFunction1(double fracPos)
210 : Function1<Kernel::Pixel>(1) {
211 this->_params[0] = fracPos;
212 }
213 ~NearestFunction1() override {}
214
215 Function1Ptr clone() const override { return Function1Ptr(new NearestFunction1(this->_params[0])); }
216
224 Kernel::Pixel operator()(double x) const override;
225
229 std::string toString(std::string const & = "") const override;
230 };
231
232protected:
233 void setKernelParameter(unsigned int ind, double value) const override;
234
235 std::string getPersistenceName() const override { return "NearestWarpingKernel"; }
236
237 std::string getPythonModule() const override { return "lsst.afw.math"; }
238
239 void write(OutputArchiveHandle &handle) const override;
240};
241
267
275class WarpingControl final : public table::io::PersistableFacade<WarpingControl>,
277public:
287 std::string const &maskWarpingKernelName = "",
292 int cacheSize = 0,
294 int interpLength = 0,
297 )
298 : _warpingKernelPtr(makeWarpingKernel(warpingKernelName)),
299 _maskWarpingKernelPtr(),
300 _cacheSize(cacheSize),
301 _interpLength(interpLength),
302 _growFullMask(growFullMask) {
303 setMaskWarpingKernelName(maskWarpingKernelName);
304 }
305
306 virtual ~WarpingControl(){};
307
311 int getCacheSize() const { return _cacheSize; };
312
322 ) {
323 _cacheSize = cacheSize;
324 };
325
329 int getInterpLength() const { return _interpLength; };
330
340 ) {
341 _interpLength = interpLength;
342 };
343
348
353 );
354
360 void setWarpingKernel(SeparableKernel const &warpingKernel
361 );
362
367
371 bool hasMaskWarpingKernel() const { return static_cast<bool>(_maskWarpingKernelPtr); }
372
376 void setMaskWarpingKernelName(std::string const &maskWarpingKernelName
378 );
379
385 void setMaskWarpingKernel(SeparableKernel const &maskWarpingKernel
386 );
387
391 lsst::afw::image::MaskPixel getGrowFullMask() const { return _growFullMask; };
392
401
402 bool isPersistable() const noexcept override;
403
404protected:
405 std::string getPersistenceName() const override;
406 std::string getPythonModule() const override;
407 void write(OutputArchiveHandle &handle) const override;
408
409private:
416 void _testWarpingKernels(SeparableKernel const &warpingKernel,
417 SeparableKernel const &maskWarpingKernel
418 ) const;
419
420 std::shared_ptr<SeparableKernel> _warpingKernelPtr;
421 std::shared_ptr<SeparableKernel> _maskWarpingKernelPtr;
422 int _cacheSize;
423 int _interpLength;
424 lsst::afw::image::MaskPixel _growFullMask;
425};
426
432template <typename DestExposureT, typename SrcExposureT>
433int warpExposure(
434 DestExposureT &destExposure,
438 SrcExposureT const &srcExposure,
439 WarpingControl const &control,
440 typename DestExposureT::MaskedImageT::SinglePixel padValue =
441 lsst::afw::math::edgePixel<typename DestExposureT::MaskedImageT>(
442 typename lsst::afw::image::detail::image_traits<
443 typename DestExposureT::MaskedImageT>::image_category())
445);
446
493template <typename DestImageT, typename SrcImageT>
494int warpImage(DestImageT &destImage,
495 geom::SkyWcs const &destWcs,
496 SrcImageT const &srcImage,
497 geom::SkyWcs const &srcWcs,
498 WarpingControl const &control,
499 typename DestImageT::SinglePixel padValue = lsst::afw::math::edgePixel<DestImageT>(
500 typename lsst::afw::image::detail::image_traits<DestImageT>::image_category())
502);
503
518template <typename DestImageT, typename SrcImageT>
519int warpImage(DestImageT &destImage, SrcImageT const &srcImage,
520 geom::TransformPoint2ToPoint2 const &srcToDest, WarpingControl const &control,
521 typename DestImageT::SinglePixel padValue = lsst::afw::math::edgePixel<DestImageT>(
522 typename lsst::afw::image::detail::image_traits<DestImageT>::image_category()));
523
529template <typename DestImageT, typename SrcImageT>
531 DestImageT &destImage,
532 SrcImageT const &srcImage,
533 lsst::geom::LinearTransform const &linearTransform,
534 lsst::geom::Point2D const &centerPosition,
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
541} // namespace math
542} // namespace afw
543} // namespace lsst
544
545#endif // !defined(LSST_AFW_MATH_WARPEXPOSURE_H)
Basic LSST definitions.
1-dimensional bilinear interpolation function.
std::shared_ptr< Function1< Kernel::Pixel > > Function1Ptr
std::string toString(std::string const &="") const override
Return string representation.
Function1Ptr clone() const override
Return a pointer to a deep copy of this function.
BilinearFunction1(double fracPos)
Construct a Bilinear interpolation function.
Kernel::Pixel operator()(double x) const override
Solve bilinear equation.
Bilinear warping: fast; good for undersampled data.
std::string getPythonModule() const override
Return the fully-qualified Python module that should be imported to guarantee that its factory is reg...
BilinearWarpingKernel & operator=(const BilinearWarpingKernel &)=delete
std::string getPersistenceName() const override
Return the unique name used to persist this object and look up its factory.
BilinearWarpingKernel(BilinearWarpingKernel &&)=delete
bool isPersistable() const noexcept override
Return true if this particular object can be persisted using afw::table::io.
void write(OutputArchiveHandle &handle) const override
Write the object to one or more catalogs.
std::shared_ptr< Kernel > clone() const override
Return a pointer to a deep copy of this kernel.
BilinearWarpingKernel & operator=(BilinearWarpingKernel &&)=delete
void setKernelParameter(unsigned int ind, double value) const override
Set one kernel parameter.
BilinearWarpingKernel(const BilinearWarpingKernel &)=delete
A Function taking one argument.
Definition Function.h:202
std::vector< double > _params
Definition Function.h:185
Kernels are used for convolution with MaskedImages and (eventually) Images.
Definition Kernel.h:110
1-dimensional Lanczos function
Lanczos warping: accurate but slow and can introduce ringing artifacts.
int getOrder() const
get the order of the kernel
LanczosWarpingKernel(const LanczosWarpingKernel &)=delete
bool isPersistable() const noexcept override
Return true if this particular object can be persisted using afw::table::io.
void setKernelParameter(unsigned int ind, double value) const override
Set one kernel parameter.
~LanczosWarpingKernel() override=default
LanczosWarpingKernel & operator=(LanczosWarpingKernel &&)=delete
std::string getPersistenceName() const override
Return the unique name used to persist this object and look up its factory.
std::shared_ptr< Kernel > clone() const override
Return a pointer to a deep copy of this kernel.
std::string getPythonModule() const override
Return the fully-qualified Python module that should be imported to guarantee that its factory is reg...
void write(OutputArchiveHandle &handle) const override
Write the object to one or more catalogs.
LanczosWarpingKernel & operator=(const LanczosWarpingKernel &)=delete
LanczosWarpingKernel(LanczosWarpingKernel &&)=delete
1-dimensional nearest neighbor interpolation function.
NearestFunction1(double fracPos)
Construct a Nearest interpolation function.
Kernel::Pixel operator()(double x) const override
Solve nearest neighbor equation.
Function1Ptr clone() const override
Return a pointer to a deep copy of this function.
std::shared_ptr< Function1< Kernel::Pixel > > Function1Ptr
std::string toString(std::string const &="") const override
Return string representation.
Nearest neighbor warping: fast; good for undersampled data.
NearestWarpingKernel(NearestWarpingKernel &&)=delete
NearestWarpingKernel(const NearestWarpingKernel &)=delete
std::shared_ptr< Kernel > clone() const override
Return a pointer to a deep copy of this kernel.
std::string getPythonModule() const override
Return the fully-qualified Python module that should be imported to guarantee that its factory is reg...
void write(OutputArchiveHandle &handle) const override
Write the object to one or more catalogs.
~NearestWarpingKernel() override=default
bool isPersistable() const noexcept override
Return true if this particular object can be persisted using afw::table::io.
NearestWarpingKernel & operator=(NearestWarpingKernel &&)=delete
NearestWarpingKernel & operator=(const NearestWarpingKernel &)=delete
std::string getPersistenceName() const override
Return the unique name used to persist this object and look up its factory.
void setKernelParameter(unsigned int ind, double value) const override
Set one kernel parameter.
A kernel described by a pair of functions: func(x, y) = colFunc(x) * rowFunc(y)
Definition Kernel.h:860
Parameters to control convolution.
bool hasMaskWarpingKernel() const
return true if there is a mask kernel
lsst::afw::image::MaskPixel getGrowFullMask() const
get mask bits to grow to full width of image/variance kernel
void setWarpingKernel(SeparableKernel const &warpingKernel)
set the warping kernel
int getInterpLength() const
get the interpolation length (pixels)
std::string getPythonModule() const override
Return the fully-qualified Python module that should be imported to guarantee that its factory is reg...
void setWarpingKernelName(std::string const &warpingKernelName)
set the warping kernel by name
void setMaskWarpingKernelName(std::string const &maskWarpingKernelName)
set or clear the mask warping kernel by name
void setCacheSize(int cacheSize)
set the cache size for the interpolation kernel(s)
std::string getPersistenceName() const override
Return the unique name used to persist this object and look up its factory.
int getCacheSize() const
get the cache size for the interpolation kernel(s)
void setMaskWarpingKernel(SeparableKernel const &maskWarpingKernel)
set the mask warping kernel
std::shared_ptr< SeparableKernel > getWarpingKernel() const
get the warping kernel
void setGrowFullMask(lsst::afw::image::MaskPixel growFullMask)
set mask bits to grow to full width of image/variance kernel
void write(OutputArchiveHandle &handle) const override
Write the object to one or more catalogs.
void setInterpLength(int interpLength)
set the interpolation length
std::shared_ptr< SeparableKernel > getMaskWarpingKernel() const
get the mask warping kernel
WarpingControl(std::string const &warpingKernelName, std::string const &maskWarpingKernelName="", int cacheSize=0, int interpLength=0, lsst::afw::image::MaskPixel growFullMask=0)
Construct a WarpingControl object.
bool isPersistable() const noexcept override
Return true if this particular object can be persisted using afw::table::io.
A CRTP facade class for subclasses of Persistable.
A base class for objects that can be persisted via afw::table::io Archive classes.
Definition Persistable.h:74
io::OutputArchiveHandle OutputArchiveHandle
std::shared_ptr< SeparableKernel > makeWarpingKernel(std::string name)
Return a warping kernel given its name.
int warpCenteredImage(DestImageT &destImage, SrcImageT const &srcImage, lsst::geom::LinearTransform const &linearTransform, lsst::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.
ImageT::SinglePixel edgePixel(lsst::afw::image::detail::Image_tag)
Return an off-the-edge pixel appropriate for a given Image type.
STL namespace.
afw::table::Key< std::string > warpingKernelName
Definition CoaddPsf.cc:354
table::Key< int > interpLength
table::Key< image::MaskPixel > growFullMask
table::Key< int > order
table::Key< int > cacheSize