[v4,22/23] libtuning: lsc: Prevent negative values
diff mbox series

Message ID 20240705144209.418906-23-stefan.klug@ideasonboard.com
State Accepted
Headers show
Series
  • Add ccm calibration to libtuning
Related show

Commit Message

Stefan Klug July 5, 2024, 2:41 p.m. UTC
In cases where the calibration image contains super dark areas, or when
an invalid blacklevel was supplied, the grid might get close to zero or
negative. This would have bad effects on the 1/grid later. So clamp the
values to a small positive number.

Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
---
 utils/tuning/libtuning/modules/lsc/lsc.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Patch
diff mbox series

diff --git a/utils/tuning/libtuning/modules/lsc/lsc.py b/utils/tuning/libtuning/modules/lsc/lsc.py
index 344a07a3d443..e0ca22ebe9bd 100644
--- a/utils/tuning/libtuning/modules/lsc/lsc.py
+++ b/utils/tuning/libtuning/modules/lsc/lsc.py
@@ -59,7 +59,10 @@  class LSC(Module):
     def _lsc_single_channel(self, channel: np.array,
                             image: lt.Image, green_grid: np.array = None):
         grid = self._get_grid(channel, image.w, image.h)
-        grid -= image.blacklevel_16
+        # Clamp the values to a small positive, so that the following 1/grid
+        # doesn't produce negative results.
+        grid = np.maximum(grid - image.blacklevel_16, 0.1)
+
         if green_grid is None:
             table = np.reshape(1 / grid, self.sector_shape[::-1])
         else: