Você está na página 1de 26

ALEXANDRE FELIPE MÜLLER DE SOUZA

APRENDIZADO DE OPERADORES MORFOLÓGICOS


PARA TRATAMENTO DE IMAGENS ATRAVÉS DE
SÍNTESE DE SISTEMAS DIGITAIS

CURITIBA

2008
ALEXANDRE FELIPE MÜLLER DE SOUZA

APRENDIZADO DE OPERADORES MORFOLÓGICOS


PARA TRATAMENTO DE IMAGENS ATRAVÉS DE
SÍNTESE DE SISTEMAS DIGITAIS

Trabalho de graduação apresentado como


requisito parcial à conclusção do curso de
Bacharelado em Ciência da Computação.
Departamento de Informática, Setor de
Ciências Exatas, Universidade Federal do
Paraná.
Orientador: Prof. Me. Heraldo Maciel
França Madeira

CURITIBA

2008
i

SUMÁRIO

LISTA DE FIGURAS iii

RESUMO iv

ABSTRACT v

1 INTRODUÇÃO 1
1.1 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 FERRAMENTAS DE APOIO 3
2.1 Morfologia Matemática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Circuitos Digitais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3 Funções Booleanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Diagramas de decisão binária (Binary Decision Diagram BDD) . . . . . . . 4
2.5 Diagramas Reduzidos Ordenados de Decisão Binária (Reduced Ordered
Binary Decision Diagram ROBDD) . . . . . . . . . . . . . . . . . . . . . . 5

3 DESENVOLVIMENTO E EXPERIÊNCIA ADQUIRIDA 6


3.1 Aprendizado de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2 Funções Incompletamente Especificadas . . . . . . . . . . . . . . . . . . . . 6
3.3 Obtenção de um BDD analisando cada variável separadamente . . . . . . . 7
3.4 Obtenção de um BDD analisando cada implicante . . . . . . . . . . . . . . 8
3.5 Redução do BDD resultante com ITE . . . . . . . . . . . . . . . . . . . . . 10
3.6 Descrição da implementação do algoritmo . . . . . . . . . . . . . . . . . . 11

4 ESPECIFICAÇÃO 12
4.1 Especificação da representação de um BDD . . . . . . . . . . . . . . . . . . 12

5 RESULTADOS 14
5.1 Exemplos de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2 Aspectos técnicos da implementação . . . . . . . . . . . . . . . . . . . . . 16

REFERÊNCIAS 19
ii

LISTA DE FIGURAS

2.1 Exemplo de ROBDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.1 Somente os nós terminais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7


3.2 Possı́vel minimização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3 Alocação Dinâmica de um implicante . . . . . . . . . . . . . . . . . . . . . 10
3.4 A árvore parcial após experimentação de dois implicantes . . . . . . . . . . 10

4.1 Gráfico do BDD representado por:1{2{T F } F } . . . . . . . . . . . . . . . 12


4.2 Gráfico do BDD representado por:1{3 < T F >1 2{∗1 F }} . . . . . . . . . 13

5.1 Imagem original, imagem com ruı́do aleatório e imagem com ruı́do aplicado
o operador aprendido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2 Outra imagem com ruı́do aleatório . . . . . . . . . . . . . . . . . . . . . . 15
5.3 Figura 5.2 aplicado filtro aprendido na figura 5.1 . . . . . . . . . . . . . . . 15
5.4 Detector de bordas do Gimp[12], aprendido pelo algoritmo e re-aplicado na
imagem original . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.5 Uso de memória ao longo da execução do algoritmo . . . . . . . . . . . . . 17
5.6 BDD gerado por 5.2 antes e após minimização ITE . . . . . . . . . . . . . 18
iii

LISTA DE TABELAS

2.1 Todos os possı́veis valores das variáveis . . . . . . . . . . . . . . . . . . . . 5

3.1 Amostra de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7


3.2 Os valores em que a variável “p1” vale 0 . . . . . . . . . . . . . . . . . . . 8
3.3 Os valores em que a variável “p1” vale 1 . . . . . . . . . . . . . . . . . . . 8
3.4 Algoritmo para obtenção de BDD apartir de tabela . . . . . . . . . . . . . 9

5.1 Amostra de exemplo com 5 variáveis . . . . . . . . . . . . . . . . . . . . . 17


iv

RESUMO

