Tutorial de visão computacional em python

37
Programa de P´ os-Gradua¸ ao em Ciˆ encia da Computa¸ ao Vis˜ ao Computacional Tratamento, Extrac ¸ ˜ ao de Caracter ´ ısticas e Classificac ¸ ˜ ao da Base de Dados LeafDB Leandro Aparecido Passos J´ unior Prof. Dr. Alexandre Lu´ ıs Magalh˜aes Levada Departamento de Computa¸c˜ ao, Universidade Federal de S˜ ao Carlos 11 de junho de 2015

description

Tutorial ensinando usar ferramentas do pacote scykit para extrair processar, extrair características e classificar imagens usando python

Transcript of Tutorial de visão computacional em python

Page 1: Tutorial de visão computacional em python

Programa de Pos-Graduacao em Ciencia da ComputacaoVisao Computacional

Tratamento, Extracao deCaracterısticas e

Classificacao da Base deDados LeafDB

Leandro Aparecido Passos Junior

Prof. Dr. Alexandre Luıs Magalhaes Levada

Departamento de Computacao, Universidade Federal de Sao Carlos

11 de junho de 2015

Page 2: Tutorial de visão computacional em python

Lista de Figuras

2.1 Codigo utilizado para carregar imagens e converte-las paraimagens em tons de cinza. Note que o procedimento e execu-tado apenas para a classe circinatum, e deve ser repetido paraas demais classes. . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2 Chamada ao filtro mediano, para borramento de imagens. . . . 92.3 Aplicacao do filtro mediano. Em (a) podemos ver a imagem

em tons de cinza. (b) e (c) apresentam a filtragem com matrizde discos de tamanho 5 e 10, respectivamente. . . . . . . . . . 10

2.4 Chamada ao algoritmo Canny, para deteccao de bordas. . . . . 102.5 Aplicacao do filtro Canny. Em (a) podemos ver a imagem em

tons de cinza. (b) e (c) apresentam a filtragem com σ=1.0 eσ=3.0, respectivamente. . . . . . . . . . . . . . . . . . . . . . 10

3.1 Adicionando ruıdo Gaussiano a imagem. . . . . . . . . . . . . 113.2 Em (a) podemos ver a imagem em tons de cinza, e em (b) a

imagem com adicao de ruıdo Gaussiano. . . . . . . . . . . . . 123.3 Adicionando ruıdo Gaussiano a imagem. . . . . . . . . . . . . 123.4 Imagem original, com adicao de ruıdo Gaussiano e restaurada

pelo Filtro de Wiener em (a), (b) e (c), respectivamente. . . . 13

4.1 Script utilizado para gerar o histograma. . . . . . . . . . . . . 154.2 Imagem e histograma em (a), e os mesmos equalizados em (b). 154.3 Codigo utilizado para binarizacao por Limiar de Otsu . . . . . 164.4 (a) e (b) apresentam as imagens original e binarizada, respec-

tivamente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

5.1 Contorno parametrico da imagem atraves do metodo MarchingSquares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2

Page 3: Tutorial de visão computacional em python

