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