lsst.ip.diffim
g174f8ebed5+9bac6ea756
Toggle main menu visibility
Loading...
Searching...
No Matches
include
lsst
ip
diffim
ImageStatistics.h
Go to the documentation of this file.
1
// -*- lsst-c++ -*-
2
3
/*
4
* LSST Data Management System
5
* Copyright 2008, 2009, 2010 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 <http://www.lsstcorp.org/LegalNotices/>.
23
*/
24
34
35
#ifndef LSST_IP_DIFFIM_IMAGESTATISTICS_H
36
#define LSST_IP_DIFFIM_IMAGESTATISTICS_H
37
38
#include <cmath>
39
#include <limits>
40
#include <memory>
41
42
#include "
lsst/afw/image.h
"
43
#include "
lsst/log/Log.h
"
44
#include "
lsst/daf/base/PropertySet.h
"
45
46
namespace
lsst
{
47
namespace
ip
{
48
namespace
diffim
{
49
58
template
<
typename
PixelT>
59
class
ImageStatistics
{
60
public
:
61
typedef
std::shared_ptr<ImageStatistics>
Ptr
;
62
typedef
typename
lsst::afw::image::MaskedImage<PixelT>::x_iterator
x_iterator
;
63
64
ImageStatistics
(
lsst::daf::base::PropertySet
const
& ps) :
65
_xsum(0.), _x2sum(0.), _npix(0), _bpMask(0) {
66
67
std::vector<std::string>
detBadMaskPlanes = ps.
getArray
<
std::string
>(
"badMaskPlanes"
);
68
for
(std::vector<std::string>::iterator mi = detBadMaskPlanes.
begin
();
69
mi != detBadMaskPlanes.
end
(); ++mi){
70
71
try {
72
_bpMask |= lsst::afw::image::Mask<lsst::afw::image::MaskPixel>::getPlaneBitMask(*mi);
73
} catch (
pexExcept::Exception
& e) {
74
LOGL_DEBUG
(
"TRACE4.ip.diffim.ImageStatistics"
,
75
"Cannot update bad bit mask with %s"
, (*mi).c_str());
76
LOGL_DEBUG
(
"TRACE5.ip.diffim.ImageStatistics"
,
77
e.
what
());
78
}
79
}
80
} ;
81
virtual
~ImageStatistics
() {} ;
82
83
// Clear the accumulators
84
void
reset
() { _xsum = _x2sum = 0.; _npix = 0;}
85
86
// Work your magic
87
void
apply
(
lsst::afw::image::MaskedImage<PixelT>
const
&
image
) {
88
apply
(
image
, -1);
89
}
90
91
void
apply
(
lsst::afw::image::MaskedImage<PixelT>
const
&
image
,
int
core) {
92
reset
();
93
int
y0, y1, x0, x1;
94
if
(core == -1) {
95
y0 = 0;
96
y1 =
image
.getHeight();
97
x0 = 0;
98
x1 =
image
.getWidth();
99
}
100
else
{
101
y0 =
std::max
(0,
image
.getHeight()/2 - core);
102
y1 =
std::min
(
image
.getHeight(),
image
.getHeight()/2 + core + 1);
103
x0 =
std::max
(0,
image
.getWidth()/2 - core);
104
x1 =
std::min
(
image
.getWidth(),
image
.getWidth()/2 + core + 1);
105
}
106
107
for
(
int
y = y0; y != y1; ++y) {
108
for
(
x_iterator
ptr =
image
.x_at(x0, y), end =
image
.x_at(x1, y);
109
ptr != end; ++ptr) {
110
if
(!((*ptr).mask() & _bpMask)) {
111
double
const
ivar = 1. / (*ptr).variance();
112
if
(
std::isfinite
(ivar)) {
113
_xsum += (*ptr).image() * sqrt(ivar);
114
_x2sum += (*ptr).image() * (*ptr).image() * ivar;
115
_npix += 1;
116
}
117
}
118
}
119
}
120
if
((!
std::isfinite
(_xsum)) || (!
std::isfinite
(_x2sum))) {
121
throw
LSST_EXCEPT
(
pexExcept::Exception
,
122
"Nan/Inf in ImageStatistics.apply"
);
123
}
124
}
125
126
void
setBpMask
(
lsst::afw::image::MaskPixel
bpMask) {_bpMask = bpMask;}
127
lsst::afw::image::MaskPixel
getBpMask
() {
return
_bpMask;}
128
129
// Mean of distribution
130
double
getMean
()
const
{
131
return
(_npix > 0) ? _xsum/_npix :
std::numeric_limits<double>::quiet_NaN
();
132
}
133
// Variance of distribution
134
double
getVariance
()
const
{
135
return
(_npix > 1) ? (_x2sum/_npix - _xsum/_npix * _xsum/_npix) * _npix/(_npix-1.) :
136
std::numeric_limits<double>::quiet_NaN
();
137
}
138
// RMS
139
double
getRms
()
const
{
140
return
sqrt(
getVariance
());
141
}
142
// Return the number of good pixels
143
int
getNpix
()
const
{
return
_npix; }
144
145
// Return Sdqa rating
146
bool
evaluateQuality
(
lsst::daf::base::PropertySet
const
& ps) {
147
if
( fabs(
getMean
()) > ps.
getAsDouble
(
"maximumFootprintResidualMean"
) )
return
false
;
148
if
(
getRms
() > ps.
getAsDouble
(
"maximumFootprintResidualStd"
) )
return
false
;
149
return
true
;
150
}
151
152
private
:
153
double
_xsum;
154
double
_x2sum;
155
int
_npix;
156
lsst::afw::image::MaskPixel
_bpMask;
157
};
158
159
160
}}}
// end of namespace lsst::ip::diffim
161
162
163
#endif
Log.h
LOGL_DEBUG
#define LOGL_DEBUG(logger, message...)
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
PropertySet.h
std::string
std::vector::begin
T begin(T... args)
lsst::afw::image::MaskedImage
lsst::afw::image::MaskedImage::x_iterator
MaskedImageIterator< typename Image::x_iterator, typename Mask::x_iterator, typename Variance::x_iterator > x_iterator
lsst::daf::base::PropertySet
lsst::daf::base::PropertySet::getArray
std::vector< T > getArray(std::string const &name) const
lsst::daf::base::PropertySet::getAsDouble
double getAsDouble(std::string const &name) const
lsst::ip::diffim::ImageStatistics::reset
void reset()
Definition
ImageStatistics.h:84
lsst::ip::diffim::ImageStatistics::setBpMask
void setBpMask(lsst::afw::image::MaskPixel bpMask)
Definition
ImageStatistics.h:126
lsst::ip::diffim::ImageStatistics::ImageStatistics
ImageStatistics(lsst::daf::base::PropertySet const &ps)
Definition
ImageStatistics.h:64
lsst::ip::diffim::ImageStatistics::getNpix
int getNpix() const
Definition
ImageStatistics.h:143
lsst::ip::diffim::ImageStatistics::getMean
double getMean() const
Definition
ImageStatistics.h:130
lsst::ip::diffim::ImageStatistics::apply
void apply(lsst::afw::image::MaskedImage< PixelT > const &image, int core)
Definition
ImageStatistics.h:91
lsst::ip::diffim::ImageStatistics::getRms
double getRms() const
Definition
ImageStatistics.h:139
lsst::ip::diffim::ImageStatistics::apply
void apply(lsst::afw::image::MaskedImage< PixelT > const &image)
Definition
ImageStatistics.h:87
lsst::ip::diffim::ImageStatistics::Ptr
std::shared_ptr< ImageStatistics > Ptr
Definition
ImageStatistics.h:61
lsst::ip::diffim::ImageStatistics::~ImageStatistics
virtual ~ImageStatistics()
Definition
ImageStatistics.h:81
lsst::ip::diffim::ImageStatistics::getVariance
double getVariance() const
Definition
ImageStatistics.h:134
lsst::ip::diffim::ImageStatistics::x_iterator
lsst::afw::image::MaskedImage< PixelT >::x_iterator x_iterator
Definition
ImageStatistics.h:62
lsst::ip::diffim::ImageStatistics::evaluateQuality
bool evaluateQuality(lsst::daf::base::PropertySet const &ps)
Definition
ImageStatistics.h:146
lsst::ip::diffim::ImageStatistics::getBpMask
lsst::afw::image::MaskPixel getBpMask()
Definition
ImageStatistics.h:127
lsst::pex::exceptions::Exception
lsst::pex::exceptions::Exception::what
virtual char const * what(void) const noexcept
std::vector::end
T end(T... args)
image.h
std::isfinite
T isfinite(T... args)
std::max
T max(T... args)
std::min
T min(T... args)
lsst::afw::image
lsst::afw::image::MaskPixel
std::int32_t MaskPixel
lsst::ip::diffim
Definition
AssessSpatialKernelVisitor.h:22
lsst::ip
Definition
AssessSpatialKernelVisitor.h:21
lsst
std::numeric_limits::quiet_NaN
T quiet_NaN(T... args)
std::shared_ptr
std::vector
Generated on
for lsst.ip.diffim by
1.17.0