54
UNIVERSIDADE FEDERAL DE SANTA CATARINA CENTRO TECNOLÓGICO DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA CURSO DE CIÊNCIAS DA COMPUTAÇÃO RECONHECIMENTO DE OBJETOS GEOMÉTRICOS EM IMAGENS Flavio da Silveira Pepino Florianópolis -SC 2008/2

RECONHECIMENTO DE OBJETOS GEOMÉTRICOS EM … · Reconhecimento de objetos geométricos em imagens Trabalho de Conclusão de Curso Curso submetido à Universidade Federal de ... (Haykin,

Embed Size (px)

Citation preview

UNIVERSIDADE FEDERAL DE SANTA CATARINACENTRO TECNOLÓGICO

DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICACURSO DE CIÊNCIAS DA COMPUTAÇÃO

RECONHECIMENTO DE OBJETOS GEOMÉTRICOS EM

IMAGENS

Flavio da Silveira Pepino

Florianópolis -SC

2008/2

Flavio da Silveira Pepino

Reconhecimento de objetos geométricos em imagens

Trabalho de Conclusão de Curso Curso

submetido à Universidade Federal de

Santa Catarina como parte dos

requisitos para a obtenção do grau de

Bacharel em Ciências da Computação

Orientador:

Professor Doutor Mauro Roisenberg

BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO

DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA

CENTRO TECNOLÓGICO

UNIVERSIDADE FEDERAL DE SANTA CATARINA

Florianópolis

Dezembro 2008/2

Agradecimentos

Aos professores em todos os níveis da minha vida, aos amigos, inimigos,

cachorros, gatos e outros animais. Ao pessoal da Ilha, aos colegas da UFSC,

ao pessoal que conheci em Santa Catarina, são tantas pessoas. À minha

família em especial e ao supremo West criador de tudo o que conhecemos =).

Trabalho de Conclusão de Curso apresentado sob o título de “Reconhecimento

de objetos geométricos em imagens”, defendido por Flavio da Silveira Pepino e

aprovado no dia 8 de dezembro de 2008, em Florianópolis, Santa Catarina pela

banca examinadora constituída por:

_________________________________

Prof. Mauro Roisenberg, Doutor

Orientador

_________________________________

Prof. Silvia Modesto Nassar, Doutora

Universidade Federal de Santa Catarina

__________________________________

Prof. Lúcia Helena Martins Pacheco, Doutora

Universidade Federal de Santa Catarina

Resumo

Este trabalho construiu uma simulador de visão de computador no ambiente

Matlab, o simulador utiliza uma rede neural artificial para classificação de

formas geométricas (círculo,quadrado, triângulo ou retângulo) presentes em

uma imagem. A tarefa de reconhecimento de imagens foi dividida em duas

etapas: pré-processamento e classificação através de uma rede neural. Na

etapa de pré-processamento, as imagens foram processadas por um algoritmo

de detecção de bordas, utilizando o algoritmo de Sobel, que elimina o fundo

contra o qual a imagem se encontra, deixando apenas o contorno do objeto a

ser reconhecido. Foi utilizado o algoritmo log-polar foram tornar para tornar

o sistema invariante a efeitos de translação, rotação e escala. O vetor

resultante foi usado como entradas para a rede neural. Na classificação foi

utilizada uma rede neural artificial criada no ambiente Matlab. Duas amostras

foram utilizadas para treinar a rede, e 20 (vinte) para testes para cada classe.

Palavras-chaves: redes neurais artificiais, inteligência artificial

Abstract

This work has built a computer simulation of vision of the Matlab

environment, the simulator uses an artificial neural network for classification of

geometric shapes (circle, square, triangle or rectangle) in an image. The task of

recognition of images was divided into two stages: pre-processing and

classification using a neural network. In stage pre-processing, the images were

processed by an algorithm for detecting edges, using the algorithm of Sobel,

which eliminates the background against which the image is, leaving only the

outline of the object being recognized. Algorithm was used log-polar have been

made to make the system invariant the effects of translation, rotation and scale.

The resultant vector was used as inputs to the neural network. In the

classification used a neural network was created in Matlab environment. Two

samples were used to train the network, and 20 (twenty) for tests for each class.

Keywords: artificial neural network

Sumário

1 Introdução.........................................................................................................8

1.1 Especificação do problema............................................................................9

1.2 Objetivos........................................................................................................9

1.3 Justificativa....................................................................................................9

1.4 Estrutura do trabalho...................................................................................10

2. Fundamentação Teórica................................................................................11

2.1 Imagem Digital.............................................................................................11

2.2 Rede Neural Artificial...................................................................................12

2.2.1 Unidades em redes neurais artificiais.......................................................14

2.2.2 Estrutura da rede......................................................................................14

2.3 Transformada Log-Polar.............................................................................15

3 .Metodologia...................................................................................................18

3.1 Aquisição de imagens..................................................................................18

3.2 Pré-processamento de imagens..................................................................18

3.3 Classificação................................................................................................21

4. Resultado.......................................................................................................24

5. Conclusão......................................................................................................25

Referências........................................................................................................26

Apêndices..........................................................................................................27

Apêndice A – Código Matlab Simulador e testes...............................................27

Anexo 1 – Artigo Formato SBC..........................................................................46

Lista de figuras

Figura 1 Plano de Imagem................................................................................ 11

Figura 2 Unidade em redes neurais .............................................. …..............14

Figura 3 Estrutura de uma rede neural artificial.................................................14

Figura 4.Exemplo de cada classe de uma imagem original..............................19

Figura 5 Detecção de aresta utilizando o algoritmo de Sobel..........................19

Figura 6. Resultado da operação log-polar para os círculos.............................20

Figura 7 Resultado da operação log-polar para os retângulos.........................20

Figura 8 Resultado da operação log-polar para os triângulos..........................20

Figura 9 Resultado da operação log-polar para os quadrados.........................20

Figura 10 Arquitetura de RNA proposta.............................................................22

Figura 11 Treinamento da rede.........................................................................23

Lista de Tabelas

1: Vetor de saída da RNA..................................................................................22

2: 8 Vetores de saída gerados para cada exemplo no treinamento.................23

3 Acertos nos testes antes da Transformada de Fourier.................................24

Lista de acrônimos e abreviações

RNA

Rede Neural Artificial

8

1 Introdução

Visão computacional é um “sistema computadorizado capaz de adquirir, processar e

interpretar imagens correspondentes a cenas reais” (Filho, 1999, pg.13).

Redes neurais artificiais são estruturas de dados inspiradas na estrutura e funcionamento

de uma coleção de neurônios. O trabalho das redes neurais artificiais, informalmente

também chamadas de “redes neurais”, é motivado pela forma diferente de como o

computador digital funciona. O cérebro é um sistema de processamento de informação

“altamente complexo, não-linear e paralelo” (Haykin, 2001, p. 27). Um neurônio é uma

célula nervosa cuja função é coletar, processar e disseminar sinais elétricos. De uma

forma simplificada, um neurônio transmite um sinal para outro neurônio da rede quando

uma combinação linear de suas entradas ultrapassa um limiar. A visão humana é uma

tarefa de processamento de informação cuja função é fornecer uma representação do

ambiente para que possamos interagir com ele. O cérebro realiza a todo o momento

“tarefas de reconhecimento perceptivo (rostos, cenas) em aproximadamente 100-200 ms”

(Haykin, 2001, p. 27), enquanto problemas de muito menor complexidade acabam por

necessitar um esforço computacional elevado em um computador digital, muito além de

milisegundos.

De uma forma geral, uma rede neural é uma máquina que é projetada para modelar a

maneira como nosso cérebro realiza uma tarefa em particular (função de interesse), e ela

é implementada e executada em um computador digital. O interesse deste trabalho é em

uma classe de redes neurais que realizam a computação útil através de um processo de

aprendizagem. O procedimento utilizado para realizar o processo de aprendizagem é

chamado de algoritmo de aprendizagem.

Redes neurais têm sido utilizadas largamente em aplicações de reconhecimento de

imagens devido ao seu poder de aprendizado.

9

1.1 Especificação do problema

O problema consiste em uma imagem que contém objetos de formas geométricas -

círculo, quadrado, triangulo ou retângulo. Os objetos podem estar dispostos em uma

imagem em diferentes posições, rotações e escala.

1.2 Objetivos

Este trabalho pretende implementar um simulador de Visão Computacional, utilizando

