Um Estudo das Técnicas de Obtenção de Forma a partir de...
-
Upload
phamnguyet -
Category
Documents
-
view
217 -
download
0
Transcript of Um Estudo das Técnicas de Obtenção de Forma a partir de...
Gabriel Tavares Malizia Alves
Um Estudo das Técnicas de Obtenção de Forma a partir de Estéreo e Luz Estruturada
para Engenharia
Dissertação de Mestrado
Dissertação apresentada como requisito parcial para a obtenção do Título de Mestre pelo Programa de Pós-Graduação de Informática da PUC-Rio.
Orientador: Professor Marcelo Gattass
Co-orientador: Professor Paulo Cezar Carvalho
Aos meus pais.
Agradecimentos
A Deus, nosso Pai de amor infinito, por viver, aprender, compartilhar, errar e consertar,
sempre seguindo em frente.
À minha família. Em especial aos meus pais Nelson Malizia Alves e Maria Alzemira
Tavares de Oliveira. Tudo que sou e conquistei é fruto de seus muitos anos de dedicação
e apoio. Se Deus concede aos pais a missão de criar os seus filhos, dando amor,
educação, ensinamentos e bons exemplos para que estes tenham todas as condições para
se tornarem homens de bem, então meus pais cumpriram a sua missão com louvor.
À minha namorada Maraísa Martinha Gambarra, pelo carinho e companheirismo ao
longo destes dois anos juntos.
Ao meu orientador e Professor Marcelo Gattass pelos importantes conhecimentos
adquiridos. Em especial pelas aulas que transmitiram grande experiência de um mestre
com anos de estrada, organização e entusiasmo de quem realmente gosta do que faz.
Ao Professor Paulo Cezar Coelho, pessoa de grandes conhecimentos, pelos importantes
sugestões dadas ao trabalho.
Aos Professores de Mestrado Bruno Feijó, Clarisse Sieckenius de Souza, Luiz Henrique
de Figueiredo, Ruy Luiz Milidiú e Waldemar Celes Filho por tudo que aprendi ao longo
destes dois anos e que certamente foi base deste trabalho e de outros.
A Anselmo Antunes Montenegro e Asla Medeiros e Sá pelas importantes contribuições
dadas a este trabalho.
À CAPES pelo importante apoio financeiro e ao Departamento de Informática da PUC-
RIO pela oportunidade de estudar nesta unidade que continua a estabelecer os
parâmetros de excelência em ensino e pesquisa no Brasil.
Aos amigos e colegas, de mestrado e do Tecgraf, Calomeni, Felipe, Gustavo, Hedlena,
Manuel, Márcio Henrique, Marcos, Michel, Rodrigo, Romano e Tiago pelos bons
momentos vividos juntos, apoio e amizade.
Aos meus coordenadores do Tecgraf Alberto Barbosa Raposo, Carlos Cassino e
Eduardo Thadeu Leite Corseuil pelas oportunidades de crescimento profissional,
projetos desenvolvidos e conhecimentos transmitidos.
Aos amigos e irmãos da Casa Sentimento.
Resumo
Malizia, Gabriel; Gattass, Marcelo (Orientador); Carvalho, Paulo Cezar (Co-
orientador); Um Estuda das Técnicas de Obtenção de Forma a partir de
Estéreo e Luz Estruturada para Engenharia; Rio de Janeiro, 2005. 82p.
Dissertação de Mestrado – Departamento de Informática, Pontifícia Universidade
Católica do Rio de Janeiro.
Há uma crescente demanda pela criação de modelos computacionais
representativos de objetos reais para projetos de engenharia. Uma alternativa barata e
eficaz consiste na utilização de técnicas de Visão Computacional baseada em câmeras e
projetores disponíveis no mercado de computadores pessoais.
Este trabalho avalia um sistema óptico estéreo ativo para capturar formas
geométricas de objetos utilizando um par de câmeras e um projetor digital. O sistema se
baseia em idéias de trabalhos anteriores, com duas contribuições nesta dissertação. A
primeira é uma técnica mais robusta de detecção de pontos notáveis em padrões de
calibração das câmeras. A segunda contribuição consiste num novo método de ajuste de
cilindros que visa aplicar o sistema estudado na inspeção de instalações de dutos
industriais.
As conclusões apresentadas procuram avaliar a robustez e precisão do sistema
proposto como um instrumento de medidas em Engenharia.
Palavras-Chave
Luz estruturada, mapa 3D estéreo, calibração de câmera coplanar, reconhecimento
de formas.
Abstract
Malizia, Gabriel; Gattass, Marcelo (Supervisor); Carvalho, Paulo Cezar (Co-
supervisor); A Study of Techniques for Shape acquisition using Stereo and
Structured Light aimed for Engineering; Rio de Janeiro, 2005. 82p. M.Sc.
Dissertation – Departamento de Informática, Pontifícia Universidade Católica do
Rio de Janeiro.
There has been a growing demand for creation of computer models based on real
models for engineering projects. A cheap and effective alternative consists in using
Computer Vision techniques based on cameras and projectors available at the personal
computer market.
This work evaluates a stereo optic system for capturing geometric shapes from
objects using a pair of cameras and a single digital projector. The system is based on
former works and a pair of contributions is obtained at this dissertation. The first
contribution is a more robust technique for finding corners and points at cameras
calibration patterns. And the second one consists on a new method for cylinder fit for
inspecting industrial piping facilities with the studied system.
The final conclusions evaluate the robustness and precision from the proposed
system as a measurement tool for Engineering.
Keywords
Structured light, stereo 3D map, coplanar camera calibration, shape recognition.
Sumário
1 Introdução ..........................................................................................................9 2 Visão Computacional e Obtenção de Formas .......................................... 11
2.1 Visão Computacional ............................................................................. 11 2.2 Forma a partir de Estéreo Ativo ........................................................... 12
2.2.1 Codificação Temporal .................................................................... 15 2.2.2 Codificação Espacial ...................................................................... 17 2.2.3 Codificação Modulada .................................................................... 18 2.2.4 Codificação com Cores .................................................................. 19 2.2.5 Classificação dos Métodos ........................................................... 20 2.2.6 Sistema Estudado ........................................................................... 22
3 Sistema Estudado ........................................................................................... 24 3.1 Calibração de Câmera ............................................................................ 24
3.1.1 Padrão com Elipses ........................................................................ 31 3.1.2 Padrão com Vértices ....................................................................... 33
3.2 Luz Estruturada Codificada .................................................................. 38 3.3 Captura e Processamento de Imagem ................................................ 41 3.4 Triangulação e Modelo Final ................................................................. 48
4 Implementação, Resultados e Testes ......................................................... 53 4.1 Implementação ........................................................................................ 53
4.1.1 Shaper ................................................................................................ 53 4.1.2 Visualizer ........................................................................................... 55 4.1.3 Arquivo de Saída ............................................................................. 56
4.2 Resultados ................................................................................................ 57 4.2.1 Padrões de Calibração ................................................................... 60 4.2.2 Câmeras ............................................................................................ 61 4.2.3 Projetores .......................................................................................... 62
4.3 Testes ........................................................................................................ 63 4.3.1 Primeiro Teste .................................................................................. 63 4.3.2 Segundo Teste ................................................................................. 66
5 Conclusão ........................................................................................................ 71 5.1 Trabalhos Futuros ................................................................................... 73
6 Referências Bibliográficas ............................................................................ 74 Apêndice A – OpenCV ........................................................................................... 77 Apêndice B – Tabelas de Dados dos Testes .................................................... 80
B.1 Primeiro Teste .......................................................................................... 80 B.2 Segundo Teste ......................................................................................... 82
1 Introdução
A Visão Computacional é uma área de pesquisa relativamente nova e que tem por
objetivo estimar ou explicitar as propriedades geométricas e dinâmicas do mundo
tridimensional a partir de imagens digitais. Uma das suas aplicações, estudada neste
trabalho, é a aquisição de formas geométricas de objetos a partir de imagens capturadas
com câmeras digitais. Comparando com outras técnicas de obtenção de formas, esta
alternativa é barata e consegue alcançar bons resultados utilizando câmeras e projetores
disponíveis no mercado de computadores pessoais.
Este trabalho avalia um sistema óptico para capturar formas geométricas de
objetos. Para isso utilizou-se um par de câmeras, previamente calibradas, em uma
configuração estérea e um projetor digital para projetar padrões de luz estruturada sobre
os objetos e resolver a correlação entre as imagens das câmeras. A partir destas
informações, criam-se modelos geométricos correspondentes aos objetos capturados,
caracterizando o sistema como um sistema óptico estéreo ativo.
O sistema se baseia em idéias de trabalhos anteriores, com duas contribuições
nesta dissertação. A primeira é uma técnica mais robusta de detecção de pontos notáveis
em padrões de calibração das câmeras, com uma precisão menor do que um pixel. São
apresentados dois padrões de calibração distintos, cada um com vantagens e
desvantagens, que podem ser reutilizados em outras aplicações, inclusive em sistemas
que trabalham em tempo real. A segunda contribuição consiste num novo método de
ajuste de cilindros que visa aplicar o sistema estudado na inspeção de instalações de
dutos industriais. A partir do modelo de um duto, calculam-se informações de interesse,
como raio e direção. A inspeção automática é uma subárea de estudos da Visão
Computacional e procura auxiliar tarefas de inspeção diminuindo o tempo gasto com
rotinas repetitivas, permitindo uma investigação remota e disponibilizando ferramentas
de medidas para apoio a decisões.
Assim, esta dissertação procura avaliar a robustez e precisão do sistema estudado
como um instrumento de medidas em Engenharia. Ela foi organizada em cinco
capítulos, incluindo este primeiro capítulo de introdução. Os demais capítulos estão
descritos a seguir.
1 Introdução
10
O segundo capítulo dá uma descrição geral da Visão Computacional, de suas
propriedades e aplicações. Depois são apresentados os conceitos teóricos da captura de
formas a partir de estéreo ativo, focando nos diversos métodos de codificação de luz
estruturada, seus benefícios e limitações.
No terceiro capítulo, encontra-se a descrição do sistema estudado. Cada um dos
pontos do sistema é descrito, apresentando os conceitos teóricos importantes para o
entendimento do trabalho: calibração de câmeras e padrões de calibração, codificação
de luz estruturada utilizada, captura e processamento de imagens e triangulação para
gerar o modelo final.
O quarto capítulo apresenta as duas aplicações implementadas. Em seguida são
apresentados os resultados obtidos junto com as observações e comentários pertinentes.
Por último apresentamos os dois testes realizados em cima da implementação do
sistema.
Finalmente o quinto capítulo encerra este trabalho com uma seção de conclusão e
outra recomendando possíveis trabalhos futuros. As referências bibliográficas se
encontram ao final da dissertação, assim como os apêndices.
2 Visão Computacional e Obtenção de Formas
Neste capítulo são abordadas as principais propriedades e áreas de atuação da
Visão Computacional e sua característica multidisciplinar. Depois são apresentados os
conceitos teóricos da captura de formas a partir de estéreo ativo, focando nos diversos
métodos de codificação de luz estruturada, seus benefícios e limitações.
2.1 Visão Computacional
Visão Computacional foi definida em [2], sendo o conjunto de técnicas
computacionais para estimar ou explicitar as propriedades geométricas e dinâmicas do
mundo tridimensional a partir de imagens.
A palavra visão está relacionada à capacidade que um ser tem de ver e entender o
mundo em que habita. A imagem é formada na mente através das organizações física,
química e biológica dos olhos. Em cima da visão, o cérebro realiza diversas funções.
Por exemplo, em um movimento para se pegar um copo, a visão tem papel fundamental
junto com a coordenação motora. Através da visão guiamos a nossa mão até o copo,
encaixando os dedos no seu corpo cilíndrico. Gestos simples como esses realizamos aos
milhares por dia sem nos darmos conta, porém que se tornam extremamente difíceis
sem a visão, como andar. Diariamente utilizamos nossa visão para reconhecer objetos,
pessoas, calcular distâncias, verificar se há buracos na rua, nuvens cinzas no céu,
encontrar uma vaga livre no estacionamento etc.
O mesmo se sucede na Visão Computacional. Ao invés dos olhos, câmeras são
utilizadas para se obter imagens digitais. Em cima destas imagens são aplicadas técnicas
computacionais para extrair informações desejadas do mundo tridimensional. Estas
informações variam muito de natureza e podem ser empregadas para variadas
aplicações em diferentes áreas. Na medicina, imagens de órgãos e células são utilizadas
no diagnóstico e tratamento de doenças. Na robótica a contribuição é ampla com
identificação de objetos, localização, inspeção e locomoção. Há também aplicações
militares para guiar mísseis e veículos através de trajetórias pré-definidas. A astronomia
utiliza imagens de satélites e telescópios para identificar a composição química de
planetas e criar um modelo da sua superfície enquanto que a indústria automobilística
2 Visão Computacional e Obtenção de Formas
12
utiliza imagens digitais em sistemas de inspeção industrial. Estes são alguns exemplos
de áreas e aplicações onde são empregadas técnicas de Visão Computacional.
Computação Gráfica e Processamento de Imagens são duas áreas correlacionadas
à Visão Computacional. De uma maneira geral, a Computação Gráfica utiliza
informações, como grafos de cena, tipos de materiais, geometria dos objetos, tipo de
projeção utilizada etc. para gerar imagens. A Visão Computacional faz o caminho
contrário, procurando obter informações de cenas a partir de imagens digitais
previamente capturadas. Para isso quase sempre faz uso de métodos de Processamento
de Imagens. O interesse nestes métodos surgiu da necessidade de melhorar a qualidade
da informação pictórica para a interpretação humana. Hoje em dia estes métodos são
também utilizados em aplicações de Visão Computacional, de maneira que as duas
áreas se confundem.
Por fim, apresentamos uma outra definição, segundo Vishvjit Nalwa [18]: a Visão
Computacional visa inferir e descrever automaticamente estruturas e propriedades de
um mundo 3D, possivelmente dinâmico, a partir de uma ou múltiplas imagens 2D do
mundo. As imagens podem ser coloridas ou monocromáticas, captadas por um ou
múltiplos sensores que, por sua vez, podem ser estacionários ou móveis.
2.2 Forma a partir de Estéreo Ativo
Uma das áreas de pesquisa da Visão Computacional é a aquisição de modelos
geométricos de objetos reais a partir de imagens. O processo de se obter a forma e
aparência de objetos reais, utilizando-se câmeras e luzes, é chamado de fotografia 3D. A
rápida evolução de equipamentos eletrônicos, como câmeras e projetores, permite que
se monte sistemas de aquisição de baixo custo e cada vez mais eficazes. Modelos
geométricos de objetos reais são utilizados por diferentes áreas, tipicamente design
industrial, jogos, educação, arte, arqueologia, comércio eletrônico etc. Com o advento
de métodos e equipamentos, mais áreas poderão fazer uso destes modelos como, por
exemplo, inspeção industrial.
Uma classificação dos métodos para aquisição de formas é dada na figura 2.1.
Existem diferentes métodos ópticos para aquisição de formas, cada um com suas
qualidades e limitações, tais como resolução e precisão. A escolha deve ser feita tendo
2 Visão Computacional e Obtenção de Formas
13
em vista o contexto de utilização. Por exemplo, modelar um navio é diferente do que
modelar um carro. As principais limitações dos métodos ópticos é que estes podem
obter apenas porções visíveis da superfície e são sensíveis a suas propriedades como
transparência, brilho, textura, falta de cor etc. Esta dissertação está focada no estudo dos
métodos ópticos, mais precisamente em métodos estéreos ativos, em destaque na figura.
Figura 2.1 – Classificação dos métodos de aquisição de formas.
Os princípios básicos utilizados pelos métodos ópticos são os mesmos da visão
estéreo. Se duas câmeras observam um mesmo ponto na cena, então a sua posição pode
ser obtida através da interseção dos raios correspondentes à projeção na imagem de cada
câmera. Esse processo é chamado de triangulação.
A grande dificuldade de se utilizar visão estéreo para recuperar formas 3D é
realizar a correspondência entre os pontos nas duas imagens. Os algoritmos que
realizam esta correspondência têm dificuldades quando a cena é muito complexa ou
simples demais. Por exemplo, objetos lisos e monocromáticos geram uma falta de
textura nas imagens capturadas, impossibilitando o processamento da correspondência.
Uma maneira de contornar este problema é empregar o método estéreo ativo.
Utilizando uma fonte de luz, a cena é marcada por padrões conhecidos. Esta fonte de luz
é chamada de luz estruturada. Cada tipo de luz estruturada possui um conjunto de
padrões próprios que são projetados sobre a cena para marcá-la. Por exemplo, podemos
2 Visão Computacional e Obtenção de Formas
14
projetar um padrão de apenas um ponto com um dispositivo laser. Este ponto é
projetado sobre o objeto, cuja forma gostaríamos de obter. Basta então encontrar este
mesmo ponto nas duas imagens obtidas e fazer a triangulação posteriormente para
encontrar a sua localização no espaço. Poderíamos repetir este processo deslocando o
ponto de lugar para obtermos mais pontos do modelo. Porém este procedimento seria
extremamente demorado. Daí a necessidade de utilizarmos luz estruturada para acelerar
a velocidade de captura.
Podemos, por exemplo, projetar um padrão com vários pontos sobre a cena. Para
distinguir entre os diversos pontos e realizar a triangulação, devemos codificá-los
apropriadamente de maneira a identificá-los posteriormente para que o problema de
correspondência possa ser feito sem ambigüidades. Assim estaremos acelerando a
velocidade de captura ao aumentar o número de pontos projetados simultaneamente.
A figura 2.2 mostra um exemplo de sistema estéreo ativo utilizado em [13]. O
projetor é usado para projetar padrões de luz estruturada com listras codificadas sobre a
cena que é capturada por uma câmera digital.
Figura 2.2 – Exemplo de sistema estéreo ativo capturando uma cena.
Podemos utilizar duas configurações distintas. A primeira seria manter as duas
câmeras, enquanto que a luz estruturada serviria para marcar o objeto com vários pontos
distintos que são utilizados posteriormente na triangulação. A segunda seria utilizar uma
câmera e uma fonte de luz calibrada, onde sua posição e direção de projeção são
2 Visão Computacional e Obtenção de Formas
15
conhecidas. A triangulação é feita entre a câmera e o projetor. Para cada ponto
codificado no padrão projetado podemos traçar um raio, que sai do centro da fonte de
luz, de maneira semelhante com o que fazemos com uma câmera calibrada.
Em resumo, os três passos importantes para recuperar formas com um sistema
estéreo ativo são:
• Calibrar as câmeras.
• Estabelecer a correspondência entre os pontos nas imagens e os elementos dos
padrões projetados.
• Reconstrução das coordenadas 3D de pontos da cena.
A calibração de câmera é tratada no próximo capítulo, assim como a reconstrução
das coordenadas 3D de pontos da cena. Esta seção se concentra no segundo passo. Dois
estudos foram feitos a respeito de métodos que utilizam luzes estruturadas codificadas
para resolver o problema de correspondência em [21] e [10]. Esta seção foi baseada
neste último e não tem por objetivo reproduzir todas as descrições de métodos de
codificação de luz estruturada.
As diferentes abordagens para codificação da luz estruturada são apresentadas a
seguir.
2.2.1 Codificação Temporal
A codificação temporal é o método de codificação mais utilizado pelos trabalhos
atuais. A idéia principal se baseia em projetar uma seqüência de padrões onde cada
elemento do padrão codifica os dígitos binários de um código. Na figura 2.2, padrões
com listras são projetados sobre a cena seqüencialmente. O código binário é convertido
para listras brancas e pretas. As brancas correspondem ao dígito binário um, enquanto
que as listras pretas representam o dígito binário zero.
Para distinguir entre as diversas listras, deve-se codificá-las apropriadamente de
maneira que o problema de correspondência possa ser resolvido sem ambigüidades. Isso
é feito projetando-se uma seqüência de padrões com listras, um após o outro, em uma
codificação temporal.
2 Visão Computacional e Obtenção de Formas
16
Figura 2.3 – Codificação temporal binária.
Os padrões são projetados em diferentes momentos, em uma seqüência definida.
Cada listra em um padrão projetado corresponde a um dígito binário, de maneira que a
seqüência de padrões fornece os dígitos de um código binário. Cada listra é
univocamente determinada pelo seu código. A figura 2.3 mostra que a seqüência de n
padrões produz 2n listras codificadas e a resolução cresce exponencialmente com o
número de padrões utilizados. Repetimos a mesma seqüência de padrões, porém com
listras horizontais. No final, teremos iluminado a cena estática com nn 22 × regiões,
cada uma com seu código horizontal e vertical. A figura 2.4 ilustra o aspecto de um
objeto iluminado por um dos padrões da luz estruturada codificada.
Figura 2.4 – Objeto iluminado por luz estruturada.
2 Visão Computacional e Obtenção de Formas
17
Em [23] foi proposta a codificação temporal binária apresentada acima. Já em [26]
foi proposta a mesma codificação binária, porém para cada padrão projetado também se
projetava o seu inverso correspondente, onde as linhas pretas eram projetadas brancas e
vice-versa. Isso permite uma melhor identificação de cada listra, como iremos ver na
seção Captura e Processamento de Imagens do terceiro capítulo.
A codificação binária foi substituída pela codificação de Gray em [22]. Esta
segunda codificação mais robusta, utilizada neste trabalho, é apresentada também no
terceiro capítulo.
2.2.2 Codificação Espacial
A codificação espacial requer apenas um único slide a ser projetado, permitindo a
aquisição de cenas dinâmicas. Porque se utiliza apenas um slide, este possui um maior
número de elementos padronizados de maneira a garantir a resolução desejada. Na
codificação espacial a vizinhança de um pixel é utilizada para codificar a sua posição. A
maior dificuldade deste método é recuperar o padrão projetado sobre o objeto
modelado, limitando o tipo de superfícies capturadas. Os dois códigos seguintes são
apresentados representando as várias abordagens existentes de codificação espacial.
Figura 2.5 – Padrões de codificação espacial.
Padrões de grid
Esta codificação consiste em utilizar um conjunto de listras como guia. Muitos
padrões diferentes baseados neste princípio podem ser criados. Um exemplo pode
ser visto na figura a5.2 onde a grade de listras é parcialmente codificada com
2 Visão Computacional e Obtenção de Formas
18
quadrados usados como referência [25]. Ambos os eixos são codificados
simultaneamente. A limitação desta abordagem é que descontinuidades na superfície
do objeto produzem também uma descontinuidade nos identificadores, podendo
fazer com que o decodificador se perca.
Matriz Codificada
Esta codificação, proposta em [27], consiste em projetar uma matriz de pontos.
Cada linha horizontal da matriz codifica uma palavra. Inicialmente é projetada uma
matriz contendo todos os pontos para extrair a posição de cada um deles.
Posteriormente projeta-se a matriz codificada. As figuras b5.2 e c5.2 ilustram as
matrizes. A dificuldade deste método está em determinar cada ponto, que pode ter
sua forma modificada pela superfície do objeto capturado. O tamanho de cada ponto
deve manter uma relação com a resolução de captura, limitando o tamanho da
matriz.
2.2.3 Codificação Modulada
Outra possibilidade é modular a intensidade da luz projetada, como foi proposta
em [28]. A posição de um pixel pode ser codificada, sem utilizar informação de
vizinhança, em função da intensidade da luz modulada. Projeta-se posteriormente um
padrão de iluminação constante, o qual é utilizado também para a decodificação,
limitando a sua aplicação a cenas estáticas. Utiliza-se a diferença de intensidade para
recuperar a posição dos pixels.
Figura 2.6 – Padrão de luz modulada.
Esta abordagem é sensível a ruídos da câmera e a certas superfícies. Texturas
podem interferir na decodificação, tornando o método não robusto.
2 Visão Computacional e Obtenção de Formas
19
2.2.4 Codificação com Cores
Os avanços tecnológicos na captura de imagens permitiram a utilização de cores
nos padrões projetados. A vantagem está em se utilizar três canais simultaneamente ao
invés de apenas um. O grande problema da sua utilização está na recuperação. Luz
colorida em superfícies coloridas não se comporta de maneira desejada, o que limitava a
sua utilização a cenas com cores neutras nos primeiros trabalhos.
Em [29] são utilizadas listras coloridas com fendas entre elas. A figura a7.2
ilustra o padrão. A codificação é feita através da seqüência utilizada. A mesma idéia de
se modular a intensidade da luz foi feita em [30] utilizando-se cores, gerando o padrão
arco-íris da figura b7.2 . Já em [31] utilizou-se um padrão periódico, ilustrado na figura
c7.2 , feito a partir da união dos padrões de intensidade senoidal das três cores fora de
fase entre si, representadas na figura d7.2 .
Figura 2.7 – Padrões com cores.
2 Visão Computacional e Obtenção de Formas
20
Um estudo teórico para determinar o maior tamanho possível de uma matriz
formada por pontos e codificada com um certo número de cores foi feito em [32].
Quando maior a matriz, maior a resolução obtida. A posição de cada ponto é codificada
pela sua cor e as cores dos seus quatro vizinhos: superior, inferior, esquerdo e direito.
Ambos os eixos são codificados simultaneamente. A figura a8.2 ilustra uma matriz
gerada. Dependendo da cena, algumas vezes são difíceis de se determinar os vizinhos,
como é ilustrado na figura b8.2 .
Figura 2.8 – Padrões com cores.
Mais recentemente foi proposto em [10] a utilização de um código de Gray
colorido, onde cada um dos três canais de cores contém um slide que corresponde a um
slide da seqüência de slides de Gray. Essa abordagem divide o número de slides
necessários por três do padrão de Gray original para uma mesma resolução. Na prática
esta redução permite capturar cenas dinâmicas utilizando um método de codificação
temporal como mostram os resultados apresentados.
2.2.5 Classificação dos Métodos
Como vimos ao longo desta seção, há três possíveis maneiras de se codificar a luz
projetada: codificação espacial, codificação temporal e modulação de cores através da
intensidade projetada. Uma taxonomia foi proposta em [32] baseada na diferenças entre
os padrões e as restrições que estes impõem à cena a ser capturada.
Modulação cromática impõe restrições às cores permitidas na cena. Quando
codificação espacial é utilizada, continuidade local da cena é necessária para se
2 Visão Computacional e Obtenção de Formas
21
recuperar o código transmitido. Já a codificação temporal restringe o movimento da
cena. A tabela abaixo apresenta o resumo destas idéias.
Hipóteses Métodos Restrições
Coerência espacial Métodos baseados na
vizinhança
Descontinuidades na superfície do
objeto não são permitidas
Coerência temporal
Muitos slides
Versus
Um slide
Restrito a cenas estáticas
Versus
Permite cenas dinâmicas
Refletividade
Binário / tons de cinza
Versus
Codificação com cores
Nenhuma restrição de cor
Versus
Objetos com cores neutras
Figura 2.9 – Taxonomia baseada nas diferenças e restrições dos padrões.
Uma outra taxonomia foi proposta em [10], na qual é feita uma analogia entre luz
estruturada codificada e um sistema de comunicação digital. As coordenadas do projetor
são codificadas pelos padrões e transmitidas para a cena. Para cada ponto na imagem da
câmera uma transmissão com ruído é recebida e precisa ser decodificada. Portanto cada
sensor da câmera age como um receptor e a imagem capturada como um conjunto de
símbolos recebidos. O meio de transmissão é a superfície do objeto capturado e a
mensagem é a posição codificada pelo pixel do projetor. Tendo em vista esta analogia,
duas questões devem ser estudadas: as limitações do canal de transmissão, relacionado
com as propriedades da superfície, e qual codificação utilizar, o que irá restringir os
tipos de objetos capturáveis.
Ao contrário da taxonomia anterior, nesta outra é o código utilizado que impõe
restrições à cena (meio de transmissão). Por exemplo, se utilizarmos codificação
espacial, a cena deve preservar a estrutura espacial, caso contrário haverá perda de
informação. As principais características de um código são o número de símbolos
distintos (sinais básicos), o tamanho da palavra composta por símbolos e, no caso de
codificação espacial, a geometria utilizada.
2 Visão Computacional e Obtenção de Formas
22
Método
Número de slides
(tamanho da palavra)
Intensidade de modelação / canais
(número de caracteres)
Vizinhança (região do caractere)
Resolução (tamanho do
alfabeto)
Código de Gray
n Binário (2) /
monocromático Pixel único 2n linhas
Cód. de Gray colorido
n Binário (2) / RGB Pixel único 23n linhas
Padrão arco-íris
2 28 / RGB Pixel único (28)3 linhas
Matriz de pontos
1 3 (R, G, B) Quatro
vizinhos 35
Figura 2.10 – Taxonomia baseada em transmissões de dados digitais.
Deste ponto de vista fica claro de perceber que o código impõe restrições aos
objetos capturados. A estrutura espacial da codificação é perdida quando há
descontinuidades na superfície do objeto capturado. Também é necessário recuperar a
intensidade de modulação corretamente, o que requer que a superfície não distorça
intensidades ou cores demasiadamente. Finalmente, o tamanho da palavra codificada
impede que haja movimento enquanto a palavra ainda não esteja completa.
2.2.6 Sistema Estudado
O sistema estudado neste trabalho para aquisição de formas geométricas pode ser
classificado como um sistema óptico estéreo ativo. Ele composto por duas câmeras de
vídeo e um projetor digitais ligados ao computador. O par de câmeras são calibrados
simultaneamente com o mesmo padrão de calibração. Como foi visto, a correspondência
entre pontos nas imagens das duas câmeras é feita projetando-se luz estruturada
codificada na cena.
A codificação temporal foi escolhida para este trabalho, pois permite capturar uma
maior variedade de cenas e objetos sem restrições de continuidade nas superfícies
capturadas e de cores neutras. A princípio não estamos interessados em capturar cenas
dinâmicas, mas na robustez da decodificação e na precisão do sistema. Utilizou-se o
código binário de Gray monocromático que permite capturar cenas com diferentes cores
e exige menos do hardware utilizado.
O modelo 3D final é constituído por pontos no espaço, obtidos triangulando
pontos correspondentes nas duas câmeras. A figura 2.11 mostra a disposição física do
2 Visão Computacional e Obtenção de Formas
23
sistema. Cada câmera é posicionada de um lado do projetor, de maneira a melhor
capturar o par de imagens.
Figura 2.11 – Disposição física do sistema.
O próximo capítulo apresenta os conceitos teóricos envolvidos no trabalho que
não foram apresentados neste capítulo.
3 Sistema Estudado
Neste capítulo descrevemos o sistema estudado e posteriormente implementado
para a captura de modelos computacionais e os conceitos teóricos envolvidos. Cada
ponto é aprofundado nas seções correspondentes, divididas em calibração de câmeras,
luz estruturada codificada utilizada, captura e processamento de imagens, triangulação e
modelo final.
3.1 Calibração de Câmera
O primeiro passo do sistema estudado consiste em calibrar as duas câmeras.
Calibrar uma câmera é determinar os valores dos parâmetros extrínsecos e intrínsecos
da mesma. Em outras palavras, a calibração consiste em determinar a posição e
orientação da câmera em relação a uma referência fixa e obter suas características
óptica, geométrica e digital.
Figura 3.1 – Modelo de Câmera de Tsai.
Entre os diversos métodos existentes para calibração de câmera, utilizou-se o
método proposto por Tsai em [3] e [4] nesta tese. O modelo de câmera de Tsai é
baseado no modelo de projeção perspectiva de câmera completa, com lentes, e possui
3 Sistema Proposto
25
um conjunto de parâmetros extrínsecos e outro de parâmetros intrínsecos. Cada
conjunto de parâmetros pode ser estimado separadamente. Os parâmetros utilizados
estão descritos nesta seção.
A figura 3.1 ilustra o modelo utilizado. O sistema de coordenadas do mundo é
definido por ( )www ZYX ,, , sendo wO a origem do mundo. O sistema de coordenadas em
relação à câmera é dado por ( )ccc ZYX ,, , sendo cO a origem deste sistema. O primeiro
passo do algoritmo é determinar a posição e orientação da câmera em relação a uma
referência fixa. Para isso utilizamos um conjunto de parâmetros que identificam
univocamente a transformação entre a posição e orientação da câmera e a posição e
orientação de referência. Estes são os parâmetros extrínsecos da câmera.
Os parâmetros extrínsecos são dados por:
• Um vetor de translação T que descreve a posição da origem cO em relação à
origem de referência wO .
• Uma matriz ortogonal de rotação R que leva os eixos de referência aos eixos
correspondentes da câmera.
Seja P um ponto qualquer no mundo. Suas coordenadas são dadas por ( )www zyx ,, .
No sistema da câmera, suas coordenadas são dadas por ( )ccc zyx ,, . A relação entre estas
coordenadas é descrita por:
( )TPRP wc −= (3.1)
A imagem abaixo ilustra esta transformação.
Figura 3.2 - Relação entre coordenadas do mundo e da câmera.
3 Sistema Proposto
26
O ponto Oc também é o centro de projeção da câmera. O eixo Zc coincide com o
eixo óptico e corta o plano da imagem no ponto C, chamado de centro da imagem. O
segundo passo do algoritmo é achar o ponto correspondente à projeção perspectiva de P
no plano da imagem, dado por Pu.
Podemos caracterizar os parâmetros intrínsecos como o conjunto de parâmetros
necessários para definir as características ópticas, geométricas e digitais de uma câmera.
Para o modelo perspectivo de câmera são necessários três subconjuntos de parâmetros
intrínsecos que especificam:
• A projeção perspectiva.
• A distorção geométrica introduzida pelo sistema de lentes da câmera.
• A transformação entre coordenadas no plano da imagem e coordenadas na
imagem capturada.
Para a projeção perspectiva, o único parâmetro utilizado é a distância focal f,
correspondente à distância entre os pontos Oc e C. As coordenadas do ponto Pu são
dadas por ( )uu yx , no sistema de coordenadas definido por ( )uu YX , e tendo como
origem o ponto C. Logo temos as seguintes relações:
c
cu
z
xfx = (3.2)
c
cu
z
yfy = (3.3)
Este seria o caso considerado se não houvesse nenhuma distorção óptica. Pd é o
ponto correspondente à projeção de P, levando em conta distorções radiais introduzidas
pelas lentes. O terceiro passo é transformar as coordenadas no plano da imagem para as
coordenadas correspondentes com distorções ópticas.
Distorções radiais são deslocamentos radiais de pontos no plano da imagem.
Quanto mais afastado o ponto está do centro da imagem, maior é seu deslocamento.
Distorções radiais são normalmente modeladas por:
( )42
211 rkrkxx du ++= (3.4)
( )42
211 rkrkyy du ++= (3.5)
O quadrado da distância é dado por:
222dd yxr += (3.6)
3 Sistema Proposto
27
As coordenadas no plano da imagem de um ponto com distorções radiais são
dadas por ),( dd yx e ),( uu yx são suas coordenadas já livre de distorções da lente,
ambas no mesmo sistema de coordenadas. Os dois parâmetros intrínsecos são k1 e k2
que caracterizam a distorção geométrica introduzida pelo sistema de lentes da câmera.
No modelo original de Tsai, k2 é descartado por ser usualmente muito baixo e tem seu
valor igual a zero.
O último passo corresponde à transformação de coordenadas no plano da imagem
para coordenadas na imagem capturada. Para isso temos as seguintes equações:
xxid soxx )( −= (3.7)
yyid soyy )( −= (3.8)
As coordenadas do ponto Pi na imagem é dado por ),( ii yx em unidades de pixel e
as coordenadas do ponto correspondente Pd no plano da imagem é dado por ),( dd yx em
metros. O par de parâmetros ),( yx oo definem o centro da imagem, correspondente ao
ponto C no plano da imagem, e é utilizado como o centro do sistema de coordenadas da
imagem capturada representado por ),( ii YX . Por último, o par ),( yx ss definem o
tamanho efetivo de um pixel, em metros por pixel, nas direções horizontais e verticais
respectivamente. Estes são os fatores de escala. No modelo original de Tsai, sx e sy são
considerados iguais e modelados por um único parâmetro s.
Podemos resumir o algoritmo nos quatro passos apresentados, como mostra a
figura 3.3. Dado um ponto em coordenadas do mundo, o algoritmo retorna suas
coordenadas na imagem final. No total temos nove parâmetros que devem ser estimados
para cada câmera calibrada.
Se considerarmos uma câmera ideal, a qual não possui distorção radial e o centro
da imagem capturada coincide com o centro do plano da imagem, o modelo de câmera
de Tsai pode ser simplificado a um modelo de câmera “pinhole”, encontrada na
literatura. Se incluirmos o fator de escala s no valor da distância focal f, podemos
simplificar o algoritmo de Tsai descartando os passos três e quatro. Embora estas
simplificações sejam utilizadas por várias aplicações, não existe câmera perfeita. Logo
há um comprometimento na precisão da calibração, que varia com a câmera utilizada.
3 Sistema Proposto
28
Figura 3.3 – Os quatro passos do algoritmo de Tsai.
Como foi citado, os parâmetros extrínsecos e intrínsecos podem ser estimados
separadamente. Com os valores dos parâmetros intrínsecos da câmera previamente
calculados, podemos calcular a partir de uma imagem capturada uma segunda imagem
livre de distorções radiais. A nova imagem é criada utilizando-se as equações (3.4) a
(3.8). O fator de escala s é incluído no valor da distância focal f e possui valor igual a
um nas equações em que é utilizada. Com isso simplificamos novamente o modelo
utilizado a um modelo de câmera “pinhole”, com o fator de escala incluído na distância
focal. A diferença é que os parâmetros intrínsecos são previamente calibrados e utiliza-
se a imagem livre de distorções radiais na calibração dos parâmetros extrínsecos.
Novamente podemos simplificar o algoritmo de Tsai descartando os passos três e
quatro. Para estimar os parâmetros intrínsecos, utilizou-se o algoritmo proposto por
Zhang em [5].
Para determinar os valores dos parâmetros extrínsecos nos passos um e dois,
utilizou-se o algoritmo de Tsai coplanar, onde todos os pontos do padrão de calibração,
usado para encontrar os parâmetros, estão no plano 0=wz .
Os parâmetros extrínsecos podem ser escritos na forma matricial:
3 Sistema Proposto
29
=
=
zyx
zyx
zyx
rrr
rrr
rrr
r
r
r
R
333
222
111
3
2
1
=
z
y
x
t
t
t
T
Os vetores 1r , 2r e 3r são ortonormais entre si e estão ilustrados na figura do
modelo. Estas matrizes podem ser vistas como uma única matriz [ ]TR | .
[ ]
=
=
zzyx
yzyx
xzyx
z
y
x
trrr
trrr
trrr
tr
tr
tr
TR
333
222
111
3
2
1
| (3.9)
As equações (3.2), (3.3) e (3.9) podem ser compatibilizados de forma a produzir
uma transformação direta do ponto ( )www zyx ,, no mundo para o ponto ),( ii yx na
imagem, como é feito em [6]. Devemos lembrar que, segundo as simplificações
adotadas, a imagem utilizada está livre de distorções radiais e que o fator de escala s
está incluído na distância focal f.
=
13
2
1
w
w
w
z
y
x
i
i
z
y
x
tr
tfrf
tfrf
s
sy
sx
(3.10)
As coordenadas ( )syx ii ,, são homogêneas. Multiplicando (3.9) obtemos duas
equações:
zwzwywx
xwzwywx
itzryrxr
tzryrxrfx
+++
+++=
333
111 (3.11)
zwzwywx
ywzwywx
itzryrxr
tzryrxrfy
+++
+++=
333
222 (3.12)
Como estamos utilizando o método coplanar, podemos escrever 0=wz nas
equações (3.10) e (3.11).
zwywx
xwywx
ityrxr
tyrxrfx
++
++=
33
11 (3.13)
zwywx
ywywx
ityrxr
tyrxrfy
++
++=
33
22 (3.14)
3 Sistema Proposto
30
Dividindo (3.12) por (3.13) e em seguida o numerador e o denominador da razão
direta por ty, podemos obter:
iw
y
y
iw
y
xi
y
xiw
y
y
iw
y
xi xy
t
rxx
t
ry
t
tyy
t
ryx
t
rx
2211 −−++= (3.15)
Podemos obter um sistema linear, com cada linha correspondendo a um ponto
amostrado. Cada ponto possui um índice k diferente.
kkkkkkkkkk i
y
xiw
y
y
iw
y
xiw
y
y
iw
y
xi y
t
txy
t
rxx
t
ryy
t
ryx
t
rx +−−+=
2211 (3.16)
Com isso obtemos o sistema linear buA = , onde A é uma matriz 5×n , cada linha
Ak é dada por ( )kkkkkkkkk iiwiwiwiw yxyxxyyyx ,,,, −− , cada elemento do vetor b é dado
por ki
x e o vetor u é dado por:
[ ]
=
y
x
y
y
y
x
y
y
y
x
t
t
t
r
t
r
t
r
t
rUUUUU
221154321 (3.17)
Lembrando que 1r , 2r e 3r são ortonormais e definindo y
z
t
r1=α e y
z
t
r2=β , temos
que:
++=++
−−=24
23
222
21
24231
UUUU
UUUU
βα
αβ (3.18)
Resolvendo o sistema acima, calcula-se ty a partir de:
( )
( )23241
23241
22
2
4
UUUU
UUUUUUt y
−
−−−= (3.19)
24
23
22
21 UUUUU +++=
Com estes valores definidos e utilizando a equação (3.17) determina-se os valores
de r1x, r1y, r2x, r2y e tx. Como os vetores 1r e 2r são normalizados, obtemos os valores de
r1z e r2z. O vetor 3r pode ser calculado, já que 1r , 2r e 3r são ortonormais. Finalmente,
utilizando os valores já encontrados e as equações (3.13) e (3.14), podemos calcular f e
tz.
As próximas duas subseções apresentam dois padrões de calibração, utilizados na
obtenção de pontos para a calibração, e como extrair seus pontos característicos das
imagens capturadas. Ambos os padrões são coplanares.
3 Sistema Proposto
31
3.1.1 Padrão com Elipses
Entre os vários padrões utilizados em calibração de câmeras, este padrão coplanar
com elipses é um dos mais fáceis de ser implementado e utilizado. De uma maneira
geral, o padrão é constituído por várias esferas posicionadas em um mesmo plano e
afastadas uma da outra. Esferas formam padrões facilmente identificáveis na imagem.
Alternativamente podemos utilizar círculos 2D desenhados em um mesmo plano, que
pode ser uma folha de cartolina. Em ambos os casos, devemos extrair as elipses da
imagem capturada e retornar o centro de cada uma para a calibração. A figura 3.4 ilustra
o processo de obtenção de pontos do padrão.
Figura 3.4 – Processo de obtenção de pontos do padrão com elipses.
A figura a4.3 mostra o desenho do padrão coplanar. Os círculos estão dispostos
sobre o padrão de maneira que cada um não possui nenhum vizinho na direção
horizontal. Esta disposição permite identificar cada círculo na imagem capturada,
mostrada na figura b4.3 já em tons de cinza. Basta seguir a ordem dos círculos na
direção vertical. Para separar os círculos do fundo, utiliza-se um filtro “threshold”
binário, dado por:
3 Sistema Proposto
32
>
=contráriocaso
thresholdyxsrcseyxdst
,1
),(,0),( (3.20)
onde src é a imagem de origem, dst é a imagem de destino binária e de mesmo tamanho
e threshold é um valor limite. A figura d4.3 mostra o resultado deste filtro aplicado à
imagem b4.3 . O valor de threshold utilizado comumente é 128 em uma escala de tons
de cinza de 8 bits.
O próximo passo é identificar as bordas das componentes conexas da imagem
binária. Componente conexa é uma região formada por pixels conectados uns aos
outros. A relação entre os pixels conectados é dada pela conectividade escolhida, que
estabelece condições relativas à cor do pixel e adjacência.
Para a primeira condição de conectividade, os pixels vizinhos devem possuir um
mesmo valor de intensidade do conjunto V. No caso de imagem binária, V={1}. Para o
critério de adjacência, deve-se introduzir primeiro o conceito de vizinhança. Seja p um
pixel na imagem dado pelas suas coordenadas ( )yx, , o conjunto de pixels chamado de
4-vizinhança é dado por:
( ) ( ) ( ) ( ) ( ){ }1,,1,,,1,,14 −+−+= yxyxyxyxpN
De forma análoga, sua 8-vizinhança é dado por:
( ) ( ) ( ) ( ) ( ) ( ){ }1,1,1,1,1,1,1,148 −+−−+−++∪= yxyxyxyxpNpN
Então podemos dizer que dois pixels p e q são 4-conectados se q pertence ao
conjunto ( )pN4 . Da mesma forma, p e q são 8-conectados se q pertence ao conjunto
( )pN8 . A figura 3.5 ilustra duas componentes conexas, cujos pixels são 4-conectados.
Pixels vizinhos estão conectados por segmentos de reta.
No algoritmo proposto, depois de obtidas as componentes conexas da imagem
binária utilizando a conectividade com oito vizinhos, deve-se retornar apenas a borda de
cada componente conexa para o próximo passo. Isso é feito facilmente descartando
todos os pixels que possui oito elementos no seu conjunto ( )pN8 em cada componente
conexa. O resultado desta operação pode ser visto na figura e4.3 .
3 Sistema Proposto
33
Figura 3.5 – Componentes conexas em uma imagem binária de tamanho 88 × .
Cada borda de uma componente conexa representa o contorno de um círculo
capturado e possui a forma de uma elipse. O último passo se resume a encontrar o
centro de cada uma das elipses. Nas condições de uso do padrão, onde a câmera a ser
calibrada é posicionada em frente ao padrão, o centro da elipse pode ser considerado o
centro do círculo, sem perda de precisão. Uma maneira fácil de se achar o centro da
elipse é achar a posição média dos pontos da borda da sua componente conexa. Com
isso obtemos o centro de elipse com grande precisão. A figura f4.3 mostra as elipses
achadas para cada componente conexa e a figura c4.3 mostra o resultado da calibração,
com um objeto virtual inserido na imagem capturada. No caso de utilizarmos o padrão
com esferas distribuídas no mesmo plano, obteremos círculos na imagem, ao invés de
elipses. Podemos empregar um dos métodos dados em [12] para achar o centro de cada
um dos círculos.
O maior problema de se utilizar este padrão é posicioná-lo de tal maneira que
apenas os círculos sejam capturados na imagem. Também há restrição na orientação do
padrão na imagem capturada. No fim, o posicionamento fica bem limitado e objetos no
fundo da imagem podem impedir a calibração. Para resolver estes problemas práticos,
desenvolveu-se um outro padrão mais robusto, mostrado a seguir.
3.1.2 Padrão com Vértices
Assim como o outro padrão apresentado, este padrão é coplanar e seu formato é
dado pela figura 3.6. Ele possui doze vértices numerados e foi originalmente utilizado
em uma outra aplicação. Porém seu uso pode ser facilmente adaptado para diversas
3 Sistema Proposto
34
aplicações. Estamos interessados em encontrar e retornar a posição de todos os vértices
do padrão na imagem capturada. Estes são os pontos utilizados na calibração.
Figura 3.6 – Padrão com vértices.
Dado uma imagem capturada, o primeiro passo é aplicar o filtro “threshold”
binário e depois achar as bordas de todas as componentes conexas na imagem, da
mesma maneira de como foi feito no padrão anterior. O resultado desta operação de
segmentação são várias bordas de componentes conexas, como está ilustrado na figura
b7.3 . Observe que duas bordas de componentes conexas, entre várias encontradas,
correspondem ao padrão de calibração, que iremos chamar de borda exterior e borda
interior do padrão. Componentes conexas muito pequenas podem ser descartadas.
Figura 3.7 – Bordas das componentes conexas da imagem capturada.
Para cada borda encontrada podemos organizar os seus pixels de maneira que eles
formem uma lista circular, onde cada ponto é vizinho de seus pontos anterior e posterior
3 Sistema Proposto
35
na lista. O primeiro ponto também é vizinho do último ponto. Podemos obter mais de
uma lista para cada borda, pois pode haver buracos nas componentes conexas, como é o
caso do padrão. Desejamos encontrar as listas circulares correspondentes ao padrão de
calibração e depois encontrar os pixels correspondente aos vértices nas listas circulares
encontradas. Uma maneira de se resolver este problema é identificar a borda exterior.
Encontrada a borda exterior, fica fácil encontrar a borda interior, pois esta é dada pela
outra lista circular da mesma componente conexa. As bordas candidatas à borda exterior
devem possuir oito vértices.
Para identificar qual pixel melhor corresponde a um determinado vértice,
utilizamos uma heurística que se baseia na vizinhança de cada pixel. Dado um pixel na
posição m em uma lista circular de pixels de tamanho n, sua posição na imagem é dada
por ( )mm yx , , com nm ≤≤1 . A distância do pixel na posição m da lista a um pixel na
posição p é dado pelo vetor:
( )mpmppm yyxxd −−= , (3.21)
Considerando os 2k pixels vizinhos mais próximos na lista do pixel de posição m,
teríamos os pixels de índice variando de km − até km + . Então para cada pixel na lista
calcula-se o vetor resultante da soma da distância entre este pixel e seus 2k pixels mais
próximos na lista, dado por:
imm
k
i
immm ddr −
=
+ +=∑1
(3.22)
A figura 3.8 ilustra dois casos onde a resultante da soma das distâncias entre um
pixel na posição m da lista e seus 2k vizinhos é calculada. Cada pixel está representado
na sua posição na imagem e seu número dá sua posição na lista a que pertence. Os
vetores das distâncias entre o pixel central e seus vizinhos estão representados pelos
vetores em preto e a resultante da soma de todos eles é dado por mr . Podemos observar
que pixels correspondente a vértices possuem um vetor resultante de comprimento
maior que seus vizinhos, enquanto que pixels no meio de uma aresta possuem resultante
de comprimento próximo de zero. Logo um pixel é considerado um vértice se:
1. Vetor resultante possui módulo maior que um valor de corte dado por minr .
minrrm ≥
3 Sistema Proposto
36
2. O módulo do vetor resultante é maior ou igual que todos os módulos dos
vetores resultantes dos 2k pixels vizinhos.
kmpkmrr pm +≤≤−≥ ,
Como critério de desempate entre dois pixels vizinhos com o mesmo valor para o
módulo da resultante, escolhemos sempre o primeiro na lista. A dificuldade deste
método está na escolha dos valores de k e minr .
Figura 3.8 – Vetor resultante das distâncias do pixel em m aos seus vizinhos.
Então utilizando o método descrito, devemos achar uma lista circular com oito
vértices, correspondente à borda exterior. Uma vez achada esta lista, a outra lista da
mesma componente conexa deve conter exatamente quatro vértices. Se estas condições
forem preenchidas, podemos considerar que encontramos a componente do padrão. A
probabilidade de se encontrar duas listas nestas condições e que não seja o padrão é, na
prática, quase zero.
Encontrado os vértices do padrão, o próximo passo é identificar a qual vértice do
modelo cada vértice encontrado corresponde. Novamente devemos começar pelos
vértices da borda exterior. Os vértices encontrados formam também uma lista circular,
pois mantêm a ordem em relação um ao outro da lista de pixels original. Esta lista pode
estar no sentido horário ou anti-horário. Consideremos que esteja no sentido horário,
como está enumerado na figura 3.6. Queremos achar qual vértice corresponde ao vértice
3 Sistema Proposto
37
0 na lista de vértices. Uma vez encontrado o vértice 0 ou qualquer outro vértice, basta
seguir a ordem da lista para encontrar sucessivamente os próximos vértices.
Dado um vértice m na lista circular de vértices com 8=n , a distância entre este
vértice e um outro vértice p continua sendo dado pelo mesmo vetor em (3.21). Porém
podemos definir o seguinte produto vetorial entre vetores no 3ℜ :
( ) ( )0,,0,, 1111 iiiiiiiii yyxxyyxxa −−×−−= −−++ (3.23)
Para cada vértice nesta lista, podemos calcular o produto vetorial ma
correspondente. O resultado deste produto será um vetor com a componente z negativa,
exceto para os vértices 4 e 5 . Uma vez achados estes vértices, podemos fazer a
correspondência dos outros vértices.
Figura 3.9 – Processo de obtenção dos vértices do padrão.
Com os vértices encontrados da borda exterior, fica simples relacionar os vértices
da borda interior. Basta achar o vértice 8 como sendo o mais próximo do vértice 0 da
borda exterior e seguir a ordem na lista circular da borda interna. Com isso obtemos
todos os pontos vértices já numerados, como mostra a figura a9.3 .
3 Sistema Proposto
38
Porém apenas encontrar os pixels correspondentes a cada vértice no modelo não
basta, pois a posição dos vértices estimada pelo procedimento acima está muito sujeita a
erros e variações de uma imagem capturada para a próxima.
Para cada aresta entre um vértice e o seu subseqüente, podemos encontrar pixels
pertencentes a esta aresta na lista de pixels de onde foram extraídos os vértices.
Utilizando t pixels entre os dois vértices da aresta e igualmente espaçados um do outro,
podemos calcular a melhor reta que passa por todos estes pontos, empregando o método
dos mínimos quadrados. Se não houver t pixels, podemos utilizar todos os pixels entre
os vértices. Este método tenta minimizar ∑=
t
i
ir1
)(ρ . A distância entre um pixel de índice i
e a reta é dada por ri. A função ρ é dada por:
2
)(2
ii
rr =ρ (3.24)
A figura b9.3 mostra os pixels das arestas utilizados, com 14=t e a figura c9.3
mostra as retas encontradas para cada aresta. A partir das retas podemos calcular a
interseção entre elas e reencontrar os valores dos vértices com maior precisão. Também
teremos um número maior de pontos para o modelo, já que há mais interseções entre as
retas do que vértices. Na última figura d9.3 temos o resultado da calibração, com um
objeto virtual inserido na imagem capturada.
Este padrão de calibração confere grande flexibilidade no seu posicionamento em
relação à câmera e outros objetos capturados na imagem não interferem no resultado. O
único ponto contra é que ele deve permanecer integralmente visível na imagem
capturada.
Em [6] Szenberg apresenta um estudo de métodos de calibração de câmera, onde
ele conclui que o método de Tsai não apresenta bons resultados quando o número de
pontos de calibração é baixo. Para resolver este problema, pode-se utilizar uma
homografia na qual é definido um mapeamento do plano 0=z para o plano da imagem,
para estimar uma quantidade maior de pontos para serem utilizados na calibração.
3.2 Luz Estruturada Codificada
Como foi visto no segundo capítulo, em nosso sistema estéreo ativo utilizamos luz
estruturada codificada para fazer a correspondência entre pontos das imagens capturadas
3 Sistema Proposto
39
pelas duas câmeras. Na codificação temporal utilizada, projetamos uma seqüência de
padrões com listras. A seqüência de n padrões produz 2n listras codificadas e a
resolução cresce exponencialmente com o número de padrões utilizados. Repetimos a
mesma seqüência de padrões, porém com listras horizontais. Cada eixo precisa ser
codificado separadamente em nosso sistema. Ao final teremos dividido a cena estática
em nn 22 × regiões, cada uma com seu código horizontal e vertical.
Devemos distinguir entre as coordenadas das imagens capturadas de cada câmera,
dadas por ),( ee yx para a primeira câmera e ),( dd yx para a segunda câmera, e as
coordenadas da luz estruturada projetada, dadas por ),( vu . Utilizamos a seqüência de
imagens com listras horizontais e verticais para decodificar o código das coordenadas
),( vu para cada pixel das duas câmeras. Então para cada par de coordenadas ),( vu da
luz estruturada, encontramos em cada câmera o grupo de pixels que tenham codificado
o mesmo par de coordenadas, resolvendo o problema de correlação entre as imagens.
Na prática, cada grupo possui mais de um pixel com o mesmo código.
Na codificação temporal binária o código traduzido pela seqüência de padrões é a
própria numeração na base dois. Esta seqüência produz uma inconveniência à geração
do código de cada linha. No objeto iluminado, existem regiões que jazem na fronteira
entre uma listra branca e uma listra escura. Pixels nestas regiões devem pertencer a
apenas uma das listras da fronteira. Um pixel não pode ser considerado de uma listra na
imagem de um padrão projetado e posteriormente, na imagem do próximo padrão,
pertencer a uma outra listra. Caso contrário acabaríamos com um código inválido para
este pixel. Quando temos repetições de fronteiras, como no caso do código apresentado,
fatalmente iremos ter este problema ou deveremos descartar os pixels próximos às
fronteiras. Por exemplo, um pixel deveria ter o código 011. Porém na imagem do
primeiro padrão foi considerado pertencente à listra clara. Logo seu código ficou 111,
indicando erroneamente que este pixel pertence a uma listra que nem é sua vizinha.
Uma maneira de resolver este problema é utilizar um dos códigos binários de
Gray, conhecido como código binário refletido de Gray, ao invés da codificação
puramente binária. Este código faz parte de um conjunto de códigos patenteados por
Frank Gray, pesquisador da Bell Labs, em 1953. Porém estes códigos binários já eram
utilizados desde o século XIX em diversas aplicações como o telégrafo, e sua origem
pode ser estudada em [11]. A sua utilização foi proposta por [22] em substituição ao
3 Sistema Proposto
40
código binário. A figura 3.10 ilustra o código de Gray utilizado. Ele é chamado de
código binário refletido, pois cada padrão é igual ao padrão anterior mais ele mesmo
refletido e adicionado ao final. Na prática, o que interessa é que cada fronteira entre
duas listras vizinhas só aparece uma vez, como é mostrado para a única fronteira do
padrão. Além de evitar o problema de troca de código para todos os pixels nas regiões
de fronteiras, esta codificação possui outra vantagem. Com exceção da primeira listra e
da última listra do último padrão, todas as áreas claras ou escuras projetadas possuem
pelo menos duas listras de largura. Quando o número de linhas cresce, acaba ocorrendo
que as linhas ficam muito próximas uma das outras na imagem capturada, o que gera
erro de amostragem. Utilizando o código de Gray, podemos diminuir este problema
para um mesmo número de linhas em comparação com o código binário.
Figura 3.10 – Codificação temporal de Gray.
A conversão de números binários para o código de Gray correspondente é bastante
simples. Dado um número binário mAAAA ...210 contendo m dígitos onde 0A é o dígito
mais significativo, o código binário de Gray referente a este número é dado por
mBBBB ...210 onde:
00 AB =
iii AAB ^1+=
A conversão do código de Gray para o número binário correspondente é dada por:
00 BA =
3 Sistema Proposto
41
iii BBBBBBA ^)^)...^)^)^(((...(( 13210 +=
Devemos fazer algumas considerações a respeito da luz estruturada projetada.
Como foi visto na introdução, esta luz é gerada por um projetor digital ligado a uma das
saídas de vídeo do computador. Cada projetor possui uma resolução nativa dada pelo
número de elementos que formam os pixels na imagem projetada. Devemos configurar
a saída de vídeo com esta mesma resolução, para evitar uma re-amostragem da imagem
pelos circuitos internos do projetor. Essa operação suaviza as bordas da imagem
projetada, prejudicando assim as áreas de fronteiras entre as listras da luz estruturada.
Gostaríamos que cada listra possuísse a mesma largura na imagem projetada, ou
seja, a largura de todas as listras deve possuir o mesmo número de pixel. Por exemplo,
consideremos um projetor que possui uma resolução nativa de 800 pixels na horizontal.
Se utilizarmos 128 listras verticais, então cada listra deve ter seis pixels de largura, que
é igual ao maior inteiro menor que o resultado da divisão da resolução nativa pelo
número de listras da luz estruturada. Na maioria dos casos, parte da imagem projetada
não será utilizada.
Por último devemos ver a questão do processamento das listras claras e escuras
nas imagens capturadas. O próximo capítulo mostra como é determinado o código
binário horizontal e vertical de cada pixel a partir das imagens capturadas.
3.3 Captura e Processamento de Imagem
Antes da calibração de câmera e utilização do sistema estudado, é necessário tratar
ruídos na imagem capturada. Tipicamente em câmeras digitais de vídeo encontramos
ruído Gaussiano. Se considerarmos que o ruído introduzido na imagem é um sinal
),( yxn adicionado ao valor real ),( yxC do pixel na posição x e y da imagem, temos
então que o valor de cada pixel na imagem é dado por:
),(),(),( yxnyxCyxE += (3.25)
No caso do ruído Gaussiano, ),( yxn é modelado por um processo estocástico
Gaussiano de média zero. Podemos pensar que ),( yxn é uma variável aleatória,
distribuída de acordo com a função de distribuição Gaussiana de média zero, o qual é
adicionado a cada pixel na imagem e cujos valores são independentes da posição e
tempo. A função de distribuição Gaussiana de média igual a zero é dada por:
3 Sistema Proposto
42
2
2
2
2
1)( σ
πσ
x
exG−
= (3.26)
O desvio padrão da distribuição é dado por σ e a figura abaixo ilustra um
exemplo desta distribuição.
Figura 3.11 – Distribuição Gaussiana com 1=σ .
Uma das maneiras de tratar este ruído é aplicar o filtro de suavização Gaussiana à
imagem capturada, como foi feito em [9]. Uma alternativa é capturar k diferentes
imagens de uma mesma cena e retornar a imagem média de todas elas, como mostra a
equação (3.27). A cena deve ser estática e a iluminação não pode alterar. As imagens
seriam idênticas se não houvesse ruído Gaussiano introduzido pelas câmeras. Então
fazer uma média das imagens é igual a fazer a média dos sinais ),( yxn do ruído e
somar ao valor real ),( yxC de cada pixel na imagem. Como ),( yxn é distribuída de
acordo com a Gaussiana de média zero, quanto mais imagens forem utilizadas na média,
mais ),( yxn se aproximará de zero. Logo a imagem terá menos ruído, ou seja, o ruído
terá um menor valor em cada pixel, sem suavizar a imagem.
∑−
=
=1
0
),(1
),(k
i
i yxEk
yxE (3.27)
Foi observado na prática que realmente quanto mais imagens utilizadas para a
média, menor é o ruído Gaussiano. O valor padrão utilizado no sistema é 10=k .
3 Sistema Proposto
43
Uma vez capturadas todas as imagens relativas aos padrões do código de Gray
para cada câmera, o passo seguinte é identificar as listras claras e escuras dos padrões
projetados sobre a cena em cada imagem. Mais precisamente, para cada pixel da
imagem referente ao objeto capturado, devemos decidir se este pixel faz parte de uma
listra clara ou de uma listra escura. Há também regiões do objeto capturado que não é
iluminado pela luz estruturada, existindo assim mais uma opção. Regiões capturadas
pelas câmeras, mas que não são iluminadas pelo projetor, são chamadas de regiões de
sombra.
A figura 2.4 apresenta um exemplo de imagem capturada que deve ser tratada.
Alguns pontos devem ser levados em consideração ao se resolver este problema. O
valor de cada pixel depende da irradiação da imagem. Segundo o modelo Lambertiano
de reflexão difusa, a radiação do objeto capturado, proveniente exclusivamente do
projetor de luz, depende do valor de albedo do seu material. Também depende da
inclinação da superfície em relação ao projetor. Porém devemos considerar que alguns
materiais são especulares, como o material do vaso apresentado na figura 2.4, e refletem
diretamente a luz projetada.
Uma maneira precisa de se resolver este problema foi utilizada em [13] e proposta
inicialmente em [26]. Para cada padrão projetado, projeta-se também o seu inverso, que
contém o mesmo número de linhas, porém as linhas que eram claras passam a ser
escuras e vice-versa. A figura 3.12 mostra o par de imagens capturados de um vaso
iluminado por um padrão e o padrão inverso correspondente. Para determinar o caso de
cada pixel utilizamos o seguinte filtro:
>=<
<<
>=>
<>
=
2,
2,
),(),(,
),(),(,
),(
thresholdmeanethresholddifseazul
thresholdmeanethresholddifsevermelho
yxsrcyxsrcethresholddifsebranco
yxsrcyxsrcethresholddifsepreto
yxdst (3.29)
|),(),(| yxsrcyxsrcdif −=
2
),(),( yxsrcyxsrcmean
+=
A imagem capturada do padrão é dada por src , enquanto a imagem do padrão
invertido é dada por src . A imagem resultante é dada por dst, cujos pixels possui um
dos quatro valores possíveis. Cada valor é representado por uma cor, para melhor
3 Sistema Proposto
44
visualização do resultado na figura 3.13. O primeiro passo do filtro é determinar se o
módulo da diferença do valor do pixel nas duas imagens é maior que um valor de corte,
dado por threshold. No caso positivo, consideramos que a diferença nas imagens entre o
padrão projetado e seu inverso correspondente projetado é suficientemente grande neste
pixel para determinar se este pertence a uma listra clara ou escura. Caso o seu valor na
primeira imagem seja maior que na segunda, correspondente à imagem capturada do
padrão invertido, este pixel pertence a uma listra clara. No sistema implementado, o
valor para threshold comumente utilizado é 30 em uma escala de tons de cinza de 8 bits.
O valor branco é atribuído a pixels pertencentes a listras claras, enquanto preto é
atribuído a pixels pertencentes a listras escuras.
Figura 3.12 – Padrão e inverso correspondente projetados sobre objeto.
Nos outros dois casos, onde a diferença do pixel nas duas imagens não é
suficientemente grande, o pixel não é atribuído a nenhuma listra. Podemos estabelecer
um segundo valor de corte, dado por threshold2, cujo valor é tipicamente 128,
correspondente à metade da escala de tons de cinza. Caso a média dos valores de um
pixel seja menor que threshold2, atribui-se o valor vermelho. Usualmente pixels com
este valor representam regiões do objeto não iluminadas pela luz estruturada, a parede
de fundo ou ainda regiões de transição entre uma faixa clara e outra escura. Caso a
média seja maior que threshold2, atribui-se o valor azul. Comumente pixels com este
valor representam regiões de transição entre duas faixas de tonalidades diferentes ou
regiões do objeto que refletem a luz estruturada do projetor.
3 Sistema Proposto
45
Figura 3.13 – Resultado do filtro para determinar as listras de um padrão.
O ponto positivo de se utilizar esta técnica é que tornamos a detecção de listras
mais robustas, independente do material e da inclinação de superfícies do objeto
capturado em relação ao eixo de projeção. Esta técnica também se mostrou tolerante a
superfícies moderadamente especulares. O ponto negativo é que dobramos o número de
imagens capturadas.
Infelizmente há casos em que utilizar padrões e seus inversos não é suficiente para
distinguir as listras em superfícies com grande variação de albedo. Por exemplo,
podemos querer modelar o prato mostrado na figura a14.3 e b14.3 . Porém os desenhos
artísticos pintados sobre o prato dificultam determinar as listras do padrão projetado
nestas imagens. O resultado está ilustrado na figura c14.3 . Em outro caso, uma
superfície pode estar bastante inclinada em relação ao eixo de projeção, também
dificultando a distinção das listras. Na prática, para resolver estes problemas é
necessário capturar as imagens utilizando dois valores de exposição diferentes. Por
exemplo, se capturarmos a imagem de um padrão utilizando uma exposição de 0,1s,
então podemos capturar outra imagem correspondente com uma exposição de 0,5s.
Aumentando a exposição, tornamos as áreas escuras da imagem mais claras e saturamos
as áreas claras. Para cada pixel, aplicamos (3.29) ao par de imagens da exposição que
tenha a maior diferença absoluta entre eles. Assim podemos distinguir as listras em
diferentes tipos de superfícies. As figuras d14.3 e e14.3 ilustram o par de imagens
3 Sistema Proposto
46
capturadas com uma maior exposição. Utilizando ambos os pares de imagens obtemos
um melhor resultado, apresentado na figura f14.3 .
Figura 3.14 – Captura com diferentes valores de exposição.
Teoricamente poderíamos utilizar mais de dois valores de exposição para cada
objeto modelado. Porém dois valores se mostraram suficientes, bastando apenas um na
maioria dos objetos. Novamente, o ponto negativo deste recurso é que para cada padrão
projetado devemos capturar mais um par de imagens para cada valor de exposição
utilizado, aumentando o tempo total de captura.
Dos resultados obtidos podemos notar que entre duas listras há sempre uma fina
listra de pixels atribuídos a nenhuma delas. Estes pixels se situam exatamente na
fronteira entre duas listras. Como foi visto, cada fronteira aparece apenas uma vez na
codificação de Gray utilizada. Isto permite tratar estes pixels, de maneira a determinar a
qual das duas listras de uma fronteira um pixel de valor azul ou vermelho pertence, sem
gerar inconsistência no código de cada pixel. Podemos definir que um pixel pertence a
uma fronteira entre duas listras se este possuir valor vermelho ou azul e se seus vizinhos
3 Sistema Proposto
47
pertencerem a uma determinada listra. Então este pixel deve pertencer a uma das duas
listras. Caso os vizinhos possuam valores diferentes, aplica-se (3.29) novamente, porém
considerando que 1−=threshold , ou seja, a primeira condição é sempre satisfeita. Caso
contrário, o pixel deve possuir o mesmo valor que seus vizinhos. No caso de listras
verticais, os pixels vizinhos a um pixel são os pixels da esquerda e da direita na
imagem. E no caso de listras horizontais, são os pixels acima e abaixo na imagem.
Figura 3.15 – Detecção e refinamento de fronteiras.
Através deste procedimento, estaremos incluindo em raras ocasiões mais do que
apenas pixels localizados em fronteiras. Porém isto não é problema, pois não há perigo
de um pixel acabar pertencendo a uma listra da qual não é vizinho. Podemos estender a
idéia para mais vizinhos de um pixel, alargando a área considerada uma fronteira. A
figura 3.15 mostra o resultado desta operação considerando fronteiras com dois pixels
de largura.
No final de todas as operações mencionadas até agora nesta seção, obteremos um
conjunto de 2n imagens, codificadas por uma luz estruturada de n padrões verticais e n
padrões horizontais. Um pixel terá um valor codificado se este possuir valor branco ou
preto em todas as 2n imagens. Caso o seu valor não esteja determinado em uma ou mais
imagens, não é possível determinar univocamente a qual listra este pixel pertence, tanto
verticalmente quanto horizontalmente. Para cada pixel na imagem determina-se, caso
seja possível, os dois valores codificados para posteriormente convertê-los do código de
Gray utilizado aos números binários correspondentes. Determinamos assim a quais
listras horizontal e vertical cada pixel pertence. Repetimos o processo para a outra
câmera.
3 Sistema Proposto
48
3.4 Triangulação e Modelo Final
Feita a correspondência entre pixels das duas câmeras calibradas, gostaríamos de
obter uma nuvem de pontos do objeto modelado. Para cada par de coordenadas ),( vu
diferente, encontramos em cada imagem os pixels que codificam este par. Usualmente
teremos um grupo de pixels conexos em cada imagem. A figura 3.16 mostra os grupos
encontrados, cada um com uma cor, para uma luz estruturada de 32 listras verticais e 32
listras horizontais. Note que a luz estruturada iluminou também a parede no fundo. De
um outro ponto de vista, podemos dizer que estamos dividindo o objeto em diversos
pedaços menores.
Figura 3.16 – Grupos de pixels com o mesmo par de coordenadas codificadas.
Para a triangulação necessitamos de apenas um ponto que melhor representa cada
grupo nas duas imagens. Dentre as tentativas de se obter o melhor ponto, a que melhor
apresentou resultados foi calcular o ponto médio utilizando todos os pontos de cada
grupo. Se o número de listras verticais e horizontais é suficientemente grande para
considerarmos que cada pedaço menor do objeto dividido é um plano, então o ponto
médio será o ponto central deste grupo. E é justamente deste ponto central que
queremos achar a posição no espaço.
Para cada câmera, calcula-se a reta que sai do seu centro de projeção Oc e
intercepta o plano da imagem no ponto médio Pu calculado. A seção 3.2 descreve como
calcular Pu a partir do ponto médio na imagem capturada. A reta continua e intercepta a
reta da outra câmera no ponto P. Teoricamente a probabilidade de duas retas se
3 Sistema Proposto
49
interceptarem no espaço é zero, mesmo para retas arbitrariamente próximas. Então P é
dado pelo ponto médio do segmento de reta que liga cada ponto em cada reta mais
próximo da outra, como mostra em detalhe a figura abaixo.
Figura 3.17 – Triangulação e interseção de duas retas.
Podemos escrever as equações paramétricas das retas da câmera esquerda e direita
como sendo, respectivamente:
11111 )()( sDOOPsOsA ccuc +=−+= (3.30)
22222 )()( tDOOPtOtB ccuc +=−+= (3.31)
Os pontos utilizados devem estar de acordo em relação ao sistema de coordenadas,
convertendo todos para o sistema de coordenadas do mundo dado por ( )www ZYX ,, .
Podemos definir o seguinte vetor que dá a distância entre um ponto na primeira reta a
um segundo ponto na outra reta:
)()(),( tBsAtsW −= (3.32)
Substituindo (3.30) e (3.31) em (3.32) e declarando 12 ccw OOO −= , temos:
21),( tDsDOtsW w −+= (3.33)
Existe apenas um par de pontos, dados por )( 0sA e )( 0tB , onde ),( tsW possui
tamanho mínimo. Queremos achar o valor de 0s e 0t . Se as duas retas não são paralelas,
o que sempre é verdadeiro no sistema quando não há erros de calibração ou de
correspondência entre pontos, é fácil perceber que o seguimento de reta que une o par
3 Sistema Proposto
50
de pontos )( 0sA e )( 0tB é perpendicular às direções das retas, caso contrário não
seriam os pontos mais próximos. As seguintes equações, envolvendo produto escalar,
são verdadeiras:
0),( 001 =⋅ tsWD (3.34)
0),( 002 =⋅ tsWD (3.35)
Substituindo (3.33) em (3.34) e (3.35) obtemos:
0)()()( 2101101 =⋅−⋅+⋅ DDtDDsOD w
0)()()( 2201202 =⋅−⋅+⋅ DDtDDsOD w
Fazendo 11 DDa ⋅= , 21 DDb ⋅= , 22 DDc ⋅= , wODd ⋅= 1 e wODe ⋅= 2 ,
encontramos:
20
bac
cdbes
−
−= (3.36)
20
bac
bdaet
−
−= (3.37)
Os denominadores de (3.36) e (3.37) são diferentes de zero quando as retas não
são paralelas. A posição de P é dado por:
2
),()( 00
0
tsWtBP += (3.38)
Repetindo o cálculo para todas as coordenadas iremos obter uma nuvem de pontos
distribuídas no espaço correspondente ao modelo. Na prática sempre serão incluídos
pontos da parede de fundo ao modelo capturado, principalmente quanto utilizamos
valores altos de exposição para a câmera. Podemos resolver este problema criando um
plano de corte, que descarta todos os pontos encontrados situados além deste, e o
posicionamos entre o objeto capturado e a parede, de modo a descartar estes pontos
indesejados. A figura 3.18 mostra a nuvem de pontos modelada a partir do vaso
utilizado como modelo, em duas vistas distintas. Os pontos de fundo foram retirados
com um plano de corte.
3 Sistema Proposto
51
Figura 3.18 – Nuvem de pontos do objeto modelado.
Utilizando estes pontos como vértices, gostaríamos de obter um modelo poligonal
do objeto capturado. Entre outras possibilidades, podemos criar polígonos com vértices
próximos um do outro. Porém, ao invés de considerar vértices vizinhos geométricos,
escolhemos vértices que possuem coordenadas codificadas ),( vu vizinhas. Por
exemplo, podemos criar um polígono com os vértices de coordenadas )37,25( , )37,26(
e )38,25( . A normal em cada vértice é calculada utilizando-se os oito vértices vizinhos.
Calculam-se as normais dos oito polígonos triangulares que possuem este vértice. Estas
normais são somadas e o vetor resultante normalizado dá o valor da normal do vértice.
O resultado desta operação aplicados aos pontos da figura anterior está apresentado na
figura 3.19a.
Para a textura do modelo, captura-se uma imagem do objeto, com cada uma das
câmeras, separadamente da seqüência de imagens capturadas dos padrões projetados. O
objeto deve estar iluminado por luz ambiente, de maneira que suas superfícies visíveis
estejam uniformemente iluminadas. Com isso obtemos texturas de melhor qualidade do
que as obtidas apenas iluminando o objeto capturado com a luz do projetor.
A coordenada de textura para cada vértice é dada pela sua posição média na
imagem da câmera, já calculada anteriormente para a etapa de triangulação. Então
teremos para cada câmera uma textura e mapeamento correspondente. Ambas as
texturas são usadas simultaneamente, utilizando multi-textura, suportada pela grande
3 Sistema Proposto
52
maioria das placas gráficas atuais. A figura 3.19b apresenta o modelo com textura
aplicada.
Figura 3.19 – Vista do modelo geométrico criado.
4 Implementação, Resultados e Testes
Este capítulo apresenta as duas aplicações implementadas, uma para criar os
modelos e outra para visualizar e comparar resultados. Em seguida são apresentados
alguns resultados, incluindo uma discussão sobre o sistema implementado. A seção de
testes conclui o capítulo com dois testes realizados para verificar a precisão do sistema
implementado.
4.1 Implementação
Como resultado desta dissertação, obtemos duas aplicações. A primeira aplicação
é utilizada para capturar imagens de objetos e criar um modelo correspondente e se
chama Shaper. E a segunda aplicação, chamada simplesmente de Visualizer, é utilizada
para visualizar modelos criados e compará-los.
Para a camada de interface das aplicações utilizou-se GLUI [15] que é uma
biblioteca de extensão para a popular GLUT. Como biblioteca gráfica utilizou-se
OpenGL e para o desenvolvimento utilizou-se o Visual Studio .NET da Microsoft.
4.1.1 Shaper
De modo geral, esta aplicação é responsável por executar todos os itens
apresentados na seção anterior, como projetar padrões de luz estruturada, capturar
imagens e processá-las, fazer triangulação entre pontos correspondentes etc. Também
deve disponibilizar todas as opções e parâmetros discutidos. Para a captura de imagens
através das câmeras de vídeo, utilizou-se a biblioteca IM Capture [16], enquanto a
biblioteca OpenCV [1] fui utilizada extensivamente para o processamento de imagens.
No apêndice A foi incluído uma descrição do OpenCV e de seus principais recursos.
A aplicação possui uma janela principal, onde são apresentadas as informações
principais. Inicialmente esta janela mostra o par de imagens das câmeras capturadas em
tempo real, permitindo o enquadramento do objeto capturado, ajustes de parâmetros de
captura e calibração das câmeras.
4 Implementação, Resultados e Testes
54
Junto com a janela principal, existe uma outra janela para acessar as diversas
opções do sistema. A figura 4.1 mostra esta janela e a janela principal ao fundo. As
opções estão divididas em três grupos. O grupo File possui as opções de operação do
sistema. A primeira opção Live está habilitada quando a aplicação é inicializada e as
imagens das câmeras capturadas em tempo real são exibidas. A segunda opção Scan
inicializa o processo de varredura, capturando a seqüência de imagens do objeto modelo
iluminado pelos diferentes padrões da luz estruturada. Após a varredura, as imagens são
processadas. A terceira opção Correspondence utiliza as imagens processadas e realiza
a correspondência entre pixels das duas câmeras. Na janela principal o usuário pode
clicar em um ponto de uma imagem e descobrir o ponto correspondente na outra
imagem. E por último, 3D Model cria o modelo geométrico. As duas últimas opções não
estão habilitadas antes que a etapa de captura das imagens esteja concluída.
Figura 4.1 – Janela de opções da aplicação Shaper.
O segundo grupo reúne as opções do sistema, onde cada uma abre uma nova
janela. Na primeira opção Scan o usuário pode modificar as opções de varredura
relacionadas à luz estruturada e as imagens capturadas. O segundo botão Process
permite ao usuário modificar opções de processamento das imagens capturadas na etapa
de varredura. A última opção deste grupo permite selecionar os diferentes modos de
visualização do modelo criado.
4 Implementação, Resultados e Testes
55
No último grupo encontram-se as opções referentes aos equipamentos utilizados.
Quanto às câmeras utilizadas, podemos modificar os seus vários parâmetros, como
brilho, ganho, nitidez, foco etc. O usuário também pode calibrar os parâmetros
extrínsecos e intrínsecos de cada uma. A opção salvar armazena tanto a calibração,
quanto o ajuste da câmera. Em relação ao projetor, devemos informar a sua resolução
física, de forma que as linhas projetadas tenham a mesma largura em pixels, conforme
foi discutido anteriormente.
Figura 4.2 – Calibração de parâmetros extrínsecos das duas câmeras.
A calibração dos parâmetros intrínsecos das câmeras utiliza a implementação do
método de Zhang [5] fornecida pelo OpenCV.
4.1.2 Visualizer
Esta simples aplicação foi criada para visualizar e comparar os modelos criados na
aplicação apresentada anteriormente, sem a necessidade do uso de câmeras. Assim
como o Shaper, o usuário pode selecionar um dos modos de visualização e habilitar
textura. É possível carregar dois modelos simultaneamente e alterar entre um e outro,
comparando visualmente o resultado. Pode-se rotacionar o modelo visualizado através
de uma interface arcball [14] com o mouse ou pelo teclado. O usuário também pode
calcular a distância entre dois pontos do modelo, selecionando com o botão direito do
4 Implementação, Resultados e Testes
56
mouse os pontos desejados. Por fim, há uma função para ajustar um cilindro ao modelo
carregado. O Visualizer foi utilizado nos testes que serão apresentados em seção
posterior.
Figura 4.3 – Modelo carregado na aplicação de visualização.
4.1.3 Arquivo de Saída
Esta simples aplicação Em relação ao armazenamento de modelos, ambos as
aplicações utilizam um tipo de arquivo criado que segue uma estrutura simples de
interpretação. Este arquivo texto descreve os vértices e polígonos criados para o objeto
capturado, como mostra (4.1).
mmmmmm
nnnnnnnnnn
nznynxcba
nznynxcba
nznynxcba
tdrdserenznynxzyx
tdrdserenznynxzyx
tdrdserenznynxzyx
mn
..................
..............................
222222
111111
2222222222
1111111111
(4.1)
4 Implementação, Resultados e Testes
57
A primeira linha contém dois inteiros: o número de vértices n e o número de
polígonos m. O bloco de linhas seguinte descreve cada vértice do modelo. Cada linha
corresponde a um vértice i e possui dez números reais. Os três primeiros números dão a
posição ),,( iii zyx do vértice no mundo e os três números seguintes dão a normal
),,( iii nznynx do vértice, já normalizada. Em seguida temos as coordenadas de textura
),( ii sere para a textura da câmera esquerda e por último são dadas as coordenadas de
textura ),( ii sdrd para a textura da outra câmera.
Cada linha no segundo bloco de linhas descreve um polígono j e possui três
números inteiros seguidos de três números reais. Os três primeiros números ),,( jjj cba
dão o índice i de cada um dos três vértices que formam o polígono. E os três números
reais dão a normal ),,( jjj nznynx do polígono.
Junto a cada arquivo são fornecidos dois arquivos de imagem, no formato BMP,
referentes às duas texturas, uma de cada câmera. Estas imagens são carregadas junto
com o arquivo correspondente.
4.2 Resultados
O sistema foi utilizado em uma plataforma constituída de processador AMD
Athlon XP1600+, com 512MB de memória e placa gráfica NVIDIA FX5600. O par de
câmeras utilizadas são do modelo DFW-VL500 da Sony, enquanto que foram utilizados
dois projetores distintos no sistema. O primeiro projetor, modelo CTX EzPro 610, é um
projetor LCD, enquanto que o segundo, modelo Infocus X1, é um projetor DLP.
O sistema foi aplicado para capturar formas de diversos objetos de natureza
diferentes. Vasos, estátuas, caixas de som, tubulações e até pessoas serviram de
modelos. O modelo na figura 4.4a foi obtido a partir de uma estátua de bronze. A figura
4.4c mostra o modelo de um vaso, enquanto que as figuras 4.4b e 4.4d apresentam
modelos capturados a partir de tubulações de PVC.
De uma forma geral, a qualidade dos modelos estão intimamente ligados com o
número de linhas utilizadas. O número de linhas utilizadas pela luz estruturada variou
de 3232× até 128128× e é limitado pelo hardware utilizado. Quanto maior o número
de linhas, maior o nível de detalhes. As figuras 4.5a e 4.5b ilustram a diferença entre
4 Implementação, Resultados e Testes
58
modelos capturados sob as mesmas condições, porém utilizando um número de linhas
diferentes. O primeiro utilizou 12864× linhas, enquanto que o segundo apenas 6432× .
As outras duas figuras 4.5c e 4.5d mostram a diferença entre as bordas de modelos,
também capturados sob as mesmas condições e número de linhas.
Porém quando o número de linhas cresce e a resolução das câmeras é mantido (no
nosso caso de 480640× ), é introduzido irregularidades na superfície dos modelos
capturados que seguem um padrão de interferência, como mostra a figura 4.5e. Isso
acontece, pois na fase de processamento de imagens padrões de interferência são
gerados nas imagens processadas. Estes padrões são repassados para o modelo final,
apresentando irregularidades na superfície. Esses padrões de interferência tendem a
diminuir quando a resolução das imagens capturadas cresce. Por isso que, para imagens
com a mesma resolução, quanto maior o número de linhas utilizadas pela luz
estruturada, mais interferências são geradas. Esta irregularidade gerada é mais visível
em modelos com muita superfície plana. Para câmeras com resolução de 480640× , o
ideal seria utilizar um número de linhas de até 3232× . Cada vez que dobrarmos o
número de linhas, também devemos dobrar a resolução das câmeras.
Os modelos das figuras 4.4b e 4.4d foram capturados utilizando-se este número
recomendado de linhas e possuem uma superfície quase sem ruído, ao contrário do
modelo da figura 4.5e que foi capturado utilizando-se 128128× linhas. O mesmo
acontece com os modelos das figuras 4.5c e 4.5d. Apesar do último possuir bordas com
menos detalhes, a superfície é livre de ruído.
4 Implementação, Resultados e Testes
59
Figura 4.4 – Exemplos de modelos criados com o sistema implementado.
Em relação às restrições do sistema, a primeira restrição do sistema é o tamanho
dos objetos capturados. A princípio estamos interessados em objetos de tamanho
variando de 30cm até 2m. Porém nada impede que se capture formas de objetos
maiores. Para isso seriam necessários um projetor com maior brilho e câmeras com
lentes adequadas.
Uma segunda restrição deste sistema é capturar objetos e cenas estáticas, como foi
visto. Há uma quantidade grande de imagens a serem geradas para modelar cada objeto,
de maneira que o sistema não consegue capturar objetos em movimento. Por exemplo,
para capturar um objeto utilizando 64x64 linhas, utilizando duas câmeras a 30fps com
apenas um valor de exposição e sem calcular imagem média, seria necessário s8.0 .
Porém na prática este número é maior. As câmeras ficaram limitadas a 15fps e há um
problema de sincronia entre a imagem desenhada no buffer e a imagem projetada pelo
projetor LCD, de modo que é necessário esperar cerca de s2.0 até que a imagem
correspondente ao padrão desejado seja projetada. Como são necessários projetar 24
4 Implementação, Resultados e Testes
60
padrões, temos um atraso total de s8.4 . Somando mais o tempo necessário para salvar
as imagens capturadas em disco e outras operações necessárias, no total o sistema está
levando em torno de s0.7 para completar uma operação que deveria durar s6.1 . A
maior parte do atraso é devido ao problema de sincronismo que carece de melhor
solução.
Figura 4.5 – Nível de detalhes em modelos criados.
A terceira restrição é que o objeto modelado é limitado por dois fatores na captura.
Primeiro é que só é modelado regiões iluminadas pela luz estruturada. Segundo, só é
modelado regiões capturadas por ambas as câmeras. Regiões capturadas pelas câmeras,
porém não iluminadas pelo projetor, são consideradas regiões de sombra. Regiões não
capturadas por ambas as câmeras são regiões ocultas.
4.2.1 Padrões de Calibração
Comparando os dois padrões de calibração, os resultados dos testes, apresentados
posteriormente nesta seção, não mostram uma diferença considerável de precisão entre
os dois. O padrão com vértices é mais fácil de ser manuseado, pois independe de
quaisquer outros objetos capturados na imagem. Este padrão é robusto contra ruídos
introduzidos pela câmera e funciona com a câmera posicionada em ângulos variados em
4 Implementação, Resultados e Testes
61
relação ao seu plano. O seu ponto negativo é quando a câmera é colocada exatamente no
eixo perpendicular ao plano do padrão e que intercepta o seu centro. Nesta posição a
calibração se torna falha, pois não há como se obter informação de profundidade em
relação a este eixo. Por último, este padrão é utilizado em uma outra aplicação em
tempo real, conseguindo uma taxa de 22 quadros por segundo, com imagens de tamanho
480640× . Este bom desempenho é devido à grande eficiência da biblioteca OpenCV,
com qual foram implementadas as aplicações, e ao método de reconhecimento de
padrão proposto.
O padrão com elipses é o mais fácil de ser implementado. O seu posicionamento é
mais difícil já que necessita ocupar a imagem capturada. Porém também é um padrão
robusto contra ruídos e possui precisão menor do que um pixel. Na prática, este padrão
quase não apresenta erros devido à câmera estar no eixo perpendicular ao plano do
padrão e que intercepta o seu centro. Talvez isso aconteça pela maneira aleatória com a
qual as suas elipses estão espalhadas por toda a imagem.
Como uma última observação em relação aos padrões, a calibração apresenta
melhores resultados quando estes são colocados na mesma posição do objeto capturado,
principalmente o padrão com vértices que possui maior liberdade de posicionamento, se
tornando mais sensível à sua posição do que o padrão com elipses. Todos os testes
foram feitos posicionando o padrão junto ao objeto capturado. A seção seguinte
apresenta os testes realizados e o método de ajuste de cilindro a um modelo capturado.
4.2.2 Câmeras
As câmeras utilizadas foram um par de câmeras Sony DFW-VL500, as quais
possuem sensores CCD e resolução máxima de 640x480 pixels. A grande vantagem
desta câmera em relação a câmeras Web convencionais está no seu conjunto óptico que
possui zoom e focagem digitais, os quais são utilizados pela aplicação para melhor
enquadrar o objeto modelado nas imagens capturadas, além de um menor nível de
distorções ópticas.
Foi constatado, em ambas as câmeras, um problema que ocorre nas fronteiras das
imagens capturadas entre listras claras e escuras projetadas sobre o objeto capturado. A
câmera não é capaz de determinar com exatidão a fronteira entre as regiões e introduz
erros sistemáticos. Possivelmente estes erros podem estar sendo introduzidos em algum
4 Implementação, Resultados e Testes
62
estágio de compressão da imagem onde as freqüências, como as encontradas entre
regiões com as propriedades descritas, são altas. A figura 4.6a mostra uma imagem
capturada onde tal erro ocorre entre as listras projetadas sobre o vaso capturado.
Figura 4.6 – Fronteiras capturadas entre regiões claras e escuras da luz estruturada.
Curiosamente este problema não ocorre quando, ao invés de utilizarmos luz
branca para projetarmos as listras dos padrões de luz estruturada, utilizamos luz verde.
A figura 4.6b ilustra uma imagem do mesmo vaso modelado com luz estruturada verde.
Conseqüentemente, utilizou-se esta cor como padrão neste trabalho. Utilizando as cores
vermelho e azul o problema permanecia.
O mesmo problema não ocorre no padrão de calibração com vértices que também
possui regiões claras e escuras. O padrão é sempre capturado sob luz ambiente. Nestas
condições a câmera é capaz de capturar as fronteiras com clareza.
4.2.3 Projetores
4 Implementação, Resultados e Testes
63
Foram utilizados dois projetores distintos, um de tecnologia LCD (liquid crystal
display) e o outro DLP (digital light processing). A maneira como um projetor DLP
funciona [24], na qual cada componente de cor é projetada separadamente, torna o seu
uso inadequado para esta aplicação, principalmente se a codificação utilizada envolver
padrões coloridos. Isso foi constatado na prática. Utilizando luz estruturada de cor
verde, algumas imagens capturadas ficavam escuras porque a captura não era
sincronizada com a projeção da componente de cor verde. O projetor utilizado foi um
Infocus X1, com velocidade x2 para a roda de cores. Como era de se esperar, o projetor
LCD não apresentou este problema e foi utilizado como projetor padrão neste trabalho.
Como foi discutido anteriormente, o projetor LCD utilizado apresentou um atraso
entre a imagem desenhada no buffer e a imagem projetada. Este problema deve ser
inerente ao modelo CTX EzPro 610 utilizado. Outros modelos de projetores LCD
devem ser testados para se tirar uma conclusão definitiva.
4.3 Testes
Foram elaborados e executados dois testes que visavam verificar a precisão do
sistema implementado. O primeiro teste consistiu simplesmente em medir a distância
entre pontos conhecidos de um modelo escolhido. Para o segundo teste, utilizou-se um
pedaço de tubulação cilíndrica de PVC como modelo e como resultado deveríamos
obter os parâmetros de um cilindro correspondente à tubulação.
4.3.1 Primeiro Teste
Para este teste, utilizou-se o segundo padrão de calibração apresentado como
modelo, cujos pontos estão todos em um mesmo plano e em posições conhecidas. A
figura 3.6 ilustra os pontos deste padrão. Então para cada par de pontos, mediu-se a
distância correspondente no modelo computacional gerado. Foram utilizados os dois
padrões de calibração apresentados para calibrar o par de câmeras antes de se obter o
modelo. Todos os modelos foram capturados utilizando a calibração de parâmetros
intrínsecos das câmeras.
Para cada modelo criado, obtém-se uma nuvem de pontos. O processo de medir as
distâncias entre dois pontos conhecidos requer identificá-los no modelo carregado. Isso
4 Implementação, Resultados e Testes
64
é feito de maneira visual, utilizando o mouse para selecionar os pontos desejados, assim
como é feito em vários softwares comerciais. A textura capturada tem papel
fundamental na seleção, dando maior detalhamento da superfície do modelo. Sem esta
informação visual, não seria possível selecionar os pontos dos modelos capturados para
este teste e outras aplicações do sistema.
Uma vez selecionado um ponto na tela pelo usuário, utiliza-se um método
semelhante ao de Ray Tracing para calcular qual ponto do modelo corresponde ao ponto
selecionado pelo usuário na imagem visualizada. O OpenGL permite identificar qual
polígono do modelo foi selecionado pelo usuário com o mouse, utilizando o modo de
renderização para seleção. Mais informações sobre este procedimento pode ser
encontrado em [19]. Uma vez conhecido o polígono interceptado, a posição da câmera,
o ângulo de visão, resolução da tela e o ponto da tela selecionado pelo usuário, lança-se
um raio que sai da câmera, passa pelo ponto correspondente ao ponto no plano da
imagem e intercepta o polígono. Basta, então, calcular o ponto de interseção entre este
raio e o plano definido pelo polígono para encontrar o ponto selecionado no modelo.
Segmento Distância (cm)
05,0±
Modelo Um
Distância (cm)
Modelo Dois
Distância (cm)
Modelo Três
Distância (cm)
10 21,00 21,013 20,943 21,057
72 21,00 21,068 21,004 20,934
98 15,00 14,872 14,921 14,964
1110 14,90 14,896 14,833 14,853
70 24,90 25,004 24,912 24,787
21 24,90 24,858 24,900 24,950
118 15,00 14,992 14,930 14,949
109 15,00 14,883 14,943 14,991
Figura 4.7 – Tabela das distâncias médias medidas utilizando-se o padrão de elipses na
calibração.
4 Implementação, Resultados e Testes
65
Este processo de seleção de pontos é subjetivo, devido à dificuldade de se
identificar os vértices do padrão com exatidão. A textura possui uma resolução limitada,
assim como as imagens capturadas, o que dá margem à interpretação na hora em que o
usuário seleciona os pontos. Sendo assim, as medidas de cada modelo capturado foram
feitas por três usuários distintos. Os valores encontrados por cada usuário podem ser
vistos no apêndice B. A figura abaixo ilustra a distância medida entre dois pontos do
padrão utilizando o Visualizer.
Figura 4.8 – Distância entre dois pontos selecionados no modelo do padrão.
A tabela da figura 4.7 apresenta os valores médios dos valores encontrados pelos
usuários para cada modelo capturado utilizando-se o padrão de calibração com elipses,
enquanto que a tabela da figura 4.9 mostra os valores médios para cada modelo
capturado utilizando-se o padrão de calibração com vértices. Podemos observar que
todas as medidas médias estão dentro da margem de erro de 1%. As médias das medidas
obtidas por cada usuário para cada segmento medido também estão dentro da margem
de erro de 1%. Os desvios padrões calculados a partir destas tabelas foram cm066,0
para o padrão com elipses e cm073,0 para o padrão com vértices. Não há diferença
4 Implementação, Resultados e Testes
66
relevante entre os resultados dos dois padrões de calibração utilizados neste teste. Caso
uma determinada medida seja de fundamental importância, pode-se capturar o mesmo
modelo várias vezes e calcular a distância média para se obter um valor com maior
precisão. Podemos obter uma precisão próxima a de uma régua milimétrica.
Segmento Distância (cm)
05,0±
Modelo Um
Distância (cm)
Modelo Dois
Distância (cm)
Modelo Três
Distância (cm)
10 21,00 21,093 20,911 21,046
72 21,00 21,007 20,931 20,970
98 15,00 14,914 14,942 14,962
1110 14,90 14,869 14,921 14,853
70 24,90 25,081 24,942 24,858
21 24,90 24,854 24,878 25,052
118 15,00 15,062 14,974 15,037
109 15,00 14,940 14,905 15,037
Figura 4.9 – Tabela das distâncias médias medidas utilizando-se o padrão com vértices
na calibração.
A figura 4.4d ilustra um caso de uso do sistema como uma ferramenta de medição.
O modelo analisado foi obtido a partir de uma tubulação amassada e o usuário deseja
saber as dimensões do dano, para poder decidir como reparar a linha. Outra vantagem
da utilização de um sistema deste tipo é que um especialista pode fazer análises
remotamente, sem a necessidade de estar fisicamente presente no local da inspeção.
Com isso ele pode analisar modelos provenientes de diversas instalações
simultaneamente.
4.3.2 Segundo Teste
4 Implementação, Resultados e Testes
67
Como foi dito, o objetivo deste teste era levantar os parâmetros da equação
paramétrica que melhor descreve a tubulação utilizado. No final, o valor do raio no
modelo capturado deve ser próximo ao valor do modelo real.
A equação paramétrica de um cilindro é dada por:
dirYRdirXRdirZspsp )sin()cos(),( 0 θθθ +++= (4.2)
Temos que p0 é um ponto por onde passa o eixo central, enquanto o vetor dirZ dá
a direção deste mesmo eixo. O valor do raio é dado por R e os vetores dirX, dirY e dirZ
dão a direção do cilindro. A figura 4.10 ilustra os parâmetros da equação.
Figura 4.10 – Cilindro parametrizado.
Para cada cilindro devemos definir os parâmetros R, 0p e dirZ. Os vetores dirX,
dirY e dirZ são ortogonais entre si, bastando então definir dirZ. Podemos escrever p0 e
dirZ como:
),,(0 cbap = (4.3)
),,( wvudirZ = (4.4)
Podemos eliminar mais alguns parâmetros. Podemos considerar que o ponto 0p
pertence ao plano XZ. Logo 0=b . Se também considerarmos que o vetor dirZ não é
normalizado, podemos escrever 1=v , obtendo assim:
),0,(0 cap = (4.5)
4 Implementação, Resultados e Testes
68
),1,( wudirZ = (4.6)
Com isso, o eixo do cilindro não pode ser paralelo ao plano XZ. Então, dado um
conjunto de pontos referente a um cilindro, gostaríamos de determinar os valores R, a,
c, u e w que melhor caracterizam este cilindro. Podemos empregar a mesma técnica
utilizada para encontrar a melhor reta ajustada a um grupo de pontos. Ao invés de
minimizar a equação (3.24), utilizamos uma outra equação que dá a distância do ponto
ao eixo do cilindro, subtraída pelo valor do raio. Esta função calcula o erro de um ponto
em relação ao cilindro determinado pelos parâmetros e é dada por:
Rri −= b)(ε (4.7)
Observando a figura 4.10, temos que:
22
cab −= (4.8)
Então a equação (4.7) pode ser reescrita como:
Rri −−=22
)( caε (4.9)
O vetor a é dado por:
),,(0 czyaxpp −−=−=a (4.10)
onde ),,( zyxp = . Então temos:
2222)()( czyax −++−=a (4.11)
O vetor c é dado pelo vetor a projetado na direção de dirZ . Então temos
=
⋅
⋅= dirZ
dirZdirZ
dirZac ),1,(
)1(
),1,(),,(22
wuwu
wuczyax
++
⋅−− (4.12)
Simplificando a norma, obtemos:
)1(
)))(())(((22
22
wu
czwyaxu
++
−++−=c (4.13)
Para minimizar a soma dos erros para todos os pontos, utilizamos a biblioteca
MINPACK [17], destinada a resolve sistemas de equações não lineares e problemas de
mínimos quadrados não lineares. Há uma função que minimiza a soma dos quadrados
de funções não lineares de n variáveis com o algoritmo de Levenberg-Marquardt
modificado, sendo o usuário responsável por fornecer a função. No nosso caso,
fornecemos a função que implemente o somatório da equação (4.9) aplicada a todos os
pontos, com cinco variáveis correspondentes aos parâmetros do cilindro. O usuário
4 Implementação, Resultados e Testes
69
também deve fornecer valores iniciais razoáveis para as variáveis, a fim de diminuir o
número de chamadas à função.
Para calcular os valores iniciais, primeiramente aplicou-se o método dos mínimos
quadrados para achar a melhor reta que passa pelos pontos fornecidos. A direção da reta
é utilizada como a direção inicial do eixo do cilindro. Tomando esta direção achada
como o novo eixo Y e realizando a respectiva transformação dos pontos, aplicamos o
método MLS [12] para encontrar o melhor círculo que passa pelos pontos, ignorando as
suas coordenadas do eixo Y. O valor inicial para o raio é igual ao raio do círculo
encontrado. Aplicando a transformação inversa ao centro do círculo calculado, obtemos
o valor inicial de 0p . Estes valores iniciais calculados são muito próximos aos valores
finais encontrados quando os pontos do modelo estão igualmente distribuídos ao longo
do seu comprimento e curvatura.
O raio do tubo utilizado neste teste possui mm)5,03,150( ± de diâmetro médio,
medido com um paquímetro em diferentes pontos. O tubo foi colocado em três
diferentes posições em relação às câmeras para os testes na tabela abaixo. Cada um dos
testes A, B e C referem-se a três posições distintas. Para cada posição, capturou-se a
seqüência de imagens, referentes aos padrões projetados, uma vez. Utilizando esta
seqüência, foram gerados oito diferentes modelos para cada posição. Cada modelo foi
gerado duas vezes, uma para cada padrão de calibração. Os padrões eram
reposicionados e as câmeras calibradas novamente para cada um dos modelos. Sempre a
mesma seqüência de imagens era utilizada. Para isso, as câmeras devem permanecer na
mesma posição durante cada teste. Também foram utilizados diferentes números de
linhas codificadas na luz estruturada.
O objetivo deste procedimento era verificar como a posição do padrão influencia a
calibração das câmeras, comparar os dois padrões e a precisão dos resultados. As
tabelas completas com os resultados encontram-se no apêndice B. A figura 4.4b ilustra
um dos modelos capturados e com os parâmetros do cilindro ajustado. A segmento de
reta em vermelho representa o eixo do cilindro, enquanto o arco, perpendicular ao eixo,
possui um raio igual ao calculado.
Testes Padrão com Elipses Padrão com Vértices
Diâmetro Desvio Padrão Diâmetro Desvio Padrão
4 Implementação, Resultados e Testes
70
Médio (mm) (mm) Médio (mm) (mm)
Teste A 150,730 2,473 149,389 1.636
Teste B 147,457 2.777 147.875 2.140
Teste C 153,904 1.036 152,49 1.887
Figura 4.11 – Tabela dos valores finais obtidos pelos padrões de calibração.
Nas tabelas dos resultados obtidos nos testes A, B e C, a primeira observação é
que a calibração é dependente da posição do padrão em relação ao objeto capturado e as
câmeras. Na prática, observou-se que quanto mais perto do centro do objeto capturado
se posicionar o padrão de calibração, melhor são os resultados. O ângulo de inclinação
do padrão em relação às câmeras também influencia na calibração.
Na tabela acima podemos observar que a posição do objeto em relação à câmera
também influencia os resultados. Isso acontece, pois a função do OpenCV para
calibração dos parâmetros intrínsecos, apesar de melhorar os resultados, não torna as
imagens capturadas totalmente livres de distorções introduzidas pelas lentes. O OpenCV
implementa o método de Zhang para calibração de câmera.
Também podemos observar que não há novamente uma diferença considerável
entre os resultados alcançados pelos padrões de calibração. Ambos obtiveram resultados
próximos para as três posições distintas da tubulação capturada. Possivelmente este é
mais um indicativo da existência de distorções ópticas nas imagens capturadas.
Em relação aos diâmetros médios calculados, os resultados alcançados nos testes
apresentam erros variando entre 0,3% e 2,4%. Entre os resultados individuais de cada
modelo, os piores resultados foram obtidos pelos modelos B1, calibrado com o padrão
de elipses, e o modelo C4, calibrado com o padrão de vértices. Os erros foram 3,6% e
3,5% respectivamente. Estes erros refletem principalmente a diferença na calibração
devido ao posicionamento dos padrões de calibrações. Procurou-se neste teste testar
uma variedade de posições diferentes para os padrões de calibração, de modo a avaliar a
robustez da calibração. Os resultados mostram que a calibração deve ser melhorada.
5 Conclusão
O sistema estudado foi implementado com sucesso em todas as suas etapas:
calibração das câmeras, projeção da luz estruturada, captura e processamento de
imagens, correspondência entre os pixels das câmeras, triangulação e criação do modelo
final. A partir da aplicação implementada foram executados dois testes.
O primeiro teste consistiu em medir, nos modelos gerados, as distâncias entre
pontos notáveis, cujas posições no objeto original eram conhecidas. Todas as medidas
ficaram com um erro abaixo de 1%. O segundo teste aplicou o método de ajuste de
cilindro proposto neste trabalho a modelos capturados a partir de uma tubulação de
PVC. O diâmetro do tubo foi medido com paquímetro e comparado com o valor
calculado pela aplicação. Os raios médios, dos ajustes feitos aos modelos capturados em
diferentes posições em relação às câmeras, ficaram entre 0,3% e 2,4%. O erro máximo
obtido por um modelo capturado foi de 3,6%.
A diferença de resultados obtidos entre os testes pode ser explicada pelo fato de
que, enquanto o segundo teste utilizava vértices distribuídos no espaço, o primeiro
trabalhava apenas com pontos no plano de calibração perto da origem. Também, no
primeiro caso o objeto capturado se encontrava localizado no centro das imagens
capturadas, onde a distorções ópticas são menores, enquanto a tubulação capturada se
estendia de um extremo ao outro das imagens. Este é mais um indicativo de que a
calibração dos parâmetros intrínsecos deve ser feita com maior precisão. As distorções
radiais tiveram influência nos resultados obtidos.
Para que o sistema possa ser mais bem empregado como um instrumento de
medidas em engenharia, deve-se melhorar a etapa de calibração das câmeras, refinando
o modelo utilizado. Este é o principal gargalo do sistema aplicado para esta finalidade.
O método para resolver a correspondência entre as imagens de um par de câmeras
em uma configuração estérea, utilizando luz estruturada e codificação temporal, foi
eficaz em vários modelos de formas variadas. Estátuas, vasos, tubulações utilizadas nos
testes e pessoas foram modeladas com sucesso. O método mostrou-se robusto com
diferentes tipos de matérias capturados. A utilização de dois valores de exposição para
captura de imagens foi útil para objetos capturados, cujas superfícies misturam cores
claras e escuras. Única dificuldade encontrada foi modelar objetos com material
4 Implementação, Resultados e Testes
72
reflexivo. A luz estruturada projetada era refletida, criando áreas brancas nas imagens
capturadas, impossibilitando a correspondência. Tubos de PVC, que possuem uma
superfície reflexiva, não apresentaram este problema. Apenas materiais excessivamente
reflexivos geram falhas nas imagens, assim como objetos transparentes. Esta é uma
limitação comum a todos métodos ópticos de aquisição de formas.
Os resultados obtidos, utilizando diferentes números de linhas para a luz
estruturada, indicam que o fator limitante do método estéreo ativo, no sistema estudado,
é a resolução limitada das câmeras ( 480640× ). Enquanto que o projetor poderia
aumentar o número de linhas projetadas, as câmeras não conseguem capturar a
quantidade grande de linhas projetadas. Há um problema de padrões de interferência,
gerados nas imagens processadas. Essa interferência é repassada para o modelo, criando
irregularidades na sua superfície. Possivelmente, utilizar uma maior resolução deve
resolver este problema nas imagens processadas e permitir que uma maior quantidade
de linhas seja utilizada na luz estruturada para se obter modelos com maior número de
vértices.
Como produto deste trabalho foram apresentados dois modelos de calibração
coplanares para a calibração de câmeras. Estes padrões podem ser utilizados em
diferentes aplicações e cada um possui suas vantagens e desvantagens. Além de
poderem ser utilizados para calibração em tempo real com uma boa taxa de quadros por
segundo, são robustos contra ruídos na imagem e seus pontos de calibração são
encontrados com grande precisão na imagem capturada.
O segundo produto foi o método de ajuste de cilindro a um conjunto de pontos,
utilizado com sucesso no segundo teste, que pode ser empregado em futuras aplicações
de inspeção automatizada. A sua utilização é bastante simplificada, já não é necessário
fornecer valores iniciais aproximados.
Por último, deve-se fazer um comentário a respeito da biblioteca OpenCV. Todo o
sistema foi todo baseado nela, desde a implementação dos padrões de calibração, até o
processamento e armazenamento de imagens. Além de serem confiáveis, suas funções
são realmente otimizadas. Prova disso é alta taxa de quadros por segundo com o padrão
de calibração com vértices. O seu uso é recomendado para qualquer aplicação em Visão
Computacional.
4 Implementação, Resultados e Testes
73
5.1 Trabalhos Futuros
Uma continuação natural deste trabalho é utilizar câmeras digitais fotográficas ao
invés de câmeras digitais de vídeo. Estas possuem atualmente uma resolução média de
4.0 Megapixel, o que é muito superior às câmeras de vídeo, lentes ópticas melhores e
menos ruído nas imagens capturadas. Como o sistema captura cenas e objetos estáticos,
um maior tempo de captura não influenciaria os resultados. Seria necessário
desenvolver uma API que integrasse a câmera digital à aplicação do sistema. A Canon,
por exemplo, disponibiliza um SDK que possibilita desenvolver aplicações
customizadas para suas câmeras digitais e pode ser obtido na página do fabricante na
Internet mediante preenchimento de uma fixa de pedido. O ganho de qualidade nos
modelos gerados pode considerável, já que atualmente o gargalo do sistema são as
câmeras utilizadas, tanto pela resolução quanto pelas distorções ópticas.
Apesar de os padrões de calibração coplanares terem apresentado uma boa
precisão no primeiro teste, o desempenho no segundo teste não foi satisfatório. O
caminho natural para aprimoramento seria utilizar um padrão tridimensional para a
calibração das câmeras. Fica a idéia de se fazer um estudo comparativo entre os dois
tipos de padrões de calibração.
6 Referências Bibliográficas 1 Intel Open Source Computer Vision Library. Intel Research.
http://www.intel.com/research/mrl/research/opencv
Acessado em dezembro 2004. 2 Trucco, Emanuele. Verri, Alessandro. Introductory Techniques for 3-D
Computer Vision. New Jersey, EUA, Prentice Hall, 1998. 3 TSAI, Roger Y. An Efficient and Accurate Camera Calibration Technique for
3D Machine Vision. Proceedings of IEEE Conference on Computer Vision and Pattern Recognition, Miami Beach, FL, páginas 364-373, 1986.
4 TSAI, Roger Y. A Versatile Camera Calibration Technique for High-Accuracy
3D Machine Vision Cameras and Lenses. IEEE Journal, Vol. RA-3, No. 4, pp. 323-344, agosto 1987.
5 ZHANG, Zhengyou. A Flexible New Technique for Camera Calibration.
Microsoft Research. Technical Report MSR-TR-98-71, dezembro 1998. http://research.microsoft.com~zhang
Acessado em dezembro 2004.
6 SZENBERG, Flávio. Acompanhamento de Cenas com Calibração Automática de Câmeras. Tese de Doutorado, Departamento de Informática, PUC-RIO, 2001.
7 RUSS, John C. The Image Processing Handbook. CRC Press, 2ª edição, janeiro 1995.
8 GONZALEZ, Raphael C., WOODS, Richard E. Processamento de Imagens
Digitais. Editora Edgard Blucher, ISBN 8521202644, São Paulo, 2000. 9 MAGACHO, Romano J. Integração de um Dispositivo Óptico de Rastreamento
a uma Ferramenta de Realidade Virtual. Tese de Mestrado, Departamento de Informática, PUC-RIO, 2004.
10 Sá, Asla Medeiros. Medeiros, Esdras Soares. Carvalho, Paulo Cezar Pinto. Velho,
Luiz. Coded Structured Light for 3D-Photography: an Overview. Revista de Informática Teórica e Aplicada, Vol. 9, No. 2, outubro 2002.
11 Heath, F. G. Origins of the Binary Code. Scientific American Vol. 227, No. 2,
agosto 1972. 12 Umbach, Dale. Jones, Kerry N. A Few Methods for Fitting Circles to Data. Não
publicado, 2000. http://www.cs.bsu.edu/homepages/kerryj/kjones/circles.pdf
Acessado em janeiro 2005.
6 Referências Bibliográficas
75
13 Scharstein, Daniel. Szeliski, Richard. High-Accuracy Stereo Depth Maps Using
Structured Light. IEEE Computer Society Conference on Computer Vision and Pattern Recognition, volume 1, pp. 195-202, Madison, WI, junho 2003.
14 Shoemake, Ken. ARCBALL: A User Interface for Specifying Three-
Dimensional Orientation Using a Mouse. Proceedings of Graphics Interface, 1992, pp. 151-156.
15 Rademacher, Paul. Stewart, Nigel. GLUI User Interface.
http://www.nigels.com/glt/glui
Acessado em fevereiro 2005. 16 Scuri, Antônio. IM: Image Representation, Storage, Capture and Processing.
http://www.tecgraf.puc-rio.br/im
Acessado em fevereiro 2005.
17 MINPACK. Versão em C. http://cvs1.sourceforge.net/viewcvs.py/gretl/gretl/minpack/
Acessado em fevereiro 2005. 18 Nalwa, Vishvjit S. A Guided Tour of Computer Vision. EUA, Addison-Wesley
Professional, 1993. 19 Shreiner, Dave. Woo, Mason. Neider, Jackie. Davis, Tom. OpenGL Programming
Guide, Fourth Edition. EUA, Addison-Wesley Professional, novembro 2003. 20 ZHANG, Zhengyou. Flexible Camera Calibration by Viewing a Plane from
Unknown Orientation. International Conference on Computer Vision (ICCV`99), Corfu, Grécia, pp.666-673, setembro 1999.
21 Batlle, J. Mouaddib, E. Salvi, J. Recent Progress in Coded Structured Light as a
Technique to Solve the Correspondence Problem: A Survey. Pattern Recognition 31(7), pp.963-982, 1998.
22 Inokuchi, Seiji. Sato, Kosuki. Matsuda, Fumio. Range Imaging for 3D Object
Recognition. Proc. Int. Conf. on Pattern Recognition, pp.806-808, 1984. 23 Posdamer, J. L. Altschuler, M. D. Surface Measurement by Space-Encoded
Projected Beam Systems. Comput. Graphics Image Process. 18, pp. 1-17, 1982. 24 Digital Light Processing Technology.
http://www.dlp.com/
Acessado em abril de 2004. 25 Le Moigne, J. Waxman, A. Structured Light Pattern for Robot Mobility. IEEE
Journal of Robotics and Automation, Vol. 4, No. 5, pp. 541-548, 1988.
6 Referências Bibliográficas
76
26 Inokuchi, Seiji. Sato, Kosuki. Yamamoto, Hiryuki. Range Imaging System Based on Binary Image Accumulation. Proc. of 8th International Conference on Pattern Recognition, pp.233-234, 1986.
27 Morita, H. Yajima, K. Sakata, S. Reconstruction of Surfaces of 3D objects by M-
array Pattern Projection Method. Proc. of International Conference on Computer Vision, pp.468-473, 1988.
28 Carrihill, B. Hummel, R. Experiments with the Intensity Ratio Depth Sensor.
Computer Vision Graphics Image Process, 32, pp.337-358, 1985. 29 Boyer, K. Kak, A. Color-Encoded Structured Light for Rapid Active Ranging.
IEEE Trans. Pattern Analysis and Machine Intelligence, Vol. 9, Issue 1, pp.14-28, 1987.
30 Tajima, J. Iwakawa, M. 3-D Data Acquisition by Rainbow Range Finder. Proc.
International Conference on Pattern Recognition, pp.309-313, 1990. 31 Wust, C. Capson, D. Surface Profile Measurement Using Color Fringe
Projection. Machine Vision and Applications, Vol. 4, Issue 3, pp.193-203, 1991. 32 Hall-Holt, O. Rusinkiewicz, S. Stripe Boundary Codes for Real-Time
Structured-Light Range Scanning of Moving Objects. ICCV, pp.13-19, 2001.
Apêndice A – OpenCV
OpenCV (Intel Open Source Computer Vision Library) é uma API de média a alto
nível destinada ao desenvolvimento de aplicações na área de Visão Computacional,
como o nome já diz, e está disponível em versões para Windows e Unix. Contendo uma
coleção de funções em C e algumas classes em C++ que implementam vários
algoritmos populares de visão computacional e processamento de imagens, OpenCV é
direcionado a aplicações em tempo real. Identificação de objetos, reconhecimento
facial, reconhecimento de gestos e captura de movimentos são alguns exemplos de áreas
que utilizam esta biblioteca.
A versão mais atual desta biblioteca é a 4.0 beta. Porém neste trabalho utilizou-se
a versão 3.0 beta para Windows, que era a mais recente no começo do projeto. Esta
versão já vem com documentação em HTML bastante útil, porém que pode ser
melhorada em alguns pontos, principalmente no modo de uso e na descrição
incompletos de algumas funções. A documentação divide a biblioteca em sete principais
partes, cada uma fazendo referência a um conjunto de funções e estruturas com mesma
finalidade:
• Operações e estruturas básicas.
• Processamento e análise de imagens.
• Análise estrutural.
• Análise de movimento e rastreamento de objetos.
• Reconhecimento de objetos
• Calibração de câmeras e reconstrução 3D.
• Interface gráfica e aquisição de vídeo.
A primeira parte descreve as operações e estruturas básicas, utilizadas por todas as
outras funções do OpenCV. A estrutura utilizada para representar imagens é chamada
de IPLImage, originalmente usada pela biblioteca Intel Image Processing Library. Esta
estrutura é bastante detalhada e possui campos como números de canais, largura, altura,
tamanho, posição da origem, matriz de dados e outros mais específicos, como máscara
de cores etc. Além desta estrutura, há estruturas representativas de pontos, retângulos,
matrizes, grafos, árvores e outras estruturas dinâmicas. Como alternativa para
persistência de dados, pode-se salvar uma instância de qualquer estrutura em um
Apêndice A
78
arquivo em formato XML e posteriormente recarregá-la. São disponibilizadas funções
básicas para adicionar, subtrair, multiplicar, dividir, encontrar valor máximo e mínimo,
comparar e aplicar operações lógicas entre imagens e matrizes. Há também funções
específicas de matrizes e vetores como matriz transposta e inversa, produto escalar e
vetorial, autovalores e autovetores de matrizes simétricas e resolver sistemas de
equações lineares. Ou seja, as operações e estruturas básicas são bastante abrangentes e
servem como base para diversas aplicações em diferentes etapas, desde operações com
imagens até a construção de grafos complexos.
Na parte de processamento de imagens encontramos funções para suavizar, como
filtro Gaussiano e filtro médio, funções para detecção de bordas e cantos, como Canny e
Sobel, funções para conversão e reamostragem de imagens, como pirâmide Gaussiana, e
outras funções úteis como dilatação e erosão. Há também funções para desenhar linhas,
pontos, círculos, elipses, polígonos e texto em imagens. Para a parte de análise, pode-se
obter uma lista de componentes conexas de uma imagem, aplicar a transformada de
Hough para linhas e criação de histogramas, entre outras possibilidades.
A análise estrutural possui funções para contornos, geometria e subdivisões
planares. Cálculo de perímetro e área de um contorno, feixe convexo de uma lista de
pontos, teste de convexidade de um polígono e cálculo de melhor reta ou elipse
utilizando o método de mínimos quadrados são exemplos de funções encontradas.
Análise de movimento e rastreamento de objetos traz métodos específicos para
cálculo de fluxo óptico utilizando diferentes algoritmos, acúmulo de estatísticas de
fundo, segmentação de movimento etc. Destaca-se a implementação do filtro de
Kalman.
No OpenCV há duas funções para calibração de câmeras. Estas funções utilizam o
algoritmo de Zhang descrito em [5] e [20]. A primeira função calibra os parâmetros
intrínsecos e extrínsecos da câmera a partir de uma seqüência de imagens de um padrão
de calibração. A segunda função calcula apenas os parâmetros extrínsecos da câmera,
utilizando uma imagem do padrão de calibração.
Por último, o OpenCV disponibiliza uma modesta interface gráfica para o
desenvolvimento de aplicações, permitindo a criação de janelas e outras poucas opções.
É possível carregar e salvar imagens facilmente em todos os formatos mais usados,
como BMP, JPEG, PNG e TIFF. Na parte de vídeo, podemos obter imagens a partir de
Apêndice A
79
câmeras de vídeo ou arquivos AVI, bem como criar um novo arquivo AVI. Interessante
destacar que há uma função que permite obter um quadro rapidamente quando há
necessidade de sincronização de diferentes câmeras.
Em geral e de uma forma qualitativa, as funções são bem implementadas e muito
rápidas, cumprindo o seu objetivo de servir a aplicações em tempo real.
Apêndice B – Tabelas de Dados dos Testes
B.1 Primeiro Teste
As tabelas abaixo apresentam os resultados obtidos por cada um dos três usuários
que participaram do primeiro teste. Cada modelo capturado foi gerado duas vezes
utilizando calibrações de câmeras distintas. O padrão um refere-se ao padrão com
elipses enquanto que o padrão dois refere-se ao padrão com vértices. A coluna distância
média dá o valor da média aritmética de todas as distâncias medidas pelo usuário para
um dado segmento.
Segmento
Modelo Um
Distância (cm)
Modelo Dois
Distância (cm)
Modelo Três
Distância (cm) Distância
Média
(cm) Padrão
Um
Padrão
Dois
Padrão
Um
Padrão
Dois
Padrão
Um
Padrão
Dois
10 20,988 21,086 20,988 20,884 21,083 21,013 21,007
72 21,074 21,024 21,074 20,962 20,963 20,980 21,013
98 14,939 14,981 14,939 14,922 15,021 14,975 14,963
1110 14,914 14,879 14,914 14,924 14,844 14,885 14,893
70 24,984 25,069 24,984 24,930 24,774 24,847 24,931
21 24,830 24,870 24,830 24,853 24,954 25,051 24,898
118 15,003 15,125 15,003 14,994 14,990 15,046 15,027
109 14,958 14,945 14,958 14,935 15,013 15,044 14,976
Figura B.1 – Tabela dos resultados obtidos pelo primeiro usuário.
Apêndice B
81
Segmento
Modelo Um
Distância (cm)
Modelo Dois
Distância (cm)
Modelo Três
Distância (cm) Distância
Média
(cm) Padrão
Um
Padrão
Dois
Padrão
Um
Padrão
Dois
Padrão
Um
Padrão
Dois
10 21,050 21,126 20,873 20,927 21,043 21,024 21,007
72 21,084 20,989 21,105 20,929 20,882 20,963 20,992
98 14,748 14,894 14,911 14,912 14,943 14,919 14,889
1110 14,855 14,883 14,797 14,945 14,868 14,816 14,861
70 24,970 25,078 24,806 24,977 24,751 24,875 24,910
21 24,896 24,865 24,920 24,899 24,920 25,032 24,922
118 14,939 15,027 14,879 14,950 14,958 15,052 14,968
109 14,838 14,929 14,933 14,891 14,980 15,032 14,934
Figura B.2 – Tabela dos resultados obtidos pelo segundo usuário.
Segmento
Modelo Um
Distância (cm)
Modelo Dois
Distância (cm)
Modelo Três
Distância (cm) Distância
Média
(cm) Padrão
Um
Padrão
Dois
Padrão
Um
Padrão
Dois
Padrão
Um
Padrão
Dois
10 21,002 21,066 20,969 20,922 21,044 21,102 21,018
72 21,047 21,008 20,953 20,902 20,958 20,966 20,973
98 14,929 14,868 14,914 14,991 14,929 14,993 14,937
1110 14,918 14,845 14,906 14,894 14,847 14,858 14,887
70 25,059 25,096 24,823 24,919 24,836 24,851 24,931
21 24,847 24,826 24,947 24,883 24,977 25,074 24,926
118 15,033 15,035 14,909 14,977 14,900 15,013 14,978
109 14,852 14,946 14,939 14,890 14,979 15,034 14,940
Figura B.3 – Tabela dos resultados obtidos pelo terceiro usuário.
Apêndice B
82
B.2 Segundo Teste
As tabelas apresentam os resultados obtidos no segundo teste. A tubulação
utilizada como modelo foi capturada em três posições diferentes, dadas pelas letras A, B
e C. Para cada teste foram gerados oito modelos, modificando a posição dos padrões de
calibração, recalibrando as câmeras e mantendo as mesmas imagens capturadas.
Ajustou-se um cilindro para cada modelo criado.
Modelos Número de
Linhas
Número de
Pontos
Padrão com
Elipses
Padrão com
Vértices
Diâmetro (mm) Diâmetro (mm)
Modelo A1 3232× 325 149,14 150,38
Modelo A2 6464× 1233 148,94 150,26
Modelo A3 3232× 325 150,34 146,71
Modelo A4 6464× 1233 149,99 146,78
Modelo A5 3232× 325 149,19 150,45
Modelo A6 6464× 1233 148,94 150,31
Modelo A7 3232× 325 154,83 150,12
Modelo A8 6464× 1233 154,47 150,10
Figura B.4 – Tabela dos resultados obtidos para a posição A.
Modelos Número de
Linhas
Número de
Pontos
Padrão com
Elipses
Padrão com
Vértices
Diâmetro (cm) Diâmetro (cm)
Modelo B1 3232× 243 144,94 145,11
Modelo B2 6464× 883 146,73 147,84
Modelo B3 3232× 243 145,04 148,09
Modelo B4 6464× 883 147,51 151,03
Modelo B5 3232× 243 145,03 147,73
Modelo B6 6464× 883 147,71 150,47
Modelo B7 3232× 243 149,77 145,12
Modelo B8 6464× 883 152,93 147,61
Figura B.5 – Tabela dos resultados obtidos para a posição B.
Apêndice B
83
Modelos Número de
Linhas
Número de
Pontos
Padrão com
Elipses
Padrão com
Vértices
Diâmetro (cm) Diâmetro (cm)
Modelo C1 3232× 343 154,42 151,31
Modelo C2 6464× 1249 153,70 150,62
Modelo C3 3232× 343 154,77 155,52
Modelo C4 6464× 1249 154,33 155,39
Modelo C5 3232× 343 152,63 152,09
Modelo C6 6464× 1249 152,06 151,51
Modelo C7 3232× 343 154,89 152,05
Modelo C8 6464× 1249 154,43 151,43
Figura B.6 – Tabela dos resultados obtidos para a posição C.