A Morfologia Matemática é uma ferramenta de auxı́lio no tratamento de imagens digi-


talizadas. Nesta ferramenta cada transformação consiste num operador aplicado numa
imagem. O aprendizado automático deste operador é o aperfeiçoamento de um operador
morfológico proposto por um algoritmo. O que é feito, neste algoritmo demonstra-se no
presente trabalho, através de sı́ntese utilizada na área de sistemas digitais. Esta sı́ntese
basea-se em um diagrama de decisão binária.
v

ABSTRACT

The “Mathematical Morphology” is an important tool applied in digital images. In this


theory, all kind of transformations, consists in a operator and an operands image. The
machine learning of those operators is proposed by sequential improvements based in
examples. In this currently paper the analysis used to create those operators is based on
synthesis of digital systems.
1

1 INTRODUÇÃO

A área de processamento e tratamento de imagens aborda a forma como se representa figu-


ras em modelos computacionais e como se trabalha com as mesmas. Estas representações
são sinais multi-dimensionais discretos em valores chamados de pixels (ou pontos). O as-
pecto visual da figura é a concatenação destes pontos, que formam na percepção humana
uma imagem.
Cada ponto é representado internamente por um valor numérico de tamanho variado
(de acordo com a definição de cores e outras caracterı́sticas). Estes valores numéricos
por sua vez são representados por impulsos binários (ou seja podem assumir dois valores:
verdadeiro ou falso). Mesmo a primeira vista parecendo extremamente limitada, esta
constituição pode gerar toda numeração natural e aritmética usual desta. Conseqüente-
mente, este sistema de numeração e modelagem de dados são base para álgebra booleana
e toda lógica digital.

1.1 Descrição

O presente trabalho utiliza essencialmente, para analisar imagens, as técnicas de álgebra


booleana que por sua vez são utilizadas nos projetos de sistemas digitais. A proposta
é desenvolver um algoritmo de aprendizado de um operador, através de um conjunto de
imagens operandas e outro conjunto de imagens resultadas ambas em preto e branco. Este
algoritmo tem como entrada uma imagem operanda, um valor de amostragem (máscara) e
os resultados das operações. O operador é o modelo de transformação de uma imagem em
outra. Depois do aprendizado do filtro (operador) mostrar-se-à os resultados com vários
nı́veis de entrada (tamanho da máscara). O trabalho pretende utilizar o melhor operador
para aplicação através da maior máscara possı́vel. Por sua vez o operador nada mais é
do que uma expressão booleana, e a sı́ntese deste é análoga a de circuitos combinacionais.
A utilização de um grafo de decisão binária é uma representação que serve para modelar
expressões booleanas, e todos os trabalhos de minimização e operação deles servem para
obter o operador.
Através do tratamento de tais sinais, como explanado a cima, obtém-se um algoritmo
de aprendizado de operadores morfológicos para identificar a aplicação de filtros de tra-
tamento de imagens. Este operador pode servir para:

• Tratamento de distorções

• Reconhecimento de padrões

• Tratamento de ruı́dos
2

Toda a problemática deste trabalho já foi abordada de forma bem extensa[?]. O
trabalho de Hirata[?] aborda questões muito similares como o problema do tamanho da
máscara e quantidade de exemplos (Nina, 2001, p3). Ainda referindo-se ao trabalho[1],
a programação automática é feita utilizando o PAC (Probably Aproximately Correctly)
que utiliza técnicas estatı́sticas.
O presente trabalho visa apresentar resultados que possam contribuir, nos trabalhos
similares já apresentados com a comunidade acadêmica, pois utiliza técnicas diferentes.
Por sua vez esta pode ser aperfeiçoada no futuro pelo fato de ser não ainda trabalhado
anteriormente.
3

2 FERRAMENTAS DE APOIO

A seguir aborda-se as ferramentas sob tema central da análise. Faz-se necessário a clas-
sificação em: nı́vel operacional e nı́vel teórico. No nı́vel operacional foi utilizado: uma
implementação em linguagem ANSI C utilizando compilador GCC1 , imagens em preto e
branco representados em formato PGM, editor de imagens Gimp2 para exemplos de filtros
e bibliotecas de depuração Efence3 e Valgrind4 . O nı́vel teórico resume-se a: morfologia
matemática e circuitos representados em grafos de decisão binária.
A seguir se passará a analisar cada uma das ferramentas.

