Pergunta

Como uma continuação a anterior minha anterior pergunta sobre como determinar os parâmetros da câmara I formularam um novo problema.

Eu tenho duas fotos do mesmo rectângulo:

A primeira é uma imagem sem quaisquer transformações e mostra o retângulo como ela é.

A segunda imagem mostra o rectângulo após alguma transformação 3d (XYZ-rotação, dimensionamento, XY-tradução) é aplicado. Isso fez com que o retângulo de olhar um trapézio.

Espero que o seguinte quadro descreve o meu problema:

alt texto http://wilco.menge.nl /application.data/cms/upload/transformation%20matrix.png

Como determinar o que transformações? (Mais especificamente: o transformação de matriz) ter causado isso tranformation

Eu sei que os locais de pixels dos cantos em ambas as imagens, portanto, eu também sei que as distâncias entre os cantos.

Foi útil?

Solução

Estou confuso. É este um 2D ou um problema 3d?

A forma como eu entendo, você tem um retângulo plano incorporado no espaço 3D, e você está olhando para dois 2d "imagens" do mesmo - um da versão original e uma baseada na versão transformada. É este correto?

Se isto estiver correto, então não há informações suficientes para resolver o problema. Por exemplo, suponha que as duas imagens exatamente o mesmo. Isto poderia ser porque a tradução é a identidade, ou poderia ser porque a tradução move o retângulo duas vezes mais longe da câmera e duplica seu tamanho (assim fazendo com que pareça exatamente o mesmo).

Outras dicas

Este é um problema de matemática, não de programação ..

você precisa definir um conjunto de equações (sua matriz de transformação, o meu palpite é de 3 equações) e depois resolvê-lo para os 4 transformações dos angulares pontos.

Eu só nunca descreveu isso usando palavras alemãs ... para que o acima irá soar estranho ..

Com base nas informações que você tem, isso não é assim tão fácil. Vou dar-lhe algumas ideias para brincar, no entanto. Se você tivesse a 3D coordenadas dos cantos, você teria um tempo mais fácil. Aqui está a idéia básica.

  1. Mover um canto para a origem. Depois disso, rotações terá lugar sobre a origem.
  2. Determinar vetores dos eixos. Faça isso subtraindo os cantos adjacentes do ponto de origem. Estes serão um x local e eixo y para o seu mundo.
  3. Determinar ângulos usando os vetores. Você pode usar o ponto e cruz produtos para determinar o ângulo entre o eixo x local e do eixo x global (1, 0, 0).
  4. Girar pelo ângulo no passo 3. Isto lhe dará um novo eixo x, que deve coincidir com o eixo x global e um novo eixo y local. Você pode, então, determinar outra rotação sobre o eixo x, que vai trazer o eixo y em alinhamento com o eixo mundial y.

Sem as coordenadas z, você pode ver que isso vai ser difícil, mas este é o processo geral. Espero que isso ajude.

A solução não será único, como Alex319 ressalta.

Se a segunda imagem é realmente um trapézio como você diz, então isso não vai ser muito difícil. É um trapézio (não um paralelogramo) por causa da perspectiva, por isso deve ser um trapézio isósceles.

Desenhar as duas diagonais. Eles se cruzam no centro do retângulo, de modo que cuida da tradução.

Girar o trapézio até seus lados paralelos são paralelos aos dois lados do retângulo original. (Quais são os dois? Não importa.)

Desenhar um terceiro paralelo através do centro. Dimensionar isso para os lados do retângulo que você escolheu.

Agora, para o fora rotação do plano. Medir a distância do centro de um dos lados paralelos e usar a lei dos senos.

Se não é um trapézio, apenas um quadralateral, então vai ser mais difícil, você tem que usar os ângulos entre as diagonais para encontrar o eixo de rotação.

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