opencv aplicado no rastreamento de imagens

Transcrição

opencv aplicado no rastreamento de imagens
OPENCV APLICADO NO RASTREAMENTO DE IMAGENS
Kayo F. Pimentel
Universidade Federal de Go iás, Engenharia de Co mputação, Go iânia – Go iás, [email protected] m
Ricardo A. P. Franco
Universidade Federal de Go iás, Engenharia de Co mputação, Go iânia – Go iás, ricardofranco3@g mail.co m
Sandrerley R. Pires
Universidade Federal de Go iás, Engenharia de Co mputação, Go iânia – Go iás, [email protected] m
Resumo – As técnicas fotográficas vêm sendo
aperfeiçoadas para cada vez mais representar a paisagem
com todos os seus detalhes. A fotografi a representará
uma imagem com um local, em um determinado período
de tempo e características únicas. Portanto, a
característica de manusear i magens torna-se mais
importante, pois o objeti vo princi pal é a representação
perfeita da realidade . A representação da reali dade é
utilizada, também, para auxiliar as pessoas como, por
exemplo, em câmeras de vigilância, úteis para i dentificar
ladrões. O reconhecimento de padrões é o foco do projeto
que utiliza a linguagem C em conjunto com a bi blioteca
OpenCV para a i mplementação de um programa, cuja
função é identificar objetos , em um padrão de i magem
especificado, e torná-l o evi dente na imagem. A
implementação baseia-se na linguagem C pel a otimização
obti da em comparação às outras linguagens de
programação, e utiliza-se a bi blioteca OpenCV pela
dis posição de vários artifícios para o trabalho e manuseio
nas imagens.
Palavras-Chave – Análise, comparação, i magem,
OpenCV, visão computacional.
OPENCV APPLIED IN IMAGE MATCHING
Abstract - The photographic techni ques have been
upgraded to best show the scenario and it's details. The
photograph represents an image or a place, in some
peri od of ti me and wi th uni que features. Therefore, the
ability to handle i mages become more i mportant, as the
main objecti ve is the perfect and clear representati on of
reality. That reality is not just used to appreci ation, as it
is too, used for technical reasons, as vigilance cameras,
that need to i dentify thieves and other potential dangers
to society. The focus of this project is i mage matching,
using the C lang uage and the Opencv li braries it aims to
show the overall performance that the matching methods
have in a overall view, trying to i dentify some object's
image in a bigger templ ate i mage. The i mplementati on
was in the C l anguage for optimizati on g oals, since any
other language has best performance then it in image
processing, and the Opencv was chose for, as the C
language, opti mization and simple infrastructure.
1
Keywords - Analysis, comparison, i mage, OpenCV,
Computer vision.
I. INTRODUÇÃO
A realidade começou a ser representada através das
pinturas, pois as pessoas se interessavam em ter u ma
recordação de um mo mento vivido, u ma ação marcante ou
um lugar encantador. Já foram encontradas pinturas em
cavernas feitas pelos ancestrais do homem e nota-se que já
constituía um hábito deles. A pintura se desenvolveu bastante
a partir do período medieval, para representar os seus povos,
do Renascimento até o século XX.
A Revolução Industrial ajudou a alavancar a técnica de
reprodução de imagens, mas no mesmo mo mento houve o
surgimento da fotografia que representou a crise da imagem
e o apogeu de reprodução em massa.
A primeira fotografia reconhecida é atribuída ao francês
Joseph Nicéphore Niépce, e remonta o ano de 1826, porém a
fotografia fo i desenvolvida por um acú mulo de avanços de
vários estudiosos que trabalharam juntos ou em paralelo
durante vários anos.
“A fotografia é a arte ou processo de reproduzir imagens sobre
uma superfície fotossensível (como um filme), pela ação de energia
radiante.” [1]
Co mo o desenvolvimento tecnológico está em u ma
velocidade alta, principalmente após a Revolução Industrial,
atualmente notamos que a tecnologia digital mod ifica os
paradigmas do mundo da fotografia. Os equipamentos
digitais fornecem várias funcionalidades que facilitam o
manuseio dos mesmos por seus compradores e os integram
cada vez mais com o co mputador e o “mundo” da internet.
As imagens têm u m grande valor, atualmente, nos meios
de comunicação e estão presentes a todo o momento em
nossa vida. Pode-se notar sua existência ao ligarmos uma
televisão, um computador, uma fotografia ou p intura e
inúmeros outros itens. Apenas a captação da imagem, co m
todo o desenvolvimento tecnológico existente, não satisfaz às
várias requisições da população, ou seja, com o passar do
tempo este desenvolvimento mo lda u ma sociedade mais
exigente.
O processamento de imagens é um processo onde a
entrada do sistema é uma imagem na qual se aplica uma ou
várias funções gerando uma saída que é constituída de um
conjunto de valores numéricos, que podem ou não compor
uma imagem. Muitas vezes, é necessária uma etapa de préprocessamento envolvendo o processamento de imagens
antes da aplicação de processos de visão computacional.
Visão computacional também possui uma imagem como
entrada, mas sua saída é um conjunto de resultados, sendo a
interpretação da imagem co mo u m todo ou parcialmente, e
ela busca representar a visão humana.
Pode-se ocorrer o processamento de imagens em três
níveis:
 Baixo-n ível – são realizadas operações primitivas
