Em uma sonda de visão estéreo calibrada, como obter as “matrizes de câmera” necessárias para implementar um algoritmo de triangulação 3D?

Estou tentando implementar o método de triangulação 3D linear (homogêneo) (relativamente simples) da "Multiple View Geometry" de Hartley & Zisserman (seção 12.2), com o objetivo de implementar seu "algoritmo ótimo" completo no futuro. Agora, com base emessa questãoEstou tentando fazer com que funcione no Matlab, e depois o portarei em C ++ e OpenCV, testando a conformidade ao longo do caminho.

O problema é que não tenho certeza de como usar os dados que tenho. Calibrei meu equipamento estéreo e obtive as duas matrizes de câmera intrínsecas, dois vetores de coeficientes de distorção, a matriz de rotação e o vetor de translação relacionando as duas câmeras, bem como as matrizes essenciais e fundamentais. Eu também tenho as coordenadas 2D de dois pontos que deveriam ser correspondências de um único ponto 3D nos sistemas de coordenadas das duas imagens (tomadas pela 1ª e 2ª câmera respectivamente).

O algoritmo toma como entrada as coordenadas de dois pontos e duas "matrizes de câmera" P e P "4x3". Estas não são obviamente as matrizes de câmeras intrínsecas (M, M ') obtidas da calibração, porque elas são 3x3, e também porque a projeção usando-as sozinhas coloca um ponto 3D em dois sistemas de coordenadas distintos, isto é - o extrínseco ( rotação / tradução) faltam dados.

O livro de H & Z contém informações (capítulo 9) sobre a recuperação das matrizes requeridas da matriz fundamental ou essencial usando a decomposição de SVD, mas com problemas adicionais próprios (por exemplo, ambiguidade de escala). Eu sinto que não preciso disso, já que tenho a rotação e a tradução explicitamente definidas.

A questão então é: seria correto usar a primeira matriz intrínseca, com uma coluna extra de zeros como a primeira "matriz da câmera" (P = [M | 0]), e então multiplicar a segunda matriz intrínseca por uma matriz extrínseca? composto da matriz de rotação e o vetor de translação como uma coluna extra para obter a segunda "matriz de câmera" requerida (P '= M' * [R | t])? Ou deveria ser feito de forma diferente?

Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion