Não tenho muita certeza de como explicar esse problema com clareza, por isso, tenha paciência comigo. Eu tenho uma base de 3 vetores unitários ortonormais e uma posição, uma matriz de transformada 4x4 padrão em computação gráfica.
Também tenho vários pontos (compensações) nesse espaço que eu transformo para o espaço do mundo. Os pontos são então levemente perturbados e agora desejo encontrar a nova base que seja a mais próxima de representar os pontos perturbados.
Não é exatamente como encontrar componentes principais, porque quero que respeite as compensações originais. Se isso faz sentido. Como molas de cada novo ponto para suas respectivas posições iniciais. Acho que a resposta está na solução de um problema dos mínimos quadrados, mas examinei e agora minha cabeça dói.
Alguém pode explicar isso simplesmente para mim. Eu preferiria uma solução de formulário fechado, mas uma iterativa também ficaria bem. Muito obrigado
fonte
Respostas:
Inge Söderkvist (2009) tem uma boa descrição de como resolver o problema do movimento do corpo rígido por decomposição de valor singular (SVD).
Suponha que recebamos pontos 3D que após a perturbação tomem posições respectivamente. Procuramos um "movimento" rígido, isto é, uma rotação e translação combinadas, aplicadas aos pontos que minimizam a soma dos quadrados dos "erros":{ y 1 , ... , y n } R d x i{x1,…,xn} {y1,…,yn} R d xi
Pense nos pontos como colunas e na rotação como uma matriz ortogonal . A rigor, exigimos porque, como movimento contínuo, uma rotação preserva a "orientação" dos pontos, ou seja, não envolve refleti-los.xi,yi R 3×3 det(R)=1
O primeiro passo é subtrair os respectivos meios dos pontos , que tem o efeito de "eliminar" (por enquanto) a tradução desconhecida . Ou seja, o problema se torna:x¯¯¯,y¯¯¯ xi,yi d
onde e . Aqui denota o grupo ortogonal especial de matrizes de rotação em 3D que podemos escolher , e a norma da matriz aqui denota a norma Frobenius , ou seja, a raiz quadrada da soma dos quadrados das entradas da matriz (como um Euclidiano). norma, mas nas entradas da matriz).A=[x1−x¯¯¯,…,xn−x¯¯¯] B=[y1−y¯¯¯,…,yn−y¯¯¯] SO(3) R F
Agora são ambas matrizes . A minimização acima é um problema ortogonal de Procrustes, permitindo apenas matrizes de rotação. A solução é dada pela decomposição do valor singular da matriz "covariância" :A,B 3×n R C=BAT
onde são matrizes ortogonais e é a matriz diagonal de valores singulares . Pacotes de álgebra linear numérica como Matlab e Octave calcularão o SVD para você.U,V S=diag(σ1,σ2,σ3) σ1≥σ2≥σ3≥0
Quando tivermos o SVD, defina onde o sinal no fator do meio é escolhido para fazer . Normalmente, uma aplicação no mundo real terá e, portanto, o sinal escolhido seria positivo. Caso contrário, significa que a melhor adaptação ortogonal (preservação da distância) aos novos pontos envolve uma reflexão e sugere a verificação dos dados quanto a erros.R=Udiag(1,1,±1)VT det(R)=1 det(UVT)=1
Finalmente, definimos a tradução . Feito!d=y¯¯¯−Rx¯¯¯
A variante de problemas ortogonais de Procrustes, onde apenas rotações são permitidas, também é objeto de outro artigo da Wikipedia sobre o algoritmo Kabsch . A notação nos artigos da Wikipedia difere da nossa ao multiplicar por à direita, e não (como aqui) à esquerda.R
fonte