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>
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
# 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)
|