Estimativa passo a passo da posição da câmera para rastreamento visual e marcadores planares

21

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?
Jav_Rock
fonte
Estou confuso com a renormalização que você faz: 1. H é a homografia encontrada nos dados usando algum procedimento (por exemplo, SVD). 2. inv (K) * H = A é a coisa com a qual você trabalha aqui. Então você faz q1 = a1 / norma (a1) e q2 = a2 / norma (a2) como colunas ortonormais de uma matriz de rotação e faz q3 = q1xq2 ... Então você pega t / (algo) para obter o vetor de tradução. Como é possível dividir o q1 e o q2 por possíveis coisas diferentes, e como você escolhe o que dividir por t? Ou é a ideia de que o procedimento de SVD e multiplicação por inv (K) dar algo próximo mas não completamente ortogonal / orthonormal rotação da matriz, então th
user2600616
Mas como eu consegui o ponto 3D (X, Y, 1)?
precisa saber é o seguinte

Respostas:

19

É 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

K=[αusu00αvv0001]

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αvuvfαu=kufαv=kvfkukvuv

  • é 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.suv

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.

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×4R3×3t

Os aplicativos de visão computacional concentram-se na estimativa dessa matriz.

[R|t]=[R11R12R13TxR21R22R23TyR31R32R33Tz]

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×3Z=0HM=(X,Y,0)TmP=K[R|t]

m~=K[R1R2R3t][XY01]

=K[R1R2t][XY1]

H=K[R1R2t]

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?

HK[R|t]H1H2R1R2R3[R|t]

R3=R1R2

Due to redundancy it is necessary to normalize [R|t] dividing by, for example, element [3,4] of the matrix.

Jav_Rock
fonte
4
I think it is misleading to say that calibration is "easy and not the goal of CV". In usual case we also need to estimate the distortion parameters. Instead of self calibration I would recommend planar calibration (Zhang - A Flexible New Technique for Camera Calibration) as it is more flexible if separated calibration procedure can be done. You also have small error in "If I have homography how can I get the camera pose?" as you don't take into the account the calibration (H_{calib} = K^-1H).
buq2
3
camera pose from homography is wrong. There are several way to do it' some of them are highly non-trivial.
mirror2image
I don'r see why it is wrong. I compute it this way and works. Why do you say it is wrong?
Jav_Rock
3
You wrote in the last section that H^1 and R^1 and equal, but in the 3rd section you state that H=K[R T] which would mean that R^1 is actually K^-1H^1. But this is not strictly true as there is infinite number of H which will satisfy the equations and will cause problems when solving R^1, R^2 and T (the unknown scale). Your answer disregards robust intrinsic and distortion calibration and some of the equations are wrong for which reason this is not a good answer for the question.
buq2
Yes, I was missing the kalibration matrix in step three as I took this from my code and I multiply by K in a different function of the codes.
Jav_Rock
3

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 é geralmente focalLengthInMM / sensorWidthInMM * imageHeight.

Emiswelt
fonte
O que é uma matriz intrínseca corretamente dimensionada?
Guig
1
I have updated my answer. Please see above.
Emiswelt
Hey @Emiswelt, isn't the focal length focalLengthInMM / sensorWidthInMM * imageWidth? Why you choose the height instead?
El Marce