Microsoft заявляет, что поле углов обзора для Kinect составляет 43 градуса по вертикали и 57 горизонтальных (указано здесь). Учитывая их, можем ли мы рассчитать внутренние параметры, т.е. Фокальную точку и центр проекции? Я полагаю, что центр проекции может быть задан как (0,0,0)?
Спасибо
EDIT: дополнительная информация о том, что я пытаюсь сделать
У меня есть набор данных изображений, записанных с помощью Kinect, я пытаюсь преобразовать позиции пикселей (x_screen, y_screen и z_world (в мм)) в координаты реального мира.
Если я знаю, что камера находится в точке (x ', y', z ') в системе координат реального мира, достаточно найти координаты реального мира, выполнив следующее:
x_world = (x_screen - c_x) * z_world / f_x
y_world = (y_screen - c_y) * z_world / f_y
где c_x = x'
и c_y = y'
и f_x, f_y
- фокусное расстояние? А также, как я могу найти фокусное расстояние, простое знание поля зрения?
Спасибо
Ответ 1
Если вы приравниваете мировое происхождение (0,0,0) к фокусу камеры (центр проекции, как вы его называете), и вы предполагаете, что камера указывает вдоль положительной оси z, тогда ситуация выглядит так: плоскость х = 0:
![Diagram of cameral world coordinates]()
Здесь оси z (горизонтальные) и y (вертикальные). Подстрочный индекс v
предназначен для "окна просмотра" или экрана, а w
- для мира.
Если я правильно понял ваш смысл, вы знаете h
, высоту экрана в пикселях. Кроме того, zw
, yv
и xv
. Вы хотите знать yw
и xw
. Обратите внимание, что этот расчет имеет (0,0) в центре окна просмотра. Настройте соответствующим образом обычную систему координат экрана с (0,0) в верхнем левом углу. Примените немного триггеров:
tan(43/2) = (h/2) / f = h / (2f), so f = h / ( 2 tan(43/2) )
и аналогичные треугольники
yw / zw = yv / f also xw / zw = xv / f
Решение:
yw = zw * yv / f and xw = zw * xv / f
Обратите внимание, что предполагается, что "фокусное расстояние" камеры равно в направлении x. Это не обязательно. Для лучшей точности в xw
вы должны пересчитать с помощью f = w / 2 tan(57/2)
, где w
- ширина экрана. Это связано с тем, что f
не является истинным фокусным расстоянием. Это просто постоянная конверсия. Если пиксели камеры квадратные, а оптические объекты не имеют аберраций, эти два вычисления f
дают тот же результат.
NB: В удаленной (неподходящей) статье OP, казалось, говорило, что это не zw, которое известно, а длина D гипотенузы: происхождение до (xw, yw, zw). В этом случае обратите внимание на zw = D * f / sqrt(xv² + yv² + f²)
(при условии, что пиксели камеры являются квадратными, при этом необходимо масштабирование, если нет). Они могут действовать как указано выше.
Ответ 2
Я не могу добавить комментарий, так как у меня слишком низкая репутация.
Но я напоминаю, что угол камеры кинекта не является общим
как в обычной фотокамере, из-за формата видеопотока и его чипа сенсора. Поэтому SDK с 57 градусами и 43 градусами может относиться к разным степенным разрешениям для высоты и ширины.
он отправляет растровое изображение размером 320x240 пикселей, и эти пиксели относятся к
Horizontal FOV: 58,5° (as distributed over 320 pixels horizontal)
Vertical FOV: 45,6° (as distributed over 240 pixels vertical).
Z известно, что ваш угол известен, поэтому я могу утверждать, что закон синусов может получить нужные вам места, тогда https://en.wikipedia.org/wiki/Law_of_sines