2.1 Morfologia Matemática

A morfologia matemática trata de um modelo teórico, baseado na teoria dos reticulados,


em que existe uma estrutura de um par de elementos parcialmente ordenada. Nesta
estrutura cada par tem elementos superiores e inferiores mı́nimos. A MM (Morfologia
Matemática) é a base de muitas transformações em imagens que consiste em operações
de acordo com suas caracterı́sticas. Estas caracterı́sticas são definidas num operador MM
que leva em consideração as individualidades geométricas para definir se um pedaço da
imagem (o ponto juntamente com seus vizinhos) está ou não contido em um conjunto.
Por sua vez a composição de todos estes resultados (de contido ou não contido) aplicados
em todos os pontos da imagem geram uma nova imagem.
Seria como se: ao aplicar um operador morfológico numa seqüência de sinais repre-
sentados num pedaço da imagem obtém-se o resultado de um contexto. Os resultados de
todos os contextos geram a imagem de resultado. Os limites desta seqüencia de sinais é
o tamanho da máscara do algoritmo implementado.

2.2 Circuitos Digitais

Um circuito digital é um modelo representado fisicamente com materiais condutores,


semi-condutores, entre outros. De forma que provê um funcionamento controlado pelo
seu próprio desenvolvedor. Esta sucessão de fenômenos periódicos nada mais é do que
circuitos lógicos implementados em matéria fı́sica. Cita Jacobi[5] p.1 “Os circuitos lógicos
combinacionais são aqueles que a partir de um conjunto de sinais denominados sinais de
entrada, produzem um correspondente conjunto de sinais de saı́da”.
1
Gnu Compiler Collection – http://gcc.gnu.org [12]
2
The Gnu Image Manipulation Program[9]
3
Eletric-Fence[11]
4
Valgrind[10]
4

A divisão feita por Micheli[7] para facilitar a análise deste circuito divide sua com-
posição em três nı́veis, sendo eles: Nı́vel geométrico, de arquitetura e lógico. As oti-
mizações de tais circuitos no nı́vel lógico consiste em reduzir o número de passos entre
a entrada e a saı́da. Este tempo que se pretende reduzir se dá o nome de atraso de
propagação. Esta sı́ntese de circuitos no nı́vel lógico é uma abstração independente da
implementação e pode servir para otimizações também em outras áreas em que o nı́vel
lógico é análogo. “Uma descrição estrutural consiste em uma rede de portas lógicas que
realizam o comportamento dado. Estas podem ou não corresponder a uma implementação
em uma dada tecnologia”[5]. Segundo ainda Jacobi: A sı́ntese de circuitos combinacio-
nais divide-se em dois grupos de domı́nios principais: a sı́ntese dois-nı́veis e a sı́ntese
multi-nı́veis[5].

2.3 Funções Booleanas

As funções ditas booleanas são modelos de relações entre sinais de entrada 0 e 1 e suas
saı́das. A eficiência e velocidade destes sinais digitais dependem da representação usada
para sı́ntese destes sinais. A experimentação de todos os valores possı́veis e a listagem
destes se chama “Tabela Verdade”. Esta representação, pelo seu tamanho crescer expo-
nencialmente com o número de entradas, não é usada a não ser para fins didáticos. As
funções booleanas são usualmente representadas por variáveis de entrada e suas operações
básicas entre elas (e, ou, negação).

2.4 Diagramas de decisão binária (Binary Decision Diagram


BDD)

Consiste em uma representação diferente para funções booleanas através de um grafo. Um


diagrama de decisão binária representa um conjunto de decisões binárias, resultando numa
única resposta que pode ser verdadeira ou falsa[7]. Segundo Jacobi[5]: “São grafos acı́clicos
compostos por nós intermediários, nós terminais e arcos.” Este grafo possui vértices
internos que representam variáveis e arestas que representam valores que estas variáveis
podem assumir. Os nós (vértices) terminais (também chamados de folhas) representam
o resultado da função booleana. De acordo com Bryant[4], que traz uma definição mais
formal:
Uma função denominada pelo grafo G é um conjunto de vértices V
contendo dois tipos de vértices. Um tipo de vértice não terminal v
que tem como atributo um ı́ndice tal que ı́ndice(v) ∈ {1, ..., n} e
dois filhos inferior(v) e superior(v) ∈ V. Um vértice terminal tem
como atributo um valor tal que valor(v) ∈ {0,1}
Tradução própria
5

