Внутренние параметры Kinect с поля зрения

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