Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas...

20
Uma interface para classificação de dígitos Júlio César Graves Bacharel em Ciências e Tecnologia Universidade Federal do Estado de São Paulo São José dos Campos, São Paulo 30332–0250 Email: [email protected] Resumo—Este trabalho mostra o processo completo de classificação de imagens por meio da construção de uma interface de auxilio ao usuário. O problema a ser resolvido é a classificação de dígitos. No primeiro momento será desenvolvida uma interface para visualização dos dados brutos e pré-processamento. Na sequência serão comparadas diferentes técnicas e seus resultados serão discutidos. Por fim, uma outra interface permitirá que o usuário escreva seu próprio dígito na janela, classifique-o com a metodologia atual e reforce o aprendizado. I. I NTRODUÇÃO O problema de classificação e identificação de dígitos aparece repetidas vezes na literatura, desde os adventos da digitalização de imagens. Inúmeras bases estão dispo- níveis na internet para treinamentos e testes de estraté- gias. Uma base bastante populada, no entanto privada, é a NIST, com dígitos escritos à mão por 3.600 pessoas, totalizando 810.000 caracteres obtidos por escaneamento binário de imagens a 300dpi [3]. Derivada desta base, a MNIST [1], base com 60.000 exemplos para treinamento e 10.000 exemplos para teste é livre para uso acadêmico [1]. Historicamente, diversos pesquisadores utilizam-se desta base para a validação de seus algoritmos. Um breve sumário disto é descrito em [1]. Dentre as técnicas mais aplicadas à esta base destacam-se as: Neural Network, Pairwise Linear Classifier, K-Nearest-Neighbors e suas va- riações, Boosted Stumps, Principal Component Analyses, Radial Bases Function, Support Vector Machine, Convolu- tional Net e outras. Um terceiro repositório [2], com 5620 instâncias doado em 1998, pode ser usado livremente para teste de algorítimos de qualquer natureza. Esta conta com caracteres de 30 diferentes pessoas no grupo de treino e outras 13 pessoas para o grupo de testes, descritos em matrizes de 1024 posições inteiras que variam discreta- mente de 0 a 1 quanto a intensidade. Trabalhos em Linear Dimensionality Reduction, Maximal Margin Classification, Nearest Neighbor Classification, Oblique Decision Tree and Linear Programming citam esse repositório. II. OBJETIVOS Construir um identificador e classificador de dígitos em tempo real com interface com o usuário. Nesta o usuário poderá desenhar o seu próprio dígito e verificar o comportamento do classificador proposto. Tal processo contará com leitura de bases de dados, pré-processamento e filtragem, descritores, método de aprendizado e final- mente uma interface iterativa. III. METODOLOGIA A metodologia permeia todos os itens abaixo descritos e está representada no diagrama de blocos presente na figura 1. Escolher a base adequada; Criar rotina para abertura e visualização dos da- dos; Criar interface que possibilite visualizar os dados e manipulá-los com filtros; Pré-Processar os caracteres; Determinar descritores de imagem; Escolher a metodologia de aprendizado; Treinar o algoritmo com base nos descritores cal- culados; Validar o modelo encontrado; Construir interface para entrada de caracteres e verificação em tempo real do método; Esta compreende a definição de 4 etapas: Etapa 1: Leitura, pre-processamento, filtragem e visualização dos dados; Etapa 2: Levantamento e implementação dos des- critores; Etapa 3: Determinação do algoritmo a ser trei- nado; Etapa 4: Interface para classificação em tempo real; A. Etapa 1 A base escolhida para a primeira etapa do projeto é a disponibilizada em [2]. Esta conta com 1934 dígitos separados para treinamento e 946 para verificações e testes. A base está estruturada em um arquivo texto com os dígitos escritos por sequências de zeros e uns, dispostos sequencialmente em 32 colunas por 32 linha com uma linha adicional identificando o caractere correto da imagem, como visualizado na lista 1. Para a abertura da base fora criada uma interface (todo código disponível na lista 3), que permite visualização de qualquer algarismo da base de dados e aplicação de filtros.

Transcript of Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas...

Page 1: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

Uma interface para classificação de dígitos

Júlio César GravesBacharel em Ciências e Tecnologia

Universidade Federal do Estado de São PauloSão José dos Campos, São Paulo 30332–0250

Email: [email protected]

Resumo—Este trabalho mostra o processo completo declassificação de imagens por meio da construção de umainterface de auxilio ao usuário. O problema a ser resolvidoé a classificação de dígitos. No primeiro momento serádesenvolvida uma interface para visualização dos dadosbrutos e pré-processamento. Na sequência serão comparadasdiferentes técnicas e seus resultados serão discutidos. Porfim, uma outra interface permitirá que o usuário escrevaseu próprio dígito na janela, classifique-o com a metodologiaatual e reforce o aprendizado.

I. INTRODUÇÃO

O problema de classificação e identificação de dígitosaparece repetidas vezes na literatura, desde os adventosda digitalização de imagens. Inúmeras bases estão dispo-níveis na internet para treinamentos e testes de estraté-gias. Uma base bastante populada, no entanto privada,é a NIST, com dígitos escritos à mão por 3.600 pessoas,totalizando 810.000 caracteres obtidos por escaneamentobinário de imagens a 300dpi [3]. Derivada desta base, aMNIST [1], base com 60.000 exemplos para treinamentoe 10.000 exemplos para teste é livre para uso acadêmico[1]. Historicamente, diversos pesquisadores utilizam-sedesta base para a validação de seus algoritmos. Um brevesumário disto é descrito em [1]. Dentre as técnicas maisaplicadas à esta base destacam-se as: Neural Network,Pairwise Linear Classifier, K-Nearest-Neighbors e suas va-riações, Boosted Stumps, Principal Component Analyses,Radial Bases Function, Support Vector Machine, Convolu-tional Net e outras. Um terceiro repositório [2], com 5620instâncias doado em 1998, pode ser usado livremente parateste de algorítimos de qualquer natureza. Esta conta comcaracteres de 30 diferentes pessoas no grupo de treino eoutras 13 pessoas para o grupo de testes, descritos emmatrizes de 1024 posições inteiras que variam discreta-mente de 0 a 1 quanto a intensidade. Trabalhos em LinearDimensionality Reduction, Maximal Margin Classification,Nearest Neighbor Classification, Oblique Decision Treeand Linear Programming citam esse repositório.

II. OBJETIVOS

Construir um identificador e classificador de dígitosem tempo real com interface com o usuário. Nesta ousuário poderá desenhar o seu próprio dígito e verificaro comportamento do classificador proposto. Tal processocontará com leitura de bases de dados, pré-processamentoe filtragem, descritores, método de aprendizado e final-mente uma interface iterativa.

III. METODOLOGIA

A metodologia permeia todos os itens abaixo descritose está representada no diagrama de blocos presente nafigura 1.

• Escolher a base adequada;

• Criar rotina para abertura e visualização dos da-dos;

• Criar interface que possibilite visualizar os dadose manipulá-los com filtros;

• Pré-Processar os caracteres;

• Determinar descritores de imagem;

• Escolher a metodologia de aprendizado;

• Treinar o algoritmo com base nos descritores cal-culados;

• Validar o modelo encontrado;

• Construir interface para entrada de caracteres everificação em tempo real do método;

Esta compreende a definição de 4 etapas:

