1. Introdução

Este trabalho apresenta uma técnica simples baseada em rastreamento de pontos para a calibração de câmera e reconstrução de ruínas tridimensionais. Seu funcionamento baseia-se em cinco partes fundamentais:

  1. obtenção de pares de pontos de referência iniciais fornecidos externamente pelo usuário, onde cada par é constituído de um ponto tridimensional do modelo real e seu respectivo ponto projetado no espaço da janela.
  2. detecção de pontos (tipicamente Corners);
  3. busca por pontos detectados que estejam o mais próximo possível dos pontos do estado atual/inicial;
  4. calibração de câmera utilizando os pontos detectados associados aos pontos tridimensionais do modelo real;
  5. rastreamento dos pontos anteriormente selecionados na etapa (c) em um próximo quadro, explorando o conceito de coerência espacial.

Os passos (c) e (e) são idênticos, sendo que em (c) buscam-se pontos detectados que estejam próximos aos fornecidos pelo usuário e, em (e), buscam-se pontos detectados no novo quadro que estão mais próximos possíveis aos selecionados no quadro anterior. Desta forma ocorre um processo sistemático que se repete a cada quadro, envolvendo pontos selecionados no quadro atual (estados atual) e pontos selecionados em um próximo quadro.

O processo descrito envolve busca por pontos próximos dentre dois conjunto de pontos, o que necessariamente envolve a adoção de um parâmetro que indica o limite mínimo a partir do qual considera-se que pontos estão próximos o suficiente. Logo, há uma premissa implícita ao concebimento e funcionamento da técnica: a distância de um mesmo ponto em dois quadros consecutivos não pode exceder um determinado limite mínimo, caso contrário o ponto será considerado distante e não será utilizado para a calibração (pois resultaria em aumento do erro de calibração). Note também que não é possível utilizar um limite que seja demasiadamente grande, pois isso resultaria na seleção de pontos muito distantes dos pontos ideais para a calibração. Assim, a premissa de que a câmera deve ser movimentada suavemente deve ser respeitada para que a técnica funcione corretamente.

2. Implementação

A implementação é dividida em cinco etapas, descritas abaixo.

2.1. Obtenção de Pontos de Referência Iniciais

Esta etapa é a etapa que inicia o work-flow. Os pontos de referência iniciais são na realidade um conjunto de pares de pontos da forma (Mk,Wk), onde Mk são pontos em coordenadas tridimensionais do modelo real (Model) e Wk são as respectivas coordenadas tridimensionais projetadas, escritas no espaço da janela (Window). Estes conjuntos de pontos são necessários para efetuar a calibração da camera, sendo necessário no mínimo oito pares de pontos (Mk,Wk).

Para o conjunto inicial de pontos de referência dados de forma relativamente precisa, é possível calibrar a camera de forma aceitável. Neste estágio inicial, temos a calibração pronta, mas ocorrer movimentação da camera, todos os pontos projetados escritos no espaço da janela (Wk) terão sua posição alterada. Para que seja possível calibrar novamente a camera, basta que se encontre a nova posição Wk de cada ponto do estado atual no novo estado oriundo do novo posicionamento da camera no mundo, já que cada ponto Mk associado a Wk não varia.

2.2. Detecção de Pontos

Para encontrar os pontos Wk em um novo estado foi utilizada uma técnica simples. Primeiramente detectam-se todos os pontos possíveis que satisfazem uma determinada característica específica. Neste caso se utilizou a característica de grande variação de gradiente, tipicamente presente em regiões de quina (Corner), mas seria possível utilizar outro tipo de característica, como a de semelhança dos píxels vizinhos ao píxel Wk. Tendo detectado todos os Corners possíveis, inicia-se o processo de rastreamento de pontos.

Dois algoritmos para detecção de Corners foram testados nesta implementação:

2.2.1. FAST Corner Detector [link]

Utiliza aprendizado de máquina e possui um banco de dados inicial já calibrado para detectar corners. Utiliza pouco recurso de CPU e se mostrou mais eficiênte do que o metodo de Kanade-Lucas-Tomasi. Contudo, é menos estável por não se basear em tracking de pontos: a detecção ocorre a cada quadro.

2.2.2. Kanade-Lucas-Tomasi Corner Detector (KLT) [link]:

