Óptica: si tuviera dos cámaras posicionadas en coordenadas XYZ específicas y supiera sus ubicaciones precisas, ¿cómo podría determinar la posición XYZ de una esfera que está en el campo de visión de ambas cámaras?

Primero, necesita más que las ubicaciones de las cámaras, también necesita conocer sus orientaciones (coordenadas de cuerpo rígido – otros 3 números correspondientes a ángulos, a veces llamados ángulos de Euler).

Una vez que tenga las ubicaciones y orientaciones de las cámaras, cada una de sus líneas de visión corresponde a una línea que atraviesa el espacio tridimensional. En general, dos líneas en tres dimensiones no se cruzan, pero si están dirigidas al mismo objeto, entonces se cruzarán.

Las ecuaciones para las dos líneas son más fáciles de escribir paramétricamente
La línea de visión de la cámara 1:
x1 (t) = x01 + bx1 t
y1 (t) = y01 + por 1 t
z1 (t) = z01 + bz1 t
x01, y01, z01 corresponden a las ubicaciones y bx1, by1, bz1, corresponden a la orientación de las cámaras (observe que son necesarios 6 números), donde t es el parámetro que barre una línea (es decir, ponga un valor para t y te dará un punto en la línea)

Del mismo modo para la cámara 2:
x2 (s) = x02 + bx2 s
y2 (s) = y02 + por2 s
z2 (s) = z02 + bz2 s
nuevamente hay 6 números y s ahora barre la línea como lo hizo para la cámara 1.

Si las dos líneas se cruzan, entonces para un valor especial de t = t0 y s = s0
x1 (t0) = x2 (s0)
y1 (t0) = y2 (s0)
z1 (t0) = z2 (s0)
Tienes 3 ecuaciones y dos variables para resolver, en general, esto no tendrá una solución, pero cuando el par de cámaras miran el mismo punto, habrá solución.

En situaciones realistas, hay errores asociados con todas las mediciones, por lo que las ecuaciones no se alinearán exactamente, pero puede usar estadísticas elementales para determinar la probabilidad de que las cámaras estén buscando el mismo punto en función de los 12 números utilizados para determinar las orientaciones de las cámaras

Si los campos de visión son cónicos, * creo * que esto debería hacerlo. Esto es puramente intuitivo. No he verificado la geometría con lápiz y papel.

La esfera sería aquella cuya sección horizontal es el círculo del cuadrilátero formado por la intersección de las secciones horizontales de los conos de campo de visión de las dos cámaras. Dibuja un boceto de la oración anterior para ver a qué me refiero y resolver los detalles. La coordenada z del centro de la esfera se ubicará en el plano definido por las líneas de visión centrales (probablemente, de hecho, en la intersección, aunque no puedo ver inmediatamente una prueba de por qué).

Puede hacer esta simplificación a 2d porque el radio en círculo será menor o igual que el radio de sección perpendicular del cono FOV.

Las cosas podrían complicarse con los FOV de ángulo obtuso.

Primero, necesita conocer no solo la ubicación de las cámaras, sino también las direcciones a las que se enfrentan y cómo se ve su campo de visión. El campo de visión óptico generalmente es un cono (circular), pero a menos que esté filmando en una película circular (¡lo cual es real!), Parte de este cono no llega a la imagen final, por lo que su campo real de vista es probablemente un cono rectangular, o una pirámide infinita, como esta:

(Imagen de Wikipedia, acreditada a Dick Lyon).

Por supuesto, el FOV bien podría ser diferente para cada cámara.

Entonces podría intersecar los dos conos, dando como resultado algún tipo de poliedro que se pueda calcular fácilmente. (Probablemente quiera usar un programa CAD para esto, aunque puede hacerlo a mano). Lo mejor que puedo entender es que está buscando la esfera más grande que se pueda inscribir en este poliedro. Esto no debería ser terriblemente difícil de calcular, ya que solo está tratando de maximizar una función de las coordenadas, a saber

[matemáticas] r (x, y, z) = \ min_ {f \ text {a face}} d ((x, y, z), f) [/ math].

donde d (p, f) es la distancia desde un punto a un plano. Para obtener una fórmula para d (p, f), tome la perpendicular de f a p y mida la distancia a lo largo de ella.

Eso es más matemática que física.

De todos modos, probablemente la forma más fácil de hacerlo, suponiendo que las cámaras sean bastante normales con sensores planos, es tomar la posición en cada cámara y usar la proyección de perspectiva inversa para obtener un rayo de cada cámara hacia la esfera. Sin embargo, no necesita hacer la perspectiva inversa completa como una matriz. Puede resolverlo desde cero desde los dos triángulos rectángulos (vertical y horizontal) que proyectan rayos en el sensor.

Luego, agrega esos rayos relativos al rayo del centro de la pantalla, obteniendo dos rayos. Probablemente no se encontrarán, por lo que encontrará los puntos más cercanos en cada una de las líneas, dividirá la diferencia y llamará a eso la ubicación.