• Etapa 1: Leitura, pre-processamento, filtragem evisualização dos dados;

• Etapa 2: Levantamento e implementação dos des-critores;

• Etapa 3: Determinação do algoritmo a ser trei-nado;

• Etapa 4: Interface para classificação em temporeal;

A. Etapa 1

A base escolhida para a primeira etapa do projeto éa disponibilizada em [2]. Esta conta com 1934 dígitosseparados para treinamento e 946 para verificações etestes. A base está estruturada em um arquivo textocom os dígitos escritos por sequências de zeros e uns,dispostos sequencialmente em 32 colunas por 32 linhacom uma linha adicional identificando o caractere corretoda imagem, como visualizado na lista 1.

Para a abertura da base fora criada uma interface (todocódigo disponível na lista 3), que permite visualização dequalquer algarismo da base de dados e aplicação de filtros.

Page 2: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

Figura 1: Diagrama de planejamento

Para reduzir a quantidade de elementos da imagemaplicou-se o processo de down-sampling combinado comum filtro de média. Treinar qualquer técnica com base naamostragem original (menor elemento possível), ocorreráno maior risco de tornar-se especialista (overfit) e falharconsideravelmente mais quando submetido aos testes.Dada uma imagem de 32x32 elementos, Io, os filtros daclasse F = {f1, f2, f4, f8, f16, f32} definem a intensidadede cada novo pixel como a média dos quadrados delado definido pelo índice de f , preservando toda imagem.Assim, a imagem transformada Is terá menos elementos,seguindo a estrutura

Is = fi (Io) , (1)

tal que Is indica a imagem reamostrada, Io a imagemoriginal e fi faça a seguinte operação sobre a imagem:

Is(xi, yj) = fk(Io) (2)

=1

k2

k∑xo=1

k∑yo=1

Io(x, y) (3)

(4)t.q.

x = k(xi − 1) + xoy = k(yi − 1) + yo (5)

Aplica-se, ainda, como pré-processamento, a norma-lização da intensidade dos pixel médios calculados ope-rando

In(xs, ys) =Is(xs, ys)

max(Is). (6)

Todos os caracteres processados são apresentados emuma interface desenvolvida com GUIDE do Matlab, quedisponibiliza, além de cada caractere filtrado, a médiade todos os caracteres filtrados da base de treinamento,finalizando a primeira etapa.

B. Etapa 2

Descritores são fragmentos de informação utilizadospara identificar um elemento de um conjunto e recuperá-lo. Estes geram informações pertinentes para buscas ecomparações, sem que toda a imagem seja processada.Por exemplo, buscar correspondência de um indivíduoem uma base de impressões digitais necessitaria abrire comparar todas as imagens do banco de dados. Essabusca se torna computacionalmente inviável. No entanto,acessar os descritores é uma tarefa menos custosa.

Os descritores podem ser divididos em 2 classes:

• Descritores de Meta-Informação;

• Descritores da Imagem;

O primeiro descreve a imagem por elementos que nãoa compõe fisicamente, como a localização de onde umafoto foi tirada, hora e data de gravação, entre outras. Estesdescritores não serão utilizados.

Os descritores da Imagem podem ser divididos emoutros 2 grupos

• Baseado em Pixels;◦ Tiny-Image;◦ Histogramas de cor;

Page 3: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

Lista 1: Trecho do arquivo que contém os dados1 000000000000011110000000000000002 000000000000111111100000000000003 000000000011111111110000000000004 000000011111111111111000000000005 000000011111110111111000000000006 000000111111100000111100000000007 000000111111100000001110000000008 000000111111100000001111000000009 00000011111110000000011100000000

10 0000001111111000000001110000000011 0000001111110000000001111000000012 0000001111110000000000111000000013 0000001111110000000000111000000014 0000000111111000000000011100000015 0000000111111000000000011100000016 0000000111111000000000011100000017 0000000111111000000000011100000018 0000001111111000000000111100000019 0000001111011000000000111100000020 0000001111000000000001111000000021 0000000111100000000000111100000022 0000000111100000000001111100000023 0000000111100000000011111000000024 0000000111100000000111110000000025 0000000011100000011111100000000026 0000000011110001111111000000000027 0000000011111111111111000000000028 0000000001111111111111000000000029 0000000001111111111110000000000030 0000000000111111111000000000000031 0000000000011111000000000000000032 0000000000001100000000000000000033 0

◦ Histogramas texton;

• Baseados na Estrutura;◦ Fourier;◦ Gradiente;◦ Geometricos;◦ Gist;

Como a imagem não tem cor e textura, pretende-seutilizar o Tiny-Image com diferentes janelamentos e taisinformações serão comparadas com as médias dos carac-teres de toda a base, gerando 5 diferentes descritores paracada dígito buscado. Com todos esses, uma Support VectorMachine, SVM, será definida para aprender a identificar osdígitos por esses descritores. No total serão 50 diferentescomparações com a média para cada amostra da base.

1)Tiny-Image: Este processo utiliza do filtro da famí-lia F anteriormente definido. Um número de elementosreduzido permite criar comparações mais rápidas en-tre imagens, no entanto essa comparação é sensível atransformadas de rotação, translação e escala. Para estedescritor, a métrica será a distância da imagem filtrada eda imagem médias de cada dígito, com base na famíliaF de filtros. Seja Ikm a imagem média do conjunto deaprendizagem para o dígito k e In os elementos da novaimagem a ser classificada. O descritor dkfi com o digitobase k e o filtro fi é definido por:

dkfi =∣∣∣∣fi (Ikm)− fi (In)

∣∣∣∣2

(7)

A decisão de qual descritor utilizar, dentre todos ospossíveis filtros para cada dígito pode ser tomada com

base na distribuição de dkfi para um k fixo, quando com-parado com todas as médias. Para decidir, as diferenças,em módulo, menores do que 0.2 serão arredondadas para0 e as maiores do que 0.8 arredondadas para 1 em umatentativa de aumentar o fator de distanciação entre osdígitos. Adota-se a função densidade de probabilidade,FDP, exponencial, pois é esperado que quanto menor oerro calculado, maior a probabilidade da imagem ser daclasse testada. Essa é extraída a partir do histograma dasdistâncias de todos os métodos para um dado dígito e seráfundamental na identificação da probabilidade de ser umdigito qualquer dado que esteja comparado com todos osdígitos médios. Tal função é definida por

y = p(x|µ) =1

µe

−xµ (8)

Assim, a opção de qual filtro será utilizado para cadacaractere está baseada nas melhores performances relati-vas a FDP adotada.

No entanto, ao obter essas FDP para todas as amos-tras e estabelecer suas médias, a distorção causada nohistograma pode prejudicar a identificação, assim opta-se por deixar todas as 50 combinações dos filtros com odescritor em todos os 10 dígitos passar por um algorítimode aprendizagem para que este tome a devida decisão.

2)Gerando uma base de descritor: Para cada dígitoda base, o dígito médio para cada filtro i será definido{1̄, 2̄, 3̄, 4̄, 5̄, 6̄, 7̄, 8̄, 9̄, 0̄}i. Esses serão comparados com odígito a ser identificado gerando 5 diferentes filtros paraos 10 diferentes dígitos e totalizando 50 diferentes carac-terísticas levantadas por teste.

C. Etapa 3