Figura 2.1: Exemplo de ROBDD

Assim como na álgebra booleana é possı́vel trabalhar com BDD’s de forma a reduzi-lo.
Um nó (vértice) é dito redundante quando suas duas arestas resultam no mesmo nó, e dois
sub grafos são ditos equivalentes quando resultaram da mesma variável e seus sucessores
são iguais.

2.5 Diagramas Reduzidos Ordenados de Decisão Binária (Re-


duced Ordered Binary Decision Diagram ROBDD)

Caso particular dos diagramas de decisão binária, os ROBDDs são BDDs cujas as variáveis
seguem uma ordem em todos os nı́veis seguindo no sentido dos nós terminais. Além disto
os ROBDDs são representações canônicas (únicas). As formas de minimização neste caso
particular são, além de remoção de redundância e equivalências, a troca de ordem das
variáveis. A figura 2.1 ilustra um exemplo de ROBDD

A B Resultado
0 0 1
0 1 1
1 0 1
1 1 0
Tabela 2.1: Todos os possı́veis valores das variáveis

O ROBDD da figura 2.1 possui duas variáveis: A e B. Estas são variáveis binárias que
podem assumir valores 0 e 1. Cada valor que esta variável pode assumir é representado em
uma de suas arestas. Todos os possı́veis valores que A e B podem assumir estão descritos
na tabela 2.1 conhecida como tabela verdade, cujo resultado significa o valor do ultimo
vértice do grafo no percurso.
6

3 DESENVOLVIMENTO E EXPERIÊNCIA ADQUIRIDA

Dada duas imagens sendo que uma é resultado de uma operação em outra, pretende-se
obter um operador MM tal que esta obtenção seja rápida. Usando uma implementação
de uma ferramenta de aplicação de operadores morfológicos em determinada imagem é
possı́vel ver se este operador atende as expectativas.
As possı́veis implicações de complexidade e do uso de memória nos métodos mais intui-
tivos são difı́ceis em valores crescentes de amostragem. Sendo assim todo o conhecimento
de minimização de funções são úteis para avaliar o modelo, não só no resultado final, mas
ao longo da execução da obtenção dos operadores.

3.1 Aprendizado de operadores

Cada função booleana pode representar um operador morfológico em que as entradas da


função são pontos vizinhos de um ponto da imagem. Logo a obtenção de uma função boo-
leana é feita através da experimentação de um conjunto de pontos pré-definidos (iteração
na imagem).
Cada valor obtido forma um novo caminho no BDD. Os valores (da tabela verdade)
que não foram definidos (valores não experimentados) são nós não especificados. Ou seja,
estes podem assumir o valor que garante melhor redução. Por outro lado um caminho só
pode ser considerado não especificado depois de execução total dos experimentos.

3.2 Funções Incompletamente Especificadas

Na montagem de uma função booleana, seja representada por álgebra booleana ou grafos
de decisão binária, as vezes não é possı́vel testar todos os valores de saı́da da função (seja
por tempo ou natureza do problema). Estas combinações de entradas formam valores que
podem assumir qualquer valor. A princı́pio pode-se assumir uma única constante para
todos os valores. Mas a melhor abordagem ainda é descobrir combinações de valores que
resultam na melhor redução do BDD.
A melhor redução é a aquela em que é possı́vel criar maior número de redundâncias e
equivalências. Como os valores não especificados são valores terminais é possı́vel representa-
los na forma da figura 3.1.
Os valores não especificados representados pelo conjunto x = {x1, x2, ..., xn}, podem
assumir qualquer valor. O ideal é preencher valores de x com a melhor combinação entre
eles de forma que o grafo seja menor possı́vel. Contudo não é possı́vel iterar valores
algoritmamente sem levar em consideração a função em questão (pois cada redução de
todo o grafo tem custo muito grande).
7

Figura 3.1: Somente os nós terminais

Então para se criar um grafo mais reduzido possı́vel pode-se fazer as seguintes pro-
posições de minimizações: Os precedentes dos nós terminais não especificados podem ser
substituı́dos por seus sucessores especificados ou não terminais. No caso de não terminais,
esta minimização gera demanda por mais minimizações. Por outro lado esta minimização
é uma generalização e só deve ser considerada no final da experimentações de todos os
valores possı́veis. Mais detalhes deste problema é abordado no capı́tulo 5.

