summaryrefslogtreecommitdiff
path: root/utils/raspberrypi/ctt/ctt_ransac.py
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2020-05-03 16:49:53 +0100
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-05-11 23:54:45 +0300
commitc01cfe14f5540ba96b458088185ac7ae90bb3534 (patch)
treef9112e0195de83ea1b20cf81cb62144cd50174f9 /utils/raspberrypi/ctt/ctt_ransac.py
parent0db2c8dc75e466e7648dc1b95380495c6a126349 (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.py69
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)