[libcamera-devel] [PATCH v4 32/32] ipa: rkisp1: awb: Remove bias from gain calculation

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Sep 8 03:42:00 CEST 2022


The red and blue gains are computed by dividing the green mean by the
red and blue means respectively. An offset of 1 is added to the dividers
to avoid divisions by zero. This introduces a bias in the gain values.
Fix it by clamping the divisors to a minimum of 1.0 instead of adding an
offset.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/ipa/rkisp1/algorithms/awb.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index 404ad66e6953..fe1ba09a99a2 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -280,10 +280,11 @@ void Awb::process(IPAContext &context,
 
 	/*
 	 * Estimate the red and blue gains to apply in a grey world. The green
-	 * gain is hardcoded to 0.
+	 * gain is hardcoded to 0. Avoid divisions by zero by clamping the
+	 * divisor to a minimum value of 1.0.
 	 */
-	double redGain = greenMean / (redMean + 1);
-	double blueGain = greenMean / (blueMean + 1);
+	double redGain = greenMean / std::max(redMean, 1.0);
+	double blueGain = greenMean / std::max(blueMean, 1.0);
 
 	/*
 	 * Clamp the gain values to the hardware, which expresses gains as Q2.8
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list