Realidade Aumentada

Prof.: Marcelo Gattass

Aluno: Jeronimo Silvério Venetillo

 

 

Observação: Todos os programas abaixo requerem OpenGL e as bibliotecas GLUT e IUP.


 

Trabalho 01

 

Detecção de padrão e renderização de objeto virtual

Descrição: O Programa deve reconhecer a partir da imagem gerada de uma webcam um padrão pré-determinado e calcular a posição da câmera no mundo. Com isso, podemos desenhar um objeto virtual sobre uma cena real.

Para o reconhecimento de padrão foi usado a biblioteca de Flavio Szenberg, que depois de aplicar um filtro LoG ( Laplaciano do Gaussiano ) na imagem invertida, usa um algoritmo de detecção e reconhecimento das linhas do modelo.

Após esse reconhecimento, temos uma função de ajuste do reconhecimento que é feito a cada quadro da aplicação.

Para calcularmos a posição da câmera, usamos o método de tsai 2D. Neste método o conjunto de pontos e subdividido para que novos pontos sejam criados. O método de tsai nos fornece uma matriz de projeção e outra de modelview que é usada no OpenGl para visualizarmos um modelo virtual em 3D.


Código fonte e executável


Trabalho 02

 

 






 

 

Reconstrução da malha tridimensional de um objeto com auxílio de duas câmeras e um projetor.

Descrição: Com um cenário que envolve duas câmeras e um projetor, tiramos duas fotos de alguns objetos que eram iluminados por um projetor com algum tipo de padrão. Sem trocar as câmeras de posição, tiramos fotos de um padrão para que pudéssemos identificar a posição relativa das câmeras. Com isso podemos fazer a reconstrução tridimensional da malha do objeto.

O primeiro passo foi encontrar a posição relativa das câmeras. Isso foi feito de uma maneira semelhante ao do primeiro trabalho. Como não se trata de uma aplicação em tempo real, identificamos as linhas do modelo manualmente para diminuir as fontes de erros do processo. Além disso, tínhamos a informação da distancia focal das câmeras usadas. Com essas informações dadas, usamos o mesmo método proposto no primeiro trabalho para identificar a posição relativa das câmeras.

 

O segundo passo foi identificar a transição de faixas projetadas nos objetos para ajudar na etapa de reconstrução tridimensional da malha. Para diminuir o erro nesta parte do processo, fizemos uma redução de cores da foto para as cores projetadas mais o preto. Para achar a transição foi usado um esquema de slides positivos e negativos, onde faixas positivas consecutivas tinham seus canais de cor mais alto diferentes. Assim, uma transição de faixa se dava sempre que o canal mais intenso da faixa positiva ficava com seu valor menor que seu correspondente na negativa. Para identificação da transição usamos uma função que decodificava os dois pares de transição num número. Com isso foi gerada uma imagem que identificava quais pixels continham uma transição (identificada no canal b) e um arquivo identificando quais pixels de cada transição.

 

 


O terceiro passo foi achar para cada ponto identificado como uma transição de faixa seu par correspondente na imagem da outra câmera. Foi usada para isso a idéia de geometria epipolar, que para cada ponto em uma imagem, existe uma linha que passa em cima do ponto correspondente na outra imagem. Para isso, calculamos a matriz fundamental que transforma as coordenadas da imagem de uma câmera em outra. Com isso, para cada ponto achado em uma câmera, calculamos sua linha epipolar e medimos a distancia entre essa reta e os pontos de mesma transição na imagem da outra câmera. Com o ponto de menor distancia (idealmente zero) reconstruímos a informação de profundidade.


Código fonte e executável