TRABALHO FINAL DE REALIDADE AUMENTADA E COOPERATIVA

 

TEMA : 

CALIBRAÇÃO DE CÂMERA BASEADO EM ALGORITMO DE DETECÇÃO DE CANTOS E

INSERÇÃO DE OBJETOS VIRTUAIS DENTRO DA IMAGEM DE VÍDEO CAPTURADA

 

 

 

1.     INTRODUÇÃO

2.     PROCESSO DE DESENVOLVIMENTO

PRIMEIRA FASE:

                                                            I.      Captura da imagem

                                                         II.      Conversão de cor a escala de grises

                                                     III.      Correção de distorção radial e Radiometrica

                                                      IV.      Filtragem ruídos da imagem

SEGUNDA FASE:

                                                         V.      Detecção de cantos ou contornos

                                                      VI.      Algoritmo KLT

                                                  VII.      Calibração da câmera

                                               VIII.      Inserção do objeto virtual na imagem

3.     IMPLEMENTAÇÃO

4.     CONCLUSÕES

5.     REFERENCIAS

 

 

 

1.    INTRODUÇÃO

 

O presente trabalho e uma descrição da implementação e das experiências do trabalho Final  implementado na disciplina de Realidade Aumentada e Cooperativa, este trabalho foi um estudo orientado à implementação da Calibração duma câmera (Webcam) e posterior inserção de objetos virtuais dentro da imagem do mundo real emitida pela câmera; este estudo tinha como base os princípios básicos de visão computacional , os quais foram desenvolvidos seguindo o roteiro apresentado no livro de “INTRODUCTOR TECHNIQUES FOR 3D COMPUTER VISION ”[1].

 

Nesta descrição se define passo a passo como a partir de uma imagem de vídeo capturada desde uma Webcam comum , se consegui analisar as imagens frame a frame em procura de um padrão de Calibração bem definido, o qual será a base para levar a cabo a Calibração da câmera, e em base a esta Calibração se fará inserção de elementos virtuais dentro do mundo real capturado pela câmera.

 

Neste documento se descreve também as dificuldades encontradas em cada passo feito no  processo de reconhecimento do padrão e posterior obtenção de pontos de referencia, os cantos em nosso padrão serão os pontos de referencia , em base aos quais se encontrara uma matriz de transformação entre o mundo da câmera e o mundo real ou físico capturado pela câmera. Logo com esta matriz poderemos inserir imagens de objetos virtuais em posições do mundo real que sejam automaticamente transformadas a coordenadas no mundo da câmera, isto é feito em base a matriz de transformação definida na Calibração, os objetos são posicionados dentro do mundo da câmera mostrando assim objetos virtuais dentro da imagem de vídeo que a câmera projeta no monitor.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.    PROCESSO DE DESENVOLVIMENTO

 

A continuação apresentará um esquema de todo o processo feito desde a captura da imagem pela câmera ate a inserção de objetos virtuais dentro da mesma imagem. Também se faz uma pequena descrição de cada etapa , falando sobre os problemas e experiências vividas em cada uma delas.

 

PRIMEIRA FASE:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Nestas primeiras quatro etapas, nosso objetivo foi deixar a imagem o mais nítida possível como um pre processamento , eliminando tanto erros produzidos pelo próprio hardware de captura , como distorções da lente e também distorções da iluminação como excessos de brilho na imagem.

 

 

                                                            I.      CAPTURA DA IMAGEM

 

Definição da etapa:

Nesta etapa o objetivo foi conhecer nossa câmera e as características em relação a imagem capturada, para nossa implementação se utilizo uma câmera Webcam Pro Creative, de resolução máxima de 640 x 480,  photosensitive device CMOS.

 

 

 

 

Creative Web cam Pro

               

               

 

 

 

 

                                                        II.      CONVERSÃO DE COR A ESCALA DE GRISES

 

Definição da etapa:

Nesta etapa o objetivo foi fazer a conversão da imagem em cor capturada pela câmera a uma escala de grises , isto será muito útil para posteriores etapa de processamento , pois o trabalho de analise e processamento da imagem será feito em relação a um só canal de cor uniforme e não a três que seria o caso se trabalhar com imagens RGB.

 

