6 votos

"Normalización" de Puntos en una Esfera

Tengo un conjunto de puntos en una esfera unitaria que representan diferentes orientaciones:

enter image description here

Ahora necesito aplicar rotación(es) de manera que los puntos se ubiquen en el horizonte lo más ajustadamente posible:

enter image description here

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:

  1. 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$

  2. Calcular los ángulos de guiñada y de cabeceo para normalizar (quizás usando atan2 ?) para que el vector rotado $u'=(0,0,1)$

  3. 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):

enter image description here

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.

2voto

sewo Puntos 58

Aquí tienes una idea, tratando de no tener ningún sesgo que provenga de la orientación inicial de la esfera:

  1. Representa tus puntos en coordenadas euclidianas 3D con la esfera unitaria centrada en $(0,0,0)$.
  2. Calcula el producto cruz de todos los pares de puntos (o una muestra aleatoria de pares si tienes muchos puntos y $O(n^2)$ es demasiado trabajo).
  3. Selecciona el producto cruz más grande numéricamente y ajusta el signo de todos los demás de manera que cada uno forme un ángulo agudo con él.
  4. Agrega los productos cruz ajustados por signo. La dirección del vector resultante es la que deseas mover hacia el polo norte mediante tu rotación.

0voto

sewo Puntos 58

Una idea diferente, suponiendo que en tu aplicación los puntos ya casi se alinean con el ecuador, de modo que puedan normalizarse mediante una pequeña rotación alrededor de algún eje horizontal:

Supongamos que tenemos los puntos dados en coordenadas "geográficas" con latitud $\phi$ y longitud $\lambda$. Para puntos cercanos al ecuador, una pequeña rotación alrededor de un eje horizontal actuará como $$ (\phi,\lambda) \mapsto (\phi - \alpha\cos(\lambda+\psi), \lambda) $$ donde $\alpha$ mide la cantidad de rotación y $\psi$ es un término de fase que determina la orientación del eje de rotación.

Ahora, si tanto $\alpha$ como $\psi$ son desconocidos, podemos representar el ajuste norte-sur como $a\cos \lambda + b\sin\lambda$ para algunos coeficientes (también desconocidos) $a$ y $b. Sin embargo, en esta forma podemos estimar el mejor $a$ y $b$ mediante un ajuste estándar por mínimos cuadrados a las coordenadas $\phi$ de nuestros puntos conocidos.

Una vez que $a$ y $b$ son conocidos, es cuestión de trigonometría estándar derivar $\alpha$ y $\psi a partir de ellos. Entonces podemos hacer la rotación real de la esfera rotando un ángulo $\psi$ alrededor del eje $z y luego por $\alpha$ alrededor del eje $x$.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X