360 likes | 443 Vues
This project focuses on inserting virtual animations into real scenes, utilizing the Tsai method for camera calibration and implementing OpenGL for rendering. The process includes webcam video stream capture, frame processing, and OpenGL API configuration.
E N D
Inserção de Imagens Virtuais em Cenas Reais Carlos Oliveira coliveira@inf.puc-rio.br
Sumário • Descrição e Objetivo • O Método de Tsai • Implementação • Resultados obtidos • Melhoramentos
Descrição e Objetivo • Captura de video stream a partir de uma webcam ou leitura de um arquivo AVI • Processamento frame a frame, realizando a calibração de câmera utilizando o Método de Tsai • Utilizar as matrizes calculadas pelo algoritmo para configurar a API do OpenGL • Realizar a inserção de animações virtuais na cena real considerando efeitos como a oclusão • Output da imagem final processada contendo o background capturado e os objetos virtuais inseridos
Y c p’ Z c X c Método de Tsai(compativel com notação do OpenGL) y' x'
Os passos do Método de Tsai Passo 1: conhecidos Assuma Distorção radial insignificante
Sistema Ax=0 Compute v by SVD decomposition of A=UDVT (The solution vector is the column of V corresponding to null (or smallest) singular value) in D.
Estimativa dos parâmetros da câmera Fator de escala
Sinal do fator de escala Sinal de Como: Temos Caso isto não seja verdade troque o sinal de v
Últimalinhadamatriz de rotação Reortogonalize:
Passo 2 do Tsai Computing Image Center v3 v2 v1
=0 Método de Tsai plano
Sinal de escolha um sinal Logo Caso isto não seja verdade troque o sinal de
Fator de escala escolha um sinal escolha um sinal corrija a escolha
Implementação • Foi utilizada a biblioteca OpenCV • Utilizamos também a implementação do método de Tsai 2D disponível na página do curso • Utilizamos a biblioteca de interface da Microsoft, MFC • Foi implementada a integração do OpenGL com MFC utilizando a extensão WGL do OpenGL • Implementamos uma classe chamada ObjLoader que tem a finalidade de fazer a carga de modelos .obj exportados pelo 3ds Max
Implementação (cont.) • A aplicação tem flags na Interface para indicar se o modelo a ser carregado é um dos modelos Agros/Orthos fornecidos no trabalho ou outro modelo pré-definido pelo programador e se possuem objeto ou não (a animação se comporta de maneira diferente em cada caso, já que os tabuleiros são diferentes) – links para os AVI na página • A cada frame capturado este é primeiramente convertido para grayscale
Implementação (cont.) • Após isso essa imagem em tons de cinza é passada para o método TsaiCalibrate • Neste método a função cvFindChessboardCorners é utilizada para calcular os cantos do tabuleiro • Após isso a função cvFindCornerSubPix é utilizada para refinar a posição dos pontos encontrados • Em seguida são feitas várias chamadas e cálculos aos métodos definidos no método de Tsai da página • Ao final da calibração as matrizes de modelview e projection são obtidas também pelo método
Implementação (cont.) • Enquanto isso, numa outra thread, o OpenGL fica processando a animação e, a cada frame do OpenGL processado, ele consulta a classe de calibração para obter as novas matrizes de modelview e projection calculadas • As matrizes são carregadas para o OpenGL, o modelo é desenhado somente no Z-buffer (para tratar oclusão) e a animação (os dois carrinhos) são desenhados utilizando o modelo carregado pela classe ObjLoader
Melhoramentos • Melhorar as variações do processo de inserção dos gráficos utilizando filtros de Kalman • Implementar a detecção automática de novos objetos inseridos na cena dinamicamente • Utilizar processos de segmentação para descobrir o modelo ao invés de utilizar um modelo fixo