Escolar Documentos
Profissional Documentos
Cultura Documentos
Monografia PDF
Monografia PDF
DOI 10.1007/s00002-012-0002-5
GENERIC ARTICLE
Resumo A digitalização de modelos 3-D tem crescido rapi- necessária a interferência humana para a melhoria das apli-
damente nos últimos anos devido principalmente aos dispo- cações durante a fase de produção [17].
sitivos de captura 3-D, como o Kinect. A digitalização desses
Com o avanço das pesquisas na área, a necessidade de
modelos tem aplicação em várias áreas como engenharia ci-
interferência humana no processo de produção de imagens e
vil, medicina e artes. Este trabalho descreve um sistema que
vídeos mais realísticos tem diminuído, pois, com a utilização
permite a reconstrução de objetos 3-D a partir de mapas de
de dispositivos de captura 3-D, a forma tridimensional dos
profundidade adquiridos do Kinect. O sistema executa em
objetos pode ser adquirida, permitindo a estimativa de seus
tempo real com o auxílio das GPUs (Graphics Processing
movimentos associados, além da medição de luminosidade
Unit — Unidade de Processamento Gráfico). Neste traba-
do ambiente [17].
lho, o sistema será descrito de acordo com suas principais
funcionalidades (aquisição dos mapas de profundidade, ali- Os dispositivos de captura 3-D fornecem mapas de pro-
nhamento das nuvens de pontos, integração volumétrica e fundidade capturados da cena instantaneamente visualizada.
raycasting sobre o modelo). Além disso, a modelagem do Os mapas de profundidade são imagens que contém valo-
sistema e os resultados obtidos serão descritos e analisados. res de profundidade da cena associados para cada pixel. Para
algumas aplicações, não é interessante obter somente o for-
mato tridimensional visualizado de um ângulo pela câmera:
reconstrução de órgãos capturados por CT (Computed To-
1 Introdução
mography — Tomografia Computadorizada), de esculturas,
cidades e prédios. No caso das cidades e prédios, um modelo
Pesquisas no campo da computação gráfica tradicionalmente
parcial/completo permitiria que fossem realizados walkth-
são baseadas em três objetivos: representação das formas tri-
roughs ou visitas técnicas. Já para os órgãos capturados por
dimensionais (modelagem), descrição do movimento dessas
CT e para as esculturas, uma reconstrução tridimensional
formas (animação) e simulação da luminosidade no ambi-
mais completa permitiria uma análise mais eficiente e pre-
ente produzindo imagens foto-realísticas (renderização). A
cisa, seja para algum exame, ou para análise dos detalhes
produção de imagens e vídeos de formas mais complexas
da obra. Para esses casos, faz-se necessário o uso de técni-
exige um maior detalhamento em cada uma dessas fases,
cas para reconstrução 3-D (parcial ou completa) da forma
o que também exige maior quantidade de processamento e
desejada.
uma maior dificuldade na produção dos mesmos, sendo ainda
Outra área que pode utilizar a reconstrução tridimensio-
Márcio Cerqueira de Farias Macedo nal para suas aplicações é a Realidade Aumentada. Ela con-
Instituto Federal de Educação, Ciência e Tecnologia da Bahia
E-mail: marciomacedo@ifba.edu.br
siste em um conjunto de técnicas para integração dos objetos
do mundo real com os objetos virtuais (gerados computa-
Antonio Carlos dos Santos Souza
cionalmente) no mesmo espaço do mundo real. Uma das
Instituto Federal de Educação, Ciência e Tecnologia da Bahia suas propriedades é a necessidade de execução interativa e
E-mail: antoniocarlos@ifba.edu.br em tempo real [1]. Com o avanço dos dispositivos gráficos, e
com o surgimento da GPU, tornou-se possível a realização da
2 Márcio Cerqueira de Farias Macedo, Antonio Carlos dos Santos Souza
reconstrução tridimensional em tempo real, reconstruindo-se a reconstrução completa de um modelo 3-D em tempo real
modelos de alta qualidade e muito precisos. utilizando apenas o processamento da CPU. Enquanto algo-
O presente trabalho tem como objetivo a reconstrução ritmos bastante velozes são utilizados para a reconstrução
tridimensional de um modelo a partir do alinhamento dos tridimensional, o sistema apresenta baixa qualidade nos mo-
diversos mapas de profundidade fornecidos pelo Kinect, em delos reconstruídos.
tempo real, utilizando GPU. O alinhamento dos mapas de KinectFusion de Izadi et al. [9]: sistema que utiliza a
profundidade, representados num ambiente 3-D por nuvens paralelização proporcionada pela GPU e o Kinect como dis-
de pontos, permite uma integração de visões de diferentes positivo de captura para realizar reconstrução de cenas em
ângulos de uma mesma cena. 3-D. Além disso, o KinectFusion possui a funcionalidade da
O sistema será analisado a partir de três versões: realidade aumentada sem o uso de marcadores. Durante a
reconstrução tridimensional, o KinectFusion utiliza o algo-
– A primeira versão foi feita somente em CPU; ritmo ICP implementado em GPU para o alinhamento das
– A segunda versão foi feita utilizando CPU e GPU utili- nuvens de pontos. A diferença entre o nosso trabalho e o
zando a linguagem OpenCL [22], sendo que foram utili- KinectFusion está nos testes realizados e no algoritmo do
zados mapas de profundidade sintéticos para os testes de cálculo do SDF para a grid volumétrica.
reconstrução; Sistema de animação facial de Weise et al. [27]: sistema
– A terceira versão consiste numa adaptação do sistema que utiliza blendshapes para representar o modelo facial re-
de reconstrução 3-D implementado como um projeto do construído. Diferente dos outros trabalhos citados, este seg-
PCL [18], que utiliza a linguagem CUDA [19] e funciona menta a face em regiões rígidas e não-rígidas para o ali-
em tempo real com os mapas de profundidade adquiridos nhamento com ICP e, a partir de um modelo probabilístico,
diretamente do Kinect. identifica qual blendshape representa a expressão do usuário.
A desvantagem desta abordagem está na perda de precisão
As duas primeiras versões foram utilizadas para os testes
associada à utilização do blendshape, visto que ele representa
com modelos sintéticos, permitindo também testes compa-
um modelo facial padrão, não sendo específico para cada tipo
rando o tempo de processamento em CPU e GPU dos algo-
de usuário.
ritmos utilizados. Já a adaptação feita na terceira versão do
Sistema de reconstrução de objetos baseado em surfels
sistema teve como objetivo melhorar o encapsulamento e re-
de Weise et al. [28]: Diferente dos outros sistemas mencio-
duzir o acoplamento entre os módulos implementados pelo
nados, este sistema representa um objeto como um surfel [8].
sistema de reconstrução 3-D do PCL.
A partir disso, um algoritmo ICP não-rígido é aplicado para
O presente trabalho está estruturado da seguinte forma:
o alinhamento dos frames sucessivos com o modelo em re-
A seção 2 apresenta os principais trabalhos relacionados à
construção, e uma abordagem similar ao KinectFusion é uti-
área de reconstrução tridimensional em tempo real. A seção
lizada para a integração volumétrica. Esse sistema funciona
3 apresenta a fundamentação teórica relativa à reconstrução
em tempo real e consegue reconstruir objetos com qualidade
tridimensional. Nessa seção, os algoritmos são apresentados
superior a outras abordagens que não funcionam em tempo
baseados em CPU. A seção 4 apresenta a fundamentação teó-
real.
rica sobre a Unidade de Processamento Gráfico (GPU), além
das adaptações e otimizações feitas nos algoritmos mostra-
dos na seção 3 para a execução em GPU nas duas últimas 3 Reconstrução tridimensional
versões do sistema. A seção 5 apresenta a documentação
do sistema, com os diagramas de classes e sequência para as Nesta seção serão examinadas algumas das técnicas e algo-
duas primeiras versões do sistema; casos de uso e arquitetura ritmos utilizados para cada passo da reconstrução tridimen-
para todas as três versões do sistema. Já a seção 6 apresenta sional.
uma análise sobre o tempo de processamento do sistema para
cada frame obtido, bem como uma discussão sobre a quali-
dade do modelo reconstruído e outros testes realizados sobre 3.1 Aquisição dos mapas de profundidade e geração das
os modelos em reconstrução. nuvens de pontos
registro [25]. A transformação é rígida porque possivelmente que possuírem os parâmetros supracitados acima de um
o modelo não sofrerá deformações (mudanças de forma) du- valor limite pré-definido.
rante o processo de aquisição. – Associação do erro entre as correspondências: A medição
O registro pode ser classificado em dois tipos: frame- de erro é feita a partir da métrica [5]:
frame e frame-model. O frame-frame consiste no registro X n
model consiste no registro entre a nuvem de pontos capturada sendo definida como a soma das distâncias quadráticas
pelo dispositivo de captura 3-D com uma nuvem de pontos entre cada ponto e o plano tangente do seu correspon-
que representa o modelo reconstruído. Esse tipo de registro dente. Para esta métrica, os únicos pixels u válidos são
apresenta menor acúmulo de erros durante a reconstrução [9]. aqueles que estão associados a um par de pontos corres-
Para o alinhamento das diversas nuvens de pontos, o al- pondentes.
goritmo ICP (Iterative Closest Point - Ponto mais próximo – Minimização de erro: Para a minimização de erro, é utili-
iterativo) [2,5] tem sido o método mais utilizado para a apro- zada a solução descrita em [7], este assumindo que a rota-
ximação de alta precisão de duas nuvens de pontos, dada ção incremental, num registro em tempo real, geralmente
uma boa estimativa inicial de alinhamento. No sistema de é muito pequena. Linearizando a rotação, aproximando
reconstrução 3-D, o ICP é utilizado para estimar a pose da cos θ por 1 e sin θ por 0, podemos reescrever a rotação
câmera para cada mapa de profundidade gerado. Isto é feito completa (em todos os eixos) R da seguinte forma 1 :
baseado no registro frame-model, tendo em vista a sua me-
lhor qualidade de reconstrução final [9]. Uma vez com a pose Tabela 1 Tabela dos símbolos utilizados na descrição da minimização
da câmera estimada, podemos converter o sistema de coor- do erro
denadas da câmera para o sistema de coordenadas global e Símbolo Descrição
vice-versa, como mencionado na seção anterior. R Matriz de Rotação 3-D
O algoritmo ICP pode ser sumarizado em 6 passos: t Vetor de Translação 3-D
α Ângulo de rotação no eixo X
– Seleção de pontos de uma ou das duas nuvens de pontos; β Ângulo de rotação no eixo Y
γ Ângulo de rotação no eixo Z
– Correspondência dos pontos selecionados entre as nu-
σ Somatório para a métrica ponto-plano [5]
vens de pontos; c
′
Produto vetorial entre um ponto p e um vetor normal nm
– Atribuição de peso para os pares com correspondência; tr Indicação de transposição em um vetor/matriz
– Rejeição de alguns pares com correspondência; r [α β γ]tr
– Associação de um erro baseado nas correspondências; φ(w) pi (w) − pm (w)) · nm (w)
– Minimização do erro.
x = [α β γ tx ty tz ]tr (6)
cx (w)φ(w)
cy (w)φ(w)
n
X cz (w)φ(w)
b=−
ni−1,x (w)φ(w)
(7)
w=1
ni−1,y (w)φ(w)
ni−1,z (w)φ(w)
Aplicando a decomposição de Cholesky sobre a equação
Cx = −b, pode-se encontrar a transformação T que define
a relação entre as nuvens de pontos.
Após a utilização do ICP e o consequente alinhamento
entre a nuvem de pontos adquirida no instante i e o modelo
em reconstrução, obtêm-se a transformação Ti que define a
pose da câmera no instante i, permitindo que os dois modelos Figura 3 Visão lateral do modelo inserido na grid volumétrica. A SDF
especifica a distância do voxel em relação ao modelo, sendo positiva se
sejam relacionados, e a nuvem de pontos seja integrada ao
estiver posicionado à frente do modelo, e negativa na situação oposta.
modelo reconstruído final. O modelo (cor vermelha) é definido a partir das posições onde ocorre
o zero-crossing.
3.3 Reconstrução
exigida por este variante, ele reduz a incerteza nos dados do
Após a obtenção da matriz de transformação que define a modelo final reconstruído, tratando de forma eficiente as múl-
pose da câmera, pode-se converter a nuvem de pontos Vi do tiplas medições feitas pelo dispositivo de captura [9]. Além
sistema de coordenadas da câmera para o sistema de coor- disso, o mapa de profundidade Di utilizado nesta fase, é um
denadas global e vice-versa. Uma vez com a pose global, mapa de profundidade sem aplicação de filtro, uma vez que
podemos integrar as diversas nuvens de pontos obtidas em deseja-se integrar os pontos reais do modelo adquirido [13].
um único modelo final.
3.3.2 Integração volumétrica
3.3.1 Representação volumétrica
A integração das diferentes nuvens de pontos adquiridas pelo
Ao invés de concatenarmos todas as nuvens de pontos com Kinect pode ser feita a partir do Algoritmo 1.
coordenadas globais em um único modelo, o que resultaria O algoritmo de integração volumétrica pode ser descrito
em uma nuvem com uma grande quantidade de pontos muito da seguinte forma:
próximos entre si, é utilizada uma representação volumétrica Dada uma posição (x, y), o eixo Z é percorrido. gridVo-
baseada em [6]. Essa representação volumétrica, além de lumeSize é uma variável interna do algoritmo (linhas 1 até
lidar com o problema da falta de decimação da nuvem de 3).
pontos, permite que seja realizada, de forma mais fácil, a Localiza-se o voxel associado a posição atualmente per-
triangulação do modelo reconstruído. Isso pode ser feito a corrida (linha 4) e converte-se este do sistema de coordenadas
partir de algoritmos como Marching Cubes [12]. da grid para o sistema de coordenadas global. g, v g e o vetor
Nessa representação, uma grid com voxels 3-D de tama- voxel são variáveis internas do algoritmo (linha 5).
nho pré-definido é utilizada para mapear as nuvens de pontos Converte-se então o ponto de coordenadas globais para
obtidas em uma dimensão específica. Cada voxel armazena coordenadas da câmera (linha 6) e o ponto é projetado num
a média ponderada de um variante da SDF [14] (Signed Dis- plano 2-D, permitindo a obtenção do pixel correspondente
tance Function - Função de distância com sinal), medido para ao ponto v. As variáveis v e pixel são criadas internamente,
cada nova nuvem de pontos a ser integrada. enquanto a variável T −1 representa um dado de entrada do
A SDF especifica a distância do voxel em relação ao mo- algoritmo (linha 8).
delo. Esses valores são positivos, se o voxel estiver posicio- Se existir um ponto real do modelo no pixel obtido (linha
nado à frente do modelo, e negativos, na situação oposta. O 9), calcula-se a distância entre um voxel de posição (x, y) e
modelo é definido a partir das posições onde ocorre o zero- o ponto do mapa de profundidade Di de mesma coordenada
crossing, em que os sinais das distâncias mudam (Figura 3). (cálculo do SDF). A condição feita na linha 12 verifica se
Assim como em [9], nós usamos um variante da SDF, a o ponto do mapa de profundidade possui grau de incerteza
TSDF (Truncated SDF - SDF Truncada), que apenas arma- abaixo de um valor pré-definido trunc. Caso esse ponto pos-
zena o valor da distância para uma região próxima ao mo- sua menor grau de incerteza do que trunc, efetua-se o cálculo
delo atual [6]. Além da menor quantidade de processamento do TSDF. Di representa um dado de entrada do algoritmo,
6 Márcio Cerqueira de Farias Macedo, Antonio Carlos dos Santos Souza
Algoritmo 1 Integração volumétrica na grid [9]. O Algoritmo 2 realiza o raycasting sobre a grid
1: for x ← 1, gridV olumeSize.x do e é baseado em [14].
2: for y ← 1, gridV olumeSize.y do
3: for z ← 1, gridV olumeSize.z do
4: g ← voxel[x][y][z]
Algoritmo 2 Raycasting sobre a grid volumétrica
5: v g ← converta g do sistema de coordenadas da grid para
o sistema de coordenadas global 1: for pixel ← 0, 640 ∗ 480 do
6: v ← Ti−1 v g 2: x ← pixel % 640
7: if v na visão da câmera then 3: y ← pixel/640
8: pixel ← projete v num plano 2-D 4: ray inicio ← converta voxel [x][y][0] do sistema de coordena-
9: if Di (pixel).z > 0 then das globais em coordenadas da grid.
10: ti ← adquira o vetor de translação associado a nu- 5: ray proximo ← converta voxel [x][y][1] do sistema de coorde-
vem de pontos do mapa Di nadas globais em coordenadas da grid.
11: sdfi ← Di (pixel).z − v g .z 6: ray direcao ← normalize (ray proximo − ray inicio )
12: if sdf < trunc then 7: ray tamanho ← 0
13: if sdfi > 0 then 8: RIi (pixel) ← (x, y, 0)
14: tsdfi ← M IN (1, sdfi /trunc) 9: g ← extraia o primeiro voxel na direção ray direcao
15: else 10: tsdf ← g.tsdf
16: tsdfi ← M AX(−1, sdfi /trunc) 11: while voxel g contido na grid do
17: end if 12: ray tamanho ← raycaster tamanho + 1
18: pesoi ← M IN (maxpeso, g.peso + 1) 13: g ← extraia o próximo voxel na direção ray direcao
tsdfi−1 pesoi−1 +tsdfi pesoi 14: if g não está contido na grid then
19: tsdf avg ← pesoi+1 +pesoi 15: break
20: g.peso ← peso 16: end if
21: g.tsdf ← tsdf 17: tsdf anterior ← tsdf
22: end if 18: tsdf ← g.tsdf
23: else 19: if tsdf anterior < 0 e tsdf > 0 then
24: break 20: break
25: end if 21: end if
26: end if 22: if tsdf anterior > 0 e tsdf < 0 then
27: end for 23: g ← converta voxel (g.x − 0.5, g.y − 0.5, g.z − 0.5) do
28: end for sistema de coordenadas da grid em coordenadas globais.
29: end for 24: RIi (pixel) ← g
25: end if
26: end while
sdf e t representam variáveis criadas internamente e trunc 27: end for
é um parâmetro pré-definido.
O cálculo do SDF é feito a partir da distância, no eixo Z,
entre o ponto Di (pixel) e o voxel v g (linha 11). Diferente O algoritmo de raycasting pode ser descrito da seguinte
de [9], nós calculamos o SDF considerando apenas o eixo Z, forma:
uma abordagem mais simples e com resultados similares do Seleciona-se um novo pixel para o raycasting sobre a grid
que foi feito em [13], em que o SDF é calculado considerando volumétrica (linhas 1 até 3). Os valores 640 e 480 represen-
os 3 eixos (X, Y, Z) e em seguida é dividido por ||λ||, sendo tam as dimensões da imagem de saída.
λ um vetor com valores (v g .x, v g .y, 1) para os eixos X, Y e Inicializa-se o raio de acordo com as coordenadas do pixel
Z respectivamente. selecionado, sendo que ele percorrerá a grid no eixo Z (linhas
Normaliza-se o SDF para um TSDF (linhas 13 até 17) e 4 até 7). O pixel é convertido do sistema de coordenadas
atribui-se um peso ao TSDF calculado (linha 18). globais para o sistema de coordenadas da grid. A variável
Pondera-se o TSDF obtido com o TSDF calculado na ray é interna ao algoritmo.
iteração anterior (linha 19). pesoi é uma variável criada in- Atribui-se o valor mínimo para a imagem RIi , que repre-
ternamente. senta a imagem após o raycasting. Isso é feito como precau-
O peso e o TSDF calculados são armazenados no voxel ção para o caso de não haver posição zero-crossing durante a
g (linhas 20 e 21) e caso a grid não tenha sido percorrida passagem do raio ray (linha 8). RIi é o único dado de saída
totalmente, retorna-se ao passo 1. do algoritmo.
Esse algoritmo não possui nenhum dado de saída. Extrai-se o primeiro voxel g na direção do raio ray (linha
9) e armazena-se o TSDF associado ao voxel g (linha 10).
Se o voxel g estiver contido na grid, incrementa-se o
3.3.3 Raycasting tamanho do raio e captura-se o novo voxel g percorrido pelo
raio de novo tamanho. Se o novo voxel não estiver contido na
O raycasting é feito sobre a grid volumétrica para extrair uma grid, encerra-se a passagem do raio pelo pixel selecionado
imagem de alta qualidade representando o modelo inserido (linhas 11 até 16).
Reconstrução de Modelos 3-D em tempo real utilizando Kinect e GPU 7
Se localizada uma posição de zero-crossing, interpola-se – Na fase de reconstrução, cada thread foi responsável por
trilinearmente o voxel g, convertendo-o do sistema de coor- calcular o TSDF e o seu peso associado para cada voxel
denadas da grid para o sistema de coordenadas global, e g é da grid;
armazenado na imagem RIi (linhas 17 até 24). A subtração – Para o algoritmo de raycasting, cada thread foi respon-
do voxel g por 0.5 permite acesso ao centro do voxel. sável por calcular cada pixel de saída da imagem RIi ;
O algoritmo de raycasting também é utilizado para ex- Como a maioria dos algoritmos em CPU foram desen-
tração da nuvem de pontos do modelo Vm em uma projeção volvidos pensando-se na paralelização, tornou-se muito mais
perspectiva. Essa nuvem de pontos é utilizada como nuvem fácil a adaptação para execução em GPU.
base para o registro frame-model.
Para a extração completa do modelo tridimensional recons- Nesta seção é apresentada a documentação da primeira e se-
truído, faz-se necessária a utilização de um algoritmo base- gunda versões do sistema a partir dos seguintes artefatos:
ado somente em CPU. A exibição da composição no modelo arquitetura do sistema, diagrama de classe, casos de uso e
não é feita em tempo real. A exibição da imagem extraída diagrama de sequência, respectivamente. A maioria dos as-
pelo raycasting representará o modelo em reconstrução. pectos de modelagem da terceira versão do sistema estão
O algoritmo pode ser resumido da seguinte forma: Para presentes nas duas primeiras versões. As diferenças entre as
cada coordenada (x, y) da grid volumétrica, é lançado um três versões são descritas ao longo desta seção.
raio ao longo do eixo Z, e, para cada posição em que houver
um zero-crossing, será extraído um ponto correspondente a
5.1 Arquitetura do Sistema
interpolação trilinear daquela posição.
O sistema foi subdividido de forma que cada grupo de fun-
4 Unidade de Processamento Gráfico - GPU cionalidades possuísse um modulo específico que as imple-
mentasse e disponibilizasse. A Figura 4 mostra o diagrama
Os microprocessadores das CPUs tiveram rápido crescimento, componente-conector do sistema.
em termos de desempenho, por mais de 2 décadas. Contudo, O componente ImageProcessing é responsável por lidar
a partir de 2003, esse crescimento vem reduzindo cada vez com todas as operações que são feitas com os mapas de pro-
mais devido às limitações da própria tecnologia do equipa- fundidade. Esse componente carrega um mapa de profun-
mento. A alternativa para essa redução de evolução da CPU didade a partir do componente OpenCV [4], que também é
foi realizar a construção de múltiplos processadores, ao invés responsável por aplicar o filtro bilateral sobre a imagem.
de somente um único, como era feito até então [10]. O componente CloudProcessing é responsável por pro-
A área de multiprocessamento pode ser dividida a partir cessar e manipular a nuvem de pontos. Este componente é
de dois equipamentos: CPUs multi-core e GPUs. A diferença responsável pela conversão da imagem para uma represen-
principal entre essas duas tecnologias é que, enquanto a pri- tação tridimensional, alinhamento das nuvens sequenciais,
meira tem como objetivo tornar mais veloz a execução de agrupamento iterativo dessas nuvens para a obtenção de um
programas/algoritmos sequenciais, a segunda tem como ob- único modelo tridimensional da superfície e renderização do
jetivo tornar mais veloz a execução de aplicações/algoritmos modelo acumulado. Este componente utiliza o componente
paralelos [10]. Eigen [20] que é responsável pelas funções referentes às ope-
Existem duas linguagens de programação bastante uti- rações de cálculos de matrizes.
lizadas para manipulação das threads disponibilizadas pela O componente View permite visualizar a superfície tridi-
GPU: CUDA [19] e OpenCL [22]. A segunda versão do sis- mensional capturada pelo Cloud Processing e os mapas de
tema foi desenvolvida com a linguagem OpenCL, enquanto a profundidade. A interface provida QGLWidget somente está
terceira versão do sistema foi desenvolvida com a linguagem presente nas duas primeiras versões do sistema. Na terceira
CUDA, já utilizada para outros algoritmos pelo PCL. versão, a interface provida é PCLVisualizer.
A paralelização feita pelas versões do sistema com GPU O conector signal and slot é um conector que permite a
pode ser descrita da seguinte forma: comunicação entre dois componentes sem invocação explí-
– Na fase de aplicação do filtro bilateral, cada thread foi cita de método entre eles.
responsável pelo cálculo do novo valor de profundidade
para cada pixel do mapa de profundidade Di . 5.2 Diagrama de classe
– Na fase de alinhamento, cada thread foi responsável pela
seleção, associação e rejeição de pares correspondentes Assim como foi mencionado na Introdução deste trabalho,
para cada pixel do mapa de profundidade Di ; o sistema de reconstrução tridimensional foi desenvolvido
Reconstrução de Modelos 3-D em tempo real utilizando Kinect e GPU 9
um voxel inserido na grid. A classe Raycaster representa faz a extração completa da superfície implícita na grid
o raio que atravessará a grid na fase de raycasting. volumétrica.
– A classe MainWindow é responsável pela inicialização do – A classe RegistrationUtils é responsável por disponibi-
sistema. Esta classe serve como ponte entre a interface lizar uma série de implementações relativas à fase de
gráfica e as classes de negócio do sistema. alinhamento. Esta classe armazena principalmente os al-
– As classes DepthImageWidget e RaycastWidget são res- goritmos que permitem a associação de correspondências
ponsáveis pela visualização do mapa de profundidade e os algoritmos de estimativa de transformação, no nosso
sendo processado e da imagem obtida via raycast. caso, o algoritmo baseado na decomposição de Cholesky.
– A classe PointCloudWidget é responsável por exibir as – A classe PointCloud representa uma nuvem de pontos
nuvens de pontos base e alvo processadas durante a fase no sistema. Ela armazena dados como: conjunto de pon-
de alinhamento. Essa exibição é feita a partir do OpenGL tos da nuvem, vetores normais de cada ponto, matriz de
[30] integrado ao Qt. transformação 3-D que permite conversão de coordenada
– A classe FullReconstructionWidget é responsável por exi- da câmera para global e vice-versa. Além disso, a classe
bir a nuvem de pontos extraída da grid no sistema de co- PointCloud, através do método alignPointClouds realiza
ordenadas globais, permitindo que seja possível acompa- o registro entre duas nuvens de pontos. Isso é feito em
nhar, em tempo real, o alinhamento entre os frames su- conjunto com a classe RegistrationUtils descrita acima.
cessivos. Assim como na classe PointCloudWidget, essa
exibição também é feita a partir do OpenGL [30] inte-
grado ao Qt. 5.3 Casos de Uso
– A classe Image armazena o mapa de profundidade ob-
tido, ou mesmo cria um novo mapa de profundidade, Existem apenas dois casos de uso para o sistema: O usuá-
sendo também responsável pela aplicação do filtro sobre rio pode adicionar uma nuvem de pontos ao sistema, o que
o mesmo. O método convert sem parâmetros converte corresponderia à inicialização do sistema com o Kinect, ou
um mapa de profundidade obtido para uma representa- então, de fato, a adição de uma nuvem de pontos ao sistema,
ção interna, aplicando o filtro (quando necessário) sobre caso o sistema esteja realizando a reconstrução de um ob-
o mapa. O método convert com parâmetros permite a jeto a partir de mapas de profundidade gravados em disco. O
criação de uma imagem a partir de dados externos. usuário também pode optar por visualizar a nuvem de pon-
– A classe Reconstruction é a classe principal do sistema, tos reconstruída completa, ou somente sua visão perspectiva,
sendo responsável por estruturar todo o processo de re- como mencionado na seção 3.3.4.
construção tridimensional. Essa classe, uma vez criada
pela classe MainWindow, recebe como parâmetros todos
os objetos que serão necessários para a reconstrução tri- 5.4 Diagrama de Sequência
dimensional, e, através do método staticMethod(), faz as
iterações do sistema. Essa classe também é responsável O diagrama de sequência do sistema de reconstrução tridi-
por enviar os dados pós-processados do sistema para as mensional para o primeiro caso de uso pode ser visto a partir
classes de interface gráfica através das primitivas signal da Figura 7. A partir da ação do usuário de adicionar uma
e slot do Qt. nova nuvem de pontos ao sistema, uma instância da classe
– A classe SDF é responsável pelas fases de integração vo- MainWindow invoca o método staticMethod do objeto re-
lumétrica e raycasting (em conjunto com a classe Raycas- construction. Uma vez em funcionamento, o objeto recons-
ter), tendo como principal atributo a própria grid (con- truction carrega o mapa de profundidade atual com e sem
junto de voxels). O método integrateTsdfVolumeBase- filtro, a partir dos objetos image e imageWithoutFilter res-
dOnKinectFusion faz a integração volumétrica baseada pectivamente. A partir disso, temos as seguintes condições:
em [9], onde se dá prioridade à reconstrução dinâmica:
– Se o mapa de profundidade for o primeiro adquirido,
para cada pixel da grid, mantém-se no máximo um ponto
carregamos a nuvem de pontos alvo a partir dele, pois
do modelo real; enquanto o método integrateTsdfVolu-
queremos alinhar o mapa de profundidade adquirido no
meBasedOnFullReconstruction faz a integração volumé-
instante i com o mapa adquirido no instante i − 1. Após
trica baseada na nossa adaptação de [13], em que se dá
isso, inserimos a nuvem de pontos na grid. Isso tudo está
prioridade à reconstrução completa: para cada pixel da
encapsulado no método renderBasedOnKinectFusion da
grid, a quantidade máxima de pontos do modelo real que
classe SDF.
pode ser inserido na grid é definida pelo usuário. Além
– Se o mapa de profundidade for o segundo adquirido pelo
disso, temos os métodos raycastTsdfVolume que faz o
sistema, carregamos a nuvem de pontos base a partir dele.
algoritmo de raycasting sobre a grid, e o método extract-
Uma vez com as nuvens de pontos Vi e Vi−1 , chamamos
PointCloudFromGrid, que funciona apenas em CPU e
o método alignPointClouds do objeto basePC passando
12 Márcio Cerqueira de Farias Macedo, Antonio Carlos dos Santos Souza
Figura 8 Modelo poligonal utilizado para o teste de comparação por Figura 9 Desempenho do algoritmo raycasting em CPU e GPU.
tempo de processamento entre CPU e GPU.
Figura 23 Visão superior das nuvens de pontos base (preta) e alvo Figura 25 Ângulo de variação medido pelo algoritmo de alinhamento
(vermelha) para uma pequena variação de grau entre os modelos. As para o modelo Fractal da Figura 15. O variante do ICP conseguiu es-
retas tracejadas indicam a associação dos pontos correspondentes. timar o ângulo de variação correto somente para ângulos de variação
abaixo de 2 graus.
Para o modelo Fractal, o variante do ICP obteve um com- 6.5 Quarto Teste: Qualidade do Modelo Reconstruído
portamento diferente em relação aos outros modelos. O al-
goritmo de alinhamento foi robusto até a variação de 2 graus Assim como feito em [13] e [28], o sistema proposto será
(Figuras 24 e 25), contudo, para uma variação acima de 7 validado quanto a qualidade do modelo reconstruído. A área
graus, o variante do ICP teve um comportamento diferen- da imagem destacada na Figura 13 mostra que o sistema
ciado, aumentando o erro final em relação ao erro inicial proposto reconstrói modelos de alta qualidade mesmo sem
16 Márcio Cerqueira de Farias Macedo, Antonio Carlos dos Santos Souza
processamento dos algoritmos paralelizáveis em comparação 13. Newcombe, R.A., Izadi, S., Hilliges, O., Molyneaux, D., Kim, D.,
com a CPU. Davison, A.J., Kohli, P., Shotton, J., Hodges, S., Fitzgibbon, A.W.:
Kinectfusion: Real-time dense surface mapping and tracking. In:
ISMAR, pp. 127–136. IEEE (2011)
14. Osher, S.J., Fedkiw, R.P.: Level Set Methods and Dynamic Implicit
7.1 Trabalhos Futuros Surfaces, 1 edn. Springer (2002)
15. Posdamer, J.L., Altschuler, M.D.: Surface measurement by space-
O sistema de reconstrução tridimensional apresentado neste encoded projected beam systems. Computer Graphics and Image
Processing 18(1), 1–17 (1982)
trabalho é restrito à situação em que o modelo não tem seu
16. Rusinkiewicz, S., Levoy, M.: Efficient variants of the ICP algo-
formato alterado durante a sua reconstrução. rithm. In: Third International Conference on 3D Digital Imaging
Como trabalho futuro, pretende-se integrar ao sistema and Modeling (3DIM) (2001)
de reconstrução em tempo real um algoritmo de registro de- 17. Rusinkiewicz, S.M.: Real-time acquisition and rendering of large
three-dimensional models. PhD Thesis, Stanford University
formável, ampliando a possibilidade de interações entre o
(2001). 1–13
usuário e o sistema, uma vez que este permitirá que haja re- 18. Rusu, R.B., Cousins, S.: 3d is here: Point cloud library (pcl). In:
construção de modelos que, naturalmente, tem seu formato International Conference on Robotics and Automation. Shanghai,
constantemente modificado (face, pessoas em movimento, China (2011)
19. Sanders, J., Kandrot, E.: CUDA by Example: An Introduction to
etc..).
General-Purpose GPU Programming, 1st edn. Addison-Wesley
Além disso, pretende-se futuramente avaliar quão pre- Professional (2010)
ciso é o modelo reconstruído por este sistema, de forma que 20. Eigen: (2012). URL http://eigen.tuxfamily.org/. Acessado em 12
se verifique se este pode ser aplicado na área de realidade de agosto de 2012.
21. Tomasi, C., Manduchi, R.: Bilateral filtering for gray and color
aumentada aplicada à medicina, em que o nível de precisão
images. In: Proceedings of the Sixth International Conference on
do modelo reconstruído deve ser muito alto. Computer Vision, ICCV ’98, pp. 839–. IEEE Computer Society,
Washington, DC, USA (1998)
22. Tsuchiyama, R., Nakamura, T., Iizuka, T., Asahara, A., Miki, S.:
Referências The OpenCL Programming Book. Fixstars Corporation (2010)
23. Turk, G., Levoy, M.: Zippered polygon meshes from range ima-
ges. In: Proceedings of the 21st annual conference on Computer
1. Azuma, R., Baillot, Y., Behringer, R., Feiner, S., Julier, S., Ma-
graphics and interactive techniques, SIGGRAPH ’94, pp. 311–318.
cIntyre, B.: Recent advances in augmented reality. IEEE Comput.
ACM, New York, NY, USA (1994)
Graph. Appl. 21(6), 34–47 (2001)
24. Vasudevan, R., Zhou, Z., Kurillo, G., Lobaton, E., Bajcsy, R.,
2. Besl, P., McKay, N.: A method for registration of 3-d shapes. IEEE
Nahrstedt, K.: Real-time stereo-vision system for 3d teleimmersive
Transactions on Pattern Analysis and Machine Intelligence 14,
collaboration. In: IEEE International Conference on Multimedia
239–256 (1992)
and Expo, pp. 1208–1213 (2010)
3. Besl, P.J.: Active, optical range imaging sensors. Mach. Vision
25. Vieira, T., Velho, L., Lewiner, T., Peixoto, A.: Registro automatico
Appl. 1, 127–152 (1988)
de superficies usando spin-images. In: Proceedings of SIBGRAPI.
4. Bradski, G., Kaehler, A.: Learning OpenCV: Computer Vision with
VI Workshop de Teses de Dissertações (2007)
the OpenCV Library. O’Reilly, Cambridge, MA (2008)
26. Weise, T.: Real-time 3d scanning. Ph.D. thesis, ETH Zurich (2010)
5. Chen, Y., Medioni, G.: Object modelling by registration of multiple
27. Weise, T., Bouaziz, S., Li, H., Pauly, M.: Realtime performance-
range images. Image Vision Comput. 10, 145–155 (1992)
based facial animation. ACM Trans. Graph. 30(4), 77:1–77:10
6. Curless, B., Levoy, M.: A volumetric method for building complex
(2011)
models from range images. In: Proceedings of the 23rd annual
28. Weise, T., Wismer, T., Leibe, B., Gool, L.V.: Online loop closure
conference on Computer graphics and interactive techniques, SIG-
for real-time interactive 3d scanning. Comput. Vis. Image Underst.
GRAPH ’96, pp. 303–312. ACM, New York, NY, USA (1996)
115(5), 635–648 (2011)
7. Gelfand, N., Ikemoto, L., Rusinkiewicz, S., Levoy, M.: Geometri-
29. Witkin, A.P.: Scale-space filtering. In: Proceedings of the Eighth
cally stable sampling for the ICP algorithm. In: Fourth International
international joint conference on Artificial intelligence - Volume
Conference on 3D Digital Imaging and Modeling (3DIM) (2003)
2, IJCAI’83, pp. 1019–1022. Morgan Kaufmann Publishers Inc.,
8. Habbecke, M., Kobbelt, L.: A Surface-Growing Approach to Multi-
San Francisco, CA, USA (1983)
View Stereo Reconstruction. Computer Vision and Pattern Recog-
30. Woo, M., Neider, J., Davis, T., Shreiner, D.: OpenGL Programming
nition, 2007. CVPR ’07. IEEE Conference on pp. 1–8 (2007)
Guide: The Official Guide to Learning OpenGL, Version 1.2, 3rd
9. Izadi, S., Kim, D., Hilliges, O., Molyneaux, D., Newcombe, R.,
edn. Addison-Wesley Longman Publishing Co., Inc., Boston, MA,
Kohli, P., Shotton, J., Hodges, S., Freeman, D., Davison, A., et al.:
USA (1999)
Kinectfusion : Real-time 3d reconstruction and interaction using a
31. Young, T.: Handbook of Pattern Recognition and Image Proces-
moving depth camera. interactions p. 559–568 (2011)
sing: Computer Vision. Academic Press (1994)
10. Kirk, D.B., Hwu, W.m.W.: Programming Massively Parallel Pro-
cessors: A Hands-on Approach, 1st edn. Morgan Kaufmann Pu-
blishers Inc., San Francisco, CA, USA (2010)
11. Kolb, A., Barth, E., Koch, R., Larsen, R.: Time-of-flight cameras
in computer graphics. Computer Graphics Forum 29(1), 141–159
(2010)
12. Lorensen, W.E., Cline, H.E.: Marching cubes: A high resolution
3d surface construction algorithm. In: Proceedings of the 14th an-
nual conference on Computer graphics and interactive techniques,
SIGGRAPH ’87, pp. 163–169. ACM, New York, NY, USA (1987)