Como posso projetar um plano arbitrário identificado por 4 pontos em um avião 2D?
-
26-09-2019 - |
Pergunta
A questão que estamos tentando resolver a questão de localizar um ponto em duas representações diferentes de um avião. O primeiro plano que temos é girado para criar perspectiva; O segundo é uma visão 2D do mesmo plano. Temos 4 pontos em cada um dos planos que sabemos ser equivalente. A questão é que, se tivermos um ponto arbitrário no plano 1, como encontramos o ponto correspondente no plano 2?
Provavelmente é melhor ilustrar o caso de uso para esclarecer melhor a pergunta. Temos uma imagem ilustrada à esquerda.
Diagrama de layout 2D do espaço
Então, os dados que temos são os quadrados vermelhos de ambas as fotos. Observe que, se possível, gostaria que fosse possível que o espaço 2D não seja necessariamente um quadrado. Estes estão disponíveis para nós com antecedência e conhecidos. Eu também tenho pontos verdes dispostos no avião na primeira imagem. Eu gostaria de poder fazer uma projeção do ponto na imagem 1 no espaço na imagem 2.
Observe também para a imagem 1, não tenho uma janela ou posição de olho definida. Só sei que o quadrado vermelho da Imagem 1 é uma transformação da imagem da forma quadrada vermelha 2 e que a imagem 2 está no espaço 2D.
Solução
Este é um caso especial de encontrar mapeamentos entre quadriláteros que preservam linhas retas. Estes são geralmente chamados de transformações homográficas. Aqui, um dos quadríceps é um quadrado, então este é um caso especial popular. Você pode pesquisar no Google estes Termos ("Quad to Quad", etc.) para encontrar explicações e código, mas aqui estão alguns para você.
Estimativa de transformação em perspectiva
uma discussão no fórum de jogos
extrair uma imagem quadrilateral para um retângulo
Projetivo deformação e mapeamento
ProjectiveMappings para o ImageWarping Por Paul Heckbert.
A matemática não é particularmente agradável, mas também não é tão difícil. Você também pode encontrar algum código de um dos links acima.