(redução de ruído ou melhoria no contraste de
uma imagem);
 Nível-méd io – são operações do tipo
segmentação ou classificação;
 Alto-nível – são tarefas de cognição
normalmente associadas com a visão humana.
A característica do processamento de imagens se
caracteriza, principalmente, pela eliminação de ruídos e
melhoria no contraste das imagens. A visão computacional
foca em processos de níveis médios, co mo por exemp lo, a
segmentação de imagens, o reconhecimento de padrões ou
rastreamento de objetos em u ma seqüência de imagens.
O artigo foca-se em rastrear qualquer tipo de movimentos
diferentes em u ma imagem definida co mo o padrão. É
selecionada uma imagem como padrão e qualquer objeto ou
ser vivo (desde um carro ou uma pessoa atravessando a
câmera) que movimentar será destacado no visor que está a
saída da câmera.
A manipulação de imagens foi realizada utilizando a
biblioteca OpenCV – biblioteca desenvolvida pela Intel que
possui mais de 500 funções. O principal objetivo desta
biblioteca era fornecer a acessibilidade a programadores em
algumas áreas tais como a robótica e interação h umanocomputador em tempo real. Ela possui o pacote que inclui a
biblioteca IPL (Image Processing Library), responsável pelo
processamento de imagens, parte essencial deste projeto.
II. MÉTODOS UTILIZADOS
A. Opencv
OpenCV (Open Source Computer Vision Library) é uma
biblioteca livre ao usuário, seja para uso acadêmico ou
comercial,
contém
ferramentas
poderosas
para
desenvolvimentos na área de Visão Co mputacional.
“O OpenCV possui módulos de Processamento de Imagens e
Vídeo I/O, Estrutura de dados, Álgebra Linear, GUI Básica com
sistema de janelas independentes, Controle de mouse e teclado,
além de mais de 350 algoritmos de Visão Computacional como:
Filtros de imagem, calibração de câmera, reconhecimento de
objetos, análise estrutural, entre outros.” [2]
As funcionalidades do OpenCV d ividem-se em vários
grupos sendo os principais: Processamento de imagem e
vídeo, estrutura de dados e operações matemáticas , análise
estrutural, GUI básica, Análise de movimento e
Reconhecimento de Objetos e Reconstrução 3D.
A biblioteca utiliza, para a manipu lação de imagens, a
estrutura de dados IPL e suporta os formatos de imagem:
BMP, JPG, TIFF, PXM, SVM RA STER; e suporta todos os
espaços de cores existentes. A manipulação de vídeo pode ser
feita totalmente personalizada e e m tempo real, pode-se fazer
através de um arquivo de v ídeo salvo no computador ou
através de uma câmera, e o OpenCV suporta múlt iplas
câmeras simu ltaneamente.
As funções a seguir são do OpenCV e elas foram
utilizadas na imp lementação:
1) IplImage: tipo básico do OpenCV para operações com
imagens, foi neste tipo básico que ficaram as imagens que
foram carregadas do computador para o teste.
2) cvLoadImage: método utilizado para carregar u ma
imagem do sistema, neste passamos o endereço do arquivo
de imagem e o número de canais em que a imagem deve ser
carregada.
3) cvNamedWindow: método utilizado pelo Opencv para
criar u ma janela, nesta janela pode-se mostrar u m vídeo, ou
uma imagem, que será direcionada futuramente.
4) cvShowImage: método usado para apresentar uma
imagem em u ma
janela criada pelo
método
“cvNamedWindow”.
5) cvCaptureFro mCAM: é u ma função utilizada para a
captura de imagens vinda de uma WebCam, é necessário
que a câmera esteja instalada e configurada. O OpenCV
disponibiliza também u ma função chamada CvCapture, ela é
uma estrutura de dados que guarda as informações emitidas
da câmera.
6) cvCreateImage: utiliza-se esta função para criar uma
nova imagem. Deve passar os parâmetros da image m, ou
seja, seu tamanho (largura e altura), a profundidade dos
pixels (depth) e os números de canais por pixel (GrayScale,
RGB ou RGBA).
7) cvMathTemplate: método escolhido para a realização
das comparações. Os parâmetros necessários para se utilizar
a função é escolher uma imagem para ser utilizada como o
padrão (template), a imagem que deverá ser comparada ao
template e o método de comparação que se deseja usar. Será
retornado um conjunto de dados (array) que conterá o
resultado da comparação.
8) cvNormalize: função responsável pela normalização da
imagem obtida. A lguns resultados de imagens podem ser
obtidos e analisados apenas por funções e dados, esta função
“corrige” a imagem de saída para que seja possível vê-la e
entendê-la. É escolhido o método de normalização e os
vetores que contem a imagem de entrada e a imagem de
saída normalizada.
B. Implementação
Em u m resu mo, a funcionalidade do programa
desenvolvido é a seguinte: o usuário executa o programa
(chama o executável) e coloca o diretório de duas imagens.
Este irá carregar as imagens em IplImage do Opencv, abrir
duas janelas e mostrá-las nessas janelas. O próximo passo é
comparar a imagem de plano de fundo com o template
(imagem padrão), utilizando o método cvMatchTemplate. A
comparação ocorrerá nas imagens em seis tipos de funções
de comparação oferecidos pela biblioteca do Opencv e será
calculado o tempo que cada uma delas gasta para fazê-lo. Por
último, será criada uma janela para a imagem gerada com
cada comparação, onde as partes mais escuras ou mais claras
mostrarão se houve ou não uma identificação nas imagens.
O início do programa está descrito abaixo :
int main ( int argc, char** argv)
{
//Declarando as variáveis
double tempo Gasto;
clock_t t0,t 1;
IplImage*result[6];
IplImage*fixo = 0;
IplImage*capImg = 0;
int i = 0;
Co mo se pode observar, a main pos sui a entrada para
argumentos, onde serão chamadas as imagens ao executar o
programa. As variáveis tempo Gasto e clock são utilizadas
para contar o tempo que cada método do matchTemplate
levou para cada comparação, as outras declarações são das
imagens utilizadas e do array de imagens no qual serão
colocadas as imagens após a comparação.
// Capturando a imagem
fixo = cv LoadImage(argv[1],1);
capImg = cvLoadImage(argv[2],1);
cv NamedWindow("imagem2",
CV_WINDOW_AUTOSIZE);
cvShowImage("imagem2", capImg );
cv NamedWindow("imagem",
CV_WINDOW_AUTOSIZE);
cvShowImage (" imagem", fixo );
Nesta parte são carregadas as imagens e chamadas às
janelas correspondentes a cada uma.
//Populando o array de resultados
int iwidth = fixo->width - capImg->width + 1;
int iheight = fixo ->height - capImg->height + 1;
for(i=0; i<6; ++i){
result[i] = cv CreateImage(
cvSize(iwidth,iheight),32,1);
}
for(i=0; i<6; ++i){
t0 = clock();
cvMatchTemplate( fixo , capImg, result[i],
i);
cvNormalize(result[i],result[i],1,0,CV_MINMAX,NULL);
t1 = clock();
tempo Gasto
=
((double)
(t1
-t0)
/
(((double)CLOCKS_PER_SEC)/ 1000));
printf("Tempo gasto: %lf ms \n", tempo Gasto);
}
Aqui inicializa o array de resultados, criando imagens de
tamanho fixo, e depois substituindo essas imagens pelas
imagens geradas com o matchTemp late, que são então
normalizadas, para serem analisadas (alguns métodos geram
imagens de qualidade muito baixa). Contam-se os clocks
antes e depois das comparações para, em seguida, contar o
tempo que foi gasto em cada método e identificar o melhor
por qualidade/tempogasto.
//DISPLA Y
cv NamedWindow( "SQDIFF", 0 );
cvShowImage( "SQDIFF", result[0] );
cv NamedWindow( "SQDIFF_NORM ED", 0 );
cvShowImage( "SQDIFF_NORM ED", result[1] );
cv NamedWindow( " CCORR", 0 );
cvShowImage( " CCORR", result[2] );
cv NamedWindow( " CCORR_NORM ED", 0 );
cvShowImage( " CCORR_NORM ED", result[3] );
cv NamedWindow( " CCOEFF", 0 );
cvShowImage( " CCOEFF", result[4] );
cv NamedWindow( " CCOEFF_NORM ED", 0 );
cvShowImage( " CCOEFF_ NORM ED", result[5] );
cvWaitKey (0);
return 0;
}
Nesta parte final, serão mostradas as imagens que estão
no array “result”, nota-se que cada janela tem o nome do
método utilizado. No final é utilizado um cvWaitKey (0) que
possibilita ao usuário observar os resultados até que se aperte
uma tecla.
A imagem utilizada para a aplicação dos métodos segue
abaixo:
Fig.4. M étodo CCORR
III. CONCLUSÃ O
Fig.1. Imagem padrão (template)
Imagem que é co mparada com o temp late é descrita na
Fig.2. Os métodos a comparam co m toda a imagem de fundo.
Fig.2. Imagem comparada ao template
O método SQDIFF (Fig.3.) foi o mais demorado, apesar
de obter um bom resultado, já que a lâmpada é o ponto mais
escuro na foto (à direita).
Houve a obtenção dos seguintes tempos para cada
método:
Tempo gasto: 164.000000 ms
Tempo gasto: 158.000000 ms
Tempo gasto: 108.000000 ms
Tempo gasto: 156.000000 ms
Tempo gasto: 124.000000 ms
Tempo gasto: 161.000000 ms
-> "SQDIFF”
-> ” SQDIFF_ NORM ED”
-> “CCORR”
-> “CCORR_ NORM ED”
-> “CCOEFF”
-> “CCOEFF_NORM ED”
Os métodos que obtiveram melhor resultado, gerando
boas imagens e tempos médios, foram CCOEFF e o
CCOEFF_ NORM ED, nos quais se pode identificar
facilmente a lâmpada co mo o ponto mais claro. Conclui-se
que pode sacrificar u m pouco de tempo por qualidade, pois a
se tratando de imagem, deve ser exata e v isível.
REFERÊNCIAS BIBLIOGRÁFICAS
Fig.3. M étodo SQDIFF
Esta imagem apresentada na Fig.4 é gerada pelo método
CCORR (o mais rápido) e possui uma qualidade ruim, pois
não é possível identificar a lâmpada, que deveria aparecer
como ponto mais claro da foto.
[1] Dicionário Eletrônico Houaiss da Língua Portuguesa
1.0.5.
[2] Tecnologia em Co mputação Gráfica – Tutorial OpenCV
– Introdução. Acedido em 13 de Maio de 2011, em:
www.tecgraf.pucrio.br/~malf/opencv/index_files/Page3956.ht m
[3] G. Bradski, A. Kaehler “Learning OpenCV Co mputer
Vision with the OpenCV”, ed. O'Reilly Media, Safari
Books Online October 2008.
[4] OpenCV v2.1 documentation – Reading and Writing
Images and Video. Acedido em 10 de Maio de 2011, em:
http://opencv.willo wgarage.co m/documentation/c/readin
g_and_writing_images_and_video.html
[5] High GUI Reference Manual – High GUI overview.
Acedido em 10 de Maio de 2011, em:
http://www.ai.rug.nl/vakinformatie/pas/content/Highgui/
opencvref_highgui.htm

Documentos relacionados

Tutorial de OpenCV para Tótós - LAR

Tutorial de OpenCV para Tótós - LAR Neste exemplo, iremos aplicar à imagem do exemplo anterior um algoritmo de processamento de imagem, conhecido como Algoritmo de Canny, que nos permite obter a visualização dos contornos da mesma. P...

Leia mais

Lista-Exercicios-OpenCV_vF - Mesonpi

Lista-Exercicios-OpenCV_vF - Mesonpi Ainda  na  pasta  “03  ‐  opencv”  encontra‐se  um  código  de  nome  “binariza.cpp”.  A  partir  do  programa,  observe  a  imagem  resultante  e,  em  seguida,  altere  na  parte  superior  do  c...

Leia mais

Introdução à Visão Computacional usando OpenCV

Introdução à Visão Computacional usando OpenCV Os processos de visão computacional, muitas vezes, necessitam de uma etapa de préprocessamento envolvendo o processamento de imagens. As imagens de onde queremos extrair alguma informação em alguns...

Leia mais