No estoy realmente seguro de cómo explicar este problema claramente, así que tengan paciencia conmigo. Tengo una base de 3 vectores de unidades ortonormales y una posición, una matriz de transformación 4x4 estándar en gráficos de computadora.
También tengo varios puntos (compensaciones) en ese espacio que me transformo en espacio mundial. Los puntos se perturban un poco y ahora deseo encontrar la nueva base más cercana a la representación de los puntos perturbados.
No es exactamente como encontrar componentes principales, porque quiero que respete las compensaciones originales. Si eso tiene sentido. Como brota de cada nuevo punto a sus respectivas posiciones iniciales. Creo que la respuesta está en resolver un problema de mínimos cuadrados, pero lo examiné y ahora me duele la cabeza.
¿Alguien puede explicarlo simplemente por mí? Preferiría una solución de forma cerrada, pero una iterativa también estaría bien. Muchas gracias
fuente
Respuestas:
Inge Söderkvist (2009) tiene una buena descripción de cómo resolver el problema del movimiento del cuerpo rígido por descomposición de valores singulares (SVD).
Supongamos que se nos dan puntos 3D que después de la perturbación toman las posiciones { y 1 , ... , y n } respectivamente. Buscamos un "movimiento" rígido, es decir, una rotación R y una traslación d combinadas, aplicadas a los puntos x i que minimiza la suma de cuadrados de los "errores":{ x1, ... , xnorte} { y1, ... , ynorte} R re Xyo
El primer paso es restar los medios respectivos de los puntos , que tiene el efecto de "eliminar" (por ahora) la traducción desconocida . Es decir, el problema se convierte en: xi,yidX¯¯¯, y¯¯¯ Xyo, yyo re
donde y . Aquí denota el grupo ortogonal especial de matrices de rotación en 3D de las cuales podemos elegir , y la norma de matriz aquí denota la norma de Frobenius , es decir, la raíz cuadrada de la suma de cuadrados de entradas de matriz (como un Euclidiano) norma, pero en entradas de matriz).B = [ y 1 - ¯ y , … , y n - ¯ y ] S O ( 3 ) R FA = [ x1- x¯¯¯, ... , xnorte- x¯¯¯] B = [ y1- y¯¯¯, ... , ynorte- y¯¯¯] SO ( 3 ) R F
Ahora son ambas matrices. La minimización anterior es un problema de Procrustes ortogonal que solo permite matrices de rotación. La solución se obtiene tomando la descomposición del valor singular de la matriz de "covarianza" :3 × n R C = B A TA , B 3 × n R C= B AT
donde son matrices ortogonales y es la matriz diagonal de valores singulares . Los paquetes de álgebra lineal numérica como Matlab y Octave calcularán la SVD por usted.S = diag ( σ 1 , σ 2 , σ 3 ) σ 1 ≥ σ 2 ≥ σ 3 ≥ 0U, V S= diag ( σ1, σ2, σ3) σ1≥ σ2≥ σ3≥ 0
Una vez que tengamos la SVD, defina donde se elige el signo en el factor medio para hacer . Normalmente, una aplicación del mundo real tendrá y, por lo tanto, el signo elegido sería positivo. De lo contrario, significa que el mejor ajuste ortogonal (preservación de la distancia) a los nuevos puntos implica una reflexión, y sugiere verificar los datos en busca de errores. det ( R ) = 1 det ( U V T ) = 1R = Udiag ( 1 , 1 , ± 1 ) VT det ( R ) = 1 det ( UVT) = 1
Finalmente definimos la traducción . ¡Hecho!re= y¯¯¯- R x¯¯¯
La variante de los problemas de Procrustes ortogonales donde solo se permiten rotaciones es también el tema de otro artículo de Wikipedia sobre el algoritmo Kabsch . La notación en los artículos de Wikipedia difiere de la nuestra en la multiplicación por a la derecha, en lugar de (como aquí) a la izquierda.R
fuente