360 likes | 436 Views
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
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