T2 - Visualização de Imagens Panorâmicas

Este trabalho consiste em desenvolver um visualizador simples de imagens panoramicas como as tratadas na dissertação no trabalho de Sacht[1]. Para isso, deve-se ler uma imagem equiretangular, como a abaixo e produzir uma visualização dela como mostram os plug-ins disponiveis no Flickr [2]. Há um tutorial de como produzir imagens panorâmicas equiretangulares em [3]. Este trabalho foi desenvolvido em conjunto com Fabrício Cardoso. O programa desenvolvido, seus fontes e as imagens utilizadas como exemplo podem ser obtidas na página Arquivos T2 disponível no 4shared.


Duas abordagens são possíveis para resolver esse problema:
1 - Mapear a imagem em uma esfera usando as funções pré-definidas em OpenGL
2 - Utilizar parametrização da esfera para causar uma deformação e translação nos pixels da imagem.

A abordagem que decidimos usar foi a primeira, mapear a textura em cima de uma esfera. O programa foi implementado em C++ usando a biblioteca Qt da Nokia para interface com o usuário.

1 - Mapeamento da textura na esfera

A abordagem que primeiro foi discutida em sala foi a de projetar a imagem equiretangular no interior de uma esfera. Para isso, podemos aplicar a imagem como uma textura em cima de uma esfera normal, com a normal espelhada para evitar que a imagem estivesse do avesso, dessa forma obtendo a imagem vista corretamente a partir de uma câmera colocada no centro da esfera.

2 - Projeção da imagem em uma esfera

Esta abordagem para o problema, embora envolve deslizar uma janela de visualização sobre a imagem, de modo que os pontos da imagem equiretangular sejam deslocados e deformados sobre uma parametrização esférica. Esta seção baseia-se em rápidas notas de aula, podendo conter pequenos erros.

Seja a tela do OpenGL descrita por altura (h) e largura (w), com início das coordenadas em 0, e seja a imagem equiretangular descrita por coordenadas a e b relativas a sua altura e largura em um plano do R3 conforme as imagens a seguir, precisamos parametrizar as coordenadas da imagem em relação à câmera e à tela do OpenGL. Para a câmera, usaremos a informação do ângulo de abertura (fovy).



Assim, temos que a parametrização da esfera em R3 no componente a da imagem é:

    tg( fovy/2 ) = a/2

Segue que:
   
    a = 2 tg ( fovy/2 )
    b = a*w/h

Como a imagem é projetada em Z = -1, temos que a transformação da tela para o mundo é dada por


Pela parametrização da esfera em theta, phi e raio (r), temos a nossa imagem parametrizada em um domínio [ - pi/2 .. pi/2 ] X [ 0 .. 2 pi ]. A transformação para coordenadas de mundo é trivial pela parametrização da esfera.


Surge um problema de decisão para os pontos que estão fora da discretização da imagem no domínio: esses pontos serão truncados ou arredondados para o mais próximo? A decisão afeta a deformação da imagem.

3 - Resultados

Os resultados obtidos podem ser conferidos executando o programa desenvolvido, cujos fontes e as imagens utilizadas como exemplo podem ser obtidas na página Arquivos T2. Para compilar o projeto, são necessárias as bibliotecas do Qt, disponíveis na página da Nokia [4].

A apresentação em Powerpoint do trabalho encontra-se disponível a seguir.


Referências:

[1] - Leonardo Koller Sacht, Content-based Projections for Panoramic Images and Videos, dissertação de mestrado, IMPA, 201
[2] - http://www.flickr.com/groups/equirectangular/
[3] - Rau Tu 2, Panorâmicas Imersivas ou 360º – como fazer!. Disponível em: http://www.rau-tu.com/2009/04/tutorial-panoramicas-360/
[4] - Qt Libraries for Visual Studio 2008. http://qt.nokia.com/downloads/windows-cpp-vs2008

Comments