lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
src
detection
Threshold.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
#include <cstdint>
23
#include <cmath>
24
#include <string>
25
#include <boost/format.hpp>
26
#include "
lsst/pex/exceptions.h
"
27
#include "
lsst/log/Log.h
"
28
#include "
lsst/afw/math/Statistics.h
"
29
#include "
lsst/afw/image/Image.h
"
30
#include "
lsst/afw/image/MaskedImage.h
"
31
#include "
lsst/afw/detection/Threshold.h
"
32
33
namespace
lsst
{
34
namespace
afw
{
35
namespace
detection
{
36
37
Threshold::ThresholdType
Threshold::parseTypeString
(
std::string
const
& typeStr) {
38
if
(typeStr.
compare
(
"bitmask"
) == 0) {
39
return
Threshold::BITMASK
;
40
}
else
if
(typeStr.
compare
(
"value"
) == 0) {
41
return
Threshold::VALUE
;
42
}
else
if
(typeStr.
compare
(
"stdev"
) == 0) {
43
return
Threshold::STDEV
;
44
}
else
if
(typeStr.
compare
(
"variance"
) == 0) {
45
return
Threshold::VARIANCE
;
46
}
else
if
(typeStr.
compare
(
"pixel_stdev"
) == 0) {
47
return
Threshold::PIXEL_STDEV
;
48
}
else
{
49
throw
LSST_EXCEPT
(
lsst::pex::exceptions::InvalidParameterError
,
50
(boost::format(
"Unsupported Threshold type: %s"
) % typeStr).str());
51
}
52
}
53
54
std::string
Threshold::getTypeString
(
ThresholdType
const
& type) {
55
if
(type ==
VALUE
) {
56
return
"value"
;
57
}
else
if
(type ==
STDEV
) {
58
return
"stdev"
;
59
}
else
if
(type ==
VARIANCE
) {
60
return
"variance"
;
61
}
else
{
62
throw
LSST_EXCEPT
(
lsst::pex::exceptions::InvalidParameterError
,
63
(boost::format(
"Unsopported Threshold type: %d"
) % type).str());
64
}
65
}
66
67
double
Threshold::getValue
(
const
double
param)
const
{
68
switch
(_type) {
69
case
STDEV
:
70
if
(param <= 0) {
71
throw
LSST_EXCEPT
(
lsst::pex::exceptions::InvalidParameterError
,
72
(boost::format(
"St. dev. must be > 0: %g"
) % param).str());
73
}
74
return
_value * param;
75
case
VALUE
:
76
case
BITMASK
:
77
case
PIXEL_STDEV
:
78
return
_value;
79
case
VARIANCE
:
80
if
(param <= 0) {
81
throw
LSST_EXCEPT
(
lsst::pex::exceptions::InvalidParameterError
,
82
(boost::format(
"Variance must be > 0: %g"
) % param).str());
83
}
84
return
_value *
std::sqrt
(param);
85
default
:
86
throw
LSST_EXCEPT
(
lsst::pex::exceptions::InvalidParameterError
,
87
(boost::format(
"Unsupported type: %d"
) % _type).str());
88
}
89
}
90
91
template
<
typename
ImageT>
92
double
Threshold::getValue
(ImageT
const
&
image
)
const
{
93
double
param = -1;
// Parameter for getValue()
94
if
(_type ==
STDEV
|| _type ==
VARIANCE
) {
95
math::Statistics
stats =
math::makeStatistics
(
image
,
math::STDEVCLIP
);
96
double
const
sd = stats.
getValue
(
math::STDEVCLIP
);
97
98
LOGL_DEBUG
(
"lsst.afw.detection.threshold"
,
"St. Dev = %g"
, sd);
99
100
if
(_type ==
VARIANCE
) {
101
param = sd * sd;
102
}
else
{
103
param = sd;
104
}
105
}
106
return
getValue
(param);
107
}
108
109
Threshold
createThreshold
(
double
const
value,
std::string
const
typeStr,
bool
const
polarity) {
110
return
Threshold
(value,
Threshold::parseTypeString
(typeStr), polarity);
111
}
112
113
//
114
// Explicit instantiations
115
//
116
#define INSTANTIATE(TYPE) \
117
template double Threshold::getValue(image::TYPE<unsigned short> const&) const; \
118
template double Threshold::getValue(image::TYPE<int> const&) const; \
119
template double Threshold::getValue(image::TYPE<float> const&) const; \
120
template double Threshold::getValue(image::TYPE<double> const&) const; \
121
template double Threshold::getValue(image::TYPE<std::uint64_t> const&) const;
122
123
#ifndef DOXYGEN
124
INSTANTIATE
(Image);
125
INSTANTIATE
(MaskedImage);
126
#endif
127
}
// namespace detection
128
}
// namespace afw
129
}
// namespace lsst
INSTANTIATE
#define INSTANTIATE(FROMSYS, TOSYS)
Definition
Detector.cc:509
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
Log.h
LOGL_DEBUG
#define LOGL_DEBUG(logger, message...)
MaskedImage.h
Statistics.h
Threshold.h
std::string
lsst::afw::detection::Threshold
A Threshold is used to pass a threshold value to detection algorithms.
Definition
Threshold.h:43
lsst::afw::detection::Threshold::getTypeString
static std::string getTypeString(ThresholdType const &type)
Definition
Threshold.cc:54
lsst::afw::detection::Threshold::parseTypeString
static ThresholdType parseTypeString(std::string const &typeStr)
Definition
Threshold.cc:37
lsst::afw::detection::Threshold::getValue
double getValue(const double param=-1) const
return value of threshold, to be interpreted via type
Definition
Threshold.cc:67
lsst::afw::detection::Threshold::ThresholdType
ThresholdType
Types of threshold:
Definition
Threshold.h:46
lsst::afw::detection::Threshold::VARIANCE
@ VARIANCE
Use number of sigma given variance.
Definition
Threshold.h:50
lsst::afw::detection::Threshold::VALUE
@ VALUE
Use pixel value.
Definition
Threshold.h:47
lsst::afw::detection::Threshold::PIXEL_STDEV
@ PIXEL_STDEV
Use number of sigma given per-pixel s.d.
Definition
Threshold.h:51
lsst::afw::detection::Threshold::STDEV
@ STDEV
Use number of sigma given s.d.
Definition
Threshold.h:49
lsst::afw::detection::Threshold::BITMASK
@ BITMASK
Use (pixels & (given mask)).
Definition
Threshold.h:48
lsst::afw::math::Statistics
A class to evaluate image statistics.
Definition
Statistics.h:222
lsst::afw::math::Statistics::getValue
double getValue(Property const prop=NOTHING) const
Return the value of the desired property (if specified in the constructor).
Definition
Statistics.cc:1085
lsst::pex::exceptions::InvalidParameterError
std::string::compare
T compare(T... args)
exceptions.h
Image.h
lsst::afw::detection
Definition
Footprint.h:50
lsst::afw::detection::createThreshold
Threshold createThreshold(const double value, const std::string type="value", const bool polarity=true)
Factory method for creating Threshold objects.
Definition
Threshold.cc:109
lsst::afw::image
Definition
imageAlgorithm.dox:1
lsst::afw::math::makeStatistics
Statistics makeStatistics(lsst::afw::image::Image< Pixel > const &img, lsst::afw::image::Mask< image::MaskPixel > const &msk, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Handle a watered-down front-end to the constructor (no variance).
Definition
Statistics.h:361
lsst::afw::math::STDEVCLIP
@ STDEVCLIP
estimate sample N-sigma clipped stdev (N set in StatisticsControl, default=3)
Definition
Statistics.h:63
lsst::afw
Definition
imageAlgorithm.dox:1
lsst
std::sqrt
T sqrt(T... args)
Generated on
for lsst.afw by
1.17.0