lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
src
math
binImage.cc
Go to the documentation of this file.
1
/*
2
* LSST Data Management System
3
* Copyright 2008, 2009, 2010 LSST Corporation.
4
*
5
* This product includes software developed by the
6
* LSST Project (http://www.lsst.org/).
7
*
8
* This program is free software: you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation, either version 3 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the LSST License Statement and
19
* the GNU General Public License along with this program. If not,
20
* see <http://www.lsstcorp.org/LegalNotices/>.
21
*/
22
23
/*
24
* Bin an Image or MaskedImage by an integral factor (the same in x and y)
25
*/
26
#include <memory>
27
#include <cstdint>
28
29
#include "
lsst/pex/exceptions.h
"
30
#include "
lsst/afw/math/offsetImage.h
"
31
32
namespace
pexExcept
=
lsst::pex::exceptions
;
33
34
namespace
lsst
{
35
namespace
afw
{
36
namespace
math
{
37
38
template
<
typename
ImageT>
39
std::shared_ptr<ImageT>
binImage
(ImageT
const
& in,
int
const
binsize,
lsst::afw::math::Property
const
flags) {
40
return
binImage
(in, binsize, binsize, flags);
41
}
42
43
template
<
typename
ImageT>
44
std::shared_ptr<ImageT>
binImage
(ImageT
const
& in,
int
const
binX,
int
const
binY,
45
lsst::afw::math::Property
const
flags) {
46
if
(flags !=
lsst::afw::math::MEAN
) {
47
throw
LSST_EXCEPT
(
pexExcept::InvalidParameterError
,
48
(boost::format(
"Only afwMath::MEAN is supported, saw 0x%x"
) % flags).str());
49
}
50
if
(binX <= 0 || binY <= 0) {
51
throw
LSST_EXCEPT
(
pexExcept::DomainError
,
52
(boost::format(
"Binning must be >= 0, saw %dx%d"
) % binX % binY).str());
53
}
54
55
int
const
outWidth = in.getWidth() / binX;
56
int
const
outHeight = in.getHeight() / binY;
57
58
std::shared_ptr<ImageT>
out =
59
std::shared_ptr<ImageT>
(
new
ImageT(
lsst::geom::Extent2I
(outWidth, outHeight)));
60
out->setXY0(in.getXY0());
61
*out =
typename
ImageT::SinglePixel(0);
62
63
for
(
int
oy = 0, iy = 0; oy < out->getHeight(); ++oy) {
64
for
(
int
i = 0; i != binY; ++i, ++iy) {
65
typename
ImageT::x_iterator optr = out->row_begin(oy);
66
for
(
typename
ImageT::x_iterator iptr = in.row_begin(iy), iend = iptr + binX * outWidth;
67
iptr < iend;) {
68
typename
ImageT::SinglePixel val = *iptr;
69
++iptr;
70
for
(
int
j = 1; j != binX; ++j, ++iptr) {
71
val += *iptr;
72
}
73
*optr += val;
74
++optr;
75
}
76
}
77
for
(
typename
ImageT::x_iterator ptr = out->row_begin(oy), end = out->row_end(oy); ptr != end;
78
++ptr) {
79
*ptr /= binX * binY;
80
}
81
}
82
83
return
out;
84
}
85
86
//
87
// Explicit instantiations
88
//
90
#define INSTANTIATE(TYPE) \
91
template std::shared_ptr<image::Image<TYPE>> binImage(image::Image<TYPE> const&, int, \
92
lsst::afw::math::Property const); \
93
template std::shared_ptr<image::Image<TYPE>> binImage(image::Image<TYPE> const&, int, int, \
94
lsst::afw::math::Property const); \
95
template std::shared_ptr<image::MaskedImage<TYPE>> binImage(image::MaskedImage<TYPE> const&, int, \
96
lsst::afw::math::Property const); \
97
template std::shared_ptr<image::MaskedImage<TYPE>> binImage(image::MaskedImage<TYPE> const&, int, int, \
98
lsst::afw::math::Property const);
99
100
INSTANTIATE
(
std::uint16_t
)
101
INSTANTIATE
(
int
)
102
INSTANTIATE
(
float
)
103
INSTANTIATE
(
double
)
105
}
// namespace math
106
}
// namespace afw
107
}
// namespace lsst
INSTANTIATE
#define INSTANTIATE(FROMSYS, TOSYS)
Definition
Detector.cc:509
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
lsst::pex::exceptions::DomainError
lsst::pex::exceptions::InvalidParameterError
exceptions.h
std::uint16_t
lsst::afw::math
Definition
statistics.dox:6
lsst::afw::math::Property
Property
control what is calculated
Definition
Statistics.h:53
lsst::afw::math::MEAN
@ MEAN
estimate sample mean
Definition
Statistics.h:57
lsst::afw::math::binImage
std::shared_ptr< ImageT > binImage(ImageT const &inImage, int const binX, int const binY, lsst::afw::math::Property const flags=lsst::afw::math::MEAN)
Definition
binImage.cc:44
lsst::afw
Definition
imageAlgorithm.dox:1
lsst::geom::Extent2I
Extent< int, 2 > Extent2I
lsst::pex::exceptions
lsst
offsetImage.h
std::shared_ptr
Generated on
for lsst.afw by
1.17.0