Introdução a Processamento de Imagens e Visão Computacional

  • Upload
    lynhi

  • View
    222

  • Download
    0

Embed Size (px)

Citation preview

  • Introduo a Processamento de Imagens e Viso Computacional

    usando OpenCV

    Tutorial 2

  • Introduo Viso Computacional usando OpenCV

    Maurcio MarengoniDenise Stringhini

    Universidade Presbiteriana MackenzieFaculdade de Computao e Informtica e

    Ps Graduao em Engenharia Eltrica {mmarengoni, dstring}@mackenzie.br

    Resumo

    Este tutorial apresenta conceitos introdutrios de processamento de imagens e de viso computacional.

    Estes conceitos so introduzidos utilizando a biblioteca OpenCV, que distribuda gratuitamente e possui documentao farta na internet.

    1

    Introduo

    Processamento de imagens um processo onde a entrada do sistema uma imagem e a sada um conjunto de valores numricos, que podem ou no compor uma outra imagem.

    Viso computacional procura emular a viso humana, portanto tambm possui como entrada uma imagem, porm, a sada uma interpretao da imagem como um todo, ou parcialmente.

    2

    Introduo

    Aps uma equalizao de histograma, em nvel de cinza, onde a placa do veculo pode ser lida.

    Placa:

    BRK 8558

    Veculo:

    Pajero 1995

    Veculo emimagemescura.

    Informao daplaca e do veculo no retngulo.

    3

    SIBGRAPI 2008 Tutorial 1

  • Introduo

    Processos de viso computacional geralmente iniciam com o processamento de imagens.

    Processamento ocorre em trs nveis: baixo-nvel: operaes primitivas (reduo de

    rudo ou melhoria no contraste de uma imagem) nvel-mdio: operaes do tipo segmentao ou

    classificao alto-nvel: tarefas de cognio normalmente

    associadas com a viso humana

    4

    OpenCV

    OpenCV (Open Source Computer Vision) uma biblioteca, de cdigo aberto, desenvolvida inicialmente pela Intel.

    Implementa ferramentas de interpretao de imagens, indo desde operaes simples como um filtro de rudo, at operaes complexas, tais como a anlise de movimentos, reconhecimento de padres e reconstruo em 3D.

    5

    OpenCV

    Est dividida em cinco grupos de funes: Processamento de imagens; Anlise estrutural; Anlise de movimento e rastreamento de objetos; Reconhecimento de padres; Calibragem de cmera e reconstruo 3D.

    As principais sero apresentadas juntamente com os conceitos de processamento de imagens e viso computacional que devem ser empregados em seu uso.

    6

    OpenCV - Exemplo

    // conversaoCores.cpp - faz a conversao de //cores de RGB para HSV#include "cv.h"#include "highgui.h"#include int main(){

    char name[] = "imagens/exemplo1.jpg";// definicao de variaveis do tipo imagemIplImage* img = NULL;IplImage* res = NULL;// definicao de variavel que armazena uma// estrutura com o tamanho de uma imagemCvSize imgSize;// carrega a imagem exemplo1 na variavel imgimg = cvLoadImage( name, -1 );// extrai o tamanho da variavel carregadaimgSize.width = img->width;imgSize.height = img->height;// cria uma nova imagem com o mesmo tamanho// da imagem carregada e do mesmo tipores = cvCreateImage(imgSize, img->depth,img->nChannels );

    // faz a conversao do sistema de cor RGB para HSVcvCvtColor( img, res, CV_RGB2HSV );// cria uma janela de visualizacao com o nome "imagem

    original"cvNamedWindow( "imagem original", 1 );// carrega a imagem original na janela criadacvShowImage( "imagem original", img );//repete o processo para a outra imagemcvNamedWindow( "imagem em HSV", 1 );cvShowImage( "imagem em HSV", res );// aguarda alguem pressionar uma tecla do tecladocvWaitKey(0);//fecha as janelas criadascvDestroyWindow( "imagem original" ); cvDestroyWindow( "imagem em HSV" ); // libera memoria usada pelas imagenscvReleaseImage( &img );cvReleaseImage( &res );return(0);

    }

    7

    SIBGRAPI 2008 Tutorial 2

  • OpenCV - Exemplo8

    Processamento de Imagens

    Muitas vezes as imagens de onde queremos extrair alguma informao precisam ser convertidas para um determinado formato ou tamanho.

    Precisam ainda ser filtradas para remover rudos provenientes do processo de aquisio da imagem.

    9

    Rudos

    Rudos podem aparecer de diversas fontes. Exemplos: tipo de sensor utilizado, iluminao do

    ambiente, condies climticas no momento da aquisio da imagem, posio relativa entre o objeto de interesse e a cmera.

    Rudo no apenas interferncia no sinal de captura da imagem. So tambm interferncias que possam,

    atrapalhar a interpretao ou o reconhecimento de objetos na imagem.

    10

    Rudos

    Imagemnormal

    Interferncia de

    iluminao

    Interferncia do perodo

    do ano

    Mudana do tipo de sensor

    11

    SIBGRAPI 2008 Tutorial 3

  • Filtros

    Filtros so as ferramentas bsicas pararemover rudos de imagens. Neste caso, o rudo aquele que aparece no

    processo de aquisio da imagem. Podem ser:

    Espaciais: filtros que atuam diretamente na imagem.

    De frequncia: a imagem transformada para o domnio de frequncia (transformada de Fourier) e ento filtrada neste domnio. Em seguida a imagem filtrada transformada de volta para o domnio de espao.

    12

    Filtros

    Do lado esquerdo uma imagem com rudo, e nadireita a mesma imagem aps filtragem.

    13

    Domnio de espao

    O termo domnio espacial se refere imagem. Mtodos no domnio espacial esto baseados na

    manipulao direta dos pixels da prpria imagem.

    Os processos no domnio espacial so caracterizados pela seguinte expresso:

    onde: f(x,y) a imagem original, T( . ) uma transformao na imagem e g(x,y) a imagem transformada.

    )),((),( yxfTyxg

    14

    Domnio de espao

    T uma operao definida sobre uma vizinhana de influncia do pixel que estlocalizado na posio x, y.

    A idia de vizinhana de influncia considera os pixels ao redor da posio x, y.

    Esta vizinhana definida por uma regio quadrada (ou retangular) e de tamanho (lado) impar.

    15

    SIBGRAPI 2008 Tutorial 4

  • Domnio de espao

    Regies de vizinhana (mscaras) de tamanhos diferentes, porm, todos com lado impar.

    1 x 1

    3 x 3

    5 x 53 x 5

    16

    Funo de transformao de intensidade

    O operador T computado em umavizinhana de tamanho 1x1. utilizada para alterar a intensidade da imagem. Pode ser aplicada a toda a imagem ou a uma

    parte dela. Uma operao bastante til a binarizao

    de uma imagem, que utiliza um certo valor de corte (k).

    17

    Funo de transformao de intensidade

    Este tipo de transformao definida pela seguinte expresso:

    contrario caso ,ky)f(x, se ,

    01

    y)g(x,

    Imagem binarizada, com o urso em destaque

    (maior bloco de pixels com valor

    0) . A binarizacao foi obtida com o valor de k=84.

    cvThreshold(ImgOrigem, ImgBinaria, 84, 255, CV_THRESH_BINARY);

    18

    Funo de realce de contraste

    Onde, m o valor mdio da regio que se deseja realar o contraste, e E define a inclinao da curva, e conseqentemente os valores de mapeamento para a imagem de sada.

    Eyxfmyxg

    )),((11),(

    f(x,y)

    g(x,y)

    m0

    1

    escuro

    claro

    19

    SIBGRAPI 2008 Tutorial 5

  • Histogramas

    Os histogramas so determinados a partir de valores de intensidade dos pixels.

    Entre as principais aplicaes dos histogramas esto melhora da definio de uma imagem compresso de imagens segmentao de imagens descrio de uma imagem

    20

    O histograma de uma imagem I, cujos valores de intensidade estejam entre 0 e G, definido pela expresso:

    Histogramas

    kk nIh )(

    Onde:Ik um valor de intensidade k, (0 k G) da imagem I nk o nmero de pixels na imagem I que possuem a intensidade k.

    cvCalcHist( &ImgOrigem, Histograma, 0, NULL );

    21

    possvel normalizar um histograma, representando os valores em termos de porcentagem:

    Histogramas

    nn

    nIhIp kkk

    )()(

    Onde n o nmero de pixels da imagem.

    cvGetMinMaxHistValue( imgHist, 0, &max_value, 0, 0 );cvScale( Hist->bins, Hist->bins, ((double)cvImgHist->height)/max_value, 0 );

    22

    esquerda uma imagem I, ao centro o histograma da imagem em valores (h(I)) e em porcentagem (p(I)), direita uma representao do histograma de forma grfica.

    Histogramas

    0 0 0 1 1

    0 0 1 1 2

    0 1 1 2 3

    1 1 2 3 3

    1 2 3 3 3

    h(I) =

    p(I) =

    0 1 2 3

    6 9 4 6

    6/25 6/254/259/25

    0 1 2 3 k

    h

    23

    SIBGRAPI 2008 Tutorial 6

  • o ajuste dos valores de intensidade de forma a melhorar o contraste em uma imagem.

    Equalizao de histogramas

    k

    jjnMN

    Lkeqh0

    )1()(_

    Onde k a intensidade no histograma equalizado, L o valor mximo de intensidade na imagem, M e N so as dimenses da imagem enj o nmero de pixels na imagem com valor de intensidade igual a j.

    cvEqualizeHist( ImagemOriginal, ImagemEqualizada );

    24

    Equalizao de histogramas

    Imagem em nvel de cinza

    Mesma imagem

    aps equalizao

    Histograma da imagem

    Histograma equalizado da

    imagem

    25

    Filtros no Domnio Espacial

    Correlao:

    . . . . . . .

    . . . . . . .

    . . 5 7 3 . .

    . . 6 4 7 . .

    . . 2 5 6 . .

    . . . . . . .

    . . . . . . .

    1 2 12 4 2

    1 2 1

    Posio (x, y) = (4, 4)

    Mscara 3 x 3

    (1x5) (2x7) (1x3)

    (2x6) (4x4) (2x7)

    (1x2) (2x5) (1x6)

    Produto ponto a ponto

    Somatria

    5+14+3+12+16+14+2+10+6 =82

    . . . . . . .

    . . 5 7 3 . .

    . . 6 82 7 . .

    . . 2 5 6 . .

    . . . . . . .

    Resultado da Correlao

    2

    2

    2

    2),(*),(),(

    m

    mi

    n

    njjiwjyixfyxg

    26

    Convoluo: semelhante correlao, porm neste caso a mscara rotacionada de 180 graus.

    Filtros no Domnio Espacial

    2

    2

    2

    2),(*),(),(

    m

    mi

    n

    njjiwjyixfyxg

    Onde w a mscara utilizada no processo de correlao/convoluo, e m e n so as dimenses da mscara.

    O tipo de filtro depende dos valores da mscara - em geral, as mscaras sosimtricas e, portanto, pode-se aplicar tanto a convoluo como a correlao.

    cvFilter2D( ImgOriginal, ImgFiltrada, filtro, cvPoint(-1,-1) );

    27

    SIBGRAPI 2008 Tutorial 7

  • Tipos: mdia, mediana, moda, mnimo e mximo. O filtro de mdia, tambm chamado de filtro-

    caixa, um filtro do tipo passa-baixa. O efeito de um filtro passa-baixa de suavizao

    da imagem e minimizao dos rudos, atenuandoas transies abruptas que correspondem a frequncias altas porm, o efeito acaba sendo de embassamento ou

    borramento da imagem que acaba removendo osdetalhes finos da imagem

    Filtros no Domnio EspacialEstatsticos

    28

    A expresso de um filtro de mdia dada por:

    Filtragem no Domnio EspacialFiltros estatsticos

    contrario caso 0,2

    |y| e 2

    |x| se ,1),(nm

    mnyxg

    Onde m e n so as dimenses de uma mscara qualquer.

    h(i,j) = 1/9*1 1 11 1 11 1 1

    29

    Exemplos de uso de filtro de mdia:

    Filtragem no Domnio EspacialFiltros estatsticos

    30 Filtragem no Domnio EspacialFiltros estatsticos

    h(i,j) = 1/16*1 2 12 4 21 2 1

    Filtro mdia com atenuao variando de acordo com a distncia e orientao ao centro da mscara.

    31

    SIBGRAPI 2008 Tutorial 8

  • No filtro da mediana os valores dos pixels so ordenados e o valor que ocupa a posio mediana dos valores selecionado para a posio (x, y) da imagem filtrada. Este filtro tende a reduzir o efeito de rudo de pulso, do tipo

    salt and peper pois valores pontuais raramente aparecem juntos e portanto nunca ocupam a posio mediana.

    Filtragem no Domnio EspacialFiltros estatsticos

    32

    O filtro de mximo substitui o valor da posio (x, y) pelo valor mximo da mscara. Este filtro tem a tendncia de clarear a imagem.

    Analogamente o filtro de mnimo substitui o valor da posio (x, y) pelo valor mnimo da mscara. Este filtro tem a tendncia de escurecer a imagem.

    O filtro de moda seleciona para a posio (x, y) da imagem o valor que ocorre com maior frequncia na mscara Este tipo de filtro tende a homogeneizar os valores na imagem.

    Filtragem no Domnio EspacialFiltros estatsticos

    33

    Filtros estatsticos

    Filtragem no Domnio EspacialFiltros estatsticos

    . . . . . . .

    . . 4 6 3 . .

    . . 6 4 5 . .

    . . 5 7 6 . .

    . . . . . . .

    4 6 36 4 55 7 6

    Mscara 3 x 3 Ordenao

    3 4 4 5 5 6 6 6 7

    . . . . . . .

    . . 4 6 3 . .

    . . 6 ? 5 . .

    . . 5 7 6 . .

    . . . . . . .

    ? =

    Mnimo = 3

    Maximo = 7

    Mediana = 5

    Moda = 6

    34 Filtragem no Domnio EspacialFiltros estatsticos

    35

    SIBGRAPI 2008 Tutorial 9

  • Um filtro Gaussiano tem os valores da mscara determinados a partir de uma funo bidimensional Gaussiana discreta, com mdia igual a zero e desvio padro , do tipo:

    Filtragem no Domnio EspacialFiltros gaussianos

    2

    22

    2 2)(exp(

    21),(

    yxyxGauss

    Onde x e y so as posies na mscara e Gauss(x, y) d o valor a ser colocado na posio (x, y) da mscara.

    36

    Os filtros Gaussianos so filtros de mdia e so utilizados para suavizar a imagem de forma ponderada e simtrica.

    Filtragem no Domnio EspacialFiltros gaussianos

    1 4 6 4 1

    4 16 24 16 4

    6 24 36 24 6

    4 16 24 16 4

    1 4 6 4 1

    Gauss(x,y) = 1/256 *

    Mscara Gaussiana para um filtro do tipo passa-baixa.

    37

    Filtragem no Domnio EspacialFiltros gaussianos

    38

    O filtro do tipo passa-alta utilizado para realar bordas ou regies de interesse com transies abruptas de intensidade.

    O problema deste tipo de filtro que ele geralmente reala tambm rudos do processo de obteno da imagem.

    Filtragem no Domnio EspacialFiltros passa-alta

    39

    SIBGRAPI 2008 Tutorial 10

  • Filtragem no Domnio Espacial Filtro passa-alta

    h(i,j) =

    0 1 0

    1 4 1

    0 1 0

    h(i,j) =

    1 1 1

    1 8 1

    1 1 1

    Mscara para um filtro do tipo passa-alta, note que a soma dos valores dentro da mscara somam zero.

    40 Filtragem no Domnio Espacial Filtro passa-alta

    41

    Filtragem no Domnio Espacial Exemplo

    // Filtro Espacial// criado por Mauricio Marengoni e Denise Stringhini // versao: 1.0, em 08/2008

    #include "cv.h" #include "highgui.h" #include int main(){

    char name0[ ] = "imagens/ursoPretoCinzaSmall.jpg"; IplImage *cvImagem, *cvImgFiltrada, *cvImgCinza;CvSize tamanhoImagem;CvMat *filtro;int lado=3;double kernel[ ] = { -1, -1, -1,

    -1, 8, -1,-1, -1, -1};

    cvImagem = cvLoadImage( name0, -1 );tamanhoImagem.width=cvImagem->width;tamanhoImagem.height=cvImagem->height;cvImgFiltrada=cvCreateImage(tamanhoImagem, IPL_DEPTH_8U, 1); cvImgCinza=cvCreateImage(tamanhoImagem, IPL_DEPTH_8U, 1); cvCvtColor(cvImagem, cvImgCinza, CV_BGR2GRAY);

    //Create convolution filterfiltro = cvCreateMatHeader( lado, lado, CV_64FC1 );cvSetData( filtro, kernel, lado*8 );//Call OpenCV convolution:cvFilter2D( cvImgCinza, cvImgFiltrada, filtro, cvPoint(-1,-1) );//salva imagem filtradacvSaveImage("imagens/ursoPretoPassaAlta2.jpg",cvImgFiltrada);

    return( 0 ); }

    42

    Domnio de Freqncia

    possvel fazer uma troca de base em uma imagem e represent-la em termos uma soma ponderada infinita de um conjunto de senides. Mudanas rpidas na imagem so representadas

    por freqncias altas. Mudanas suaves so representadas por

    frequncias baixas. Esta mudana de base pode ser feita

    utilizando a transformada de Fourier.

    43

    SIBGRAPI 2008 Tutorial 11

  • Expresses que computam a transformadade Fourier:

    Domnio de Freqncia

    )(2),(),( vyuxjeyxfvuF

    1

    0

    1

    0)(2),(),( M

    x

    N

    yNyvMxujeyxfvuF

    Modo contnuo

    Modo discreto

    A expresso discreta a utilizada na DFT (Discrete Fourier Transform) quegeralmente usada na implementao em computador da transformada de Fourier.

    44

    Pode ser mostrado que o processo de convoluo no domnio espacial correspondea multiplicao de duas expresses no domnio de frequncia, isto :

    Domnio de Freqncia

    ),(*),(),(),(**),(),( srWvuFvuGjiwyxfyxg

    Onde ** indica a convoluo entre a imagem f(x,y) com a mscara w(i,j)G(u,v) a transformada de Fourier de g(x,y), que o produto de F(u,v) por W(r,s) F(u,v) a transformada de Fourier de f(x,y)W(r,s) a transformada de Fourier de w(i,j)

    45

    Domnio de FreqnciaProcesso de filtragem

    1. Dada uma imagem f(x,y) de tamanho M x N, obter uma imagem com entorno fp(x,y) de tamanho P x Q onde P = 2M e Q = 2N preenchida com zeros no entorno.

    2. Multiplique fp(x,y) por (-1)(x+y) para centralizar a transformada.

    3. Determinar a DFT da imagem obtida em b.4. Criar um filtro simtrico H(u,v) de tamanho

    P x Q com centro em (P/2,Q/2)

    46

    5. Fazer o produto H(u,v)*F(u,v) obtido na etapa 3.

    6. Obter a imagem no domnio de espao fazendo o inverso da transformada de Fourier gp(x,y).

    7. Multiplicar gp(x,y) por (-1)(x+y) 8. Remover o entorno da imagem obtendo

    ento g(x,y), que a imagem filtrada.

    Domnio de FreqnciaProcesso de filtragem (cont.)

    47

    SIBGRAPI 2008 Tutorial 12

  • A expresso que determina o inverso da transformada de Fourier discreta dada por:

    Domnio de Freqncia

    1

    0

    1

    0)(2),(1),( M

    u

    N

    vNyvMxujevuF

    MNyxf

    Portanto, definir um filtro no domnio de frequncia corresponde a encontrar uma mscara para ser utilizada em conjunto com a imagem transformada e assim obter a imagem filtrada desejada.

    48

    Um filtro passa-baixa ideal dado pela expresso:

    Domnio de FreqnciaFiltros Passa-baixa

    contrario caso 0,

    F v)F(u, se ,1),( 0vuH

    Onde F0 uma frequncia de corte.

    Este filtro faz um corte abrupto em uma certa frequncia, por isso o nome de filtro ideal.

    49

    Domnio de FreqnciaFiltros Passa-baixa

    50

    Outro filtro do tipo passa-baixa o filtro de Butterworth cuja expresso dada por:

    Domnio de FreqnciaFiltros Passa-baixa

    nFvuFvuH 2

    0 )/),((11),(

    Onde n define a ordem do filtro de Butterworth. Este valor indica a forma de atenuao da freqncia a partir da origem do filtro.

    51

    SIBGRAPI 2008 Tutorial 13

  • O filtro Gaussiano no domnio de freqncia dado pela seguinte expresso:

    Domnio de FreqnciaFiltros Passa-baixa

    22 2/),(),( vuFevuH O filtro Gaussiano obtm uma atenuao menos suave que o filtrode Butterworth para a mesma frequncia de corte.

    52

    Filtro passa-alta ideal:

    Domnio de FreqnciaFiltros Passa-alta

    contrario caso 0,

    F v)F(u, se ,1),( 0vuH

    Filtro passa-alta de Butterworth:

    nvuFFvuH 2

    0 )),(/(11),(

    Filtro passa-alta Gaussiano:22 2/),(1),( vuFevuH

    53

    Domnio de FreqnciaFiltros Passa-alta

    54

    Segmentao de Imagens

    Segmentao : Partio da imagem em regies que

    possuem algum tipo de semelhana. Etapa inicial no processo de identificao

    de objetos numa imagem. Existem diversas tcnicas para segmentar

    uma imagem.

    55

    SIBGRAPI 2008 Tutorial 14

  • Segmentao de Imagens56

    Segmentao de Imagens

    Tcnicas de Segmentao : Deteco de Bordas Por Corte Baseada em Regies Limiarizao Movimento

    57

    Reconhecimento de Objetos

    O reconhecimento de objetos oupadres em uma imagem um dos principais objetivos de um processo de viso computacional.

    Existem diversas tcnicas para fazerreconhecimento de padres, geralmente agrupadas como: Estruturais Baseados em teoria da deciso

    58

    Reconhecimento de Objetos59

    SIBGRAPI 2008 Tutorial 15

  • Reconhecimento de Objetos60

    Reconhecimento de Objetos61

    Reconhecimento de Objetos

    Reconhecimento de objetos baseadoem teoria da deciso: Classificador de distncia mnima. Correlao Classificadores Estatsticos Redes Neurais

    Reconhecimento de objetos baseadoem estruturas: Baseado em Forma.

    62

    Rastreamento de Objetos

    Rastreamento de Objetos umaoperao utilizada para, uma vezidentificado um objeto, acompanh-lo em uma seqncia de imagens.

    Existem diversas aplicaes para o rastreamento: Comportamentos Verificao de visada Segurana

    63

    SIBGRAPI 2008 Tutorial 16

  • Rastreamento de Objetos64

    Exemplo: camshiftdemo.c

    CamShift (Continuously Adaptive Mean-SHIFT) um algoritmo desenvolvido para o rastreamento de cor, possibilitando tambm o rastreamento de faces.

    baseado numa tcnica estatstica onde se busca o pico entre distribuies de probabilidade em gradientes de densidade.

    Esta tcnica chamada de mdia por deslocamento (mean shift) e foi adaptada no CamShift para tratar a mudana dinmica das distribuies de probabilidade das cores numa seqncia de vdeo.

    65

    Exemplo: camshiftdemo.c

    Para cada frame, a imagem (raw) convertida para outra de distribuio de probabilidade de cor atravs de um modelo de histograma da cor da pele (no caso de rastreamento de faces).

    O centro e o tamanho da face que se quer rastrear so encontrados atravs do CamShift operando na imagem de probabilidade de cores.

    O tamanho e a localizao corrente da face so informados e usados para definir o tamanho e a localizao da janela de busca da prxima imagem de vdeo.

    66 Exemplo: camshiftdemo.cInicializao do programa

    int main( int argc, char** argv ){CvCapture* capture = 0;if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))

    //inicializa a captura de vdeo a partir de uma cmeracapture = cvCaptureFromCAM(argc == 2 ? argv[1][0] - '0' : 0 );

    else if( argc == 2 )//inicializa a captura de vdeo a partir de um arquivo de vdeocapture = cvCaptureFromAVI( argv[1] );

    if( !capture ){fprintf(stderr,"Could not initialize capturing...\n");return -1;

    }printf( "Hot keys: \n //);

    cvNamedWindow( "Histogram", 1 ); //cria a janela para o histogramacvNamedWindow( "CamShiftDemo", 1 ); //cria a janela para o rastreamento

    //associa a funo on_mouse janela de rastreamentocvSetMouseCallback( "CamShiftDemo", on_mouse, 0 );

    //cria os 3 sliders para ajuste dos parmetros (janela CamShiftDemo)cvCreateTrackbar( "Vmin", "CamShiftDemo", &vmin, 256, 0 );cvCreateTrackbar( "Vmax", "CamShiftDemo", &vmax, 256, 0 );cvCreateTrackbar( "Smin", "CamShiftDemo", &smin, 256, 0 );

    67

    SIBGRAPI 2008 Tutorial 17

  • Exemplo: camshiftdemo.cJanelas criadas

    68 Exemplo: camshiftdemo.cDefinio do objeto (funo on_mouse)

    69

    Exemplo: camshiftdemo.cTrechos selecionados

    cvInRangeS: verifica se os elementos em hsv (previamente convertida a partir da imagem RGB obtida do frame original) esto entre os dois escalares indicados nos parmetros 2 e 3. O parmetro mask a imagem destino que armazenar os pixels que interessaro no clculo do histograma.

    cvSplit: retira um dos canais e armazena na imagem de hue (matiz), que ser usada no clculo do histograma e da sua projeo de fundo (retro-projeo ou back projection).

    cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),cvScalar(180,256,MAX(_vmin,_vmax),0), mask );

    cvSplit( hsv, hue, 0, 0, 0 );

    70 Exemplo: camshiftdemo.cTrechos selecionados

    cvCalcBackProject: calcula a projeo de fundo (retro-projeo) do histograma baseado na imagem de matiz (hue).

    cvAnd: calcula um E lgico entre a imagem de fundo do histograma e a mscara calculada anteriormente (que possui os pixels de interesse) - o resultado novamente armazenado na imagem de fundo do histograma (backproject).

    cvCamShift: chama o algoritmo CamShift para buscar o centro, o tamanho e a orientao do objeto sendo rastreado e armazenar em track_comp.

    cvCalcBackProject( &hue, backproject, hist );cvAnd( backproject, mask, backproject, 0 );cvCamShift( backproject, track_window,

    cvTermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 0, 1), &track_comp, &track_box );

    71

    SIBGRAPI 2008 Tutorial 18

  • Exemplo: camshiftdemo.cTrechos selecionados

    track_window recebe a rea retangular onde est inserido o objeto rastreado e uma elipse desenhada ao redor do objeto.

    track_window = track_comp.rect; if( backproject_mode )

    cvCvtColor( backproject, image, CV_GRAY2BGR );if( image->origin )

    track_box.angle = -track_box.angle;cvEllipseBox(image, track_box, CV_RGB(255,0,0), 3,CV_AA, 0);

    72 Exemplo: camshiftdemo.cObjeto detectado

    73

    Exemplo: camshiftdemo.cObjeto rastreado

    74

    Ajuste do ambiente do OpenCV

    75

    SIBGRAPI 2008 Tutorial 19

  • Windows

    Ajustar a PATH para a biblioteca: Em Meu Computador use o boto direito do mouse e

    selecione Propriedades.

    Clique na aba Avanado e aps no boto de Variveis do Ambiente na parte inferior da janela (no Vista ainda ser necessrio seguir o link Advanced System Settings antes deste passo).

    76

    Windows

    Ajustar a PATH para a biblioteca (cont.): Nas Variveis do usurio est a PATH, edite-a para

    acrescentar o local onde a biblioteca OpenCV foi instalada o caminho padro

    C:\Arquivos de Programa\OpenCV\bin

    Acrescente tambm o caminho para a biblioteca de interface o caminho padro

    C:\ Arquivos de Programa\OpenCV\otherlibs\highgui

    Lembre-se de separ-las utilizando ;.OBS: possvel que a PATH do OpenCV seja atualizada automaticamente

    durante a instalao, mas necessrio verificar.

    77

    Windows

    Visual Studio 2005

    Abrir o ambiente do Visual Studio 2005. Abrir o arquivo opencv.sln na pasta _make da

    instalao (C:\Arquivos de Programa\OpenCV\_make). Isto deve carregar toda a soluo do OpenCV no ambiente do Visual Studio 2005.

    Selecionar a opo Build no menu e clicar em build-solution para compilar a biblioteca. Esta compilao pode levar algum tempo.

    78

    WindowsDevCPP

    Abrir o Bloodshed Dev-C++ (verso testada: 4.9.9.2).

    Para ligar (link) os programas desenvolvidos no Dev C++ com as bibliotecas do OpenCV:

    Clicar em Tools e selecionar Compiler Options. O sistema deve abrir uma janela com a aba Compilerselecionada.

    Marcar o box Add these commands to the linker command line e copiar os seguintes comandos: -lhighgui -lcv -lcxcore -lcvaux lcvcam

    79

    SIBGRAPI 2008 Tutorial 20

  • Windows

    DevCPP (cont.) Na aba Directories, em Binaries adicionar o caminho:

    C:\Arquivos de Programa\OpenCV\bin. Em C Includes adicionar os caminhos:

    C:\Arquivos de Programa\OpenCV\cxcore\include;C:\Arquivos de Programa\OpenCV\cv\include;C:\Arquivos de Programa\OpenCV\otherlibs\highgui;C:\Arquivos de Programa\OpenCV\cvaux\include; C:\Arquivos de Programa\OpenCV\otherlibs\cvcam\include

    Em C++ Includes adicionar os mesmos caminhos acima.

    Em Libraries adicionar o caminho: C:\Arquivos de Programa\OpenCV\lib

    80

    Windows

    Testar a instalao no Windows

    Abrir o ambiente de trabalho escolhido e carregar o arquivo: C:\Arquivos de Programa\OpenCV\samples\c\contours.c.

    Criar um novo arquivo de programa em branco: teste.cpp.

    Copiar e colar todo o arquivo contours.c para o arquivo em branco teste.cpp, salve o arquivo teste.cpp.

    Compilar e executar o programa teste.cpp. Este programa analisa uma imagem sinttica com faces e extrai

    regies diferentes da imagem. Pode-se alterar parmetros ou linhas do cdigo e ver os resultados. (No esquecer de recompilar o programa aps as alteraes).

    81

    Linux e g++

    Entrar com login de super-usurio.

    Ir ao diretrio onde foi feito o download do arquivo tar.gz do OpenCV.

    Na janela aberta, digitar os seguintes comandos:tar -xzf opencv-0.9.7.tar.gzcd opencv-0.9.7./configure && make && make install

    82

    Linux e g++

    Fazer os ajustes para o G++:

    Ir ao diretrio home e abrir o arquivo .bashrc(para o ambiente bash).

    Acrescentar a seguinte linha ao arquivo:alias gcv="g++ -I/usr/local/include/opencv -lcv -lcxcore -lcvaux -lhighgui"

    83

    SIBGRAPI 2008 Tutorial 21

  • Linux e g++

    Testar a instalao no Linux Ir ao diretrio onde est instalado o OpenCV.

    Procurar o sub-diretrio samples e entrar no sub-diretrio c.

    Digitar a linha de comando abaixo que deve executar o programa contours.c:

    gcv contours.c && ./a.out

    84

    SIBGRAPI 2008 Tutorial 22