libcamera
v0.5.0
Supporting cameras in Linux since 2019
|
The base class for creating histograms. More...
Public Member Functions | |
Histogram () | |
Construct an empty Histogram. More... | |
Histogram (Span< const uint32_t > data) | |
Create a cumulative histogram. More... | |
template<typename Transform , std::enable_if_t< std::is_invocable_v< Transform, uint32_t >> * = nullptr> | |
Histogram (Span< const uint32_t > data, Transform transform) | |
Create a cumulative histogram. More... | |
size_t | bins () const |
Retrieve the number of bins currently used by the Histogram. More... | |
const Span< const uint64_t > | data () const |
Retrieve the internal data. More... | |
uint64_t | total () const |
Retrieve the total number of values in the data set. More... | |
uint64_t | cumulativeFrequency (double bin) const |
Cumulative frequency up to a (fractional) point in a bin. More... | |
double | quantile (double q, uint32_t first=0, uint32_t last=UINT_MAX) const |
Return the (fractional) bin of the point through the histogram. More... | |
double | interQuantileMean (double lowQuantile, double hiQuantile) const |
Calculate the mean between two quantiles. More... | |
The base class for creating histograms.
This class stores a cumulative frequency histogram, which is a mapping that counts the cumulative number of observations in all of the bins up to the specified bin. It can be used to find quantiles and averages between quantiles.
|
inline |
libcamera::ipa::Histogram::Histogram | ( | Span< const uint32_t > | data | ) |
Create a cumulative histogram.
[in] | data | A (non-cumulative) histogram |
|
inline |
Create a cumulative histogram.
[in] | data | A (non-cumulative) histogram |
[in] | transform | The transformation function to apply to every bin |
|
inline |
Retrieve the number of bins currently used by the Histogram.
uint64_t libcamera::ipa::Histogram::cumulativeFrequency | ( | double | bin | ) | const |
Cumulative frequency up to a (fractional) point in a bin.
[in] | bin | The bin up to which to cumulate |
With F(p) the cumulative frequency of the histogram, the value is 0 at the bottom of the histogram, and the maximum is the number of bins. The pixels are spread evenly throughout the “bin” in which they lie, so that F(p) is a continuous (monotonically increasing) function.
|
inline |
Retrieve the internal data.
double libcamera::ipa::Histogram::interQuantileMean | ( | double | lowQuantile, |
double | highQuantile | ||
) | const |
Calculate the mean between two quantiles.
[in] | lowQuantile | low Quantile |
[in] | highQuantile | high Quantile |
Quantiles are not ideal for metering as they suffer several limitations. Instead, a concept is introduced here: inter-quantile mean. It returns the mean of all pixels between lowQuantile and highQuantile.
double libcamera::ipa::Histogram::quantile | ( | double | q, |
uint32_t | first = 0 , |
||
uint32_t | last = UINT_MAX |
||
) | const |
Return the (fractional) bin of the point through the histogram.
[in] | q | the desired point (0 <= q <= 1) |
[in] | first | low limit (default is 0) |
[in] | last | high limit (default is UINT_MAX) |
A quantile gives us the point p = Q(q) in the range such that a proportion q of the pixels lie below p. A familiar quantile is Q(0.5) which is the median of a distribution.
|
inline |
Retrieve the total number of values in the data set.