Na etapa 3 defini-se o algorítimo de IA que seráutilizado para resolver o problema de identificação. Paratal utilizou-se a ferramenta WEKA, que permite o teste dediversas técnicas rapidamente. Para isso, fora necessárioescrever uma base de dados com os atributos do descritorescolhido com as diversas amostragens. Uma base emWEKA deve possuir os atributos listados e tipados em seucabeçalho e a base de dados separada por virgulas.

As técnicas testadas foram:

• Support Vector Machine

• MultiLayer Perceptron

• k-Nearest Neighbors

Para cada uma das técnicas foram calculados a taxade acerto sobre a base utilizando-se de validação cruzadacom 10 subdivisões da base.

D. Etapa 4

Nesta etapa uma interface de aquisição de dígitosserá desenvolvida em guide do Matlab. Essa utilizará dosresultados dos dados médios obtidos na outra interfacepara evitar o recalculo das médias sobre a base toda acada iteração. Aqui serão implementados os algorítimos

Page 4: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

de IA anteriormente descritos, e o algarismo resultanteserá dado pela votação majoritária. Em caso de empate,o algorítimo retornará a resposta da técnica com maiorconfiança.

IV. RESULTADOS

Os resultados serão apresentados de acordo com asetapas.

A. Etapa 1

Na etapa 1 fora descrita a metodologia de leitura,pre-processamento e filtragem dos dados, assim como aconstrução de uma interface para visualizá-los. A interfaceé gerada pelo código presente na lista 3 e duas realizaçõesde seu funcionamento podem ser vistas nas figuras 2 e3. Nestas é possível verificar o caractere zero sem filtros,todos os caracteres médios, o caractere zero filtrado etodos caracteres filtrados médios.

Figura 2: Interface sem filtragem

Figura 3: Interface com filtragem f4.

B. Etapas 2

Na etapa 2 decidiu-se sobre os melhores descritores.

1)Tiny-Image: O descritor de Tiny-Image foi utilizadopara classificar os melhores filtros para descrever cadadígito. Uma prévia das separações obtidas e a interfacecriadas estão disponíveis nas figuras 4 e 5. Os resultadosdos filtros adotados serão utilizados como 1 das entradasdo algoritmo de classificação.

Figura 4: Descritor Tiny para todos filtros e dígitos pro-postos mostrando as probabilidades do dígito selecionadoser de cada classe em todas condições de filtros, o graude separação entre os próprios filtros, a fdp associada aodígito escolhido e as diferença entre o digito escolhido etodas as médias

Figura 5: Descritor Tiny para todos filtros e dígitos pro-postos mostrando as probabilidades do dígito selecionadoser de cada classe em todas condições de filtros, o graude separação entre os próprios filtros, a fdp associada aodígito escolhido e as diferença entre o digito escolhidofiltrado e todas as médias filtradas

C. Etapas 3

Após o treino, as estratégias de IA obtiveram as se-guintes performances:

• Support Vector Machine: 96.5874%;

• MultiLayer Perceptron: 96.0703%;

• k-Nearest Neighbors 1: 95.6567%;

• k-Nearest Neighbors 3: 95.9152%;

Apesar de terem taxas de acerto similar, estas erramde maneira diferente, com matriz de confusão distinta.

Page 5: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

D. Etapas 4

A interface desenvolvida para testes permite desenharum novo digito, pré processá-lo com centralização, escalae alteração da linha e visualizar a predição de cadauma das 4 técnicas, assim como a matriz com todos osdescritores considerados (Figure 6).

Figura 6: Interface para identificação dos dígitos desenha-dos.

Apenas para exemplificar, uma noção visual dos des-critores do número desenhado na Figura 6 está disponívelna Figura 7.

V. CONCLUSÕES

A metodologia apresentada é bastante interessante noponto de vista de aplicação das técnicas de inteligênciaartificial do WEKA integradas com uma interface desen-volvida em MATLAB para visualização e condicionamentodos dados e testes em tempo de execução. Apesar deutilizar-se de 50 descritores filtrados do tipo tiny e dataxa de acerto da base ser relativamente alta, algunstestes com dígitos desenhados falham na predição. Issopode ser facilmente explicado pela falta de invariância arotação, translação e escala do descritor utilizado (i.e.,na Figura 8 vê-se SVM classificando o 2 como 8). Comotrabalhos futuros podem se encaixar a adição de novosdescritores, novos métodos de classificação e treinamentode votadores entre as técnicas rodadas.

REFERÊNCIAS

[1] Yann LeCun, Corinna Cortes, and Christopher J.C. Burges. Themnist database. Website, (acesso em 15 de abril, 2015). http://yann.lecun.com/exdb/mnist/.

[2] M. Lichman. UCI machine learning repository, 2013.http://archive.ics.uci.edu/ml.

[3] The National Institute of Standards and Technology (NIST). Nistspecial database 19: Nist handprinted forms and characters da-tabase. Website, 2010 (acesso em 15 de abril, 2015). http://www.nist.gov/srd/nistsd19.cfm.

Figura 7: Descritores calculados para o número 7 emformato vizual, quando comparado com o 7 médio dabase de treino. A primeira linha descreve as diferenças.A segunda o algarismo digitado e seus respectivos filtros.A terceira o algarismo médio da base e seus filtros.

Figura 8: Caso que demonstra uma das técnicas falhandona classificação.

Page 6: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

ANEXOS

Lista 2: Código da Interface de pré tratamento em Matlab1 function varargout = Interface_Digitos(varargin)2 % INTERFACE_DIGITOS MATLAB code for Interface_Digitos.fig3 % INTERFACE_DIGITOS, by itself, creates a new INTERFACE_DIGITOS or raises the existing4 % singleton*.5 %6 % H = INTERFACE_DIGITOS returns the handle to a new INTERFACE_DIGITOS or the handle to7 % the existing singleton*.8 %9 % INTERFACE_DIGITOS('CALLBACK',hObject,eventData,handles,...) calls the local

10 % function named CALLBACK in INTERFACE_DIGITOS.M with the given input arguments.11 %12 % INTERFACE_DIGITOS('Property','Value',...) creates a new INTERFACE_DIGITOS or raises the13 % existing singleton*. Starting from the left, property value pairs are14 % applied to the GUI before Interface_Digitos_OpeningFcn gets called. An15 % unrecognized property name or invalid value makes property application16 % stop. All inputs are passed to Interface_Digitos_OpeningFcn via varargin.17 %18 % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one19 % instance to run (singleton)".20 %21 % See also: GUIDE, GUIDATA, GUIHANDLES22

23 % Edit the above text to modify the response to help Interface_Digitos24

25 % Last Modified by GUIDE v2.5 22-May-2015 23:47:5326

27 % Begin initialization code - DO NOT EDIT28 gui_Singleton = 1;29 gui_State = struct('gui_Name', mfilename, ...30 'gui_Singleton', gui_Singleton, ...31 'gui_OpeningFcn', @Interface_Digitos_OpeningFcn, ...32 'gui_OutputFcn', @Interface_Digitos_OutputFcn, ...33 'gui_LayoutFcn', [] , ...34 'gui_Callback', []);35 if nargin && ischar(varargin{1})36 gui_State.gui_Callback = str2func(varargin{1});37 end38

39 if nargout40 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});41 else42 gui_mainfcn(gui_State, varargin{:});43 end44 % End initialization code - DO NOT EDIT45

