Material de Auxílio Didático

EA978 - Sistemas de informações gráficas

Primeiro semestre de 2003

DCA/FEEC/Unicamp


1o Projeto

Atividade 4 - Calibração de Câmera

Objetivo: Determinar os parâmetros da câmera da cena a partir de um conjunto de correspondências entre pontos 2D projetados e pontos 3D nas coordenadas do mundo.


Calibração de Câmera

Use o seguinte esqueleto de código para implementar essa atividade: pick.c

O código dado é uma implementação de um algoritmo de ray-picking usando o modo de seleção do OpenGL juntamente com a função de projeção inversa gluUnProject(). Para executá-lo basta modificar as funções init(), display() e reshape() conforme seu código gerado na atividade anterior. Os comandos de configuração da matriz de projeção também devem ser alterados na função mouse() conforme indicam os comentários.

Ao executar o programa, clique com o botão esquerdo do mouse sobre os objetos da cena. Imediatamente o programa mostrará as coordenadas 2D do ponto do clique (coordenadas da janela de visualização) e a correspondência desse ponto com as coordenadas 3D do objeto mais próximo na cena (coordenadas do mundo). Para realizar a calibração de câmera são necessárias pelo menos 6 dessas correspondências entre pontos 2D e 3D (6 pares de pontos). Uma vez obtidos os pares de pontos, os parâmetros de uma matriz de perspectiva podem ser obtidos pela resolução de um sistema de 12 equações lineares a 12 variáveis. Para maiores informações consulte as notas de aula sobre Transformações Perspectivas e Projeções.

Determine os parâmetros da matriz de perspectiva e realize a sua decomposição em matrizes P, C, R e G conforme detalhado nas notas de aula. Compare esses resultados com os valores das matrizes de projeção e visualização do OpenGL. Para obter tais matrizes, utilize os comandos glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix) e glGetDoublev(GL_PROJECTION_MATRIX, projmatrix), onde mvmatrix e projmatrix são arrays GLdouble de 16 elementos. O esqueleto de código gerado utiliza esses comandos na função processHits().


Autor: Harlen Costa Batagelo (harlen@dca.fee.unicamp.br)