Trabalho 3: Reconstrução de malhas a partir de fotos estéreo de câmeras calibradas

 

O propósito deste trabalho é apresentar as técnicas utilizadas para fazer a reconstrução tridimensional de objetos a partir de imagens digitais, a serem utilizadas em experimentos relacionados com Visão Computacional.

 

A reconstrução será feita através do uso de projeção de luz estruturada sobre os objetos a serem reconstruídos e da tomada de fotografias desses objetos com câmeras fotográficas de alta resolução. Para isso foram utilizados um projetor duas câmeras digitais, de forma que se pudesse realizar reconstruções com calibração apenas das câmeras.

 

Seu objetivo final é conseguir recuperar uma informação de triângulos a partir do processamento de imagens de um objeto conhecido. Este processo consiste em quatro etapas: aquisição das fotos, calibração da câmera, processamento das imagens e geração da malha. A seguir, cada item será analisado em detalhes.

 

 

1.      Aquisição das Fotos

 

Para reconstruir o modelo por completo, é necessário obter fotos de diferentes pontos de vista, a fim de recuperar-se informação de toda a superfície do objeto. Além disso, é necessário obter fotos de um padrão para cada nova posição da câmera, de modo que esta possa ser calibrada na etapa seguinte.

 

As primeiras tentativas consistiram em obter fotografias de um objeto real em um ambiente controlado. Estas são algumas das fotos obtidas:

 

  

 

Infelizmente não foi possível obter boa qualidade de imagem. As fotos apresentam elevado nível de ruído e algumas estão fora de foco. Por conta disso, os processamentos seguintes foram seriamente prejudicados. Por exemplo, a calibração de câmera era incapaz de identificar a maioria dos pontos do padrão utilizado.

 

Portanto, utilizou-se a alternativa de analisar um modelo sintético. Um modelo foi gerado na aplicação de modelagem 3DStudioMax e foram renderizadas imagens artificiais em diferentes pontos de vista. A vantagem é uma maior precisão na projeção do padrão de cores no modelo, evitando ruídos e perda de qualidade da imagem. Estes são alguns exemplos:

 

 

 

 

2.      Calibração da Câmera

 

No modelo real, tentou-se utilizar o processo de calibração de câmera baseado no algoritmo de Zhang [3], implementado na biblioteca OpenCV [1]. Contudo, este mostrou-se incapaz de detectar corretamente a maioria dos pontos do padrão em xadrez utilizado. Tentou-se utilizar o algoritmo de Tsai [2], mas apesar de um resultado melhor ainda não foi o suficiente para obter uma calibração razoável.

 

Utilizando um modelo sintético, não se faz necessário o processo de calibração de câmera. Isto porque sabe-se de antemão a posição da câmera para cada ponto de vista gerado no software de renderização.

 

 

3.      Processamento das Imagens

 

A terceira etapa do processo consiste em extrair as informações necessárias de cada imagem do objeto. São necessários três processamentos:

 

a.       Identificar faixas do padrão

b.      Classificar transições

c.       Associar os dados dos padrões

 

Para o primeiro processamento, a estratégia adotada foi elaborar um filtro que efetua uma redução no espaço de cores das imagens para o espaço de cores utilizado pelo padrão escolhido:

 

                

                

Padrões de projeção (3,2)-BCSL

 

Após esta filtragem, as imagens resultantes são as seguintes:

 

 

 

 

 

Estas imagens servem como dados de entrada para a etapa de identificação de transições. Por causa da classificação efetuada, a busca por transições consistem em um processamento simples em busca de valores de cores diferentes em pixels vizinhos. Após esta etapa, identificam-se as linhas de transição de faixas. Para isso, é necessário utilizar uma função que, dado duas cores vizinhas positivas e negativas, é capaz de retornar um identificador único para cada transição de faixas. Com isso, pode-se identificar sem ambigüidades cada uma das faixas horizontais e verticas. O resultado é uma imagem horizontal e uma vertical contendo nos valores dos pixels o id de classificação, como ilustrado a seguir:

 

 

 

 

 

De posse destas duas imagens, é possível efetuar uma referência cruzada de forma a associar a informação recuperada por cada uma das câmeras com os padrões vertical e horizontal utilizados. Esta etapa elimina todos os pontos do objeto que não possuem o mesmo identificador em ambas as imagens classificadas. O resultado final é um conjunto de pontos no espaço da imagem que representam amostras na superfície do objeto sendo reconstruído.

 

 

 

