You are on page 1of 115

FACULDADE ASSIS GURGACZ

MAIKON LUCIAN LENZ













USO DE SENSORES KINECT NA RECONSTRUO ESTEREOSCPICA DE
IMAGENS COM PROFUNDIDADE











CASCAVEL
2012


FACULDADE ASSIS GURGACZ
MAIKON LUCIAN LENZ










USO DE SENSORES KINECT NA RECONSTRUO ESTEREOSCPICA DE
IMAGENS COM PROFUNDIDADE


Projeto de pesquisa apresentado ao Curso de
Graduao em Engenharia de Controle e
Automao da Faculdade Assis Gurgacz para
elaborao do Trabalho de Concluso de
Curso.

Professor Orientador: Arthur Schuler da
Igreja.













CASCAVEL
2012


FACULDADE ASSIS GURGACZ
MAIKON LUCIAN LENZ

USO DE SENSORES KINECT NA RECONSTRUO ESTEREOSCPICA DE
IMAGENS COM PROFUNDIDADE

Trabalho apresentado no Curso de Engenharia de Controle e Automao, da
Faculdade Assis Gurgacz, como requisito parcial para obteno do ttulo de Bacharel
em Engenharia de Controle e Automao, sob orientao do Professor Especialista
Arthur Schuler da Igreja.


BANCA AVALIADORA





____________________________
Arthur Schuler da Igreja
Faculdade Assis Gurgacz





____________________________
Hlder Jos Costa Carozzi
Faculdade Assis Gurgacz





____________________________
Suzan Kelly Borges Piovesan
Faculdade Assis Gurgacz







Cascavel, 06 de dezembro de 2012



AGRADECIMENTOS
Primeiramente a Deus pela oportunidade de aprender e descobrir a cada dia.
Aos meus pais pela compreenso de minha ausncia muita das vezes que
estive focado neste projeto e mesmo a distncia pelas palavras confortantes e de
encorajamento.
A minha namorada por estar ao meu lado mesmo durante as dificuldades,
apoiando e me mantendo confiante de que seria possvel atingir o objetivo.
No menos importante, quero agradecer a meus amigos pelas oraes e
energia que mesmo distantes foram indispensveis para o bom andamento deste
trabalho.
Ao professor Arthur Schuler da Igreja, pela pacincia, por suas orientaes e
por acreditar em minha capacidade de concluir a tarefa, sem o qual este projeto
sequer teria nascido.
Tambm ao professor Hlder Jos Costa Carozzi pelos conselhos, por se
manter prestativo e atencioso com toda a turma ao longo de todo o curso.
E a empresa Smart BR Solues Tecnolgicas Ltda por ter fornecido parte
dos equipamentos utilizados no desenvolvimento do trabalho.














RESUMO
Apesar de jovem, a cincia da viso computacional tm apresentado solues
para inmeros problemas da indstria de tecnologia. Seu dinamismo possibilita uma
reduo significativa na quantidade de sensores para realizar os mais diversos
procedimentos. O grande sucesso deve-se principalmente proximidade desta com
a interpretao humana do mundo, que se utiliza principalmente do aguado sentido
da viso propriamente dito. medida que cmeras e algoritmos evoluem, os
sistemas que os implementam tomam um pedao cada vez maior do mercado.
Neste sentido, este trabalho apresenta um mtodo de remodelar o ambiente
tridimensional visto por dois conjuntos de sensores, cada um dos quais contendo
uma cmera de cor e outra de infravermelho para mensurar a profundidade, a fim de
criar a partir destas uma nica imagem com ganho significativo na quantidade de
dados passveis ento, de anlises mais aprimoradas dos dados. Para tanto o
trabalho conta com o auxlio de dois sensores Kinect

, da plataforma de
programao Microsoft

Visual Studio, do ambiente de engenharia e clculo Matlab


e algumas bibliotecas abertas de auxlio anlise de imagens.

Palavras chave: Viso Computacional, Estereoscopia, Kinect

.


















ABSTRACT
Although young, the science of computer vision have presented solutions to
numerous problems in the technology industry. Its dynamic enables a significant
reduction in the number of sensors to perform the various procedures. The great
success is mainly due to the proximity of this to the human interpretation of the world,
which mainly uses the sense of sight itself. As cameras and algorithms evolves,
systems that implement this take a much bigger piece of the market. Aiming at this,
this paper presents a method to remodel the three-dimensional environment seen by
two sets of sensors, each of which containing a color camera and other infrared to
measure the depth, in order to create from these a single image with significant gain
in the amount of data which can then return more refined analysis of the data. For
this work relies on the assistance of two Kinect

sensors, the platform of Microsoft


Visual Studio programming, environmental engineering and calculation Matlab

and
some libraries open to aid image analysis.

Keywords: Machine Vision, Stereo Vision, Kinect

.









































Leva tempo para algum ser bem sucedido porque
o xito no mais do que recompensa natural pelo
tempo gasto em fazer algo direito.
(Joseph Ross)




LISTA DE ILUSTRAES
Figura 2.1 - Efeitos da iluminao. ............................................................................ 17
Figura 2.2 - A ocluso (ou obstruo visual) uma boa referncia para calcular o
posicionamento de cada um dos objetos. ................................................................. 17
Figura 2.3 - Representao de um sistema de viso estereoscpica. ...................... 18
Figura 2.4 - Relaes bidimensionais de vizinhana ................................................. 18
Figura 2.5 - Relaes tridimensionais de vizinhana ................................................ 19
Figura 2.6 - Exemplo de imagem monocromtica com diferentes tons de cinza em
cada ponto................................................................................................................. 20
Figura 2.7 - Exemplo de Imagem Binarizada ............................................................ 20
Figura 2.8 - a) Tcnica de Warping. b) Representao de Warping. ......................... 22
Figura 2.9 Exemplos da aplicao de operaes lgicas e aritmticas ................. 22
Figura 2.10 Exemplos de histogramas das mesmas imagens com contraste
diferenciado ............................................................................................................... 23
Figura 2.11 - Comparativo entre regies, linhas e esquinas para o algoritmo de
Moravec..................................................................................................................... 25
Figura 2.12 - Diferena entre ponto e esquina para o operador de Moravec ............ 26
Figura 2.13 - Limitaes do algoritmo de Moravec .................................................... 27
Figura 2.14 - Exemplo de janela gaussiana .............................................................. 27
Figura 2.15 - Demonstrativo da maior preciso do algortimo de Harris (azul) em
relao ao de Moravec (vermelho). ........................................................................... 29
Figura 2.16 - Representao dos eixos utilizados ao longo do trabalho ................... 30
Figura 2.17 - Transformaes geomtricas ............................................................... 31
Figura 2.18 - Regra da mo direita, exemplo para rotao no eixo X. ..................... 32
Figura 2.19 - (a) Cubo original. (b) Cubo com rotao de 35 graus em Y (aresta em


amarelo permanece inalterada). ................................................................................ 33
Figura 2.20 - Projeo dos pontos do mundo real em uma cmera pinhole. Em azul
plano focal. Em cinza plano da cmera. .................................................................... 34
Figura 2.21 Distoro radial. (a) Visvel deformao das linhas retas de um objeto
quadrado. (b) Demonstrao do aumento do efeito conforme nos distanciamos do
ponto principal da cmera (X
p
e Y
p
) em X
d
e Y
d
que deveriam ser projetados em X e
Y respectivamente. .................................................................................................... 35
Figura 2.22 - Ocorrncia da distoro tangencial. Matriz de sensores no
devidamente alinhada com as lentes da cmera ...................................................... 35
Figura 2.23 - (a) Nuvem de Pontos. (b) Imagem original. ......................................... 37
Figura 2.24 - Alinhamento de dois planos de imagem ............................................... 37
Figura 2.25 - Exemplo de figura utilizada em calibrao ........................................... 39
Figura 2.26 - Exemplo de pontos em comum entre duas nuvens de pontos sobre
ngulos diferentes de viso ....................................................................................... 45
Figura 2.27 Vetores em comum formados tomando-se o os pontos em amarelo
como origem, em seguida os verdes e por fim em magenta. .................................... 46
Figura 2.28 - Projeo de um vetor tridimensional .................................................... 46
Figura 2.29 - Procedimento para alinhar o vetor u ao eixo Y. (a) original. (b)
transladado. (c) e (d) rotao no eixo X. (e) e (f) rotao no eixo Z. ......................... 47
Figura 2.30 - Resultado da primeira nuvem de pontos ao final do alinhamento ........ 48
Figura 2.31 - Procedimento de alinhamento do eixo ao eixo Y da segunda nuvem de
pontos. (a) original. (b) transladado. (c) e (d) rotao no eixo X. (e) e (f) rotao no
eixo Z. ....................................................................................................................... 48
Figura 2.32 - Nuvens de ponto comuns alinhadas ao eixo base. .............................. 49
Figura 2.33 - Rotao no eixo base (Y), para alinhar o segundo par de vetores. ..... 49


Figura 2.34 - Nuvens de pontos alinhadas na origem do sistema. ............................ 49
Figura 2.35 - Processo inverso das transformaes aplicadas na primeira nuvem de
pontos. ...................................................................................................................... 50
Figura 2.36 - Sensor Kinect. ................................................................................... 51
Figura 2.37 - Imagem RGB; profundidade; e imagem obtida pelo sensor IR. ........... 51
Figura 2.38 - Comparativo entre trs drivers diferentes e a linearidade da obteno
dos dados de profundidade ....................................................................................... 52
Figura 2.39 - Comparativo entre trs drivers diferentes e a preciso de obteno dos
dados de profundidade .............................................................................................. 53
Figura 3.1 - Fluxograma principal .............................................................................. 54
Figura 3.2 - Cubo mgico .......................................................................................... 56
Figura 3.3 - Obstruo das faces limita a calibrao um nico plano (azul) na
maioria dos casos. .................................................................................................... 57
Figura 3.4 - Demonstrao da diferena de tamanho das arestas e a rea das
regies de uma imagem de calibrao inclinada. ...................................................... 58
Figura 3.5 - Objeto transparente de calibrao. Imagem RGB ( esquerda) e imagem
de profundidade ( direita). ....................................................................................... 58
Figura 3.6 - Algoritmo de Harris, sem ordenamento de pontos. ................................ 59
Figura 3.7 - Deteco de esquinas da biblioteca EmguCV com ordenamento de
pontos. ...................................................................................................................... 60
Figura 3.8 - Esquinas internas do xadrez utilizado na calibrao. ............................. 60
Figura 3.9 - Diferena entre erro mdio e quadrado. ................................................ 64
Figura 3.10 - Pontos utilizados na calibrao stereo (extremidades internas do
xadrez). ..................................................................................................................... 64
Figura 3.11 - Tamanho reduzido da imagem (direita) devido a remoo da distoro


das lentes. ................................................................................................................. 66
Figura 4.1 - Imagens de cor utilizadas na calibrao. ............................................... 71
Figura 4.2 - Imagens de profundidade utilizadas na calibrao. ............................... 72
Figura 4.3 - Esquinas invisveis. a) Imagem de profundidade. b) Imagem real. c) e d)
Detalhamento dos pontos.......................................................................................... 73
Figura 4.4 - Esquinas superdimensionadas. a) Imagem de profundidade. b) Imagem
real. c) e d) Detalhamentos. ...................................................................................... 73
Figura 4.5 - Imagens com grandes pontos de profundidade indeterminveis. .......... 74
Figura 4.6 - Parmetros intrnsecos da cmera 1 de profundidade. .......................... 74
Figura 4.7 - Parmetros intrnsecos da cmera 2 de profundidade. .......................... 74
Figura 4.8 - Coeficientes de Distoro Cmera 1. a) Cmera de Profundidade. b)
Cmera RGB. ............................................................................................................ 76
Figura 4.9 - Distoro Cmera 2. a) Cmera de Profundidade. b) Cmera RGB. ..... 76
Figura 4.10 - Parmetros intrnsecos da cmera de cores. ....................................... 76
Figura 4.11 - Parmetros intrnsecos da cmera 2 de cores. .................................... 77
Figura 4.12 - Nuvem de pontos para calibrao de 30 imagens ............................... 79
Figura 4.13 - Nuvem de pontos para calibrao de 3 imagens. ................................ 79
Figura 4.14 - Sobreposio das nuvens de pontos bem calibrada e mal calibrada
(direita). ..................................................................................................................... 80
Figura 4.15 - Comparativo entre duas nuvens de pontos alinhadas. ........................ 80
Figura 4.16 - Nuvem de pontos da cmera 1 (esquerda) e cmera 2 (direita). ......... 81
Figura 4.17 - Alinhamento das nuvens de pontos. .................................................... 81
Figura 4.18 - Erro de alinhamento em decorrncia da falta de preciso na calibrao.
.................................................................................................................................. 81



Sumrio
1 INTRODUO ............................................................................................... 14
2 FUNDAMENTAO TERICA ..................................................................... 16
2.1 FUNDAMENTOS DE IMAGENS DIGITAIS .................................................... 16
2.2 ESTEREOSCOPIA ......................................................................................... 16
2.3 VIZINHANA .................................................................................................. 18
2.4 CONECTIVIDADE .......................................................................................... 19
2.5 OPERAES ARITMTICAS ........................................................................ 20
2.6 FERRAMENTAS ESTATSTICAS DE ANLISE ............................................. 23
2.7 DETECO DE PONTOS INTERESSANTES ............................................... 24
2.7.1 Deteco de Esquinas de Harris & Stephens ................................................. 25
2.8 SISTEMAS DE COORDENADAS EM IMAGENS .......................................... 30
2.9 TRANSFORMAES GEOMTRICAS ......................................................... 30
2.10 CMERA ESTENOPEICA .............................................................................. 34
2.10.1 Distoro Das Lentes ..................................................................................... 34
2.11 NUVEM DE PONTOS .................................................................................... 36
2.12 HOMOGRAFIA ............................................................................................... 38
2.13 PARMETROS INTRNSECOS E EXTRNSECOS ....................................... 39
2.14 ALINHAMENTO DE IMAGENS ESTEREOSCPICAS TRIDIMENSIONAIS . 45
2.15 SENSOR KINECT

........................................................................................ 50
3 METODOLOGIA ............................................................................................ 54
3.1 AQUISIO DE IMAGENS ............................................................................ 54
3.2 CALIBRAO ................................................................................................ 56
3.3 NUVEM DE PONTOS .................................................................................... 64
3.4 ALINHAMENTO TRIDIMENSIONAL .............................................................. 67
13

4 RESULTADOS E DISCUSSO ...................................................................... 71
4.1 CALIBRAO ................................................................................................ 71
4.2 NUVEM DE PONTOS .................................................................................... 78
4.3 ALINHAMENTO TRIDIMENSIONAL .............................................................. 81
5 CONCLUSO ................................................................................................ 84
5.1 TRABALHOS SUGERIDOS ........................................................................... 85
REFERNCIAS BIBLIOGRFICAS ......................................................................... 87
ANEXO I Alinhamento de duas nuvens de pontos ................................................. 90
ANEXO II Soluo fechada de Zhang .................................................................... 91
ANEXO III Mapeamento por matriz de afinidade ................................................... 92
ANEXO IV Alinhamento interno das cmeras do Kinect

...................................... 93
ANEXO V Algoritmo de Calibrao ........................................................................ 94
ANEXO VI Funes de montagem dos vetores, h, v e matriz V (Captulo 2.12). .. 96
ANEXO VII Algoritmo de alinhamento das nuvens de pontos ................................ 97
ANEXO VIII Matrizes de rotao ............................................................................ 99
ANEXO IX Imagens do software de estudo ......................................................... 101
ANEXO X Funes de obteno e aquisio das imagens ................................. 103
ANEXO XI Rotinas de manipulao da biblioteca SharpGL ................................ 105
ANEXO XII Tabelas de calibrao das cmeras de profundidade ....................... 108
ANEXO XIII Tabelas de calibrao das cmeras de cores .................................. 112








14

1 INTRODUO

Os sistemas de viso computacional so capazes de retornar uma gama
ampla de informaes sobre uma nica imagem, diferentemente dos sensores
tpicos (capacitivos e indutivos por exemplo) que se baseiam em um nico tipo de
dado (cor, composio do material, tamanho, proximidade, etc...) [1].
Existem dispositivos no mercado capazes de retornar simultaneamente os
dados no s de cor e luminosidade de um determinado ponto, mas tambm a que
distncia cada um se encontra do aparelho. o caso, por exemplo, do popular
sensor Kinect

da Microsoft

utilizado com seu console de videogame [5], que


possui grande acessibilidade de informaes com bibliotecas voltadas para o
mesmo e meios que facilitam sua integrao em ambientes de programao
avanados, como o Matlab

ou o Microsoft

Visual Studio, fatores que justificaram


sua escolha em detrimento de outros sensores com foco em aplicaes industriais.
No entanto, mesmo um sensor capaz de reconstruir o cenrio em trs
dimenses no consegue visualizar certos pontos da imagem seja por uma
sobreposio de um objeto ao outro, ou simplesmente por estar em um ngulo fora
do foco desta.
Dada esta limitao, pretende-se analisar e desenvolver um mecanismo de
viso que utilize dois sensores Kinect

em conjunto, com o objetivo de eliminar os


pontos antes invisveis, ampliando assim a quantidade de informaes disponveis
sobre o ambiente analisado e consequentemente a confiabilidade e eficincia da
anlise de imagens.
Neste trabalho, so apresentadas algumas estratgias possveis de serem
seguidas para se atingir este objetivo, porm a maior nfase dada as solues
apresentadas por Zhang [42], que convergiram mais facilmente ao resultado
esperado.
Todos os passos do trabalho so apresentados, desde a calibrao das
cmeras e remodelagem do ambiente tridimensional (nuvem de pontos), at objetivo
final de alinhar geometricamente ambos os sensores.
Espera-se que muitos ramos da viso computacional possam ser
beneficiados por este estudo, principalmente sistemas que envolvam o escanear
de objetos, anlise de movimento, anlise de formas, a interao homem-mquina
15

ou sistemas de reconhecimento de padro que podem agregar uma quantidade de
informaes maiores sobre o objeto analisado a fim de reduzir as probabilidades de
erro e at mesmo colaborar com a classificao destes.












































16

2 FUNDAMENTAO TERICA

2.1 FUNDAMENTOS DE IMAGENS DIGITAIS

Para se digitalizar uma imagem necessrio que um determinado
equipamento capture a luz refletida pelo objeto observado e alimente a superfcie de
um elemento sensor que ir traduzir a onda eletromagntica em cor e/ou
luminosidade [4][22].
As cores so determinadas pela frequncia da onda eletromagntica [21], uma
vez que materiais diferentes absorvem frequncias diferentes desta, refletindo uma
frequncia em especfico [4]. J a luminosidade diz respeito quantidade de ftons
concentrados em determinado pontos da imagem, quanto maior for a intensidade de
luz em determinado ponto, mais saturado se encontrar o elemento sensor,
conferindo maior brilho quele ponto.
No entanto, antes de atingir a superfcie do sensor, os feixes de luz passam por
filtros de diferentes frequncias para obter a intensidade de cada uma das cores
bsicas utilizadas pelo sistema de imagens da cmera. Assim o equipamento
capaz de converter a energia dos ftons em um sinal eltrico e posteriormente em
um valor digital. O resultado uma matriz de valores inteiros onde cada ponto,
denominado pixel [23], representar o brilho para uma determinada frequncia do
pulso eletromagntico.
comum a utilizao do sistema de cores RGB (red, green and blue
vermelho, verde e azul) aonde a combinao da intensidade de trs cores bsicas
capaz de recriar outras milhares de cores [16]. Unindo-se cada um dos pontos
dessas matrizes tm-se uma nica matriz representando a cor emitida por aquele
ponto no espao.

2.2 ESTEREOSCOPIA

A estereoscopia um mecanismo inspirado na viso humana, e consiste na
focalizao de um mesmo ponto por dois mecanismos independentes de imagens.
Na viso humana o crebro utiliza de caractersticas referentes iluminao (Figura
2.1) e obstruo visual de objetos (Figura 2.2) para identificar o tamanho e posio
17

destes no espao [6].

Fonte: [6].
Figura 2.1 - Efeitos da iluminao.

Esta tcnica normalmente utilizada para criar uma perspectiva de
profundidade a partir de sistemas capazes de enxergar unicamente em duas
dimenses. Por este motivo que os sensores so focalizados em um mesmo
ponto, mas a partir de ngulos diferentes.

Fonte: [6].
Figura 2.2 - A ocluso (ou obstruo visual) uma boa referncia para calcular o posicionamento de
cada um dos objetos.

Com isso o mtodo de estereoscopia (Figura 2.3) ampliado neste trabalho,
conquanto o sensor utilizado j seja capaz de retornar informaes a respeito da
profundidade de cada pixel, porm necessita da focalizao e integrao deste
mtodo para ampliar o campo de viso.
18


Fonte: [6].
Figura 2.3 - Representao de um sistema de viso estereoscpica.

2.3 VIZINHANA

Em anlise de imagens so usadas muitas operaes e ferramentas que
trabalham com os conceitos de vizinhana [1]. Os trs tipos mais comuns de
vizinhana para um pixel p(x,y) denominam-se [4]:
- 4-vizinhana (Figura 2.4a): so considerados vizinhos, o pontos de p(x+1, y),
p(x-1, y), p(x, y+1) e p(x, y-1)
- vizinhana-diagonal (Figura 2.4b): p(x-1, y-1), p(x-1, y+1), p(x+1, y-1) e p(x+1,
y+1)
- 8-vizinhana (Figura 2.4c): unio dos dois casos anteriores.
Estes conceitos de vizinhana podem ser vistos na imagem abaixo, aonde para
um pixel central p existem pixels vizinhos (em cinza) conforme o mtodo de conexo
escolhido.