uma rede neural artificial com a função de interesse de classificação e reconhecimento

objetos geométricos com forma geométricas em imagens bidimensionais.

1.2.2 Específico

Investigar e descrever a arquitetura da rede neural usado para resolver o

problema.

Treinar a rede neural para aprender a reconhecer os determinados objetos

(círculo, quadrado, retângulo ou triângulo).

1.3 Justificativa

Utilizar o conhecimento de computação e suas ferramentas no reconhecimento de formas

geométricas presentes na vida cotidiano. Muitos objetos da vida real tem as mesmas

formas geométricas utilizadas neste trabalho. O interesse deste trabalho é poder

reconhecer as formas geométricas independente de sua posição na imagem, sua

10

variação em relação a rotação e sua escala. Para isso é necessário preservar as

características extraídas dos objetos, mantendo assim sua integridade.

1.4 Estrutura do trabalho

Os capítulos seguintes estão organizados da seguinte forma. No capítulo 2 é apresentada

a fundamentação teórica do trabalho. A seção 2.1 mostra os conceitos básicos de

imagens digitais, seção 2.2 apresenta os conceitos de redes neurais artificiais e sua

propriedades interessantes para este trabalho. A seção 2.3 exibe a transformada de

Fourier e Log-Polar. O capítulo 3 apresenta a metodologia seguida pelo trabalho,

apresenta a solução proposta. O capítulo 4 comenta os resultados, e o capítulo 5 é a

conclusão.

11

2.Fundamentação Teórica

2.1 Imagem digital

Um sinal analógico de vídeo, obtido no caso por uma câmera, deve ser discretizado em

relação ao seu espaço e sua amplitude para se tornar apto ao processamento digital.

O modelo para lidar com imagens assume uma matriz MxN de intensidade de luz no

plano de uma imagem que podemos chamar de I(x,y). O espaço está relacionado à

resolução da imagem.

Figura 1: Plano da imagem

E a amplitude da imagem está relacionada com a quantidade de tons de cinzas.

Cada posição na matriz, ou seja, cada pixel possui um valor relacionado ao tom de cinza,

que pode ser um valor inteiro na faixa 0 a 2n-1 .

12

2.2 Rede Neural Artificial (RNA)

Conforme Haykin (2001,pg.28), “uma rede neural é um processador maciçamente

paralelamente distribuído constituído de unidades de processamento simples, que têm a

propensão natural para armazenar conhecimento experimental e torná-lo disponível para

uso”, os aspectos relevantes das RNAs relevantes para este trabalho são o processo de

aprendizagem e forças de conexão entre os neurônios (chamados de pesos sinápticos),

que são utilizados para armazenar o conhecimento adquirido. A alteração dos pesos

sinápticos é a maneira usual para projetar redes neurais.

O poder das redes neurais advém de sua estrutura paralela e sua capacidade de

generalização. Generalização é a capacidade da RNA produzir saídas adequadas para

entradas que não foram dadas durante o treinamento (aprendizagem). Estas duas

habilidades de processamento da informação dão às RNAs possibilidade de resolver

problemas complexos que são difíceis por outras abordagens.

Entre as propriedades das redes neurais artificiais apresentadas por Haykin (2001) as

seguintes são interessantes para o trabalho:

Mapeamento de Entrada-Saída: Paradigma de aprendizado chamado

aprendizagem com um professor ou aprendizagem supervisionada envolve a

modificação de seus pesos sinápticos de um rede neural pela aplicação de um

conjunto de amostras de treinamento rotuladas ou exemplos de tarefa. Cada

exemplo consiste de um sinal de entrada único e de uma resposta desejada

correspondente. Apresenta-se para rede um exemplo escolhido ao acaso do

conjunto, e os pesos sinápticos (parâmetros livres) da rede são modificados para

minimizar a diferença entre a resposta desejada e a resposta real da rede,

produzida pelo sinal de entrada, de acordo com um critério estatístico apropriado.

O treinamento da rede é repetido para muitos exemplos do conjunto até que a

13

rede alcance um estado estável onde não haja mudança significativa nos pesos

sinápticos. Os exemplos de treinamento previamente aplicados podem ser

reaplicados durante a sessão de treinamento, mas em uma ordem diferente.

Assim, a rede aprende dos exemplos ao construir um mapeamento de entrada

saída para o problema considerado.

Adaptabilidade.

As redes neurais têm a capacidade inata de adaptar seus pesos sinápticos a

modificações do ambiente. Uma rede treinada para operar em um ambiente

especifico pode ser facilmente retreinada para lidar com pequenas modificações

nas condições operativas do ambiente.

2.2.1 Unidades em Rede Neurais

As redes neurais são compostas de nós ou unidades conectadas por vínculos orientados

para o corpo. Um vínculo da unidade i para unidade j serve para propagar a ativação xn

desde i até j. Cada vínculo também tem um peso numérico Wi,j associado a ele, o qual

determina a intensidade e o sinal de conexão, também chamada de peso sináptico.

14

Figura 2: Unidade rede neural artificial

2.2.2 Estrutura da rede

Existem duas categorias principais de redes neurais: redes acíclicas ou ou redes de

alimentação direta e redes ciclícas ou recorrentes. Para este trabalhos estamos

interessados em redes de alimentação direta devido que uma rede de alimentação direta

representa uma função de sua entrada atual, logo não tem “nenhum estado interno além

dos pesos propriamente ditos” (Norvig, 2001,pg.715).

Figura 3: Estrutura de RNA com uma camada oculta.

15

Expressa-se a a saída da camada oculta como função de suas entradas e então a saída

da rede é função das entradas da rede como um todo. Os pesos sinápticos do neurônios

funcionam como parâmetros dessa função, a alteração nos pesos sinápticos altera a

função que a rede representa e isso é o processo de aprendizagem.

Uma rede neural pode ser usada para classificação ou regressão. O aprendizado

supervisionado ou classificação de padrões oferece uma estrutura natural para o estudo

do reconhecimento de objetos. As redes de alimentação de direta se dispõem em

camadas, cada unidade recebe somente a entrada de camadas situadas na camada

predecessora. É possível redes de alimentação direta com uma única camada onde todas

entradas estão ligadas diretamente a saída, o chamado perceptron. Os perceptrons têm

um poder de expressão limitado. Para este trabalho estamos interessados em redes de

alimentação direta com uma camada oculta pois aumenta o espaço de hipóteses que a

rede pode representar.

2.3 Transformada de Fourier, Log-polar

Uma das ferramentas mais utilizadas no processamento de imagens é a transformada de

Fourier, que permite obter uma visão da imagem a ser analisada no domínio da

freqüência, facilitando a análise e o seu processamento. Em computadores utiliza-se os

algoritmos para execução rápida das transformadas de Fourier (FFT).

Um sinal no domínio do tempo é representado é muito comum no ensino mas em

determinados casos é mais útil a representação de no domínio da freqüência, e esta

operação de transformação é feita pela Transformadas de Fourier.

A premissa da transformada de Fourier assume que o sinal é contínuo com uma

extensão infinita, para o qual a transformada é desejada. Mas imagens são muitas vezes

descontínuas ao longo de uma linha ou coluna da imagem. Para analisar dados de pixel

de uma imagem contínua a versão discreta de transformada de Fourier foi desenvolvida e

foi chamada de transformada rápida de Fourier (FFT). Esta implementação é a base para

a maioria de algoritmos de processamento de imagens usando transformada de Fourier.

16

A mudança de domínio garante certas propriedades interessantes para este trabalho

como em relação à translação e à rotação, pois a transformada possui as características

de separabilidade e independência das freqüências associadas às respectivas direções

espaciais.

Um imagem pode ser representada por uma transformada de Fourier bi-dimensional, a

qual pode ser considerada como uma imagem com uma parte real e uma parte complexa.

A transformada de Fourier em duas dimensões monta um mapa de valores de pixel de

imagem no espaço de freqüência da imagem espacial. Utilizando o algoritmo da

Transformada Rápida de Fourier em duas dimensões em uma imagem, monta-se um

mapeamento de todas as freqüências de espaço dentro de uma imagem.

A Transfomada de Fourier (FT) é decompõe um sinal em suas componentes elementares

seno e cosseno. A FT aplicada a uma imagem no domínio espacial gera uma informação

no domínio da freqüência, em que cada ponto, definido por um vetor do tipo (k.cosseno,

k.seno), representa uma dada freqüência contida no domínio espacial da imagem.