46

47 global NoFilteredBase;48 global once ;49 global AllTinyMeans;50

51

52

53 % --- Executes just before Interface_Digitos is made visible.54 function Interface_Digitos_OpeningFcn(hObject, eventdata, handles, varargin)55 % This function has no output args, see OutputFcn.56 % hObject handle to figure57 % eventdata reserved - to be defined in a future version of MATLAB58 % handles structure with handles and user data (see GUIDATA)59 % varargin command line arguments to Interface_Digitos (see VARARGIN)60

61 % Choose default command line output for Interface_Digitos62 handles.output = hObject;63

64 % Update handles structure65 guidata(hObject, handles);66

67 % UIWAIT makes Interface_Digitos wait for user response (see UIRESUME)68 % uiwait(handles.figure1);69

70

Page 7: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

71 % --- Outputs from this function are returned to the command line.72 function varargout = Interface_Digitos_OutputFcn(hObject, eventdata, handles)73 % varargout cell array for returning output args (see VARARGOUT);74 % hObject handle to figure75 % eventdata reserved - to be defined in a future version of MATLAB76 % handles structure with handles and user data (see GUIDATA)77

78 % Get default command line output from handles structure79 varargout{1} = handles.output;80

81 global once;82 once = 0;83

84

85 % --- Executes on selection change in listbox1.86 function listbox1_Callback(hObject, eventdata, handles)87 % hObject handle to listbox1 (see GCBO)88 % eventdata reserved - to be defined in a future version of MATLAB89 % handles structure with handles and user data (see GUIDATA)90

91 % Hints: contents = cellstr(get(hObject,'String')) returns listbox1 contents as cell array92 % contents{get(hObject,'Value')} returns selected item from listbox193

94

95 % --- Executes during object creation, after setting all properties.96 function listbox1_CreateFcn(hObject, eventdata, handles)97 % hObject handle to listbox1 (see GCBO)98 % eventdata reserved - to be defined in a future version of MATLAB99 % handles empty - handles not created until after all CreateFcns called

100

101 % Hint: listbox controls usually have a white background on Windows.102 % See ISPC and COMPUTER.103 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))104 set(hObject,'BackgroundColor','white');105 end106

107

108 % --- Executes on selection change in popupmenu1.109 function popupmenu1_Callback(hObject, eventdata, handles)110 % hObject handle to popupmenu1 (see GCBO)111 % eventdata reserved - to be defined in a future version of MATLAB112 % handles structure with handles and user data (see GUIDATA)113

114 % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array115 % contents{get(hObject,'Value')} returns selected item from popupmenu1116

117

118 % --- Executes during object creation, after setting all properties.119 function popupmenu1_CreateFcn(hObject, eventdata, handles)120 % hObject handle to popupmenu1 (see GCBO)121 % eventdata reserved - to be defined in a future version of MATLAB122 % handles empty - handles not created until after all CreateFcns called123

124 % Hint: popupmenu controls usually have a white background on Windows.125 % See ISPC and COMPUTER.126 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))127 set(hObject,'BackgroundColor','white');128 end129

130

131 % --- Executes on button press in pushbutton1.132 function pushbutton1_Callback(hObject, eventdata, handles)133 % hObject handle to pushbutton1 (see GCBO)134 % eventdata reserved - to be defined in a future version of MATLAB135 % handles structure with handles and user data (see GUIDATA)136

137 global NoFilteredBase138 global once;139 global AllTinyMeans;140 AllTinyMeans = []141 PanelManagement(handles,1);142 if once ==0143 once = 1;144 NoFilteredBase = LoadData();145 myString =[];

Page 8: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

146 for i=1:length(NoFilteredBase.class)147 myString{i,1} = sprintf('IMAGEM - %04i)\t\t CARACTER REAL: %i\n',i,NoFilteredBase.class(i));148 end149 set(handles.listbox1,'String',myString)150 end151

152

153

154 %%%%%%%% MY FUNCTIONS155

156

157

158 % FILTRA APENAS 1 DIGITO USANDO O DESCRITO TINY159 function Is = meanFilter(index,num)160 global NoFilteredBase161 d = NoFilteredBase;162 IM = d.IMs{index};163 newIM = (zeros(size(IM)/num));164 for i=1:1:size(IM,1)/num165 for j=1:1:size(IM,2)/num166 newIM(i,j) = sum(sum(IM(num*(i-1)+1:num*(i-1)+num,num*(j-1)+1:num*(j-1)+num)));167 end168 end169 Is = newIM/max(max(newIM));170

171 % EXTRAI O DIGITO MEDIO DE TODA BASE COM O FILTRO APLICADO172 function Im = meanFilterAll(digito,f)173 global NoFilteredBase174 d = NoFilteredBase;175 newIM = (zeros(size(d.IMs{1})/f));176 qtd=0;177 for i = 1:length(d.class)178 if d.class(i)==digito;179 newIM = newIM + meanFilter(i,f);180 qtd = qtd +1;181 end182 end183 Im = newIM/qtd;184

185 % CALCULA A DIFERENCA DA IMAGEM FILTRADA E A SUA MEDIA NA BASE TODA186 function Im = diferenceFilterAll(index,digito,f)187 newIM = meanFilter(index,f);188 newIMm = meanFilterAll(digito,f);189 [¬,Im] = distanciaEntreImagens(newIM,newIMm);190

191

192 % CALCULA A DIFERENCA ENTRE DUAS IMAGENS193 function [d,Im] = distanciaEntreImagens(Im1,Im2)194 inter = abs(Im1 - Im2);195 inter(inter<0.2) = 0;196 inter(inter>0.8) = 1;197 Im = inter;198 d = sqrt(sum(sum(inter.^2)))/numel(Im1);199

200 % NORMALIZA, REGULA OS EIXOS E PLOTA A FIGURA RESULTANTE201 function plotALLdifference(index,digito,f)202 Im = diferenceFilterAll(index,digito,f);203 image(normalizeIm(Im));204 regulate_axis(f);205

206

207 % PLOTA FILTRADA208 function plotFiltered(index,f)209 newIM = meanFilter(index,f);210 image(normalizeIm(newIM));211 regulate_axis(f);212

213 % PLOTA FILTRADA MEDIA DA BASE214 function plotALLFiltered(n,f)215 newIM = meanFilterAll(n,f);216 image(normalizeIm(newIM));217 regulate_axis(f);218

219

220 function IM = normalizeIm(Im)

Page 9: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

