Как построить положение камеры и изображения по данным калибровки камеры?
У меня есть внутренние и внешние параметры камеры. Внешняя матрица 4 x 4 с вращением и перемещением.
У меня есть образцы данных, как под, у меня есть это на каждую камеру, снятую изображение.
2.11e-001 -3.06e-001 -9.28e-001 7.89e-001
6.62e-001 7.42e-001 -9.47e-002 1.47e-001
7.18e-001 -5.95e-001 3.60e-001 3.26e+000
0.00e+000 0.00e+000 0.00e+000 1.00e+000
Я хотел бы построить изображение, как показано на странице набора инструментов калибровки Matlab. или же Однако я не могу понять математику того, как построить эти 2 изображения.
Единственное, что у меня есть, - это страница http://en.wikipedia.org/wiki/Camera_resectioning. Что говорит мне, что положение камеры может быть найдено с помощью C = - R` . T
Есть идеи, как решить эту задачу?
1 ответ
Предположим, что углы плоскости, которую вы хотите нарисовать, представляют собой векторы столбцов 3x1, a = [0 0 0]', b = [w 0 0]', c = [w h 0]'и d = [0 h 0]',
Предположим, что предоставленная вами калибровочная матрица - это A и состоит из матрицы вращения R = A(1:3, 1:3) и трансляции T = A(1:3, 4).
Рисованиепервого вида Для каждой позы A_i с вращением R_i и трансляцией T_i, преобразуйте каждый угол x_w (то есть a, b, c или d) плоскости в его координаты x_c в камере с помощью
x_c = R_i*x_w + T_i
Затем нарисуйте плоскость с преобразованными углами.
Чтобы нарисовать камеру, ее центр проекции в координатах камеры равен [0 0 0] ', а ось x камеры равна [1 0 0]', ось y равна [0 1 0]', а ось z равна [0 0 1]. ".
Обратите внимание, что на чертеже ось Y камеры направлена вниз, поэтому вы можете применить дополнительное вращение ко всем вычисленным координатам путем умножения на B = [1 0 0; 0 0 1; 0 -1 0].
Нарисуйте второй вид Рисование плоскости тривиально, так как мы находимся в мировых координатах. Просто нарисуйте плоскость, используя a, b, c и d.
Чтобы нарисовать камеры, каждый центр камеры имеет вид c = -R'*T. Оси камеры - это строки матрицы вращения R, поэтому, например, в предоставленной вами матрице ось x равна [2.11e-001 -3.06e-001 -9.28e-001]'. Вы также можете нарисовать камеру, преобразовав каждую точку x_c, заданную в координатах камеры, в мировые координаты x_w с помощью x_w = R'*(x_c - T) и нарисовав ее.
Теперь в opencv есть пример для визуализации внешних элементов, сгенерированных из их примера калибровки камеры.