Я не уверен, насколько хорошо выровнены ваши камеры, но из ваших снимков я начинаю предполагать, что камера A и камера B выровнены настолько хорошо, что прямоугольник, представляющий экран камеры B, представляет собой просто горизонтальный перевод прямоугольника, представляющего экран камеры А. Под этим я подразумеваю, что соответствующие края прямоугольников экранов параллельны друг другу, а два прямоугольных экрана angular l ie расположены в общей вертикальной плоскости, перпендикулярной земле. Теперь рассмотрим плоскость, параллельную вертикальной плоскости, которая содержит экраны двух камер и проходит через точки фокусировки A и B двух камер. Назовите этот последний самолет screen_plane
. Кроме того, точки фокусировки A и B находятся на одинаковой высоте от земли. Если это так, и если я предполагаю, что c = |AB|
- это расстояние между фокусными точками двух камер, и если я положу систему координат на A, чтобы ось x была горизонтальной относительно земли, ось y перпендикулярно земле, а ось z параллельна земле, но перпендикулярна экрану, тогда точка фокусировки камеры B будет иметь координаты ( c, 0, 0 )
. В качестве примера вы привели c = 30 cm
. Также screen_plane
охватывает оси x и y, описанные выше, а ось z перпендикулярна screen_plane
.
Если вы хотите работать с этой настройкой, то красная точка P появится на обоих экранах с одинаковыми координатами Y_A = Y_B
, но разными координатами X_A
и X_B
. Затем обозначим theta
горизонтальный угол поля зрения, который вы определили как theta = 41 deg
. Просто чтобы прояснить, я предполагаю, что угол между самой левой стороной и самой правой стороной обзора равен 2 * theta = 82 deg
.
Если я правильно понимаю, вы пытаетесь вычислить расстояние Z
между вертикальной плоскостью screen_plane
, который содержит фокусы камеры и плоскость, параллельную screen_plane
и проходящую через красную точку P, т.е. вы пытаетесь вычислить расстояние от P до вертикальной плоскости screen_plane
.
Тогда Вот как вы рассчитываете Z
:
Шаг 1: Из изображения точки P на экране A рассчитайте расстояния (например, количество пикселей) от P до вертикальных краев экрана. Скажем, они dist_P_to_left_edge
и dist_P_to_right_edge
. Установите
a_A = dist_P_to_left_edge / (dist_P_to_left_edge + dist_P_to_right_edge) (this one is not really necessary)
b_A = dist_P_to_right_edge / (dist_P_to_left_edge + dist_P_to_right_edge)
Шаг 2: Сделайте то же самое с изображением точки P на экране B:
a_B = dist_P_to_left_edge / (dist_P_to_left_edge + dist_P_to_right_edge)
b_B = dist_P_to_right_edge / (dist_P_to_left_edge + dist_P_to_right_edge) (this one is not really necessary)
Шаг 3: Примените формулу:
Z = c * cot(theta) / (2 * (1 - b_A - a_B) )
Так, например, из предоставленных вами изображений экранов камеры A и B я измерил линейкой, что
b_A = 4/38
a_B = 12.5/38
и от данные, которые вы включили
theta = 41 deg
c = 30 cm
, поэтому я подсчитал, что длина синего сегмента на вашем изображении составляет
Z = 30 * cos(41*pi/180) / (sin(41*pi/180) * (1 - 4/38 - 12.5/38))
= 60.99628 cm