Extraia a homografia projetiva de dois mapas de profundidade Kinect

Dada duas nuvens de pontos 3D consecutivas 1 e 2 (não a nuvem inteira, digamos 100 pontos selecionados da nuvem com GoodFeaturesToMatch do OpenCV), obtidos a partir de um mapa de profundidade do Kinect, eu quero calcular a homografia da câmera de 1 a 2. Entendo que transformação projetiva, e isso já foi feito por muitas pessoas:aqui (slide 12), aqui (slide 30) eaquilo que parece ser o jornal clássico. Meu problema é que, embora eu seja um programador competente, não tenho as habilidades de matemática ou trigonometria para transformar um desses métodos em código. Como esse não é um problema fácil, ofereço uma grande recompensa pelo código que resolve o seguinte problema:

A câmera está na origem, olhando na direção Z, no pentaedro irregular [A, B, C, D, E, F]:

A câmera move -90 mm para a esquerda (X), + 60 mm para cima (Y), + 50 mm para a frente (Z) e gira 5 ° para baixo, 10 ° para a direita e -3 ° no sentido anti-horário:

A rotação da cena inteira para que a câmera volte à sua posição original permite-me determinar a localização dos vértices em 2:

Os arquivos do 3DS Max usados para prepará-lo sãomax 1, max 2 emax 3

Aqui estão as posições dos vértices antes e depois, os intrínsecos, etc .:

Observe que os vértices da camera2 não são 100% precisos, há um pouco de ruído deliberad

existem os números em um arquivo do Excel

O código que eu preciso, que deve ser prontamente traduzido em VB.Net ou C #, usando EMGUCV e OpenCV, quando necessário, pega os 2 conjuntos de vértices e os intrínsecos e produz essa saída:

Camera 2 is at -90 X, +60 Y, +50 Z rotated -5 Y, 10 X, -3 Z.
The homography matrix to translate points in A to B is:
a1, a2, a3
b1, b2, b3
c1, c2, c3

Não sei se a homografia é 3X3 ou 3X4 para coordenadas homogêneas, mas isso deve permitir que eu traduza os vértices de 1 para 2.

Eu também não sei os valores a1, a2, etc; é isso que você precisa encontrar>; -)

A oferta de recompensas 500 'substitui' a recompensa que ofereci a esta pergunta muito semelhante, Adicionei um comentário apontando para esta pergunta.

EDIT2: Gostaria de saber se a maneira como estou fazendo esta pergunta é enganosa. Parece-me que o problema é mais o ajuste da nuvem de pontos do que a geometria da câmera (se você sabe como traduzir e girar A para B, você sabe que a câmera se transforma e vice-versa). Nesse caso, talvez a solução possa ser obtida com o algoritmo de Kabsch ou algo semelhante

questionAnswers(3)

yourAnswerToTheQuestion