3.3 Obtenção de um BDD analisando cada variável separada-


mente

Supondo que através de experimentação de uma mascara sobre a imagem obteve-se os


resultados da tabela 3.3.

p1 p2 p3 p4 Resultado
0 0 1 0 0
0 0 1 1 0
1 0 0 0 1
1 0 0 1 1
1 0 1 0 1
1 0 1 1 0
1 1 0 0 0
1 1 1 0 1
Tabela 3.1: Amostra de resultados

As colunas p1,p2,p3 e p4 da tabela 3.3 representam variáveis da função. Todas as


combinações de variáveis que não foram testados são nós terminais não especificados
(podem assumir valor 0 ou 1).
Pode-se a princı́pio olhar cada uma das variáveis separadamente. O objetivo desta
sı́ntese é saber se algum dos valores sucessores desta variável no BDD é ou não um nó
8

terminal. Assim está dividido nas tabelas 3.3 e 3.3 toda a tabela 3.3 em duas partes, uma
parte em que esta variável vale 1 e outra parte em que esta variável vale 0.
p1 p2 p3 p4 Resultado
0 0 1 0 0
0 0 1 1 0
Tabela 3.2: Os valores em que a variável “p1” vale 0

p1 p2 p3 p4 Resultado
1 0 0 0 1
1 0 0 1 1
1 0 1 0 1
1 0 1 1 0
1 1 0 0 0
1 1 1 0 1
Tabela 3.3: Os valores em que a variável “p1” vale 1

Esta divisão representa que pode-se gerar um BDD com a variável p1 como raiz cujos
valores sucessores são outros BDDs gerados recursivamente nas tabelas 3.3 e 3.3. A
representação gráfica é mostrada pela figura 3.2.

Figura 3.2: Possı́vel minimização

Como visto na figura 3.2 o sub-grafo representado pela tabela 3.3 pode ser minimizado
pelo nó folha “0”. Pelo fato de todos os valores resultados deste sub-grafo estarem em
“0”.
Esta divisão é importante para montar um grafo já parcialmente reduzido a partir da
tabela. Cada parte pode ser tratada como uma nova tabela e seus grafos resultantes são
os sub-grafos da tabela maior.
Algoritmo da obtenção do BDD a partir da tabela:

3.4 Obtenção de um BDD analisando cada implicante

Além de montar o grafo a partir de toda a tabela de implicantes pode-se utilizar uma
abordagem mais simplificada. Ao invés de partir do problema todo (tabela) e ir dividindo
9
//retorna um valor se todos os valores da tabela forem iguais.
//Ou retorna -1 se tiverem valores diferentes
funcao valor tabela(tabela){
para cada valor de (tabela, que será iterado em , valor)
se (tabela[0] != valor)
retorna(-1);
retorna(tabela[0]);
}
funcao monta bdd (tabela,variavel){
separa tabela(tabela);
Se (valor tabela(parte1) != -1 e valor tabela(parte2) != -1)
retorna raiz(variavel, valor tabela(parte1),valor tabela(parte2));
senao
se (variavel ¡= numero variaveis(tabela))
monta bdd(tabela,variavel++); // Passa pra proxima variavel
senao
retorna(raiz(variavel, monta bdd(parte1), monta bdd(parte2)));
}

Tabela 3.4: Algoritmo para obtenção de BDD apartir de tabela

esta em pedaços a ponto de tornar cada parte pequena e trivial pode-se partir do trivial
(implicante) até chegar no todo (resultado). Ambas são idéias comum dos algoritmos
recursivos visto de ângulos diferentes. Isto é feito gerando um pequeno grafo para cada
entrada e ir unindo com o grafo de resultado. Conseqüentemente o resultado é refinado em
tempo de que é testado os valores. Cada entrada pode ser representada numa estrutura
parecida com uma lista em que os nós possuem um sucessor não especificado.
Cada valor novo gera uma nova entrada no BDD de resultado nos lugares possivel-
mente onde existia um terminal não especificado. Quando, ao percorrer o resultado para
adicionar uma nova entrada, já existe um valor terminal e este é o mesmo do resultado
ocorre uma redundância. Por outro lado o valor deste nó terminal difere do resultado
testado ocorre uma colisão. As colisões a princı́pio podem ser tratadas removendo o nó
terminal antigo e trocando pelo resultado da nova entrada (ou mantendo o valor antigo).
A abordagem ideal é apresentada por Nina Hirata, seria armazenar uma contagem de
todos os conflitos e redundâncias e decidir pelo maior valor [1]. Porém tal técnica traria
um grande custo de memória e por enquanto pode ser simplificada neste trabalho em
primeiro momento.
Voltando ao algoritmo, por exemplo supondo que nos testes obtemos a tabela 1. O
primeiro valor testado tem valor {0,0,1,0} que resulta em 0. Este teste resulta num BDD
de resultado inicial como na figura 3.3.
A próxima experimentação percorre este grafo anterior e continua a partir do nó folha
não especificado (no caso de o próximo valor não ser redundante e nem conflito). O
resultado receberá as próximas experimentações até se tornar necessário reduzi-lo. Por
10