221 IM = uint8(Im'/max(max(Im))*255);222

223

224

225

226

227 function [NoFilteredBase] = LoadData()228 if evalin('base','¬exist(''NoFilteredBase'')')==1229 NoFilteredBase = openNoFilteredData('optdigits-orig.tra');230 assignin('base','NoFilteredBase',NoFilteredBase);231 else232 NoFilteredBase = evalin('base','NoFilteredBase');233 end234

235

236

237 function d = openNoFilteredData(data)238 fId = fopen(data);239 tline = fgetl(fId);240 while ischar(tline)241 pos = strfind(tline,'entwidth');242 if ¬isempty(pos)243 W = str2double(tline(end-2:end));244 end245 pos = strfind(tline,'entheight');246 if ¬isempty(pos)247 H = str2double(tline(end-2:end));248 end249 pos = strfind(tline,'ntot');250 if ¬isempty(pos)251 QTD = str2double(tline(end-2:end));252 end253 pos = strfind(tline,'lastparag');254 if ¬isempty(pos)255 tline = -1;256 else257 tline = fgetl(fId);258 end259 end260

261 tline = fgetl(fId);262 all = int8(zeros(QTD,W*H));263 class = zeros(QTD,1);264 k=1;265 z=0;266 while ischar(tline)267 if length(tline)==W268 for j = 1:W269 all(k,j+z*W) = int8(str2double(tline(j)));270 end271 z=z+1;272 end273 if length(tline)<W274 class(k) = str2double(tline);275 z=0;k=k+1;276 end277 tline = fgetl(fId);278 end279

280 fclose(fId);281

282

283 IMs = cell(size(class,1),1);284 for k = 1:size(class,1)285 IMs{k} = int8(reshape(all(k,:),W,W));286 end287 d.class = class;288 d.IMs = IMs;289

290

291 function regulate_axis(f)292 box on;293 %set(gca,'YTick',[0:f:32],'XTick',[0:f:32],'GridLineStyle','-');294 %grid off;295 colormap(gray(255));

Page 10: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

296 set(gca, 'XTickLabelMode', 'manual', 'XTickLabel', [],'YTickLabel', [],'ZTickLabel', []);297

298

299

300 % --- If Enable == 'on', executes on mouse press in 5 pixel border.301 % --- Otherwise, executes on mouse press in 5 pixel border or over listbox1.302 function listbox1_ButtonDownFcn(hObject, eventdata, handles)303 % hObject handle to listbox1 (see GCBO)304 % eventdata reserved - to be defined in a future version of MATLAB305 % handles structure with handles and user data (see GUIDATA)306 global once;307 global NoFilteredBase308 global AllTinyMeans;309 d = NoFilteredBase;310

311 run = WhatRun(handles);312 posList = get(handles.listbox1,'Value');313 filter = get(handles.popupmenu1,'Value');314 %caracter selecionado315 axes(handles.axes1)316 cla(handles.axes1)317 f = 1;318 plotFiltered(posList,f);319

320 %caracter filtrado321 axes(handles.axes4)322 cla(handles.axes4)323 f = 2^(filter-1);324 plotFiltered(posList,f);325

326 %caracter escolhido medio filtrado327 axes(handles.axes5)328 cla(handles.axes5)329 f = 2^(filter-1);330 plotALLFiltered(d.class(posList),f);331

332

333 switch run334 case 1335 for i=0:9336 axes(eval(sprintf('handles.axes%i',6+i)))337 cla(eval(sprintf('handles.axes%i',6+i)))338 plotALLFiltered(i,f);339 end340 case 2341

342 if isempty(AllTinyMeans)343 AllTinyMeans = cell(10,5);344 makeAll = 1;345 else346 makeAll = 0;347 end348

349 for repete = [1 2 ]350

351 dists = zeros(10,5);352 toDisp = cell(10,5);353 k=1;z=1;354

355 for i=0:9356 z=1;357 for j=[1 2 4 8 16]358 if repete == 1359 referencia = meanFilter(posList,j);360 elseif repete ==2361 referencia = meanFilterAll(d.class(posList),j);362 end363 if makeAll364 AllTinyMeans{k,z} = meanFilterAll(i,j);365 end366 dists(k,z) = distanciaEntreImagens(referencia,AllTinyMeans{k,z});367 toDisp{k,z} = dists(k,z);368 z=z+1;369 end370 k=k+1;

Page 11: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

371 end372 param = 'exponential';373 distToManipulate = reshape(dists,numel(dists),1);374 pd=fitdist(distToManipulate,param);375

376 if repete ==1377 axes(handles.axes46);378 cla379 title(sprintf('PDF - %s',param))380 x = [0:0.01:0.5];381 PDF=pdf(pd,x);382 hold on;383 plot(x,PDF/max(PDF),'k','lineWidth',4);hold on;384 xlabel('Distancia Euclidiana')385 grid on386 end387

388 for i = 1:size(dists,2)389 for j = 1:size(dists,1)390 perc = 100-cdf(pd,toDisp{j,i})*100;391 cor = dec2hex(round(255-perc*255/100));392 fcor = dec2hex(round(perc*255/100));393 toDisp{j,i} = sprintf('<html><table width = 300 bgcolor=#%s%s%s><TR><TD><font ...

color=%s%s%s> %i%s </font></TD></TR> </table></html> ...',cor,cor,cor,fcor,fcor,fcor,round(perc),'%');

394 end395 end396 set(eval(sprintf('handles.uitable%i',repete)),'Data',toDisp);397 end398

399 otherwise400

401 end402

403 for i=0:9404 axes(eval(sprintf('handles.axes%i',47+i)));405 cla(eval(sprintf('handles.axes%i',47+i)));406 plotALLdifference(posList,i,f);407 end408

409

410

411 %% IMPLEMENTAR DESCRITORES E ESCREVER EM ARQUIVO PARA TRATAR NO WEKA.412

413

414

415

416 function PanelManagement(handles,indexVisible)417 for i=1:2418 h = eval(sprintf('handles.uipanel%i',i));419 if i==indexVisible420 visibility = 'on';421 else422 visibility = 'off';423 end424 set(h,'Visible',visibility);425 end426

427

428

429 function x = WhatRun(handles)430 for i=1:2431 h = eval(sprintf('handles.uipanel%i',i));432 visibility = get(h,'Visible');433 if strcmp(visibility,'on')434 x = i;435 return;436 end437 end438

439

440 % --- Executes on button press in pushbutton2.441 function pushbutton2_Callback(hObject, eventdata, handles)442 % hObject handle to pushbutton2 (see GCBO)443 % eventdata reserved - to be defined in a future version of MATLAB

Page 12: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

444 % handles structure with handles and user data (see GUIDATA)445 % DIGITOS MEDIOS446 PanelManagement(handles,1);447

448

449

450

451

452

453 % --- Executes on button press in pushbutton3.454 function pushbutton3_Callback(hObject, eventdata, handles)455 % hObject handle to pushbutton3 (see GCBO)456 % eventdata reserved - to be defined in a future version of MATLAB457 % handles structure with handles and user data (see GUIDATA)458 % DESCRITORES459 PanelManagement(handles,2);460

461 % --- Executes during object creation, after setting all properties.462 function figure1_CreateFcn(hObject, eventdata, handles)463 % hObject handle to figure1 (see GCBO)464 % eventdata reserved - to be defined in a future version of MATLAB465 % handles empty - handles not created until after all CreateFcns called466

467

468 % --- Executes on button press in pushbutton4.469 function pushbutton4_Callback(hObject, eventdata, handles)470 % hObject handle to pushbutton4 (see GCBO)471 % eventdata reserved - to be defined in a future version of MATLAB472 % handles structure with handles and user data (see GUIDATA)473 global NoFilteredBase;474 file = fopen('Desc.arff','w');475 fprintf(file,'@relation trabalho_IA\n');476 fprintf(file,'@attribute ''Indice'' numeric\n');477 for i=0:9478 for j=[1 2 4 8 16]479 fprintf(file,'@attribute ''D%iF%i'' numeric\n',i,j);480 end481 end482 fprintf(file,'@attribute ''classe'' {''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9''}\n');483

484 for i=0:9485 for j=[1 2 4 8 16]486 AllTiny{i+1,log2(j)+1} = meanFilterAll(i,j);487 end488 end489 save('MediosFiltrados','AllTiny')490 fprintf(file,'@data');491 z = 1;492 for k=1:length(NoFilteredBase.IMs)493 fprintf(file,'\n%i',z);494 for i=0:9495 for j=[1 2 4 8 16]496 referencia = meanFilter(k,j);497 dists = distanciaEntreImagens(referencia,AllTiny{i+1,log2(j)+1})498 fprintf(file,',%d',dists);499 end500 end501 fprintf(file,',''%i''',NoFilteredBase.class(k));502 z=z+1;503 end

Lista 3: Código da Interface de testes em Matlab1 function varargout = REAL_TIME_DIGITOS(varargin)2 % REAL_TIME_DIGITOS MATLAB code for REAL_TIME_DIGITOS.fig3 % REAL_TIME_DIGITOS, by itself, creates a new REAL_TIME_DIGITOS or raises the existing4 % singleton*.5 %6 % H = REAL_TIME_DIGITOS returns the handle to a new REAL_TIME_DIGITOS or the handle to7 % the existing singleton*.8 %9 % REAL_TIME_DIGITOS('CALLBACK',hObject,eventData,handles,...) calls the local

10 % function named CALLBACK in REAL_TIME_DIGITOS.M with the given input arguments.11 %

Page 13: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

12 % REAL_TIME_DIGITOS('Property','Value',...) creates a new REAL_TIME_DIGITOS or raises the13 % existing singleton*. Starting from the left, property value pairs are14 % applied to the GUI before REAL_TIME_DIGITOS_OpeningFcn gets called. An15 % unrecognized property name or invalid value makes property application16 % stop. All inputs are passed to REAL_TIME_DIGITOS_OpeningFcn via varargin.17 %18 % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one19 % instance to run (singleton)".20 %21 % See also: GUIDE, GUIDATA, GUIHANDLES22

23 % Edit the above text to modify the response to help REAL_TIME_DIGITOS24

25 % Last Modified by GUIDE v2.5 26-May-2015 19:41:5526

27 % Begin initialization code - DO NOT EDIT28 gui_Singleton = 1;29 gui_State = struct('gui_Name', mfilename, ...30 'gui_Singleton', gui_Singleton, ...31 'gui_OpeningFcn', @REAL_TIME_DIGITOS_OpeningFcn, ...32 'gui_OutputFcn', @REAL_TIME_DIGITOS_OutputFcn, ...33 'gui_LayoutFcn', [] , ...34 'gui_Callback', []);35 if nargin && ischar(varargin{1})36 gui_State.gui_Callback = str2func(varargin{1});37 end38

39 if nargout40 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});41 else42 gui_mainfcn(gui_State, varargin{:});43 end44 % End initialization code - DO NOT EDIT45

