[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