Realidade Aumentada e Cooperativa
Rodrigo Hermann
Programa de Mestrado em Computação Gráfica
PUC-RIO 2003.2

Descrição
O programa através de uma imagem capturada de uma câmera qualquer, identifica um padrão específico e aplica de acordo com suas coordenadas um objeto virtual, criando assim um ambiente de realidade aumentada.
Para isso foi desenvolvido a biblioteca raclib que contém todas as funções para tratamento de imagem e identificação de padrões necessárias para o projeto. Além disso, foi implementada a aplicação racdemo que utilizando a raclib e outras bibliotecas, projeta um modelo 3d seguindo as orientações de um padrão pré-estabelecido.

Histórico do projeto
Como primeiro passo para o projeto foi feito um estudo sobre a imagem capturada. Partindo de uma sequencia de 50 imagens capturadas de uma mesma cena, foi identificado o nível de ruído. Isso mostrou que algumas câmeras apresentavam um ruído constante formando uma grade sobre toda a imagem.

Outros dados foram pesquisados como a deformação radial, a variação da luminosidade variando de cos^4 em relação ao centro da imagem. Apesar de todos os dados indicarem que a câmera estava alterando a imagem real, o tratamento dessas deformações não foi feito pois não houve necessidade para o andamento do projeto.

Com o estudo da imagem feito, partiu-se para a detecção das arestas da imagem capturada. Foram gerados vários filtros de imagem dando destaque à gaussiana, sobel e laplaciano da gaussina. A detecção das arestas a principio seria feita através do método de Hough, mas sua utilização se tornou cada vez mais difícil por ser muito sensível a pequenas distorções e por necessitar de várias outras técnicas (como máximo local) para conseguir um melhor controle sobre as linhas criadas.
O método utilizado para a detecção das arestas passou a ser o método de componentes conexos, seguido pelo feixo convexo, que por fim tem seus vértices filtrados. Explicando um por um:

Componentes Conexos:

Com a imagem filtrada pelo Sobel, a imagem resultante fica com apenas 2 cores, preto e branco. O método de componentes conexos gera número de identificações ("labels"), separando assim a imagem em várias listas de pixels conexos.

Feixo convexo:
O feixo convexo recebe essa lista de pixels faz uma filtragem, restando apenas os pixels mais externos do polígono.

Filtragem dos pixels:
A lista de pixels retornada pelo feixo convexo, ainda tem vários pixels desnecessários, considerando que o polígono procurado é um quadrado, pixels com angulos muito grandes são excluídos, no fim, pixels muito próximos são concatenados em apenas um, restando apenas 4 pixels.

O próximo passo é determinar quais estruturas encontradas fazem parte do padrão. Para isso definiu-se que os 2 polígonos do padrão são os menores polígonos que estejam um dentro do outro.
Com os polígonos encontrados só falta definir a orientação do padrão, ou seja, quais pixel do polígono na imagem corresponde a qual vértice do polígono real. Para isso define-se o centro de cada polígono, com os dois centros forma-se um vetor de direção indicando para onde o polígono está virado.
Através de operações de produto escalar entre os pixels e o vetor se torna possível definir os vértices correspondentes da imagem.
Agora se torna necessário descobrir a matriz de transformação para que a imagem virtual seja projetada corretamente sobre o padrão. Utiliza-se para isso o método Tsai.
O resultado é uma imagem virtual aplicada ao pdrão de forma correta, mas devido a pequenos erros no cáculo dos pixels que formam os polígonos ocorre uma constante trepidação da imagem. Para resolver esse problema, é aplicado o filtro de Kalman tanto no cálculo dos pixels quanto nas matrizes do Tsai. Isso estabiliza o modelo dando um aspecto que ao mover o padrão, o modelo desliza até alcançar a posição ideal, o que é plenamente satisfatório, e atinge o objetivo do projeto.

Conclusão
O projeto foi realizado com sucesso, apesar de alguns problemas em algumas posições do padrão. A solução encontrada para a realização foi:
1) Filtro Sobel
2) Componentes Conexos
3) Feixo Convexo
4) Filtragem dos pontos
5) Método Tsai para calibração de câmera
6) Filtro de Kalman nos pixels e nas matrizes de transformação para amortececimento dos resultados

Outras técnicas foram estudadas mas acabaram por não serem utilizadas como a distorção radial, variação da luminosidade e o método de Hough, este último apresentou vários problemas ao ser posto em prática.

No fim, a biblioteca RacLib foi gerada, contendo vários filtros de imagens além do método utilizado para detecção do padrão
.

Programas e Documentação
RacLib
Documentação (raclib_doc.zip)
Código Fonte (raclib_src.zip)
Tudo (raclib.zip)

Demo

Código Fonte (racdemo_src.zip)
Binário (windows) (racdemo_bin.zip)
Padrão (pattern.jpg)



hermann at tecgraf . puc-rio. br

< BACK