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

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

Commit Message

Stefan Klug July 3, 2024, 2:17 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>
---
 utils/tuning/libtuning/modules/lsc/lsc.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Paul Elder July 5, 2024, 6:44 a.m. UTC | #1
On Wed, Jul 03, 2024 at 04:17:11PM +0200, Stefan Klug wrote:
> 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(-)
> 
> 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:
> -- 
> 2.43.0
>

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: