Pergunta

Estou tentando calcular as coordenadas 3D de vários pares de dois pontos de vista.
Primeiro, usei a função matlab estimateFundamentalMatrix() para obter o F dos pontos correspondidos (Número> 8), que é:

F1 =[-0.000000221102386   0.000000127212463  -0.003908602702784
     -0.000000703461004  -0.000000008125894  -0.010618266198273
      0.003811584026121   0.012887141181108   0.999845683961494]

E minha câmera – tirada essas duas fotos – foi pré-calibrada com a matriz intrínseca:

K = [12636.6659110566, 0, 2541.60550098958
     0, 12643.3249022486, 1952.06628069233
     0, 0, 1]

A partir dessas informações, calculei a matriz essencial usando:

E = K'*F*K

Com o método SVD, finalmente consegui as matrizes de transformação projetiva:

P1 = K*[ I | 0 ] 

e

P2 = K*[ R | t ]

Onde R e t são:

R = [ 0.657061402787646 -0.419110137500056  -0.626591577992727
     -0.352566614260743 -0.905543541110692   0.235982367268031
     -0.666308558758964  0.0658603659069099 -0.742761951588233]

t = [-0.940150699101422
      0.320030970080146
      0.117033504470591]

Eu sei que deveria haver 4 soluções possíveis, no entanto, minhas coordenadas 3D calculadas pareciam não estar corretas.
Usei a câmera para tirar fotos de um objeto PLANO com pontos marcados.Combinei os pontos manualmente (o que significa que não deve haver erros óbvios sobre a matéria-prima).Mas o resultado acabou sendo uma superfície com algumas faixas.
Acho que isso pode ser devido ao motivo pelo qual as imagens não foram processadas com distorções (mas na verdade lembro que sim).

Eu só quero saber se esse método resolve o problema da reconstrução 3D, certo?Principalmente quando já conhecemos a matriz intrínseca da câmera.

Editar por JCraft em 4 de agosto:Refiz o processo e consegui algumas fotos mostrando o problema, vou escrever outra pergunta detalhadamente e depois postar o link.

Editar por JCraft em 4 de agosto:Postei uma nova pergunta: Câmera calibrada obtém pontos correspondentes para reconstrução 3D, teste ideal falhou.E @Schorsch realmente aprecio sua ajuda na formatação da minha pergunta.Vou tentar aprender como fazer inputs no SO e também tentar melhorar minha gramática.Obrigado!

Foi útil?

Solução

Se você tiver apenas a matriz fundamental e os intrínsecos, só poderá obter uma reconstrução em escala.Esse é o seu vetor de tradução t em algumas unidades desconhecidas.Você pode obter os pontos 3D em unidades reais de diversas maneiras:

  • Você precisa ter alguns pontos de referência no mundo com distâncias conhecidas entre eles.Dessa forma, você pode calcular suas coordenadas em unidades desconhecidas e calcular o fator de escala para converter suas unidades desconhecidas em unidades reais.
  • Você precisa conhecer os aspectos extrínsecos de cada câmera em relação a um sistema de coordenadas comum.Por exemplo, você pode ter um padrão de calibração xadrez em algum lugar da cena, onde você pode detectar e calcular extrínsecos.Veja isso exemplo.A propósito, se você conhece os extrínsecos, poderá calcular a matriz fundamental e as matrizes de projeção da câmera diretamente, sem precisar combinar os pontos.
  • Você pode fazer a calibração estéreo para estimar o R ​​e o t entre as câmeras, o que também forneceria as matrizes Fundamental e Essencial.Veja isso exemplo.

Outras dicas

Objetos planos são superfícies críticas, não sendo possível atingir seu objetivo a partir deles.tente adicionar dois (ou mais) pontos fora do plano (veja Hartley e Zisserman ou outro texto sobre o assunto, se ainda estiver interessado)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top