From c01cfe14f5540ba96b458088185ac7ae90bb3534 Mon Sep 17 00:00:00 2001 From: Naushir Patuck Date: Sun, 3 May 2020 16:49:53 +0100 Subject: libcamera: utils: Raspberry Pi Camera Tuning Tool Initial implementation of the Raspberry Pi (BCM2835) Camera Tuning Tool. All code is licensed under the BSD-2-Clause terms. Copyright (c) 2019-2020 Raspberry Pi Trading Ltd. Signed-off-by: Naushir Patuck Acked-by: Laurent Pinchart Signed-off-by: Laurent Pinchart --- utils/raspberrypi/ctt/ctt_ransac.py | 69 +++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 utils/raspberrypi/ctt/ctt_ransac.py (limited to 'utils/raspberrypi/ctt/ctt_ransac.py') diff --git a/utils/raspberrypi/ctt/ctt_ransac.py b/utils/raspberrypi/ctt/ctt_ransac.py new file mode 100644 index 00000000..e7c57137 --- /dev/null +++ b/utils/raspberrypi/ctt/ctt_ransac.py @@ -0,0 +1,69 @@ +# SPDX-License-Identifier: BSD-2-Clause +# +# Copyright (C) 2019, Raspberry Pi (Trading) Limited +# +# ctt_ransac.py - camera tuning tool RANSAC selector for Macbeth chart locator + +import numpy as np + +scale = 2 + +""" +constructs normalised macbeth chart corners for ransac algorithm +""" +def get_square_verts(c_err = 0.05,scale = scale): + """ + define macbeth chart corners + """ + b_bord_x,b_bord_y = scale*8.5,scale*13 + s_bord = 6*scale + side = 41*scale + x_max = side*6 + 5*s_bord + 2*b_bord_x + y_max = side*4 + 3*s_bord + 2*b_bord_y + c1 = (0,0) + c2 = (0,y_max) + c3 = (x_max,y_max) + c4 = (x_max,0) + mac_norm = np.array((c1,c2,c3,c4),np.float32) + mac_norm = np.array([ mac_norm ]) + + square_verts = [] + square_0 = np.array(((0,0),(0,side), + (side,side),(side,0)),np.float32) + offset_0 = np.array((b_bord_x,b_bord_y),np.float32) + c_off = side * c_err + offset_cont = np.array(((c_off,c_off),(c_off,-c_off), + (-c_off,-c_off),(-c_off,c_off)),np.float32) + square_0 += offset_0 + square_0 += offset_cont + """ + define macbeth square corners + """ + for i in range(6): + shift_i = np.array(((i*side,0),(i*side,0), + (i*side,0),(i*side,0)),np.float32) + shift_bord =np.array(((i*s_bord,0),(i*s_bord,0), + (i*s_bord,0),(i*s_bord,0)),np.float32) + square_i = square_0 + shift_i + shift_bord + for j in range(4): + shift_j = np.array(((0,j*side),(0,j*side), + (0,j*side),(0,j*side)),np.float32) + shift_bord = np.array(((0,j*s_bord), + (0,j*s_bord),(0,j*s_bord), + (0,j*s_bord)),np.float32) + square_j = square_i + shift_j + shift_bord + square_verts.append(square_j) + # print('square_verts') + # print(square_verts) + return np.array(square_verts,np.float32),mac_norm + +def get_square_centres(c_err = 0.05,scale=scale): + """ + define macbeth square centres + """ + verts,mac_norm = get_square_verts(c_err,scale=scale) + + centres = np.mean(verts,axis = 1) + # print('centres') + # print(centres) + return np.array(centres,np.float32) -- cgit v1.2.1