A amplitude da TF de f(x,y) permanece invariante à translações, o que é útil para este

trabalho. Mudanças de escala e rotações, no entanto, não são invariantes na TF e nem

em sua amplitude espectral, o mesmo ocorrendo na TF discreta.

A transformada log-polar (LP) é uma TF bidimensional associada a uma troca de sistemas

de coordenadas: em lugar do par (u,v) utilizado em (1) usa-se a representação (ρ,θ), onde

eρ é o raio polar e θ o ângulo. A troca de coordenadas é dada por

(1)

θ=θ=

ρ

ρ

senevcoseu

e difere da representação polar usual por considerar eρ como o raio polar. A troca de

sistemas de coordenadas de representação para freqüências aplicada na TF define a

transformação LP através de

lp fLP fLP f

( )( , )( )( , )( )( )

ρ θρ θ

=− ∞

.

17

Observa-se que a transformação LP-normalizada, como a TF, é invariante sob translação.

3. Metodologia

18

Para obter a visão um computador precisa transformar a imagem para que ela se torne

apta para seu reconhecimento. É necessário também extrair características que possam

ser invariantes do objeto independendo da disposição do objeto na imagem. Foi utilizado

o ambiente de computação Matlab nos experimentos, incluindo o Toolbox de Redes

Neurais e Processamento de Imagens.

3.1 Aquisição das imagens

O simulador de visão computacional busca reconhecer os objetos geométricos de

diferentes formas através da rede neural artificial em qualquer posição da imagem e

diferentes escalas e rotações. Foram escolhidas 4 classes para buscar essa função de

interesse: quadrado, circulo , triangulo e retângulo.

3. 2 Pré-processamento da imagem

Eleitos então objetos, foi necessário estudar suas características que possam ser usadas

para seu reconhecimento. Primeiro, é necessário operação de baixo nível para detectar

arestas no plano de imagem. Arestas são linhas que no plano da imagem, ao longo dos

quais existe uma mudança significativa no brilho da imagem. A detecção das arestas

serve para diminuir a amplitude do tom de cinza de cada pixel da matriz. Outra utilidade

das arestas é que dentro de faixa adequada de contrastes, as arestas serão detectadas

aproximadamente nas mesmas posições, independente da configuração precisa da

iluminação. O pré-processamento da imagem foi indispensável pois reteve as

características identificadoras do objeto e contribui para diminui a dimensões da entrada

da RNA. Foi utilizado o método de detecção de arestas (bordas) de Sobel pois era

necessário obter apenas a forma do objeto a ser identificado. As imagens no seus

tamanhos originais são de 256 pixels X 256 pixels.

O sistema de visão computacional deve classificar o objeto corretamente independe de

seu tamanho, rotação e posição na imagem. Portanto foi utilizada a tranformada Log-

19

polar que torna o sistema invariante tamanho, rotação e escala. A matriz resultante da

operação Log-Polar de cada imagem tinha dimensões de 64 linhas por 15 colunas.

Figura 5. Detecção de arestas usando o algoritmo de Sobel.

Figura 4. Exemplo de cada classe de uma imagem original.

20

Nas figuras a seguir vemos o resultado da operação log-polar para cada exemplo, em

cada figura vemos o par de treinamento. O padrão pode ser usado como entrada na rede

neural.

Figura 6: Padrão resultante da operação log-polar para os círculos

Figura 7: Resultado operação log-polar retângulos

Figura 8: Resultado da operação log-polar para os triângulos

Figura 9: Resultado operação log-polar dos quadrados

21

3.3 Classificação

Dado um conjunto de pares entrada-saída, cada par consiste em em um sinal de entrada

e a resposta desejada correspondente, o projeto de uma rede neural deve seguir as

seguintes recomendações :

A arquitetura apropriada deve ter uma camada de entrada com número de nós

igual ao número de pixels que a imagem de entrada. E a camada de saída igual ao

número de classes a reconhecer. “Um subconjunto de exemplos é utilizado para

treinar a rede por meio de um algoritmo apropriado”(Haykin, 2001, pg.50). Essa

fase de qualquer projeto de rede neural artificial é conhecida pela nome de

aprendizagem.

O desempenho da rede deve ser testado com dados não apresentados a rede

durante a aprendizagem. O desempenho da rede é então estimado comparando o

reconhecimento da classe fornecida com a classe real em questão. Esta fase da

rede neural é conhecida como generalização.

Dadas as condições, foi criada um rede neural artificial do tipo feed-foward com 960

neurônios na camada de entrada, este número equivale ao número de pixels resultante da

operação de tranformação Log-Polar. A função de ativação das camadas foi definida com

Tangente Hiperbólica e o algoritmo de treinamento foi Gradient descent backpropagation

com momentum e taxa adaptativa. Na camada de saída foram determinadas 4 neurônios .

Foi determinada que a rede executaria os exemplos através da rede, ao ajustar os pesos

de cada exemplo, o ciclo, por até 1000 ciclos ou atingisse o critério de parada de 0.001.

22

Foram utilizadas dois exemplos de cada classe, para o treinamento da rede, e 20 para os

testes. As amostras para treinamento da RNA foram escolhidas ao acaso, tomadas sem

qualquer conhecimento sobre os dados da amostra. Foi determinada a saída alvo da RNA

de acordo com a seguinte convenção:

Classe Vetor de saída (alvo)

Circulo [1 -1 -1 -1]

Quadrado [-1 1 -1 -1]

Triângulo [-1 -1 1 -1]

Retângulo [-1 -1 -1 1]

Tabela 1: Vetor de saída da RNA

Pela tabela acima mostra-se que dado um exemplo de uma classe um neurônio da

camada de saída da rede neural artificial deve retornar um valor próximo de 1 para a

classe em questão e os demais neurônios da camada de saída devem valor próximo de

-1.

Durante o treinamento tivemos a seguinte resposta da rede neural sobre os exemplo

apresentados

Figura 10: Arquitetura de RNA proposta

23

Classe 2 Círculos 2 Quadrados 2 Triângulos 2 Retângulos

Círculo 0.9247 0.8903 -0.9310 -0.9092 -0.9969 -0.9946 -0.9203 -0.8711

Quadrado -0.8941 -0.8676 0.8391 0.8412 -0.9867 -0.9956 -0.8641 -0.8024

Triângulo -0.9828 -0.9567 -0.9449 -0.9649 0.9286 0.9390 -0.8812 -0.8535

Retângulo -0.9310 -0.9633 -0.9130 -0.9198 -0.9670 -0.8853 0.8642 0.8642

Tabela 2: 8 Vetores de saída gerados para cada exemplo no treinamento

A rede convergiu para em 44 épocas como pode ser vista na figura.

Figura 11: Treinamento da rede

24

4. Resultados

Foram utilizadas 80 imagens como testes para a rede neural artificial treinada com

apenas dois exemplos. Cada classe foi simulada com 20 exemplos e a rede neural

artificial foi capaz de atingir uma taxa de acerto conforme a tabela abaixo.

Classe Acerto %

Círculo 100%

Quadrado 90%

Triângulo 75%

Retângulo 50%

Tabela 3: Acertos nos testes antes da Transformada de Fourier

Os resultados mostram o problema em relação a rotação dos objetos pois com o círculo

não houve qualquer erro na classificação, o problema foi resolvido com a utilização da

algoritmo da transformada de Fourier nas colunas das imagens resultantes da operação

Log-polar. Após a utilização do algoritmo da transformada de Fourier a rede neural

artificial foi capaz de acertar em todos os exemplos dados.

25

5. Conclusão

Neste trabalho foi possível observar a utilidade das redes neurais artificiais para

reconhecimento de objetos em formas geométricas. A transformada Log-Polar

fundamental para diminuir os dados da entrada da RNA de 65.536 neurônios para 960

neurônios o que diminuiu a complexidade da arquitetura de rede. A importância deste

trabalho é que muitos objetos na vida real têm a forma das formas geométricas utilizadas

neste trabalho, podendo as redes neurais artificiais serem ótimas opções para o

reconhecimento e classificação de objetos do mundo real dado um padrão de dados

correto.

26

Referências bibliográficas

HAYKIN, Simon. Redes Neurais: Principios e prática. 2ª Edição. Porto Alegre:

Bookman, 2001.

RUSSEL, Stuart; NORVIG, Peter. Inteligência Artificial: Tradução da segunda edição.

Rio de Janeiro: Elsevier, 2004.