Figura 3.3: Alocação Dinâmica de um implicante

Figura 3.4: A árvore parcial após experimentação de dois implicantes

exemplo, ainda utilizando a tabela 3.3 da seção 3.3, supondo que o próximo valor testado
seja {0,0,1,1} que resulta em 0. O nó folha “0” substituirá o nó não especificado “x4”,
resultando num nó p4 com sucessores iguais e portanto necessitando redução. O resultado
é como expresso na figura 3.4.
Ao final das experimentações dos exemplos os nós não especificados podem assumir os
valores que geram a melhor redução. Ressalta-se que reduzir o grafo definindo valores não
conhecidos é uma generalização. O resultado das experimentações é uma árvore binária
cuja a profundidade máxima é o número de variáveis. Também quanto maior o número
de exemplos (menos conflitos e redundâncias), a tendência é aumentar exponencialmente
o número de nós. Pois cada experimentação em máscara de tamanho n adiciona ∼ = n2
nós.

3.5 Redução do BDD resultante com ITE

O Algoritmo ITE porposto por Bryant [4], consiste numa implementação de um BDD em
uma tabela, no caso deste trabalho alocada dinamicamente, para redução de um BDD e
conseqüentemente a transformação em um ROBDD.
Em cada nó visitante é definido uma variável que significa se este mesmo já foi visitado
11

anteriormente. Então a cada adição de uma nova variável é possı́vel consultar a estrutura
para saber se é possı́vel reutilizar uma estrutura já definida. O que reduz drasticamente
as redundâncias no grafo e possibilita um processamento mais rápido.

3.6 Descrição da implementação do algoritmo

Os passos apresentados nas seções interiores se interligam nesta seção. O algoritmo de


montagem do BDD utiliza, em primeiro momento, uma estrutura dinâmica como a des-
crita na seção 3.4. Neste ponto do algoritmo, o tamanho crescente da máscara gera um
grafo que aumenta na proporção direta (exemplo de demonstração no capı́tulo 5). Após
o fim das experimentações um procedimento varre em profundidade o grafo desalocando
nós não especificados. Este ponto não representa reduções significativas do tamanho do
BDD. Após este primeiro nı́vel de reduções o grafo pode passar pelo algoritmo do ITE da
seção 3.5, e então é gerado um ROBDD. A saı́da do programa é como será descrita no
capı́tulo 4.
12

4 ESPECIFICAÇÃO

O algoritmo é implementado sob a filosofia Unix de simplicidade. Disponibiliza-se dois


programas: um programa para aprendizado de operador e outro de aplicação em uma
imagem já existente. A interface disponı́vel é através da linha de comando, podendo ser
utilizada em conjunto com os aplicativos nativos GNU/Linux.

4.1 Especificação da representação de um BDD

Tanto a saı́da do programa de aprendizado quanto a entrada do programa que aplica o


BDD seguem a seguinte especificação:

1. Os caracteres T (Tê) e F (Éfe) especificam um nó terminal

2. Um número seguido de { } (chaves) especificam um novo nó não terminal. O próprio


número em questão significa o valor da variável avaliada naquele nó do grafo. Dentro
dos parênteses deve ter dois novos grafo separados por espaço

3. Um número seguido do caractere < (menor) significa, assim como nas chaves, um nó
não terminal. A diferença é que este nó será re-utilizado no futuro por outra parte
do BDD. A definição (nomenclatura) desta parte do BDD vem com um número logo
após o fechamento com o caractere > (maior)

4. O caractere ∗ (asterisco) seguido de um número significa a re-utilização de um ponto


