TRABALHO FINAL DE REALIDADE AUMENTADA E COOPERATIVA
TEMA :
CALIBRAÇÃO DE CÂMERA BASEADO EM
ALGORITMO DE DETECÇÃO DE CANTOS E
1. INTRODUÇÃO
2. PROCESSO DE DESENVOLVIMENTO
II.
Conversão de cor a escala
de grises
III.
Correção de
distorção radial e Radiometrica
IV.
Filtragem ruídos da
imagem
V.
Detecção de cantos
ou contornos
VI.
Algoritmo KLT
VII.
Calibração da
câmera
VIII.
Inserção do objeto
virtual na imagem
4. CONCLUSÕES
5. REFERENCIAS
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.

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.

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.
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
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.

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:

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:


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 .
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:



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.

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.

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.

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.
[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.