NETO, Hugo Vieira; FILHO, Ogê Marques. Processamento Digital de Imagens. Rio de

Janeiro: Brasport, 1999.

BOW, Sing-Tze. Pattern Recognition and Image Preprocessing. DeKalb: Dekker, 2002.

27

Apêndice A – Código Fonte do Simulador e testes

Arquivo simulador.m

%Le as 4 figuras usadas para o treinamento 2 círculos, 2 quadrados, triângulo 2,

retângulos

A1 = imread ('circulo 1.jpg','jpg');B1 = rgb2gray(A1);C1 = edge(B1,'sobel');polar1 = log_polar(C1);ff1=fft2(polar1);polar1=log(abs(ff1)); A2 = imread ('circulo 3.jpg','jpg');B2 = rgb2gray(A2);C2 = edge(B2,'sobel');polar2 = log_polar(C2);ff2=fft2(polar2);polar2=log(abs(ff2)); %quadradoA3 = imread ('quadrado.jpg','jpg');B3 = rgb2gray(A3);C3 = edge(B3,'sobel');polar3 = log_polar(C3);ff3=fft2(polar3);polar3=log(abs(ff3)); A4 = imread ('quadrado 2.jpg','jpg');B4 = rgb2gray(A4);C4 = edge(B4,'sobel');polar4 = log_polar(C4);ff4=fft2(polar4);polar4=log(abs(ff4)); % tringugloA5 = imread ('triangulo 20.jpg','jpg');B5 = rgb2gray (A5);C5 = edge(B5,'sobel');polar5 = log_polar(C5);ff5=fft2(polar5);polar5 = log(abs(ff5)); A6 = imread ('triangulo 19.jpg','jpg');B6 = rgb2gray (A6);C6 = edge (B6,'sobel');polar6 = log_polar (C6);ff6=fft2(polar6);polar6= log(abs(ff6));

28

% retanguloA7 = imread ('retangulo 13.jpg','jpg');B7 = rgb2gray (A7);C7 = edge(B7,'sobel');polar7 = log_polar(C7);ff7=fft2(polar7);polar7=log(abs(ff7)); A8 = imread ('retangulo 8.jpg','jpg');B8 = rgb2gray (A8);C8 =edge(B8, 'sobel');polar8 = log_polar(C8);ff8=fft2(polar8);polar8=log(abs(ff8)); %Transforma as matrizes em vetores para entrada na rede neuralP1=reshape(polar1,1,15*64);P2=reshape(polar2,1,15*64);P3=reshape(polar3,1,15*64);P4=reshape(polar4,1,15*64);P5 = reshape(polar5,1,15*64);P6 = reshape (polar6,1,15*64);P7 = reshape (polar7,1,15*64);P8 = reshape (polar8,1,15*64); P=[P1;P2;P3;P4;P5;P6;P7;P8]; P=P'; T=[1 -1 -1 -1; 1 -1 -1 -1; -1 1 -1 -1; -1 1 -1 -1; -1 -1 1 -1; -1 -1 1 -1; -1 -1 -1 1; -1 -1 -1 1];T=T'; net=newff(minmax(P),[20 4],{'tansig','tansig'},'traingdx');net.trainParam.epochs=1000;net.trainParam.goal=0.01; net=train(net,P,T);result=sim(net,P)TRAINGDX, Epoch 0/1000, MSE 1.39395/0.01, Gradient 1.21022/1e-006TRAINGDX, Epoch 25/1000, MSE 0.825993/0.01, Gradient 1.6698/1e-006TRAINGDX, Epoch 50/1000, MSE 0.213121/0.01, Gradient 0.651057/1e-006TRAINGDX, Epoch 75/1000, MSE 0.0121527/0.01, Gradient 0.0474644/1e-006TRAINGDX, Epoch 79/1000, MSE 0.009547/0.01, Gradient 0.0371515/1e-006TRAINGDX, Performance goal met. % OKA9 = imread ('triangulo 1.jpg','jpg');B9 = rgb2gray(A9);C9 = edge(B9,'sobel');polar9= log_polar(C9);ff9=fft2(polar9);polar9=log(abs(ff9));P9=reshape(polar9,1,15*64);P9=P9';

29

result=sim(net,P9) %teste quadrado OKA10 = imread ('quadrado 1.jpg','jpg');B10 = rgb2gray(A10);C10 = edge(B10,'sobel');polar10= log_polar(C10);ff10=fft2(polar10);polar10=log(abs(ff10));P10 = reshape(polar10,1,15*64);P10 = P10';result = sim (net, P10) %retangulo okA11 = imread ('retangulo 1.jpg');B11 = rgb2gray(A11);C11 = edge(B11,'sobel');polar11= log_polar(C11);ff11=fft2(polar11);polar11=log(abs(ff11)); P11=reshape(polar11,1,15*64);P11=P11'; result=sim(net,P11) %OKA12 = imread ('retangulo 2.jpg');B12 = rgb2gray(A12);C12 = edge(B12,'sobel');polar12= log_polar(C12);ff12=fft2(polar12);polar12=log(abs(ff12)); P12=reshape(polar12,1,15*64);P12=P12'; result=sim(net,P12) %OK A13 = imread ('triangulo 2.jpg');B13 = rgb2gray(A13);C13 = edge(B13,'sobel');polar13= log_polar(C13);ff13=fft2(polar13);polar13=log(abs(ff13));P13=reshape(polar13,1,15*64);P13=P13'; result = sim(net,P13) % OKA14 = imread ('triangulo 3.jpg');

30

B14 = rgb2gray(A14);C14 = edge(B14,'sobel');polar14= log_polar(C14);ff14=fft2(polar14);polar14=log(abs(ff14));P14=reshape(polar14,1,15*64);P14=P14';result = sim(net,P14) %OKA15 = imread ('triangulo 4.jpg','jpg');B15 = rgb2gray(A15);C15 = edge(B15,'sobel');polar15= log_polar(C15);ff15=fft2(polar15);polar15=log(abs(ff15));P15=reshape(polar15,1,15*64);P15=P15';result = sim(net,P15) %OKA16 = imread ('retangulo 3.jpg');B16 = rgb2gray(A16);C16 = edge(B16,'sobel');polar16= log_polar(C16);ff16=fft2(polar16);polar16=log(abs(ff16));P16=reshape(polar16,1,15*64);P16=P16';result = sim (net,P16) % OKA17 = imread ('circulo 2.jpg','jpg');B17 = rgb2gray (A17);C17 = edge (B17,'sobel');polar17 = log_polar (C17);ff17=fft2(polar17);polar17=log(abs(ff17));P17 = reshape(polar17,1,15*64);P17= P17';result = sim (net, P17) % OK A18 = imread ('circulo 4.jpg','jpg');B18 = rgb2gray (A18);C18 = edge (B18,'sobel');polar18 = log_polar (C18);ff18=fft2(polar18);polar18=log(abs(ff18));P18 = reshape(polar18,1,15*64);P18= P18';result = sim(net,P18) %A19 = imread ('retangulo 4.jpg','jpg');B19 = rgb2gray (A19);

31

C19 = edge (B19,'sobel');polar19 = log_polar (C19);ff19=fft2(polar19);polar19=log(abs(ff19));P19 = reshape(polar19,1,15*64);P19= P19';result = sim(net,P19) % OKA20 = imread ('retangulo 5.jpg','jpg');B20 = rgb2gray (A20);C20 = edge (B20,'sobel');polar20 = log_polar (C20);ff20=fft2(polar20);polar20=log(abs(ff20));P20 = reshape(polar20,1,15*64);P20= P20';result = sim(net,P20) % OKA20 = imread ('retangulo 6.jpg','jpg');B20 = rgb2gray (A20);C20 = edge (B20,'sobel');polar20 = log_polar (C20);ff20=fft2(polar20);polar20=log(abs(ff20));P20 = reshape(polar20,1,15*64);P20= P20';result = sim(net,P20) %OKA21 = imread ('quadrado 3.jpg','jpg');B21 = rgb2gray (A21);C21 = edge (B21,'sobel');polar21 = log_polar (C21);ff21=fft2(polar21);polar21=log(abs(ff21));P21 = reshape(polar21,1,15*64);P21= P21';result = sim(net,P21) %OKA22 = imread ('quadrado 4.jpg','jpg');B22 = rgb2gray (A22);C22 = edge (B22,'sobel');polar22 = log_polar (C22);ff22=fft2(polar22);polar22=log(abs(ff22));P22 = reshape(polar22,1,15*64);P22= P22';result = sim(net,P22) % OKA23 = imread ('triangulo 5.jpg','jpg');B23 = rgb2gray (A23);C23 = edge (B23,'sobel');polar23 = log_polar (C23);ff23=fft2(polar23);

