Matriz de calibração da câmera Como fazer?
-
27-09-2019 - |
Pergunta
Com isto Caixa de ferramentas Eu estava realizando a calibração da minha câmera.
No entanto, as saídas da caixa de ferramentas resulta em forma de matriz e, sendo um noob, eu realmente não entendo coisas matemáticas.
A matriz está na seguinte forma.
Onde r é uma matriz de rotação, t é um vetor de tradução.
E esses são os resultados que obtive da caixa de ferramentas. Ele gera valores em pixels.
-0.980755 -0.136184 -0.139905 217.653207
0.148552 -0.055504 -0.987346 995.948880
0.126695 -0.989128 0.074666 371.963957
0.000000 0.000000 0.000000 1.000000
Usando esses dados, posso saber quanto minha câmera é girada e a distância do objeto de calibração?
Solução
A parte da distância é fácil. A tradução da origem é dada pelos três primeiros números na coluna mais à direita. Isso representa a tradução nas direções x, y e z, respectivamente. No seu exemplo, a posição da câmera p = (px, py, pz) = (217.653207, 995.948880, 371.963957). Você pode levar a distância euclidiana entre a localização da câmera e a localização do objeto de calibração (cx, cy, cz). Isto é, seria apenas sqrt ((px-Cx)2 + (py-Cy)2 + (pz-Cz)2 )
A parte mais difícil diz respeito à rotação que é capturada nos elementos 3x3 superior esquerdo da matriz. Sem saber exatamente como eles chegaram a isso, você está um pouco sem sorte. Isto é, não é fácil converter isso de volta para Ângulos de Euler, Se é o que você quer. No entanto, você pode transformar esses elementos em um Rotação de quaternion O que lhe dará o vetor e o ângulo de unidade exclusivos para girar a câmera para essa orientação. Os detalhes do cálculo são fornecidos aqui. Depois de ter a rotação do quaternão, você pode aplicá -la facilmente aos vetores n = (0, 0, 1), up = (0, 1, 0) e à direita = (1, 0, 0) para obter o normal (direção a câmera é apontada), vetores para cima e corretos. O vetor certo só é útil se você estiver interessado em matar a câmera para a esquerda ou direita da sua posição atual.
Outras dicas
Eu acho que o código usa o 'padrão'Formação - então você encontrará mais detalhes no OpenCV Library Docs ou o livro deles.