38 #include "boost/timer.hpp" 42 #include "lsst/afw/image.h" 43 #include "lsst/afw/math.h" 44 #include "lsst/afw/geom.h" 45 #include "lsst/log/Log.h" 46 #include "lsst/pex/policy/Policy.h" 47 #include "lsst/pex/exceptions/Runtime.h" 51 namespace afwGeom = lsst::afw::geom;
52 namespace afwImage = lsst::afw::image;
53 namespace afwMath = lsst::afw::math;
54 namespace pexExcept = lsst::pex::exceptions;
55 namespace pexPolicy = lsst::pex::policy;
64 template <
typename PixelT>
66 lsst::afw::image::Image<PixelT>
const &img
68 unsigned int rows = img.getHeight();
69 unsigned int cols = img.getWidth();
70 Eigen::MatrixXd M = Eigen::MatrixXd::Zero(rows, cols);
71 for (
int y = 0; y != img.getHeight(); ++y) {
73 for (
typename afwImage::Image<PixelT>::x_iterator ptr = img.row_begin(y);
74 ptr != img.row_end(y); ++ptr, ++x) {
84 lsst::afw::image::Mask<lsst::afw::image::MaskPixel>
const& mask
86 unsigned int rows = mask.getHeight();
87 unsigned int cols = mask.getWidth();
88 Eigen::MatrixXi M = Eigen::MatrixXi::Zero(rows, cols);
89 for (
int y = 0; y != mask.getHeight(); ++y) {
91 for (afwImage::Mask<lsst::afw::image::MaskPixel>::x_iterator ptr = mask.row_begin(y);
92 ptr != mask.row_end(y); ++ptr, ++x) {
117 template <
typename PixelT,
typename BackgroundT>
119 lsst::afw::image::MaskedImage<PixelT>
const &templateImage,
120 lsst::afw::image::MaskedImage<PixelT>
const &scienceMaskedImage,
121 lsst::afw::math::Kernel
const &convolutionKernel,
122 BackgroundT background,
129 afwImage::MaskedImage<PixelT> convolvedMaskedImage(templateImage.getDimensions());
130 afwMath::ConvolutionControl convolutionControl = afwMath::ConvolutionControl();
131 convolutionControl.setDoNormalize(
false);
132 afwMath::convolve(convolvedMaskedImage, templateImage,
133 convolutionKernel, convolutionControl);
136 *(convolvedMaskedImage.getImage()) += background;
139 convolvedMaskedImage -= scienceMaskedImage;
143 convolvedMaskedImage *= -1.0;
146 double time = t.elapsed();
147 LOGL_DEBUG(
"TRACE4.ip.diffim.convolveAndSubtract",
148 "Total compute time to convolve and subtract : %.2f s", time);
150 return convolvedMaskedImage;
168 template <
typename PixelT,
typename BackgroundT>
170 lsst::afw::image::Image<PixelT>
const &templateImage,
171 lsst::afw::image::MaskedImage<PixelT>
const &scienceMaskedImage,
172 lsst::afw::math::Kernel
const &convolutionKernel,
173 BackgroundT background,
180 afwImage::MaskedImage<PixelT> convolvedMaskedImage(templateImage.getDimensions());
181 afwMath::ConvolutionControl convolutionControl = afwMath::ConvolutionControl();
182 convolutionControl.setDoNormalize(
false);
183 afwMath::convolve(*convolvedMaskedImage.getImage(), templateImage,
184 convolutionKernel, convolutionControl);
187 *(convolvedMaskedImage.getImage()) += background;
190 *convolvedMaskedImage.getImage() -= *scienceMaskedImage.getImage();
194 *convolvedMaskedImage.getImage() *= -1.0;
196 convolvedMaskedImage.getMask()->assign(*scienceMaskedImage.getMask());
197 convolvedMaskedImage.getVariance()->assign(*scienceMaskedImage.getVariance());
199 double time = t.elapsed();
200 LOGL_DEBUG(
"TRACE4.ip.diffim.convolveAndSubtract",
201 "Total compute time to convolve and subtract : %.2f s", time);
203 return convolvedMaskedImage;
223 #define p_INSTANTIATE_convolveAndSubtract(TEMPLATE_IMAGE_T, TYPE) \ 225 lsst::afw::image::MaskedImage<TYPE> convolveAndSubtract( \ 226 lsst::afw::image::TEMPLATE_IMAGE_T<TYPE> const& templateImage, \ 227 lsst::afw::image::MaskedImage<TYPE> const& scienceMaskedImage, \ 228 lsst::afw::math::Kernel const& convolutionKernel, \ 233 afwImage::MaskedImage<TYPE> convolveAndSubtract( \ 234 lsst::afw::image::TEMPLATE_IMAGE_T<TYPE> const& templateImage, \ 235 lsst::afw::image::MaskedImage<TYPE> const& scienceMaskedImage, \ 236 lsst::afw::math::Kernel const& convolutionKernel, \ 237 lsst::afw::math::Function2<double> const& backgroundFunction, \ 240 #define INSTANTIATE_convolveAndSubtract(TYPE) \ 241 p_INSTANTIATE_convolveAndSubtract(Image, TYPE) \ 242 p_INSTANTIATE_convolveAndSubtract(MaskedImage, TYPE) An include file to include the header files for lsst::ip::diffim.
Eigen::MatrixXi maskToEigenMatrix(lsst::afw::image::Mask< lsst::afw::image::MaskPixel > const &mask)
lsst::afw::image::MaskedImage< PixelT > convolveAndSubtract(lsst::afw::image::MaskedImage< PixelT > const &templateImage, lsst::afw::image::MaskedImage< PixelT > const &scienceMaskedImage, lsst::afw::math::Kernel const &convolutionKernel, BackgroundT background, bool invert=true)
Execute fundamental task of convolving template and subtracting it from science image.
Class to accumulate Mask bits.
Eigen::MatrixXd imageToEigenMatrix(lsst::afw::image::Image< PixelT > const &img)
Turns a 2-d Image into a 2-d Eigen Matrix.
Class to calculate difference image statistics.
#define INSTANTIATE_convolveAndSubtract(TYPE)