Estimativa de posição 3D usando câmera 2D

9

Eu tenho uma câmera (iPhone), tenho um objeto de controle 3D na imagem que conheço muito bem suas propriedades. (Meu objeto de controle). Há também um objeto secundário em movimento. O objetivo final é estabelecer a trajetória 3D do objeto em movimento por um determinado período de tempo. (Rastreamento)

Eu gostaria de perguntar, eu poderia descobrir?

  • Distância do telefone ao objeto de controle (para discussão, vamos supor que a câmera esteja a uma certa altura e a uma certa distância, nenhum deles é conhecido, mas a câmera é perpendicular à superfície conhecida)

  • O objeto secundário onde eu posso localizar o objeto em cada quadro subseqüente. Meu objetivo é estimar sua trajetória 3D, como indiquei acima.

Pergunta de bônus, podemos tornar o sistema de forma que a distância do telefone ao objeto de controle possa ser definida (embora não seja a preferida), isso me ajudaria com o segundo ponto?

Ktuncer
fonte
Você está familiarizado com a literatura nesta área? Caso contrário, posso recomendar alguns trabalhos, mas esteja avisado: a matemática está envolvida.
Emre
@ emre seria ótimo se você pudesse fornecer algumas dicas. A matemática não é problema, nós amamos matemática.
Ktuncer
@emre Eu dei uma rápida olhada no artigo de revisão. Isso é mais para rastrear, eu posso rastrear o objeto facilmente, esse não é o problema. Eu posso apontar em qual pixel o objeto está. A questão é onde o objeto está no espaço 3D. Isso é possível? Basicamente, tenho outro objeto no espaço 3D que conheço as propriedades que posso usar como quadro de referência, mas é isso.
Ktuncer
Sinto muito, papel errado. Talvez você possa adaptar o rastreamento de trajetória 3D baseado em visão para ambientes desconhecidos [PDF]? Eles usam uma câmera estéreo; isso é uma possibilidade para você?
Emre

Respostas:

15

Se o seu objeto possui 6 pontos conhecidos (coordenadas 3D conhecidas, e Z ), é possível calcular a localização da câmera relacionada ao sistema de coordenadas dos objetos.X,YZ

Primeiro alguns princípios.

(X,Y,Z)ωX=ω[XYZ1]Tω=1XXωx=ω[XY1]ω,X,YZ

3×4

x=PX

xX

Lembramos que o produto cruzado entre dois vetores vetores pode ser definido como multiplicação de vetores matriciais, de modo que:

v×u=(v)xu=[0v3v2v30v1v2v10]u

v×v=0

Px

(x)xx=(x)xPX=0

Aha! O resultado deve ser vetor zero. Se agora abrirmos a equação, obtemos:

[0wyw0xyx0][P1,1P1,2P1,3P1,4P2,1P2,2P2,3P2,4P3,1P3,2P3,3P3,4]X=[P3,4WyP2,1XwP2,2YwP2,4Ww+P3,1XyP2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1XwP3,4Wx+P1,2YwP3,1Xx+P1,3ZwP3,2YxP3,3ZxP2,4Wx+P2,1XxP1,4WyP1,1Xy+P2,2YxP1,2Yy+P2,3ZxP1,3Zy]=0

P

[0000XwYwZwWwXyYyZyWyXwYwZwWw0000XxYxZxWxXyYyZyWyXxYxZxWx0000][P1P2P3]=0

PnnP

Pequena pausa para que possamos reunir nossos pontos fortes. Observe que a equação da matriz anterior deve ser formada para cada correspondência 3D-> 2D conhecida (deve haver pelo menos 6 delas).

2×12A

A[P1P2P3]=0

[P1P2P3]=0

Felizmente, podemos usar a decomposição de valor singular (SVD) para forçar

[P1P2P3]=1

AP[P1P2P3]TP

P

P=K[RRC]

CPP

(Hartley, Zisserman - Geometria de Múltiplas Vistas em Visão Computacional)

X

x1=P1Xx2=P2X

(x1)xP1X=0(x2)xP2X=0

E assim por diante.

buq2
fonte
É correto dizer que sua maneira de calcular a posição 3D da câmera é equivalente ao OpenCV resolvePnp? docs.opencv.org/2.4/modules/calib3d/doc/... (procurar solvePnP na página que eu não pode colar uma URL com um #.)
gregoiregentil