Procura por diferenças grandes de gradiente da função de luminância para classificar pontos como corners. É mais eficaz que o primeiro método pois utiliza rastreamento de pontos baseando-se no principio de localidade, o que faz com que os pontos detectados se mantenham mais estáveis, mas, no entanto, utiliza mais recursos de CPU.

Após testes utilizando ambos os algoritmos, concluíu-se que o metodo KLT apresenta resultados mais estáveis de calibração de câmera.

2.3. Acompanhamento de Pontos

Nesta etapa ocorre a busca por pontos do estado corrente que estejam mais próximos possíveis a Corners detectados no novo estado. Um valor de limite mínimo indica a partir de que distância pontos são considerados próximos o suficiente. No caso desta implementação utilizou-se a distância quadrática D=64, que representa uma distância euclidiana de 8 píxels.

Embora seja simples projetar uma algoritmo linear para busca de pontos mais próximos contidos em uma região discreta, utilizando um grid cartesiano, nesta implementação adotou-se um algoritmo quadrático em função do número de pontos, já que a quantidade de pontos em cada conjunto é relativamente pequena. Abaixo há um pseudo código do algoritmo utilizado.

Foreach corner Wi in trackedCorners:
  nearestDist = INFINITY;
  nearestElem = -1;

  Foreach corner Cj in detectedCorners:
    If squaredDistance( Wi, Cj ) < nearestDist
      nearestDist = squaredDistance( Wi, Cj );
      nearestElem = j;
    EndIf
  EndFor

  If nearestDist <= MAX_SQUARED_DIST; /* = 64 */
    Wi = C[nearestElem];
    increaseConfidence( Wi, 0.1 ); /* Aumenta 10% a confiabilidade de Wi */
    If confidence( Wi ) >= MIN_CONFIDENCE
      pick( Wi );
  Else /* Não há ponto em C próximo o bastante de Wi */
    decreaseConfidence( Wi, 0.1 ); /* Diminui 10% a confiabilidade de Wi */
    If confidence( Wi ) < MIN_CONFIDENCE
      discard( Wi );
    EndIf
EndForeach

2.4. Calibração da Câmera

Uma vez com um conjunto mínimo de pontos (Mk,Wk), podemos calibrar a camera. O método de calibração utilizado foi desenvolvido por Flávio Szenberg em sua tese de doutorado.

Após a calibração temos em mão os parametros intrínsecos e extrínsecos da câmera e somos capazes então de projetar objetos virtuais da mesma foram que os objetos reais foram projetado para gerar a imagem capturada pela câmera.

2.5. Reconstrução Virtual da Ruína

Possuir as matrizes que permitem projetar objetos virtuais em meio aos objetos reais não é suficiente para conseguir causar realismo quando o objetivo é reconstruir virtualmente parte de um objeto real. Isso porque o processo de reconstrução pode resultar em um situação em que ocorra oclusão entre parte do objeto real e parte do objeto virtual. Se estas situações não forem previstas e tratadas corretamente ocorrerá uma quebra abrupta de realismo durante a reconstrução no momento em que tais situações ocorrerem.

Para resolver o problema é preciso modelar precisamente o objeto na qual se deseja reconstruir (ruína). Isso porque com a ruína em mãos, pode-se lançar mão de um recurso eficiênte e de simples utilização: o buffer de profundidade da biblioteca gráfica OpenGL (Z-Buffer).

Um algoritmo simples que utiliza o Z-Buffer para solucionar o problema é apresentado a seguir.

  1. Desabilitar Buffer de Cor
  2. Renderizar ruína
  3. Habilitar Buffer de Cor
  4. Desenhar somente a parte reconstruída da ruína

Este algoritmo faz com que qualquer parte do modelo virtual que esteja sendo ocludido pela ruína real seja descartada, pois o modelo virtual da ruína tem coordenadas projetadas idênticas às coordenadas projetadas do modelo real da mesma, já que o ambos têm proporções precisamente iguais.

3. Trabalhos Futuros

A técnica apresentada foi feita de forma a priorizar a simplicidade de implementação. Isso faz com que seja limitada e tenha um fator de instabilidade alto, pois deixa de explorar idéias que agregariam a ela eficiência e funcionalidade. Algumas limitações da técnica são apresentadas abaixo, bem como as técnicas que ajudam a diminuir essas limitações, que são colocadas aqui como trabalho futuro.

Limitações da Técnica Atual

4. Arquivos