Вычисление расстояния от статической камеры до объекта на плоскости заземления

#matrix #camera #coordinates #distance #projection

#матрица #камера #координаты #расстояние #проекция

Вопрос:

У меня есть стационарная камера, которая находится на высоте 640 мм над землей и слегка наклонена вперед (относительно оси x?) примерно 30 градусов, так что он смотрит немного вниз в сторону плоской плоскости земли.

Моя цель — определить расстояние от камеры до любых небольших объектов, которые она обнаруживает на земле, например, если моя камера обнаруживает объект, который находится в пикселе [314, 203], я хотел бы знать, где на земле этот объект будет находиться в мировых координатах [x,y, z] с y = 0 и расстоянием до этого объекта.

Я нарисовал диаграмму, чтобы лучше визуализировать проблему: диаграмма плоскости камеры

У меня есть моя матрица вращения и вектор перемещения, а также моя внутренняя матрица, но я не уверен 1) правильны ли матрица вращения и вектор перемещения, учитывая приведенную выше информацию / диаграмму, и 2) как продолжить вычисление математической формулы для определения расстояния и местоположения в реальном мире. Вот что у меня есть до сих пор:

Матрица вращения R (генерируется здесь https://www.andre-gaschler.com/rotationconverter /) от ориентации [-30, 0, 0] (градусов)
R =
[ 1.0000000, 0.0000000, 0.0000000;
0.0000000, 0.8660254, -0.5000000;
0.0000000, 0.5000000, 0.8660254 ]

Камера находится на высоте 640 мм над плоскостью земли
t =
[0, 640, 0]

Встроенная матрица из калибровочной информации, предоставленной камерой
fx = 349,595, fy = 349,505, cx = 328,875, cy = 178,204
K =
[ 349.595, 0.0000, 328.875;
0.0000, 349.505, 178.204;
0.0000, 0.0000, 1.000 ]

У меня также есть эти параметры искажения, я не уверен, что с ними делать или имеют ли они отношение к K
k1 = -0.170901, k2 = 0.0255027, k3 =-9.30328e-11, p1 = 0.000117187, p2 = 6.42836e-05

Я зашел так далеко, а потом заблудился, любая помощь была бы очень признательна.
Также извините, если это много информации или если это каким-либо образом сбивает с толку, я очень новичок, когда дело доходит до проекционных матриц

Обновить:

После некоторых дополнительных исследований и тестирования самостоятельно я нашел формулу, которая, кажется, дает мне несколько приличное приближение. Учитывая пиксель [x, y], я нахожу (я думаю) вектор направления от начала координат камеры до координаты пикселя с:

dir_x = (x — cx) / fx

dir_y = (y — cy) / fy

dir_z = 1

которое я затем умножаю на матрицу вращения R, что дает мне вектор реального мира. Затем я делю высоту своей камеры (640 мм) на значение y этого вектора, что дает мне (я думаю) расстояние до указанного пикселя в реальном мире. После некоторого тестирования и измерения вручную это кажется адекватным методом определения расстояния, но я не уверен, что я пропускаю шаги для точности или я на самом деле делаю это совершенно неправильно.

Опять же, любая информация очень ценится.