LSSTApplications
20.0.0
LSSTDataManagementBasePackage
stack
1a1d771
Linux64
afw
20.0.0
src
math
Background.cc
Go to the documentation of this file.
1
// -*- LSST-C++ -*-
2
3
/*
4
* LSST Data Management System
5
* Copyright 2008-2015 LSST Corporation.
6
*
7
* This product includes software developed by the
8
* LSST Project (http://www.lsst.org/).
9
*
10
* This program is free software: you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation, either version 3 of the License, or
13
* (at your option) any later version.
14
*
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
19
*
20
* You should have received a copy of the LSST License Statement and
21
* the GNU General Public License along with this program. If not,
22
* see <https://www.lsstcorp.org/LegalNotices/>.
23
*/
24
25
/*
26
* Background estimation class code
27
*/
28
#include <iostream>
29
#include <limits>
30
#include <cmath>
31
#include <vector>
32
#include "
lsst/afw/image/MaskedImage.h
"
33
#include "
lsst/afw/math/Interpolate.h
"
34
#include "
lsst/afw/math/Background.h
"
35
#include "
lsst/afw/math/Statistics.h
"
36
37
namespace
lsst
{
38
namespace
ex
= pex::exceptions;
39
40
namespace
afw
{
41
namespace
math {
42
43
template
<
typename
ImageT>
44
Background::Background
(ImageT
const
& img,
BackgroundControl
const
& bgCtrl)
45
: _imgBBox(img.getBBox()),
46
_bctrl(new
BackgroundControl
(bgCtrl)),
47
_asUsedInterpStyle(
Interpolate
::UNKNOWN),
48
_asUsedUndersampleStyle(
THROW_EXCEPTION
),
49
_xcen(0),
50
_ycen(0),
51
_xorig(0),
52
_yorig(0),
53
_xsize(0),
54
_ysize(0) {
55
if
(
_imgBBox
.
isEmpty
()) {
56
throw
LSST_EXCEPT
(
ex::InvalidParameterError
,
"Image contains no pixels"
);
57
}
58
59
// Check that an int's large enough to hold the number of pixels
60
if
(
_imgBBox
.
getWidth
() *
static_cast<
double
>
(
_imgBBox
.
getHeight
()) >
std::numeric_limits<int>::max
()) {
61
throw
LSST_EXCEPT
(
lsst::pex::exceptions::OverflowError
,
62
str(
boost::format
(
"Image %dx%d has more pixels than fit in an int (%d)"
) %
63
_imgBBox
.
getWidth
() %
_imgBBox
.
getHeight
() %
std::numeric_limits<int>::max
()));
64
}
65
66
_setCenOrigSize(
_imgBBox
.
getWidth
(),
_imgBBox
.
getHeight
(), bgCtrl.
getNxSample
(), bgCtrl.
getNySample
());
67
}
68
69
Background::Background
(
lsst::geom::Box2I
const
imageBBox,
int
const
nx,
int
const
ny)
70
: _imgBBox(imageBBox),
71
_bctrl(new
BackgroundControl
(nx, ny)),
72
_asUsedInterpStyle(
Interpolate
::UNKNOWN),
73
_asUsedUndersampleStyle(
THROW_EXCEPTION
),
74
_xcen(0),
75
_ycen(0),
76
_xorig(0),
77
_yorig(0),
78
_xsize(0),
79
_ysize(0) {
80
if
(
_imgBBox
.
isEmpty
()) {
81
throw
LSST_EXCEPT
(
ex::InvalidParameterError
,
"Image contains no pixels"
);
82
}
83
84
// Check that an int's large enough to hold the number of pixels
85
if
(
_imgBBox
.
getWidth
() *
static_cast<
double
>
(
_imgBBox
.
getHeight
()) >
std::numeric_limits<int>::max
()) {
86
throw
LSST_EXCEPT
(
lsst::pex::exceptions::OverflowError
,
87
str(
boost::format
(
"Image %dx%d has more pixels than fit in an int (%d)"
) %
88
_imgBBox
.
getWidth
() %
_imgBBox
.
getHeight
() %
std::numeric_limits<int>::max
()));
89
}
90
91
_setCenOrigSize(
_imgBBox
.
getWidth
(),
_imgBBox
.
getHeight
(), nx, ny);
92
}
93
94
void
Background::_setCenOrigSize(
int
const
width,
int
const
height,
int
const
nxSample,
int
const
nySample) {
95
_xcen
.
resize
(nxSample);
96
_ycen
.
resize
(nySample);
97
_xorig
.
resize
(nxSample);
98
_yorig
.
resize
(nySample);
99
_xsize
.
resize
(nxSample),
_ysize
.
resize
(nySample);
100
101
// Compute the centers and origins for the cells
102
for
(
int
iX = 0; iX < nxSample; ++iX) {
103
const
int
endx =
std::min
(((iX + 1) * width + nxSample / 2) / nxSample, width);
104
_xorig
[iX] = (iX == 0) ? 0 :
_xorig
[iX - 1] +
_xsize
[iX - 1];
105
_xsize
[iX] = endx -
_xorig
[iX];
106
_xcen
[iX] =
_xorig
[iX] + (0.5 *
_xsize
[iX]) - 0.5;
107
}
108
109
for
(
int
iY = 0; iY < nySample; ++iY) {
110
const
int
endy =
std::min
(((iY + 1) * height + nySample / 2) / nySample, height);
111
_yorig
[iY] = (iY == 0) ? 0 :
_yorig
[iY - 1] +
_ysize
[iY - 1];
112
_ysize
[iY] = endy -
_yorig
[iY];
113
_ycen
[iY] =
_yorig
[iY] + (0.5 *
_ysize
[iY]) - 0.5;
114
}
115
}
116
117
UndersampleStyle
stringToUndersampleStyle
(
std::string
const
& style) {
118
static
std::map<std::string, UndersampleStyle>
undersampleStrings;
119
if
(undersampleStrings.
size
() == 0) {
120
undersampleStrings[
"THROW_EXCEPTION"
] =
THROW_EXCEPTION
;
121
undersampleStrings[
"REDUCE_INTERP_ORDER"
] =
REDUCE_INTERP_ORDER
;
122
undersampleStrings[
"INCREASE_NXNYSAMPLE"
] =
INCREASE_NXNYSAMPLE
;
123
}
124
125
if
(undersampleStrings.
find
(style) == undersampleStrings.
end
()) {
126
throw
LSST_EXCEPT
(
ex::InvalidParameterError
,
"Understample style not defined: "
+ style);
127
}
128
return
undersampleStrings[style];
129
}
131
/*
132
* Explicit instantiations
133
*
134
*/
135
#define INSTANTIATE_BACKGROUND(TYPE) \
136
template Background::Background(image::Image<TYPE> const& img, BackgroundControl const& bgCtrl); \
137
template Background::Background(image::MaskedImage<TYPE> const& img, BackgroundControl const& bgCtrl); \
138
template std::shared_ptr<image::Image<TYPE>> Background::getImage<TYPE>(Interpolate::Style const, \
139
UndersampleStyle const) const;
140
141
INSTANTIATE_BACKGROUND(
float
)
142
143
}
// namespace math
145
}
// namespace afw
146
}
// namespace lsst
std::vector::resize
T resize(T... args)
lsst::afw::math::UndersampleStyle
UndersampleStyle
Definition:
Background.h:47
lsst::afw::math::REDUCE_INTERP_ORDER
@ REDUCE_INTERP_ORDER
Definition:
Background.h:47
std::string
STL class.
lsst::afw::math::BackgroundControl::getNxSample
int getNxSample() const
Definition:
Background.h:201
lsst::afw::math::Background::_ysize
std::vector< int > _ysize
y size ...
Definition:
Background.h:373
Background.h
lsst::geom::Box2I::getHeight
int getHeight() const noexcept
Definition:
Box.h:188
MaskedImage.h
std::map::find
T find(T... args)
std::map::size
T size(T... args)
pex.config.history.format
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition:
history.py:174
lsst::afw
Definition:
imageAlgorithm.dox:1
lsst::afw::math::Background::Background
Background(ImageT const &img, BackgroundControl const &bgCtrl)
Constructor for Background.
Definition:
Background.cc:44
lsst::afw::math::THROW_EXCEPTION
@ THROW_EXCEPTION
Definition:
Background.h:47
lsst::geom::Box2I::isEmpty
bool isEmpty() const noexcept
Return true if the box contains no points.
Definition:
Box.h:213
lsst::afw::math::Background::_yorig
std::vector< int > _yorig
y origin ...
Definition:
Background.h:371
Interpolate.h
lsst::geom::Box2I::getWidth
int getWidth() const noexcept
Definition:
Box.h:187
lsst::afw::math::Background::_xcen
std::vector< double > _xcen
x center pix coords of sub images
Definition:
Background.h:368
lsst::afw::math::BackgroundControl::getNySample
int getNySample() const
Definition:
Background.h:202
lsst::pex::exceptions::OverflowError
Reports when the result of an arithmetic operation is too large for the destination type.
Definition:
Runtime.h:124
lsst::afw::math::BackgroundControl
Pass parameters to a Background object.
Definition:
Background.h:56
std::map
STL class.
lsst::afw::math::Background::_xsize
std::vector< int > _xsize
x size of sub images
Definition:
Background.h:372
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
std::min
T min(T... args)
lsst::afw::math::Background::_xorig
std::vector< int > _xorig
x origin pix coords of sub images
Definition:
Background.h:370
lsst::pex::exceptions::InvalidParameterError
Reports invalid arguments.
Definition:
Runtime.h:66
Statistics.h
lsst::geom::Box2I
An integer coordinate rectangle.
Definition:
Box.h:55
lsst::afw::math::Background::_imgBBox
lsst::geom::Box2I _imgBBox
size and origin of input image
Definition:
Background.h:363
lsst::pex::exceptions
Definition:
Exception.h:37
lsst::afw::math::Interpolate
Definition:
Interpolate.h:36
std::map::end
T end(T... args)
lsst::afw::math::stringToUndersampleStyle
UndersampleStyle stringToUndersampleStyle(std::string const &style)
Conversion function to switch a string to an UndersampleStyle.
Definition:
Background.cc:117
lsst::afw::math::INCREASE_NXNYSAMPLE
@ INCREASE_NXNYSAMPLE
Definition:
Background.h:47
lsst::afw::math::Background::_ycen
std::vector< double > _ycen
y center ...
Definition:
Background.h:369
std::numeric_limits
Generated on Wed Jun 24 2020 18:10:04 for LSSTApplications by
1.8.18