38 #include "boost/timer.hpp"
49 namespace afwImage = lsst::afw::image;
50 namespace afwMath = lsst::afw::math;
51 namespace pexExcept = lsst::pex::exceptions;
52 namespace dafBase = lsst::daf::base;
61 template <
typename PixelT>
67 Eigen::MatrixXd M = Eigen::MatrixXd::Zero(rows, cols);
83 unsigned int rows =
mask.getHeight();
84 unsigned int cols =
mask.getWidth();
85 Eigen::MatrixXi M = Eigen::MatrixXi::Zero(rows, cols);
86 for (
int y = 0;
y !=
mask.getHeight(); ++
y) {
89 ptr !=
mask.row_end(
y); ++ptr, ++
x) {
114 template <
typename PixelT,
typename BackgroundT>
119 BackgroundT background,
128 convolutionControl.setDoNormalize(
false);
129 afwMath::convolve(convolvedMaskedImage, templateImage,
130 convolutionKernel, convolutionControl);
133 *(convolvedMaskedImage.getImage()) += background;
136 convolvedMaskedImage -= scienceMaskedImage;
140 convolvedMaskedImage *= -1.0;
143 double time = t.elapsed();
144 LOGL_DEBUG(
"TRACE4.ip.diffim.convolveAndSubtract",
145 "Total compute time to convolve and subtract : %.2f s", time);
147 return convolvedMaskedImage;
165 template <
typename PixelT,
typename BackgroundT>
170 BackgroundT background,
179 convolutionControl.setDoNormalize(
false);
180 afwMath::convolve(*convolvedMaskedImage.getImage(), templateImage,
181 convolutionKernel, convolutionControl);
184 *(convolvedMaskedImage.getImage()) += background;
187 *convolvedMaskedImage.getImage() -= *scienceMaskedImage.
getImage();
191 *convolvedMaskedImage.getImage() *= -1.0;
193 convolvedMaskedImage.getMask()->assign(*scienceMaskedImage.
getMask());
194 convolvedMaskedImage.getVariance()->assign(*scienceMaskedImage.
getVariance());
196 double time = t.elapsed();
197 LOGL_DEBUG(
"TRACE4.ip.diffim.convolveAndSubtract",
198 "Total compute time to convolve and subtract : %.2f s", time);
200 return convolvedMaskedImage;
214 template class FindSetBits<lsst::afw::image::Mask<> >;
215 template class ImageStatistics<float>;
216 template class ImageStatistics<double>;
220 #define p_INSTANTIATE_convolveAndSubtract(TEMPLATE_IMAGE_T, TYPE) \
222 lsst::afw::image::MaskedImage<TYPE> convolveAndSubtract( \
223 lsst::afw::image::TEMPLATE_IMAGE_T<TYPE> const& templateImage, \
224 lsst::afw::image::MaskedImage<TYPE> const& scienceMaskedImage, \
225 lsst::afw::math::Kernel const& convolutionKernel, \
230 afwImage::MaskedImage<TYPE> convolveAndSubtract( \
231 lsst::afw::image::TEMPLATE_IMAGE_T<TYPE> const& templateImage, \
232 lsst::afw::image::MaskedImage<TYPE> const& scienceMaskedImage, \
233 lsst::afw::math::Kernel const& convolutionKernel, \
234 lsst::afw::math::Function2<double> const& backgroundFunction, \
237 #define INSTANTIATE_convolveAndSubtract(TYPE) \
238 p_INSTANTIATE_convolveAndSubtract(Image, TYPE) \
239 p_INSTANTIATE_convolveAndSubtract(MaskedImage, TYPE)