Escolar Documentos
Profissional Documentos
Cultura Documentos
CURITIBA
2008
ALEXANDRE FELIPE MÜLLER DE SOUZA
CURITIBA
2008
i
SUMÁRIO
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
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
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
RESUMO
ABSTRACT
1 INTRODUÇÃO
1.1 Descrição
• 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.
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].
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).
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.
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
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.
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
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.
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
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.
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:
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)));
}
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
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.
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.
4 ESPECIFICAÇÃ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)
A melhor compreensão ilustra-se nos exemplos das figuras 4.1 e 4.2 acompanhado das
representações textuais dos BDDs.
5 RESULTADOS
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
Utilizando uma máscara maior que 4x4 os operadores aprendidos aumentam exponen-
cialmente e não tem capacidade de detectar borda em outras imagens.
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
[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
[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
[12] The GCC Team GCC: Gnu Compiler Collection. Site, disponı́vel em:
http://gcc.gnu.org Acesso em: 06 de novembro de 2008