LSST Applications g0f08755f38+82efc23009,g12f32b3c4e+e7bdf1200e,g1653933729+a8ce1bb630,g1a0ca8cf93+50eff2b06f,g28da252d5a+52db39f6a5,g2bbee38e9b+37c5a29d61,g2bc492864f+37c5a29d61,g2cdde0e794+c05ff076ad,g3156d2b45e+41e33cbcdc,g347aa1857d+37c5a29d61,g35bb328faa+a8ce1bb630,g3a166c0a6a+37c5a29d61,g3e281a1b8c+fb992f5633,g414038480c+7f03dfc1b0,g41af890bb2+11b950c980,g5fbc88fb19+17cd334064,g6b1c1869cb+12dd639c9a,g781aacb6e4+a8ce1bb630,g80478fca09+72e9651da0,g82479be7b0+04c31367b4,g858d7b2824+82efc23009,g9125e01d80+a8ce1bb630,g9726552aa6+8047e3811d,ga5288a1d22+e532dc0a0b,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+37c5a29d61,gcf0d15dbbd+2acd6d4d48,gd7358e8bfb+778a810b6e,gda3e153d99+82efc23009,gda6a2b7d83+2acd6d4d48,gdaeeff99f8+1711a396fd,ge2409df99d+6b12de1076,ge79ae78c31+37c5a29d61,gf0baf85859+d0a5978c5a,gf3967379c6+4954f8c433,gfb92a5be7c+82efc23009,gfec2e1e490+2aaed99252,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
Statistics.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
25#if !defined(LSST_AFW_MATH_STATISTICS_H)
26#define LSST_AFW_MATH_STATISTICS_H
27
28#include <algorithm>
29#include <cassert>
30#include <limits>
31#include "boost/iterator/iterator_adaptor.hpp"
32#include <memory>
35
36namespace lsst {
37namespace afw {
38namespace image {
39template <typename>
40class Image;
41template <typename, typename, typename>
42class MaskedImage;
43} // namespace image
44namespace math {
45template <typename>
46class MaskedVector; // forward declaration
47
48using WeightPixel = lsst::afw::image::VariancePixel; // Type used for weights
49
54 NOTHING = 0x0,
55 ERRORS = 0x1,
56 NPOINT = 0x2,
57 MEAN = 0x4,
58 STDEV = 0x8,
59 VARIANCE = 0x10,
60 MEDIAN = 0x20,
61 IQRANGE = 0x40,
62 MEANCLIP = 0x80,
63 STDEVCLIP = 0x100,
64 VARIANCECLIP = 0x200,
66 MIN = 0x400,
67 MAX = 0x800,
68 SUM = 0x1000,
69 MEANSQUARE = 0x2000,
70 ORMASK = 0x4000,
71 NCLIPPED = 0x8000,
72 NMASKED = 0x10000
73};
75Property stringToStatisticsProperty(std::string const property);
76
84public:
85 enum WeightsBoolean { WEIGHTS_FALSE = 0, WEIGHTS_TRUE = 1, WEIGHTS_NONE }; // initial state is NONE
86
87 StatisticsControl(double numSigmaClip = 3.0,
88 int numIter = 3,
90 0x0,
91 bool isNanSafe = true,
92 WeightsBoolean useWeights =
94 )
95 : _numSigmaClip(numSigmaClip),
96 _numIter(numIter),
97 _andMask(andMask),
98 _noGoodPixelsMask(0x0),
99 _isNanSafe(isNanSafe),
100 _useWeights(useWeights),
101 _calcErrorFromInputVariance(false),
102 _calcErrorMosaicMode(false),
103 _maskPropagationThresholds() {
104 try {
105 _noGoodPixelsMask = lsst::afw::image::Mask<>::getPlaneBitMask("NO_DATA");
107 ; // Mask has no NO_DATA plane defined
108 }
109
110 assert(_numSigmaClip > 0);
111 assert(_numIter > 0);
112 }
113
115
120 double getMaskPropagationThreshold(int bit) const;
121 void setMaskPropagationThreshold(int bit, double threshold);
123
124 double getNumSigmaClip() const noexcept { return _numSigmaClip; }
125 int getNumIter() const noexcept { return _numIter; }
126 int getAndMask() const noexcept { return _andMask; }
127 int getNoGoodPixelsMask() const noexcept { return _noGoodPixelsMask; }
128 bool getNanSafe() const noexcept { return _isNanSafe; }
129 bool getWeighted() const noexcept { return _useWeights == WEIGHTS_TRUE ? true : false; }
130 bool getWeightedIsSet() const noexcept { return _useWeights != WEIGHTS_NONE ? true : false; }
131 bool getCalcErrorFromInputVariance() const noexcept { return _calcErrorFromInputVariance; }
132 bool getCalcErrorMosaicMode() const noexcept { return _calcErrorMosaicMode; }
133
134 void setNumSigmaClip(double numSigmaClip) {
135 if (!(numSigmaClip > 0)) {
137 "numSigmaClip has to be positive.");
138 }
139 _numSigmaClip = numSigmaClip;
140 }
141 void setNumIter(int numIter) {
142 if (!(numIter > 0)) {
144 "numIter has to be positive.");
145 }
146 _numIter = numIter;
147 }
148 void setAndMask(int andMask) { _andMask = andMask; }
149 void setNoGoodPixelsMask(int noGoodPixelsMask) { _noGoodPixelsMask = noGoodPixelsMask; }
150 void setNanSafe(bool isNanSafe) noexcept { _isNanSafe = isNanSafe; }
151 void setWeighted(bool useWeights) noexcept { _useWeights = useWeights ? WEIGHTS_TRUE : WEIGHTS_FALSE; }
152 void setCalcErrorFromInputVariance(bool calcErrorFromInputVariance) noexcept {
153 _calcErrorFromInputVariance = calcErrorFromInputVariance;
154 }
155 void setCalcErrorMosaicMode(bool calcErrorMosaicMode) noexcept {
156 _calcErrorMosaicMode = calcErrorMosaicMode;
157 }
158
159private:
160 friend class Statistics;
161
162 double _numSigmaClip; // Number of standard deviations to clip at
163 int _numIter; // Number of iterations
164 int _andMask; // and-Mask to specify which mask planes to ignore
165 int _noGoodPixelsMask; // mask to set if no values are acceptable
166 bool _isNanSafe; // Check for NaNs & Infs before running (slower)
167 WeightsBoolean _useWeights; // Calculate weighted statistics (enum because of 3-valued logic)
168 bool _calcErrorFromInputVariance; // Calculate errors from the input variances, if available
169 bool _calcErrorMosaicMode; // Calculate errors by taking mean of input variances
170 std::vector<double> _maskPropagationThresholds; // Thresholds for when to propagate mask bits,
171 // treated like a dict (unset bits are set to 1.0)
172};
173
222class Statistics final {
223public:
226
239 template <typename ImageT, typename MaskT, typename VarianceT>
240 explicit Statistics(ImageT const &img, MaskT const &msk, VarianceT const &var, int const flags,
241 StatisticsControl const &sctrl = StatisticsControl());
242
251 template <typename ImageT, typename MaskT, typename VarianceT, typename WeightT>
252 explicit Statistics(ImageT const &img, MaskT const &msk, VarianceT const &var, WeightT const &weights,
253 int const flags, StatisticsControl const &sctrl = StatisticsControl());
254
255 Statistics(Statistics const &) = default;
256 Statistics(Statistics &&) = default;
257 Statistics &operator=(Statistics const &) = default;
259 ~Statistics() noexcept = default;
260
274 Value getResult(Property const prop = NOTHING) const;
275
283 double getError(Property const prop = NOTHING) const;
289 double getValue(Property const prop = NOTHING) const;
290 lsst::afw::image::MaskPixel getOrMask() const noexcept { return _allPixelOrMask; }
291
292private:
293 long _flags; // The desired calculation
294
295 int _n; // number of pixels in the image
296 Value _mean; // the image's mean
297 Value _variance; // the image's variance
298 double _min; // the image's minimum
299 double _max; // the image's maximum
300 double _sum; // the sum of all the image's pixels
301 Value _meanclip; // the image's N-sigma clipped mean
302 Value _varianceclip; // the image's N-sigma clipped variance
303 Value _median; // the image's median
304 int _nClipped; // number of pixels clipped
305 int _nMasked; // number of pixels masked
306 double _iqrange; // the image's interquartile range
307 lsst::afw::image::MaskPixel _allPixelOrMask; // the 'or' of all masked pixels
308
309 StatisticsControl _sctrl; // the control structure
310 bool _weightsAreMultiplicative; // Multiply by weights rather than dividing by them
311
320 template <typename ImageT, typename MaskT, typename VarianceT, typename WeightT>
321 void doStatistics(ImageT const &img, MaskT const &msk, VarianceT const &var, WeightT const &weights,
322 int const flags, StatisticsControl const &sctrl);
323};
324
325/* ************************************ The factory functions ********************************* */
330template <typename ValueT>
331class infinite_iterator : public boost::iterator_adaptor<infinite_iterator<ValueT>, const ValueT *,
332 const ValueT, boost::forward_traversal_tag> {
333public:
334 infinite_iterator() : infinite_iterator::iterator_adaptor_(0) {}
335 explicit infinite_iterator(const ValueT *p) : infinite_iterator::iterator_adaptor_(p) {}
336
337private:
339 void increment() noexcept { ; } // never actually advance the iterator
340};
345template <typename ValueT>
347public:
349 explicit MaskImposter(ValueT val = 0) noexcept { _val[0] = val; }
350 x_iterator row_begin(int) const noexcept { return x_iterator(_val); }
351
352private:
353 ValueT _val[1];
354};
355
360template <typename Pixel>
362 lsst::afw::image::Mask<image::MaskPixel> const &msk, int const flags,
363 StatisticsControl const &sctrl = StatisticsControl()) {
365 return Statistics(img, msk, var, flags, sctrl);
366}
367
372template <typename ImageT, typename MaskT, typename VarianceT>
373Statistics makeStatistics(ImageT const &img, MaskT const &msk, VarianceT const &var, int const flags,
374 StatisticsControl const &sctrl = StatisticsControl()) {
375 return Statistics(img, msk, var, flags, sctrl);
376}
377
382template <typename Pixel>
384 StatisticsControl const &sctrl = StatisticsControl()) {
385 if (sctrl.getWeighted() || sctrl.getCalcErrorFromInputVariance() || sctrl.getCalcErrorMosaicMode()) {
386 return Statistics(*mimg.getImage(), *mimg.getMask(), *mimg.getVariance(), flags, sctrl);
387 } else {
389 return Statistics(*mimg.getImage(), *mimg.getMask(), var, flags, sctrl);
390 }
391}
392
397template <typename Pixel>
399 lsst::afw::image::Image<WeightPixel> const &weights, int const flags,
400 StatisticsControl const &sctrl = StatisticsControl()) {
401 if (sctrl.getWeighted() || sctrl.getCalcErrorFromInputVariance() || sctrl.getCalcErrorMosaicMode() ||
402 (!sctrl.getWeightedIsSet() && (weights.getWidth() != 0 && weights.getHeight() != 0))) {
403 return Statistics(*mimg.getImage(), *mimg.getMask(), *mimg.getVariance(), weights, flags, sctrl);
404 } else {
406 return Statistics(*mimg.getImage(), *mimg.getMask(), var, weights, flags, sctrl);
407 }
408}
409
420 StatisticsControl const &sctrl = StatisticsControl());
421
426template <typename Pixel>
429 int const flags,
430 StatisticsControl const &sctrl = StatisticsControl()
431) {
432 // make a phony mask that will be compiled out
435 return Statistics(img, msk, var, flags, sctrl);
436}
437
442template <typename ValueT>
443class ImageImposter final {
444public:
445 // types we'll use in Statistics
446 using x_iterator = typename std::vector<ValueT>::const_iterator;
447 using fast_iterator = typename std::vector<ValueT>::const_iterator;
448 using Pixel = ValueT;
449
450 // constructors for std::vector<>, and copy constructor
451 // These are both shallow! ... no actual copying of values
452 explicit ImageImposter(std::vector<ValueT> const &v) : _v(v) {}
453 explicit ImageImposter(ImageImposter<ValueT> const &img) : _v(img._getVector()) {}
454
455 // The methods we'll use in Statistics
456 x_iterator row_begin(int) const noexcept { return _v.begin(); }
457 x_iterator row_end(int) const noexcept { return _v.end(); }
458 int getWidth() const noexcept { return _v.size(); }
459 int getHeight() const noexcept { return 1; }
463
464 bool empty() const noexcept { return _v.empty(); }
465
466private:
467 std::vector<ValueT> const &_v; // a private reference to the data
468 std::vector<ValueT> const &_getVector() const { return _v; } // get the ref for the copyCon
469};
470
475template <typename EntryT>
477 int const flags,
478 StatisticsControl const &sctrl = StatisticsControl()
479) {
480 ImageImposter<EntryT> img(v); // wrap the vector in a fake image
481 MaskImposter<lsst::afw::image::MaskPixel> msk; // instantiate a fake mask that will be compiled out.
483 return Statistics(img, msk, var, flags, sctrl);
484}
485
490template <typename EntryT>
492 std::vector<WeightPixel> const &vweights,
493 int const flags,
494 StatisticsControl const &sctrl = StatisticsControl()
495) {
496 ImageImposter<EntryT> img(v); // wrap the vector in a fake image
497 MaskImposter<lsst::afw::image::MaskPixel> msk; // instantiate a fake mask that will be compiled out.
499
500 ImageImposter<WeightPixel> weights(vweights);
501
502 return Statistics(img, msk, var, weights, flags, sctrl);
503}
504
509template <typename EntryT>
511 int const flags,
512 StatisticsControl const &sctrl = StatisticsControl()
513) {
514 if (sctrl.getWeighted() || sctrl.getCalcErrorFromInputVariance() || sctrl.getCalcErrorMosaicMode()) {
515 return Statistics(*mv.getImage(), *mv.getMask(), *mv.getVariance(), flags, sctrl);
516 } else {
518 return Statistics(*mv.getImage(), *mv.getMask(), var, flags, sctrl);
519 }
520}
521
526template <typename EntryT>
528 std::vector<WeightPixel> const &vweights,
529 int const flags,
530 StatisticsControl const &sctrl = StatisticsControl()
531) {
532 ImageImposter<WeightPixel> weights(vweights);
533
534 if (sctrl.getWeighted() || sctrl.getCalcErrorFromInputVariance() || sctrl.getCalcErrorMosaicMode()) {
535 return Statistics(*mv.getImage(), *mv.getMask(), *mv.getVariance(), weights, flags, sctrl);
536 } else {
538 return Statistics(*mv.getImage(), *mv.getMask(), var, weights, flags, sctrl);
539 }
540}
541} // namespace math
542} // namespace afw
543} // namespace lsst
544
545#endif
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
T begin(T... args)
int getWidth() const
Return the number of columns in the image.
Definition ImageBase.h:294
int getHeight() const
Return the number of rows in the image.
Definition ImageBase.h:296
A class to represent a 2-dimensional array of pixels.
Definition Image.h:51
Represent a 2-dimensional array of bitmask pixels.
Definition Mask.h:81
A class to manipulate images, masks, and variance as a single object.
Definition MaskedImage.h:74
VariancePtr getVariance() const
Return a (shared_ptr to) the MaskedImage's variance.
MaskPtr getMask() const
Return a (shared_ptr to) the MaskedImage's mask.
ImagePtr getImage() const
Return a (shared_ptr to) the MaskedImage's image.
A vector wrapper to provide a vector with the necessary methods and typedefs to be processed by Stati...
Definition Statistics.h:443
lsst::geom::Extent2I getDimensions() const noexcept
Definition Statistics.h:460
x_iterator row_begin(int) const noexcept
Definition Statistics.h:456
typename std::vector< ValueT >::const_iterator fast_iterator
Definition Statistics.h:447
ImageImposter(ImageImposter< ValueT > const &img)
Definition Statistics.h:453
ImageImposter(std::vector< ValueT > const &v)
Definition Statistics.h:452
typename std::vector< ValueT >::const_iterator x_iterator
Definition Statistics.h:446
bool empty() const noexcept
Definition Statistics.h:464
int getWidth() const noexcept
Definition Statistics.h:458
x_iterator row_end(int) const noexcept
Definition Statistics.h:457
int getHeight() const noexcept
Definition Statistics.h:459
A Mask wrapper to provide an infinite_iterator for Mask::row_begin().
Definition Statistics.h:346
infinite_iterator< ValueT > x_iterator
Definition Statistics.h:348
MaskImposter(ValueT val=0) noexcept
Definition Statistics.h:349
x_iterator row_begin(int) const noexcept
Definition Statistics.h:350
lsst::afw::image::MaskedImage< EntryT >::VariancePtr getVariance() const
lsst::afw::image::MaskedImage< EntryT >::MaskPtr getMask() const
lsst::afw::image::MaskedImage< EntryT >::ImagePtr getImage() const
Pass parameters to a Statistics object.
Definition Statistics.h:83
void setNumSigmaClip(double numSigmaClip)
Definition Statistics.h:134
double getMaskPropagationThreshold(int bit) const
When pixels with the given bit are rejected, we count what fraction the rejected pixels would have co...
void setCalcErrorMosaicMode(bool calcErrorMosaicMode) noexcept
Definition Statistics.h:155
bool getCalcErrorFromInputVariance() const noexcept
Definition Statistics.h:131
int getAndMask() const noexcept
Definition Statistics.h:126
StatisticsControl(double numSigmaClip=3.0, int numIter=3, lsst::afw::image::MaskPixel andMask=0x0, bool isNanSafe=true, WeightsBoolean useWeights=WEIGHTS_NONE)
Definition Statistics.h:87
void setCalcErrorFromInputVariance(bool calcErrorFromInputVariance) noexcept
Definition Statistics.h:152
bool getWeightedIsSet() const noexcept
Definition Statistics.h:130
void setMaskPropagationThreshold(int bit, double threshold)
void setWeighted(bool useWeights) noexcept
Definition Statistics.h:151
double getNumSigmaClip() const noexcept
Definition Statistics.h:124
bool getWeighted() const noexcept
Definition Statistics.h:129
int getNoGoodPixelsMask() const noexcept
Definition Statistics.h:127
int getNumIter() const noexcept
Definition Statistics.h:125
bool getCalcErrorMosaicMode() const noexcept
Definition Statistics.h:132
bool getNanSafe() const noexcept
Definition Statistics.h:128
void setNoGoodPixelsMask(int noGoodPixelsMask)
Definition Statistics.h:149
void setNanSafe(bool isNanSafe) noexcept
Definition Statistics.h:150
A class to evaluate image statistics.
Definition Statistics.h:222
Statistics makeStatistics(lsst::afw::image::Image< Pixel > const &img, int const flags, StatisticsControl const &sctrl=StatisticsControl())
The makeStatistics() overload to handle regular (non-masked) Images.
Definition Statistics.h:427
Statistics makeStatistics(std::vector< EntryT > const &v, int const flags, StatisticsControl const &sctrl=StatisticsControl())
The makeStatistics() overload to handle std::vector<>
Definition Statistics.h:476
Statistics makeStatistics(lsst::afw::image::MaskedImage< Pixel > const &mimg, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Handle MaskedImages, just pass the getImage() and getMask() values right on through.
Definition Statistics.h:383
Statistics & operator=(Statistics const &)=default
Value getResult(Property const prop=NOTHING) const
Return the value and error in the specified statistic (e.g.
Statistics makeStatistics(ImageT const &img, MaskT const &msk, VarianceT const &var, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Handle a straight front-end to the constructor.
Definition Statistics.h:373
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
double getError(Property const prop=NOTHING) const
Return the error in the desired property (if specified in the constructor)
Statistics & operator=(Statistics &&)=default
~Statistics() noexcept=default
Statistics makeStatistics(lsst::afw::math::MaskedVector< EntryT > const &mv, std::vector< WeightPixel > const &vweights, int const flags, StatisticsControl const &sctrl=StatisticsControl())
The makeStatistics() overload to handle lsst::afw::math::MaskedVector<>
Definition Statistics.h:527
Statistics makeStatistics(lsst::afw::math::MaskedVector< EntryT > const &mv, int const flags, StatisticsControl const &sctrl=StatisticsControl())
The makeStatistics() overload to handle lsst::afw::math::MaskedVector<>
Definition Statistics.h:510
Statistics makeStatistics(lsst::afw::image::MaskedImage< Pixel > const &mimg, lsst::afw::image::Image< WeightPixel > const &weights, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Handle MaskedImages, just pass the getImage() and getMask() values right on through.
Definition Statistics.h:398
Statistics(ImageT const &img, MaskT const &msk, VarianceT const &var, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Constructor for Statistics object.
double getValue(Property const prop=NOTHING) const
Return the value of the desired property (if specified in the constructor)
std::pair< double, double > Value
The type used to report (value, error) for desired statistics.
Definition Statistics.h:225
Statistics makeStatistics(std::vector< EntryT > const &v, std::vector< WeightPixel > const &vweights, int const flags, StatisticsControl const &sctrl=StatisticsControl())
The makeStatistics() overload to handle std::vector<>
Definition Statistics.h:491
Statistics(Statistics const &)=default
lsst::afw::image::MaskPixel getOrMask() const noexcept
Definition Statistics.h:290
Statistics(Statistics &&)=default
This iterator will never increment.
Definition Statistics.h:332
friend class boost::iterator_core_access
Definition Statistics.h:338
Reports invalid arguments.
Definition Runtime.h:66
T empty(T... args)
T end(T... args)
float VariancePixel
default type for MaskedImage variance images
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::image::VariancePixel WeightPixel
Definition Statistics.h:48
Property
control what is calculated
Definition Statistics.h:53
@ ORMASK
get the or-mask of all pixels used.
Definition Statistics.h:70
@ ERRORS
Include errors of requested quantities.
Definition Statistics.h:55
@ VARIANCECLIP
estimate sample N-sigma clipped variance (N set in StatisticsControl, default=3)
Definition Statistics.h:64
@ MEANSQUARE
find mean value of square of pixel values
Definition Statistics.h:69
@ MIN
estimate sample minimum
Definition Statistics.h:66
@ NCLIPPED
number of clipped points
Definition Statistics.h:71
@ NOTHING
We don't want anything.
Definition Statistics.h:54
@ STDEV
estimate sample standard deviation
Definition Statistics.h:58
@ NMASKED
number of masked points
Definition Statistics.h:72
@ STDEVCLIP
estimate sample N-sigma clipped stdev (N set in StatisticsControl, default=3)
Definition Statistics.h:63
@ VARIANCE
estimate sample variance
Definition Statistics.h:59
@ MEDIAN
estimate sample median
Definition Statistics.h:60
@ MAX
estimate sample maximum
Definition Statistics.h:67
@ SUM
find sum of pixels in the image
Definition Statistics.h:68
@ IQRANGE
estimate sample inter-quartile range
Definition Statistics.h:61
@ MEAN
estimate sample mean
Definition Statistics.h:57
@ NPOINT
number of sample points
Definition Statistics.h:56
Property stringToStatisticsProperty(std::string const property)
Conversion function to switch a string to a Property (see Statistics.h)
Extent< int, 2 > Extent2I
Definition Extent.h:397
T size(T... args)
ImageT val
Definition CR.cc:146
g2d::python::Image< double > Image
Definition test_image.cc:14