Como posso encontrar as coordenadas 3D de um retângulo projetada?

votos
3

Eu tenho o seguinte problema que é principalmente algorítmica.

  • Vamos ABCD ser um retângulo com dimensões conhecidas D1, D2 deitado em algum lugar no espaço.
  • O ABCD rectângulo é projectado num plano P (formando, no caso geral de uma trapézio KLMN). Sei o H. matriz de projecção
  • I também podem encontrar as coordenadas 2D dos pontos do bordo trapézio K, L, M, N.

A questão é a seguinte:

  • Dada a Projecção matriz H, As coordenadas das extremidades sobre o trapézio e o conhecimento que o nosso objecto é um rectângulo com geometria especificada (dimensões D1, D2), que se poderia calcular as coordenadas 3D dos pontos A, B, C, D?

Estou agarrando imagens de retângulos simples com uma única câmera e eu quero reconstruir os retângulos no espaço. Eu poderia pegar mais de uma imagem e usar triangulação, mas isso não é desejado.

sozinho a matriz de projecção não é suficiente desde um raio é projectada para o mesmo ponto. O fato de que o objeto tenha conhecido dimensões, me faz acreditar que o problema pode ser resolvido e não há soluções finitas.

Se eu descobrir como esta reconstrução pode ser feita Eu sei como programá-lo. Então eu estou pedindo uma resposta algorítmica / math.

Todas as idéias são bem-vindos Graças

Publicado 10/03/2009 em 17:16
fonte usuário
Em outras línguas...                            


5 respostas

votos
1

Vou dar uma resposta bastante breve aqui, mas eu acho que você vai me entende geral. Eu estou supondo que você tem uma matriz de projeção 3x4 (P), então você deve ser capaz de obter o centro da câmera por encontrar o vector nulo direito de P: chamá-lo C.

Depois de ter C, poderá ser capaz de calcular os raios com a mesma direcção como vectores CK, CL, CM e CN (isto é, o produto cruzado de C e K, L, M ou N, por exemplo CxK)

Agora tudo que você tem a fazer é calcular 3 pontos (U1, U2, U3) que satisfaça as seguintes 6 restrições (assumindo arbitrariamente KL e KN são adjacentes e || KL ||> = || KN || se d1> = d2) :

  1. U1 encontra-se em CK, isto é, = 0 u1.CK
  2. u2 encontra-se em CL
  3. u3 encontra-se em CN
  4. || u1-u2 || = d1
  5. || U1-U3 || = d2
  6. (U1xu2). (U1xu3) = 0 (ortogonalidade)

onde, AB = produto de ponto de vectores A e B || A || = Norma euclidiana de A = AxB produto transversal de A e B

Respondeu 20/03/2009 em 08:10
fonte usuário

votos
1

Eu acho que este problema irá gerar um conjunto de possíveis soluções, pelo menos em 2D que faz. Para o caso 2D:

           |   
-----------+-----------
          /|\
         / | \
        /  |  \
       /---+---\VP
      /    |    \
     /     |     \
    /      |      \
   /       |       \
  /        |   --   \
 /         |    |    \
/          |    |     \

No diagrama acima, o segmento vertical e o segmento horizontal projectaria com a mesma linha no plano de exibição (VP). Se você desenhou isso para dimensionar você veria que há dois raios do olho passando por cada ponto final da linha unprojected. Esta linha pode ser em muitas posições e rotações - imagine deixar cair um pedaço de pau em um cone, ele pode ficar preso em qualquer número de posições.

Assim, no espaço 2D, há um número infinito de soluções dentro de um conjunto bem definido.

Isso se aplica a 3D?

O algoritmo seria ao longo das linhas de:

  1. Inverta a matriz de projecção
  2. Calculam-se os quatro raios que passam através dos vértices do rectângulo, criando eficazmente um pirâmide enviesada
  3. Experimente e se encaixam no seu retângulo em pirâmide. Este é o pouco complicado e eu estou tentando visualizar mentalmente retângulos em pirâmides para ver se eles podem caber em mais de uma maneira.

EDIT: Se você soubesse a distância para o objeto que se tornaria trivial.

EDIT V2:

OK, vamos Rn ser os quatro raios em espaço do mundo, isto é transformado através da matriz inversa, expressa em termos de m.Rn, onde | Rn | é um. Os quatro pontos da rectange são, portanto:

P1 = aR1
P2 = bR2
P3 = cR3
P4 = dR4

onde P1..P4 são os pontos ao redor da circunferência do retângulo. A partir disso, usando um pouco de matemática vetor, podemos derivar quatro equações:

|aR1 - bR2| = d1
|cR3 - dR4| = d1
|aR1 - cR3| = d2
|bR2 - dR4| = d2

em que D1 e D2 são os comprimentos dos lados do rectângulo e a, b, c e d são os desconhecidos.

Agora, não pode haver nenhuma solução para o acima, caso em que você precisa para trocar d1 com d2. Você pode expandir cada linha para:

(a.R1x - b.R2x) 2 + (a.R1y - b.R2y) 2 + (a.R1z - b.R2z) 2 = d1 dois

em que R1? e R2? são os componentes x / y / z de raios 1 e 2. Observe que você está resolvendo para a e b no exemplo acima, não x, y, z.

Respondeu 10/03/2009 em 17:35
fonte usuário

votos
1

Você precisa calcular o inverso de sua matriz de projeção. (Sua matriz não pode ser singular)

Respondeu 10/03/2009 em 17:26
fonte usuário

votos
0

A matriz de projecção incorpora tanto o perspectiva e a escala, de modo que o inverso irá dar-lhe a solução que são depois. Eu acho que você está assumindo que só encapsula a perspectiva, e você precisa de algo mais para escolher a escala correta.

Respondeu 10/03/2009 em 17:53
fonte usuário

votos
0

m_oLogin é certo. Se eu entendo o seu objetivo, a imagem que a câmera se encaixe é o plano P, certo? Se assim for, você está medindo K, L, M, N fora da imagem 2D. É necessário o inverso da matriz de projecção para reconstruir A, B, C, e D.

Agora eu nunca fiz isso antes, mas ocurrs-me que você pode executar para o mesmo problema GPS faz com apenas 3 correções de satélite - há duas soluções possíveis, um 'por trás' P e um 'na frente' do mesmo, certo?

Respondeu 10/03/2009 em 17:34
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more