INF 2064 - Visão Computacional e Realidade Aumentada


Professor Marcela Gattass
2 semestre 2008



Aleksander Medella Campos da Silva
Departamento de Informática - PUC-Rio
ksander@gmail.com

O objetivo deste trabalho foi realizar a calibração de uma câmera a partir de um padrão conhecido na cena capturada e inserir elementos virtuais nela de forma que o espectador tenha a impressão que tais elementos pertenciam a cena capturada.


imagem 1 - elementos virtuais no cenário real

O padrão utilizado foi um tabuleiro de xadrez. A partir de um stream de vídeo de entrada (vindo de um arquivo ou de uma webcam), o padrão é localizado na imagem.


imagem 2 - tentativa de identificação do padrão utilizando o algoritmo de Harris para detecção de cantos


imagem 3 - padrão localizado na cena com a função "findChessCornes" do OpenCV

Conhecido o padrão e localizado na imagem pode-se calibrar os parâmetros intrínsecos e extrínsecos da câmera. E para tal utilizou-se o método de Tsai2D de calibração de câmeras.
Com a câmera calibrada pode-se inserir elementos virtuais na imagem.


imagem 4 - elemento virtual inserido na cena

Entretanto, dependendo de onde o elemento virtual é inserido percebe-se que ele não pertence a cena, como na imagem 5.


imagem 5 - elemento virtual "flutuando" na cena

Para corrigir tal erro é necessário conhecer o cenário e inserir seus elementos no z-buffer (somente inserir no z-buffer, sem pinta-los na imagem). Assim quando o elemento virtual for pintado na imagem somente a parte pertinente será exibida.


imagem 6 - elementos inseridos no z-buffer


imagem 6 - elemento virtual "cortado" pelo z-buffer

O resultado pode ser observado na gif abaixo =]


imagem 7 - resultado

Arquivos:

O cenário foi construido por minha pessoa com papel cartão amarelo, azul e verde (video01, video02 e coordenadas da cena). A cena possui um padrão xadrez e mais dois padrões para o ArToolKit (padrão01 e padrão02).
O projeto foi feito no Dev-C++. Os códigos fonte e o executável podem ser baixados aqui.


Incremento 1 :

O objetivo é a obtenção das coordenadas do cenário apartir da imagem capturada. E utilização destas coordenadas para inserir estes elementos da cena no z-buffer.
Para obtenção das coordenadas optou-se por localizar as retas do cenário.


imagem 8 - objetivo de reconhecer as retas dos elementos da cena

Para tal fez-se primeiramente uma detecção de bordas com o algoritmo de Canny.


imagem 9 - detector de bordas Canny

Depois utilizou-se o detector de retas de Hough.


imagem 10 - detector de retas de Hough


imagem 11- detector de retas de Hough

Porém os resultados de detecção de retas não foi satisfatório. Os próximos passos seriam montar uma arvore de descisão para comparar as retas encontradas com as retas do modelo a ser localizado na imagem.

Incremento 2:

O objetivo é a integração com uma ENGINE 3D. A engine escolhida foi a SpaceSimulator.
O objeto carregado foi modelado em 3DMax, é uma nave de combate.


imagem 12 - nave de combate mode

Resultado da integração, o código pode ser baixado aqui.


imagem 13 - integração com a spacesimulator

 

Visão Computacional
Aleksander Medella Campos da Silva
PUC-Rio / 2008