[PATCH v2 01/25] libtuning: Backport improvements in MacBeth search reliability

Kieran Bingham kieran.bingham at ideasonboard.com
Fri Jun 28 12:51:04 CEST 2024


Quoting Stefan Klug (2024-06-28 11:46:54)
> Port 66479605baca4a22e2b7a17c2a8cf9f9be9a7724 into libtuning.
> Original message:
> Improve the Macbeth Chart search reliability
> 
> Previously the code would brighten up images in case the Macbeth Chart
> is slightly dark, and also zoom in on sections of it to look for
> charts occupying less of the field of view. But it would not do both
> together.
> 
> This change makes the search for smaller charts also repeat that
> search for the brightened up images that it made earlier, thereby
> increasing the chances of success for non-optimal tuning images.
> 
> Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>


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

> ---
>  utils/tuning/libtuning/macbeth.py | 38 ++++++++++++++++++-------------
>  1 file changed, 22 insertions(+), 16 deletions(-)
> 
> diff --git a/utils/tuning/libtuning/macbeth.py b/utils/tuning/libtuning/macbeth.py
> index e11824646a4f..81f3e87c9088 100644
> --- a/utils/tuning/libtuning/macbeth.py
> +++ b/utils/tuning/libtuning/macbeth.py
> @@ -403,10 +403,15 @@ def find_macbeth(img, mac_config):
>      # nothing more is tried as this is a high enough confidence to ensure
>      # reliable macbeth square centre placement.
>  
> +    # Keep a list that will include this and any brightened up versions of
> +    # the image for reuse.
> +    all_images = [img]
> +
>      for brightness in [2, 4]:
>          if cor >= 0.75:
>              break
>          img_br = cv2.convertScaleAbs(img, alpha=brightness, beta=0)
> +        all_images.append(img_br)
>          cor_b, mac_b, coords_b, ret_b = get_macbeth_chart(img_br, ref_data)
>          if cor_b > cor:
>              cor, mac, coords, ret = cor_b, mac_b, coords_b, ret_b
> @@ -456,23 +461,24 @@ def find_macbeth(img, mac_config):
>          w_inc = int(w * pair['inc'])
>          h_inc = int(h * pair['inc'])
>  
> -        loop = ((1 - pair['sel']) / pair['inc']) + 1
> +        loop = int(((1 - pair['sel']) / pair['inc']) + 1)
>          # For each subselection, look for a macbeth chart
> -        for i in range(loop):
> -            for j in range(loop):
> -                w_s, h_s = i * w_inc, j * h_inc
> -                img_sel = img[w_s:w_s + w_sel, h_s:h_s + h_sel]
> -                cor_ij, mac_ij, coords_ij, ret_ij = get_macbeth_chart(img_sel, ref_data)
> -
> -                # If the correlation is better than the best then record the
> -                # scale and current subselection at which macbeth chart was
> -                # found. Also record the coordinates, macbeth chart and message.
> -                if cor_ij > cor:
> -                    cor = cor_ij
> -                    mac, coords, ret = mac_ij, coords_ij, ret_ij
> -                    ii, jj = i, j
> -                    w_best, h_best = w_inc, h_inc
> -                    d_best = index + 1
> +        for img_br in all_images:
> +            for i in range(loop):
> +                for j in range(loop):
> +                    w_s, h_s = i * w_inc, j * h_inc
> +                    img_sel = img_br[w_s:w_s + w_sel, h_s:h_s + h_sel]
> +                    cor_ij, mac_ij, coords_ij, ret_ij = get_macbeth_chart(img_sel, ref_data)
> +
> +                    # If the correlation is better than the best then record the
> +                    # scale and current subselection at which macbeth chart was
> +                    # found. Also record the coordinates, macbeth chart and message.
> +                    if cor_ij > cor:
> +                        cor = cor_ij
> +                        mac, coords, ret = mac_ij, coords_ij, ret_ij
> +                        ii, jj = i, j
> +                        w_best, h_best = w_inc, h_inc
> +                        d_best = index + 1
>  
>      # Transform coordinates from subselection to original image
>      if ii != -1:
> -- 
> 2.43.0
>


More information about the libcamera-devel mailing list