Pergunta

Eu tenho 3 pontos em um espaço 3D que conheço os locais exatos. Suponha que eles são:. (x0,y0,z0), (x1,y1,z1) e (x2,y2,z2)

Também tenho uma câmera que está a olhar para estes 3 pontos e sei que os 2D locais desses três pontos no plano visão da câmera. Assim, por exemplo (x0,y0,z0) será (x0',y0') e (x1,y1,z1) será (x1',y1') e (x2,y2,z2) será (x2',y2') do ponto de vista da câmera.

O que é a maneira mais fácil de encontrar a matriz de projeção que vai projetar esses 3D pontos em 2D pontos no plano visão da câmera. Nós não sabemos nada sobre a localização da câmera.

Foi útil?

Solução

Isto dá-lhe dois conjuntos, cada um de três equações em 3 variáveis:

a*x0+b*y0+c*z0 = x0'
a*x1+b*y1+c*z1 = x1'
a*x2+b*y2+c*z2 = x2'

d*x0+e*y0+f*z0 = y0'
d*x1+e*y1+f*z1 = y1'
d*x2+e*y2+f*z2 = y2'

usar apenas qualquer método de resolução de equações simultâneas é mais fácil em sua situação (não é mesmo difícil de resolver esses "à mão"). Em seguida, seu matriz de transformação é apenas ((a, b, c) (d, e, f)).

...

Na verdade, isso é mais simplificado e assume uma câmera apontada para a origem do seu sistema 3D e nenhuma perspectiva de coordenadas.

Para perspectiva, a matriz de transformação funciona mais como:

               ( a, b, c, d )   ( xt )
( x, y, z, 1 ) ( e, f, g, h ) = ( yt )
               ( i, j, k, l )   ( zt )

( xv, yv ) = ( xc+s*xt/zt, yc+s*yt/zt ) if md < zt;

mas a matriz 4x3 é mais restrito do que 12 graus de liberdade, uma vez que deve ter

a*a+b*b+c*c = e*e+f*f+g*g = i*i+j*j+k*k = 1
a*a+e*e+i*i = b*b+f*f+j*j = c*c+g*g+k*k = 1

Portanto, você provavelmente deve ter 4 pontos para obter 8 equações para cobrir as 6 variáveis ??para a posição da câmera e ângulo e 1 mais para a ampliação dos pontos de vista 2-D, uma vez que vai ser capaz de eliminar as coordenadas "centro" ( xc, yc).

Então, se você tem 4 pontos e transformar seus pontos de vista 2-D para ser em relação ao centro da tela, então você pode obter 14 equações simultâneas em 13 variáveis ??e resolver.

Infelizmente, seis das equações não são equações lineares. Felizmente, todas as variáveis ??nessas equações são restritas aos valores entre -1 e 1 por isso ainda é provavelmente viável para resolver as equações.

Outras dicas

Sua câmera tem (pelo menos) 7 graus de liberdade - 3 para a posição, 3 para orientação e 1 para FOV. Tenho certeza de que alguém vai me corrija se eu estiver errado, mas não parece 3 pontos são suficientes para uma solução completa.

Para uma solução generalizada para este problema, olhar para cima 'Ver Correlação' em Gráficos Gems II.

O que você está procurando é chamado de algoritmo de estimação Pose. Ter um olhar para a implementação POSIT em OpenCV: http://opencv.willowgarage.com /documentation/c/calib3d_camera_calibration_and_3d_reconstruction.html#posit

Você vai precisar de quatro ou mais pontos, e eles podem não estar no mesmo plano.

Um tutorial para esta implementação é aqui: http://opencv.willowgarage.com/wiki/Posit

Tome o cuidado, porém: no tutorial uma janela quadrada é usada, para que todos vista coordenadas estão no -1, -1 a 1,1 gama. Isso nos leva a supor que estes devem estar no sistema de câmera (antes da correção razão de aspecto) de coordenadas. Este não é o caso, por isso, se você usa uma janela com por exemplo, um 4:. relação de aspecto 3, em seguida, as suas coordenadas de entrada deve estar na -1,3333, -1 para 1.3333,1 gama

A propósito, se os seus pontos deve mentira no mesmo plano, então você também pode olhar para o algoritmo CameraCalibration de OpenCV, mas isso é mais envolvido de configurar e requer mais pontos como entrada . No entanto, também vai render-lhe a informação distorção e parâmetros intrínsecos de sua câmera.

Eu não acho que há informações suficientes para encontrar uma solução definitiva. Sem saber a sua localização câmera e sem saber o seu plano de exibição, há um número infinito de matrizes que pode resolver este problema.

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