[PATCH 3/3] ipa: ipu3: Use a Y histogram instead of green
Kieran Bingham
kieran.bingham at ideasonboard.com
Wed May 8 14:52:32 CEST 2024
Quoting Dan Scally (2024-05-04 20:58:57)
> Hi Jean-Michel - sorry for the delay replying to you
>
> On 18/04/2024 13:54, Jean-Michel Hautbois wrote:
> > Hi Daniel,
> >
> > On 18/04/2024 14:46, Daniel Scally wrote:
> >> The IPU3 IPA module uses a green histogram for the AGC algorithm's
> >> constraint mode calculations. Switch instead to a luminance histogram
> >> calculated using the Rec.601 coefficients.
> >>
> >> Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
> >> ---
> >> src/ipa/ipu3/algorithms/agc.cpp | 15 ++++++++-------
> >> 1 file changed, 8 insertions(+), 7 deletions(-)
> >>
> >> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
> >> index a59b73fb..76d2bb60 100644
> >> --- a/src/ipa/ipu3/algorithms/agc.cpp
> >> +++ b/src/ipa/ipu3/algorithms/agc.cpp
> >> @@ -152,18 +152,19 @@ Histogram Agc::parseStatistics(const ipu3_uapi_stats_3a *stats,
> >> reinterpret_cast<const ipu3_uapi_awb_set_item *>(
> >> &stats->awb_raw_buffer.meta_data[cellPosition]);
> >> - rgbTriples_.push_back({
> >> - cell->R_avg,
> >> - (cell->Gr_avg + cell->Gb_avg) / 2,
> >> - cell->B_avg
> >> - });
> >> + uint8_t G_avg = (cell->Gr_avg + cell->Gb_avg) / 2;
> >> +
> >> + rgbTriples_.push_back({cell->R_avg, G_avg, cell->B_avg});
> >> /*
> >> - * Store the average green value to estimate the
> >> + * Store the average luminance value to estimate the
> >> * brightness. Even the overexposed pixels are
> >> * taken into account.
> >> */
> >> - hist[(cell->Gr_avg + cell->Gb_avg) / 2]++;
> >> + uint8_t y = (cell->R_avg * .299) +
> >> + (G_avg * .587) +
> >> + (cell->B_avg * .114);
Somewhere in libipa we should really have helpers or classes for the
colour space coefficients to make this more expressive.
> >> + hist[y]++;
> >
> > Is there a benefit to have the "real" Y value and not only the green
> > parts (which reflect this Y value quite nicely as it is ~60% of the
> > value) ?
>
>
> Only that it more accurately matches the Y-value that's used in the
> rest of the algorithm; estimateLuminance() uses the same Rec.601
> coefficients and the gain that's derived from that calculation is
> compared against one derived from this Histogram.
Presumably I would get different results if I were in a Red or Green
t-shirt ... so I certainly think it's more appropriate to use the
luminance correctly.
> > Could you measure it ? No increase in CPU time for big stats grids ?
>
>
> I didn't check specifically but I can do - I didn't lose any framerate
> on my Surface Go2...but I imagine that the Imgu can run much faster
> than that is doing currently.
I don't think I'm worried about doing the correct thing here. It's once
per frame, on the stats - not per pixel in the image.
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
>
> Cheers
>
> Dan
>
>
>
> >
> > JM
More information about the libcamera-devel
mailing list