Message ID | 20240703141726.252368-2-stefan.klug@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
On Wed, Jul 03, 2024 at 04:16:50PM +0200, Stefan Klug wrote: > Port 66479605baca4a22e2b7a17c2a8cf9f9be9a7724 into libtuning. > Original message: > Improve the Macbeth Chart search reliability Port commit 66479605baca ("utils: raspberrypi: ctt: Improve the Macbeth Chart search reliability") into libtuning. > 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@ideasonboard.com> > Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@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:
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: