[libcamera-devel] [PATCH] ipa: ipu3: awb: Add some documentation on the algorithm used

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Sep 2 14:56:50 CEST 2021


On 02/09/2021 12:51, Jean-Michel Hautbois wrote:
> The AWB algorithm is based on the Grey world algorithm and uses the
> statistics generated by the ImgU for that. Explain how it uses those,
> and reference the original algorithm at the same time.
> 
> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
> ---
>  src/ipa/ipu3/algorithms/awb.cpp | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp
> index d97724fa..f0b12d1a 100644
> --- a/src/ipa/ipu3/algorithms/awb.cpp
> +++ b/src/ipa/ipu3/algorithms/awb.cpp
> @@ -20,6 +20,32 @@ LOG_DEFINE_CATEGORY(IPU3Awb)
>  static constexpr uint32_t kMinZonesCounted = 16;
>  static constexpr uint32_t kMinGreenLevelInZone = 32;
>  
> +/**
> + * The Grey World algorithm assumes that the scene, in average, is neutral grey.
> + * Reference: Lam, Edmund & Fung, George. (2008). Automatic White Balancing in
> + * Digital Photography. 10.1201/9781420054538.ch10.

Does this mean that /this/ algorithm is an implementation of the Grey
World algorithm?

We should say so.

"""
This AWB algorithm module provides a simple Grey World algorithm
implementation based upon the procedures and methods described in
Automatic White Balancing in Digital Photography.

The Grey World algorithm assumes that the scene, in average, is a
neutral grey.

Reference: Lam, Edmund & Fung, George. (2008). Automatic White Balancing
in Digital Photography. 10.1201/9781420054538.ch10.
"""

> + *
> + * The IPU3 generates statistics from the Bayer Down Scaler output into a grid
> + * defined in the ipu3_uapi_awb_config_s structure.
> + *
> + * For example, when the BDS outputs a frame of 2592x1944, the grid may be
> + * configured to 81x30 cells each with a size of 32x64 pixels.
> + * We then have an average of 2048 R, G and B pixels per cell.
> + *
> + * The AWB algorithm uses a fixed grid size of kAwbStatsSizeX x kAwbStatsSizeY.

"This AWB algorithm" ?

But otherwise,

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

> + * Each of this new grid cell will be called a zone.
> + *
> + * Before calculating the gains, we will convert the statistics from the BDS
> + * grid to an internal grid configuration in generateAwbStats.
> + * As part of converting the statistics to an internal grid, the saturation
> + * flag from the originating grid cell is used to decide if the zone contains
> + * saturated pixels or not, making the zone relevant or not.
> + * A saturated zone will be excluded from the calculation.
> + *
> + * The Grey World algorithm will then estimate the red and blue gains to apply, and
> + * store the results in the metadata.
> + */
> +
>  /**
>   * \struct Accumulator
>   * \brief RGB statistics for a given region
> 


More information about the libcamera-devel mailing list