46

47 % --- Executes just before REAL_TIME_DIGITOS is made visible.48 function REAL_TIME_DIGITOS_OpeningFcn(hObject, eventdata, handles, varargin)49 % This function has no output args, see OutputFcn.50 % hObject handle to figure51 % eventdata reserved - to be defined in a future version of MATLAB52 % handles structure with handles and user data (see GUIDATA)53 % varargin command line arguments to REAL_TIME_DIGITOS (see VARARGIN)54

55 % Choose default command line output for REAL_TIME_DIGITOS56 handles.output = hObject;57

58 % Update handles structure59 guidata(hObject, handles);60

61 % UIWAIT makes REAL_TIME_DIGITOS wait for user response (see UIRESUME)62 % uiwait(handles.figure1);63 regulateAxis(handles)64

65

66 function regulateAxis(handles)67

68 axes(handles.axes1);69 xlim([0,31]);70 ylim([0,31]);71 colormap(gray(255));72 set(handles.axes1, 'XTickLabelMode', 'manual', 'XTickLabel', [],'YTickLabel', [],'ZTickLabel', []);73 box on;74

75 axes(handles.axes2);76 xlim([0,31]);77 ylim([0,31]);78 colormap(gray(255));79 set(handles.axes2, 'XTickLabelMode', 'manual', 'XTickLabel', [],'YTickLabel', [],'ZTickLabel', []);80 box on;81

82 axes(handles.axes3);83 xlim([0,31]);84 ylim([0,31]);85 colormap(gray(255));86 set(handles.axes3, 'XTickLabelMode', 'manual', 'XTickLabel', [],'YTickLabel', [],'ZTickLabel', []);

Page 14: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

87 box on;88

89

90 % --- Outputs from this function are returned to the command line.91 function varargout = REAL_TIME_DIGITOS_OutputFcn(hObject, eventdata, handles)92 % varargout cell array for returning output args (see VARARGOUT);93 % hObject handle to figure94 % eventdata reserved - to be defined in a future version of MATLAB95 % handles structure with handles and user data (see GUIDATA)96

97 % Get default command line output from handles structure98 varargout{1} = handles.output;99

100 % --- Executes on mouse press over axes background.101 function axes1_ButtonDownFcn(hObject, eventdata, handles)102 % hObject handle to axes1 (see GCBO)103 % eventdata reserved - to be defined in a future version of MATLAB104 % handles structure with handles and user data (see GUIDATA)105 regulateAxis(handles);106 global X;107 global Y;108 hFH = imfreehand(handles.axes1);109 % Get the xy coordinates of where they drew.110 xy = hFH.getPosition;111 hold on; % Keep image, and direction of y axis.112 xCoordinates = xy(:, 1);113 yCoordinates = xy(:, 2);114 X = [X;xCoordinates];115 Y = [Y;yCoordinates];116 plot(xCoordinates, yCoordinates, 'o-', 'LineWidth', 20);117

118 regulateAxis(handles)119 delete(hFH)120

121 % --- Executes on mouse press over axes background.122 function axes2_ButtonDownFcn(hObject, eventdata, handles)123 % hObject handle to axes2 (see GCBO)124 % eventdata reserved - to be defined in a future version of MATLAB125 % handles structure with handles and user data (see GUIDATA)126

127

128 % --- Executes on button press in pushbutton1.129 function pushbutton1_Callback(hObject, eventdata, handles)130 % hObject handle to pushbutton1 (see GCBO)131 % eventdata reserved - to be defined in a future version of MATLAB132 % handles structure with handles and user data (see GUIDATA)133 global X;134 global Y;135 global IM;136 global newIM;137

138

139 dX = (max(X)+min(X))/2;140 dY = (max(Y)+min(Y))/2;141

142 X2 = X-dX;143 Y2 = Y-dY;144

145 ∆ = max(max(X)-min(X),max(Y)-min(Y));146

147 X2 = X2*32/∆*0.7+32/2+0;148 Y2 = Y2*32/∆*0.7+32/2+0;149

150 axes(handles.axes2)151

152 newIM = uint8(zeros(32,32));153 minFixo = str2num(get(handles.edit11,'String'));154 maxVar = str2num(get(handles.edit12,'String'));155

156 for i=1:32157 for j=1:32158 teste = min(sqrt((X2-(i+0.5)).^2+(Y2-(32-j+0.5)).^2));159 if teste<minFixo160 newIM(i,j) = 255;161 elseif teste<maxVar

Page 15: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