já definido por caracteres < e > (menor e maior)

A melhor compreensão ilustra-se nos exemplos das figuras 4.1 e 4.2 acompanhado das
representações textuais dos BDDs.

Figura 4.1: Gráfico do BDD representado por:1{2{T F } F }


13

Figura 4.2: Gráfico do BDD representado por:1{3 < T F >1 2{∗1 F }}


14

5 RESULTADOS

5.1 Exemplos de resultados

Os resultados de aprendizado demonstram que quando há exemplos (amostragem) de ta-


manho suficiente é possı́vel aprender com exatidão o operado morfológico. As reduções
nos grafo de implicantes mostra que o algoritmo é capaz de captar a relevância (im-
plicação) de uma variável no operador. Exemplificando: O aprendizado de operador de
uma imagem nela mesma resultou em um grafo de 3 (três) vértices (uma variável, e duas
folhas {verdadeiro e falso}). Este resultado foi o mesmo independente do tamanho da
máscara. Isto significa que, mesmo utilizando um número muito grande de variáveis, as
minimizações reduziram as variáveis independentes. Isto é perceptı́vel em aprendizado de
outros operadores como dilatação e erosão.
A figura 5.1 demonstra o aprendizado de um operador de remoção de ruı́dos. A análise
baseia-se na imagem com ruı́do aleatório e montagem de um operador morfológico que
transforma a imagem com ruı́do na imagem original.

Figura 5.1: Imagem original, imagem com ruı́do aleatório e imagem com ruı́do aplicado
o operador aprendido

O operador (filtro) aprendido também pode servir para outras imagens com outros
ruı́dos aleatórios. A figura 5.2 ilustra outra imagem com outra fonte de ruı́do aleatório.
A figura 5.3 ilustra a imagem anterior 5.2 com aplicação do filtro de remoção de ruı́dos
aprendido no exemplo da figura 5.1.
Outro fato que merece atenção, e que na prática também verifica, é que a medida
que a máscara aumenta, se a imagem de entrada não aumentar na mesma proporção,
os exemplos de implicantes diminuem. Verifica-se com entradas crescentes de tamanho
de máscaras que a partir de um certo tamanho o operador perde a eficiência. Tomando
como exemplo a imagem 5.4 e utilizando um aprendizado de detecção de bordas a partir
de máscaras de diversos tamanhos. Em uma máscara 2x2 foi obtido o seguinte BDD:
0{1{2{3< T F >1 F } 2{F ∗ 1}} 1{2{3< F T >2 F } 2{F ∗ 2}}}
Este aplicado na imagem 5.3 recupera a imagem com bordas. Aplicado em uma terceira
imagem também é capaz de detectar as bordas desta imagem. O mesmo resultado acontece
com máscara 3x3.
15

Figura 5.2: Outra imagem com ruı́do aleatório

Figura 5.3: Figura 5.2 aplicado filtro aprendido na figura 5.1


16

Figura 5.4: Detector de bordas do Gimp[12], aprendido pelo algoritmo e re-aplicado na


imagem original

Utilizando uma máscara maior que 4x4 os operadores aprendidos aumentam exponen-
cialmente e não tem capacidade de detectar borda em outras imagens.

5.2 Aspectos técnicos da implementação

Na implementação do algoritmo obtendo os implicantes dinamicamente com a utilização


do ITE foi possı́vel notar que o uso de memória aumenta rapidamente até o fim dos
exemplos vindos da imagem operanda. Após realizada as experimentações e utilizando
as funções redução o uso de memória diminui lentamente, porém o grafo de resultado é
muitas vezes menor.
O gráfico da figura 5.5 apresenta o uso de memória do algoritmo com mascara tamanho
25X25 em uma imagem de 226X136 pontos. Notadamente o grafo de resultado tem
tamanho praticamente insignificante perto do tamanho total de memória utilizada. O
uso da Heap acompanha o desenho da alocação total justificada pelo uso da recursividade
(variáveis locais e argumentos).
A preocupação com uso extensivo de memória é perda do desempenho do programa em
geral devido ao desempenho da memória ser inferior a estruturas internas do processador.
Usando uma simulação de memória cache disponı́vel pelo aplicativo “Valgrind”[10], é
possı́vel ver que as faltas não devem representar grande perda de desempenho. A taxa de
ocorrência de faltas na cache L1 e L2 é compatı́vel com alguns programas de uso diário.
Uma possı́vel melhoria seria a redução em tempo de montagem do grafo de implicantes.
Porém esta otimização leva a outro paradigma na obtenção do resultado. De acordo com
as minimizações serem baseadas em generalização. Esta problemática pode ser abordada
17

