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
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 maisLista-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 maisIntroduçã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