162 newIM(i,j) = 255-(teste-minFixo)*255;163 else164 newIM(i,j)=0;165 end166 end167 end168

169

170 image(uint8(newIM'))171 hold on172 plot(X2,32-Y2);173 regulateAxis(handles);174

175

176 % --- Executes on button press in pushbutton2.177 function pushbutton2_Callback(hObject, eventdata, handles)178 % hObject handle to pushbutton2 (see GCBO)179 % eventdata reserved - to be defined in a future version of MATLAB180 % handles structure with handles and user data (see GUIDATA)181 global newIM;182 newIM = newIM;183

184 load('MediosFiltrados')185 referencia = [];186 for i = 1:size(AllTiny,1)187 figure188 for j = 1:size(AllTiny,2)189 referencia = meanFilter(newIM/255,2^(j-1));190 % figure191 % image(uint8(referencia/max(max(referencia))*255))192 % figure193 % image(uint8(AllTiny{i,j}'*255))194 [dists,dIM] = distanciaEntreImagens(double(referencia'),AllTiny{i,j}');195

196 subplot(3,5,j)197 image(uint8(dIM*255))198 subplot(3,5,j+5)199 image(uint8(referencia'*255))200 subplot(3,5,j+10)201 image(uint8(AllTiny{i,j}'*255))202

203 allDist(j,i) = (dists);204 end205 end206

207 for i = 1:size(AllTiny,1)208 for j = 1:size(AllTiny,2)209 perc = 100-round(allDist(j,i)/max(max(allDist))*100);210 cor = dec2hex(round(255-perc*255/100));211 fcor = dec2hex(round(perc*255/100));212 toDisp{j,i} = sprintf('<html><table width = 300 bgcolor=#%s%s%s><TR><TD><font color=%s%s%s> ...

%d </font></TD></TR> </table></html> ',cor,cor,cor,fcor,fcor,fcor,perc);213 end214 end215 set(eval('handles.uitable2'),'Data',toDisp);216

217 % escrever em arquivo218

219 file = 'Teste.arff';220 fId = fopen(file,'w');221 fprintf(fId,'@relation trabalho_IA\n');222 fprintf(fId,'@attribute ''Indice'' numeric\n');223 for i=0:9224 for j=[1 2 4 8 16]225 fprintf(fId,'@attribute ''D%iF%i'' numeric\n',i,j);226 end227 end228 fprintf(fId,'@attribute ''classe'' ...

{''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9''}\n');229 fprintf(fId,'@data');230 z = 1;231 fprintf(fId,'\n%i',z);232 for i=1:10233 for j=1:5234 fprintf(fId,',%d',allDist(j,i));

Page 16: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

235 end236 end237 fprintf(fId,',%s','?');238 fclose(fId)239

240 %weka241

242 javaaddpath('C:/Program Files/Weka-3-7/weka.jar');243

244 import java.io.FileReader245 import java.io.BufferedReader246 import java.lang.String247 % WEKAAA248

249 unlabeled = weka.core.Instances(BufferedReader(FileReader(file)));250 unlabeled.setClassIndex( unlabeled.numAttributes()-1 );251

252

253 meusModelos = {'MODELOS/SVM.model','MODELOS/MLP.model','MODELOS/KNN3.model','MODELOS/KNN.model'}254

255 for i=1:length(meusModelos)256 classificador = weka.core.SerializationHelper.read(meusModelos{i});257 pred = classificador.classifyInstance(unlabeled.instance(0));258 classe(i) = str2num(char(unlabeled.classAttribute().value(pred)));259 end260

261 set(handles.edit2,'String',num2str(classe(1)))262 set(handles.edit4,'String',num2str(classe(2)))263 set(handles.edit6,'String',num2str(classe(3)))264 set(handles.edit8,'String',num2str(classe(4)))265

266

267

268 axes(handles.axes3);269 image(uint8(AllTiny{mode(classe)+1,1}'*255))270

271

272

273

274

275 function Is = meanFilter(IM,num)276 newIM = (zeros(size(IM)/num));277 for i=1:1:size(IM,1)/num278 for j=1:1:size(IM,2)/num279 newIM(i,j) = sum(sum(IM(num*(i-1)+1:num*(i-1)+num,num*(j-1)+1:num*(j-1)+num)));280 end281 end282 Is = newIM/max(max(newIM));283

284

285 function [d,Im] = distanciaEntreImagens(Im1,Im2)286 inter = abs(Im1 - Im2);287 inter(inter<0.2) = 0;288 inter(inter>0.8) = 1;289 Im = inter;290 d = sqrt(sum(sum(inter.^2)))/numel(Im1);291

292

293 % --- If Enable == 'on', executes on mouse press in 5 pixel border.294 % --- Otherwise, executes on mouse press in 5 pixel border or over pushbutton1.295 function pushbutton1_ButtonDownFcn(hObject, eventdata, handles)296 % hObject handle to pushbutton1 (see GCBO)297 % eventdata reserved - to be defined in a future version of MATLAB298 % handles structure with handles and user data (see GUIDATA)299

300

301 % --- Executes on button press in pushbutton3.302 function pushbutton3_Callback(hObject, eventdata, handles)303 % hObject handle to pushbutton3 (see GCBO)304 % eventdata reserved - to be defined in a future version of MATLAB305 % handles structure with handles and user data (see GUIDATA)306 cla(handles.axes1);307 cla(handles.axes2);308 global X;309 X = [];

Page 17: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

310 global Y;311 Y = [];312 set(handles.figure1, 'HandleVisibility', 'off');313 close all;314 set(handles.figure1, 'HandleVisibility', 'on');315

316

317 % --- If Enable == 'on', executes on mouse press in 5 pixel border.318 % --- Otherwise, executes on mouse press in 5 pixel border or over pushbutton3.319 function pushbutton3_ButtonDownFcn(hObject, eventdata, handles)320 % hObject handle to pushbutton3 (see GCBO)321 % eventdata reserved - to be defined in a future version of MATLAB322 % handles structure with handles and user data (see GUIDATA)323

324

325

326 function edit8_Callback(hObject, eventdata, handles)327 % hObject handle to edit8 (see GCBO)328 % eventdata reserved - to be defined in a future version of MATLAB329 % handles structure with handles and user data (see GUIDATA)330

331 % Hints: get(hObject,'String') returns contents of edit8 as text332 % str2double(get(hObject,'String')) returns contents of edit8 as a double333

334

335 % --- Executes during object creation, after setting all properties.336 function edit8_CreateFcn(hObject, eventdata, handles)337 % hObject handle to edit8 (see GCBO)338 % eventdata reserved - to be defined in a future version of MATLAB339 % handles empty - handles not created until after all CreateFcns called340

341 % Hint: edit controls usually have a white background on Windows.342 % See ISPC and COMPUTER.343 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))344 set(hObject,'BackgroundColor','white');345 end346

347

348

349 function edit9_Callback(hObject, eventdata, handles)350 % hObject handle to edit9 (see GCBO)351 % eventdata reserved - to be defined in a future version of MATLAB352 % handles structure with handles and user data (see GUIDATA)353

354 % Hints: get(hObject,'String') returns contents of edit9 as text355 % str2double(get(hObject,'String')) returns contents of edit9 as a double356

357

358 % --- Executes during object creation, after setting all properties.359 function edit9_CreateFcn(hObject, eventdata, handles)360 % hObject handle to edit9 (see GCBO)361 % eventdata reserved - to be defined in a future version of MATLAB362 % handles empty - handles not created until after all CreateFcns called363

364 % Hint: edit controls usually have a white background on Windows.365 % See ISPC and COMPUTER.366 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))367 set(hObject,'BackgroundColor','white');368 end369

370

371

372 function edit6_Callback(hObject, eventdata, handles)373 % hObject handle to edit6 (see GCBO)374 % eventdata reserved - to be defined in a future version of MATLAB375 % handles structure with handles and user data (see GUIDATA)376

377 % Hints: get(hObject,'String') returns contents of edit6 as text378 % str2double(get(hObject,'String')) returns contents of edit6 as a double379

380

381 % --- Executes during object creation, after setting all properties.382 function edit6_CreateFcn(hObject, eventdata, handles)383 % hObject handle to edit6 (see GCBO)384 % eventdata reserved - to be defined in a future version of MATLAB

Page 18: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

385 % handles empty - handles not created until after all CreateFcns called386

387 % Hint: edit controls usually have a white background on Windows.388 % See ISPC and COMPUTER.389 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))390 set(hObject,'BackgroundColor','white');391 end392

393

394

395 function edit7_Callback(hObject, eventdata, handles)396 % hObject handle to edit7 (see GCBO)397 % eventdata reserved - to be defined in a future version of MATLAB398 % handles structure with handles and user data (see GUIDATA)399

400 % Hints: get(hObject,'String') returns contents of edit7 as text401 % str2double(get(hObject,'String')) returns contents of edit7 as a double402

403

404 % --- Executes during object creation, after setting all properties.405 function edit7_CreateFcn(hObject, eventdata, handles)406 % hObject handle to edit7 (see GCBO)407 % eventdata reserved - to be defined in a future version of MATLAB408 % handles empty - handles not created until after all CreateFcns called409

410 % Hint: edit controls usually have a white background on Windows.411 % See ISPC and COMPUTER.412 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))413 set(hObject,'BackgroundColor','white');414 end415

