Estou trabalhando no tópico estimativa de poses de câmera para aplicativos de realidade aumentada e rastreamento visual há um tempo e acho que, embora haja muitas informações detalhadas sobre a tarefa, ainda existem muitas confusões e mal-entendidos.
Acho que as próximas perguntas merecem uma resposta passo a passo detalhada.
- O que são intrínsecos à câmera?
- O que são extrínsecos de câmera?
- Como computo a homografia a partir de um marcador plano?
- Se eu tiver homografia, como posso fazer a pose da câmera?
Respostas:
É importante entender que o único problema aqui é obter os parâmetros extrínsecos. As intrínsecas das câmeras podem ser medidas off-line e há muitas aplicações para esse fim.
O que são intrínsecos à câmera?
Câmera parâmetros intrínsecos é geralmente chamado de matriz de calibração da câmara, . Nós podemos escreverK
Onde
e α v são o factor de escala no u e v coordenar as direcções, e são proporcionais ao comprimento focal f da câmara: α u = k u f e α v = k v f . k u e k v são o número de pixels por unidade de distância nasdireções u e v .αu αv u v f αu=kuf αv=kvf ku kv u v
é chamado de ponto principal, geralmente as coordenadas do centro da imagem.c=[u0,v0]T
é a inclinação, apenas diferente de zero se u e v não são perpendiculares.s u v
Uma câmera é calibrada quando os intrínsecos são conhecidos. Isso pode ser feito facilmente, para que não seja considerado um objetivo na visão computacional, mas um passo trivial off-line.
Alguns links:
ftp://svr-ftp.eng.cam.ac.uk/pub/reports/mendonca_self-calibration.pdf
O que são extrínsecos de câmera?
Extrínseca da câmera ou parâmetros externos é uma matriz 3 × 4 que corresponde à transformação euclidiana de um sistema de coordenadas do mundo para o sistema de coordenadas da câmera. R representa um 3 × 3 matriz de rotação e t uma tradução.[R|t] 3×4 R 3×3 t
Os aplicativos de visão computacional concentram-se na estimativa dessa matriz.
Como computo a homografia a partir de um marcador plano?
A homografia é uma matriz 3 × homogênea que relaciona um plano 3D e sua projeção de imagem. Se temos um plano Z = 0, a homografia H que mapeia um ponto M = ( X , Y , 0 ) T nesse plano e seu correspondente ponto 2D m sob a projeção P = K [ R | t ] é3×3 Z=0 H M=(X,Y,0)T m P=K[R|t]
Para calcular a homografia, precisamos de pares de pontos câmera mundial. Se tivermos um marcador plano, podemos processar uma imagem para extrair recursos e, em seguida, detectar esses recursos na cena para obter correspondências.
Só precisamos de 4 pares para calcular a homografia usando a Transformação Linear Direta.
Se eu tiver homografia, como posso fazer a pose da câmera?
Due to redundancy it is necessary to normalize[R|t] dividing by, for example, element [3,4] of the matrix.
fonte
While explaining the two-dimensional case very well, the answer proposed by Jav_Rock does not provide a valid solution for camera poses in three-dimensional space. Note that for this problem multiple possible solutions exist.
This paper provides closed formulas for decomposing the homography, but the formulas are somewhat complex.
O OpenCV 3 já implementa exatamente essa decomposição ( decomposeHomographyMat ). Dada uma homografia e uma matriz intrínseca corretamente dimensionada, a função fornece um conjunto de quatro rotações e traduções possíveis.
A matriz intrínseca, neste caso, precisa ser dada em unidades de pixel, o que significa que seu ponto principal é geralmente
(imageWidth / 2, imageHeight / 2)
e sua distância focal é geralmentefocalLengthInMM / sensorWidthInMM * imageHeight
.fonte
focalLengthInMM / sensorWidthInMM * imageWidth
? Why you choose the height instead?