Nuvem de pontos do modelo do cavalo, para um dos pontos de vista utilizados.

 

 

4.      Geração da malha

 

Dados os pontos resultantes do processo anterior, pode-se reconstruir suas posições no espaço, caso se conheça os parâmetros da câmera correspondentes. No caso do modelo sintético, os parâmetros foram fornecidos juntamente com as imagens geradas. Para obter informação de profundidade de um dado ponto, utiliza-se a informação em estéreo gerada a partir das duas câmeras.

 

Foram disponibilizadas duas opções para efetuar o processo de correspondência: geometria epipolar ou triangulação.

 

 

 

 

 

 

O objetivo é determinar o ponto P no espaço onde dois raios se encontram. Este cálculo é feito através da obtenção de uma matriz de transformação geral que leva do espaço da câmera para o espaço da imagem. A matriz essencial contém os parâmetros extrínsicos da câmera, como posição e rotação:

 

 

 

De posse desta, pode-se obter a matriz fundamental que efetua a transformação desejada, para assim considerar os parâmetros intrínsicos da câmera:

 

 

 

 

 

A outra opção para efetuar a correspondência entre as duas imagens é através de um processo de triangulação, onde procura-se determinar explicitamente a intereseção entre dois raios no espaço. Este foi o método utilizado neste trabalho.

 

 

 

 

 

A solução do sistema linear acima resulta no cálculo da interseção dos raios em questão. Dada uma certa tolerância, um ponto de interseção P no espaço pode ser obtido ao final deste processo. Este ponto se encontra na superfície do objeto.

 

Ao final deste processo, obtém-se uma nuvem de pontos no espaço para cada ponto de vista. A etapa seguinte consiste em alinhar estas nuvens de pontos de forma a recuperar os pontos verdadeiros do objeto e eliminar informações repetidas. De posse da nuvem de pontos final, pode-se efetuar um processo de triangulação para recuperar a malha do objeto. Por questões de tempo, estas duas últimas etapas não puderam ser efetuadas neste trabalho.

 

Um dos algoritmos mais utilizados no processo de registro de superfícies é o ICP (Iterative Closest Point), desenvolvido por [4]. Através de um processo iterativo, o algoritmo original ICP cria pares  de pontos correspondentes nas 2 malhas, usando como critério a proximidade dos pontos, e encontra uma transformação que minimiza o erro de alinhamento entre as 2 malhas. Essa transformação pode ser calculada minimizando-se a função de erro dada por:

 

 

onde N é a quantidade de pares, e R e t representam a matriz de rotação e o vetor de

translação. A transformação encontrada é aplicada as pontos da malha mB e o processo

é repetido até que as transformações encontradas sejam desprezíveis.

 

Porém, devido a problemas de mínimo local, uma das exigências do ICP é que

as malhas tenham uma estimativa inicial do alinhamento, e que apenas a região

de sobreposição seja levada em conta. Isso descarta a possibilidade de alinhamento

automático usando apenas o ICP.

 

Um trabalho futuro é implementar a técnica de ICP utilizando como entrada um alinhamento manual efetuado pelo usuário.

 

 

5.      Resultados

 

O trabalho é capaz de recuperar uma nuvem de pontos em 3D para cada ponto de vista gerado, conforme ilustram as figuras a seguir:

 

 

 

0 graus                                                             30 graus

 

 

Esta são imagens com todos os pontos adquiridos para cada posição da câmera, de 0 graus até 150 graus.

 

 

Pontos vermelhos indicam falhas no cálculo de z devido à tolerância na resolução do sistema linear. Pontos azuis indicam a informação recuperada para um dos pontos de vista, identificado pelo usuário.

 

 

Projeto para download

 

 

 

Referências

 

[1]- Manual do Opencv, visitado em 10/08/2007 http://www.cs.unc.edu/Research/stc/FAQs/OpenCV/OpenCVReferenceManual.pdf

 

[2] - Tsai, R. Y. (1987), ‘A versatile camera calibration technique for high-accuracy 3d machine vision metrology using off-the-shelf tv cameras and lenses’, Ieee Journal Of Robotics And Automation RA-3(4), 323–344.

 

[3] - Zhang, Z. (1998), A flexible new technique for camera calibration, Technical report, Microsoft Corporation.

 

[4] - Besl, P. J. & Mckay, N. D. (1992), ‘A method for registration of 3-d shapes’, IEEE

Transactions on Pattern Analysis and Machine Intelligence 14(2), 239–256.