#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 этого вектора, что дает мне (я думаю) расстояние до указанного пикселя в реальном мире. После некоторого тестирования и измерения вручную это кажется адекватным методом определения расстояния, но я не уверен, что я пропускаю шаги для точности или я на самом деле делаю это совершенно неправильно.
Опять же, любая информация очень ценится.