como desenvolver aplicações utilizando processamento de imagens
TRANSCRIPT
FACULDADE DO CENTRO LESTE
RUBENS MATIM LOURENÇO REIS DOS SANTOS
COMO DESENVOLVER APLICAÇÕES
UTILIZANDO PROCESSAMENTO DE IMAGENS
SERRA
2010
RUBENS MARTIM LOUREÇO REIS DOS SANTOS
COMO DESENVOLVER APLICAÇÕES
UTILIZANDO PROCESSAMENTO DE IMAGENS
Monografia apresentada ao Curso de
Graduação em Sistemas de
Informação, da Faculdade do Centro
Leste, como requisito para obtenção
de título de Bacharel em Sistemas de
Informação.
Orientador:
Prof. MSc. Vanderson José Ildefonso
Silva
SERRA
2010
Agradeço primeiramente a Deus, por ter
auxiliado nesta trajetória; um agradecimento
especial à minha esposa, familiares e amigos que,
de uma forma ou de outra, me ajudaram a realizar
esse projeto; aos meus colegas de classe, e
principalmente à professora e coordenadora do
curso de Sistemas de Informação Luciana Itida
Ferrari e meu orientador Vanderson José Ildefonso
Silva, pois com certeza sem o apoio e a
demonstração de confiança e capacidade que
depositaram em mim seria muito difícil o trabalho
de desenvolver o meu Projeto de Graduação.
RESUMO
Reconhecimento de padrões é uma tarefa extremamente complexa sob o ponto de vista
computacional. A quantidade de informação contida em uma imagem é absurdamente grande
e estas informações, de acordo com a aplicação, não poderão ser desprezadas então qualquer
cálculo executado para a extração de informação destas imagens torna-se extremamente
massivo sob o aspecto computacional e de ocupação de memória. Este trabalho tem o objetivo
de apresentar a técnica IPCA - acrônimo de Incremental Principal Component Analysis -
Análise de Componentes Principais Incrementáveis como ferramenta para auxiliar os
profissionais de informática no desenvolvimento de softwares que necessitem por requisito
utilizarem processamento de imagens e/ou reconhecimento de padrões. Esta técnica será
abordada com a utilização do software Matlab® e será discutido como desenvolver aplicações
utilizando processamento de imagens com uma simulação de desenvolvimento de um
protótipo para reconhecimento de faces. A relevância deste trabalho se deve ao fato de que
qualquer profissional que o utilizar reduzirá grande esforço em pesquisa e em entendimento
desta técnica.
ABSTRACT
Pattern recognition is an extremely complex task under computing viewpoint. The amount of
information contained in an image is absurdly large and this information, in accordance with
the application, cannot be neglected so any calculation executed for extracting information
from these images becomes extremely massive computation under the look and memory
occupation. This work aims to introduce the technique IPCA-acronym for Incremental Main
Component Analysis tool to assist professionals in software development that require per
requirement using image processing and/or pattern recognition. This technique will be
addressed with the use of Matlab® software and will be discussed how to develop
applications using image processing with a simulation of developing a prototype for faces
recognition. The relevance of this work is because any professional that use will reduce great
effort in research and in understanding this technique.
SUMÁRIO
CAPÍTULO 1 - INTRODUÇÃO.............................................................................................1
CAPÍTULO 2 - TECNOLOGIAS PARA AQUISIÇÃO DE IMAGENS............................3
2.1 TIPOS DE IMAGENS.................................................................................................4
CAPÍTULO 3 - PASSOS NO PROCESSAMENTO DE IMAGENS...................................7
3.1 DEFINIÇÃO DO PROBLEMA...................................................................................8
3.1.2 Diferenças de Imagens por Formação de Cor.................................................................9
3.2 AQUISIÇÃO DE IMAGENS....................................................................................14
3.3 PRÉ-PROCESSAMENTO DAS IMAGENS.............................................................15
3.4 SEGMENTAÇÃO......................................................................................................15
3.5 REPRESENTAÇÃO E DESCRIÇÃO.......................................................................16
3.6 RECONHECIMENTO E INTERPRETAÇÃO.........................................................16
3.7 RESULTADO............................................................................................................17
CAPÍTULO 4 - TECNICAS DE PROCESSAMENTO UTILIZANDO O MATLAB.....18
4.1 DEFINIÇÃO DO PROBLEMA.................................................................................18
4.2 AQUISIÇÃO DE IMAGENS....................................................................................18
4.3 DEFINIÇÃO DA TÉCNICA ESCOLHIDA..............................................................23
4.3.1 Funcionamento do Ipca................................................................................................24
4.3.2 Autovetores e Autovalores...........................................................................................26
4.3.3 Utilização do Matlab® em outras Plataformas de Desenvolvimento............................28
4.4 SEGUIMENTAÇÃO.................................................................................................30
4.5 APRESENTAÇÃO DOS PASSOS ATÉ A SEGMENTAÇÃO................................31
4.6 RECONHECIMENTO E INTERPRETAÇÃO.........................................................32
CAPÍTULO 5 - RESULTADOS EXPERIMENTAIS.........................................................33
CAPÍTULO 6 - PROJETOS FUTUROS..............................................................................35
CAPÍTULO 7 - CONCLUSÃO..............................................................................................36
REFERENCIAS......................................................................................................................37
1
CAPÍTULO 1 - INTRODUÇÃO
O uso de métodos para processamento de imagens é alvo de estudo de muitos especialistas de
diversas áreas de atuações. Essa preocupação em utilizar imagens em aplicações diversas
advém do fato de o ser humano ter uma capacidade limitada de analisar fatos ou dados
abstratos, quer dizer, o ser humano necessita de uma habilidade gigantesca para conseguir
fazer uma análise de um fato se este for algo abstrato, impalpável.
De acordo com Santaella “O estudo da linguagem e dos signos é muito antigo. A preocupação
com os problemas da linguagem começam na Grécia. A semiótica implícita compreende todas
as investigações sobre a natureza dos signos, da significação e da comunicação, é uma
semiótica explícita quando a ciência semiótica propriamente dita começou a se desenvolver”
(SANTAELLA, 2002: XII apud FRIZERA & VALADÃO, 2008).
“A teoria semiótica nos habilita a penetrar no movimento interno das mensagens, o que nos dá
a possibilidade de empreender os procedimentos e recursos empregados nas palavras,
imagens, diagramas, sons, nas relações entre elas, permitindo a análise das mensagens. As
mensagens podem ser analisadas em si mesmas, nas suas propriedades internas, quer dizer,
nos seus aspectos qualitativos, sensórios, tais como, na linguagem visual, por exemplo, as
cores, linhas, formas, volumes, movimento, dinâmica, quando, em terminologia semiótica,
analisa-se os quali-signos das mensagens” (MAGALHÃES BARBOSA, 2008 apud
FRIZERA & VALADÃO, 2008).
Segundo Gonzalez & Woods (2003) “O interesse em métodos de processamento de imagens
digitais decorre de duas áreas principais de aplicação: melhoria de informação visual para
interpretação humana e o processamento de dados de cenas para percepção automática através
de maquinas”.
Esse interesse em se utilizar meios digitais e computacionais para processamento de imagens
esta relacionada à tentativa de extrair ao máximo a interferência humana em processos de
verificações/constatações, onde o indivíduo responsável por este processo é alvo de muito
desgaste e imperícia. A justificativa então para utilização de tecnologia para este tipo de
aplicação é de se reparar as “falhas” que este indivíduo pode cometer.
No estudo de processamento de imagens estão envolvidos diversos tipos de profissionais
formados em diversas áreas de conhecimento, porém existe um grande problema para os
profissionais formados em tecnologia da informação, onde disciplinas que contemplem estes
2
fundamentos teóricos simplesmente não existem. Comenta-se a falta de informação teórica
apenas para este tipo de profissional, pois a sua formação lhe permite desenvolver aplicações
comerciais e industriais diversas, mas deixa a desejar se no decorrer de sua carreira necessitar
de desenvolver algo envolvendo processamento de imagens.
Seguindo este contexto, a aquisição da imagem é algo de suma importância para que possa ser
analisada de forma íntegra e detalhada um determinado fato, porém não se deve perder o foco
do problema a ser solucionado com esta comparação.
Neste trabalho será mostrado como desenvolver uma aplicação utilizando processamento de
imagens adotando o software Matlab® que já possui um toolbox (biblioteca de ferramentas)
com inúmeras funções para manipulação e aquisição de imagens. Deve-se ainda ressaltar que
será mostrado como utilizar o software Matlab® para “exportar” as ferramentas necessárias
para composição da técnica IPCA para utilização em outra IDE (Integrated Development
Environment ou Ambiente Integrado de Desenvolvimento).
Toda essa demonstração será abordada de forma expositiva com utilização de tabelas e
imagens do software Matlab® durante o processo de desenvolvimento do projeto proposto.
3
CAPÍTULO 2 - TECNOLOGIAS PARA AQUISIÇÃO DE IMAGENS
Com o avanço tecnológico e com a popularização de câmeras de vídeo torna-se
gradativamente fácil a aquisição de imagens para diversos fins. Este fato esta relacionado à
“disseminação da tecnologia CCD (Charge Coupled Device – Dispositivo de Carga
Acoplado), na década de 80, o que permitiu uma redução de custos e aumento de
confiabilidade em relação às antigas câmaras de tubo de raios catódicos” (GALO,
HASEGAWA & TOMMASELLI, 1999).
Os dispositivos de acoplamento de carga (CCD) são circuitos integrados de silício, usados
como transdutores de imagem. Um dispositivo transdutor é aquele capaz de transformar uma
forma de energia em outra, no caso energia luminosa em energia elétrica. Existem dois tipos
básicos de CCDs, o CCD linear e o CCD Array, que podem ser utilizados em função da
aplicação da câmera.
“O CCD linear nada mais é que uma fileira com milhares de elementos fotossensíveis que
varrem a área onde a imagem se forma na câmera, desta forma, captura uma coleção de linhas
que formam a foto”. (CAPELARO, MENDONÇA & TEIXEIRA, 1997).
A outra forma básica de um CCD é do tipo Array que “é uma matriz com milhares, ou até
milhões, de elementos fotossensíveis que capturam os pontos da imagem na câmera de uma
vez só. As câmeras que utilizam este tipo de CCD são as mais populares do mercado e
apresentam não só preços mais acessíveis, como também facilidade de uso e portabilidade.”
(CAPELARO, MENDONÇA & TEIXEIRA, 1997).
Na figura I temos exemplos de como é feita a captura da imagem pelos dois tipos de CCDs.
Figura I: Exemplos de CCDs capturando imagens do mundo real.
Fonte: Adaptado de (CAPELARO, MENDONÇA & TEIXEIRA, 1997).
4
Deve-se ainda ressaltar que os dispositivos com tecnologia CCD estão ligados a imagens
digitais que, por este fato, tem um elevado grau de confiabilidade para uma possível tentativa
de recuperação ou “ajuste” na imagem capturada em relação à imagem real.
Neste processo existem dois pontos fundamentais a serem observados: um dispositivo físico
que seja sensível a uma banda do espectro de energia eletromagnética e que produza um sinal
de saída elétrica proporcional a um nível de energia percebida, o segundo ponto é um
conversor deste sinal elétrico de saída para a forma digital. O CCD então é utilizado para
solucionar estes dois pontos citados, reduzindo assim o custo neste procedimento e a
interferência externa na captura e digitalização da imagem.
2.1 TIPOS DE IMAGENS
Para utilização de ferramentas no processamento de imagens primeiramente deve-se conhecer
os tipos de imagens (ao menos os tipos mais comuns) e quais são suportadas pelas
ferramentas que serão empregadas.
A informação sobre o tipo de imagem que será adquirida pelo sistema poderá acarretar em
efeitos inesperados como excesso de processamento, perda de informação ou mesmo
dificuldades em manipular estas imagens de forma computacional.
Levando este ultimo comentário em consideração devemos então ter o domínio sobre como os
tipos de imagens se “comportam” dentro do sistema computacional, para que possamos
identificar as ferramentas necessárias para suas devidas manipulações.
Para este trabalho em especial serão apresentadas os tipos de imagens (e originários de
importação) suportados pelo software Matlab® que estão apresentadas na figura II:
Tipos de
ArquivoExtensão Descrição
Função de
Importação
Função de
Exportação
Imagens BMP Windows Bitmap imread imwrite
GIF Graphics Interchange Format
5
Tipos de
ArquivoExtensão Descrição
Função de
Importação
Função de
Exportação
HDF Hierarchical Data Format
JPEG ou JPG Joint Photographic Experts Group
JP2, JPF, JPX, J2C, ou
J2K
JPEG 2000
PBM Portable Bitmap
PCX Paintbrush
PGM Portable Graymap
PNG Portable Network Graphics
PNM Portable Any Map
PPM Portable Pixmap
RAS Sun Raster
TIFF ou TIF Tagged Image File Format
XWD X Window Dump
CUR Windows Cursor resources imread None
FITS ou FTS Flexible Image Transport
System
ICO Windows Icon resources
Áudio AU ou SND NeXT/Sun sound auread auwrite
WAV Microsoft WAVE sound wavread wavwrite
Vídeo
(Qualquer
AVI Audio Vídeo Interleave VídeoReader VídeoWriter
MJ2 Motion JPEG 2000 VídeoReader None
6
Tipos de
ArquivoExtensão Descrição
Função de
Importação
Função de
Exportação
plataforma)
Vídeo
(Windows)
MPG Motion Picture Experts Group,
phases 1 and 2
VídeoReader None
ASF, ASX ou WMV Windows Media
any Formats supported by
Microsoft DirectShow®
Vídeo
(Mac®)
MPG, MP4 ou M4V MPEG-1 e MPEG-4 VídeoReader None
any Formats supported by
QuickTime®,
including .mov, .3gp, .3g2,
and .dv
Vídeo
(Linux)
any Formats supported by your
installed GStreamer plug-ins,
including .ogg
VídeoReader None
Figura II: Comandos na linguagem “m” (Linguagem proprietária do software Matlab®).
Fonte: Adaptado de (Product Help Software Matlab®).
7
CAPÍTULO 3 - PASSOS NO PROCESSAMENTO DE IMAGENS
Depois de obtida as imagens começam as etapas de “preparação” destas imagens para
melhorar as informações que se queira extrair, ou seja, começamos neste ponto a pensar no
que devemos extrair da imagem para que posteriormente se faça as devidas comparações ou
conclusões.
Deve-se ressaltar ainda que para extrair as informações que queremos processar deve-se
pensar em algo compreensível para computadores, pois a performance e confiabilidade neste
tipo de aplicação são pontos cruciais.
Para que se tenha sucesso no processo de comparação deve-se seguir uma sequência no
processamento da imagem até que se obtenha uma “informação” a ser analisada e comparada.
Para isto, será referenciada neste trabalho uma sequência tida como “passos fundamentais em
processamento de imagens digitais” (figura III) proposta por Gonzalez & Woods (2003) e
utilizada largamente em diversos projetos deste campo de pesquisa.
Figura III: Passos Fundamentais em Processamento de Imagens Digitais
Fonte: Adaptado de (GONZÁLES & WOODS, 2003).
8
3.1 DEFINIÇÃO DO PROBLEMA
No primeiro passo está a delimitação e definição do problema. Esta etapa consiste em não
ultrapassar os limites do projeto, já que o processamento de imagens, utilizando-se dos passos
supracitados, pode ser utilizado em diversas aplicações. Deve-se citar que este passo,
comparando com a Engenharia de Software, é onde se faz todos os levantamentos de
qualidade, prazo, custo, etc.
No decorrer do desenvolvimento da aplicação, no que tange os processos de Engenharia de
Software, temos que levar em consideração conhecimentos prévios sobre conceitos de
processamento de imagens dentro da visão computacional e sobre as tecnologias que serão
empregadas no projeto, então, neste passo, estará a descrição de alguns desses conceitos:
3.1.1 Visão Computacional
Nesta grande área do conhecimento, uma imagem é composta de uma matriz (ou mais) de
pontos que são chamados de pixels (unidade básica em uma imagem). Embora para os seres
humanos isso possa ser de vários tamanhos, para o computador é a unidade básica de “ponto
luminoso”, ou seja, naquele pequeno retângulo que contém um pixel pode haver apenas uma
cor, com apenas uma intensidade de luz. (GONZÁLES & WOODS, 2003).
A partir deste conceito de pixel poderemos falar de resolução: o conceito de resolução é
exatamente quantos pixels há em uma determinada área. Utilizando este conceito, pode-se
saber quando uma imagem é melhor que a outra, já que a de melhor qualidade terá mais pixels
por área, ou seja, mais resolução. Quanto maior a resolução mais pixels por polegada terá a
imagem. (FREITAS, 1999).
Para demonstrar como é definida a resolução de uma imagem verifica-se quantos pixels temos
na “altura” (linhas) e na “largura” (colunas), exemplo: uma foto de 480x640 (normalmente é
representado sempre o maior número primeiro: 640x480, e também normalmente o número de
9
“colunas” é maior que o número de “linhas”) pixels nos fornece uma resolução de 307.200
pixels na tela. Cada pixel contendo apenas uma cor e apenas uma intensidade de luz.
Por convenção uma imagem tem seus pixels mapeados da seguinte forma:
Figura IV: Convenção utilizada na leitura de imagens digitais (a) e, leitura de imagens digitais
pelo Matlab®(b).
Fonte: Adaptado de (GONZÁLES, WOODS & EDDINS, 2007).
3.1.2 Diferenças de Imagens por Formação de Cor
A imagem pode ser formada basicamente por três tipos de formação de cor: RGB, HSI e
Intensity. (GONZÁLES & WOODS, 2003)
Na etapa de definição do problema devemos conhecer bem os tipos de formação de imagens e
como estas imagens são compreendidas pelos computadores, assim conseguiremos assegurar
um nível de processamento satisfatório e minimizaremos possíveis erros no decorrer do
desenvolvimento.
(b)(a) (b)(b)(b)(b)(b)(b)(a)(a)(a)(a)(a)(a)
10
3.1.2.1 RGB
A imagem RGB é formada por três matrizes sobrepostas com quantificações de cores
relacionadas a vermelho (Red), verde (Green) e azul (Blue) como mostrado na figura abaixo:
Figura V: Formação da imagem RGB
Fonte: (Wikimedia Commons, acessado em 23/10/10).
Esta representação é equivalente, matematicamente a (equação 1):
(1)
Onde:
Im: Imagem Final
Ik: Imagem de apenas uma cor em cada camada
Em termos computacionais temos a seguinte leitura da imagem no formato RGB:
Im= ∑camadas
[ I k ]
11
Figura VI: Leitura da imagem RGB pixel a pixel pelo computador
Fonte: Product Help Matlab®.
3.1.2.2 HSI
O sistema HSI funciona com uma espécie de disco em que uma vez selecionada a cor correta,
é possível variar sua iluminação (quanto de branco ela possui) e quanto de cor ela possui
(saturação). (GONZÁLES & WOODS, 2003)
Este tipo de imagem é composta por angulação (H), saturação (S) e intensidade (I, que pode
ser entendido também como luminosidade) conforme diagramado na figura VII:
12
Figura VII: Exemplificação dos discos HSI
Fonte: Adaptado de (SOBRAL, 2002 Disponível em
http://gec.di.uminho.pt/lesi/vpc0203/Aula04Cor.pdf).
Para o software Matlab® este tipo de formação de imagem não é suportado, porém existe uma
forma (funções) similar para se trabalhar com este tipo de imagem utilizando o HSV:
13
Figura VIII: Ilustração da compatibilidade da formação HSI com HSV
Fonte: Product Help Matlab®.
3.1.2.3 Intensity
O modo intensity (Intensidade ou Luminosidade) consiste no preto e branco, composto por
pontos que variam de 0 a 255 em escala de intensidade de luz. Não possui componente de cor,
portanto a imagem fica em tons de cinza. Computacionalmente é uma matriz bidimensional, o
que exige menos do poder de processamento do computador. (LU, 2001 apud FRIZERA &
VALADÃO, 2008).
14
Figura IX: Leitura da imagem em tons de Cinza (Gray Scale) pixel a pixel pelo computador
Fonte: Product Help Matlab®.
3.2 AQUISIÇÃO DE IMAGENS
Neste passo do processo faz-se a aquisição das imagens que serão utilizadas nas comparações
e/ou identificações. Como citado anteriormente, a aquisição das imagens dependem de um
dispositivo que seja sensível a uma banda do espectro de energia eletromagnética e que
produza um sinal de saída elétrica proporcional a um nível de energia percebida e converta
este sinal elétrico de saída para a forma digital.
Este dispositivo será de crucial importância, pois com ele é que determinaremos os tipos de
imagens que servirão de “entrada” no sistema.
15
Dependendo do dispositivo teremos de verificar questões de transformações, manipulações
das imagens de entrada, redimensionamento, etc. Portanto a escolha do dispositivo interferirá
completamente no andamento do projeto.
Neste projeto será utilizado o CCD de uma câmera digital integrada ao computador (WebCan)
para a aquisição das imagens que serão testadas e demonstradas.
O software Matlab® por sua vez nos permite controlar este hardware internamente sem
precisar utilizar a interface do proprietário fabricante, ou seja, conseguimos através de
algumas funções controlar completamente o dispositivo de captura sem problemas.
3.3 PRÉ-PROCESSAMENTO DAS IMAGENS
Nesta fase será evidenciado o que se espera recuperar nas próximas etapas, ou seja, o sucesso
nesta fase é determinante nas fases subsequentes. Um exemplo de pré-processamento é a
retirada de ruído (na imagem o ruído é perceptível como distorções ou falhas na figura), o
realce de uma determinada região, etc.
A imagem de “entrada” passará por filtros e transformadas como, por exemplo, a
transformada de Laplace, que tem como objetivo de trabalhar a imagem no domínio da
frequência, ou seja, se desejarmos aplicar um filtro na cor ou luminosidade da imagem esta é
uma possível solução de filtro.
A escolha dos filtros e transformadas a que as imagens serão submetidas deve ser estudado
com clareza e levado em consideração a que se propõe a solução computacional idealizada,
pois se a informação for extraída de forma errônea ou mesmo perdida, todos os passos
subsequentes não terão eficiência.
3.4 SEGMENTAÇÃO
De acordo com GONZÁLES & WOODS, seguimentação faz com que se divida uma imagem
de entrada em partes ou objetos constituintes. Esta fase é a mais complexa principalmente se
16
tratando de sistemas real-time (tempo real) pois o nível de processamento da máquina é muito
alto e dependendo da aplicação se torna inviável.
Por esta razão deve-se utilizar padrões de entradas e trabalhar focado nestes padrões, a fim de
conseguir limitar o número de características relevantes a que se propõe o sistema a ser
desenvolvido, ganhando robustez e confiabilidade.
Pode-se citar como exemplo de padronização o formato de entrada em pixels das fotos a
serem testadas para reconhecimento facial, ou mesmo o formato da imagem, RGB, Gray
Scale (tons de cinza), etc. Mais a frente será demostrada uma melhor definição das técnicas e
ferramentas propostas.
3.5 REPRESENTAÇÃO E DESCRIÇÃO
A saída do processo de segmentação é constituída tipicamente de dados em forma de pixels
(raw pixel data), desta forma devemos então transformar esta saída em uma forma adequada
ao processamento computacional, ou seja, devemos fazer uma transformação dos dados
segmentados em estruturas fáceis de se manipular de forma computacional: strings, inteiros,
pontos flutuantes, etc.
O processo de Descrição é também conhecida como seleção de característica, onde
procuramos separar a informação que representa o que esperamos comparar/constatar.
3.6 RECONHECIMENTO E INTERPRETAÇÃO
Reconhecimento é o ato de atribuir um rótulo a um objeto baseado na informação fornecida
por seu descritor. A interpretação envolve a atribuição de um significado a um conjunto de
objetos conhecidos. Esta etapa é muito confusa pelos termos utilizados, porém deve-se
destacar que aqui não identifica nada, nesta fase atribuímos um rótulo e em seguida (ou
contíguo) atribuímos um significado a um conjunto de objetos conhecidos e esse rótulo e este
significado é que será testado junto a uma base de conhecimento previamente categorizada
17
com valores e características que devem ser padrões a fim de se conseguir clareza e eficácia
no processamento.
3.7 RESULTADO
Resultado é o que se espera como saída deste sistema de processamento, e a partir daí
devemos manipular, exibir, ou qualquer outra ação de acordo com a aplicação desejada com
este processamento.
Não necessariamente precisamos passar por todas estas etapas para se chegar ao resultado
esperado, porém o que determinará este fato será como será feito e para que será feito este
processamento.
18
CAPÍTULO 4 - TECNICAS DE PROCESSAMENTO UTILIZANDO O MATLAB
Seguindo a linha de raciocínio do capítulo anterior vamos demonstrar neste capítulo como
utilizar a ferramenta Matlab® (R2010b) para desenvolver os “passos fundamentais”, porém
não será levado em consideração o tipo de projeto, ou seja, demonstraremos de forma
genérica as funções e ferramentas que o software Matlab® oferece.
4.1 DEFINIÇÃO DO PROBLEMA
Este passo no desenvolvimento de qualquer atividade é indiferente de sistema ou ferramenta a
ser utilizado, então iremos propor a seguinte definição:
“Temos em nosso estabelecimento comercial uma câmera de vídeo ao qual é feito um
monitoramento a fim de se preservar a segurança dos funcionários e dos clientes contra furtos
e/ou roubo. Através desta câmera podemos utilizar um sistema computacional (esta é a
proposta) que reconheça os funcionários e/ou clientes caso seja efetuado um furto ou roubo,
assim poderemos identificar o infrator em futuros eventos facilmente, ou ainda, se houver
uma prévia dos recentes infratores da região poderemos evitar que o estabelecimento sofra
também um evento deste”.
Deve-se ressaltar que nesta proposta não será identificado o infrator automaticamente sem
nenhuma informação prévia, ou seja, o sistema identificará o infrator, porém este já será
conhecido.
4.2 AQUISIÇÃO DE IMAGENS
A partir deste passo levaremos em consideração para as demonstrações o problema proposto
no passo anterior e antes de iniciar os passos seguintes falaremos um pouco mais sobre o
software Matlab®. Porém como propomos anteriormente estes passos poderão ser utilizados
para desenvolver qualquer tipo de projeto.
19
O Matlab® é uma ferramenta de utilidades diversas usada largamente no meio científico e
também no meio industrial, e tem como diferenciação de utilidades seus “toolboxes”, que no
caso de processamento de imagens iremos utilizar os seguintes:
Imaq e Image, além dos conjuntos de operadores e funções básicas do próprio software.
Utilizaremos ainda para demonstrações o “Product Help”, ou seja, o Help do Matlab® que é
de grande utilidade e bem extenso.
Na tela inicial do programa temos o seguinte layout como aparência default:
Figura X: Aparência default do software na tela principal
Fonte: Software Matlab® (R2010b).
Nesta tela temos os seguintes componentes para auxílio e controle dos passos que estão sendo
desenvolvidos:
Current Folder: Esta é a área de trabalho ao qual o software controla e mantém todos os
arquivos gerados. O software Matlab® tem esta característica, ele não opera fora dos seus
“limites” dentro da máquina.
Command Windows: Esta janela é a responsável por executar os comandos.
20
Workspace: Neste espaço ficam armazenadas todas as variáveis criadas pelos comandos
executados no Command Window.
Command History: Janela onde ficam documentados todos os comandos executados (ou não)
no Command Window, ou seja, tudo o que for digitado no Command Window será registrado
no Command History.
Deve-se ressaltar que este layout de tela pode ser alterado a qualquer momento pelo usuário,
ou até mesmo incluído outras janelas como, por exemplo, os arquivos de script, que são
arquivos onde podemos criar programas, ou funções ou partes de programas de acordo com a
necessidade de utilização.
Para a aquisição de imagens temos diversas funções como:
videoinput - Construtor de um objeto de entrada no formato de vídeo.
get - Retorna as propriedades do objeto adquirido em forma de imagem.
inspect - Abre uma janela contendo as configurações e propriedades da imagem adquirida.
set - Modifica os valores de propriedades das imagens que serão adquiridas.
getselectedsource - Retorna as propriedades do vídeo corrente.
start - Inicializa a captura do vídeo.
stop - Para a captura do vídeo.
wait - Verifica se o video está rodando.
trigger - Inicialização manual do objeto que esta sendo capturado (vídeo).
triggerconfig - Configura a entrada do objeto no formato de vídeo.
triggerinfo - Retorna todas as configurações validas do trigger.
closepreview – Fecha a janela de visualização do vídeo.
imaqmem - Limita o uso de memória na aquisição do vídeo (frames).
imaqmontage – Mostra as imagens adquiridas em forma de montagem.
imaqtool - Ferramenta de aquisição e configuração manual das propriedades de aquisição de
imagens.
preview – Mostra o vídeo em nova janela.
imaqhelp – Mostra Funções e propriedades para aquisição de imagens.
21
imaqhwinfo - Retorna informações dos hardwares instalados na máquina.
Estas funções destacadas acima são as de uso frequente em sistemas de processamento de
imagens, porém temos que destacar que o mais difícil no processo de aquisição é controlar o
hardware e padronizar as entradas no processo computacional visto que este processo se
tornará automático no sistema proposto.
Todas as funções supracitadas podem ser executadas em arquivos de script ou diretamente
pelo Command Window. A escolha da função correta dependerá então do tipo de entrada que
se fará no sistema, como a nossa entrada será um vídeo, então usaremos a função
“videoinput(‘winvideo’, 1, ‘RGB24_640X480’)” como podemos ver na figura abaixo:
Figura XI: Funcionamento da digitação e execução do código pelo Matlab®
Fonte: Software Matlab® (R2010b).
Note que como não foi informado nenhuma variável recebendo a estrutura de dados contendo
o objeto de vídeo, o próprio software criou a variável “ans”. Note ainda que não precisamos
informar o tipo de dado que a variável irá receber, esta é outra característica própria do
Matlab®.
22
Deve-se saber ainda: o software Matlab® é case sensitive, possui ainda uma ferramenta de
help intelligence, que interpreta o código que esta sendo digitado e lhe fornece as opções para
concluir a “assinatura” do método.
Após digitado o ultimo comando (preview) o software mostra uma outra janela contendo o
vídeo com as características incluídas o comando de entrada:
Figura XII: Exibição do vídeo pelo Matlab®
Fonte: Software Matlab® (R2010b).
Verifica-se que nesta tela do vídeo ainda não temos uma interface para que outras pessoas
possam fazer as comparações entre imagens e verificar se existe a pessoa no ambiente.
O desenvolvimento desta interface pode ser feita como em qualquer outro ambiente de
desenvolvimento, utilizando o GUI Builder (ou simplesmente GUIDE) ou diretamente em
arquivo de script.
Se ainda o desenvolvedor quiser utilizar outra linguagem diferente da proprietária (chamada
m) poderá utilizar ainda a linguagem TLC, C/C++, Java, VHDL, Verilog ou XML/HTML
com uma simples escolha no arquivo de script (ou no projeto inteiro) seguindo o caminho
23
“File\Preferences”, assim será mostrada a seguinte janela contendo as configurações do
software:
Figura XIII: Tipos possíveis de utilização de linguagens no Matlab®
Fonte: Software Matlab® (R2010b).
O que é bem interessante nesta mudança de linguagens é que os métodos do software não
sofrem alterações nas assinaturas, podendo então ser utilizados os mesmos métodos
supracitados em qualquer destas linguagens suportadas pelo Matlab®.
Para o nosso propósito não será discutido então como desenvolver a interface para o sistema,
nos focaremos no reconhecimento e na técnica utilizada para esta finalidade.
Mais a frente discutiremos ainda uma forma de se “produzir” no Matlab® ferramentas para
utilização em outras plataformas de desenvolvimento como .Net, Java e Delphi por exemplo.
4.3 DEFINIÇÃO DA TÉCNICA ESCOLHIDA
24
Como neste projeto esta definido a utilização da técnica conhecida como IPCA acrônimo de
Incremental Principal Component Analysis - Análise de Componentes Principais
Incrementáveis, que é uma forma incremental, em termos computacionais, do PCA -
Principal Component Analysis (Freitas et. al, 2003), temos que a partir deste passo pensar em
como será o tratamento das imagens de entrada para que a técnica seja bem sucedida, então
abaixo será descrita como é o funcionamento desta técnica e por qual razão foi escolhida.
4.3.1 Funcionamento do Ipca
Uma imagem discreta de face pode ser representada como uma matriz X de dimensão l ×c,
onde l é o número de linhas e c é o número de colunas da matriz. No entanto, é possível
representar também essa mesma matriz como um vetor xT n -dimensional, onde n = l . c, e que
na realidade representa a matriz X concatenada. Se considerarmos que a imagem de uma face
pode ser descrita como um vetor no espaço ℜn, então essa face é um ponto nesse espaço ℜn.
Portanto um espaço de faces Zx é um espaço multidimensional que contém todas as faces de
um determinado conjunto de treinamento (TURK & PENTLAND, 1991 apud KITANI &
THOMAZ, 2001).
Considere que temos agora um conjunto de N imagens discretas de faces. Se concatenarmos
as imagens e as agruparmos em uma matriz Zx, a matriz será formada por N.l.c elementos.
Deste modo, cada coluna (ou linha) da matriz Zx pode ser a representação de uma face. A
figura XIV ilustra didaticamente um espaço de faces, cuja dimensão é de N linhas por n
colunas, onde N é o número de faces e n é o produto l.c que representa a dimensionalidade
desse espaço. Apesar das fotos na figura XIV estarem coloridas (RGB_24) o espaço de fotos
desenvolvido no projeto proposto esta representado em fotos preto e branco (tons de cinza),
que compreendem um espaço de 8 bits de luminância, ou seja, cada célula da matriz Zx
representa uma escala monocromática que, por sua vez, pode variar de 256 tons assumindo
somente um destes valores como explicado anteriormente.
25
Figura XIV: Ilustração do arranjo de fotos formado utilizando o IPCA
Fonte: Adaptado de (KITANI & THOMAZ, 2001).
A razão de se concatenar a matriz de face foi baseada no primeiro trabalho apresentado por
(SIROVICH & KIRBY, 1987), onde eles apresentaram a hipótese da redução da
dimensionalidade da matriz de face utilizando uma técnica de compressão de dados muito
utilizada na área de processamento de sinais.
A técnica, que também é conhecida como Técnica de Expansão de Karhunen-Loéve,
normalmente é aplicada em sinais que variam no domínio do tempo e que são representados
como vetores randômicos (FUKUNAGA, 1990). A figura XV ilustra como seria o vetor
imagem de uma face visto como um sinal no domínio do tempo.
Figura XV: Gráfico do vetor de imagem de uma face. No canto superior direito da figura
temos a imagem da face que é representada por este gráfico.
Fonte: Adaptado de (KITANI & THOMAZ, 2001).
26
Seguindo a linha de raciocínio desenvolvida por Sirovich e Kirby esta dimensionalidade pode
ser diminuída o bastante, utilizando-se uma média de tudo aquilo que é comum a todas as
faces (imagens) que compõem o banco de dados, assim conseguimos extrair todas as
redundâncias e melhorar consideravelmente o grau de processamento que será necessário para
a aplicação. Na figura XVI temos um exemplo de “Face Média” e matematicamente temos a
equação (2) para extração desta média:
(2)
Figura XVI: Imagem de uma face média.
Fonte: Adaptado de (KITANI & THOMAZ, 2001).
4.3.2 Autovetores e Autovalores
Autovalores e autovetores são conceitos importantes de matemática, com aplicações práticas
em áreas diversificadas como mecânica quântica, processamento de imagens, análise de
vibrações, mecânica dos sólidos, estatística, etc. (KAMPEN, 2001 disponível em:
http://pt.wikipedia.org/wiki/Matriz_de_covari%C3%A2ncia).
Graficamente a ideia básica pode ser vista de uma forma bastante simples. Seja uma imagem
formada por um retângulo com 2 vetores segundo (a) da Figura XVII. Essa imagem sofre uma
ampliação (transformação) apenas na horizontal, resultando no retângulo (b). Nessa condição,
o vetor v2 passou a v2', que não tem a mesma direção do original v2. Portanto, o vetor v2' não
pode ser representado por v2 multiplicado por um escalar.
27
Mas o vetor v1' tem a mesma direção de v1 e, por isso, pode ser representado por v1
multiplicado por um escalar. Diz-se então que v1 é um autovetor da transformação e que esse
escalar é um autovalor associado.
Figura XVII: Ilustração gráfica de Autovetores e autovalores.
Fonte: Adaptado de (MSPC - Informações Técnicas, disponível em:
http://www.mspc.eng.br/matm/al_auto_val_vet_01.shtml).
Dentro da matriz cada um dos vários autovetores são ortogonais uns aos outros. Em outras
palavras isso significa que essa matriz é multidimensional e a mesma não é graficamente
visualizável. (FRIZERA & VALADÃO, 2008).
Porém, em termos matemáticos pode-se escrever o polinômio como sendo (equação 3):
(3)
Uma matriz guarda todo o banco de dados relativo à imagem (coeficientes Q) e outra os
autovetores (Z) necessários para a reconstrução da mesma (a imagem é representada pela
variável Im). Desta forma, a imagem vira um grande polinômio de grau n, porém com
formato linear.
Por outro lado, apenas a matriz não seria suficiente para representar uma imagem e reconstruí-
la. Para isso são necessários, além dos autovetores, os autovalores, que geram posteriormente,
os coeficientes de multiplicação dos autovetores. (FREITAS et. al., 2003)
Im=[ Z1 Z2 . .. Zn]⋅¿ [ q1 ¿ ] [q2 ¿ ] [. . .¿ ]¿¿
¿¿
28
Quanto ao processo do IPCA muda-se, então, a questão do reprocessamento, já que, neste
caso, não é necessário recalcular toda a matriz - apenas acrescentar os novos vetores e valores
nas matrizes de autovetor e autovalor (FREITAS et. al, 2003).
É importante frisar que como esta técnica exige a retirada de uma “média” das imagens,
temos então um grau de erro que deve ser considerado.
Este erro é na verdade um distanciamento entre as imagens (distanciamento entre os vetores
que são organizados por esta técnica de forma ortogonal uns aos outros) e em processamento
de imagens é chamado de threshold (Valor de corte).
Durante o teste, um novo ponto é formado. Com isso, calcula-se a distância Euclidiana
(distância no espaço n-dimensional). Através do valor dessa distância pode-se determinar de
quem é a face. Para isso determina-se um valor de corte ou threshold. (FREITAS et. al., 2003)
No projeto proposto esta distância foi fixada com valor 2 para que o grau de precisão pudesse
ser satisfeito pelo sistema.
4.3.3 Utilização do Matlab® em outras Plataformas de Desenvolvimento
Como falado anteriormente o Matlab® é uma IDE de desenvolvimento completíssimo e de
alto grau de funcionalidades e ferramentas disponíveis e dentre milhares delas destaco o
Matlab Builder (Construtor), que é uma ferramenta de criação de arquivos diversos (depende
do Builder) para “transferir” funções específicas do Matlab® para a plataforma de destino.
Nesta release estão disponíveis os seguintes Builders:
MATLAB Builder EX (para Microsoft Excel): Esta é uma ferramenta para criação de
arquivos que podem ser incluídos diretamente no Microsoft Excel para utilizar funções
específicas que o próprio Excel talvez não tenha.
MATLAB Builder JA (para Linguagem Java): Esta ferramenta é utilizada para criação de
arquivos para serem incluídos diretamente no compilador Java (O help informa que os testes
de integração foram realizados na IDE Eclipse, mas que não teria problemas em utilizar em
outra IDE).
29
MATLAB Builder NE (para Microsoft .NET Framework): Esta ferramenta é utilizada para
criação de arquivos que serão incluídos diretamente em algum projeto .Net, nele é possível
especificar sobre qual versão dos Frameworks será construído a DLL (Dynamic-link library –
Biblioteca de Ligação Dinâmica).
Na figura XVIII temos uma ilustração do que podemos fazer com essas ferramentas:
Figura XVIII: Ilustração das ferramentas disponíveis no Matlab®.
Fonte: Adaptado de (Product Help do Matlab®).
Todos os aplicativos (executáveis) desenvolvidos pelo Matlab® devem ser configurados na
máquina final de acordo com a figura XIX:
30
Figura XIX: Ilustração das ferramentas disponíveis no Matlab®.
Fonte: Adaptado de (Product Help do Matlab®).
4.4 SEGUIMENTAÇÃO
Para o desenvolvimento deste projeto foi utilizado como segmentação somente a
padronização das imagens capturadas através do vídeo em termos de resolução e de formação
de cor.
Foi determinado que o vídeo será capturado e mostrado para o usuário de forma colorida, ou
seja, no formato RGB, porém para que tivéssemos sucesso no processamento definimos que a
captura e armazenamento ficasse preto e branco (tons de cinza).
Outra padronização realizada foi a compressão da foto para o formato PGM (Portable Gray
Map), que na verdade é uma imagem no formato BMP comprimida em tons de cinza.
31
Devemos deixar claro que o processo de segmentação, como foi dito anteriormente, é o
processo mais complexo de todo o desenvolvimento e, como esta sendo utilizada uma
webcam como forma de captura do vídeo, passamos a considerar que a imagem capturada
estaria segmentada o suficiente ao ponto de termos na tela somente a face da pessoa que
serviria para o banco de imagens e para o teste de reconhecimento.
4.5 APRESENTAÇÃO DOS PASSOS ATÉ A SEGMENTAÇÃO
Para que o algoritmo funcione corretamente é preciso fazer alguns equacionamentos
matemáticos e computacionais logo após a aquisição das imagens.
Então na figura XIX será demonstrado graficamente todo o equacionamento que compõe o
projeto até o “passo v” dos passos fundamentais no processamento de imagens:
Figura XIX: Ilustração gráfica do equacionamento computacional utilizado no projeto.
1
32
4.6 RECONHECIMENTO E INTERPRETAÇÃO
Neste passo do desenvolvimento fazemos a leitura da imagem específica (imagem para o
reconhecimento) e para esta imagem específica fazemos praticamente todos os passos citados
na figura XVIII e adicionamos a mesma na base de fotos.
Após ser adicionada a imagem na base de fotos e rotacionada a matriz de vetores (que
representam as imagens) verifica-se a distancia desta imagem específica com a distancia das
outras imagens, se existir alguma imagem que satisfaça a distancia de acordo com o valor de
distanciamento (threshold) máximo estabelecido esta imagem será validada como sendo a
mais próxima da imagem testada.
33
CAPÍTULO 5 - RESULTADOS EXPERIMENTAIS
Inicialmente para testar códigos e ter mais precisão nos testes foi utilizado o banco de
imagens (faces) de 192 x 168 pixels da Universidade de Yale. Foi utilizada a linguagem
proprietária do software Matlab®. Porém como o intuito deste projeto seria de se obter a
imagem diretamente da câmera e depois testá-la, foi efetuado os testes finais dentro da
perspectiva esperada, ou seja, foram feitos os testes dentro dos padrões de saída da imagem
capturada pela webcam.
Abaixo seguem algumas imagens da utilização do sistema desenvolvido.
Deve-se levar em consideração que o propósito deste trabalho é mostrar o funcionamento do
IPCA e o reconhecimento das imagens, então na interface criada não deve ser levada em
consideração.
Existem ainda algumas funcionalidades na interface que não foram terminadas e por esta
razão estão com a descrição nos botões de “projetos futuros” pois espera-se concluí-los em
breve.
Figura XX:
Demonstração da tela desenvolvida para projeto.
34
O botão “Tirar Foto” é responsável pela captura da imagem, sendo alocada a imagem salva na
pasta correspondente ao Current Folder do Matlab®.
O botão “Testar Foto” é responsável pela leitura e comparação da foto selecionada com as
fotos no banco de imagens, e a figura XXI mostra como se dá essa seleção:
Figura XXI: Demonstração da tela de seleção da foto a ser testada.
Nota-se que a tela de seleção carrega exatamente no local correspondente ao Current Folder e
permite somente a seleção de fotos no formato PGM.
35
CAPÍTULO 6 - PROJETOS FUTUROS
Como neste projeto foi considerada que a face seria tirada diretamente da câmera sem
nenhuma outra seguimentação, pretende-se utilizar meios de seguimentação a fim de detectar
no vídeo as faces sem que seja necessária a ação de um usuário, a fim de que o teste da face se
torne algo automático.
Outro aprimoramento que está em fase de desenvolvimento é manter o banco de dados
sempre ativo enquanto houver vídeo, pois até o momento o executável monta o banco de
imagens somente no momento em que se pede para “testar” a foto, ou seja, quando se clica no
botão “Testar Foto” é que o banco de fotos é montado e testado a imagem.
36
CAPÍTULO 7 - CONCLUSÃO
O IPCA vem sendo largamente utilizado em diversas aplicações e bem difundido nas
comunidades acadêmicas pelo fato de ter um comportamento computacional relativamente
suportável (dependendo do tamanho da aplicação) e de ser relativamente de fácil
compreensão. Este fato computacional foi o caracterizante para a escolha e detalhamento
desta técnica neste trabalho.
Apesar do IPCA ter se mostrado bem eficaz para o reconhecimento de faces, vale destacar
que ele não é empregado somente com esta empregabilidade. Como esta técnica é um
aprimoramento contínuo de vários estudiosos da área tecnológica e seu precursor advém da
área de processamento de sinais, ela pode ser empregada em qualquer tipo de projeto que
tenha como finalidade reconhecer padrões, como por exemplo:
Biometria (Facial, digital, etc.);
Detecção de padrões em objetos;
Leitura de textos;
Reconhecimento de voz;
A grande vantagem e motivação em se utilizar e aprimorar o IPCA, comparando-se com a
técnica PCA (Principal Component Analysis), é o advento de não utilizar redundâncias e
diminuir consideravelmente o nível de utilização de processamento da máquina, ou seja, a
utilização de recursos computacionais diminui consideravelmente com a utilização desta
técnica. Além de não precisar recomeçar todo o processo de reconhecimento ao inserir um
novo parâmetro para análise.
37
REFERENCIAS
ANDRADE NETO, E. L. Sistemas de identificação pessoal utilizando técnicas de reconhecimento e verificação facial automáticas. Campinas: Unicamp, (1997).
APOSTOL, Tom M. MSPC - Informações Técnicas. Acesso em 17 de novembro de 2010,
disponível em: http://www.mspc.eng.br/matm/al_auto_val_vet_01.shtml.
AT&T. The Database of Faces. Acesso em 9 de dezembro de 2010, disponível em http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html.
BONSOR, K. Como funciona o sistema de reconhecimento facial. Acesso em 28 de junho de 2010, disponível em: http://pessoas.hsw.uol.com.br/sistema-de-reconhecimento-facial.htm.
CAPELARO, E. A., MENDONÇA, F. C., & TEIXEIRA, J. Acesso em 18 de junho de 2010,
disponível em: http://educar.sc.usp.br/licenciatura/trabalhos/camera.htm.
CHAPMAN, S. Programação em Matlab para Engenheiros. Thomson Learning, (2003).
CHRISTOUDIAS, M., MORENCY, L.-P., & DARRELL, T. Light Field Appearance Manifolds. Acesso em 26 de 11 de 2008, disponível em: http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/CHRISTOUDIAS1/.
FREITAS, R. A. Sistema de Visão para Robôs Móveis: Uma Aplicação ao Reconhecimento de Referências Geométricas. Vitória: Universidade Federal do Espírito Santo, (1999).
FREITAS, R. A., BASTOS FILHO, T., SARCINELLI FILHO, M., & SANTOS-VICTOR, J. Avaliação de Desempenho de Modelos Incrementais de Autoespaços na Localização de Robôs Móveis. Instituto Superior Técnico/Universidade Federal do Espírito Santo, (2003).
FRIZERA, B. B., VALADÃO, C.T., Desenvolvimento de um Sistema Computacional para o
Reconhecimento de Faces. Serra: UCL - Faculdade do Centro Leste, (2008).
GONZÁLES, R., & WOODS, R. Processamento de imagens digitais. Califórnia: Ed, Edgard Blücher, (2003).
KAMPEN, N.G. Processos Estocásticos em Física e Química. Acesso em 17 de novembro de
2010, disponível em http://pt.wikipedia.org/wiki/Matriz_de_covari%C3%A2ncia.
LU, X. Image Analisys for Face Recognition. Michigan: Michigan State University, (2001).
MAGALHÃES BARBOSA, M. E. A Semiótica na Moda: Uma imagem vale mais que mil palavras. Acesso em 28 de Novembro de 2008, disponível em http://www.filologia.org.br/viiicnlf/anais/caderno12-05.htm.
NÖTH, W. Panorama da Semiótica: de Platão a Pierce. São Paulo, Ed. Annablume, (1995).
38
PANG, S., KASABOV, N., & SEIICHI, O. A Modified Incremental Principal Component. Auckland University/Kobe University, (2001).
SANTAELLA, L. Semiótica Aplicada. São Paulo: Pioneira Thompson Learning, (2002).
SMITH, L. A tutorial on principal component analisys. (2006).
SOBRAL, J. L., Visão Por Computador. Acesso em 20 de novembro de 2010, disponível em
http://gec.di.uminho.pt/lesi/vpc0203/Aula04Cor.pdf.
VON WANGENHEIM, A. Técnicas estatísticas para reconhecimento e detecção de face. Santa Catarina: Universidade Federal de Santa Catarina, (2001).
WIKIMEDIA COMMONS. Disponível em http://commons.wikimedia.org/
WILSON, T. Como funciona a HDMI. Acesso em 26 de Novembro de 2008, disponível em: http://eletronicos.hsw.uol.com.br/hdmi.htm.
WINTERS, N. A Holistic Approach to Mobile Robot Navigation. Dublin: University of Dublin, (2001).
WISKOTT, L. Face Recognition by Elastic Bunch Graph Matching. Rhur University/ University of Southern California, (1997)
YALE, U. O. Yale Database. Acesso em 29 de outubro de 2008, disponível em: http://cvc.yale.edu/projects/yalefaces/yalefaces.html.