• Nenhum resultado encontrado

ALINHAMENTO GLOBAL

5.2.2 Alinhamento com os Eixos Principais

Uma vez executado o algoritmo de Pulli, as diversas vistas j´a est˜ao corretamente alinhadas umas com as outras. No entanto, at´e este momento, nenhum tratamento foi dado ao sistema de coordenadas final do objeto como um todo. Na pr´atica, se nada for feito, o sistema de coordenadas do objeto final corresponder´a ao sistema de coordenadas da vista na raiz da spanning tree do grafo de vistas (vide figura 5.1). Infelizmente, este sistema normalmente n˜ao ´e o ideal para o objeto final.

Como v´arias etapas seguintes dopipelinetrabalhar˜ao com o volume do modelo, conv´em encontrar um sistema de coordenadas que minimize o volume da axis-aligned bounding box do objeto. Isto pode ser conseguido calculando-se os eixos principais da nuvem de pontos, conforme sugerido por Wu [158].

Para efetuar este c´alculo dos eixos principais, inicialmente deve-se calcular o centro de massa do objeto conforme a equa¸c˜ao 5.1:

CM = local deVipara o sistema de coordenadas global do objeto, como calculadas pelo algoritmo de Pulli.

Em seguida, devemos construir uma matriz de covariˆancia dos pontos, usando a f´ormula 5.2: onde estas covariˆancias s˜ao obtidas a partir da multiplica¸c˜ao das componentes (x, y, z) da posi¸c˜ao de todos os v´ertices em rela¸c˜ao ao centro de massa calculado em (5.1).

Uma vez obtida a matriz de covariˆancia, os 3 eixos principais s˜ao obtidos a partir dos 3 autovetores da matriz Cov. Como a matriz ´e sim´etrica, podemos utilizar o m´etodo de

Jacobi para o c´alculo dos autovetores [112].

Os 3 autovetores s˜ao utilizados para construir uma matriz homogˆenea 4×4 de rota¸c˜ao, conforme a equa¸c˜ao 5.4:

ondeu,v ews˜ao os 3 autovetores normalizados, que corresponder˜ao respectivamente aos novos eixos x,y e z do sistema global de coordenadas do modelo.

Agora, podemos calcular a matriz T M que ser´a usada para atualizar as matrizes de transforma¸c˜ao 4×4 de cada vista (5.5):

T M = Transla¸c˜ao(−CM) ∗ Rot (5.5)

onde Transla¸c˜ao() cria uma matriz 4×4 de transla¸c˜ao.

Finalmente, a matriz MVi→W orld de cada vista Vi deve ser multiplicada pela matriz T M para convertˆe-la para o novo sistema de coordenadas global (5.6):

MVi→W orld0

=MVi→W orld ∗ T M (5.6)

Na figura 5.4 podemos observar os resultados deste alinhamento com os eixos princi-pais. O novo sistema de coordenadas das figuras 5.4(b) e 5.4(e) poderia ser melhor, como aquele mostrado nas figuras 5.4(c) e 5.4(f).

O que ocorre ´e que quando utilizamos os v´ertices de todas as vistas para c´alculo dos eixos principais, acabamos dando mais peso para regi˜oes que possuem mais vistas, pois regi˜oes de interse¸c˜ao s˜ao consideradas em duplicidade. No caso da est´atua da figura 5.4, temos muito mais vistas frontais e da menina do que de outras regi˜oes, o que fez com que o sistema de coordenadas obtido “pendesse” para a frente e para a direita, conforme pode ser observado nas figuras 5.4(b) e 5.4(e).

Para resolver este problema, devemos encontrar uma forma de amostrar uniforme-mente os pontos do objeto. Nossa solu¸c˜ao consiste em criar uma representa¸c˜ao volum´etrica simplificada do objeto. Criamos umarray tridimensional booleano (32×32×32 em nossa implementa¸c˜ao), e inicializamos todos osvoxels comofalsos. A seguir, calculamos a axis-aligned bounding box do objeto, obtida atrav´es das coordenadas m´ınimas e m´aximas dos v´ertices nos eixos (x, y, z). Dividimos esta bounding box como o nosso array

