[libcamera-devel] [PATCH] ipa: rpi: Allow the mean of an empty histogram interval
Nick Hollinghurst
nick.hollinghurst at raspberrypi.com
Wed Dec 6 18:27:43 CET 2023
Don't assert when taking the weighted mean of a zero-width or
zero-weight interval; return its upper bound. That is certainly
correct in the zero-width case, and plausible otherwise.
Signed-off-by: Nick Hollinghurst <nick.hollinghurst at raspberrypi.com>
---
src/ipa/rpi/controller/histogram.cpp | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/ipa/rpi/controller/histogram.cpp b/src/ipa/rpi/controller/histogram.cpp
index 0a27ba2c..78116141 100644
--- a/src/ipa/rpi/controller/histogram.cpp
+++ b/src/ipa/rpi/controller/histogram.cpp
@@ -47,7 +47,7 @@ double Histogram::quantile(double q, int first, int last) const
double Histogram::interBinMean(double binLo, double binHi) const
{
- assert(binHi > binLo);
+ assert(binHi >= binLo);
double sumBinFreq = 0, cumulFreq = 0;
for (double binNext = floor(binLo) + 1.0; binNext <= ceil(binHi);
binLo = binNext, binNext += 1.0) {
@@ -57,13 +57,19 @@ double Histogram::interBinMean(double binLo, double binHi) const
sumBinFreq += bin * freq;
cumulFreq += freq;
}
+
+ if (cumulFreq == 0) {
+ /* interval had zero width or contained no weight? */
+ return binHi;
+ }
+
/* add 0.5 to give an average for bin mid-points */
return sumBinFreq / cumulFreq + 0.5;
}
double Histogram::interQuantileMean(double qLo, double qHi) const
{
- assert(qHi > qLo);
+ assert(qHi >= qLo);
double pLo = quantile(qLo);
double pHi = quantile(qHi, (int)pLo);
return interBinMean(pLo, pHi);
--
2.39.2
More information about the libcamera-devel
mailing list