domingo, 15 de marzo de 2026

Calculando la distancia focal con que se hizo una fotografía (II). Validación Montecarlo

En 'Calculando la distancia focal con que se hizo una fotografía (I). Algoritmo' vimos un método matemático con el cual, a partir de una imagen en la que aparezca alguna forma trapezoidal que corresponda a un rectángulo en el mundo real, puede estimarse la distancia focal con que fue tomada la imagen y la relación de aspecto del objeto rectangular real.

El método requiere que el trapezoide presente fugas muy claras (ausencia de lados paralelos o casi paralelos), o de lo contrario las ecuaciones se tornan inestables arrojando resultados dispares ante mínimas variaciones de las coordenadas que lo definen.

A priori no sabemos cómo de correcto es el cálculo en las imágenes que tratemos, así que en un ejercicio de honestidad vamos utilizar simulaciones Montecarlo alrededor de los puntos definitorios de cada trapezoide para tratar de averiguar estadísticamente en qué casos el cálculo puede considerarse razonablemente fiable y en cuales no.

La validación Montecarlo consistirá en añadir ruido o jitter a las coordenadas de los 4 vértices del trapezoide definido por el usuario, siguiendo una distribución normal en cada eje (con una distribución uniforme se tienen resultados similares), y ejecutar el algoritmo para cada variación. En la siguiente imagen se ha usado una varianza grande y un bajo número de iteraciones (500) para entender la metodología:



Sobre las coordenadas definidas por el usuario ejecutaremos 100.000 simulaciones con una varianza más contenida y adaptada a la resolución de cada imagen. He compilado en C++ el bucle crítico de "dibujado" de los 100.000 trapezoides solapados para acelerar la ejecución en casi dos órdenes de magnitud.

Para tratar de cubrir todas las casuísticas contemplamos las siguientes cuatro imágenes como ejemplos tipo (hacer clic para ver en alta resolución):
  • Una escena sintética creada con una distancia focal de 24mm medida sobre un trapezoide de relación de aspecto 2
  • Una escena donde el trapezoide de referencia presenta claras fugas en los dos ejes además de un tamaño generoso
  • Una escena donde el trapezoide presenta dos de sus lados cercanos a ser paralelos
  • Un trapezoide con ambos pares de lados prácticamente paralelos









A continuación se muestra el solape de los 100.000 trapezoides simulados en cada caso así como los histogramas de las distribuciones de distancia focal y relación de aspecto obtenidas (haciendo clic sobre cualquiera de las imágenes puede verse la comparación de las cuatro simulaciones).

La escena sintética de 24mm y la del trapezoide ideal resultan similares. Los histogramas aparecen muy concentrados y son simétricos respecto al valor inicial calculado con las esquinas definidas por el usuario (USR), que coincide con la mediana. Las distancias focales y relaciones de aspecto estimadas por lo tanto son fiables y representan valores con alta probabilidad de ser correctos:





En el tercer caso la presencia de dos lados casi paralelos del trapezoide hace que las ecuaciones resulten inestables, arrojando valores tanto de distancia focal como relación de aspecto repartidos en un amplio rango. Los 103,78mm de distancia focal y el 0,96 de relación de aspecto que se tuvieron con las coordenadas introducidas por el usuario son tan aceptables o inaceptables como cualquier otro valor. El método no es fiable en este caso y debería desecharse:



El cuarto caso, con los lados del trapezoide prácticamente paralelos dos a dos, permitirá calcular una relación de aspecto de forma fiable (de hecho prácticamente se puede deducir directamente de la imagen) mostrando un histograma hiper concentrado, pero la distancia focal queda indeterminada al extenderse en un rango enorme. El valor calculado de 42,57mm carece de sentido y por tanto no es fiable:



Hay otro indicador que nos da pistas de que todo ha ido bien con los primeros dos ejemplos, y es que se pudo realizar el cálculo en el 100% de las 100.000 iteraciones realizadas. En cambio en la tercera imagen casi 1/3 del total de los trapezoides simulados derivaron en alguna de las ecuaciones en NaN's, habiendo de ser descartados, y lo mismo pasó con la mitad de las simulaciones de distancia focal de la cuarta imagen.

Resumiendo se comprueba que para el cálculo de la distancia focal el algoritmo solo es utilizable cuando logramos encontrar un trapezoide con claras fugas en ambos ejes. La relación de aspecto en cambio solo queda indeterminada cuando solo hay un par de lados casi paralelos; si no hay ninguno o lo son los dos podemos obtener estimaciones correctas. Las simulaciones Montecarlo y posterior observación de las distribuciones permiten validar cómo de buena puede ser la estimación, y desecharla en su caso.

Repositorio con el código R: GitHub.

No hay comentarios:

Publicar un comentario

Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.