LSSTApplications
20.0.0
LSSTDataManagementBasePackage
stack
1a1d771
Linux64
afw
20.0.0
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 <cstdint>
27
28
#include "
lsst/pex/exceptions.h
"
29
#include "
lsst/afw/math/offsetImage.h
"
30
31
namespace
pexExcept
=
lsst::pex::exceptions
;
32
33
namespace
lsst
{
34
namespace
afw
{
35
namespace
math {
36
37
template
<
typename
ImageT>
38
std::shared_ptr<ImageT>
binImage
(ImageT
const
& in,
int
const
binsize,
lsst::afw::math::Property
const
flags) {
39
return
binImage
(in, binsize, binsize, flags);
40
}
41
42
template
<
typename
ImageT>
43
std::shared_ptr<ImageT>
binImage
(ImageT
const
& in,
int
const
binX,
int
const
binY,
44
lsst::afw::math::Property
const
flags) {
45
if
(flags !=
lsst::afw::math::MEAN
) {
46
throw
LSST_EXCEPT
(
pexExcept::InvalidParameterError
,
47
(
boost::format
(
"Only afwMath::MEAN is supported, saw 0x%x"
) % flags).str());
48
}
49
if
(binX <= 0 || binY <= 0) {
50
throw
LSST_EXCEPT
(
pexExcept::DomainError
,
51
(
boost::format
(
"Binning must be >= 0, saw %dx%d"
) % binX % binY).str());
52
}
53
54
int
const
outWidth = in.getWidth() / binX;
55
int
const
outHeight = in.getHeight() / binY;
56
57
std::shared_ptr<ImageT>
out =
58
std::shared_ptr<ImageT>
(
new
ImageT(
lsst::geom::Extent2I
(outWidth, outHeight)));
59
out->setXY0(in.getXY0());
60
*out =
typename
ImageT::SinglePixel(0);
61
62
for
(
int
oy = 0, iy = 0; oy < out->getHeight(); ++oy) {
63
for
(
int
i = 0; i != binY; ++i, ++iy) {
64
typename
ImageT::x_iterator optr = out->row_begin(oy);
65
for
(
typename
ImageT::x_iterator iptr = in.row_begin(iy), iend = iptr + binX * outWidth;
66
iptr < iend;) {
67
typename
ImageT::SinglePixel
val
= *iptr;
68
++iptr;
69
for
(
int
j = 1; j != binX; ++j, ++iptr) {
70
val
+= *iptr;
71
}
72
*optr +=
val
;
73
++optr;
74
}
75
}
76
for
(
typename
ImageT::x_iterator
ptr
= out->row_begin(oy),
end
= out->row_end(oy);
ptr
!=
end
;
77
++
ptr
) {
78
*
ptr
/= binX * binY;
79
}
80
}
81
82
return
out;
83
}
84
85
//
86
// Explicit instantiations
87
//
89
#define INSTANTIATE(TYPE) \
90
template std::shared_ptr<image::Image<TYPE>> binImage(image::Image<TYPE> const&, int, \
91
lsst::afw::math::Property const); \
92
template std::shared_ptr<image::Image<TYPE>> binImage(image::Image<TYPE> const&, int, int, \
93
lsst::afw::math::Property const); \
94
template std::shared_ptr<image::MaskedImage<TYPE>> binImage(image::MaskedImage<TYPE> const&, int, \
95
lsst::afw::math::Property const); \
96
template std::shared_ptr<image::MaskedImage<TYPE>> binImage(image::MaskedImage<TYPE> const&, int, int, \
97
lsst::afw::math::Property const);
98
99
INSTANTIATE
(
std::uint16_t
)
100
INSTANTIATE
(
int
)
101
INSTANTIATE
(
float
)
102
INSTANTIATE
(
double
)
104
}
// namespace math
105
}
// namespace afw
106
}
// namespace lsst
offsetImage.h
std::shared_ptr< ImageT >
pex.config.history.format
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition:
history.py:174
lsst::afw
Definition:
imageAlgorithm.dox:1
val
ImageT val
Definition:
CR.cc:146
INSTANTIATE
#define INSTANTIATE(FROMSYS, TOSYS)
Definition:
Detector.cc:484
end
int end
Definition:
BoundedField.cc:105
lsst::pex::exceptions::DomainError
Reports arguments outside the domain of an operation.
Definition:
Runtime.h:57
lsst::afw::math::MEAN
@ MEAN
estimate sample mean
Definition:
Statistics.h:67
ptr
uint64_t * ptr
Definition:
RangeSet.cc:88
std::uint16_t
lsst
A base class for image defects.
Definition:
imageAlgorithm.dox:1
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition:
Exception.h:48
lsst::pex::exceptions::InvalidParameterError
Reports invalid arguments.
Definition:
Runtime.h:66
lsst::pex::exceptions
Definition:
Exception.h:37
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:43
lsst::afw::math::Property
Property
control what is calculated
Definition:
Statistics.h:63
lsst::geom::Extent< int, 2 >
exceptions.h
Generated on Wed Jun 24 2020 18:10:04 for LSSTApplications by
1.8.18