Figura 5.5: Uso de memória ao longo da execução do algoritmo

com um problema simples como se segue. Supondo que através de experimentações de


uma máscara que possui 5 variáveis obteve-se os resultados da tabela 5.2.

A B C D E Resultado
0 0 1 0 1 1
0 1 0 0 0 0
1 0 1 0 1 1
0 1 1 1 0 1
0 0 1 1 1 1
1 0 1 0 0 0
0 0 1 0 0 1
1 1 1 0 1 1
1 1 0 1 0 0
Tabela 5.1: Amostra de exemplo com 5 variáveis

Esta tabela gera um BDD que após a redução inicial de terminais não especificados,
passa pela redução do ITE como na figura 5.6. Nota-se pela figura a unificação da variável
“C”. Porém esta unificação em um grafo que ainda pode receber novos valores descarta
informações que poderão ser úteis. Por exemplo, supondo que após esta redução precisa-
se adicionar um novo valor à tabela 5.2 como (1, 1, 1, 1, 1) e resultado igual a 0 (zero).
O percurso gerado pela experimentação no grafo leva a variável que foi reduzida e esta,
por sua vez, pode ser acessada por dois caminhos. As adições deste ponto (variável “C”)
em diante no grafo prejudicam a corretude do aprendizado.
Uma possı́vel solução seria desfazer a minimização reproduzindo o grafo e atualizando
os caminhos que chegam naquele ponto. A “expansão“, deste pedaço do grafo, deve
ser feita na direção das ”folhas“ para a ”raı́z“. Justificada pela possibilidade de novas
minimizações existirem abaixo da raı́z. Por outro lado esta solução é uma heurı́stica pois
mesmo que se consiga garantir a corretude ainda assim há perda de informações. Como
18

Figura 5.6: BDD gerado por 5.2 antes e após minimização ITE

por exemplo na expansão da variável ”C“ não é possı́vel considerar os valores que haviam
sido testados anteriormente para ”D“ e ”E“.
19

REFERÊNCIAS

[1] Nina Sumiko Tomita Programação automática de máquinas morfológicas binárias


baseadas em Aprendizado PAC Dissertação de mestrado, 1996.

[2] Nina Sumiko Tomita. Projeto Automático de Operadores: Explorando Conhecimentos


a Priori. Tese de doutorado, 2000.

[3] Maciel França Madeira, Heraldo e Pedrini, Hélio. Boolean Decomposition of Binary
Image Operator. Artigo, UFPR, 20XX.

[4] Randal E. Bryant. Graph-Based Algorithms for Boolean Function Manipulation. Ar-
tigo, IEEE, 1986

[5] Ricardo Jacob. Sı́ntese de Circuitos Lógicos Combinacionais. Livro, 10a Escola de
Computação ICI-Unicamp, Campinas, de 8 a 13 julho de 1996

[6] Thomas R. Shiple; Ramin Hojati; Alberto L. Sangiovanni-Vincentelli; Robert K. Bray-


ton. Heuristic Minimization of BDDs Using Don’t Cares. Departament of EECS,
University of California, Berkeley 1994

[7] de Micheli, Giovanni. Synthesis And Optimization of Digital Circuits. Livro, McGraw-
Hill Internations Editions. 1994

[8] Silvio do Lago Pereira. Diagrama de Decisão Binária. Artigo, Instituto de Matemática
e Estatı́stica USP 2007

[9] The Gimp Team. Gimp: Gnu Image Manipulation Program. Site, disponı́vel em:
http://www.gimp.org Acesso em: 06 de novembro de 2008

[10] Valgrind Developers. Valgrind. Site, disponı́vel em: http://valgrind.org Acesso em:
06 de novembro de 2008

[11] Bruce Perens. Efence: Eletric-Fence. Site, disponı́vel em:


http://freshmeat.net/projects/efence Acesso em: 06 de novembro de 2008

[12] The GCC Team GCC: Gnu Compiler Collection. Site, disponı́vel em:
http://gcc.gnu.org Acesso em: 06 de novembro de 2008

Você também pode gostar