Imagem da câmera transformada a branco e  preto

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                    III.      CORREÇÃO DE DISTORÇÃO RADIAL E RADIOMETRICA

 

Definição da etapa:

Aqui começa realmente o processamento da imagem capturada, o primeiro passo foi definir alguns  parâmetros intrínsecos da câmera que são básicos para a correção das distorções radial e Radiometrica dentro da imagem capturada.

 

Os parâmetros intrínsecos da câmera são a distancia focal  f , o centro da imagem em pixel (ox ,oy) , e o tamanho efetivo em milímetros do pixel (sx ,sy), estos valores podem ser extraídos das características técnicas da câmera , mas a experiência tida mostra que alguns não são bem definidos e tem que ser definidos com um valor estimado, como a distancia focal  que segundo as indicações do fabricante da câmera não era bem especificada mas se definho com uma aproximação meia de 10 cm. Os valores de (sx ,sy) podem ser obtidos fazendo cálculos , mas quase sempre é comparado a 1 pixel pelo milímetro. E além disso o centro da câmera não sempre é a metade da largura e altura da imagem , nosso caso a resolução imagem com a que se trabalho foi de 320 x 240, isto significava que o centro devia ficar no ponto (160, 120) mas na pratica a lente da câmera estava  desfocada e mediante inspeção visual se defino o correto.

 

Imagem da câmera onde se vê o desfoque

 

 

 

 

 

 

 

 

 

 

 

 

 

Bom à correção da distorção radial e Radiometrica , que se fez sobre a imagem  foi feita em base aos seguintes critérios:

 

Para a correção radial se teve que calcular os valores k1 e  k2  que definem o grado de distorção que se tem na imagem , mas o valor k2 era muito pequeno que foi assumido como k2 = 0 , só se acho o valor k1.

 

                                               Equações da distorção radial

 


 


O resultado de aplicar esta correção se pode ver na imagem em baixo:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sobre a correção Radiometrica , este foi  implementado baixo o critério da equação fundamental de formação Radiometrica numa imagem , a qual define que a variação da intensidade de iluminação mostrada na imagem decresce do centro da imagem para os contornos em forma circular em relação ao cos4 x  do angulo formado entre a distancia dum ponto da imagem ao centro da câmera  e do ponto central da imagem ao centro da câmera.

 

                                               Equação Fundamental de formação Radiometrica

 


 


O resultado se pode ver a continuação:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                     IV.      FILTRAGEM RUÍDOS DA IMAGEM

 

Definição da etapa:

Neste ponto de nosso trabalho , estamos com uma imagem mas uniforme em relação a sua distribuição de iluminação, mas ainda temos imperfeições dentro da imagem , ruídos , que são agregados pelo mesmo sistema eletrónico de captura da imagem ou as condições de iluminação e que devem ser eliminados antes de passar a seguinte fase, a qual precisara obter características especificas da imagem  como contornos ou cantos, e onde variações muito grandes na intensidade da iluminação seriam prejudiciais, um  exemplo os brilhos .

 

Neste trabalho se implemento o Filtro de Gauss , o qual é ótimo quando a procedência do ruído é desconhecida.  A implementação se baseia em convoluir um kernel de Gauss de 3x3  para cada valor do pixel na imagem.

 

     Kernel Gauss 3x3

 

 

 

 

 

 

 


A continuação se mostra o resultado de passar o filtro de Gauss à imagem:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SEGUNDA FASE:

 

 

 

 

 

 

 

 

 

 

 

 

 

 


A seguinte fase esta mas orientada ao reconhecimento das facões do padrão de calibrarão, o qual se baseia em obter a posição de pontos fixos de nosso padrão em coordenadas da imagem. Para tal tarefa se pode recorrer a diferentes algoritmos de reconhecimento de contornos como: SOBEL, CANNY complementados com um  algoritmo de HOUGH para definição das equações da reta definidas peles contornos detectados, ou aplicando algoritmos de detecção de cantos como: KLT , HARRIS diretamente sobre a imagem.

 

