Я сейчас читаю статью об автоматической калибровке камер слежения за дорожным движением (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)
Теперь следующие шаги меня смущают. Текст продолжает:
Мы тогдавычислитьМатрица вращения для этих трех единичных векторов, которая формирует нашу (усредненную) окончательную Матрицу вращения для оценки калибровки
Я действительно не уверен, что подразумевается под "вычислением матрицы вращения для этих трех единичных векторов",Я также не вижу, как этот процесс каким-то образом «усредняет» эти матрицы вращения.Любое понимание, которое вы можете мне дать, будет очень признательным!