Ajustar um conjunto de pontos a outro por um movimento rígido

8

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

DaleyPaley
fonte
Mais detalhes do seu problema precisam ser mencionados. Aparentemente, você tem uma transfomação rígida ("3 vetores de unidades ortonormais e uma posição") que consiste em uma transformação ortogonal e uma tradução. Provavelmente você está perguntando como modificar a transformação ortogonal, deixando a parte de translação fixa, para que os pontos recém-perturbados sejam melhor aproximados (aplicando a transformação rígida ajustada aos pontos originais). Soletrar detalhes: nomeie as transformações, a tradução, os pontos. O mais importante é indicar qual critério (menos quadrados?) Determina o melhor ajuste.
hardmath
Sim, desculpe, não tenho certeza sobre algumas das terminologias e a melhor maneira de descrevê-las. Na verdade, eu quero modificar a posição também. Base ortogonal + posição é uma transformação afim, certo? Então, eu tenho uma transformação afim, A, que transforma um pequeno número de pontos, e quero encontrar A 'para que a transformação' siga 'os pontos da melhor maneira possível, depois que eles forem perturbados. Espero que seja mais claro.
DaleyPaley
1
Este é um problema "clássico" com um nome "clássico", o problema ortogonal de Procrustes , minha aplicação favorita de SVD (decomposição de valor singular).
hardmath
1
Sim, deixe-me pensar um pouco sobre escrever bem.
hardmath
1
Eu sei que isso é cerca de 2 anos tarde demais, mas eu tenho algum código no Github que usa o SVD para resolver esse tipo de problema. Talvez seja útil para você? Aqui está o link
Desenvolvedor Paul

Respostas:

14

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}Rdxi

i=1n||Rxi+dyi||2

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,yiR3×3det(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,yid

minRSO(3)||RAB||F

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=[x1x¯,,xnx¯]B=[y1y¯,,yny¯]SO(3)RF

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,B3×nRC=BAT

C=USVT

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,VS=diag(σ1,σ2,σ3)σ1σ2σ30

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)VTdet(R)=1det(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

hardmath
fonte
1
Fantástico! Muito obrigado por reservar um tempo para escrever isso. Muito útil mesmo.
DaleyPaley 17/04
Existe uma maneira padrão de resolver a versão "ponderada" desse problema, em que os ruídos nos vários pontos têm variações diferentes?
Nibot 17/03/19
@ nibot: Dê uma olhada na dissertação de T. Vikland (2006) , que apresenta algumas exposições e artigos publicados sobre o problema ortogonal ponderado de Procrustes (WOPP): "A solução para um WOPP não pode ser computada tão facilmente quanto para um OPP. , um WOPP pode ter vários mínimos locais ".
hardmath
Há outro artigo semelhante e útil sobre a abordagem SVD da ETHZ: igl.ethz.ch/projects/ARAP/svd_rot.pdf
Linuxios