Uma vez, no caso de reconhecimento de contornos , estes sejam definidos se podem ter diferentes estratégias para  obter os diferentes pontos de referencia que se procura, um exemplo é encontrar a interseção das diferentes possíveis linhas que conformam o contorno do padrão.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Para nosso trabalho baseamos a obtenção dos pontos de referencia na detecção de cantos , utilizando o algoritmo KLT ,(Kanade-Lucas-Tomasi) , logo quando ter reconhecido todos os pontos de referência de nosso padrão , 8 cantos , utilizamos o algoritmos de Calibração TSAI para achar e resolver um sistema de equações ( 8 equações, com os 8 pontos em coordenadas da tela e seus correspondentes pontos em coordenadas do mundo) e conseguir achar a matriz de transformação que converta pontos do mundo real em pontos do mundo da câmera.

 

Uma vez obtida esta matriz , teremos a possibilidade de inserir objetos virtuais em coordenadas no mundo dentro da imagem projetada no monitor pela câmera .

 

 

                                                         V.      DETECÇÃO DE CANTOS OU CONTORNOS

 

Definição da etapa:

Neste ponto de nosso trabalho , o objetivo foi conseguir detectar silhuetas ou características próprias de nosso padrão de Calibração, e em base a estes detectar dentro deles pontos fixos em coordenadas do pixel como cantos que estão dentro do padrão percorrendo a silhueta detectada descobrindo onde a direção da normal em relação ao contorno varia fortemente o qual seria um possível canto ;  uma segunda alternativa que se combina com a detecção de contornos é detectar as possíveis retas que definam os lados retos de nosso padrão e tendo as equações de reta que definam os lados , achar os pontos de interseção entre estas retas, estes serão os cantos que são os pontos de referencia que procuramos para Calibração.

 

E uma alternativa mais seria a detecção diretamente da imagem dos cantos com um algoritmo de cantos, como KLT ou HARRIS.

 

A continuação se mostra os algoritmos de detecção de cantos que se implemento nesta etapa ,  o primeiro foi SOBEL , o qual define um contorno muito grosso que desenha bem a silhueta do objeto, isto em realidade é a detecção de mudança significativa de intensidade na imagem especialmente produzidas entre as fronteiras ou interseções de objetos com diferentes intensidade de cor na imagem.

 

Processo Efetuado pelo Algoritmo de SOBEL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

O algoritmo de SOBEL EDGE DETECTOR [2] se baseia em convoluir a imagem com dois matrizes (horizontalmente e verticalmente), como resultado se obtém duas imagens das quais se obtém uma só imagem a qual e filtrada em base a um umbral (Threshold)  que definira os pixels que tem a suficiente intensidade como para ser considerados pontos de contornos ou não. A continuação se mostra imagem do programa implementado

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Outro algoritmo implementado foi CANNY EDGE DETECTOR [3]  , este algoritmo tem a mesma função que o algoritmo de SOBEL detectar contornos mas a diferença é a largura dos contornos, os quais são refinados ao tamanho de um pixel o qual em certas situações é recomendável.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Depois utilizamos um algoritmo de afiamento de contornos obtendo a seguinte imagem:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Neste trabalho se opto pela implementação de detecção de cantos como médio para obter os pontos de referencia que precisamos , neste caso os oito pontos que conformam os 8 cantos de nosso padrão.

 

O algoritmo que se implemento foi o algoritmo KLT [4]  , este é descrito a continuação:

 

                                                     VI.      ALGORITMO KLT

 

  1. Para cada pixel da imagem computar os gradientes fx , fy  para cada posição da imagem f(x,y) .
  2. Para cada ponto na imagem criar a matriz Cstr com os gradientes da sua vizinhança d x d (3x3 ou 5x5).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.    Ordenar a lista L em ordem decrescente.

4.    Percorrer a lista desde o primeiro elemento ate o ultimo.

 

A saída deste algoritmo nos da uma lista L com as posições em coordenadas da tela dos possíveis cantos detectados dentro da imagem nesse momento analisada (a imagem em cada frame do vídeo).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comentários:  

 