Fonte: [4].
Figura 2.4 - Relaes bidimensionais de vizinhana

No caso de uma imagem tridimensional, cada ponto no espao denominado
voxel [11] e a combinao entre os pontos so dadas por uma relao de
vizinhana diferente das bidimensionais [10]; a relao de vizinhana determinada
19

pelo compartilhamento de faces, arestas e/ou vrtices entre os voxeis, com
padres de 6-vizinhana (Figura 2.5a), 18- vizinhana (Figura 2.5b) e 26- vizinhana
(Figura 2.5c) [12].
O valor associado a cada voxel um nmero inteiro, proporcional ao tom de
cinza do pixel na imagem correspondente, e representa a integrao de
alguma propriedade fsica que est sendo mensurada no interior do volume
associado ao voxel. (SILVA, 2004, p. 30).


Fonte: [12].
Figura 2.5 - Relaes tridimensionais de vizinhana

2.4 CONECTIVIDADE

Pode-se interpretar uma imagem 2D como um grafo onde os ns so os
pixels (amostras) e as arestas so definidas por uma relao de adjacncia A entre
ns [9].
Para realizar o reconhecimento de regies e objetos em imagens, o princpio
de conectividade estabelece algumas regras para determinar se dois pixels (ou
voxeis) esto ou no interligados.
Normalmente utiliza-se a averiguao por nveis de cinza com uma tolerncia
de variao pr-determinada para a similaridade, como na Figura 2.6 onde os
valores dos pixels variam de 0 a 255 conforme a proximidade do branco, j para o
caso de imagens binrias dois pixels sero vizinhos se possurem exatamente o
mesmo valor [4] j este sistema utiliza apenas valores de verdadeiro ou falso.
20


Fonte: [12].
Figura 2.6 - Exemplo de imagem monocromtica com diferentes tons de cinza em cada ponto


Portanto, a escolha do filtro utilizado na imagem determinar no s a
praticidade de se interpretar os dados existentes nesta, mas tambm a qualidade e
fidelidade deste reconhecimento. Uma imagem binria pode ser avaliada mais
rapidamente, mas pode no fornecer dados suficientes para o caso pretendido.
Na Figura 2.7 h um exemplo da converso de uma imagem originalmente
(Figura 2.7a) colorida em uma imagem binria (Figura 2.7c).

Fonte: [16].
Figura 2.7 - Exemplo de Imagem Binarizada

Sempre que existir uma conectividade entre os dois pixels, estes sero ditos
pixels adjacentes, o mesmo vale para conjuntos dos mesmos.

2.5 OPERAES ARITMTICAS

Os diversos sistemas de cores possuem limites de valores para uma
interpretao adequada dos dados. Com isso, necessrio que se tomem alguns
cuidados com qualquer operao realizada sobre estas imagens para evitar
situaes como:
- Underflow: matriz que possui valores inferiores aos aceitos pelo formato da
imagem.
21

- Overflow: matriz que possui valores superiores aos aceitos pelo formato da
imagem.
A utilizao de determinadas operaes aritmticas e lgicas podem ser usadas
de inmeras formas, e combinadas podem-se obter resultados diferentes. No
entanto, existem aplicadas bastante comuns para cada uma delas, a saber [4]:
- Adio: consiste na simples soma dos valores de cada um dos pixels de duas
matrizes, uma da imagem e outra do filtro. Utilizado frequentemente para operaes
de normalizao de brilho e remoo de rudos.
- Subtrao: so subtrados os valores de uma imagem por outra (Figura 2.9a),
o que torna as diferenas entre ambas facilmente visveis; muito utilizado em
deteco de movimento e fundo de imagem.
- Multiplicao: pode ser uma multiplicao por valor constante, ou tambm por
uma outra matriz de valores de igual ou diferente dimenso (utilizada em rotaes,
translaes, escalonamentos e outros filtros).
- Diviso: provavelmente a menos utilizada, a diviso pode auxiliar na
normalizao do brilho.

Unindo-se ferramentas aritmticas pode-se chegar a ferramentas mais
complexas, ou tcnicas como o Warping.
Uma ideia muito simples para alinhar duas imagens consiste em aplicar a
uma delas um conjunto de deformaes/ transformaes geomtricas e
posteriormente escolher a transformao que originou melhores resultados
em termos da medida de similaridade considerada. (OLIVEIRA, 2009, p.
35).

O warping realiza a transformao de coordenadas (no necessariamente
homogneas) de uma imagem, baseado em equaes com coeficientes
anteriormente calculados para a converso (Figura 2.8a). Um exemplo dessa
transformao vista na Figura 2.8b.

22


Fonte: [4].
Figura 2.8 - a) Tcnica de Warping. b) Representao de Warping.

Operaes lgicas comuns como OU (Figura 2.9d), E (Figura 2.9e) e
NEGAO, alm das diversas combinaes entre elas, podem ser utilizadas at
mesmo em imagens no binrias, apesar de mais comum neste caso.
Estas so as operaes bsicas, que mescladas do origem a muitas
ferramentas de grande poder no processamento de imagens. A multiplicao com
matrizes especficas, por exemplo, muito comum na deteco de bordas e linhas.
Existem ainda muitas outras ferramentas, que envolvem convoluo [1] de
mscaras, operaes relacionadas vizinhana, mas que sero detalhadas ao
longo da necessidade de desenvolvimento do projeto [16].

Fonte: [16].
Figura 2.9 Exemplos da aplicao de operaes lgicas e aritmticas


23

2.6 FERRAMENTAS ESTATSTICAS DE ANLISE

Estas ferramentas auxiliam o estudo e anlise das imagens e tambm
procedimentos de filtros e/ou reconstituio/suavizao destas [14].
Para exemplificar, pode-se citar o histograma que um grfico com
informaes a respeito da variao dos dados dentro de uma imagem, indica quais
os valores de pixels mais comuns. Pode-se fazer meno variao das cores em
uma imagem RGB, ou a variao dos nveis de cinza se for o caso [11], alm de
retornar informaes valiosas e facilitar a escolha dos filtros adequados para
viabilizar a posterior interpretao da imagem.

Fonte: [4].
Figura 2.10 Exemplos de histogramas das mesmas imagens com contraste diferenciado

Na Figura 2.10a pode-se ver uma imagem de pouco contraste, ou seja, h
uma diferena extremamente pequena entre os pontos claros e escuros desta, o que
evidenciado em seu histograma (Figura 2.10b). J para a Figura 2.10c com um
contraste maior, o histograma demonstra melhor distribuio dos nveis de cinza com
uma pequena tendncia para pontos mais escuros. Levando-se em considerao
que quanto maior o nvel de contraste em imagens maior ser a facilidade de
24

separar e interpretar os dados existentes nestas, o histograma torna-se uma tima
ferramenta de auxlio.
Podem ser teis outras ferramentas como o desvio padro e a varincia, at
mesmo em conjunto com o histograma para avaliar a uniformidade dos dados
obtidos, indicando quo longe estes se encontram dos valores esperados [14].
A varincia pode ser obtida pela equao 2.1, enquanto o desvio padro
equivale raiz quadrada desta e possui a mesma unidade dos dados originais o que
facilita a compreenso do resultado.

2.1

Onde:
s
2
varincia
n nmero de amostras
i ndice de amostra
m mdia aritmtica

2.7 DETECO DE PONTOS INTERESSANTES

Diz-se ponto interessante, aquele que apresente alguma caracterstica
facilmente distinguvel do restante da imagem. Alguns algoritmos denominados de
ICP (Iterative Closest Point Ponto Iterativo mais Prximo) fazem a varredura da
imagem em busca de um ponto que possa determinar esta caracterstica atravs
das relaes de conectividade e vizinhana [45]. Outros mtodos buscam classificar
os pontos da imagem segundo sua relao com os demais [42], pode-se citar:
regies, bordas e esquinas; cada qual com suas vantagens e desvantagens.
Uma definio melhor de ponto interessante inclui que este possua: uma
definio matemtica para o mesmo e posio bem definida no plano de imagem.
A deteco de bordas pode ajudar a definir o formato geomtrico do objeto
para ento classificar a imagem de forma a separar os objetos nela. Porm, as
esquinas so invariveis, conquanto no estejam oclusas por outros objetos elas
podem representar facilmente dois pontos em comum em duas imagens e assim
contribuir para a calibrao das cmeras bem como o alinhamento das mesmas.

2
=
(

)
2
( 1)


25


= (

=

Por mais que as imagens estejam inclinadas ou com um determinado nvel de
distoro, as esquinas permanecem intactas [41], por este motivo so amplamente
utilizadas em processos de calibrao e reconstruo estereogrfica de imagens.
Se fossem utilizadas bordas, por exemplo, para obter os parmetros de
calibrao das cmeras, dificilmente obter-se-ia o sucesso visto que as cmeras
comumente apresentam distoro radial e tangencial por efeito das lentes e o
processo de fabricao destas. Assim, uma reta fotografada pela mquina, se
apresentaria de forma ligeiramente curva na imagem resultante [28]. Logo a
deteco de reta nestes casos no de fato o melhor a caminho a se seguir.
Alm do mais, uma esquina facilmente demonstra a transio de uma regio
ou objeto para outro, representando muitas vezes o fim de uma linha, ou a
extremidade de uma regio, sendo, portanto, um ponto especfico da imagem.

2.7.1 Deteco de Esquinas de Harris & Stephens
Moravec props a deteco de esquinas [40] a partir da variao do gradiente
de intensidade na escala de cinza de determinando ponto na imagem com relao a
seus vizinhos dentro de uma janela de tamanho pr-determinado. Na Figura 2.11,
pode-se ver a diferena bsica entre regies, bordas e esquinas.

Fonte: [40], traduzida pelo autor.
Figura 2.11 - Comparativo entre regies, linhas e esquinas para o algoritmo de Moravec

Quando a janela de observao movida para qualquer direo (vertical,
horizontal ou diagonal) se esta estiver dentro de uma regio o gradiente de cores
ter pequena variao. Ao sair desta regio (Figura 2.11b) identificada uma borda,
que possui grande variao de gradiente (G) perpendicular a ela, mas pouca
variao na mesma direo desta [40].


26

2.2

Onde:
G variao de intensidade ao longo da janela
N tamanho da janela e deve ser sempre mpar (3x3, 5x5, 7x7...)
A janela original
B janela movida vertical, horizontal ou diagonalmente
i pixel atual dentro da janela

Por fim, uma esquina localizada quando a variao de gradiente tem grandes
alteraes tanto horizontalmente quanto verticalmente. Na Figura 2.12 para o
primeiro caso se utilizada a equao 2.2 o resultado seria de:
2.3
Enquanto para o segundo caso, onde realmente h uma esquina de um objeto
tm-se como resultado:
2.4

Fonte: [40].
Figura 2.12 - Diferena entre ponto e esquina para o operador de Moravec

Esta funo apesar de simples e prtica apresenta o problema de no
conseguir detectar com eficincia esquinas em bordas que no sejam perfeitamente
horizontais ou verticais, isto significa que qualquer inclinao na imagem capaz de
reduzir significativamente a eficincia deste algoritmo.
Na Figura 2.13, evidenciada a ineficincia de Moravec, uma vez que ao girar
a imagem em 30 o algoritmo no s deixou de detectar alguns pontos de esquina
verdadeiros como tambm passou a detectar uma quantidade muito maior de pontos
falsos de esquina, principalmente na extremidade superior da imagem.
130050 = 255 * 2 = ) B - (A + ) B - (A = G
2 2
7 7
2
5 5
195075 = 255 * 3 = ) B - (A + ) B - (A = G
2 2
7 7
2
5 5
27

=

)
2

=1


Fonte: [40], traduzida pelo autor.
Figura 2.13 - Limitaes do algoritmo de Moravec

Pode-se utilizar ainda uma janela gaussiana (Figura 2.14), para prover
melhores resultados uma vez que a janela de varredura ser feita em crculos,
aumentando o peso do pixel em questo conforme sua proximidade com relao ao
centro da imagem (2.5):

Fonte: [40].
Figura 2.14 - Exemplo de janela gaussiana

Logo a frmula passa a ser:

2.5

Onde:
w o peso do pixel neste ponto da janela
Ex.: w(13) = 0.15

Harris & Stephens propuseram ento a expanso do mtodo [40][41] de
Moravec com a utilizao do gradiente de intensidade da imagem.
Mscara horizontal:
28

= [1 0 1]

(, )

[ ( +1, ) ( 1, )] = (, )

= [1 0 1]


(, )

[ (, 1) (, + 1)] = (, )

=
0 0 1
0 0 0
1 0 0


(, )

=
(, )

=
(, )

(, ) (, )

)
2

=1

)
2

=1

2.6
2.7
Mscara vertical:
2.8
2.9
Mscara diagonal:
2.10


2.11

Onde:
I intensidade do pixel
x linha da janela de pixels
y coluna da janela de pixels
operador gradiente
operador convoluo

Segundo os mesmos este gradiente pode ser aproximado pela seguinte
frmula:
2.12

Logo:

2.13
Onde:
i pixel atual dentro da janela
N tamanho da janela
A principal diferena entretanto de Moravec e Harris, que o segundo mtodo
obtm a auto-correlao de intensidade dos pixels em todas as direes
simultaneamente:

(, )

[ ( 1, 1) ( +1, +1)] = (, )



29

,
(, ) =

)
2

=1


=

(
2

2
+2

+
2

2
)

=1

,
(, ) =
2
+2 +
2


