我目前正在阅读有关交通摄像机自动校准(https://www.microsoft.com/en-us/research/wp-content/uploads/2017/09/AutoCalib.pdf)的文章。在某些时候,作者计算了多个校准并计算了这些矩阵的旋转部分的平均值。
因此,文本对过程进行了如下描述:
最后,我们计算剩余校准的“平均值”。我们 在所有过滤后的校准中平均Z轴单位矢量, 计算两个相互正交的X和Y轴单位向量。
因此,让我们假设我有两个要求平均的旋转矩阵。像这样:
r1 = [[-0.64375223, 0.63471324, 0.42746014],
[-0.52107859, -0.77267423, 0.3625626 ],
[ 0.56041072, 0.01066016, 0.82814624]]
r2 = [[-0.31267459, -0.0464914 , 0.94872185],
[-0.88839581, -0.33914166, -0.30941205],
[ 0.3361361 , -0.93958581, 0.06473821]]
所以,首先我将z轴矢量平均值计算为:
import numpy as np
c = [r1, r2]
z_avg = np.mean(c, axis=0)[:, 2]
这将平均z轴创建为:
array([0.688091 , 0.02657528, 0.44644223])
然后我编写了用于计算基向量的函数:
def basis(v):
v = v / np.linalg.norm(v)
if v[0] > 0.9:
b1 = np.asarray([0.0, 1.0, 0.0])
else:
b1 = np.asarray([1.0, 0.0, 0.0])
b1 -= v * np.dot(b1, v)
b1 /= np.linalg.norm(b1)
b2 = np.cross(v, b1)
return b1, b2, v
我可以将正交基向量计算为:
x, y, z = basis(z_avg)
现在,接下来的步骤让我感到困惑。文字继续说:
然后我们针对这三个单位矢量计算旋转矩阵, 形成我们的(平均)最终旋转矩阵以进行校准 估计
我真的不确定“为这三个单位矢量计算旋转矩阵”的含义。我也看不到这个过程如何以某种方式“平均”这些旋转矩阵。您能提供给我的任何见解将非常感激!