Talvez neste algoritmo alguns parâmetros não foram definidos bem , mais tentaremos dar uma explicação a eles a continuação:

 

Problemas que aconteceram ao trabalhar diretamente com o algoritmo de detecção de cantos KLT :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Como se vê nas imagens , na primeira vez que se executa o algoritmo se faz o calculo de cantos sobre os 320 x 240 pixel que conformam a imagens, para a seguinte vez só se faz o calculo numa vizinhança definida pelo um circulo de radio R em relação das posições dos cantos encontrados no frame anterior, isto reduz enormemente o calculo do algoritmo pois agora o numero de pixel a ser analisado será de 8 x 4R2 . (320 x 240 = 76800  em comparação a  R = 20 pixel  8 x 4 x 202  = 12800).

 

Nesta imagem se mostra o resultado, da captura dos cantos em nosso padrão.

 


 


    

 

                                                 VII.      CALIBRAÇÃO DA CÂMERA

 

Definição da etapa:

Neste ponto de nosso trabalho , a gente já tem definido os 8 pontos de referencia mínimos que se precisa para começar o processo de Calibração de nossa câmera, além disso conhecemos de passos anterior a distancia focal e as coordenadas do centro da imagem, com estes dados o que se tentara fazer nesta etapa é achar a matriz de transformação que leva os pontos do espaço do mundo para pontos no espaço da câmera que são projetados logo na tela.

 

Para tal processo se recorre  ao algoritmo de TSAI 2D, o qual dados 8 ou mais pontos em coordenadas da câmera (pixel  ( xi  , yi ) ) e seus respectivos pontos parceiros em coordenadas do mundo (cm , mm ( Xw , Yw ) ), achar a matriz de transformação entre estes dois sistemas de coordenadas.

 


 


 


Com as 8 equações achadas se resolve o sistema


 

 


Onde , os valores de n são :


 


Chegando a achar a matriz de transformação dos pontos do mundo aos pontos da câmera:


 


A correspondência que se fez entre as posições dos cantos detectados pelo algoritmo TLK e as posições físicas do padrão são feitas como se mostra na seguinte imagem:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Uma vez obtida a matriz de transformação que se precisa , estamos em condições de inserir objetos virtuais definidos e posicionados em coordenadas do mundo ser trasladados e inseridos em coordenadas do mundo da câmera para logo ser projetados na tela.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                             VIII.      INSERÇÃO DO OBJETO VIRTUAL NA IMAGEM

 

Definição da etapa:

Aqui chegamos à  ultima etapa de nosso trabalho, aqui o objetivo foi inserir os objetos virtuais na imagem de vídeo original quase em tempo real, e mostrar que temos domínio sobre ambos sistemas de coordenadas mediante a matriz de transformação achada.

 

Para nosso trabalho se inseriu um boneco virtual o qual se movimenta dentro do padrão mediante teclado dando a sensação que ele é parte de nossa imagem de vídeo original.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.    IMPLEMENTAÇÃO

 

O modelo dos padrões utilizados nesta aplicação estão disponíveis para fazer download desde  PADRÕES.DOC

A aplicação desenvolvida , foi feita em Visual C++6.0, esta conformada peles seguintes módulos:

 

Processamento do  Distorção Radial e Radiometrica

Processamento do  Filtros.

Processamento do Algoritmo de Cantos

Processamento do Algoritmo TSAI

 

Aqui temos um link com o Código Fonte.

 

 

 

4.    CONCLUSÕES

 

 

 

 

5.    REFERÊNCIAS

[1] Emanuele Truco and Alessandro Verri,  Intoductory Techniques for 3-D Computer Vision, Prentice-Hall, 1998.

[2] Bill Green , Edge Detection Tutorial, 2002, Link.

[3] Bill Green , Canny Edge Detection Tutorial, 2002, Link.

[4] Dmitrij Csetverikov , Basic Algorithms for Digital Image Analysis, Link .

Marcelo Gattass,  Realidade Aumentada e Cooperativa, PUC – Rio de Janeiro , 2003.2, Link.