= [ ]
(

v
u

(

=
B C
C A
M
2.14

2.15

Substituindo os gradientes por coeficientes:
A =

B =

C =



2.16
2.17
Onde:

2.18

Pode-se solucionar a matriz acima da equao (x) atravs da obteno dos
auto-vetores. Entretanto, o processamento demasiadamente demorado para se
obter os auto-vetores a partir de um algoritmo de SVD (Singular Value
Decomposition Decomposio em Valores Singulares), da surge uma segunda
alternativa capaz de aproximar os mesmos valores, sugerida por Harris representado
na (Figura 2.15):
2.19
Onde:
M matriz 2x2, derivadas de intensidade do ponto
k constante surgerida por Harris (entre 0,04 e 0,06)
det determinante da matriz
trace soma da diagonal principal da matriz


Fonte: [40].
Figura 2.15 - Demonstrativo da maior preciso do algortimo de Harris (azul) em relao ao de
) ( . ) det(
2
M trace k M R =
30

Moravec (vermelho).

Esta funo est implementada na biblioteca EmguCV, bem como uma
variao especial dela para obter apenas as esquinas internas de um xadrez desde
que conhecida a quantidade de pontos internos a este, ignorando os demais [28].

2.8 SISTEMAS DE COORDENADAS EM IMAGENS

As imagens podem ser representadas em qualquer sistema de coordenadas
existente, entretanto comum se adotar o sistema de coordenadas homogneas
que apresentam algumas vantagens com relao ao processamento algbrico
destas.
Em coordenadas homogneas, existe um elemento adicional s coordenadas
cartesianas que representa um fator de escala w. Assim, um ponto determinado por
(x, y, z) passa a ser representado por (w.x, w.y, w.z, w), um vetor do tipo coluna [33].
Este sistema possibilita a combinao de vrias transformaes geomtricas
em uma quantidade menor de processos, o que reduz significativamente a
quantidade de clculos necessrios para se atingir o objetivo [33].
Os eixos X, Y e Z adotados durante todo o trabalho correspondem aos
demonstrados na Figura 2.16.

Fonte: o autor.
Figura 2.16 - Representao dos eixos utilizados ao longo do trabalho

2.9 TRANSFORMAES GEOMTRICAS

Existem trs transformaes bsicas, muito utilizadas no processamento de
imagens, so elas: rotao, translao e escalonamento (Figura 2.17). Estas
transformaes diferem das outras possveis por preservarem o ngulo entre retas.
31

| |
T
z y x
t t t T 1 =
| |
T
z y x o transladad
t Z t Y t X P + + + =
As duas primeiras ainda preservam outras propriedades como: distncia entre
pontos, esquinas, reas e volumes.

Fonte: [33].
Figura 2.17 - Transformaes geomtricas

A translao a simples movimentao da imagem de um ponto no espao a
outro [33]:
2.20
2.21

Onde:
t
x
, t
y
e t
z
- correspondem a distncia de translao no eixo X, Y e Z
respectivamente
T - indica um vetor transposto

Para facilitar composio de transformaes a translao pode ser
representada na forma de matriz homognea:

2.22


J a rotao representada na forma de uma matriz cujos valores de
transformao so baseados no seno e cosseno do ngulo () que se deseja
rotacionar a imagem naquele eixo, enquanto os demais conservam os valores atuais
[33].
As matrizes de rotao correspondentes aos eixos do sistema cartesiano
utilizado neste trabalho (Figura 2.16) so apresentadas abaixo (equaes 2.23, 2.24
(
(
(
(

=
1 0 0 0
1 0 0
0 1 0
0 0 0
z
y
x
t
t
t
T
32

(
(
(
(


=
1 0 0 0
0 1 0 0
0 0 cos
0 0 cos
o o
o o
sen
sen
R
z
(
(
(
(

=
1 0 0 0
0 cos 0
0 0 1 0
0 0 cos
o o
o o
sen
sen
R
y
(
(
(
(

=
1 0 0 0
0 cos 0
0 cos 0
0 0 0 1
o o
o o
sen
sen
R
x
e 2.25).

2.23



2.24



2.25


Fora convencionado o sentido de rotao anti-horrio, seguindo a regra da
mo direita (Figura 2.18), em que alinhado o polegar direito ao eixo de rotao e
apontado para sentido positivo deste, assim o sentido de rotao ser o mesmo que
o eixo normal palma da mo [34].

Fonte: [35].
Figura 2.18 - Regra da mo direita, exemplo para rotao no eixo X.

Estas transformaes so aplicadas em uma imagem multiplicando cada um
dos pontos pelas mesmas. Desta forma, se mais do que uma matriz de
transformao for utilizada, o processo se tornar bastante dispendicioso do ponto
de vista do processamento como citado anteriormente. Para sanar o problema,
pode-se unir previamente cada uma das transformaes a uma nica matriz de
homognea capaz de realizar todos os passos em um s. Faz-se isso multiplicando
estas na ordem em que aparecem, j que a multiplicao entre matrizes
33

assimtricas no possuem comutatividade, ou seja, a ordem dos fatores altera o
produto final.
Assim, ao invs de fazer uma varredura pelos pontos da imagem para cada
transformao, faz-se uma nica para um conjunto de transformaes [33].
Logo, a composio de uma rotao e uma translao tem dois resultados
possveis:


2.26



2.27


Vale ressaltar ainda, que as rotaes em um eixo especfico somente iro
alterar as coordenadas dos pontos nos demais eixos, exceto no caso em que o vetor
rotacionado esteja alinhado com este, logo suas coordenadas permanecero
inalteradas. Por exemplo, para a rotao de um cubo, se uma das arestas estiver
alinhada ao eixo Y esta independente da rotao neste eixo, possuir as mesmas
coordenadas para todos os pontos que envolvem, mas o mesmo no pode ser dito
para as demais arestas do cubo como na Figura 2.19.

Fonte: o autor.
Figura 2.19 - (a) Cubo original. (b) Cubo com rotao de 35 graus em Y (aresta em amarelo
permanece inalterada).

(
(
(
(

=
1 0 0 0
cos 0
0 1 0
0 cos
.
z
y
x
y
t sen
t
t sen
R T
o o
o o
(
(
(
(


+
=
1 0 0 0
. cos . cos 0
0 1 0
. cos . 0 cos
.
o o o o
o o o o
sen t t sen
t
sen t t sen
T R
x z
y
z x
y
34

2.10 CMERA ESTENOPEICA

O modelo de cmera estonepeica ou como comumente conhecida, cmera
pinhole, consiste num aparato de abertura muito pequena para a entrada de luz [24],
fazendo cada um dos feixes provenientes do ambiente visualizado convergirem para
um nico ponto cada um deles no plano focal da cmera. Em circunstncias
contrrias, aonde a abertura do aparato fosse maior, diversos feixes de luz
provenientes de pontos diferentes da imagem seriam projetados sobre o mesmo
ponto da matriz de sensores da cmera, o que causaria a sobreposio de cores e
consequentemente uma imagem borrada.
Devido pequena abertura para a entrada de luz, se faz necessria a
utilizao de uma lente parablica a frente desta abertura para aumentar o campo
de viso [26]. Uma lente ideal capaz de convergir todos os feixes de luz para um
nico ponto na abertura da cmera.


Fonte: [27], traduzida pelo autor.
Figura 2.20 - Projeo dos pontos do mundo real em uma cmera pinhole. Em azul plano focal. Em
cinza plano da cmera.
Pode-se na ver na Figura 2.20 que ao passarem pelo ponto de abertura da
cmera estes so projetados de forma inversa imagem capturada, isso se d
devido a disposio dos elementos.

2.10.1 Distoro Das Lentes
As lentes independentemente da qualidade do processo de fabricao e
montagem das cmeras, no so perfeitas, e sendo assim possuem um formato que
se aproximam ligeiramente de uma esfera [28], ao invs de uma perfeita parbola.
Isto causa um efeito de distoro na imagem projetada [29], e quanto mais distante o
35

ponto projetado estiver do centro da cmera, mais distorcido este ser. Assim, uma
linha reta registrada pela cmera prxima ao centro ptico pode ser fielmente
reproduzida na imagem, porm quanto mais distante do centro da mesma, mais
curva esta linha se tornar [29] conforme visto na Figura 2.21. Este efeito
conhecido como distoro radial.


Fonte: [28], traduzida pelo autor. Fonte: [29].
Figura 2.21 Distoro radial. (a) Visvel deformao das linhas retas de um objeto quadrado. (b)
Demonstrao do aumento do efeito conforme nos distanciamos do ponto principal da cmera (X
p
e
Y
p
) em X
d
e Y
d
que deveriam ser projetados em X e Y respectivamente.

Outro elemento de distoro muito comum a distoro tangencial [28] que
ocorre devido ao erro de alinhamento das lentes em relao ao plano de imagem
(Figura 2.22).


Fonte: [28], traduzida pelo autor
Figura 2.22 - Ocorrncia da distoro tangencial. Matriz de sensores no devidamente alinhada com
as lentes da cmera

Apesar de existirem outros elementos capazes de distorcer a imagem
capturada por uma cmera, as distores radial e tangencial, so as que
apresentam um maior efeito sobre o resultado final [28], alm de serem facilmente
36

= (

)
2
+(

)
2


corrigidos se conhecidos os coeficientes que regem essa distoro.
Sendo r (equao 4), a distncia a partir do ponto central da cmera at o
ponto desejado que se est mensurando:

2.28
Onde:
x pixels horizontais
y pixels verticais
x
p
ponto horizontal do centro da cmera
y
p
ponto vertical do centro da cmera

A distoro radial pode ser corrigida pelas equaes2.29 e 2.30 abaixo [28]:
2.29
2.30

Enquanto a distoro tangencial corrigida pelas equaes 2.31 e 2.32 [28]:

2.31
2.32
Pode-se ainda mesclar as equaes de ambos os efeitos a fim de obter uma s
frmula para correo dos efeitos de distoro das lentes, equao 2.33 para x e
equao 2.34 para y:

2.33
2.34

2.11 NUVEM DE PONTOS

A nuvem de pontos a representao dos pixels existentes em uma imagem
plana em outra imagem tridimensional com valores de posicionamento condizentes
com o observado, assim tem-se uma reconstruo do ambiente visualizado pela
cmera.
) 1 (
6
3
4
2
2
1
r k r k r k y y
corrigido
+ + + =
) 1 (
6
3
4
2
2
1
r k r k r k x x
corrigido
+ + + =
)] 2 ( 2 [
2 2
2 1
x r p y p x x
corrigido
+ + + =
] 2 ) 2 ( [
2
2 2
1
x p y r p y y
corrigido
+ + + =
) 2 ( 2 ) 1 (
2 2
2 1
6
3
4
2
2
1
x r p xy p r k r k r k x x
corrigido
+ + + + + + =
xy p y r p r k r k r k y y
corrigido 2
2 2
1
6
3
4
2
2
1
2 ) 2 ( ) 1 ( + + + + + + =
37


Fonte: [30].
Figura 2.23 - (a) Nuvem de Pontos. (b) Imagem original.

Na Figura 2.23a possvel ver esta nuvem de pontos, que pode ser obtida de
diversas formas, seja com a obteno de uma sequncia de imagens por pontos de
vista diferentes, a utilizao de mais de uma cmera [31], ou cmeras com
elementos sensores capazes determinar a profundidade de um determinado ponto
no espao [32], como o caso do sensor Kinect

utilizado neste trabalho.


Entretanto, para se obter esta nuvem de pontos necessrio que se conhea
aspectos relativos a cmera como a distncia focal, ponto central da imagem,
coeficientes de distoro e a distncia/rotao dos planos de imagem entre cada
uma delas.

Fonte: [29], traduzida pelo autor.
Figura 2.24 - Alinhamento de dois planos de imagem

Considerando-se cmeras perfeitas, ou seja, sem efeitos de distoro, pode-se
ento alinhar ambas as imagens para obter uma nica imagem tridimensional com
maior quantidade de dados, j que estes foram obtidos sobre ngulos e pontos
diferentes. A Figura 2.24 demonstra este alinhamento que passa primeiramente por
uma translao para coincidir os centros de imagem de ambos os planos e
38

posteriormente este plano transladado tambm rotacionado para que enfim esteja
condizente com o sistema de coordenadas da outra.

2.12 HOMOGRAFIA

A homografia uma transformao que mapeia pontos de um plano para outro,
representada tambm em forma de matriz, pode ser uma transformao projetiva de
um plano 3D para outro em 2D [36], ou at mesmo 2D para outro da mesma
quantidade de dimenses [37].

2.35


Vale ressaltar ainda que o h
33
ser sempre igual 1, o que d a matriz de
homografia 8 graus de liberdade [42].
A homografia que mapeia os pontos (X) de duas cmeras e definida por:


2.36
Onde:
X
1
pontos da cmera 1
X
2
pontos da cmera 2
X
1
, X
2
R
Entretanto para mapear os pontos de um objeto no espao tridimensional
para o plano da imagem projetada por uma cmera definido por [36]:

2.37
2.38
2.39
Onde:

1
,
2
fatores de escala
(
(
(

=
33 23 13
32 22 12
31 21 11
h h h
h h h
h h h
H
1 2
HX X =
1 1 1
X x =
2 2 2
X x =
1 1 2 2
x H x =
39

1
,
2
pontos no plano de imagem

Assumindo um fator de escala igual a 1 para ambos os casos, pode-se
deduzir a seguinte frmula:
2.40
Atravs da equao 15, tm-se a matriz H como a matriz capaz de
transformar os pontos reais do ambiente fotografado por uma cmera nos pontos do
plano de imagem desta, os pixels.
O caminho inverso [36], capaz de mapear os pontos reais a partir de uma
imagem qualquer possvel atravs da inversa da matriz homogrfica:

2.41

2.13 PARMETROS INTRNSECOS E EXTRNSECOS

Diz-se que h uma cmera calibrada, quando descobertos os coeficientes de
foco [28][42], ponto central e distoro da mesma.
Estes dados podem ser obtidos atravs da correta manipulao da matriz
homogrfica que alinhe os pixels da cmera ao sistema de coordenadas desejado.
Para tanto, diversas tcnicas foram desenvolvidas, e uma das mais utilizadas
envolve a utilizao de uma superfcie plana com um quadriculado estampado sobre
ela, similar a um tabuleiro de xadrez, como o exemplo a seguir:

Fonte: o autor
Figura 2.25 - Exemplo de figura utilizada em calibrao

Independente da posio que o plano de calibrao (Figura 2.25) que se
encontre em relao cmera, as suas formas so facilmente detectveis e a sua
simetria permite calcular com a mesma facilidade a relao entre os pontos reais de
um objeto (se previamente conhecidos) e a imagem gerada pela cmera.
1 2
HX x =
2
1
1
x H X

=
40

A matriz homogrfica pode ser divida em duas matrizes separadas de
transformao [42]:
2.42
Onde:
A matriz de afinidade
R matriz 3x3 de rotao
t vetor de translao
s fator de escala

A matriz de afinidade (equao 2.43) contm os parmetros intrnsecos
necessrios para calibrar a cmera.

2.43

Onde:
f
x
distncia focal horizontal (x)
f
y
distncia focal vertical (y)
skewness
u
p
ponto principal horizontal (x)
v
p
ponto principal vertical (y)
Enquanto a matriz de posicionamento, formada pelos parmetros de rotao e
translao a princpio uma matriz 4x4 (equao 2.44), que pode ser resumida em
uma matriz 3x3 (equao
2.45) eliminando-se a rotao em torno do eixo de profundidade (por
conveno eixo Z) e assim admitindo-se que o plano de calibrao corresponde ao
plano normal este eixo, ou seja, o plano formado pelos eixos horizontal (X) e
vertical (Y):

2.44



2.45
| |
1 2
X t R A sx =
(
(
(

=
1 0 0
0
p y
p x
v f
u f
A

| |
(
(
(
(

=
(
(
(

1
0
1
3 2 1
Y
X
t r r r A y
x
s
| |
(
(
(

=
(
(
(

1 1
2 1
Y
X
t r r A y
x
s
41

| | t r r A H
2 1 1
=
| | | | t r r A h h h
2 1 1 3 2 1
=
1
1
1
1 1 1 1
1
h A r Ar h
ou
= =

2
1
1
2 2 1 2
1
h A r Ar h
ou
= =

3
1
1
1 3
1
h A t At h
ou
= =

0
2 1
= r r
T
2 2 1 1 2 1
r r r r r r
T T ou
= =
T T T
a b ab . ) ( =
( ) ( ) 0 .
2
1
1
1
=

h M h M
T
A M para
1
1
:

=
0
1
.
1
2
1
1
1
1
1
=
(
(

|
|
.
|

\
|
|
|
.
|

\
|

h A h A
T


Se comparada a equao 2.42 equao 2.39, observa-se que s o mesmo
que a unio dos fatores de escala
1
e
2
(equao 2.46):
2.46

Logo, por semelhana [42] pode-se afirmar que a matriz homogrfica equivale
a ao conjunto de transformao formado pelas matrizes de afinidade, rotao e o
vetor de translao:
2.47
2.48

Da equao 2.48 derivam as equaes a seguir [28]:
2.49

2.50

2.51

Os eixos estabelecidos so ortogonais, portanto as rotaes especificadas
por r
1
e r
2
devem obrigatoriamente ser ortonormais [42]. Desta forma, o produto
escalar entre os dois vetores de rotao igual zero (equao 2.52). Bem como a
intensidade dos vetores deve ser a mesma (equao 2.53).
2.52
2.53
Se:
2.54
Sendo a e b dois vetores quaisquer, ento substituindo os vetores r
1
e r
2
pelas
equaes 2.49 e 2.50 respectivamente, obtm-se segundo a equao 2.52 que:
2.55


2.56
1 2
1
2
Hx x =

42

0
2
1
1
=

h M M h
T T
(
(
(

= =

33 23 13
32 22 12
31 21 11
1
B B B
B B B
B B B
M M B
T
(
(
(
(
(
(
(
(

+ +

=
1
) ( ) (
) (
1
1
2
2
2 2
2
2 2 2 2
2 2 2 2 2 2 2
2 2 2
y
p
y x
y p p
y
p
y x
y p p
y x
y p p
y
p
y x
y p p
y y x y x
y x
y p p
y x x
f
v
f f
f u u
f
v
f f
f u u
f f
f u u
f
v
f f
f u u
f f f f f
f f
f u u
f f f
B


(
(
(

= =

33 23 13
23 22 12
13 12 11
1
B B B
B B B
B B B
M M B
T
( ) ( ) ( ) ( )
2
1
2
1
1
1
1
1
. . h M h M h M h M
T T

= A M para
1
1
:

=
(
(

|
|
.
|

\
|
|
|
.
|

\
|
=
(
(

|
|
.
|

\
|
|
|
.
|

\
|

2
1
1
2
1
1
1
1
1
1
1
1
1
.
1 1
.
1
h A h A h A h A
T T

2
1
2 1
1
1
h M M h h M M h
T T T T
=
0
2
1
2 1
1
1
=

h M M h h M M h
T T T T

2.57

E segundo a equao 2.53 que representa outra propriedade de vetores
ortonormais [42]:
2.58


2.59

2.60
Ou ainda:
2.61

Zhang apresentou uma soluo [42] para o conjunto M
-T
M
-1
:

2.62




2.63



Analisando a matriz B (equao 2.63), fcil observar que se trata de uma
matriz simtrica, ou seja: B
21
= B
12
; B
31
= B
13
; e B
32
= B
23
. Logo a matriz da equao
2.64 pode ser resumida pelo vetor b (equao 2.65) atravs da fatorizao de
Cholesky:

2.64
43

(
(
(
(
(
(
(
(

=
33
23
13
22
12
11
B
B
B
B
B
B
b
i
T
j j
T
i
Bh h Bh h =
b v Bh h Bh h
T
ij i
T
j j
T
i
= =
T
T
j i
j i j i
j i j i
j i
j i j i
j i
T
ij
B
B
B
B
B
B
h h
h h h h
h h h h
h h
h h h h
h h
b v
(
(
(
(
(
(
(
(

(
(
(
(
(
(
(
(

+
+
+
=
33
23
13
22
12
11
3 3
3 2 2 3
3 1 1 3
2 2
1 2 2 1
1 1
( )
0 = =
(
(

Vb b
v v
v
T
jj ii
T
ij



2.65



Logo, a equao 2.53 passa a ser:
2.66

Onde e i e j so colunas da matriz homogrfica.
Devido a simetria de B, a equao pode ser rearranjada de forma a unir os
vetores h
i
T
e h
j
e substituir a matriz simtrica B pelo vetor de 6 dimenses b da
equao 2.65. Assim, a equao 2.66 simplificada na equao abaixo:

2.67





2.68



Onde:
v
ij
T
equivale a h
i
T
.h
j


Assim utilizando as equaes 2.57 e 2.61, chega-se finalmente ao vetor V.

2.69

44

2
12 22 11
23 11 13 12
B B B
B B B B
v
p

=
( )
11
23 11 13 12
2
13
33
B
B B B B v B
B
p
+
=
11
B
f
x

=
2
12 22 11
11
B B B
B
f
y

y x
f f B
2
12
=

2
13 x
y
p
p
f B
f
v
u =
Onde:
V matriz 2n
x
6 em que n indica a quantidade de homografias utilizadas para
solucionar a funo.

Assim, para se encontrar os parmetros intrnsecos da cmera que
correspondem a matriz simtrica B, basta encontrar os coeficientes que solucionam
o vetor b. Entretanto, para encontrar todos os 6 coeficientes, se faz necessria a
incluso de mais duas homografias na matriz V.
Com apenas duas imagens (ou seja, duas homografias) e assumindo o
skewness como sendo igual a zero, pode-se adicionar o vetor [0, 1, 0, 0, 0, 0]
matriz V possibilitando assim encontrar a soluo para b. Mas, uma soluo eficiente
s ser encontrada se uma grande quantidade homografias for utilizada,
minimizando os erros j que a soluo encontrada atravs de um algoritmo de
aproximao do resultado, denominado SVD (Single Value Decomposition
Decomposio de Valor Singular), que ir associar os auto-vetores de V
T
V ao menor
auto-valor destes [28].
Isolando ento os valores da matriz B tm-se as equaes a seguir:
2.70

2.71


2.72

2.73

2.74

2.75

Onde:
corresponde ao fator de escala
45

2 1 3
r r r =

Aps a obteno da matriz de afinidade, pode-se utilizar as equaes
anteriores para obtermos os vetores r
1
, r
2
e t, enquanto r
3
definido como sendo o
vetor ortogonal a r1 e r2 [42]:
2.76
Seja qual for o objeto de calibrao utilizado, deve-se considerar uma
quantidade mnima de pontos comuns entre cada imagem durante o processo.

2.14 ALINHAMENTO DE IMAGENS ESTEREOSCPICAS TRIDIMENSIONAIS

Uma vez apresentadas as transformaes geomtricas no Captulo 2.9
possvel alinhar duas nuvens de pontos obtidas sobre pontos de vistas diferentes.
Conhecendo pontos em comum entre ambas as nuvens (Figura 2.26), deve-
se primeiramente decidir qual ser o ponto de origem do sistema. O mais comum
adotar o prprio ponto de origem destas, e obter o vetor de translao de um ponto
interessante em comum entre estas at a origem.

Fonte: o autor.
Figura 2.26 - Exemplo de pontos em comum entre duas nuvens de pontos sobre ngulos diferentes
de viso

Um dos mtodos mais rpidos de fazer o clculo, tendo um ponto em comum
destas nuvens de pontos j na origem do sistema de coordenadas escolhido,
calcular o ngulo de rotao entre outros pontos em comum a partir da origem.
Em outras palavras, cada ponto interessante de cada uma das imagens
servir de base para um vetor [44] com incio na origem. Assim, ao invs de termos
pontos em comum, temos agora vetores em comum.
46

v u
v u.
cos = u

Fonte: o autor.
Figura 2.27 Vetores em comum formados tomando-se o os pontos em amarelo como origem, em
seguida os verdes e por fim em magenta.

As rotaes como j citadas anteriormente so facilmente obtidas desde que
realizadas em um plano de cada vez, ou seja, mais fcil rotacionar um vetor de
duas dimenses do que um vetor de trs [34].
Para aproveitar esta praticidade, faz-se a rotao dos vetores em um eixo por
vez, assim ao invs de considerarmos o vetor tridimensional para o clculo do
ngulo em determinado plano, podemos considerar apenas a projeo destes sobre
este plano [34] e posteriormente aplicar a rotao ao vetor tridimensional (Figura
2.28).

Fonte: o autor.
Figura 2.28 - Projeo de um vetor tridimensional

Na Figura 2.28 o vetor u a projeo do vetor u no plano Y
1
. Neste caso, o
vetor de projeo possui intensidade nula no eixo Y j que est sobre o prprio plano
deste, mas mantm os valores dos demais eixos.
O ngulo entre dois vetores bidimensionais determinado pelo arco cosseno
do: produto escalar entre os dois vetores dividido pelo produto da magnitude [44] de
cada um destes (equao 2.78):

2.77

1
Plano perpendicular ao eixo Y, nada mais do que o plano formado pelos eixos X e Z.
47

|
|
.
|

\
|
=

v u
v u.
cos
1
u
2.78
Onde:
u e v vetores bidimensionais
ngulo ()
Para se alinhar dois conjuntos de pontos bidimensionais, basta apenas um
vetor em comum de cada, enquanto para alinhar dois conjuntos de pontos
tridimensionais so necessrios dois pares de vetores, e assim por diante.
Neste caso, com apenas dois vetores pode-se alinhar as nuvens de pontos,
aonde apenas trs pontos so necessrios para obter esses dois vetores, em que o
primeiro, movido para a origem servir de base para os demais.
Entretanto, por se tratar de um alinhamento tridimensional a partir de rotaes
bidimensionais (com o intuito de simplificar o desenvolvimento), se faz necessrio
que um dos vetores do par de nuvens base
2
do alinhamento esteja alinhado a um
dos eixos do sistema de coordenadas [34]. Isso ocorre porque ao rotacionar um dos
vetores, os outros so movidos juntamente com este caso no estejam alinhados ao
mesmo eixo da rotao como j fora demonstrado no captulo 2.9 e evidenciado na
figura Figura 2.19b do mesmo.

Fonte: o autor.
Figura 2.29 - Procedimento para alinhar o vetor u ao eixo Y. (a) original. (b) transladado. (c) e (d)
rotao no eixo X. (e) e (f) rotao no eixo Z.


2
Nuvem de pontos da cmera que permanecer esttica, enquanto a outra que deve ser movida e
rotacionada para se alinhar a ela.
48

Para alinhar um vetor a um eixo do sistema (Figura 2.29), so necessrias
duas rotaes nos demais eixos do sistema tridimensional. Assim, se o objetivo
alinhar um vetor ao eixo Y, deve-se fazer primeiramente a rotao necessria no
eixo X ou Z e em seguida a rotao necessria dos novos pontos no eixo
remanescente (Figura 2.30).

Fonte: o autor.
Figura 2.30 - Resultado da primeira nuvem de pontos ao final do alinhamento
A segunda nuvem de pontos segue o mesmo procedimento com o vetor em
comum quele alinhado a um dos eixos do sistema (Figura 2.31).
/

Fonte: o autor.
Figura 2.31 - Procedimento de alinhamento do eixo ao eixo Y da segunda nuvem de pontos. (a)
original. (b) transladado. (c) e (d) rotao no eixo X. (e) e (f) rotao no eixo Z.

Na sequncia os pontos dessa segunda nuvem so novamente rotacionados
(Figura 2.32 e Figura 2.33), porm no eixo adotado anteriormente como base e em
funo do ngulo entre os outros dois vetores em comum formado o plano
perpendicular a este eixo.
49


Fonte: o autor.
Figura 2.32 - Nuvens de ponto comuns alinhadas ao eixo base.

Fonte: o autor.
Figura 2.33 - Rotao no eixo base (Y), para alinhar o segundo par de vetores.

Ao final, deve-se obter dois vetores alinhados ao eixo base e portanto entre si,
enquanto os outros dois estaro alinhados entre si mas no necessariamente a
outro eixo do sistema, porm o alinhamento est concludo (Figura 2.34).

Fonte: o autor.
Figura 2.34 - Nuvens de pontos alinhadas na origem do sistema.

Dependendo dos pontos tomados como referncia, a necessidade de se
rotacionar e mover a primeira nuvem de pontos faz com que os sistemas apesar de
alinhados estejam fora dos pontos reais obtidos pela cmera. Deste modo,
necessrio fazer o caminho inverso dos procedimentos realizados sobre a primeira
nuvem de pontos, para ambas as nuvens, e teremos estas nuvens alinhadas e nos
pontos reais ao sistema de coordenadas utilizado.
50

Para desfazer uma transformao geomtrica [34][42], basta aplicar a inversa
da transformao original. E neste caso, necessrio retornar de duas rotaes
comeando pela ltima (Figura 2.35), depois a primeira e por fim retornar ao ponto
original da nuvem atravs da inversa da translao.

Fonte: o autor.
Figura 2.35 - Processo inverso das transformaes aplicadas na primeira nuvem de pontos.

Vale lembrar que estas transformaes podem ser mescladas em uma nica
transformao desde que sejam aplicadas na ordem em que ocorrem.
O fluxograma resumindo o procedimento encontra-se no Anexo I.

2.15 SENSOR KINECT



Kinect um dispositivo criado pela Microsoft primeiramente com o objetivo
exclusivo de servir como sensor para interagir com o console de videogame Xbox
360 (tambm de propriedade desta), substituindo os controles convencionais.
Com isto os comandos passaram a ser enviados segundo movimentos do jogador e
no mais pela combinao do pressionar de teclas.
Entretanto aps a popularizao deste hardware em outras aplicaes que
no envolvessem o console de videogame, a Microsoft desenvolveu uma biblioteca
aberta para facilitar a criao de aplicativos com uso do Kinect.

Fonte: [3].
51

Figura 2.36 - Sensor Kinect.

O conjunto possui dois receptores, sendo um deles uma cmera do padro
RGB de imagens (Figura 2.36.2) e o outro uma cmera sensvel ao infravermelho
(IR) para capturar os pontos projetados por seu terceiro componente, um emissor de
raios infravermelho. Os demais componentes do sensor representados na Figura
2.36 por 3 e 4, referem-se especificamente ao conjunto de microfones, e inclinao
mecanizada [3].
Diferentemente das cmeras utilizadas para esta funo de varredura de
profundidade de pontos no espao que utilizam os sistemas conhecidos como ToF
Time of Flight (tempo de voo em portugus), o Kinect

vale-se de outro tipo de


tecnologia para desempenhar esta funo chamada Light Coding, desenvolvida
pela empresa israelense PrimeSense [39].
A diferena bsica entre estes dois tipos de tecnologia que no primeiro a
profundidade de um objeto no espao em relao cmera determinada pelo
tempo em que o sinal infravermelho demora em ser captado pelo respectivo receptor
desde que sai do emissor infravermelho at que seja refletido por algum corpo e
ento retorne. Enquanto a segunda faz a projeo de diversos pontos
infravermelhos no objeto (Figura 2.37) para calcular a profundidade conforme a
distoro da distncia entre cada um destes, ou seja, conforme os pontos se
distanciam ou se aproximam uns dos outros, alm do seu tamanho nesta projeo,
pode-se determinar a diferena de profundidade entre eles j que os tamanhos
esperados so conhecidos e pr-determinados.

Fonte: [39].
Figura 2.37 - Imagem RGB; profundidade; e imagem obtida pelo sensor IR.

As especificaes de funcionamento do conjunto de sensores Kinect so
demonstradas na tabela 2.1.

52





Tabela 2.1 Especificaes tcnicas do sensor Kinect
CONJUNTO INFRAVERMELHO
Margem de Operao 0,8 ~ 3,5 metros
ngulo horizontal do campo de viso 57
ngulo vertical do campo de viso 43
Tamanho mximo do quadro 640x480
Preciso no Eixo Z 1 cm
Preciso nos Eixos X/Y 3 mm
Frequncia de Operao 30 Hz
CMERA RGB
Tamanho mximo do quadro 640x480
Frequncia de Operao 30 Hz
Fonte: [2][39].

Entretanto esta margem de operao pode variar muito, dependendo do
driver utilizado para acessar as informaes da cmera. Existem drivers conhecidos
que podem recuperar informaes de at 9 metros de distncia deste sensor [39],
porm o driver oficial disponibilizado pela Microsoft limita estes dados margem
de operao referenciada pela tabela, j que existe grande diminuio da
confiabilidade das informaes fora desta (Figura 2.38), assim pode-se manter uma
preciso entorno de um centmetro de profundidade.

Fonte: [39], traduzida pelo autor.
Figura 2.38 - Comparativo entre trs drivers diferentes e a linearidade da obteno dos dados de
profundidade
53


No entanto, apesar de possuir uma margem de operao maior [39], mesmo o
driver OpenKinect no consegue manter a boa resoluo dos primeiros milmetros
de distncia aps passar dos 3500 milmetros, podendo ser observada inclusive uma
queda brusca da resoluo a partir dos 6000 milmetros (Figura 2.39).

Fonte: [39], traduzida pelo autor.
Figura 2.39 - Comparativo entre trs drivers diferentes e a preciso de obteno dos dados de
profundidade


















54

3 METODOLOGIA

O processo divide-se em quatro grandes etapas (Figura 3.1):

Fonte: o autor.
Figura 3.1 - Fluxograma principal

3.1 AQUISIO DE IMAGENS

As imagens so obtidas atravs de um software secundrio, e armazenadas
em um arquivo xmlatravs de um mtodo de serializao dos dados, apenas para
facilitar a recuperao destes a partir do software de anlise.
Ambos os dados, profundidade e cor, so obtidos na mesma resoluo para
facilitar a associao de pixels posteriormente.
A resoluo utilizada de 640x480 pixels, o limite mximo permitido pela
cmera de infravermelho, na qual tem uma capacidade de gerar vdeos a 30
quadros por segundo. Assim, ambas as cmeras podem trabalhar a mesma
frequncia e mesma resoluo.
Este aplicativo consiste em funes simples, com a possibilidade de solicitar as
imagens das cmeras, salvar, abrir e tambm alterar a inclinao do sensor atravs
deste.
O sistema pode trabalhar com at duas cmeras simultaneamente, e foi
elaborado com o intuito de ter um software leve e prtico para armazenar os dados
do sistema estereoscpico de imagens.
A profundidade salva na forma de vetor, ordenando as linhas (640 pixels) em
sequncia armazenando o tipo de dados short (varivel inteira de 16 bits), assim os
valores de profundidade podem variar de 0 a 65535. Enquanto os dados de cores
so salvos no formato de imagem padro: Bitmap.
As cmeras so instanciadas assim que iniciado o programa:

1. private void Form1_Load(object sender, EventArgs e)
2. {
3. if (KinectSensor.KinectSensors.Any()) // verifica sensores conectados
4. {
55

5. Dados1.SensorKinect = KinectSensor.KinectSensors[0]; // seleciona o
primeiro
6. if (Dados1.SensorKinect.Status == KinectStatus.Connected) // se conectado
7. Dados1.SensorKinect.Start(); // inicia driver de comunicao
8. else
9. MessageBox.Show("Impossvel iniciar kinect 1: " +
Dados1.SensorKinect.Status.ToString());

10. if (KinectSensor.KinectSensors.Count > 1) // se existir mais de um sensor
11. {
12. Dados2.SensorKinect = KinectSensor.KinectSensors[1]; // seleciona o
prximo tambm
13. if (Dados2.SensorKinect.Status == KinectStatus.Connected)
14. Dados2.SensorKinect.Start();
15. else
16. MessageBox.Show("Impossvel iniciar kinect 2 " +
Dados2.SensorKinect.Status.ToString());
17. }
18. else
19. MessageBox.Show("Apenas 1 Kinect fora encontrado!");
20. }

Caso a classe KinectSensor possua algum Kinect

j associado a ela
(reconhecido pelo driver, linha 3), ento adota-se o primeiro sensor como sendo o
referente aos Dados1 (linha 5), e caso exista mais do que 1 (linha 10) disponvel o
sensor seguinte ser associado a classe Dados2 (linha 12).
Verifica-se o status de cada um destes para evitar a quebra do sistema por
utilizao indevida (linhas 6 e 13), por exemplo enquanto o sensor no estiver
energizado com a fonte externa, se tudo estiver como o esperado inicializa, caso
contrrio retorna mensagem informando o tipo de erro encontrado (linhas 9 e 16).
O cdigo fonte das principais funes utilizadas pelo programa se encontra no
Anexo IX.
Entretanto, alguns cuidados devem ser tomados que envolvem principalmente
a iluminao do ambiente. Qualquer fonte luminosa que emita grande quantidade de
luz infravermelha pode afetar a preciso das imagens de profundidade do Kinect

j
que este interpreta os dados de um sensor infravermelho para retornar estes dados.
Os objetos que pretendem ser visualizados na imagem devem estar a uma
distncia maior que 0,8 metros e menor que 3,5 metros, que a distncia de
operao do sensor de profundidade para o driver utilizado.
Por fim os objetos que forem utilizados na calibrao devem obedecer os
limites de preciso da cmera, sendo este em torno de 3 mm nos sentidos de altura
e comprimento, e em mdia de 1 cm para a profundidade.
As imagens obtidas para estudo utilizaram elementos dispostos no ambiente de
56

forma a dar maior contraste aos pontos interessantes a este, utilizando muitas vezes
de fundo de cor nica e facilmente distinguvel um nico objeto visvel a elas, o
objeto de calibrao.

3.2 CALIBRAO

Esta etapa do processo consiste na obteno dos parmetros intrnsecos e
extrnsecos do Kinect

para possibilitar a construo da nuvem de pontos (etapa


seguinte).
Para tanto, optou-se pela calibrao semi-automtica, utilizando um objeto de
referncia e a partir de amostras de imagens e conhecimento prvio das
caractersticas deste objeto poder calcular a matriz de homografia entre o objeto real
e a imagem gerada pelo sensor.
Primeiramente fora escolhido um objeto de calibrao tridimensional: um cubo
com suas faces divididas em 9 quadrados de mesmo tamanho, porm cada face
com uma cor especfica para cada um dos quadrados, popularmente conhecido por
cubo mgico (Figura 3.2).

Fonte: o autor.
Figura 3.2 - Cubo mgico

As tentativas iniciais consistiram na utilizao de implementaes de
algoritmos de vizinhana (Captulo 2.3) e conectividade (Captulo 2.4) para tentar
determinar pontos com caractersticas facilmente distinguveis do mesmo objeto
entre duas imagens diferentes.
Entretanto, o reposicionamento do objeto de calibrao ou da cmera
resultava em duas imagens de intensidades bem distintas para os pixels desejados,
devido principalmente ao ngulo de incidncia da iluminao em cada um destes, e
assim a tentativa de se localizar pontos semelhantes entre elas mostrou-se
57

extremamente ineficiente, muitas vezes encontrando mais pares de pontos falsos do
que verdadeiros.
Nem mesmo atravs de um processo de normalizao de histograma, ou de
comparao de histograma, fora possvel determinar com eficincia a similaridade
entre as duas imagens.
Assim, optou-se pelo tratamento prvio das imagens antes de buscar por
pontos semelhantes.
A utilizao de deteco de bordas e ou regies, tambm no fora eficiente a
ponto de justificar a busca automtica por semelhanas na imagem, j que os erros
eram to grandes quanto primeira alternativa. Isso facilmente observado nas
imagens abaixo, a ocluso da maioria dos pontos do objeto de calibrao devido a
rotao entre imagens distintas, resultava em um nico plano de calibrao a face
frontal do cubo mgico visvel simultaneamente em todas. E no pudera ser
diferente, j que os mtodos de calibrao para se atingir uma eficincia
considervel necessitam de uma gama bem diversa de homografias, caso contrrio
no h justificativa para se obter mais do que 3 delas para realizar os clculos j que
o resultado ser muito semelhante.

Fonte: o autor.
Figura 3.3 - Obstruo das faces limita a calibrao um nico plano (azul) na maioria dos casos.

Mesmo utilizando-se apenas o plano frontal como referncia, as bordas e
regies encontradas neste variam de tamanho, rea e obviamente posio na
imagem, j que o objeto deve ser reposicionado a cada nova imagem. Alm do mais,
bordas e linhas, no so facilmente localizveis, uma vez que suas dimenses
variam todo o tempo, no pode-se determinar um ponto em especfico para os
clculos dentro de cada uma delas. Assim a nica opo restante fora a utilizao de
um mtodo de deteco de esquinas.
58


Fonte: o autor.
Figura 3.4 - Demonstrao da diferena de tamanho das arestas e a rea das regies de uma
imagem de calibrao inclinada.

Essa modificao exigia tambm a utilizao de outro objeto de calibrao,
visto que o mtodo no exigia mais um objeto tridimensional, e para poder destacar
facilmente os pontos desejados para os clculos evitando falsas deteces, optou-se
pelo convencional plano quadriculado semelhante a um xadrez. Porm, para
contornar o problema de ter-se uma profundidade nica em um objeto de calibrao
plano e consequentemente, no ter referncias para calibrar a cmera de
profundidade, foi necessrio utilizar um objeto que ao invs de intercalar quadrados
pretos e brancos, intercalasse quadrados pretos e transparentes com o fundo
branco. Desta maneira, os mesmos pontos de esquinas detectados na imagem
RGB, podem ser detectados na imagem de profundidade.

Fonte: o autor.
Figura 3.5 - Objeto transparente de calibrao. Imagem RGB ( esquerda) e imagem de
profundidade ( direita).
As vantagens so inmeras, j que os pontos de esquinas so facilmente
detectveis e a distino entre o preto e o branco o melhor dos casos para o
procedimento.
Conforme j apresentado no captulo 2.7.1 o algoritmo de Harris & Stephens
possui bons resultados na deteco de esquinas qualquer que seja a posio da
imagem, diferentemente por exemplo do operador de Moravec.
59

Desta forma, utilizando-se de uma implementao do algoritmo de Harris,
pode-se obter pontos precisos que pudessem ser localizados em vrias imagens
geradas sob diversas posies.
Mesmo assim, a filtragem destes pontos deveria ser operada de forma
manual j que para alguns casos as imagens resultavam em mais ou menos pontos
de esquinas, detectando pontos indesejados (fora do cubo), e em ordens nem
sempre iguais de aparecimento. Em outras palavras, se em uma das imagens o
primeiro ponto a ser detectado fosse o ponto superior esquerda do xadrez (Figura
3.6b), dependendo da disposio deste em outra imagem o primeiro ponto poderia
no ser exatamente o mesmo (Figura 3.6a), conquanto ainda assim ambos fossem
encontrados, estariam fora de ordem.

Fonte: o autor.
Figura 3.6 - Algoritmo de Harris, sem ordenamento de pontos.

Para evitar que fosse necessria a interveno humana neste procedimento,
fora utilizada uma variao especial do algoritmo de Harris desenvolvida para o
projeto OpenCV (Open Computer Vision) e traduzida para o C# atravs da biblioteca
EmguCV. Esta implementao possui a vantagem de buscar somente por uma
quantidade especfica de pontos (informados previamente) e dentro do limite interno
do xadrez, assim evita-se que sejam detectados pontos fora do objeto de calibrao
com detrimento do dinamismo da funo de calibrao que passa a ser limitada a
este objeto em especfico, sempre com a mesma quantidade de colunas e linhas
pr-determinadas, caso contrrio, a funo retornar um erro.
Por fim, apesar de o EmguCV necessitar do conhecimento prvio da
quantidade de esquinas que devem ser encontradas em cada linha e cada coluna,
este possui a vantagem de retornar estes pontos sempre na mesma ordem,
facilitando a obteno dos pares de pontos corretos./
60


Fonte: o autor.
Figura 3.7 - Deteco de esquinas da biblioteca EmguCV com ordenamento de pontos.

O processo de localizao dos pontos repetido para vrias imagens, e
calculadas as matrizes de homografia para cada uma delas.
As imagens utilizadas para a calibrao mantm a cmera fixa, e adotam o
ponto de origem do sistema de coordenadas do objeto de calibrao como sendo o
primeiro ponto detectado pelo EmguCV (ponto inferior direita interno
3
do xadrez,
interiores ao quadrado vermelho da Figura 3.8), e o plano de profundidade alinhado
com o plano do objeto de calibrao.

Fonte: o autor.
Figura 3.8 - Esquinas internas do xadrez utilizado na calibrao.

Pode-se ento estimar os parmetros intrnsecos da cmera, e extrnsecos de
cada uma das imagens pelo mtodo da Soluo Fechada de Zhang demonstrado no
captulo 2.13.
Mesmo que o plano de profundidade mude no espao, indiferente para a
obteno da homografia, j que elas so obtidas separadamente, uma para cada
imagem. A diferena est no clculo dos parmetros extrnsecos da cmera que

3
Diz-se interno porque so desconsideradas a primeira e ltima linha de esquinas detectveis, bem
como a primeira e ltima coluna, que servem apenas para limitar a deteco de pontos ao xadrez e
no ao restante do ambiente.

61

tero resultados diferentes para cada um das amostragens.
1. double[,] AffineIR = CalibracaoPatternXadrez(depths, false); // ajuste semi-
automtico
2. double[,] AffineRGB = CalibracaoPatternXadrez(bmps, true); // ajuste automtico
3. double[,] RotationTranslation = CalibracaoStereo(backupPontos1, backupPontos2);
4. // homografia entre os dois tipos de imagem, e clculo dos parmetros extrnsecos
deste alinhamento

O software utiliza primeiramente as imagens de profundidade, e informado
de que o modo de operao da calibrao no automtico (parmetro false na
primeira linha), assim o usurio ser aguardado a inserir 4 pontos (limite mnimo de
obteno de homografias).
O mesmo feito com para as imagens de cores, porm acionando o modo
automatic do mtodo de calibrao, que ir detectar atravs da funo
FindChessBoard do EmguCV o objeto de calibrao e os pontos desejados. Neste
caso, o algoritmo preparado para encontrar 40 pontos distantes 40 mm uns dos
outros sendo conhecidos seus valores no sistema de coordenadas real.
O mtodo de Zhang executado a partir destas homografias e pode-se ento
dar sequncia a calibrao em busca dos valores de distoro.
Uma vez obtidas s distncias focais e o ponto central da cmera, utilizado
um algoritmo de varredura em busca dos parmetros que minimizem o erro devido a
distoro radial e tangencial.
Conhecendo os pontos reais do objeto de calibrao, a matriz de afinidade
utilizada para mapear os pontos em que deveriam estar as esquinas detectadas pelo
mtodo de Harris. A cada repetio do procedimento os coeficientes de distoro
so incrementados at que se obtenham valores que minimizem ao mximo a
distoro da imagem.
No captulo 2.10.1 ficou estabelecido que, a estimao dos trs primeiros
coeficientes de distoro radial e os dois primeiros coeficientes de distoro
tangencial, so suficientes para a obteno de resultados muito prximos do real.
Esta varredura apesar de ser um procedimento extremamente demorado, fcil de
ser implementada e necessria sua execuo uma nica vez para cada uma das
cmeras, j que os parmetros so permanentes, dependem apenas das condies
de fabricao.
Para acelerar este processo as margens de operao desta varredura foram
estabelecidas de acordo com outros trabalhos publicados a respeito.
62

A varredura fora dividida em trs etapas ajuste grosso (lao iniciado na linha 1
do algoritmo a seguir), mdio (lao iniciado na linha 8) e fino (algoritmo mais a
frente). Assim, pretende-se economizar significativamente o custo de processamento
desta etapa.

1. for (int i = 0; i < bmps.Count; i++)
2. {
3. sense = 0.1; // sensibilidade inicial a cada imagem
4. margem = 1.0; // margem de varredura inicial +- 1.0
5. EstimativaInicial = false; // estimative somente a partir da primeira
calibrao
6. pictureBox1.Image = bmps[i]; // exibe imagem a ser calibrada no momento
7. double[] temp = coeffsBest; // backup dos parmetros atuais de distoro

8. for (int j = 0; j < 3; j++) // 3 ajustes em sequncia
9. {
10. // matriz de parmetros extrnsecos para esta imagem
TransformationStereo = new Matrix3D
(
rotationANDtranslation[i][0, 0], rotationANDtranslation[i][1, 0],
rotationANDtranslation[i][2, 0], 0,
rotationANDtranslation[i][0, 1], rotationANDtranslation[i][1, 1],
rotationANDtranslation[i][2, 1], 0,
rotationANDtranslation[i][0, 2], rotationANDtranslation[i][1, 2],
rotationANDtranslation[i][2, 2], 0,
rotationANDtranslation[i][0, 3], rotationANDtranslation[i][1, 3],
rotationANDtranslation[i][2, 3], 1
);

11. temp = EstimarDistorcao(EstimativaInicial, temp, bmps[i], pontosReais1,
patternSize, A, TransformationStereo, Corners[i], sense, margem);
12. EstimativaInicial = true; // ajuste mdio e fino, partem do ponto em que
parou o ajuste anterior
13. margem = sense; // margem de varredura igual a sensibilidade antiga
14. sense = sense / 10.0; // sensibilidade mais apurada
15. }
16. iniciais.Add(temp); // salva valores obtidos para cada imagem
17. }

O ajuste grosso inicia sem estimativa inicial (linha 5), enquanto os dois
seguintes utilizam a matriz de coeficientes j calculada anteriormente para varrer por
um ajuste mais preciso dentro de uma margem de sensibilidade menor em torno
daqueles valores. Todo o procedimento executado para cada uma das imagens
carregadas e adicionados os vetores com os coeficientes a uma lista contendo os
vetores de para cada imagem (linha 16). feita na sequncia uma varredura nesta
lista (linha 1 do algoritmo a seguir), tentando aplicar os efeitos de correo de
distoro (linha 6 e 7) a cada uma das imagens, e a que possuir o menor valor de
erro ser determinada como os coeficientes a serem utilizados pelo sensor.

63

1. foreach (double[] coeffs in iniciais) // varredura em busca dos coeficientes que
//melhor se ajustem a todas as imagens
2. {
3. double erro = 0; // erro cumulativo
4. for (int i = 0; i < bmps.Count; i++)
5. {
6. TransformationStereo = new Matrix3D
(
rotationANDtranslation[i][0, 0], rotationANDtranslation[i][1, 0],
rotationANDtranslation[i][2, 0], 0,
rotationANDtranslation[i][0, 1], rotationANDtranslation[i][1, 1],
rotationANDtranslation[i][2, 1], 0,
rotationANDtranslation[i][0, 2], rotationANDtranslation[i][1, 2],
rotationANDtranslation[i][2, 2], 0,
rotationANDtranslation[i][0, 3], rotationANDtranslation[i][1, 3],
rotationANDtranslation[i][2, 3], 1
);

7. erro += Math.Pow(CalcularErroDistCoeffs(coeffs, pontosReais1, A,
TransformationStereo, Corners[i], new List<PointF>()), 2.0); // quadrado
do erro, para valorizar os pixels mais distantes
8. }
9. if (erro < menorErro)
10. {
11. bestCoeffs = coeffs;
12. menorErro = erro;
13. }
14. }

A comparao efetuada entre os vetores de coeficientes leva em considerao
o quadrado do erro (linhas 7, 9, 10, 11 e 12), j que a mdia poderia resultar em
valores muito prximos do esperado para alguns pontos da imagem e outros muito
distantes. Enquanto desta forma valorizamos grandes diferenas no erro. Quanto
maior for o erro para aquele ponto, maior ser o peso que ele ter.
O exemplo abaixo demonstra bem essa diferena. Para ambas as situaes
na Figura 3.9 o erro mdio de 6,45333... enquanto o quadrado do erro na primeira
imagem (Figura 3.9a) de 138,6188 e para a segunda imagem (Figura 3.9b) de
227,188 pixels.

Fonte: o autor.
64

Figura 3.9 - Diferena entre erro mdio e quadrado.

Todo o procedimento de calibrao realizado tanto para a cmera RGB
quanto para a cmera de profundidade do Kinect

.
O ltimo passo a obteno da rotao e translao entre as duas cmeras
do sensor Kinect

. Para isso, as mesmas imagens e o mesmo procedimento so


utilizados, porm aps remover a distoro, agora conhecida, de cada uma delas.
A maior diferena que ao invs de buscar por um ponto no espao, busca-
se agora um ponto da imagem de profundidade que coincida com a imagem do RGB
(equao 2.36). Devido aos rudos da cmera de profundidade (Figura 3.10: pontos
em branco), principalmente devido ao deslocamento e ngulo existente entre
emissor e receptor infravermelho do Kinect

, optou-se pelos pontos das


extremidades do Xadrez, mais facilmente distinguveis nesta situao.

Fonte: o autor.
Figura 3.10 - Pontos utilizados na calibrao stereo (extremidades internas do xadrez).

O fluxograma do procedimento completo apresentado no Anexo II e o cdigo
encontra-se no Anexo V com suas funes membras no Anexo VI.

3.3 NUVEM DE PONTOS

A obteno das nuvens de pontos utiliza os dados de calibrao tanto para
mapear os pontos no sistema de coordenadas tridimensional (visto pela cmera),
quanto para alinhar cada um dos Kinects

.
Primeiramente a distoro das lentes deve ser removida de ambos os
sensores.
A funo abaixo utiliza as imagens originais, o vetor com os coeficientes de
distoro (k1, k2, p1, p2, k3 nesta ordem) e a respectiva matriz de afinidade.
feita uma varredura por todos os pixels da imagem, os pixels so primeiramente
definidos como pretos (linha 18) e posteriormente caso a posio corrigida seja
65

maior que 0 (linha 30) e esteja dentro dos limites da imagem (linha 31), sobrescrito
este pixel com a cor original para o ponto (linha 33 e 34).

1. public static Bitmap RemoverDistorcao(Bitmap original, double[] CoeffsDistorcao,
double[,] MatrizAfinidade)
2. {
3. double fx = MatrizAfinidade[0, 0];
4. double fy = MatrizAfinidade[1, 1];
5. double x0 = MatrizAfinidade[0, 2];
6. double y0 = MatrizAfinidade[1, 2];

7. double k1 = CoeffsDistorcao[0];
8. double k2 = CoeffsDistorcao[1];
9. double p1 = CoeffsDistorcao[2];
10. double p2 = CoeffsDistorcao[3];
11. double k3 = CoeffsDistorcao[4];

12. Bitmap resultado = new Bitmap(original); // instancializa nova imagem
13. for (int yd = 0; yd < original.Height; yd++) // varre por todo o eixo Y
14. {
15. double y = (yd - y0)/fy, y2 = y*y; // reprojeo ao ponto real de Y

16. for (int xd = 0; xd < original.Width; xd++) // varre por todos os pixels
17. {
18. resultado.SetPixel(xd, yd, Color.Black); // estabelece este ponto da
imagem primeiramente como preto
19. // ponto real de X no espao
20. double x = (xd - x0)/fx,
x2 = x*x,
r2 = x2 + y2,
_2xy = 2*x*y;
21. // quantidade de distoro radial
22. double kr = 1 + ((k3*r2 + k2)*r2 + k1)*r2;
23. // correo de X e Y
24. double _x = fx*(x*kr + p1*_2xy + p2*(r2 + 2*x2)) + x0;
25. double _y = fy*(y*kr + p1*(r2 + 2*y2) + p2*_2xy) + y0;
26. // arredondamento, Bitmaps s aceitam indices inteiros
27. int xp = (int)Math.Floor(_x + 0.5);
28. int yp = (int)Math.Floor(_y + 0.5);

29. // se estiver dentro dos limites da imagem, estabelecer a nova cor
30. if ((xp > 0) && (yp > 0))
31. if ((xp < original.Width) && (yp < original.Height))
32. {
33. Color cor = original.GetPixel(xp, yp);
34. resultado.SetPixel(xd, yd, cor);
35. }
36. }
37. }

38. return resultado;
39. }

Em resumo, os pixels da imagem so alinhados com o sistema de
coordenadas original, calculada a correo de distoro e reprojetados cmera.
Removida a distoro de ambas as imagens feito o mapeamento dos pixels
66

de cor aos de profundidade.
As imagens so cortadas, de forma a eliminar as extremidades reduzidas
(Figura 3.11) pela distoro.

Fonte: o autor.
Figura 3.11 - Tamanho reduzido da imagem (direita) devido a remoo da distoro das lentes.

RGBD uma classe criada para armazenar simultaneamente o ponto 3D e a
cor deste.
Atravs da matriz de afinidade do sensor de profundidade (linhas 3, 4, 5 e 6 do
algoritmo a seguir), o ponto na imagem mapeado at o ponto original da cmera
(linhas 8 e 9), e retornado com a profundidade j conhecida por este sensor (linhas 7
e 10).

1. private Point3D uvToXYZ(PointF xy, double[,] CameraDepthMatrix, int[,] mapDepth)
2. {
3. double fx = CameraDepthMatrix[0, 0];
4. double fy = CameraDepthMatrix[1, 1];
5. double cx = CameraDepthMatrix[0, 2];
6. double cy = CameraDepthMatrix[1, 2];

7. double Z = Profundidade(xy, mapDepth); // macro para retornar a
profundidade de determinado ponto, faz o arredondamento do ponto
especificado, e traduz as cores da imagem de profundidade em valores
inteiros
8. double X = (xy.X - cx) * Z / fx; // X no sistema de coordenadas real
9. double Y = (xy.Y - cy) * Z / fy; // Y no sistema de coordenadas real

10. return new Point3D(X, Y, Z); // novos X e Y associados a Z, que j
representa o valor real
11. }

Aps, com o auxlio do Matlab

para realizar a manipulao entre matrizes de


forma prtica, rotacionado este ponto para alinhar ao sistema de coordenadas do
ponto de vista da cmera de cores, e finalmente reprojetado para esta. Assim
possvel obter para um determinado ponto da imagem de profundidade, a cor
correspondente na imagem em RGB (Anexo IV).
Para finalizar feita uma varredura pela lista de pontos interessantes
67

armazenados da cmera de cores, e caso este ponto mapeado corresponda a um
deles, ento salvo o ponto tridimensional em outra lista para posterior utilizao da
funo de alinhamento.
Deve-se esclarecer ainda que cmera demonstra os dados de profundidade
como partindo dela para o ambiente, ou seja, quanto mais distantes da cmera um
ponto estiver, maior ser o valor retornado. Entretanto o sistema de coordenadas
adotado utiliza o eixo Z como saindo do plano de imagem e indo em direo a
cmera. Assim, para que os sistemas adotados neste trabalho e o sistema utilizado
pela cmera estejam corretos, os valores de profundidade devem ser antes de mais
nada invertidos.
O cdigo do procedimento encontra-se no Anexo III.

3.4 ALINHAMENTO TRIDIMENSIONAL

criada uma terceira nuvem de pontos, que ir conter os pontos da primeira
nuvem como so realmente, e os pontos da segunda nuvem aps seu alinhamento
com a primeira.

List<RGBD> PontoNoEspaco3 = macroAlinhar(listaDePontosRGBD1, listaDePontosRGBD2,
PontoNoEspaco2);
// estabelece os pontos da nuvem de PontoNoEspaco2 alinhados, a PontoNoEspaco3
PontoNoEspaco3.AddRange(PontoNoEspaco1);
// adiciona os pontos da primeira nuvem a PontoNoEspaco3, j que estes esto nas
coordenadas corretas (assumidas como origem do sistema)


A funo macroAlinhar retorna os pontos da segunda nuvem de pontos j
devidamente alinhados.

1. private List<RGBD> macroAlinhar(List<Point3D> p1orig, List<Point3D> p2orig,
List<RGBD> prorig)
2. {
3. // Backup das nuvens antigas
4. List<Point3D> p1 = new List<Point3D>(); p1.AddRange(p1orig);
5. List<Point3D> p2 = new List<Point3D>(); p2.AddRange(p2orig);
6. List<RGBD> pr = new List<RGBD>(); pr.AddRange(prorig);
7. // Faz o alinhamento em 5 passos, Z, X nuvem 1 com eixo base. Aps Z e X
da segunda nuvem com o mesmo eixo base, e por fim alinha em relao a Y o
Segundo vetor das nuvens
8. Matrix3D alinhamento = Varredura3dAlinhamento(p1, p2);
9. List<Point3D> prs = new List<Point3D>();
10. foreach (RGBD rgbd in pr)
11. {
prs.Add(rgbd.Ponto);
12. }
68

13. // aplica o alinhamento a todos os pontos da nuvem de pontos desejada,
multiplicando cada ponto pela matriz do alinhamento
14. for (int i = 0; i < prs.Count; i++)
15. {
pr[i].Ponto = Point3D.Multiply(prs[i], alinhamento);
16. }

17. return pr;
18. }

Como a classe RGBD j possui os dados de cor para cada um dos pontos da
lista, so apenas transformados os pontos tridimensionais desta (linha 15).
Os pontos tridimensionas em comum salvos na etapa da aquisio da nuvem de
pontos anterior so ento utilizados para criar a projeo dos vetores citados no
captulo 2.14.

1. private double AlinharVetores(Point3D pontoCam1, Point3D pontoCam2, Eixo eixo)
2. {
3. Object retorno = null;

4. double[] p1Plano = null;
5. double[] p2Plano = null;

6. // Monta os vetores bidimensionais de acordo com o eixo de alinhamento
desejado
7. if (eixo == Eixo.X)
8. {
p1Plano = new double[3] { -pontoCam1.Z, pontoCam1.Y, 0 }; // Y -> -Z, Z ->
Y
p2Plano = new double[3] { -pontoCam2.Z, pontoCam2.Y, 0 }; // Y -> -Z, Z ->
Y
9. }
10. else if (eixo == Eixo.Y)
11. {
p1Plano = new double[3] { pontoCam1.Z, pontoCam1.X, 0 }; // Z -> X, X -> Y
p2Plano = new double[3] { pontoCam2.Z, pontoCam2.X, 0 }; // Z -> X, X -> Y
12. }
13. else if (eixo == Eixo.Z)
14. {
p1Plano = new double[3] { pontoCam1.X, pontoCam1.Y, 0 }; // X -> X, Y -> Y
p2Plano = new double[3] { pontoCam2.X, pontoCam2.Y, 0 }; // X -> X, Y -> Y
15. }
16. else
return 0;

O algoritmo acima a projeo dos vetores sobre o plano perpendicular ao
eixo de rotao para poder calcular o ngulo de rotao bidimensional neste eixo
formado pelos mesmos. Neste trabalho, o eixo base das nuvens de pontos adotado
o eixo Y, somente por uma questo de comodidade j que as cmeras
normalmente so posicionadas na mesma altura, e portanto o maior sentido de
69

rotao esperado sobre este plano.
A segunda parte do alinhamento dos vetores consiste em repassar estes dados
ao Matlab

, e utilizar suas funes: dot de multiplicao escalar de vetores; norm de


normalizao de vetores (linha 3 - magnitude destes); e a funo cross (linha 4 -
multiplicao vetorial). Esta ltima funo tem o intuito de determinar o sentido de
rotao, j que o clculo apresentado sempre retornar o menor ngulo formado
entre dois vetores. Assim se o ngulo for maior que 180 graus no sentido adotado
pelo nosso sistema, a funo ir retornar a subtrao de um circulo completo (360
graus) por este ngulo. Assim, o sinal resultante da multiplicao vetorial (linha 5) ir
determinar o sentido correto j que as matrizes de rotao utilizadas possuem
tambm um sentido pr-determinado (anti-horrio).
1. matlab.PutWorkspaceData("l1", "base", p1Plano); // envia os vetores ao matlab
2. matlab.PutWorkspaceData("l2", "base", p2Plano);
3. matlab.Execute("ang = acosd(dot(l1,l2)/(norm(l1)*norm(l2)))"); // calcula o menor
ngulo entre eles
4. matlab.Execute("pVetorial = cross(l2,l1)"); // multiplicao vetorial
5. matlab.Execute("ang = (abs(pVetorial(3))/pVetorial(3)) * ang"); // determina o
sentido da rotao, se positivo ou negativo

6. retorno = null;
7. matlab.GetWorkspaceData("ang", "base", out retorno); // devolve o valor ao
sistema

8. double ang = (double)retorno;

9. return ang;

As imagens so exibidas com o uso da funo scatter3 do Matlab

, que plota
pontos no espao cada qual com sua cor e tamanho determinados. Deste modo
fcil visualizar a localizao de cada pixel no espao.
As cores so dividas em trs vetores, contendo o vermelho, o verde e o azul
(linhas 12, 13 e 14) do RGB e novamente mescladas no Matlab

(linha 23).
Devido as diferenas entre o sistema de coordenadas adotado por este
software, o eixo Y e Z (linhas 17 e 18) devem ser trocados.
1. X = new List<double>();
2. Y = new List<double>();
3. Z = new List<double>();
4. Cr = new List<double>();
5. Cg = new List<double>();
6. Cb = new List<double>();
7. foreach (RGBD p in PontoNoEspaco3)
8. {
9. X.Add(p.Ponto.X); // separa os pontos em listas com os valores de cada eixo para
cada ponto
10. Y.Add(p.Ponto.Y);
11. Z.Add(p.Ponto.Z);
70

12. Cr.Add(p.Cor.R);//divide as cores em 3 componentes para permitir o envio ao
matlab
13. Cg.Add(p.Cor.G);
14. Cb.Add(p.Cor.B);
15. }

16. matlab.PutWorkspaceData("X3", "base", X.ToArray()); // envia todos as listas ao
matlab
17. matlab.PutWorkspaceData("Z3", "base", Y.ToArray());
18. matlab.PutWorkspaceData("Y3", "base", Z.ToArray());
19. matlab.PutWorkspaceData("Cr", "base", Cr.ToArray());
20. matlab.PutWorkspaceData("Cg", "base", Cg.ToArray());
21. matlab.PutWorkspaceData("Cb", "base", Cb.ToArray());
22. matlab.Execute("S3(1:length(X3),1) = 2;"); // cria um vetor definindo o tamanho
de cada ponto no espao
23. matlab.Execute("C3 = [Cr(:)/255 Cg(:)/255 Cb(:)/255];"); // une os valores de cor
24. matlab.Execute("figure"); // inicia nova janela de imagem
25. matlab.Execute("scatter3(X3,Y3,Z3,S3,C3,'filled')"); // plota a nuvem de pontos

Entretanto, a utilizao deste sistema para a visualizao dos dados
demasiadamente lenta e pouca dinmica quando se pretende analisar os dados
sobre outros pontos de vista. Assim, fora adicionado tambm um mtodo de
representao destes dados com auxlio do sistema de OpenGL implementado em
C# pela biblioteca SharpGL de licena aberta. No Anexo XI so exibidas as rotinas
utilizadas para manipular as nuvens de pontos atravs desta biblioteca.
Para facilitar a visualizao dos resultados, as cmeras foram posicionadas
sempre com foco em um objeto centralizado para ambas, estando estas em um
ngulo de aproximadamente 90 a partir do objeto.
O Anexo VII apresenta o algoritmo desta etapa na ntegra.

















71

4 RESULTADOS E DISCUSSO

Durante todos os testes fora utilizado um netbook Acer

Aspire One, contendo


um processador de 1,3 GHz Intel Celeron, 4 GB de memria RAM. Configurao
considerada extremamente lenta para os objetivos propostos, mas pode-se
comparar os tempos de processamento de cada etapa j que as configuraes
utilizadas so mantidas.

4.1 CALIBRAO

Com o intuito de verificar a eficincia do mtodo de calibrao intrnseca de
Zhang, e analisar a influncia da quantidade de imagens utilizadas e a variabilidade
na disposio do objeto de calibrao nestas, foram feitos testes com 30, 25, 20, 15,
10, 6 e 3 imagens (Figura 4.1). Sendo esta ltima o mnimo necessrio para
conseguir solucionar todos os parmetros intrnsecos da cmera.

Fonte: o autor.
Figura 4.1 - Imagens de cor utilizadas na calibrao.

Vale ressaltar ainda que todos os testes efetuados foram realizados tanto para
as cmeras de profundidade (infravermelho) quanto para as cmeras de cores
(RGB).
72


Fonte: o autor.
Figura 4.2 - Imagens de profundidade utilizadas na calibrao.

Os pontos das imagens de profundidade em branco (Figura 4.2) representam
pontos indefinidos de profundidade para o sensor, que foram previamente
eliminadas para facilitar a localizao dos verdadeiros pontos interessantes
calibrao.
A necessidade de interveno humana na calibrao intrnseca e stereo das
cmeras de profundidade faz com que os dados alm de no serem contnuos,
muitas vezes se tornem difceis de serem localizados pelo usurio, o que
obviamente interfere nos resultados finais, a ponto de muitas vezes reduzir a
eficincia da calibrao com uma quantidade maior de imagens, exatamente o
inverso do observado para as cmeras de cores com deteco automtica do objeto
de calibrao. Fica portanto, evidenciado o fato de que o sistema de determinao
de profundidade utilizado pelo conjunto de sensores Kinect

gera grande quantidade


de rudos devido a falta de preciso e sombras pela disposio dos elementos de
sensoriamento.
O primeiro pode ser observado na grande maioria das imagens obtidas, j
que as esquinas do xadrez so costumeiramente invisveis ao sistema, por serem
junes pequenas, ou em outros casos, estas mesmas junes so
supervalorizadas exibindo uma esquina maior do que o realmente esperado.
73


Fonte: o autor.
Figura 4.3 - Esquinas invisveis. a) Imagem de profundidade. b) Imagem real. c) e d) Detalhamento
dos pontos.


Fonte: o autor.
Figura 4.4 - Esquinas superdimensionadas. a) Imagem de profundidade. b) Imagem real. c) e d)
Detalhamentos.

Em segundo, a disposio do emissor de infravermelho e seu respectivo
receptor, dificulta a determinao da profundidade para um objeto com variaes de
grande magnitude ao longo do seu corpo, como o caso deste objeto de calibrao
adotado de quadrados intercalados entre o opaco e o transparente em distncias de
40mm apenas, porm com diferenas de profundidade entre estes maiores que 1m
em alguns casos. Esta situao diminui a campo de emisso de infravermelhos, e
por outro lado diminui tambm o campo de recepo, assim, dependendo da
disposio do objeto visualizado, havero quadrados que sero mesclados uns aos
outros.






74

Os resutados obtidos durante as calibraes constam no Anexo XII para as
cmeras de profundidade e Anexo XIII para as cmeras de cores.
Nesta primeira bateria de testes (vide Anexo XII - Tabela 2), para o Kinect

2
foram utilizadas duas imagens difceis de se determinar o ponto exato das esquinas
(Figura 4.5 e Figura 4.9), tal efeito pode ser percebido a partir da diferena entre a
calibrao dos dois sensores. Na bateria de testes a seguir, com 25 imagens, estas
duas imagens problemticas foram removidas e os resultados convergiram para
muito prximo do primeiro Kinect

como era esperado (Tabela 3).



Fonte: o autor.
Figura 4.5 - Imagens com grandes pontos de profundidade indeterminveis.


Fonte: o autor.
Figura 4.6 - Parmetros intrnsecos da cmera 1 de profundidade.


Fonte: o autor.
Figura 4.7 - Parmetros intrnsecos da cmera 2 de profundidade.
0
200
400
600
800
1000
30 25 20 15 10 6 3
P
i
x
e
l
s

Paramtros intrnsecos -
Kinect 1
fx
fy
cx
cy
0
200
400
600
30 25 20 15 10 6 3
P
i
x
e
l
s

Parametros intrnsecos
- Kinect 2
fx
fy
cx
cy
75

Pode-se observar, que a utilizao de 30 e 25 imagens para calibrar a cmera
de profundidade, pouco influenciou nos resultados para o Kinect

1 (Figura 4.6),
mesmo considerando-se o fato de os pontos obtidos para os clculos serem feitos
de forma manual.
O mesmo no ocorre, entretanto, quando se reduz ainda mais a quantidade
de imagens. A partir de 20 imagens (at 3) observa-se a variao mais expressiva
dos parmetros intrnsecos encontrados. Neste momento fica clara a falta de
preciso na coleta dos pontos manualmente, uma vez que os parmetros
encontrados com 15 imagens de calibrao foram mais prximos da efetuada com
30 imagens do que de 20 imagens como possvel ver nas tabelas do AnexoXII.
Os testes que se seguem, utilizaram menos que 10 imagens para calibrao e
os efeitos so rapidamente percebidos, visto que os parmetros encontrados variam
significativamente, chegando a obter um desvio de quase 50% se comparada a
calibrao com 30 imagens e 3 imagens (Tabela 8). To logo se pode concluir que
so parmetros totalmente descartveis, e sem confiabilidade alguma.
Em todos os testes (Figura 4.8 e Figura 4.9 - comeando de 3 imagens para
30 imagens de calibrao de cores e na sequncia as de profundidade) os valores
dos coeficientes de distoro variam com intensidade significativa, mas, vale lembrar
que estes so valores estimados atravs de tentativa e erro. E sendo estes
dependentes uns dos outros, podem variar fortemente porm de modo a
continuarem tendendo ao mesmo ponto de estabilidade.
Porm cabem algumas observaes como, os valores dos coeficientes de
distoro tangencial estiveram a todo momento abaixo de 0,01 pixels. Sendo p1
sempre negativo e p2 sempre positivo. O mesmo vale para k3 que esteve sempre
muito prximo de 1 o que por si s j denota sua influncia na correo. Enquanto
os valores de k1 e k2 variaram com maior intensidade, demonstrando que possuem
maior influncia sobre o resultado, um tendendo a equilibrar o outro enquanto os
demais representam ajustes finos.
76


Fonte: o autor.
Figura 4.8 - Coeficientes de Distoro Cmera 1. a) Cmera de Profundidade. b) Cmera RGB.

Fonte: o autor.
Figura 4.9 - Distoro Cmera 2. a) Cmera de Profundidade. b) Cmera RGB.

A baixssima variao entre os trs primeiros testes na calibrao da cmera
de cores (Figura 4.10) mostra no s a eficincia na localizao automtica de
esquinas mas tambm a maior confiabilidade nos resultados das cmeras de cores
se comparadas as cmeras de profundidade.

Fonte: o autor.
Figura 4.10 - Parmetros intrnsecos da cmera de cores.

0
100
200
300
400
500
600
30 25 20 15 10 6 3
P
i
x
e
l
s

Parametros intrnsecos -
Kinect 1
fx
fy
cx
cy
77


Fonte: o autor.
Figura 4.11 - Parmetros intrnsecos da cmera 2 de cores.

Nestes testes, os coeficientes de p1 e p2 encontrados foram sempre muito
semelhantes entre eles. Isto pode ser resultado direto da forma como a captura da
imagem acontece. Nos sensores de profundidade existem dois elementos distantes
um do outro e formando um certo ngulo com relao ao ponto de foco. J a cmera
de cores obtm de forma autnoma e os efeitos de distoro tangencial tendem a ter
uma diferena de distoro entre um eixo e outro.
Ao contrrio cmeras de profundidade, as cmeras de cores por possurem
deteco automtica de esquinas, conseguem realizar a calibrao dos parmetros
com pequena variao nos valores reais dos parmetros at uma quantidade
mnima de 15 imagens. A partir da os valores comeam a variar para mais ou para
menos com maior intensidade dependendo das imagens utilizadas.
A calibrao estreo a simples comparao entre pontos das imagens
anteriores. Logo, sofre com os mesmo problemas da calibrao de profundidade,
existindo pontos mal selecionados pelo operador, a calibrao entre cmera de cor e
cmera de profundidade ser comprometida.
Ao final da obteno da nuvem de pontos estes erros vo se acumulando a
ponto de dificultar significativamente o alinhamento das nuvens.




0
200
400
600
800
1000
1200
1400
30 25 20 15 10 6 3
P
i
x
e
l
s

Paramtros intrnsecos -
Kinect 2
fx
fy
cx
cy
78

Tabela 4.1 - Parmetros de calibrao estereo intrnseca dos sensores.
KINECT

1 30 imagens
R1 R2 R3 T
-0,0004174562 m 4,33831271671 m 1,52425034854 m 0,1825257463 m
-7,9575576016 m -0,00040655033 m -2,10502180514 m 0,3239107990 m
3,6431199999 m -5,42109920773 m 1,70062199854 m -0,837898761 m
KINECT

1 25 imagens
0,0008275381 m -5,9912642469 m 3,96181442193 m -0,392141428 m
1,4545447811 m 0,0008228668 m -6,48044424832 m -0,316901990 m
-4,8001514642 m 8,1785189798 m 6,81040844901 m 1,152422900 m
KINECT

2 30 imagens
0,0009100381 m -5,8712642469 m 4,025318983300 m -0,353215680 m
1,4723100290 m 0,0004067980 m -6,47052221200 m 0,3021330214 m
-4,599999987 m 8,0000175000 m 7,01040864200 m 1,1223652300 m
KINECT

2 25 imagens
0,0001419795 m -6,2925489481 m -1,29233223556 m -0,321554383 m
3,4170301553 m 0,0001967349 m -3,00042708404 m -0,016040520 m
6,6005239045 m 1,8207457754 m 2,79538339846 m 1,083997455 m
Fonte: o autor.

4.2 NUVEM DE PONTOS

As nuvens de pontos so exibidas tanto com a utilizao da ferramenta
scatter3 do Matlab

quanto com o auxlio da biblioteca SharpGL para o C#, cada


qual com suas vantagens.
No primeiro caso (Matlab

) o processamento fora demasiadamente lento, bem


como a anlise dos dados. Alm de tudo a visualizao prejudicada pela falta de
recursos desta ferramenta.
J no segundo caso, a criao das nuvens quase instantnea o que auxiliou
muito o desenvolvimento e os testes, no entanto a sobreposio de pixels (pontos
iguais nas duas nuvens de pontos) faz com que estes percam sua cor original e
filtrar estes pontos torna-se ainda mais dispendioso para a mquina do que a
utilizao da ferramenta do Matlab

. Vale ressaltar ainda que a agilidade na


movimentao da cmera virtual criada pelo SharpGL ao longo da nuvem de pontos
79

obtm resultados mais claros devido ao maior controle sobre a posio da cmera e
parmetros de projeo e perspectiva das imagens que o outro sistema.
Para cmeras adequadamente calibradas, a nuvem de pontos demonstra boa
preservao das propriedades das imagens (Figura 4.12a com sua respectiva
nuvem de pontos Figura 4.12b), com distanciamento coerente e ngulos entre as
linhas preservados.

Fonte: o autor.
Figura 4.12 - Nuvem de pontos para calibrao de 30 imagens

Com a utilizao dos resultados de outras calibraes pode-se notar facilmente
a diferena, a comear pela total ausncia de cores (Figura 4.13) devido a
impreciso da calibrao estreo intrnseca dos sensores (alinhamento da cmera
de cor com a cmera de profundidade).

Fonte: o autor.
Figura 4.13 - Nuvem de pontos para calibrao de 3 imagens.

Se sobrepostas as duas nuvens de pontos (Figura 4.14) possvel ver o
alongamento de uma das faces do objeto central da imagem no caso do sensor mal
calibrado. Alm de estar fora de posio no espao e possuir dimenses duvidosas,
sendo visivelmente menor que a primeira nuvem de pontos.
80


Fonte: o autor.
Figura 4.14 - Sobreposio das nuvens de pontos bem calibrada e mal calibrada (direita).

Forando o alinhamento entre ambas as nuvens de pontos, v-se a distncia
entre os objetos centrais de cada uma delas (Figura 4.15).

Fonte: o autor.
Figura 4.15 - Comparativo entre duas nuvens de pontos alinhadas.

Porm apenas uma imagem para modelagem da nuvem pouco, at porque o
Kinect

apresenta um tempo de saturao no qual estabiliza os valores obtidos.


Espera-se que com algum tipo de melhoria ou redundncia, de forma, por exemplo,
obter uma nuvem de pontos a partir de vrias imagens para cada cmera, seja
possvel reduzir a quantidade de rudos (pixels sobrepostos ou deslocados).
Este fato, e a simplicidade do mtodo de calibrao estreo fazem com que
fique difcil de mapear as cores das imagens de forma correta, mesmo em nuvens
de pontos prximas do ideal. Assim, prximo dos pontos de alinhamento a nuvem de
pontos atribui mais facilmente as cores aos objetos sendo fcil de identifica-los neste
ponto.



81

4.3 ALINHAMENTO TRIDIMENSIONAL

O alinhamento tridimensional exato para pontos reais, consiste no alinhamento
de apenas dois vetores. Logo, a diferena entre o real e a nuvem de pontos o que
determina a qualidade do alinhamento (Figura 4.16 e Figura 4.17).

Fonte: o autor.
Figura 4.16 - Nuvem de pontos da cmera 1 (esquerda) e cmera 2 (direita).


Fonte: o autor.
Figura 4.17 - Alinhamento das nuvens de pontos.

Sobre outro ponto de vista tm-se a ntida percepo da irregularidade das
nuvens uma vez que o alinhamento no xadrez fora perfeito, mas nos objetos mais
distantes deste, em especial objetos com profundidades diferenciadas do ponto de
alinhamento aparecem mais distantes que o restante da imagem. Vrios fatores
podem resultar neste erro, como a impreciso do sensor de profundidade, o mtodo
aproximado de remoo de distoro incapaz e at mesmo a calibrao estreo
intrnseca dos sensores inadequada. O fato que cada um destes casos contribui
para o resultado final.

Fonte: o autor.
Figura 4.18 - Erro de alinhamento em decorrncia da falta de preciso na calibrao.


82

necessrio portanto, aprimorar estes fatores, e minimizar os erros de
calibrao, j que o alinhamento mostrou-se suficientemente otimizado e a
reconstruo da nuvem de pontos tambm.
Ressalva-se no entanto que em algumas situaes fora possvel observar que
ao selecionar o segundo ponto prximo de uma reta paralela ao eixo Y, o erro pode
ser ampliado ainda mais, a ponto de no conseguir alinhar as imagens e at mesmo
distanci-las ainda mais do que originalmente estavam.
Isso ocorre porque a falta de preciso da nuvem de pontos devido e a m
calibrao das cmeras pode fazer com que os vetores de alinhamento ao eixo base
do sistema de coordenadas real (eixo Y) estejam invertidos, ou seja, se para uma
determinada nuvem de pontos esperava-se que este vetor formasse um pequeno
ngulo no sentido anti-horrio deste e aparecer formando um ngulo horrio, sua
movimentao na direo deste eixo durante os 5 passos de rotao poder ampliar
cada vez mais o erro, distanciando o os pontos entre as duas nuvens ao invs de
aproxim-los.
Para evitar este tipo de situao, seria necessria uma varredura de malha
fechada que procurasse o menor erro possvel de alinhamento e s ento retornasse
os parmetros. Entretanto a quantidade de clculos envolvidos em tal procedimento
inviabilizaria sua utilizao, pois tornaria o trabalho demasiadamente lento, como as
etapas de calibrao. A diferena que a calibrao necessria apenas uma vez
para cada cmera, enquanto o alinhamento feito a cada mudana de
posicionamento do sistema estereoscpico.
Outra alternativa seria utilizar um conjunto de pares de vetores ao invs de um
nico par de vetor por nuvem de ponto, e adotar como resultado os valores de
alinhamento que mais se aproximassem entre eles, isolando casos excepcionais de
erros devido a escolha do eixo base.
Durante a tentativa de remodelagem outra dificuldade encontrada foi a de filtrar
os pontos vlidos para a calibrao. Mesmo utilizando-se de um objeto de calibrao
amplamente visvel a ambas as cmeras, os sensores de profundidade possuem
rudos tornando alguns pixels indeterminados mesmo em uma superfcie plana. Se
um destes pontos for utilizado no clculo provvel que o programa apresente um
erro ou ento gere a nuvem de pontos alinhada porm com erros ainda piores que a
primeira situao, j que os vetores resultantes da obteno de pontos, levam em
83

considerao as esquinas das imagens de cores, aleatoriamente pode-se obter um
ponto invlido.














































84

5 CONCLUSO

A calibrao de cmeras ponto de fundamental importncia no intuito de
transformar os dados obtidos novamente em dados reais, ou seja, que possuem
dimenses e posies condizentes com o capturado pela cmera.
Entre as dificuldades e complicaes apresentadas, destaca-se a ampliao do
erro por sentido de alinhamento contrrio ao do eixo base, que ocasiona a
valorizao a cada passo do erro inicial.
Neste sentido, obter os parmetros corretos de cada cmera passo primordial
na minimizao dos erros na reconstruo das nuvens de pontos.
A partir da, a reconstruo da nuvem de pontos e seu posterior alinhamento
envolvem clculos precisos de modelos matemticos j exaustivamente testados e
comprovados.
Tal fato fora comprovado mediante este trabalho, aonde cmeras no
adequadamente calibradas deram resultado a nuvens de pontos no condizentes
com o real. Ocorre que esta discrepncia pode no ser to significativa em uma
nuvem de pontos, mas ao tentar o alinhamento destas, os defeitos ficam ainda mais
evidentes.
A disposio no espao diferente de cada uma das cmeras, a distncia at os
objetos visualizados e at mesmo o ngulo entre estes, aliado a parmetros de
calibrao incorretos, resulta em pontos no espao distantes dos pontos reais
podendo invalidar o mtodo de alinhamento sem a utilizao de um sistema com
malha fechada que buscasse minimizar os erros.
Por fim, os mtodos apresentados quando bem utilizados ampliam a gama de
informaes visualizadas, o que facilita a interpretao das informaes do meio
mesmo que para tanto sejam necessrio maior quantidade de processamento, por
agora existir uma terceira dimenso e o dobro da quantidade de pontos, o mesmo
ganho esperado na qualidade dos resultados, ou at mesmo na eficincia da
anlise de imagens j que a maior quantidade de caractersticas visveis pode
tambm diminuir a varredura necessria para se buscar algo nesta imagem, ou
classificar objetos. A exemplo do cubo mgico utilizado em nossos testes, que
poderia ser mais facilmente determinada sua forma com este ganho de informao,
o que seria extremamente difcil de se fazer no mtodo convencional da
monoscopia.
85

A grande quantidade de informaes detalhadas e clculos esmiuados talvez
seja a maior das contribuies deste projeto.
Foram apresentados desde fundamentos bsicos de cmeras e imagens
digitais, at clculos complexos que envolvam diretamente o processo de calibrao,
geometria e alinhamento de cmeras e imagens.
Deve ser ressaltada ainda a agilidade e preciso do mtodo de Zhang, as
prticas funes implementadas pela biblioteca EmguCV e ferramentas matemticas
do ambiente Matlab

, e claro, o dinamismo da ferramenta de desenvolvimento


Microsoft Visual Studio

munido da poderosa linguagem de programao C# com o


qual fora possvel realizar a integrao entre todas estas ferramentas de forma
rpida sem complicar o desenvolvimento do ambiente de interao com o usurio de
forma que fosse prtico e simples.
Por fim, espera-se que a metodologia apresentada enriquea ainda mais
trabalhos afins, dando continuidade a elegante viso computacional.

5.1 TRABALHOS SUGERIDOS

A partir dos resultados e da metodologia apresentada, podem-se sugerir
trabalhos que envolvam a minimizao dos erros no processo de calibragem.
Algumas estratgias podem ser seguidas, como a tentativa de se utilizar a
calibrao de todos os parmetros, sejam extrnsecos, intrnsecos ou parmetros de
distoro das cmeras em um processo de malha fechada, capaz de reajustar os
parmetros de uma calibrao a partir dos resultados da outra. Tal procedimento
poderia evitar que parmetros intrnsecos no condizentes com o real fossem
encontrados j que estes no trabalho apresentado so calculados de modo isolado e
independentemente da distoro existente das lentes, esta segunda sendo calculada
com base nos parmetros intrnsecos e somente aps a obteno dos mesmos, o
que como fora apresentado j acarreta em certa quantidade de erros.
Aprofundando-se ainda mais, o mtodo de obteno dos parmetros de
distoro podem ser estudados com maior afinco na tentativa de se obter mtodo
preciso e comprovado matematicamente a eficcia e preciso no clculo destes, j
que o presente trabalho utiliza-se de um mtodo de varredura por tentativa e erro,
que apesar de preciso partindo-se de parmetros intrnsecos corretos, necessita de
86

grande quantidade de processamento, o que muitas vezes torna o procedimento
impraticvel, motivo este que forou a utilizao neste projeto de uma preciso de
apenas 3 casas aps a vrgula. A utilizao de um mtodo matemtico adequado
para determinado fim pode contornar a falta de preciso desta funo bem como
evitar a enorme quantidade de dados a serem processados.
Por fim, sugerida ainda a busca por um mtodo de alinhamento capaz de
ser integrado ao processo de calibrao assim como as demais funes, o que
retornaria maior quantidade de dados para validar a correta calibrao das cmeras.




































87

REFERNCIAS BIBLIOGRFICAS
[1] SNYDER, W. E.; QI, H. Machine Vision. Cambridge University Press. Nova
Iorque, 2004.
[2] Project Natal. PLAY.COM. Disponivel em:
<http://www.play.com/Games/Xbox360/4-/10296372/Project-Natal/Product.html>.
Acesso em: 21 de maio de 2012.
[3] Suporte Online do Xbox. Xbox. Disponvel em: <http://support.xbox.com/pt-
BR/kinect/setup-and-playspace/kinect-sensor-components> Acesso em: 21 de
maio de 2012.
[4] MARQUES FILHO, O.; VIEIRA NETO, H. Processamento Digital de Imagens.
Brasport. Rio de Janeiro, 1999.
[5] CERQUEIRA, P. M .G. Integrao do Sensor Kinect da Microsoft em
Sistemas de Percepo de Robs Autnomos. 2011. Relatrio (Licenciatura
em Engenharia Eletrotcnica e de Computadores) Departamento de
Engenharia Eletrotcnica, Instituto Superior de Engenharia do Porto, Portugal.
Disponvel em: <> Acesso em: 24 de abril de 2012.
[6] SANTOS FILHO, J. C.; BALTAZAR, A. P.; PERONTI, R.; LAGES, W; COSTA, M.
B.; COSME, V. Princpios Tericos da Esteoreoscopia. Escola de Arquitetura
da Universidade Federal de Minas Gerais, 2008.
[7] ALMEIDA, R. H. P.; CORSO, D. A; BRITTO JR, A. S. Viso Computacional
Sistemas de Viso Aplicados Inspeo Industrial. Encontro de Engenharia e
Tecnologia em Computao. Universidade Estadual de Ponta Grossa, 2007.
[8] Machine Vision Industry Report 2011. European Machine Vision Association.
Disponivel em:
<http://www.emva.org/cms/upload/main/emva_market_statistics2011.pdf >.
Acesso em: 13 de junho de 2012.
[9] OSAKU, D. Caracterizao de impresses faciais termais utilizando a
Transformada Imagem Floresta. Universidade Estadual Paulista, 2011.
[10] PEIXOTO, A.; CARVALHO, P. C. P. Esqueletos de Objetos Volumtricos.
PUC Rio, 2000.
[11] SILVA, A. C. Algoritmos para Diagnstico Assistido de Ndulos Pulmonares
Solitrios em Imagens de Tomografia Computadorizada. PUC RIO, 2004.
[12] MENDES, R. A tomografia computadorizada de raios X como mtodo no
destrutivo de anlise volumtrica de concreto: estudo de caso em testemunho de
concreto da usina hidreltrica de mouro. Universidade Federal do Paran, 2010.
[13] ANDERSON, R.; STENGER, B; CIPOLLA, R. Augmenting Depth Camera
Output Using Photometric Stereo. Machine Intelligence Laboratory. University
of Cambridge, 2011.
[14] OLIVEIRA, F. P. M. Emparelhamento e Alinhamento de Estruturas de Viso
Computacional: Aplicaes em Imagens Mdicas. Faculdade de Engenharia da
Universidade do Porto, 2009.
[15] ROMANO, V. F. Robtica Industrial: aplicao na indstria de manufatura e de
processos. So Paulo: E. Blucher, 2002.
[16] STEMMER, M. R.; ORTH, A.; ROLOFF, M. L.; DESCHAMPS, F.; PAVIM, A. X.
Apostila de Sistemas de Viso. Departamento de Automao Inteligentes da
Universidade Federal de Santa Catarina. Disponvel em:
<http://s2i.das.ufsc.br/harpia/downloads/apostila-sistemas-visao.pdf>. Acesso
em: 14 de fevereiro de 2012.
[17] THRYFT, A. R. Machine-vision industry experiencing trying times. TEST &
88

MEASUREMENTS WOLRD MAGAZINE. Disponvel em
<http://www.tmworld.com/article/317552-
Machine_vision_industry_experiencing_trying_times.php> Acesso em: 15 de jun.
2012.
[18] SIEMENS. Pictures of the Future Fall 2006. Disponvel em
<http://www.siemens.com/innovation/en/publikationen/publications_pof/pof_fall_2
006/sustainable_city_development/facts_and_forecasts.htm> Acesso em: 15 de
jun. 2012.
[19] WYPYCH, M. A. Viso Computacional. Ncleo de Cincias Exatas e
Tecnolgicas do Centro Universitrio Positivo, 2007.
[20] LIMA, A. V. G. Processamento de imagens para identificao de placas de
automveis. Faculdade Farias Britto, 2009.
[21] Fundamentos da Imagem Digital - Antonio Escano Scuri

[22] AMORIM, A. Utilizao de modelos estereoscpicos hbridos na
atualizao cartogrfica. Escola de Engenharia de So Carlos, 2000.

[23] ROMANO, V. F.; DUTRA, M. S. Robtica Industrial Aplicao na
Indstria de Manufatura e de Processos. Edgard Blcher Ltda, 2002.
[24] DRAELOS, M. T. The Kinect Up Close: Modifications for Short-
RangeDepth Imaging. Vilamoura, Algarve, Portugal, 2012.
[25] Richard Szeliski. Computer Vision: Algorithms and Applications. Springer.
Washington, Estados Unidos, 2010.
[26] JOHANSSON, P. Improving Camera Calibration: applying a least square
method to control point measurement. Universidade de Ume, Departamento
de Cincia da Computao. Ume, Sucia, 2005.
[27] BOUVRIE, B. Improving RGBD indoor mapping with IMU data. Delft
Universidade de Tecnologia. Delft, Holanda, 2011.
[28] BRADSKI, G.; KAEHLER, A. Learning OpenCV. OReilly Media, Estados
Unidos, 2008.
[29] MANUYLOVA, E. Investigations of stereo setup for Kinect. Universidade
de Linkping, Sucia. Disponvel em: <http://liu.diva-
portal.org/smash/record.jsf?pid=diva2:510799> acesso em: 27 de agosto de
2012.
[30] SMISEK, J.; PADJDLA, T.; JANCOSEK, MICHAL. 3D with Kinect.
Universidade Tcnica da Repblica Tcheca, Praga. Disponvel em:
<ftp://cmp.felk.cvut.cz/pub/cmp/articles/pajdla/Smisek-CDC4CV-2011.pdf>
Acesso em: 27 de ago. 2012.
[31] FOX, S. D.; LYONS, D. M. An approach to stereo-point cloud registration
using image homographies. Disponvel em: <http://adsabs.harvard.edu/cgi-
bin/nph-data_query?bibcode=2012SPIE.8301E...7F&link_type=EJOURNAL>
acesso em: 27 de ago. 2012.
[32] KULKARNI, N. 3D Dense PointCloud Modelling Using Kinect (s).
Disponvel em:
http://www.cse.iitd.ernet.in/~mcs103467/files/pc_registration/project_report.pdf
acesso em: 13 de ago. 2012.
[33] MANSSOUR, I. H.; COHEN, M. Introduo a Computao Grfica.
Disponvel em:
<http://www.inf.pucrs.br/manssour/Publicacoes/TutorialSib2006.pdf> acesso em:
02 de ago. 2012.
89

[34] NAKANO, A. L.; CUNHA, L. L. Transformaes Geomtricas 2D e 3D.
Disponvel em:
<http://www.lcad.icmc.usp.br/~rosane/CG/TransfGeomAndersonIcaro.pdf>
acesso em: 19 de set. 2012.
[35] MANSSOUR, I. H. Conceitos Importantes de VRML. Disponvel em:
<http://www.inf.pucrs.br/manssour/VRML/ConceitosImportantes.html> acesso em:
01 de out. 2012.
[36] KRIEGMAN, D. Homography Estimation. Disponvel em:
<http://cseweb.ucsd.edu/classes/wi07/cse252a/homography_estimation/homogra
phy_estimation.pdf> acesso em: 29 de ago. 2012.
[37] SANTOS, M. S. Reviso de Conceitos em Projeo, Calibrao de
Cmera, Geometria Epipolar, Mapas de Profundidade e Varredura de Planos.
Disponvel em:
<http://www.ic.unicamp.br/~rocha/teaching/2012s1/mc949/aulas/additional-
material-revision-of-concepts-homography-and-related-topics.pdf> acesso em: 29
de set. 2012.
[38] YOUNG, M.; BEESON, E. Viewpoint-coded Structured Light. Disponvel
em: http://www.cs.berkeley.edu/~ravir/cvpr07.pdf acesso em: 15 de ago. 2012.
[39] ANDERSEN, M. R.; JENSEN, T.; LISOUSKI, P.; MORTENSEN, A. K.;
HANSEN, M. K.; GREGERSEN, T.; AHRENDT, P. Kinect Depth Sensor
Evaluation for Computer Vision Applications. Disponvel em:
<http://eng.au.dk/fileadmin/DJF/ENG/PDF-
filer/Tekniske_rapporter/Technical_Report_ECE-TR-6-samlet.pdf> acesso em: 15
de ago. 2012.
[40] PARKS, D.; GRAVEL, J. Corners Detectors. Disponvel em:
http://kiwi.cs.dal.ca/~dparks/CornerDetection/moravec.htm acesso em: 02 de set.
2012.
[41] ALEXNADROV, A. Computer Vision 558 Corner Detection Overview
Comparison. Disponvel em: http://www2.informatik.uni-
halle.de/agprbio/AG/Lehre/ABV_WS03/literatur/Corners.pdf acesso em: 03 de
set. 2012.
[42] ZHANG, Z. A flexible new technique for Camera Calibration. Disponvel
em: http://research.microsoft.com/en-us/um/people/zhang/papers/tr98-71.pdf
acesso em: 28 de ago. 2012.
[43] KANG, S. B. Semiautomatic Methods for Recovering Radial Distortions
Parameters from A Single Image. Disponvel em:
<http://www.hpl.hp.com/techreports/Compaq-DEC/CRL-97-3.pdf > Acesso em: 15
de set. 2012.
[44] STEWART, J. Clculo. Vol 2, Ed. 4. So Paulo: Pioneira, 2001.
[45] WILD, M. Recent Development of The Iterative Closest Point (ICP)
Algorithm. Disponvel em: <http://students.asl.ethz.ch/upl_pdf/314-
report.pdf?aslsid=092d9507b0fc02655a4153861fc08ff4> acesso em: 01 de out.
2012.





90

ANEXO I Alinhamento de duas nuvens de pontos










91

ANEXO II Soluo fechada de Zhang












92

ANEXO III Mapeamento por matriz de afinidade
List<RGBD> PontosNoEspaco = new List<RGBD>();

for (int i = tamCorte; i < semDistorcaoIR.Width - tamCorte; i++)
{
for (int j = vert; j >= tamCorte ; j--)
{
AtualizarProgressBar(i - tamCorte, tot);
if (profundidade[i, j] < 65528)
{
PointF p = new PointF(i, j);
Point3D P3D = uvToXYZ(p, IRmatriz, profundidade);

PointF P2D = P3DmapToP2D(P3D, RGBmatriz, Rot, Trans);

Point p2d = P2DtoInteger(P2D, semDistorcao.Width, semDistorcao.Height);

for (int k = 0; k < listaDePontosRGB.Count; k++)
{
if (
(listaDePontosRGB[k].X == p2d.X)
&&
(listaDePontosRGB[k].Y == p2d.Y)
)
{
if (listaDePontosRGB[k] == p2d)
listaDePontosRGBD[k] = new Point3D(P3D.X, P3D.Y, P3D.Z);
}
}

Color corNova = semDistorcao.GetPixel(p2d.X, p2d.Y);

RGBD rgbd = new RGBD(P3D, corNova);
PontosNoEspaco.Add(rgbd);
}
}
}

return PontosNoEspaco;
















93

ANEXO IV Alinhamento interno das cmeras do Kinect


private PointF P3DmapToP2D(Point3D XYZ, double[,] CameraRGBMatrix, double[,]
RotationStereo, double[] TranslationStereo)
{
double[] xyz = new double[3] { XYZ.X, XYZ.Y, XYZ.Z };
matlab.PutWorkspaceData("XYZ", "base", xyz);

double fx = CameraRGBMatrix[0, 0];
double fy = CameraRGBMatrix[1, 1];
double cx = CameraRGBMatrix[0, 2];
double cy = CameraRGBMatrix[1, 2];

matlab.PutWorkspaceData("fx", "base", fx);
matlab.PutWorkspaceData("fy", "base", fy);
matlab.PutWorkspaceData("cx", "base", cx);
matlab.PutWorkspaceData("cy", "base", cy);

matlab.PutWorkspaceData("R", "base", RotationStereo);
matlab.PutWorkspaceData("T", "base", TranslationStereo);

matlab.Execute("P3Dlinha = XYZ*R + T");
matlab.Execute("P2Dx = (P3Dlinha(1) * fx / P3Dlinha(3)) + cx");
matlab.Execute("P2Dy = (P3Dlinha(2) * fy / P3Dlinha(3)) + cy");

matlab.Execute("P2D = [P2Dx P2Dy]");
Object retorno;
matlab.GetWorkspaceData("P2D", "base", out retorno);
double[,] P2D = (double[,])retorno;

return new PointF((float)P2D[0, 0], (float)P2D[0, 1]);
}























94

ANEXO V Algoritmo de Calibrao
Size patternSize = new Size(5, 6);
Size squareSize = new Size(40, 40);
List<PointF[]> Corners = new List<PointF[]>();

foreach (Bitmap bmp in bmps)
{
Image<Gray, byte> img = new Image<Gray, byte>(bmp);
PointF[] corners = CameraCalibration.FindChessboardCorners(img, patternSize,
Emgu.CV.CvEnum.CALIB_CB_TYPE.ADAPTIVE_THRESH |
Emgu.CV.CvEnum.CALIB_CB_TYPE.FILTER_QUADS);

Corners.Add(corners);
}

foreach (PointF[] pCorner in Corners)
{
Hmatrizes.Add(CameraCalibration.FindHomography(pontosReais1, pCorner,
Emgu.CV.CvEnum.HOMOGRAPHY_METHOD.DEFAULT, 1.3));
}


List<double[,]> matrizesV = new List<double[,]>();

foreach (HomographyMatrix h in Hmatrizes)
{
matrizesV.Add(HomografiaParaMatrizV(h, 0, 1));
}

matlab.Execute("clear all");
matlab.Execute("cls");

matlab.Execute("V = []");
for (int i = 0; i < Hmatrizes.Count; i++)
{
string varHMatlab = "H" + (i + 1).ToString();
string varVMatlab = "V" + (i + 1).ToString();
matlab.PutWorkspaceData(varHMatlab, "base", Hmatrizes[i].Data);
matlab.PutWorkspaceData(varVMatlab, "base", matrizesV[i]);
string varVetorMatlab = "V = [V; " + varVMatlab + "]";
matlab.Execute(varVetorMatlab);
}

matlab.Execute("[u,d,v] = svd(V)");
matlab.Execute("b = v(:,6)");
matlab.Execute("B11 = b(1)");
matlab.Execute("B12 = b(2)");
matlab.Execute("B22 = b(3)");
matlab.Execute("B13 = b(4)");
matlab.Execute("B23 = b(5)");
matlab.Execute("B33 = b(6)");
matlab.Execute("v0 = (B12*B13-B11*B23)/(B11*B22-B12^2)");
matlab.Execute("l = B33 - (B13^2 + v0*(B12*B13 - B11*B23))/B11");
matlab.Execute("a = sqrt(l/B11)");
matlab.Execute("B = sqrt(l*B11/(B11*B22 - B12^2))");
matlab.Execute("y = -B12*(a^2)*(B/l)");
matlab.Execute("u0 = y*v0/B-B13*(a^2)/l");

matlab.Execute("A = [ a y u0; 0 B v0; 0 0 1]");
matlab.Execute("A = abs(A)");
95

List<double[,]> rotationANDtranslation = new List<double[,]>();
foreach (HomographyMatrix H in Hmatrizes)
{
double[] h1 = Vetorh(H.Data, 0);
double[] h2 = Vetorh(H.Data, 1);
double[] h3 = Vetorh(H.Data, 2);
matlab.PutWorkspaceData("h1", "base", h1);
matlab.PutWorkspaceData("h2", "base", h2);
matlab.PutWorkspaceData("h3", "base", h3);
matlab.Execute("r1 = (1/l)*inv(A)*h1'");
matlab.Execute("r2 = (1/l)*inv(A)*h2'");
matlab.Execute("r3 = cross(r1,r2)");
matlab.Execute("t = (1/l)*inv(A)*h3'");
matlab.Execute("Rt = [r1 r2 r3 t]");
retorno = null;
matlab.GetWorkspaceData("Rt", "base", out retorno);
double[,] matriz = (double[,])retorno;

rotationANDtranslation.Add(matriz);
}


Object retorno;
matlab.GetWorkspaceData("V", "base", out retorno);
double[,] V = (double[,])retorno;
retorno = null;
matlab.GetWorkspaceData("b", "base", out retorno);
double[,] b = (double[,])retorno;
retorno = null;
matlab.GetWorkspaceData("A", "base", out retorno);
double[,] A = (double[,])retorno;

return A;























96

ANEXO VI Funes de montagem dos vetores, h, v e matriz V (Captulo 2.12).
private double[] Vertoh(double[,] H, int i)
{
double[] h = new double[3] { H[0, i], H[1, i], H[2, i] };

return h;
}

private double[] Vetorv(double[,] H, int i, int j)
{
double[] h1 = Vertoh(H, 0);
double[] h2 = Vertoh(H, 1);
double[] h3 = Vertoh(H, 2);
List<double[]> h = new List<double[]>();
h.Add(h1);
h.Add(h2);
h.Add(h3);

double[] v = new double[6]
{
h[i][0] * h[j][0],
h[i][0] * h[j][1] + h[i][1] * h[j][0],
h[i][1] * h[j][1],
h[i][2] * h[j][0] + h[i][0] * h[j][2],
h[i][2] * h[j][1] + h[i][1] * h[j][2],
h[i][2] * h[j][2]
};

return v;
}

private double[,] MatrizV(double[] va, double[] vb, double[] vc)
{
double[,] V = new double[2, 6]
{
{ va[0], va[1], va[2], va[3], va[4],
va[5]},
{vb[0] - vc[0], vb[1] - vc[1], vb[2] - vc[2], vb[3] - vc[3], vb[4] - vc[4],
vb[5] - vc[5]}
};

return V;
}

private double[,] HomografiaParaMatrizV(HomographyMatrix homografia, int i, int j)
{
double[,] H = homografia.Data;

double[] va = Vetorv(H, i, j);
double[] vb = Vetorv(H, i, i);
double[] vc = Vetorv(H, j, j);

double[,] V = MatrizV(va, vb, vc);

return V;
}


97

ANEXO VII Algoritmo de alinhamento das nuvens de pontos
private Matrix3D Varredura3dAlinhamento(List<Point3D> pontosCamFonte, List<Point3D>
pontosCamDest)
{
int pontosCount = pontosCamFonte.Count;
List<Point3D> pontosCam1 = new List<Point3D>();
pontosCam1.AddRange(pontosCamFonte.ToArray());
List<Point3D> pontosCam2 = new List<Point3D>();
pontosCam2.AddRange(pontosCamDest.ToArray());

double tx1 = -pontosCam1[0].X;
double ty1 = -pontosCam1[0].Y;
double tz1 = -pontosCam1[0].Z;

double tx2 = -pontosCam2[0].X;
double ty2 = -pontosCam2[0].Y;
double tz2 = -pontosCam2[0].Z;

matlab.Execute("pi = []");
matlab.Execute("po = []");
for (int i = 0; i < pontosCount; i++)
{
pontosCam1[i] = new Point3D(pontosCam1[i].X + tx1,
pontosCam1[i].Y + ty1,
pontosCam1[i].Z + tz1
);

pontosCam2[i] = new Point3D(pontosCam2[i].X + tx2,
pontosCam2[i].Y + ty2,
pontosCam2[i].Z + tz2
);

double[] pi = new double[3] { pontosCam1[i].X, pontosCam1[i].Y,
pontosCam1[i].Z };
double[] po = new double[3] { pontosCam2[i].X, pontosCam2[i].Y,
pontosCam2[i].Z };
matlab.PutWorkspaceData("p1", "base", pi);
matlab.PutWorkspaceData("p2", "base", po);
matlab.Execute("pi = [pi; p1]");
matlab.Execute("po = [po; p2]");
}

Point3D VetorY = new Point3D(0, 1, 0);

Matrix3D matrizZ1 = Matrix3D.Identity;
Matrix3D matrizX1 = Matrix3D.Identity;
Matrix3D matrizRot1 = Matrix3D.Identity;
Matrix3D matrizT1 = Matrix3D.Identity;

//############# TRANSLAO
matrizT1.OffsetX = tx1;
matrizT1.OffsetY = ty1;
matrizT1.OffsetZ = tz1;

//############# PLANO Z
double angZ1 = AlinharVetores(VetorY, pontosCam1[1], Eixo.Z);
matrizZ1 = MatrizRotacao(Eixo.Z, angZ1);
for (int k = 1; k < pontosCount; k++)
{
pontosCam1[k] = Point3D.Multiply(pontosCam1[k], matrizZ1);
98

}
//############# PLANO X
double angX1 = AlinharVetores(VetorY, pontosCam1[1], Eixo.X);
matrizX1 = MatrizRotacao(Eixo.X, angX1);
for (int k = 1; k < pontosCount; k++)
{
pontosCam1[k] = Point3D.Multiply(pontosCam1[k], matrizX1);
}
matrizRot1 = Matrix3D.Multiply(matrizT1, matrizZ1); // Mz*Mt
matrizRot1 = Matrix3D.Multiply(matrizRot1, matrizX1); // Mx*ans
matrizRot1.Invert();

double anguloX = 0;
double anguloY = 0;
double anguloZ = 0;

Matrix3D matrizY = Matrix3D.Identity;
Matrix3D matrizZ = Matrix3D.Identity;
Matrix3D matrizX = Matrix3D.Identity;
Matrix3D matriz = Matrix3D.Identity;
Matrix3D matrizT = Matrix3D.Identity;

//############# TRANSLAO
matrizT.OffsetX = tx2;
matrizT.OffsetY = ty2;
matrizT.OffsetZ = tz2;

//############# PLANO Z
double angZ = AlinharVetores(VetorY, pontosCam2[1], Eixo.Z);
matrizZ = MatrizRotacao(Eixo.Z, angZ);
for (int k = 1; k < pontosCount; k++)
{
pontosCam2[k] = Point3D.Multiply(pontosCam2[k], matrizZ);
}
//############# PLANO X
double angX = AlinharVetores(VetorY, pontosCam2[1], Eixo.X);
matrizX = MatrizRotacao(Eixo.X, angX);
for (int k = 1; k < pontosCount; k++)
{
pontosCam2[k] = Point3D.Multiply(pontosCam2[k], matrizX);
}
//############# PLANO Y - Com os segundos vetores de cada lista de pontos
double angY = AlinharVetores(pontosCam1[2], pontosCam2[2], Eixo.Y);
matrizY = MatrizRotacao(Eixo.Y, angY);
for (int k = 1; k < pontosCount; k++)
{
pontosCam2[k] = Point3D.Multiply(pontosCam2[k], matrizY);
}

// invM1*My*Mx*Mz*Mt
matriz = Matrix3D.Multiply(matrizT, matrizZ); // Mz*Mt
matriz = Matrix3D.Multiply(matriz, matrizX); // Mx*ans
matriz = Matrix3D.Multiply(matriz, matrizY); // My*ans
matriz = Matrix3D.Multiply(matriz, matrizRot1); // invM1*ans

return matriz;
}




99

ANEXO VIII Matrizes de rotao
private Matrix3D MatrizRotacao(Eixo eixo, double ang)
{

Matrix3D rotacao = Matrix3D.Identity;
double radAng = (Math.PI * ang) / 180;

switch (eixo)
{
case Eixo.STATIC:

rotacao = calibracaoAlinhamento;
break;

case Eixo.X:
rotacao = new Matrix3D();
rotacao.M11 = 1;
rotacao.M12 = 0;
rotacao.M13 = 0;
rotacao.M14 = 0;
rotacao.M21 = 0;
rotacao.M22 = Math.Cos(radAng);
rotacao.M23 = Math.Sin(radAng);
rotacao.M24 = 0;
rotacao.M31 = 0;
rotacao.M32 = -Math.Sin(radAng);
rotacao.M33 = Math.Cos(radAng);
rotacao.M34 = 0;
rotacao.OffsetX = 0;
rotacao.OffsetY = 0;
rotacao.OffsetZ = 0;
rotacao.M44 = 1;
break;

case Eixo.Y:
rotacao = new Matrix3D();
rotacao.M11 = Math.Cos(radAng);
rotacao.M12 = 0;
rotacao.M13 = -Math.Sin(radAng);
rotacao.M14 = 0;
rotacao.M21 = 0;
rotacao.M22 = 1;
rotacao.M23 = 0;
rotacao.M24 = 0;
rotacao.M31 = Math.Sin(radAng);
rotacao.M32 = 0;
rotacao.M33 = Math.Cos(radAng);
rotacao.M34 = 0;
rotacao.OffsetX = 0;
rotacao.OffsetY = 0;
rotacao.OffsetZ = 0;
rotacao.M44 = 1;
break;

case Eixo.Z:
rotacao = new Matrix3D();
rotacao.M11 = Math.Cos(radAng);
rotacao.M12 = Math.Sin(radAng);
rotacao.M13 = 0;
rotacao.M14 = 0;
100

rotacao.M21 = -Math.Sin(radAng);
rotacao.M22 = Math.Cos(radAng);
rotacao.M23 = 0;
rotacao.M24 = 0;
rotacao.M31 = 0;
rotacao.M32 = 0;
rotacao.M33 = 1;
rotacao.M34 = 0;
rotacao.OffsetX = 0;
rotacao.OffsetY = 0;
rotacao.OffsetZ = 0;
rotacao.M44 = 1;
break;
}

return rotacao;
}







101

ANEXO IX Imagens do software de estudo




102























103

ANEXO X Funes de obteno e aquisio das imagens
private void ProfundidadePronta(object sender, DepthImageFrameReadyEventArgs e)
{
bool recebidoDados = false;
if (Dados1.SensorKinect.UniqueKinectId == ((KinectSensor)sender).UniqueKinectId)
{
using (Dados1.DepthImageFrame = e.OpenDepthImageFrame())
{
if (Dados1.DepthImageFrame != null)
{
short[] shorts = new short[Dados1.DepthImageFrame.PixelDataLength];
Dados1.DepthImageFrame.CopyPixelDataTo(shorts);
Dados1.PixelDepthData = shorts.ToList();
recebidoDados = true;
}
}
if (recebidoDados)
{
if (Kinect1Frame1Concluido)
{
Kinect1Frame1Concluido = false;
Dados1.SensorKinect.Stop();
}
else
Kinect1Frame1Concluido =true;
Dados1.SensorKinect.DepthFrameReady -= new
EventHandler<DepthImageFrameReadyEventArgs>(ProfundidadePronta);
}
}
else
{
using (Dados2.DepthImageFrame = e.OpenDepthImageFrame())
{
if (Dados2.DepthImageFrame != null)
{
short[] shorts = new short[Dados2.DepthImageFrame.PixelDataLength];
Dados2.DepthImageFrame.CopyPixelDataTo(shorts);
Dados2.PixelDepthData = shorts.ToList();
recebidoDados = true;
}
}

if (recebidoDados)
{
if (Kinect2Frame1Concluido)
{
Kinect2Frame1Concluido = false;
Dados2.SensorKinect.Stop();
}
else
Kinect2Frame1Concluido = true;
Dados2.SensorKinect.DepthFrameReady -= new
EventHandler<DepthImageFrameReadyEventArgs>(ProfundidadePronta);
}
}
}

private void CoresPronto(object sender, ColorImageFrameReadyEventArgs e)
{
if (Dados1.SensorKinect.UniqueKinectId == ((KinectSensor)sender).UniqueKinectId)
104

{
using (Dados1.ColorImageFrame = e.OpenColorImageFrame())
{
if (Dados1.ColorImageFrame != null)
{
bool novoFormato = Dados1.LastImageFormat !=
Dados1.ColorImageFrame.Format;
byte[] bytes = new byte[Dados1.ColorImageFrame.PixelDataLength];
if (novoFormato)
{
unsafe
{
fixed (void* p = bytes)
{
IntPtr ptr = new IntPtr(p);
PixelFormat format = PixelFormat.Format32bppRgb;
Dados1.BitmapImage = new
Bitmap(Dados1.ColorImageFrame.Width,
Dados1.ColorImageFrame.Height, (4 *
Dados1.ColorImageFrame.Width), format, ptr);
}
}
}

Dados1.ColorImageFrame.CopyPixelDataTo(bytes);
Dados1.PixelData = bytes.ToList();

pictureBox1.Image = Dados1.BitmapImage;

Dados1.LastImageFormat = Dados1.ColorImageFrame.Format;
}
}

if (Kinect1Frame1Concluido)
{
Kinect1Frame1Concluido = false;
Dados1.SensorKinect.Stop();
}
else
Kinect1Frame1Concluido = true;
Dados1.SensorKinect.ColorFrameReady -= new
EventHandler<ColorImageFrameReadyEventArgs>(CoresPronto);
}
else
{
using (Dados2.ColorImageFrame = e.OpenColorImageFrame())
{
if (Dados2.ColorImageFrame != null)
{
bool novoFormato = Dados2.LastImageFormat !=
Dados2.ColorImageFrame.Format;
byte[] bytes = new byte[Dados2.ColorImageFrame.PixelDataLength];
if (novoFormato)
{
unsafe
{
fixed (void* p = bytes)
{
IntPtr ptr = new IntPtr(p);
PixelFormat format = PixelFormat.Format32bppRgb;
Dados2.BitmapImage = new
Bitmap(Dados2.ColorImageFrame.Width,
105

Dados2.ColorImageFrame.Height, (4 *
Dados2.ColorImageFrame.Width), format, ptr);
}
}
}

Dados2.ColorImageFrame.CopyPixelDataTo(bytes);
Dados2.PixelData = bytes.ToList();

pictureBox2.Image = Dados2.BitmapImage;

Dados2.LastImageFormat = Dados2.ColorImageFrame.Format;
}
}
if (Kinect2Frame1Concluido)
{
Kinect2Frame1Concluido = false;
Dados2.SensorKinect.Stop();
}
else
Kinect2Frame1Concluido = true;
Dados2.SensorKinect.ColorFrameReady -= new
EventHandler<ColorImageFrameReadyEventArgs>(CoresPronto);
}
}























ANEXO XI Rotinas de manipulao da biblioteca SharpGL
public void openGLControl_OpenGLDraw(object sender, PaintEventArgs e)
{
106

OpenGL gl = this.openGLControl.OpenGL;
gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
gl.LoadIdentity();
gl.Rotate(rotation, (double)nudRotationX.Value, (double)nudRotationY.Value,
(double)nudRotationZ.Value);
Matrix3D identidade = Matrix3D.Identity;
gl.Begin(OpenGL.GL_POINTS);

if (cbImagem1.Checked)
{
foreach (RGBD rgbd in PontoNoEspaco1)
{
gl.Color(rgbd.Cor.R, rgbd.Cor.G, rgbd.Cor.B);
gl.Vertex(rgbd.Ponto.X, rgbd.Ponto.Y, rgbd.Ponto.Z);
}
}
if (cbImagem2.Checked)
{
if (rbAlinhado.Checked)
{
foreach (RGBD rgbd in PontoNoEspaco2Alinhado)
{
gl.Color(rgbd.Cor.R, rgbd.Cor.G, rgbd.Cor.B);
gl.Vertex(rgbd.Ponto.X, rgbd.Ponto.Y, rgbd.Ponto.Z);
}
}
else
{
foreach (RGBD rgbd in PontoNoEspaco2)
{
gl.Color(rgbd.Cor.R, rgbd.Cor.G, rgbd.Cor.B);
gl.Vertex(rgbd.Ponto.X, rgbd.Ponto.Y, rgbd.Ponto.Z);
}
}
}
gl.End();
rotation += 0.0f;
}

public void openGLControl_OpenGLInitialized(object sender, EventArgs e)
{
OpenGL gl = openGLControl.OpenGL;
gl.ClearColor(0, 1, 1, 0); // Cor do vazio
}

public void openGLControl_Resized(object sender, EventArgs e)
{
OpenGL gl = openGLControl.OpenGL;
// Matriz de projeo
gl.MatrixMode(OpenGL.GL_PROJECTION);
gl.LoadIdentity();
gl.Translate((double)nudTranslateX.Value, (double)nudTranslateY.Value,
(double)nudTranslateZ.Value);
gl.Perspective((double)nudPerspectiveFovy.Value, (double)width / (double)height,
(double)nudZNear.Value, (double)nudZFar.Value);

gl.LookAt((double)nudLookAtEyeX.Value, (double)nudLookAtEyeY.Value,
(double)nudLookAtEyeZ.Value, (double)nudLookAtCenterX.Value,
(double)nudLookAtCenterY.Value, (double)nudLookAtCenterZ.Value, 0, 1, 0);
gl.MatrixMode(OpenGL.GL_MODELVIEW);
}

107

public void openGLControl_Atualizar(object sender, EventArgs e)
{
OpenGL gl = openGLControl.OpenGL;
gl.MatrixMode(OpenGL.GL_PROJECTION);
gl.LoadIdentity();
gl.Translate((double)nudTranslateX.Value, (double)nudTranslateY.Value,
(double)nudTranslateZ.Value);
gl.Perspective((double)nudPerspectiveFovy.Value, (double)width / (double)height,
(double)nudZNear.Value, (double)nudZFar.Value);
gl.LookAt((double)nudLookAtEyeX.Value, (double)nudLookAtEyeY.Value,
(double)nudLookAtEyeZ.Value, (double)nudLookAtCenterX.Value,
(double)nudLookAtCenterY.Value, (double)nudLookAtCenterZ.Value, 0, 1, 0);
gl.MatrixMode(OpenGL.GL_MODELVIEW);
}

public float rotation = 0.0f;
















108

ANEXO XII Tabelas de calibrao das cmeras de profundidade

Tabela 2 Calibrao Intrnseca dos sensores de profundidade 30 imagens
SENSORES DE PROFUNDIDADE - 30 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 630,1213488 pxs 818,8236082 pxs
Distncia focal em Y 622,7060721 pxs 808,6344544 pxs
Centro das Lentes em X 296,0779905 pxs 318,4477454 pxs
Centro das Lentes em Y 249,7933605 pxs 190,4574986 pxs
Coeficiente de Distoro Radial K1 0,0290 -0,0100
Coeficiente de Distoro Radial K2 -0,4840 -1,0100
Coeficiente de Distoro Radial K3 0,7880 0,6900
Coeficiente de Distoro Tangencial P1 -0,0080 0,0060
Coeficiente de Distoro Tangencial P2 0,0150 -0,0100
Erro mdio 0,45321 ppc/img 10,230 ppc/img
Erro distribudo 1,12067 ppc/img
501,3292
ppc/img
Tempo de processamento 0:47 horas 0:56 horas
Fonte: o autor.

Onde:
ppc pixels por ponto em comum (distncia em pixels de cada ponto)
Img nmero de imagens











109

Tabela 3 Calibrao Intrnseca dos sensores de profundidade 25 imagens
SENSORES DE PROFUNDIDADE - 25 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 634,7578040 pxs 618,2591887 pxs
Distncia focal em Y 629,8116223 pxs 616,6957958 pxs
Centro das Lentes em X 310,0400027 pxs 312,2788455 pxs
Centro das Lentes em Y 242,6719835 pxs 243,4174451 pxs
Coeficiente de Distoro Radial K1 -0,0100 -0,0100
Coeficiente de Distoro Radial K2 -0,3100 -0,1990
Coeficiente de Distoro Radial K3 0,9900 0,8080
Coeficiente de Distoro Tangencial P1 -0,0070 -0,0020
Coeficiente de Distoro Tangencial P2 0,0050 0,0020
Erro mdio 0,67123 ppc/img 0,749376 ppc/img
Erro distribudo 2,77254 ppc/img
2,626588
ppc/img
Tempo de processamento 0:31 horas 0:29 horas
Fonte: o autor.

Tabela 4 Calibrao Intrnseca dos sensores de profundidade 20 imagens
SENSORES DE PROFUNDIDADE - 20 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 669,2600759 pxs 607,81289 pxs
Distncia focal em Y 654,9244368 pxs 606,30030 pxs
Centro das Lentes em X 294,8814227 pxs 288,38955 pxs
Centro das Lentes em Y 232,1058116 pxs 246,24822 pxs
Coeficiente de Distoro Radial K1 -0,0700 0,0300
Coeficiente de Distoro Radial K2 0,1900 -0,1580
Coeficiente de Distoro Radial K3 1,0490 0,4980
Coeficiente de Distoro Tangencial P1 -0,0030 0,0030
Coeficiente de Distoro Tangencial P2 0,0150 0,0040
Erro mdio 0,89425 ppc/img 0,30842 ppc/img
Erro distribudo 3,45677 ppc/img 0,44928 ppc/img
Tempo de processamento 0:28 horas 0:23 horas
Fonte: o autor.

110

Tabela 5 Calibrao Intrnseca dos sensores de profundidade 15 imagens
SENSORES DE PROFUNDIDADE - 15 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 645,7671250 pxs 666,472296 pxs
Distncia focal em Y 634,2683678 pxs 661,760535 pxs
Centro das Lentes em X 335,3585587 pxs 271,473048 pxs
Centro das Lentes em Y 241,713/6487 pxs 250,476487 pxs
Coeficiente de Distoro Radial K1 -0,0000000000001 -0,1000
Coeficiente de Distoro Radial K2 -0,2000 0,8000
Coeficiente de Distoro Radial K3 0,5000 -0,4000
Coeficiente de Distoro Tangencial P1 -0,0000000000001 -0,000000000001
Coeficiente de Distoro Tangencial P2 -0,0000000000001 -0,000000000001
Erro mdio 0,77423 ppc/img 0,460711 ppc/img
Erro distribudo 3,335672 ppc/img 4,51689 ppc/img
Tempo de processamento 0:20 horas 0:18 horas
Fonte: o autor.

Tabela 6 Calibrao Intrnseca dos sensores de profundidade 10 imagens
SENSORES DE PROFUNDIDADE - 10 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 669,4526524 pxs 668,665481 pxs
Distncia focal em Y 655,5490427 pxs 663,457076 pxs
Centro das Lentes em X 321,9575173 pxs 288,033741 pxs
Centro das Lentes em Y 218,7419424 pxs 242,267229 pxs
Coeficiente de Distoro Radial K1 -0,0000000000001 -0,0200
Coeficiente de Distoro Radial K2 -0,3000 0,4200
Coeficiente de Distoro Radial K3 0,5000 0,2700
Coeficiente de Distoro Tangencial P1 -0,0000000000001 0,0030
Coeficiente de Distoro Tangencial P2 -0,0000000000001 0,0070
Erro mdio 0,91002 ppc/img 1,32425 ppc/img
Erro distribudo 5,23122 ppc/img 9,40800 ppc/img
Tempo de processamento 0:17 horas 0:15 horas
Fonte: o autor.



111

Tabela 7 Calibrao Intrnseca dos sensores de profundidade 6 imagens
SENSORES DE PROFUNDIDADE - 6 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 655,6801489 pxs 593,692226 pxs
Distncia focal em Y 656,9033906 pxs 602,626226 pxs
Centro das Lentes em X 358,6987640 pxs 264,032037 pxs
Centro das Lentes em Y 272,3621986 pxs 263,070478 pxs
Coeficiente de Distoro Radial K1 0,0899 -0,0690
Coeficiente de Distoro Radial K2 -0,5300 -0,0400
Coeficiente de Distoro Radial K3 0,8500 -0,0200
Coeficiente de Distoro Tangencial P1 -0,0040 -0,0090
Coeficiente de Distoro Tangencial P2 0,0210 0,0010
Erro mdio 3,317 ppc/img 1,8659 ppc/img
Erro distribudo 81,132 ppc/img 17,2378 ppc/img
Tempo de processamento 0:06 horas 0:08 horas
Fonte: o autor.

Tabela 8 Calibrao Intrnseca dos sensores de profundidade 3 imagens
SENSORES DE PROFUNDIDADE - 3 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 870,0574953 pxs 1164,61222 pxs
Distncia focal em Y 911,0021030 pxs 1270,02007 pxs
Centro das Lentes em X 787,4621479 pxs 184,22845 pxs
Centro das Lentes em Y 177,7179607 pxs 87,91674 pxs
Coeficiente de Distoro Radial K1 -0,0980 -1,0800
Coeficiente de Distoro Radial K2 0,0180 -0,9600
Coeficiente de Distoro Radial K3 0,0490 0,3300
Coeficiente de Distoro Tangencial P1 -0,0010 0,0999
Coeficiente de Distoro Tangencial P2 -0,0220 -0,0300
Erro mdio 14,8038 ppc/img 63,5585 ppc/img
Erro distribudo 949,991 ppc/img 16494,4 ppc/img
Tempo de processamento 0:02 horas 0:04 horas
Fonte: o autor.


112

ANEXO XIII Tabelas de calibrao das cmeras de cores
Tabela 9 Calibrao Intrnseca dos sensores de cores 30 imagens
SENSORES DE CORES - 30 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 513,3226786 pxs 520,407262 pxs
Distncia focal em Y 507,6505016 pxs 514,166625 pxs
Centro das Lentes em X 301,7987384 pxs 343,775066 pxs
Centro das Lentes em Y 278,7251398 pxs 265,719933 pxs
Coeficiente de Distoro Radial K1 -0,0060 -0,000000000001
Coeficiente de Distoro Radial K2 -0,1080 -0,2000
Coeficiente de Distoro Radial K3 0,0980 0,6000
Coeficiente de Distoro Tangencial P1 -0,0040 -0,000000000001
Coeficiente de Distoro Tangencial P2 0,0001 -0,000000000001
Erro mdio 0,452233 ppc/img 0,6571 ppc/img
Erro distribudo 12,24783 ppc/img 18,8170 ppc/img
Tempo de processamento 2:43 horas 2:50 horas
Fonte: o autor.

Tabela 10 Calibrao Intrnseca dos sensores de cores 25 imagens
SENSORES DE CORES - 25 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 513,3416098 pxs 520,979026 pxs
Distncia focal em Y 507,4126355 pxs 515,229107 pxs
Centro das Lentes em X 301,4232571 pxs 295,830901 pxs
Centro das Lentes em Y 277,6161719 pxs 265,570582 pxs
Coeficiente de Distoro Radial K1 -0,0000000000001 0,0050
Coeficiente de Distoro Radial K2 -0,1000 -0,1920
Coeficiente de Distoro Radial K3 0,7000 0,3060
Coeficiente de Distoro Tangencial P1 -0,0000000000001 -0,0020
Coeficiente de Distoro Tangencial P2 -0,0000000000001 0,0030
Erro mdio 0,571253 ppc/img 0,699783 ppc/img
Erro distribudo 15,56721 ppc/img
21,27374
ppc/img
Tempo de processamento 1:57 horas 2:00 horas
Fonte: o autor.

113

Tabela 11 Calibrao Intrnseca dos sensores de cores 20 imagens
SENSORES DE CORES - 20 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 514,2437423 pxs 509,8542118 pxs
Distncia focal em Y 507,4107491 pxs 504,8398494 pxs
Centro das Lentes em X 301,2885388 pxs 303,0077587 pxs
Centro das Lentes em Y 278,8845097 pxs 263,4650693 pxs
Coeficiente de Distoro Radial K1 -0,0100 -0,0100
Coeficiente de Distoro Radial K2 -0,2100 -0,1940
Coeficiente de Distoro Radial K3 0,6900 0,8020
Coeficiente de Distoro Tangencial P1 -0,0040 0,0060
Coeficiente de Distoro Tangencial P2 0,0020 -0,0050
Erro mdio 0,82295 ppc/img 0,72265 ppc/img
Erro distribudo 24,0092 ppc/img 23,8011 ppc/img
Tempo de processamento 1:33 horas 1:25 horas
Fonte: o autor.

Tabela 12 Calibrao Intrnseca dos sensores de cores 15 imagens
SENSORES DE CORES - 15 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 511,2799337 pxs 503,9364710 pxs
Distncia focal em Y 505,8492668 pxs 504,2326377 pxs
Centro das Lentes em X 299,5937068 pxs 292,8519824 pxs
Centro das Lentes em Y 276,0872519 pxs 265,6270531 pxs
Coeficiente de Distoro Radial K1 -0,0100 -0,1500
Coeficiente de Distoro Radial K2 -0,1100 0,6200
Coeficiente de Distoro Radial K3 0,2100 -0,3500
Coeficiente de Distoro Tangencial P1 -0,0040 -0,0100
Coeficiente de Distoro Tangencial P2 -0,0000000000001 0,0100
Erro mdio 0,9935 ppc/img 0,76763 ppc/img
Erro distribudo 37,1992 ppc/img 34,3322 ppc/img
Tempo de processamento 1:23 horas 1:00 hora
Fonte: o autor.


114

Tabela 13 Calibrao Intrnseca dos sensores de cores 10 imagens
SENSORES DE CORES - 10 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 543,5084663 pxs 485,9614361 pxs
Distncia focal em Y 537,1012206 pxs 488,6488925 pxs
Centro das Lentes em X 323,0513995 pxs 288,6411526 pxs
Centro das Lentes em Y 278,0483949 pxs 268,8201968 pxs
Coeficiente de Distoro Radial K1 -0,0500 -0,1000
Coeficiente de Distoro Radial K2 -0,1600 0,7000
Coeficiente de Distoro Radial K3 0,7800 -0,6000
Coeficiente de Distoro Tangencial P1 -0,0100 -0,000000000001
Coeficiente de Distoro Tangencial P2 -0,0000000000001 -0,000000000001
Erro mdio 1,58762 ppc/img 0,88768 ppc/img
Erro distribudo 54,12383 ppc/img 38,2743 ppc/img
Tempo de processamento 1:28 horas 0:30 horas
Fonte: o autor.

Tabela 14 Calibrao Intrnseca dos sensores de cores 6 imagens
SENSORES DE CORES - 6 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 570,2010760 pxs 518,8985180 pxs
Distncia focal em Y 561,1116127 pxs 528,7893111 pxs
Centro das Lentes em X 336,1761932 pxs 254,6696629 pxs
Centro das Lentes em Y 266,3414945 pxs 247,3186505 pxs
Coeficiente de Distoro Radial K1 -0,1000 -0,0920
Coeficiente de Distoro Radial K2 0,7980 0,3000
Coeficiente de Distoro Radial K3 -0,7100 0,0070
Coeficiente de Distoro Tangencial P1 -0,0010 -0,000000000001
Coeficiente de Distoro Tangencial P2 0,0040 0,0001
Erro mdio 0,56239 ppc/img 0,498991 ppc/img
Erro distribudo 24,12327 ppc/img 28,1290 ppc/img
Tempo de processamento 0:48 horas 0:23 horas
Fonte: o autor.


115

Tabela 15 Calibrao Intrnseca dos sensores de cores 3 imagens
SENSORES DE CORES - 3 IMAGENS
KINECT

1 KINECT

2
Distncia focal em X 551,0239353 pxs 522,2706025 pxs
Distncia focal em Y 543,1638079 pxs 537,7887195 pxs
Centro das Lentes em X 325,4090716 pxs 238,2086881 pxs
Centro das Lentes em Y 256,9286692 pxs 234,2989505 pxs
Coeficiente de Distoro Radial K1 -0,0300 -1,0690
Coeficiente de Distoro Radial K2 0,5100 -0,7680
Coeficiente de Distoro Radial K3 -0.6800 -0,7410
Coeficiente de Distoro Tangencial P1 -0,0000000000001 0,0670
Coeficiente de Distoro Tangencial P2 0,0010 0,2100
Erro mdio 7,434 ppc/img 11,41916 ppc/img
Erro distribudo 3322,04 ppc/img
881447,4
ppc/img
Tempo de processamento 0:10 horas 0:07 horas
Fonte: o autor.

You might also like