32

polar23=log(abs(ff23));P23 = reshape(polar23,1,15*64);P23= P23';result = sim(net,P23) %OKA24 = imread ('triangulo 6.jpg','jpg');B24 = rgb2gray (A24);C24 = edge (B24,'sobel');polar24 = log_polar (C24);ff24=fft2(polar24);polar24=log(abs(ff24));P24 = reshape(polar24,1,15*64);P24= P24';result = sim(net,P24) %OKA25 = imread ('triangulo 7.jpg','jpg');B25 = rgb2gray (A25);C25 = edge (B25,'sobel');polar25 = log_polar (C25);ff25=fft2(polar25);polar25=log(abs(ff25));P25 = reshape(polar25,1,15*64);P25= P25';result = sim(net,P25) %OKA26 = imread ('triangulo 8.jpg','jpg');B26 = rgb2gray (A26);C26 = edge (B26,'sobel');polar26 = log_polar (C26);ff26=fft2(polar26);polar26=log(abs(ff26));P26 = reshape(polar26,1,15*64);P26= P26';result = sim(net,P26) %OKA27 = imread ('triangulo 9.jpg','jpg');B27 = rgb2gray (A27);C27 = edge (B27,'sobel');polar27 = log_polar (C27);ff27=fft2(polar27);polar27=log(abs(ff27));P27 = reshape(polar27,1,15*64);P27= P27';result = sim(net,P27) %OKA28 = imread ('circulo 5.jpg','jpg');B28 = rgb2gray (A28);C28 = edge (B28,'sobel');polar28 = log_polar (C28);ff28=fft2(polar28);polar28=log(abs(ff28));P28 = reshape(polar28,1,15*64);P28= P28';

33

result = sim(net,P28) %OKA29 = imread ('circulo 6.jpg','jpg');B29 = rgb2gray (A29);C29 = edge (B29,'sobel');polar29 = log_polar (C29);ff29=fft2(polar29);polar29=log(abs(ff29));P29 = reshape(polar29,1,15*64);P29= P29';result = sim(net,P29) % OKA30 = imread ('circulo 7.jpg','jpg');B30 = rgb2gray (A30);C30 = edge (B30,'sobel');polar30 = log_polar (C30);ff30=fft2(polar30);polar30=log(abs(ff30));P30 = reshape(polar30,1,15*64);P30= P30';result = sim(net,P30) %A31 = imread ('circulo 8.jpg','jpg');B31 = rgb2gray (A31);C31 = edge (B31,'sobel');polar31 = log_polar (C31);ff31=fft2(polar31);polar31=log(abs(ff31));P31 = reshape(polar31,1,15*64);P31= P31';result = sim(net,P31) A32 = imread ('circulo 9.jpg','jpg');B32 = rgb2gray (A32);C32 = edge (B32,'sobel');polar32 = log_polar (C32);ff32=fft2(polar32);polar32=log(abs(ff32));P32 = reshape(polar32,1,15*64);P32= P32';result = sim(net,P32) A33 = imread ('circulo 10.jpg','jpg');B33 = rgb2gray (A33);C33 = edge (B33,'sobel');polar33 = log_polar (C33);ff33=fft2(polar33);polar33=log(abs(ff33));P33 = reshape(polar33,1,15*64);P33= P33';result = sim(net,P33) %OKA34 = imread ('circulo 11.jpg','jpg');B34 = rgb2gray (A34);C34 = edge (B34,'sobel');

34

polar34 = log_polar (C34);ff34=fft2(polar34);polar34=log(abs(ff34));P34 = reshape(polar34,1,15*64);P34= P34';result = sim(net,P34) %OKA35 = imread ('circulo 12.jpg','jpg');B35 = rgb2gray (A35);C35 = edge (B35,'sobel');polar35 = log_polar (C35);ff35=fft2(polar35);polar35=log(abs(ff35));P35 = reshape(polar35,1,15*64);P35= P35';result = sim(net,P35) %OKA36 = imread ('circulo 13.jpg','jpg');B36 = rgb2gray (A36);C36 = edge (B36,'sobel');polar36 = log_polar (C36);ff36=fft2(polar36);polar36=log(abs(ff36));P36 = reshape(polar36,1,15*64);P36= P36';result = sim(net,P36) %OKA37 = imread ('circulo 14.jpg','jpg');B37 = rgb2gray (A37);C37 = edge (B37,'sobel');polar37 = log_polar (C37);ff37=fft2(polar37);polar37=log(abs(ff37));P37 = reshape(polar37,1,15*64);P37= P37';result = sim(net,P37) %OKA38 = imread ('circulo 15.jpg','jpg');B38 = rgb2gray (A38);C38 = edge (B38,'sobel');polar38 = log_polar (C38);ff38=fft2(polar38);polar38=log(abs(ff38));P38 = reshape(polar38,1,15*64);P38= P38';result = sim(net,P38) %OKA39 = imread ('circulo 16.jpg','jpg');B39 = rgb2gray (A39);C39 = edge (B39,'sobel');polar39 = log_polar (C39);ff39=fft2(polar39);polar39=log(abs(ff39));P39 = reshape(polar39,1,15*64);

35

P39= P39';result = sim(net,P39) %OKA40 = imread ('circulo 17','jpg');B40 = rgb2gray (A40);C40 = edge (B40,'sobel');polar40 = log_polar (C40);ff40=fft2(polar40);polar40=log(abs(ff40));P40 = reshape(polar40,1,15*64);P40= P40';result = sim(net,P40) %A41 = imread ('quadrado 5.jpg','jpg');B41 = rgb2gray (A41);C41 = edge (B41,'sobel');polar41 = log_polar (C41);ff41=fft2(polar41);polar41=log(abs(ff41));P41 = reshape(polar41,1,15*64);P41= P41';result = sim(net,P41) %OKA42 = imread ('quadrado 6.jpg','jpg');B42 = rgb2gray (A42);C42 = edge (B42,'sobel');polar42 = log_polar (C42);ff42=fft2(polar42);polar42=log(abs(ff42));P42 = reshape(polar42,1,15*64);P42= P42';result = sim(net,P42) %OKA43 = imread ('quadrado 7.jpg','jpg');B43 = rgb2gray (A43);C43 = edge (B43,'sobel');polar43 = log_polar (C43);ff43=fft2(polar43);polar43=log(abs(ff43));P43 = reshape(polar43,1,15*64);P43= P43';result = sim(net,P43) %OKA44 = imread ('quadrado 8.jpg','jpg');B44 = rgb2gray (A44);C44 = edge (B44,'sobel');polar44 = log_polar (C44);ff44=fft2(polar44);polar44=log(abs(ff44));P44 = reshape(polar44,1,15*64);P44= P44';result = sim(net,P44)

36

%OKA45 = imread ('quadrado 9.jpg','jpg');B45 = rgb2gray (A45);C45 = edge (B45,'sobel');polar45 = log_polar (C45);ff45=fft2(polar45);polar45=log(abs(ff45));P45 = reshape(polar45,1,15*64);P45= P45';result = sim(net,P45) %OKA46 = imread ('quadrado 10.jpg','jpg');B46 = rgb2gray (A46);C46 = edge (B46,'sobel');polar46 = log_polar (C46);ff46=fft2(polar46);polar46=log(abs(ff46));P46 = reshape(polar46,1,15*64);P46= P46';result = sim(net,P46) %OKA47 = imread ('quadrado 11.jpg','jpg');B47 = rgb2gray (A47);C47 = edge (B47,'sobel');polar47 = log_polar (C47);ff47=fft2(polar47);polar47=log(abs(ff47));P47 = reshape(polar47,1,15*64);P47= P47';result = sim(net,P47) %OKA48 = imread ('quadrado 12.jpg','jpg');B48 = rgb2gray (A48);C48 = edge (B48,'sobel');polar48 = log_polar (C48);ff48=fft2(polar48);polar48=log(abs(ff48));P48 = reshape(polar48,1,15*64);P48= P48';result = sim(net,P48) %OKA49 = imread ('quadrado 13.jpg','jpg');B49 = rgb2gray (A49);C49 = edge (B49,'sobel');polar49= log_polar (C49);ff49=fft2(polar49);polar49=log(abs(ff49));P49 = reshape(polar49,1,15*64);P49= P49';result = sim(net,P49) %OKA50 = imread ('quadrado 14.jpg','jpg');B50 = rgb2gray (A50);