5.2 Imagem binarizada em (a). Extracao do contorno da imagemem (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

6.1 Transformada Eixo Medial. . . . . . . . . . . . . . . . . . . . . 196.2 Imagem binarizada (a), esqueleto (b), Transformada Medial

do eixo em nıveis de cinza (c) e exemplo com limiar = 50 (d). 20

7.1 Reconstrucao da forma atraves do esqueleto em conjunto coma Transformada Distancia. . . . . . . . . . . . . . . . . . . . . 22

7.2 Nas imagens (a) e (b) podemos ver o esqueleto da imagem esua reconstrucao, respectivamente, sem filtrar qualquer deta-lhe (limiar = 0). Similarmente, (b) e (e) mostram os resultadoscom um limiar = 10, e (c) e (f) com limiar = 50. . . . . . . . 23

8.1 Pontos de curvatura chave. Note que necessita diversosparametros, que influenciam na escolha desses pontos. . . . . . 24

8.2 Pontos chaves da curvatura para uma imagem da classe Circi-natum, Garryana e Kelloggii em (a), (b) e (c), respectivamente. 25

8.3 Implementacao de Equacao 8.1 para extracao da curvatura local. 26

9.1 Exemplo de folhas Circinatum, Garryana e Kelloggii em (a),(b) e (c), respectivamente. . . . . . . . . . . . . . . . . . . . . 28

10.1 Grade de busca dos melhores parametros. . . . . . . . . . . . . 31

A.1 Colecao de imagens da classe Circinatum utilizadas nos expe-rimentos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

A.2 Colecao de imagens da classe Garryana utilizadas nos experi-mentos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

A.3 Colecao de imagens da classe Kelloggii utilizadas nos experi-mentos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Page 4: Tutorial de visão computacional em python

Sumario

1 Introducao 61.1 Ferramentas utilizadas no trabalho . . . . . . . . . . . . . . . 7

2 Leitura e filtragem de imagens por convolucao 82.1 Leitura e conversao para escala de cinza . . . . . . . . . . . . 82.2 Filtros passa-baixas e passa-altas . . . . . . . . . . . . . . . . 9

2.2.1 Filtro Passa-Baixas: Filtro Mediano para borramentoda imagem . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2.2 Filtro Passa-altas: Algoritmo Canny para deteccao debordas . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Ruıdo Gaussiano e o Filtro de Wiener 113.1 Adicionando ruido Gaussiano a uma imagem . . . . . . . . . . 113.2 Removendo ruido Gaussiano com o filtro de Wiener . . . . . . 12

4 Histograma e Limiarizacao de Otsu 144.1 Histograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.1.1 Binarizacao pelo Limiar de Otsu . . . . . . . . . . . . . 14

5 Extracao parametrica do contorno: MarchingSquares 17

6 Esqueletizacao: Medial Axis Transform 19

7 Reconstrucao de imagem utilizando Transformada do EixoMedial e Mapa Distancia 21

8 Curvatura 248.1 CENSURE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248.2 Curvatura Local . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4

Page 5: Tutorial de visão computacional em python

9 Caracterısticas 279.1 Seleccao das amostras . . . . . . . . . . . . . . . . . . . . . . 279.2 Seleccao das Caracteristicas . . . . . . . . . . . . . . . . . . . 27

10 Classificacao 2910.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

10.1.1 Base de dados . . . . . . . . . . . . . . . . . . . . . . . 2910.1.2 Classificador SVM . . . . . . . . . . . . . . . . . . . . 30

10.2 Experimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

11 Conclusoes 32

A Amostras selecionadas para a base de dados 33A.1 Circinatum . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33A.2 Garryana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33A.3 Kelloggii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Page 6: Tutorial de visão computacional em python

Capıtulo 1

Introducao

Durante o curso de visao computacional, aprendemos diversas tecnicas paratratamento de imagens, extracao de formas e caracterısticas e classificacaode dados. Este trabalho visa sintetizar o conteudo aprendido em um exemplopratico onde temos uma base de dados com imagens de folhas, e desejamosreconhece-las e classifica-las fazendo uso das tecnicas aprendidas. Um poucomais detalhadamente, o objetivo desse trabalho e seguir os seguintes passos:

• Leitura e filtragem de imagens por convolucao (com mascaras de filtrospassa baixas para borramento e passa altas para detectar bordas nodomınio do espaco)

• Filtragem adaptativa de imagens (filtro de Wiener adaptativo pararemocao de ruıdo Gaussiano): adicionar ruıdo gaussiano na imageme depois filtrar

• Geracao do histograma das imagens e binarizacao com o algoritmo deOtsu

• Extracao parametrica do contorno das imagens (capturar a forma dosobjetos)

• Esqueletizacao (Medial Axis Transform) das formas (extrair esqueletodas imagens)

• Reconstrucao nao linear de objetos atraves da Transformada Distanciae do esqueleto

6

Page 7: Tutorial de visão computacional em python

• Calculo da curvatura local para cada ponto do objeto (funcao que as-socia a cada ponto do contorno um valor de curvatura)

• Calculo de descritores de formas: curvatura media (media da curva-tura para todos os pontos), area, comprimento de arco, tamanho doesqueleto, etc.

• Classificacao dos padroes com uma tecnica supervisionada vista nocurso (MAP, KNN, NMC, SVM)

• Avaliacao do desempenho atraves da matriz de confusao (taxa de acertoou erro)

1.1 Ferramentas utilizadas no trabalho

A maioria dos scripts desse trabalho foram desenvolvidos na linguagemPython, usando um conjunto de ferramentas desenvolvidos para Processa-mento de Imagens [1], Aprendizado de Maquinas [2], plotagem de dados[3], entre outras ferramentas uteis para processos de Visao Computacional.

Todas essas ferramentas podem ser instaladas simultaneamentesatraves da distribuicao Anaconda, disponıvel para download pelo linkhttp://continuum.io/downloads.

Alem das ferramentas em python, foi utilizada uma funcao da bibliotecaLibOPF [4], disponıvel em http://www.ic.unicamp.br/ afalcao/libopf/, paradividir e normalizar o conjunto de dados.

Nos capıtulos a seguir, cada um desses passos serao abordados, apresen-tando os codigos - escritos em Python - e metodos utilizados. Em seguidaserao apresentados os resultados obtidos na classificacao, atraves do algo-ritmo SVM, e finalmente uma conclusao do trabalho.

Page 8: Tutorial de visão computacional em python

Capıtulo 2

Leitura e filtragem de imagenspor convolucao

Esse capıtulo apresenta uma breve descricao do procedimento adotado paraleitura das imagens e a filtragem por convolucao, utilizando-se de mascarasde filtros passa baixas para borramento e passa altas para detectar bordasno domınio do espaco. O processo utilizado e apresentado a seguir:

2.1 Leitura e conversao para escala de cinza

Para carregar as imagens e converte-las para tons de cinza, foram usadas asferramentas io e color da biblioteca scikit-image, respectivamente. O codigoe apresentado a seguir [1]:

Figura 2.1: Codigo utilizado para carregar imagens e converte-las para ima-gens em tons de cinza. Note que o procedimento e executado apenas para aclasse circinatum, e deve ser repetido para as demais classes.

8

Page 9: Tutorial de visão computacional em python

2.2 Filtros passa-baixas e passa-altas

Os filtros sao transformacoes aplicadas na imagem utilizados como um tra-tamento previo. Os filtros passa baixa ’borram’ a imagem, suavizando suasbordas, a fim de que detalhes pequenos sejam mais suaves e menos sensıveis.Ja os filtros passa alta destacam os pontos onde o contraste e alto, evidenci-ando assim o contorno ou bordas das imagens.

2.2.1 Filtro Passa-Baixas: Filtro Mediano para borra-mento da imagem

Para exemplificar a filtragem de passa-baixas, foi utilizado o filtro medi-ano [1].

Figura 2.2: Chamada ao filtro mediano, para borramento de imagens.

O resultado pode ser visto na Figura 2.3. Note que o algoritmo requercomo parametro uma matriz binaria, onde os 1’s formam um disco central.Para criar essa matriz, foi utilizada a funcao disk.

2.2.2 Filtro Passa-altas: Algoritmo Canny para de-teccao de bordas

Para a filtragem passa-altas foi utilizado o algoritmo Canny. Sua chamadaem Python foi executada da seguinte maneira [1]:

O resultado pode ser visto na Figura 2.5.A proxima secao aborda o metodo empregado para Filtragem adaptativa

das imagens

Page 10: Tutorial de visão computacional em python

(a) (b) (c)

Figura 2.3: Aplicacao do filtro mediano. Em (a) podemos ver a imagemem tons de cinza. (b) e (c) apresentam a filtragem com matriz de discos detamanho 5 e 10, respectivamente.

Figura 2.4: Chamada ao algoritmo Canny, para deteccao de bordas.

(a) (b) (c)

Figura 2.5: Aplicacao do filtro Canny. Em (a) podemos ver a imagem emtons de cinza. (b) e (c) apresentam a filtragem com σ=1.0 e σ=3.0, respec-tivamente.

Page 11: Tutorial de visão computacional em python

Capıtulo 3

Ruıdo Gaussiano e o Filtro deWiener

Neste capıtulo sera apresentado o problema de ruıdo Gaussiano e sua remocaoatraves do filtro de Wiener. Para isso, iremos adicionar um ruıdo Gaussianoem uma imagem e em seguida a trataremos com o filtro de Wiener.

3.1 Adicionando ruido Gaussiano a uma ima-

gem

Para adicionar ruido Gaussiano em uma imagem, utilizarem a funcao ran-dom noise, disponıvel no Scikit-Image [1]:

Figura 3.1: Adicionando ruıdo Gaussiano a imagem.

O resultado pode ser visto na Figura 3.2.

11

Page 12: Tutorial de visão computacional em python

(a) (b)

Figura 3.2: Em (a) podemos ver a imagem em tons de cinza, e em (b) aimagem com adicao de ruıdo Gaussiano.

3.2 Removendo ruido Gaussiano com o filtro

de Wiener

Para restauracao da imagem, perturbada com um ruıdo Gaussiano, utilizare-mos a deconvolucao Wiener-Hunt. Note que sao necessarios dois parametros:

• PSF - Point Spread Function: Uma matriz quadrada onde todos osvalores sao iguais a 1 e representa o impulso de resposta.

• Balance: parametro de regularizacao que mantem equilıbrio entre res-tauracao e ruıdo.

Figura 3.3: Adicionando ruıdo Gaussiano a imagem.

Page 13: Tutorial de visão computacional em python

Na Figura 3.4 podemos observar a imagem original, a mesma imagemcom adicao de ruıdo Gaussiano e em seguida a imagem restaurada pelo filtrode Wiener.

(a) (b) (c)

Figura 3.4: Imagem original, com adicao de ruıdo Gaussiano e restauradapelo Filtro de Wiener em (a), (b) e (c), respectivamente.

Na proxima secao, abordaremos o metodo utilizado para geracao do his-tograma e binarizacao da imagem utilizando o metodo de Otsu.

Page 14: Tutorial de visão computacional em python

Capıtulo 4

Histograma e Limiarizacao deOtsu

Neste capıtulo sera apresentado o conceito de histograma e um algoritmo desegmentacao, ou binarizacao para o caso de duas classes, denominado Limiarde Otsu.

4.1 Histograma

O histograma e uma ferramenta que permite identificar a distribuicao daintesidade dos pixels pela imagem. Redistribuindo esses pixels, podemosfazer a equalizacao do histograma, a qual e uma tecnica muito util paraaumentar o contraste da imagem.

Na Figura 4.2 podemos observar o histograma da imagem, e como elapassa a ser apos a equalizacao do histograma:

4.1.1 Binarizacao pelo Limiar de Otsu

O algoritmo de Otsu procura por vales no histograma da imagem e posicionaseu limiar de modo que o espalhamento intra-classe seja mınimo. O scriptapresentado na Figura 4.3 apresenta o codigo utilizado para sua execucao,utilizando ferramentas do Sckit-Image [1].

O resultado obtido pela binarizacao pode ser visto na Figura 4.4.A seguir, utilizaremos

14

Page 15: Tutorial de visão computacional em python

Figura 4.1: Script utilizado para gerar o histograma.

0.0 0.2 0.4 0.6 0.8 1.0Intensidade do Pixel

0.0 0.2 0.4 0.6 0.8 1.0Intensidade do Pixel

(a) (b)

Figura 4.2: Imagem e histograma em (a), e os mesmos equalizados em (b).

Page 16: Tutorial de visão computacional em python

Figura 4.3: Codigo utilizado para binarizacao por Limiar de Otsu

(a) (b)

Figura 4.4: (a) e (b) apresentam as imagens original e binarizada, respecti-vamente.

Page 17: Tutorial de visão computacional em python

Capıtulo 5

Extracao parametrica docontorno: MarchingSquares

Para a extracao parametrica do contorno, utilizaremos o metodo“MarchingSquares”. O script utilizado pode ser visto na Figura 5.1.

Figura 5.1: Contorno parametrico da imagem atraves do metodo MarchingSquares.

Podemos visualizar o resultado atraves da Figura 5.2.

17

Page 18: Tutorial de visão computacional em python

(a) (b)

Figura 5.2: Imagem binarizada em (a). Extracao do contorno da imagem em(b).

Page 19: Tutorial de visão computacional em python

Capıtulo 6

Esqueletizacao: Medial AxisTransform

Neste capıtulo, faremos a esqueletizacao da imagem, ou mais precisamente,faremos a transformada do eixo medial.

O Eixo medial representa a hierarquia das partes que compoem a forma.Define um conjunto dos pontos do objeto pelos centros dos circulos que saobitangentes ao contorno da forma e encontram-se totalmente dentro delas.

Figura 6.1: Transformada Eixo Medial.

E importante lembrar que para gerar o esqueleto da imagem, devemosestabelecer um limiar na Transformada Medial. Esse limiar vai definir aquantidade de detalhes do esqueleto

A Figura 6.2 apresenta a esqueletizacao e a Transformada:A seguir, utilizaremos o a Transformada Medial do eixo em conjunto com

o mapa distancia para reconstrucao da forma da imagem.

19

Page 20: Tutorial de visão computacional em python

(a) (b)

0

20

40

60

80

100

120

140

160

180

(c) (d)

Figura 6.2: Imagem binarizada (a), esqueleto (b), Transformada Medial doeixo em nıveis de cinza (c) e exemplo com limiar = 50 (d).

Page 21: Tutorial de visão computacional em python

Capıtulo 7

Reconstrucao de imagemutilizando Transformada doEixo Medial e Mapa Distancia

Neste capıtulo, utilizaremos a da Transformada do Eixo medial, vista nocapıtulo anterior, em conjunto com a Transformada Distancia para recons-truir a imagem.

A ideia e pegar a distancia, obtida atraves da Transformada Distancia,em cada ponto do esqueleto e pintar um circulo em volta com raio igual aessa distancia. O algoritmo para essa tarefa e apresentado na Figura 7.1:

No exemplo apresentado na Figura 7.2, podemos observar a importanciado limiar nesse processo, quanto a preservacao de detalhes. Uma observacaointeressante e que, se aumentarmos gradativamente o limiar, e animarmos asequencia de imagens de saıda, conseguimos um efeito de “derretimento”.

21

Page 22: Tutorial de visão computacional em python

Figura 7.1: Reconstrucao da forma atraves do esqueleto em conjunto com aTransformada Distancia.

Page 23: Tutorial de visão computacional em python

(a) (b) (c)

(d) (e) (f)

Figura 7.2: Nas imagens (a) e (b) podemos ver o esqueleto da imagem esua reconstrucao, respectivamente, sem filtrar qualquer detalhe (limiar = 0).Similarmente, (b) e (e) mostram os resultados com um limiar = 10, e (c) e(f) com limiar = 50.

Page 24: Tutorial de visão computacional em python

Capıtulo 8

Curvatura

Abordaremos a seguir dois metodos utilizados para extracao de carac-terısticas da curvatura da imagem: CENSURE, que encontra os pontos decurvatura mais representativos de cada imagem, e o calculo da curvaturalocal, que calcula a curvatura em cada ponto da imagem.

8.1 CENSURE

CENSURE e uma algoritmo de extracao de pontos chave de curvatura naimagem, disponibilizado pelo Scikit-Image [1]. Sua chamada pode ser feitacomo demonstrada na Figura 8.1.

Figura 8.1: Pontos de curvatura chave. Note que necessita diversosparametros, que influenciam na escolha desses pontos.

O resultado obtido pelo CENSURE com os parametros selecionados e

24

Page 25: Tutorial de visão computacional em python

apresentado na Figura 8.2.

(a) (b) (c)

Figura 8.2: Pontos chaves da curvatura para uma imagem da classe Circina-tum, Garryana e Kelloggii em (a), (b) e (c), respectivamente.

8.2 Curvatura Local

A partir da extracao parametrica do contorno, apresentada no Capıtulo 5,calculamos a curvatura local K(t) a partir da seguinte equacao:

K(t) =2(c1b2 − c2b1)

(c21 + c22)3/2

(8.1)

onde os coeficientes sao:

b1 = 1/12[(xt−2 + xt+2) + 2(xt−1 + xt+1) − 6xt] (8.2)

b2 = 1/12[(yt−2 + yt+2) + 2(yt−1 + yt+1) − 6yt] (8.3)

c1 = 1/12[(xt+2 − xt−2) + 4(xt+1 − xt−1)] (8.4)

c2 = 1/12[(yt+2 − yt−2) + 4(yt+1 − yt−1)] (8.5)

Na Figura 8.3 podemos observar a implementacao da Equacao 8.1 empython:

Page 26: Tutorial de visão computacional em python

Figura 8.3: Implementacao de Equacao 8.1 para extracao da curvatura local.

Page 27: Tutorial de visão computacional em python

Capıtulo 9

Caracterısticas

Neste capıtulo, abordaremos a selecao das amostras e de suas caracterısticas,para, no capıtulo seguinte, utilizarmos dessas caracteristicas quando abor-darmos a etepa de classificacao.

9.1 Seleccao das amostras

Foram selecionadas as trinta primeiras amostras de tres das classes de ima-gens de folhas fornecidas, sendo elas Circinatum, Garryana e Kelloggii. AFigura 9.1 apresenta um exemplar de cada uma delas.

9.2 Seleccao das Caracteristicas

Foram selecionadas quatro caracteristicas para o projeto, sendo elas:

• Area: Apos a binarizacao, apresentada na Secao 4.1.1, e computada asoma da area da imagem, ou seja, os pixels brancos.

• Tamanho do Esqueleto: A partir da extracao do esqueleto, apresentadano Capıtulo 6, foi executada a soma de todos os pixels que fazem partedo esqueleto.

• Comprimento de arco: Soma de todos os pixels que pertencem ao con-torno da imagem, apresentado no Capıtulo 5.

27

Page 28: Tutorial de visão computacional em python

(a) (b) (c)

Figura 9.1: Exemplo de folhas Circinatum, Garryana e Kelloggii em (a), (b)e (c), respectivamente.

• Curvatura media: Apos a extracao do contorno da imagem, apresen-tado no Capıtulo 5, foi extraıda a curvatura de cada ponto da imagem,atraves da Equacao 8.1, e entao calculada a media desses valores.

Page 29: Tutorial de visão computacional em python

Capıtulo 10

Classificacao

O capıtulo de Classificacao sera dividido em duas partes, sendo que na pri-meira trataremos da metodologia, e na segunda, dos experimentos.

10.1 Metodologia

Aqui descreveremos a metodologia empregada na organizacao e divisao dabase de dados, bem como a utilizada na classificacao

10.1.1 Base de dados

Apos a extracao das caracterısticas, a base de dados foi dividida, utilizandoa funcao opf split da LibOPF [4], em um conjunto de treinamento, validacaoe testes, e o valor das caracterısticas foi normalizado.

Essa divisao foi feita atraves de uma escolha empirica dos valores, atri-buindo um valor de 50% das amostras para treinamento, 20% para validacaoe 30% para testes, onde cada uma destas etapas e responsavel por:

• Treinamento: Treinar o classificador com os parametros selecionadoscom a base de treinamento;

• Validacao: Encontrar o melhor conjunto de parametros para a etapade treinamento;

• Testes: Classificar as amostras do conjunto de teste com o classificadortreinado com os melhores parametros encontrados na etapa de validacaoe avaliar seu desempenho;

29

Page 30: Tutorial de visão computacional em python

10.1.2 Classificador SVM

O Scikit-Learn disponibiliza diversas implementacoes do SVM,sendo algumas delas para classificacao, uma para regressao eate mesmo uma para deteccao de anomalias. A implementacaoutilizada nesse trabalho e a SVC, disponivel em http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC.

A etapa de classificacao sera dividida em duas etapas, sendo que a pri-meira e a de validacao e a segunda e a de testes. Na etapa de validacao seraexecutada uma busca pseudo-exaustiva na procura dos melhores parametrospara o classificador. Na etapa de testes, usaremos o melhor conjunto deparametros encontrados na etapa de validacao para classificar o conjunto detestes. Note que utilizaremos um kernel rbf, e os parametros a serem esti-mados serao “C”, que controla o termo de erro e “Gamma”, que controla ocoeficiente do kernel. Os demais parametros utilizados serao os parametrospadrao do scikit.

10.2 Experimentos

Na etapa de validacao, variamos o paramtro C no intervalo [0.1,5.0] de 0.5em 0.5 e o parametro Gamma no intervalo [0.0, 5.0] de 0.5 em 0.5. NaFigura 10.1 podemos observar as regioes onde encontramos o melhor conjuntode parametros

A partir da validacao, selecionamos para os testes os parametros Gamma= 0.0 e C = 1.5, por estarem na regiao de maior valor. A taxa de acertosencontrada nos testes foi de 0.86, e a matriz de confusao pode ser vista naTabela 10.2.

Classes Circinatum Garryana Kelloggii

Circinatum 9 0 1Garryana 0 10 0Kelloggii 1 2 7

Tabela 10.1: Matriz de confusao.

A partir da matriz de confusao, podemos observar que as classes Circina-tum e Kelloggii sao mais parecidas entre si do que a classe Garryana, o que

Page 31: Tutorial de visão computacional em python

0 1 2 3 4 5

1

2

3

4

5

C

0.552

0.592

0.632

0.672

0.712

0.752

0.792

0.832

0.872

Figura 10.1: Grade de busca dos melhores parametros.

pode-se perceber apenas olhando para as imagens.

Page 32: Tutorial de visão computacional em python

Capıtulo 11

Conclusoes

Neste trabalho foram apresentadas algumas das tecnicas aprendidas no cursode visao computacional, as quais envolvem de precessamento de imagens,extracao de caracterısticas baseadas no formato do objeto, e a classificacaodos dados. A partir delas pudemos extrair caracteristicas representativase classificar os dados com uma taxa de 86% de acertos, provando que astecnicas sao muito eficientes, e alem disso, demonstrando quais classes saomais parecidas, atraves de uma matriz de confusao.

32

Page 33: Tutorial de visão computacional em python

Apendice A

Amostras selecionadas para abase de dados

A.1 Circinatum

A Figura A.1 apresenta as amostras da classe Circinatum utilizadas no ex-perimento:

A.2 Garryana

A Figura A.2 apresenta as amostras da classe Garryana utilizadas no expe-rimento:

A.3 Kelloggii

A Figura A.3 apresenta as amostras da classe Kelloggii utilizadas no experi-mento:

33

Page 34: Tutorial de visão computacional em python

Figura A.1: Colecao de imagens da classe Circinatum utilizadas nos experi-mentos.

Page 35: Tutorial de visão computacional em python

Figura A.2: Colecao de imagens da classe Garryana utilizadas nos experi-mentos.

Page 36: Tutorial de visão computacional em python

Figura A.3: Colecao de imagens da classe Kelloggii utilizadas nos experimen-tos.

Page 37: Tutorial de visão computacional em python

Referencias Bibliograficas

[1] Scikit image developers. Scikit-Image User Guide. Available at http:

//scikit-image.org/docs/dev/user_guide.html.

[2] Scikitlearn developers. Scikit-Learn User Guide. Available at http://

scikit-learn.org/dev/user_guide.html.

[3] J. D. Hunter. Matplotlib: A 2d graphics environment. Computing InScience & Engineering, 9(3):90–95, 2007.

[4] JoA£o Paulo Papa, Celso Tetsuo Nagase Suzuki, and Alexandre Xa-vier Falc ao. LibOPF: A library for the design of optimum-path forest clas-sifiers, 2014. Software version 2.1 available at http://www.ic.unicamp.br/~afalcao/LibOPF.

37