416

417

418 function edit4_Callback(hObject, eventdata, handles)419 % hObject handle to edit4 (see GCBO)420 % eventdata reserved - to be defined in a future version of MATLAB421 % handles structure with handles and user data (see GUIDATA)422

423 % Hints: get(hObject,'String') returns contents of edit4 as text424 % str2double(get(hObject,'String')) returns contents of edit4 as a double425

426

427 % --- Executes during object creation, after setting all properties.428 function edit4_CreateFcn(hObject, eventdata, handles)429 % hObject handle to edit4 (see GCBO)430 % eventdata reserved - to be defined in a future version of MATLAB431 % handles empty - handles not created until after all CreateFcns called432

433 % Hint: edit controls usually have a white background on Windows.434 % See ISPC and COMPUTER.435 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))436 set(hObject,'BackgroundColor','white');437 end438

439

440

441 function edit5_Callback(hObject, eventdata, handles)442 % hObject handle to edit5 (see GCBO)443 % eventdata reserved - to be defined in a future version of MATLAB444 % handles structure with handles and user data (see GUIDATA)445

446 % Hints: get(hObject,'String') returns contents of edit5 as text447 % str2double(get(hObject,'String')) returns contents of edit5 as a double448

449

450 % --- Executes during object creation, after setting all properties.451 function edit5_CreateFcn(hObject, eventdata, handles)452 % hObject handle to edit5 (see GCBO)453 % eventdata reserved - to be defined in a future version of MATLAB454 % handles empty - handles not created until after all CreateFcns called455

456 % Hint: edit controls usually have a white background on Windows.457 % See ISPC and COMPUTER.458 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))459 set(hObject,'BackgroundColor','white');

Page 19: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

460 end461

462

463

464 function edit2_Callback(hObject, eventdata, handles)465 % hObject handle to edit2 (see GCBO)466 % eventdata reserved - to be defined in a future version of MATLAB467 % handles structure with handles and user data (see GUIDATA)468

469 % Hints: get(hObject,'String') returns contents of edit2 as text470 % str2double(get(hObject,'String')) returns contents of edit2 as a double471

472

473 % --- Executes during object creation, after setting all properties.474 function edit2_CreateFcn(hObject, eventdata, handles)475 % hObject handle to edit2 (see GCBO)476 % eventdata reserved - to be defined in a future version of MATLAB477 % handles empty - handles not created until after all CreateFcns called478

479 % Hint: edit controls usually have a white background on Windows.480 % See ISPC and COMPUTER.481 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))482 set(hObject,'BackgroundColor','white');483 end484

485

486

487 function edit3_Callback(hObject, eventdata, handles)488 % hObject handle to edit3 (see GCBO)489 % eventdata reserved - to be defined in a future version of MATLAB490 % handles structure with handles and user data (see GUIDATA)491

492 % Hints: get(hObject,'String') returns contents of edit3 as text493 % str2double(get(hObject,'String')) returns contents of edit3 as a double494

495

496 % --- Executes during object creation, after setting all properties.497 function edit3_CreateFcn(hObject, eventdata, handles)498 % hObject handle to edit3 (see GCBO)499 % eventdata reserved - to be defined in a future version of MATLAB500 % handles empty - handles not created until after all CreateFcns called501

502 % Hint: edit controls usually have a white background on Windows.503 % See ISPC and COMPUTER.504 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))505 set(hObject,'BackgroundColor','white');506 end507

508

509

510 function edit11_Callback(hObject, eventdata, handles)511 % hObject handle to edit11 (see GCBO)512 % eventdata reserved - to be defined in a future version of MATLAB513 % handles structure with handles and user data (see GUIDATA)514

515 % Hints: get(hObject,'String') returns contents of edit11 as text516 % str2double(get(hObject,'String')) returns contents of edit11 as a double517

518

519 % --- Executes during object creation, after setting all properties.520 function edit11_CreateFcn(hObject, eventdata, handles)521 % hObject handle to edit11 (see GCBO)522 % eventdata reserved - to be defined in a future version of MATLAB523 % handles empty - handles not created until after all CreateFcns called524

525 % Hint: edit controls usually have a white background on Windows.526 % See ISPC and COMPUTER.527 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))528 set(hObject,'BackgroundColor','white');529 end530

531

532

533 function edit12_Callback(hObject, eventdata, handles)534 % hObject handle to edit12 (see GCBO)

Page 20: Uma interface para classificação de dígitosffaria/ia1s2015/projects/classifi...e comparar todas as imagens do banco de dados. Essa busca se torna computacionalmente inviável.

535 % eventdata reserved - to be defined in a future version of MATLAB536 % handles structure with handles and user data (see GUIDATA)537

538 % Hints: get(hObject,'String') returns contents of edit12 as text539 % str2double(get(hObject,'String')) returns contents of edit12 as a double540

541

542 % --- Executes during object creation, after setting all properties.543 function edit12_CreateFcn(hObject, eventdata, handles)544 % hObject handle to edit12 (see GCBO)545 % eventdata reserved - to be defined in a future version of MATLAB546 % handles empty - handles not created until after all CreateFcns called547

548 % Hint: edit controls usually have a white background on Windows.549 % See ISPC and COMPUTER.550 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))551 set(hObject,'BackgroundColor','white');552 end