37

C50 = edge (B50,'sobel');polar50= log_polar (C50);ff50=fft2(polar50);polar50 =log(abs(ff50));P50 = reshape(polar50,1,15*64);P50= P50';result = sim(net,P50) %OK A51 = imread ('retangulo 9.jpg','jpg');B51 = rgb2gray (A51);C51 = edge (B51,'sobel');polar51= log_polar (C51);ff51=fft2(polar51);polar51=log(abs(ff51));P51 = reshape(polar51,1,15*64);P51= P51';result = sim(net,P51) A52 = imread ('retangulo 10.jpg','jpg');B52 = rgb2gray (A52);C52 = edge (B52,'sobel');polar52= log_polar (C52);ff52=fft2(polar52);polar52=log(abs(ff52));P52 = reshape(polar52,1,15*64);P52= P52';result = sim(net,P52) % OKA53 = imread ('retangulo 11.jpg','jpg');B53 = rgb2gray (A53);C53 = edge (B53,'sobel');polar53= log_polar (C53);ff53=fft2(polar53);polar53=log(abs(ff53));P53 = reshape(polar53,1,15*64);P53= P53';result = sim(net,P53)% okA54 = imread ('retangulo 12.jpg','jpg');B54 = rgb2gray (A54);C54 = edge (B54,'sobel');polar54= log_polar (C54);ff54=fft2(polar54);polar54=log(abs(ff54));P54 = reshape(polar54,1,15*64);P54= P54';result = sim(net,P54) % ok A55 = imread ('retangulo 14.jpg','jpg');B55 = rgb2gray (A55);C55 = edge (B55,'sobel');polar55= log_polar (C55);ff55=fft2(polar55);polar55=log(abs(ff55));

38

P55 = reshape(polar55,1,15*64);P55= P55';result = sim(net,P55) % okA56 = imread ('retangulo 12.jpg','jpg');B56 = rgb2gray (A56);C56 = edge (B56,'sobel');polar56= log_polar (C56);ff56=fft2(polar56);polar56=log(abs(ff56)); P56 = reshape(polar56,1,15*64);P56= P56';result = sim(net,P56)%okA57 = imread ('retangulo 14.jpg','jpg');B57 = rgb2gray (A57);C57 = edge (B57,'sobel');polar57= log_polar (C57);ff57=fft2(polar57);polar57=log(abs(ff57));P57 = reshape(polar57,1,15*64);P57= P57';result = sim(net,P57) %okA58 = imread ('retangulo 15.jpg','jpg');B58 = rgb2gray (A58);C58 = edge (B58,'sobel');polar58= log_polar (C58);ff58=fft2(polar58);polar58=log(abs(ff58));P58 = reshape(polar58,1,15*64);P58= P58';result = sim(net,P58) % okA59 = imread ('retangulo 16.jpg','jpg');B59 = rgb2gray (A59);C59 = edge (B59,'sobel');polar59= log_polar (C59);ff59=fft2(polar59);polar59=log(abs(ff59));P59 = reshape(polar59,1,15*64);P59= P59';result = sim(net,P59) % okA60 = imread ('retangulo 17.jpg','jpg');B60 = rgb2gray (A60);C60 = edge (B60,'sobel');polar60= log_polar (C60);ff60=fft2(polar60);polar60=log(abs(ff60)); P60 = reshape(polar60,1,15*64);

39

P60= P60';result = sim(net,P60) %OKA61 = imread ('retangulo 18.jpg','jpg');B61 = rgb2gray (A61);C61 = edge (B61,'sobel');polar61= log_polar (C61);ff61=fft2(polar61);polar61=log(abs(ff61));P61 = reshape(polar61,1,15*64);P61= P61';result = sim(net,P61) %OK A62 = imread ('retangulo 19.jpg','jpg');B62 = rgb2gray (A62);C62 = edge (B62,'sobel');polar62= log_polar (C62);ff62=fft2(polar62);polar62=log(abs(ff62));P62 = reshape(polar62,1,15*64);P62= P62';result = sim(net,P62) % OKA63 = imread ('retangulo 20.jpg','jpg');B63 = rgb2gray (A63);C63 = edge (B63,'sobel');polar63= log_polar (C63);ff63=fft2(polar63);polar63=log(abs(ff63));P63 = reshape(polar63,1,15*64);P63= P63';result = sim(net,P63) %OKA64 = imread ('retangulo 21.jpg','jpg');B64 = rgb2gray (A64);C64 = edge (B64,'sobel');polar64= log_polar (C64);ff64=fft2(polar64);polar64=log(abs(ff64));P64 = reshape(polar64,1,15*64);P64= P64';result = sim(net,P64) %OKA65 = imread ('retangulo 22.jpg','jpg');B65 = rgb2gray (A65);C65 = edge (B65,'sobel');polar65= log_polar (C65);ff65=fft2(polar65);polar65=log(abs(ff65));P65 = reshape(polar65,1,15*64);P65= P65';result = sim(net,P65)

40

%OKA66 = imread ('quadrado 15.jpg','jpg');B66 = rgb2gray (A66);C66 = edge (B66,'sobel');polar66= log_polar (C66);ff66=fft2(polar66);polar66=log(abs(ff66));P66 = reshape(polar66,1,15*64);P66= P66';result = sim(net,P66) %OKA67 = imread ('quadrado 16.jpg','jpg');B67 = rgb2gray (A67);C67 = edge (B67,'sobel');polar67= log_polar (C67);ff67=fft2(polar67);polar67=log(abs(ff67));P67 = reshape(polar67,1,15*64);P67= P67';result = sim(net,P67) %OKA68 = imread ('quadrado 17.jpg','jpg');B68 = rgb2gray (A68);C68 = edge (B68,'sobel');polar68= log_polar (C68);ff68=fft2(polar68);polar68=log(abs(ff68));P68 = reshape(polar68,1,15*64);P68= P68';result = sim(net,P68) %OKA69 = imread ('quadrado 18.jpg','jpg');B69 = rgb2gray (A69);C69 = edge (B69,'sobel');polar69= log_polar (C69);ff69=fft2(polar69);polar69=log(abs(ff69));P69 = reshape(polar69,1,15*64);P69= P69';result = sim(net,P69) %OKA70 = imread ('quadrado 19.jpg','jpg');B70 = rgb2gray (A70);C70 = edge (B70,'sobel');polar70 = log_polar (C70);ff70=fft2(polar70);polar70=log(abs(ff70));P70 = reshape(polar70,1,15*64);P70= P70';result = sim(net,P70) %OK

41

A71 = imread ('quadrado 20.jpg','jpg');B71 = rgb2gray (A71);C71 = edge (B71,'sobel');polar71 = log_polar (C71);ff71=fft2(polar71);polar71=log(abs(ff71));P71 = reshape(polar71,1,15*64);P71= P71';result = sim(net,P71) %OKA72 = imread ('triangulo 10.jpg','jpg');B72 = rgb2gray (A72);C72 = edge (B72,'sobel');polar72 = log_polar (C72);ff72=fft2(polar72);polar72=log(abs(ff72));P72 = reshape(polar72,1,15*64);P72= P72';result = sim(net,P72) %OKA73 = imread ('triangulo 11.jpg','jpg');B73 = rgb2gray (A73);C73 = edge (B73,'sobel');polar73 = log_polar (C73);ff73=fft2(polar73);polar73=log(abs(ff73));P73 = reshape(polar73,1,15*64);P73= P73';result = sim(net,P73) %OKA74 = imread ('triangulo 12.jpg','jpg');B74 = rgb2gray (A74);C74 = edge (B74,'sobel');polar74 = log_polar (C74);ff74=fft2(polar74);polar74=log(abs(ff74));P74 = reshape(polar74,1,15*64);P74= P74';result = sim(net,P74) %OKA75 = imread ('triangulo 13.jpg','jpg');B75 = rgb2gray (A75);C75 = edge (B75,'sobel');polar75 = log_polar (C75);ff75=fft2(polar75);polar75=log(abs(ff75));P75 = reshape(polar75,1,15*64);P75= P75';result = sim(net,P75) %OKA76 = imread ('triangulo 14.jpg','jpg');B76 = rgb2gray (A76);C76 = edge (B76,'sobel');polar76 = log_polar (C76);

