diff options
author | Naushir Patuck <naush@raspberrypi.com> | 2020-05-03 16:49:53 +0100 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-05-11 23:54:45 +0300 |
commit | c01cfe14f5540ba96b458088185ac7ae90bb3534 (patch) | |
tree | f9112e0195de83ea1b20cf81cb62144cd50174f9 /utils/raspberrypi/ctt/ctt_ransac.py | |
parent | 0db2c8dc75e466e7648dc1b95380495c6a126349 (diff) |
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 <naush@raspberrypi.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'utils/raspberrypi/ctt/ctt_ransac.py')
-rw-r--r-- | utils/raspberrypi/ctt/ctt_ransac.py | 69 |
1 files changed, 69 insertions, 0 deletions
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) |