Namespace lsst::afw::math::detail¶
-
namespace
detail
Functions
-
template<typename
OutImageT
, typenameInImageT
>
voidbasicConvolve
(OutImageT &convolvedImage, InImageT const &inImage, lsst::afw::math::Kernel const &kernel, lsst::afw::math::ConvolutionControl const &convolutionControl) Low-level convolution function that does not set edge pixels.
convolvedImage must be the same size as inImage. convolvedImage has a border in which the output pixels are not set. This border has size:
kernel.getCtrX() along the left edge
kernel.getCtrY() along the bottom edge
kernel.getWidth() - 1 - kernel.getCtrX() along the right edge
kernel.getHeight() - 1 - kernel.getCtrY() along the top edge
- Parameters
[out] convolvedImage
: convolved image[in] inImage
: image to convolve[in] kernel
: convolution kernel[in] convolutionControl
: convolution control parameters
- Exceptions
lsst::pex::exceptions::InvalidParameterError
: if convolvedImage dimensions != inImage dimensionslsst::pex::exceptions::InvalidParameterError
: if inImage smaller than kernel in width or heightlsst::pex::exceptions::InvalidParameterError
: if kernel width or height < 1std::bad_alloc
: when allocation of CPU memory fails
-
template<typename
OutImageT
, typenameInImageT
>
voidbasicConvolve
(OutImageT &convolvedImage, InImageT const &inImage, lsst::afw::math::DeltaFunctionKernel const &kernel, lsst::afw::math::ConvolutionControl const &convolutionControl) A version of basicConvolve that should be used when convolving delta function kernels
- Parameters
[out] convolvedImage
: convolved image[in] inImage
: image to convolve[in] kernel
: convolution kernel[in] convolutionControl
: convolution control parameters
-
template<typename
OutImageT
, typenameInImageT
>
voidbasicConvolve
(OutImageT &convolvedImage, InImageT const &inImage, lsst::afw::math::LinearCombinationKernel const &kernel, lsst::afw::math::ConvolutionControl const &convolutionControl) A version of basicConvolve that should be used when convolving a LinearCombinationKernel
The Algorithm:
If the kernel is spatially varying and contains only DeltaFunctionKernels then convolves the input Image by each basis kernel in turn, solves the spatial model for that component and adds in the appropriate amount of the convolved image.
In all other cases uses normal convolution
- Parameters
[out] convolvedImage
: convolved image[in] inImage
: image to convolve[in] kernel
: convolution kernel[in] convolutionControl
: convolution control parameters
- Exceptions
lsst::pex::exceptions::InvalidParameterError
: if convolvedImage dimensions != inImage dimensionslsst::pex::exceptions::InvalidParameterError
: if inImage smaller than kernel in width or heightlsst::pex::exceptions::InvalidParameterError
: if kernel width or height < 1std::bad_alloc
: when allocation of CPU memory fails
-
template<typename
OutImageT
, typenameInImageT
>
voidbasicConvolve
(OutImageT &convolvedImage, InImageT const &inImage, lsst::afw::math::SeparableKernel const &kernel, lsst::afw::math::ConvolutionControl const &convolutionControl) A version of basicConvolve that should be used when convolving separable kernels
- Parameters
[out] convolvedImage
: convolved image[in] inImage
: image to convolve[in] kernel
: convolution kernel[in] convolutionControl
: convolution control parameters
-
template<typename
OutImageT
, typenameInImageT
>
voidconvolveWithBruteForce
(OutImageT &convolvedImage, InImageT const &inImage, lsst::afw::math::Kernel const &kernel, lsst::afw::math::ConvolutionControl const &convolutionControl) Convolve an Image or MaskedImage with a Kernel by computing the kernel image at every point. (If the kernel is not spatially varying then only compute it once).
convolvedImage must be the same size as inImage. convolvedImage has a border in which the output pixels are not set. This border has size:
kernel.getCtrX() along the left edge
kernel.getCtrY() along the bottom edge
kernel.getWidth() - 1 - kernel.getCtrX() along the right edge
kernel.getHeight() - 1 - kernel.getCtrY() along the top edge
- Warning
Low-level convolution function that does not set edge pixels.
- Parameters
[out] convolvedImage
: convolved image[in] inImage
: image to convolve[in] kernel
: convolution kernel[in] convolutionControl
: convolution control parameters
- Exceptions
lsst::pex::exceptions::InvalidParameterError
: if convolvedImage dimensions != inImage dimensionslsst::pex::exceptions::InvalidParameterError
: if inImage smaller than kernel in width or heightlsst::pex::exceptions::InvalidParameterError
: if kernel width or height < 1std::bad_alloc
: when allocation of CPU memory fails
-
template<typename
OutImageT
, typenameInImageT
>
voidconvolveWithInterpolation
(OutImageT &outImage, InImageT const &inImage, lsst::afw::math::Kernel const &kernel, ConvolutionControl const &convolutionControl) Convolve an Image or MaskedImage with a spatially varying Kernel using linear interpolation.
This is a low-level convolution function that does not set edge pixels.
The algorithm is as follows:
divide the image into regions whose size is no larger than maxInterpolationDistance
for each region:
convolve it using convolveRegionWithInterpolation (which see)
Note that this routine will also work with spatially invariant kernels, but not efficiently.
- Parameters
[out] outImage
: convolved image = inImage convolved with kernel[in] inImage
: input image[in] kernel
: convolution kernel[in] convolutionControl
: convolution control parameters
- Exceptions
lsst::pex::exceptions::InvalidParameterError
: if outImage is not the same size as inImage
-
template<typename
OutImageT
, typenameInImageT
>
voidconvolveRegionWithInterpolation
(OutImageT &outImage, InImageT const &inImage, KernelImagesForRegion const ®ion, ConvolveWithInterpolationWorkingImages &workingImages) Convolve a region of an Image or MaskedImage with a spatially varying Kernel using interpolation.
This is a low-level convolution function that does not set edge pixels.
- Warning
: this is a low-level routine that performs no bounds checking.
- Parameters
[out] outImage
: convolved image = inImage convolved with kernel[in] inImage
: input image[in] region
: kernel image region over which to convolve[in] workingImages
: working kernel images
-
struct
ConvolveWithInterpolationWorkingImages
- #include <Convolve.h>
kernel images used by convolveRegionWithInterpolation
-
class
KernelImagesForRegion
- #include <Convolve.h>
A collection of Kernel images for special locations on a rectangular region of an image
See the Location enum for a list of those special locations.
This is a low-level helper class for recursive convolving with interpolation. Many of these objects may be created during a convolution, and many will share kernel images. It uses shared pointers to kernels and kernel images for increased speed and decreased memory usage (at the expense of safety). Note that null pointers are NOT acceptable for the constructors!
- Warning
The kernel images along the top and right edges are computed one row or column past the bounding box. This allows abutting KernelImagesForRegion to share corner and edge kernel images, which is useful when dividing a KernelImagesForRegion into subregions.
- Warning
The bounding box for the region applies to the parent image.
Also note that it uses lazy evaluation: images are computed when they are wanted.
-
class
RowOfKernelImagesForRegion
- #include <Convolve.h>
A row of KernelImagesForRegion
Intended for iterating over subregions of a KernelImagesForRegion using computeNextRow.
-
class
Spline
Subclassed by lsst::afw::math::detail::SmoothedSpline, lsst::afw::math::detail::TautSpline
-
struct
TrapezoidalPacker
- #include <TrapezoidalPacker.h>
A helper class ChebyshevBoundedField, for mapping trapezoidal matrices to 1-d arrays.
This class is not Swigged, and should not be included by any other .h files (including lsst/afw/math/detail.h); it’s for internal use by ChebyshevBoundedField only, and it’s only in a header file instead of that .cc file only so it can be unit tested.
We characterize the matrices by their number of columns (nx) and rows (ny), and the number of complete rows minus one (m).
This splits up the matrix into a rectangular part, in which the number of columns is the same for each row, and a wide trapezoidal or triangular part, in which the number of columns decreases by one for each row.
Here are some examples of how this class handles different kinds of matrices:
A wide trapezoidal matrix with orderX=4, orderY=3: nx=5, ny=4, m=0
0 1 2 3 4 5 6 7 8 9 10 11 12 13
A tall trapezoidal matrix with orderX=2, orderY=4 nx=3, ny=5, m=2
0 1 2 3 4 5 6 7 8 9 10 11
A triangular matrix with orderX=3, orderY=3 nx=4, ny=5, m=0
0 1 2 3 4 5 6 7 8 9
A wide rectangular matrix with orderX=3, orderY=2 nx=4, ny=3, m=3
0 1 2 3 4 5 6 7 8 9 10 11
A tall rectangular matrix with orderX=2, orderY=3 nx=3, ny=4, m=4
0 1 2 3 4 5 6 7 8 9 10 11
-
template<typename
DestImageT
, typenameSrcImageT
>
classWarpAtOnePoint
- #include <WarpAtOnePoint.h>
A functor that computes one warped pixel
-
template<typename