Tengo un conjunto de puntos en una esfera unitaria que representan diferentes orientaciones:
Ahora necesito aplicar rotación(es) de manera que los puntos se ubiquen en el horizonte lo más ajustadamente posible:
La representación ideal para la rotación sería YPR (Yaw-Pitch-Roll), pero cualquier representación de eje-ángulo serviría.
Esto es hasta donde he llegado hasta ahora:
-
Encontrar la orientación "centroide" para las orientaciones dadas (¿Cómo encontrar el centroide de puntos en una esfera?) El resultado sería algún vector $u=(x,y,z)^{\mathbb{T}}$, $||u||=1$
-
Calcular los ángulos de guiñada y de cabeceo para normalizar (quizás usando atan2 ?) para que el vector rotado $u'=(0,0,1)$
-
Calcular el ángulo de balanceo (alrededor de $u'$) para que los puntos se ubiquen en la línea del horizonte (el horizonte es la intersección de la esfera y un plano $y=0$). ¿Quizás un enfoque de mínimos cuadrados? ¿O calcular el promedio de los ángulos de normalización para los puntos?
El problema surge en la unión de imágenes panorámicas donde necesito eliminar el efecto "ondulado" del mosaico proyectado (cada imagen está representada por una rotación alrededor de un centro común):
Tenga en cuenta que el mosaico completo de 360° es un caso especial. También necesito "enderezar" el mosaico parcial, que son como el conjunto de puntos representados arriba.