tridimen-sional (em 32×32×32 elementos). Agora, para todos os v´ertices de todas as vistas, descobrimos em qual elemento da bounding box ele est´a contido, e marcamos como ver-dadeiro o elemento correspondente em nosso array tridimensional. Desta maneira, o nosso array booleano final corresponde `a uma representa¸c˜ao uniforme da superf´ıcie do nosso objeto, onde as redundˆancias das vistas foram eliminadas.

Em seguida, efetuamos o alinhamento com os eixos principais conforme apresentado anteriormente. S´o que ao inv´es de utilizar os v´ertices das vistas, utilizamos as coordenadas 3D do centro de cada voxel marcado como verdadeiro em nosso array. Os resultados podem ser observados nas figuras 5.4(c) e 5.4(f), e s˜ao claramente melhores do que a solu¸c˜ao calculada diretamente a partir dos v´ertices das vistas (figuras 5.4(b) e 5.4(e)).

(a) (b) (c)

(d) (e) (f)

Figura 5.4: Alinhamento com os eixos principais. (a) e (d) Alinhamento global com o sistema de coordenadas da 1a vista, ou seja, o resultado do algoritmo de Pulli; (b) e (e) Alinhamento com os eixos principais, calculados a partir dos v´ertices de todas as vistas; (c) e (f) Alinhamento com os eixos principais, calculados a partir de uma representa¸c˜ao volum´etrica simplificada do objeto. A cˆamera est´a alinhada com eixos do sistema de coordenadas global em todas as figuras.

5.3 Conclus˜ oes e Trabalhos Futuros

Durante este cap´ıtulo, pudemos observar os resultados da etapa de alinhamento global nas figuras 5.2(b) e 5.2(d), e do alinhamento com os eixos principais nas figuras 5.4(c) e 5.4(f).

A melhoria no alinhamento baseado apenas em pares ´e obvia. O alinhamento com os eixos principais, por hora, gera apenas uma melhoria est´etica (a est´atua fica em uma posi¸c˜ao mais “natural”), mas seu verdadeiro valor ser´a apreciado nas etapas seguintes dopipeline.

Nossa avalia¸c˜ao do algoritmo de Pulli [113] ´e muito favor´avel. Ele apresenta ´otimo desempenho e n˜ao requer grande gasto de mem´oria, uma vez que todas as vistas n˜ao precisam estar carregadas na RAM simultaneamente.

Uma das formas de melhorar ainda mais a qualidade do alinhamento global ´e atrav´es de mais alinhamentos individuais de pares. Conforme apresentamos na se¸c˜ao 5.2.1, quanto mais pares, mais informa¸c˜oes est˜ao dispon´ıveis para movimentar as vistas para os seus locais corretos. Atualmente, os pares de vistas para o ICP s˜ao especificados manualmente no arquivo de script de entrada para o ModelTool. Uma id´eia seria tentar encontrar automaticamente todos os pares de vistas onde haja um grau de sobreposi¸c˜ao suficiente para o ICP.

Isto pode ser conseguido de v´arias maneiras, sendo que uma delas seria a utiliza¸c˜ao da nossa representa¸c˜ao volum´etrica simplificada (array booleano 32×32×32). Poder´ıamos criar esta representa¸c˜ao para cada vista, e comparar osarrays de todos os pares poss´ıveis.

Uma opera¸c˜ao booleana AND entre os arrays resultaria no n´umero de voxels em comum entre as vistas, e se este n´umero fosse suficientemente alto, um novo par de alinhamento entre as duas vistas candidatas poderia ser criado. Inclusive o pr´e-alinhamento para este novo par poderia ser calculado a partir do grafo de relacionamento entre vistas. Uma nova execu¸c˜ao do ModelTool refinaria o alinhamento, levando em conta todos os novos pares adicionados automaticamente.