42

ff76=fft2(polar76);polar76=log(abs(ff76));P76 = reshape(polar76,1,15*64);P76= P76';result = sim(net,P76) %todoA77 = imread ('triangulo 15.jpg','jpg');B77 = rgb2gray (A77);C77 = edge (B77,'sobel');polar77 = log_polar (C77);ff77=fft2(polar77);polar77=log(abs(ff77));P77 = reshape(polar77,1,15*64);P77= P77';result = sim(net,P77) %OKA78 = imread ('triangulo 16.jpg','jpg');B78 = rgb2gray (A78);C78 = edge (B78,'sobel');polar78 = log_polar (C78);ff78=fft2(polar78);polar78=log(abs(ff78));P78 = reshape(polar78,1,15*64);P78= P78';result = sim(net,P78) %OKA79 = imread ('triangulo 17.jpg','jpg');B79 = rgb2gray (A79);C79 = edge (B79,'sobel');polar79 = log_polar (C79);ff79=fft2(polar79);polar79=log(abs(ff79));P79 = reshape(polar79,1,15*64);P79= P79';result = sim(net,P79) %OKA80 = imread ('triangulo 18.jpg','jpg');B80 = rgb2gray (A80);C80 = edge (B80,'sobel');polar80 = log_polar (C80);ff80=fft2(polar80);polar80=log(abs(ff80));P80 = reshape(polar80,1,15*64);P80= P80';result = sim(net,P80) %OKA81 = imread ('triangulo 19.jpg','jpg');B81 = rgb2gray (A81);C81 = edge (B81,'sobel');polar81 = log_polar (C81);ff81=fft2(polar81);polar81=log(abs(ff81));P81 = reshape(polar81,1,15*64);P81= P81';

43

result = sim(net,P81) %OKA82 = imread ('triangulo 21.jpg','jpg');B82 = rgb2gray (A82);C82 = edge (B82,'sobel');polar82 = log_polar (C82);ff82=fft2(polar82);polar82=log(abs(ff82));P82 = reshape(polar82,1,15*64);P82= P82';result = sim(net,P82) %OKA83 = imread ('triangulo 22.jpg','jpg');B83 = rgb2gray (A83);C83 = edge (B83,'sobel');polar83 = log_polar (C83);ff83=fft2(polar83);polar83=log(abs(ff83));P83 = reshape(polar83,1,15*64);P83= P83';result = sim(net,P83) %OKA84 = imread ('circulo 18.jpg','jpg');B84 = rgb2gray (A84);C84 = edge (B84,'sobel');polar84 = log_polar (C84);ff84=fft2(polar84);polar84=log(abs(ff84));P84 = reshape(polar84,1,15*64);P84= P84';result = sim(net,P84) %OKA85 = imread ('circulo 19.jpg','jpg');B85 = rgb2gray (A85);C85 = edge (B85,'sobel');polar85 = log_polar (C85);ff85=fft2(polar85);polar85=log(abs(ff85));P85 = reshape(polar85,1,15*64);P85= P85';result = sim(net,P85) %OKA86 = imread ('circulo 20.jpg','jpg');B86 = rgb2gray (A86);C86 = edge (B86,'sobel');polar86 = log_polar (C86);ff86=fft2(polar86);polar86=log(abs(ff86));P86 = reshape(polar86,1,15*64);P86= P86';result = sim(net,P86)

44

%OKA87 = imread ('circulo 21.jpg','jpg');B87 = rgb2gray (A87);C87 = edge (B87,'sobel');polar87 = log_polar (C87);ff87=fft2(polar87);polar87=log(abs(ff87));P87 = reshape(polar87,1,15*64);P87= P87';result = sim(net,P87) %OKA88 = imread ('circulo 22.jpg','jpg');B88 = rgb2gray (A88);C88 = edge (B88,'sobel');polar88 = log_polar (C88);ff88=fft2(polar88);polar88=log(abs(ff88));P88 = reshape(polar88,1,15*64);P88= P88';result = sim(net,P88) cd f:cd tccdiraddpathedit 'comandos matlab tcc.rtf'% tringugloA5 = imread ('t5.jpg','jpg');B5 = rgb2gray (A5);C5 = edge(B5,'sobel');polar5 = log_polar(C5);figureimshow (polar5);F=fft2(polar5,256,256);F2=log(abs(F);F2=log(abs(F));imshow(F2,[-1 5]); colormap(jet); colorbarfigureimshow(A5);imshow(B5);figureimshow(B5);imshow(C5);figureimshow(F2,[-1 5]); colormap(jet); colorbarfigureimshow(F,[-1 5]); colormap(jet); colorbarF=fft2(polar5);F2=log(abs(F));imshow(F2,[-1 5]); colormap(jet); colorbarclose allimshow(F2,[-1 5]); colormap(jet); colorbarimshow(F2,[-1 5]);A3 = imread ('quadrado.jpg','jpg');B3 = rgb2gray(A3);C3 = edge(B3,'sobel');polar3 = log_polar(C3);figure

45

imshow(polar3);Q=fft2(polar5);Q=fft2(polar3);Q2=log(abs(Q));figureimshow(Q2);A4 = imread ('quadrado2.jpg','jpg');B4 = rgb2gray(A4);C4 = edge(B4,'sobel');polar4 = log_polar(C4);figureimshow(polar4);figureimshow(C4);figureimshow(C3);QB=fft2(polar4);QB2=log(abs(QB));figureimshow(QB2);

46

Apêndice B – Artigo formato SBC

Reconhecimento de objetos geométricos em imagens

Flávio da Silveira Pepino1

1Instituto de Informática e Estatística– Universidade Federal de Santa Catarina (UFSC)Caixa Postal 476 – 88040-900 – Florianópolis – SC – Brazil

[email protected]. This work has built a computer simulation of vision of the Matlab environment, the simulator uses an artificial neural network for classification of geometric shapes (circle, square, triangle or rectangle) in an image. The task of recognition of images was divided into two stages: pre-processing and classification using a neural network. On the stage of pre-processing, the images were processed by an algorithm for detecting edges, using the algorithm of Sobel, which eliminates the background against which the image is, leaving only the outline of the object being recognized. Algorithm was used log-polar have been made to make the system invariant the effects of translation, rotation and scale. The resultant vector was used as inputs to the neural network. In the classification used a neural network was created in Matlab environment. Two samples were used to train the network, and 20 (twenty) for tests for each class.Resumo. Este trabalho construiu uma simulador de visão de computador no ambiente Matlab, o simulador utiliza uma rede neural artificial para classificação de formas geométricas (círculo,quadrado, triângulo ou retângulo) presentes em uma imagem. A tarefa de reconhecimento de imagens foi dividida em duas etapas: pré-processamento e classificação através de uma rede neural. Na etapa de pré-processamento, as imagens foram processadas por um algoritmo de detecção de bordas, utilizando o algoritmo de Sobel, que elimina o fundo contra o qual a imagem se encontra, deixando apenas o contorno do objeto a ser reconhecido. Foi utilizado o algoritmo log-polar foram tornar para tornar o sistema invariante a efeitos de translação, rotação e escala. O vetor resultante foi usado como entradas para a rede neural. Na classificação foi utilizada uma rede neural criada no ambiente Matlab. Duas amostras foram utilizadas para treinar a rede, e 20 (vinte) para testes para cada classe.

1. IntroduçãoVisão computacional é um “sistema computadorizado capaz de adquirir, processar e interpretar imagens correspondentes a cenas reais” (Filho, 1999, pg.13).Redes neurais artificiais são estruturas de dados inspiradas na estrutura e funcionamento de uma coleção de neurônios. O trabalho das redes neurais artificiais, informalmente também chamadas de “redes neurais”, é motivado pela forma diferente de como o computador digital funciona. O cérebro é um sistema de processamento de informação “altamente complexo, não-linear e paralelo” (Haykin, 2001, p. 27). Um neurônio é uma

célula nervosa cuja função é coletar, processar e disseminar sinais elétricos. De uma forma simplificada, um neurônio transmite um sinal para outro neurônio da rede quando uma combinação linear de suas entradas ultrapassa um limiar. A visão humana é uma tarefa de processamento de informação cuja função é fornecer uma representação do ambiente para que possamos interagir com ele. O cérebro realiza a todo o momento “tarefas de reconhecimento perceptivo (rostos, cenas) em aproximadamente 100-200 ms” (Haykin, 2001, p. 27), enquanto problemas de muito menor complexidade acabam por necessitar um esforço computacional elevado em um computador digital, muito além de milisegundos.De uma forma geral, uma rede neural é uma máquina que é projetada para modelar a maneira como nosso cérebro realiza uma tarefa em particular (função de interesse), e ela é implementada e executada em um computador digital. O interesse deste trabalho é em uma classe de redes neurais que realizam a computação útil através de um processo de aprendizagem. O procedimento utilizado para realizar o processo de aprendizagem é chamado de algoritmo de aprendizagem.Redes neurais têm sido utilizadas largamente em aplicações de reconhecimento de imagens devido ao seu poder de aprendizado.

2. Fundamentação TeóricaUm sinal analógico de vídeo, obtido no caso por uma câmera, deve ser discretizado em relação ao seu espaço e sua amplitude para se tornar apto ao processamento digital.O modelo para lidar com imagens assume uma matriz MxN de intensidade de luz no plano de uma imagem que podemos chamar de I(x,y). O espaço está relacionado à resolução da imagem.E a amplitude da imagem está relacionada com a quantidade de tons de cinzas.Cada posição na matriz, ou seja, cada pixel possui um valor relacionado ao tom de cinza, que pode ser um valor inteiro na faixa 0 a 2n-1 .Uma rede neural é um processador maciçamente paralelamente distribuído constituído de unidades de processamento simples, que têm a propensão natural para armazenar conhecimento experimental e torná-lo disponível para uso, os aspectos relevantes das RNAs relevantes para este trabalho são o processo de aprendizagem e forças de conexão entre os neurônios (chamados de pesos sinápticos), que são utilizados para armazenar o conhecimento adquirido. A alteração dos pesos sinápticos é a maneira usual para projetar redes neurais.O poder das redes neurais advém de sua estrutura paralela e sua capacidade de generalização. Generalização é a capacidade da RNA produzir saídas adequadas para entradas que não foram dadas durante o treinamento (aprendizagem). Estas duas habilidades de processamento da informação dão às RNAs possibilidade de resolver problemas complexos que são difíceis por outras abordagens. Entre as propriedades das redes neurais artificiais apresentadas por Haykin (2001) as seguintes são interessantes para o trabalho:mapeamento de entrada-saída, mais conhecido como aprendizado supervisionado, e a adaptabilidade, ou seja, a capacidade da RNA de alterar seu valores de pesos sinápticos

3. MetodologiaPara obter a visão um computador precisa transformar a imagem para que ela se torne apta para seu reconhecimento. É necessário também extrair características que possam ser invariantes do objeto independendo da disposição do objeto na imagem. Foi

utilizado o ambiente de computação Matlab nos experimentos, incluindo o Toolbox de Redes Neurais e Processamento de Imagens. 3.1 Aquisição das imagensO simulador de visão computacional busca reconhecer os objetos geométricos de diferentes formas através da rede neural artificial em qualquer posição da imagem e diferentes escalas e rotações. Foram escolhidas 4 classes para buscar essa função de interesse: quadrado, circulo , triangulo e retângulo.

3.2 Pré-processamento da imagemEleitos então objetos, foi necessário estudar suas características que possam ser usadas para seu reconhecimento. Primeiro, é necessário operação de baixo nível para detectar arestas no plano de imagem. Arestas são linhas que no plano da imagem, ao longo dos quais existe uma mudança significativa no brilho da imagem. A detecção das arestas serve para diminuir a amplitude do tom de cinza de cada pixel da matriz. Outra utilidade das arestas é que dentro de faixa adequada de contrastes, as arestas serão detectadas aproximadamente nas mesmas posições, independente da configuração precisa da iluminação. O pré-processamento da imagem foi indispensável pois reteve as características identificadoras do objeto e contribui para diminui a dimensões da entrada da RNA. Foi utilizado o método de detecção de arestas (bordas) de Sobel pois era necessário obter apenas a forma do objeto a ser identificado. As imagens no seus tamanhos originais são de 256 pixels X 256 pixels. O sistema de visão computacional deve classificar o objeto corretamente independe de seu tamanho, rotação e posição na imagem. Portanto foi utilizada a tranformada Log-polar que torna o sistema invariante tamanho, rotação e escala. A matriz resultante da operação Log-Polar de cada imagem tinha dimensões de 64 linhas por 15 colunas.

3.3 ClassificaçãoDadas as condições, foi criada um rede neural artificial do tipo feed-foward com 960 neurônios na camada de entrada, este número equivale ao número de pixels resultante da operação de tranformação Log-Polar. A função de ativação das camadas foi definida com Tangente Hiperbólica e o algoritmo de treinamento foi Gradient descent backpropagation com momentum e taxa adaptativa. Na camada de saída foram determinadas 4 neurônios .Foi determinada que a rede executaria os exemplos através da rede, ao ajustar os pesos de cada exemplo, o ciclo, por até 1000 ciclos ou atingisse o critério de parada de 0.001.Foram utilizadas dois exemplos de cada classe, para o treinamento da rede, e 20 para os testes. As amostras para treinamento da RNA foram escolhidas ao acaso, tomadas sem qualquer conhecimento sobre os dados da amostra. Foi determinada a saída alvo da RNA de acordo com a seguinte convenção:

Classe Vetor Circulo [1 -1 -1 -1]

Quadrado [-1 1 -1 -1]

Triângulo [-1 -1 1 -1]

Retângulo [-1 -1 -1 1]

Pela tabela acima mostra-se que dado um exemplo de uma classe um neurônio da camada de saída da rede neural artificial deve retornar um valor próximo de 1 para a classe em questão e os demais neurônios da camada de saída devem valor próximo de -1. Durante o treinamento tivemos a seguinte resposta da rede neural sobre os exemplo apresentados

Classe 2 Círculos 2 Quadrados 2 Triângulos 2 Retângulos

Círculo 0.9247 0.8903 -0.9310 -0.9092 -0.9969 -0.9946 -0.9203 -0.8711

Quadrado -0.8941 -0.8676 0.8391 0.8412 -0.9867 -0.9956 -0.8641 -0.8024

Triângulo -0.9828 -0.9567 -0.9449 -0.9649 0.9286 0.9390 -0.8812 -0.8535

Retângulo -0.9310 -0.9633 -0.9130 -0.9198 -0.9670 -0.8853 0.8642 0.8642

4. ResultadoForam utilizadas 80 imagens como testes para a rede neural artificial treinada com apenas dois exemplos. Cada classe foi simulada com 20 exemplos e a rede neural artificial foi capaz de atingir uma taxa de acerto conforme a tabela abaixo.

Classe Acerto %Círculo 100%

Quadrado 90%

Triângulo 75%

Retângulo 50%

Tabela 3: Acertos nos testes antes da Transformada de Fourier

Os resultados mostram o problema em relação a rotação dos objetos pois com o círculo não houve qualquer erro na classificação, o problema foi resolvido com a utilização da algoritmo da transformada de Fourier nas colunas das imagens resultantes da operação Log-polar. Após a utilização do algoritmo da transformada de Fourier a rede neural artificial foi capaz de acertar em todos os exemplos dados.

5. ConclusãoNeste trabalho foi possível observar a utilidade das redes neurais artificiais para reconhecimento de objetos em formas geométricas. A transformada Log-Polar fundamental para diminuir os dados da entrada da RNA de 65.536 neurônios para 960 neurônios o que diminuiu a complexidade da arquitetura de rede. A importância deste trabalho é que muitos objetos na vida real têm a forma das formas geométricas utilizadas neste trabalho, podendo as redes neurais artificiais serem ótimas opções para o reconhecimento e classificação de objetos do mundo real dado um padrão de dados correto.

Referências

Haykin, Simon (2001) “Redes Neurais: Principios e prática.”, 2ª Edição. Porto Alegre: Bookman, 2001.

Russel, Stuart; Norvig, Peter.(2004) “Inteligência Artificial: Tradução da segunda edição”, Rio de Janeiro: Elsevier,

Neto, Hugo Vieira; Filho, Ogê Marques.(1999) “Processamento Digital de Imagens”, Rio de Janeiro: Brasport, 1999.

Bow, Sing-Tze. (2002) ”Pattern Recognition and Image Preprocessing.”, DeKalb: Dekker,