• Nenhum resultado encontrado

Códigos de vizinhança para representação de imagens binárias e suas aplicações

N/A
N/A
Protected

Academic year: 2021

Share "Códigos de vizinhança para representação de imagens binárias e suas aplicações"

Copied!
70
0
0

Texto

(1)

Denise Jaeger Tenório Suassuna

Códigos de Vizinhança para representação de

imagens binárias e suas aplicações

Universidade Federal de Pernambuco posgraduacao@cin.ufpe.br http://cin.ufpe.br/~posgraduacao

RECIFE

2018

(2)

Denise Jaeger Tenório Suassuna

Códigos de Vizinhança para representação de imagens

binárias e suas aplicações

Trabalho apresentado ao Programa de Pós-graduação em Ciência da Computação do Centro de Informática da Universidade Fe-deral de Pernambuco como requisito parcial para obtenção do grau de Mestre em Ciência da Computação.

Orientador: Tsang Ing Ren

Coorientador: George Darmiton da

Cunha Cavalcanti

RECIFE

2018

(3)

Catalogação na fonte

Bibliotecária Monick Raquel Silvestre da S. Portes, CRB4-1217

S939c Suassuna, Denise Jaeger Tenório

Códigos de vizinhança para representação de imagens binárias e suas aplicações / Denise Jaeger Tenório Suassuna. – 2018.

69 f.: il., fig., tab.

Orientador: Tsang Ing Ren.

Dissertação (Mestrado) – Universidade Federal de Pernambuco. CIn, Ciência da Computação, Recife, 2018.

Inclui referências.

1. Processamento de imagem. 2. Visão computacional. I. Ren, Tsang Ing (orientador). II. Título.

621.367 CDD (23. ed.) UFPE- MEI 2018-069

(4)

Denise Jaeger Tenório Suassuna

Códigos de Vizinhança para Representação de Imagens Binárias e suas Aplicações

Dissertação de Mestrado apresentada ao Programa de Pós-Graduação em Ciência da Computação da Universidade Federal de Pernambuco, como requisito parcial para a obtenção do título de Mestre em Ciência da Computação

Aprovado em: 01/03/2018.

BANCA EXAMINADORA

____________________________________________________ Prof. Dr. Tsang Ing Ren

Centro de Informática/UFPE (Orientador)

______________________________________________________ Prof. Dr. Juliano Bandeira Lima

Departamento de Eletrônica e Sistemas / UFPE

___________________________________________________ Prof. Dr. Francisco Madeiro Bernardino Junior

(5)
(6)

Agradecimentos

Sou imensamente grata ao meu orientador Tsang Ing Ren por ter acreditado em meu trabalho e por ter persistido para eu continuar nesse projeto. Também agradeço à minha mãe Dirce Jaeger, que inicialmente me lançou o desafio a iniciar e finalizar o mestrado e também me ajudou com os mistérios da língua portuguesa. E por último, mas não menos importante, agradeço ao meu marido Paulo Suassuna Filho pelo incentivo e por estar sempre ao meu lado.

(7)

“Of all of our inventions for mass communication, pictures still speak the most universally understood language." (Walt Disney)

(8)

Resumo

Codificação de Vizinhança é um método de representação de imagens binárias base-ada na relação entre os pixels. A Codificação foi apresentbase-ada em publicações anteriores, assim como suas aplicações: compressão de imagens binárias sem perda, reconhecimento de forma, reconhecimento de caracteres manuscritos e Operadores de Vizinhança. A pre-sente dissertação levanta as limitações de suas aplicações e propõe diferentes soluções. Será proposto um novo algoritmo de compressão sem perda que alcança taxas compa-ráveis aos principais métodos reportados pela literatura, como o GIF, PNG e JBIG. Os operadores de vizinhança introduzidos em trabalhos anteriores implementavam a extra-ção de borda e uma versão limitada da dilataextra-ção e erosão, uma vez que não era possível escolher a máscara usada por essas operações. Os operadores foram ajustados segundo as funções fundamentais de morfologia matemática usando Códigos de Vizinhança, in-troduzindo a escolha da máscara, o que permitiu recriar as funções de erosão, dilatação,

hit-or-miss e seus derivados. No cenário de visão computacional, foram usados os

Códi-gos de Vizinhança para extrair descritores de imagens binárias, usados no problema de reconhecimento de caracteres manuscritos. Além dos descritores, será mostrada uma es-trutura de múltiplos classificadores alimentada pelos descritores para o reconhecimento de caracteres manuscritos.

Palavras-chaves: Representação de Imagens. Codificação. Morfologia Matemática.

(9)

Abstract

Neighborhood Coding is a binary image representation method based on pixels con-nection. Previous publications presented the Coding and its applications: lossless binary image compression, shape recognition, handwriting recognition, and Neighborhood Op-erators. The current dissertation shows their limitations and proposes new solutions. We suggest a new way to perform lossless binary image compression. The rates are as good as the known methods GIF, PNG, and JBIG.The Neighborhood Operators presented in previous publications implement border extraction and a limited version of erosion and dilation; since it was not possible to choose the mask. The Neighborhood Operators were adjusted according to the mathematical morphology transformations; we reproduced the dilation, erosion and hit-or-miss operators using Neighborhood Coding with a dynamic mask. Regarding computer vision, we can use Neighborhood Coding to extract binary im-age descriptors, applied to handwriting recognition. Besides the descriptors, we present a multiple classifier system that uses the descriptors as inputs for handwriting recognition.

Key-words: Image representation. Codification. Mathematical morphology.

(10)

Lista de ilustrações

Figura 1 – Direções dos elementos no Código da Cadeia para 4 e 8 conectividades correspondentemente. . . 22 Figura 2 – Exemplo de imagem sendo codificada pelo Código da Cadeia usando

os dois esquemas de conectividades, a primeira usa apenas 4 conexões enquanto segunda faz uso de todas 8. . . 22 Figura 3 – Redução da cadeia usando o método da re-amostragem. . . 22 Figura 4 – Demonstração gráfica da dilatação. A Figura (𝑎) é a imagem inicial,

(𝑏) é a máscara e (𝑐) é o resultado final da dilatação. Em (𝑑 − 𝑔) temos a sobreposição da máscara na imagem ponto a ponto. . . 25 Figura 5 – Demonstração gráfica da erosão. A Figura (𝑎) é a imagem inicial, (𝑏)

é a máscara e (𝑐) é o resultado final da erosão. Em (𝑑 − 𝑚) temos a sobreposição da máscara na imagem ponto a ponto. O ponto preenchido significa que este será mantido, enquanto que o ponto vazado significa que será descartado. . . 26 Figura 6 – Exemplo de imagem antes e depois do fechamento e da abertura

res-pectivamente. . . 27 Figura 7 – Representação gráfica de um elemento estruturante composto para

ope-rações hit-or-miss. 𝐵 equivale à junção da informação em 𝐵1 e 𝐵2. . . 28

Figura 8 – Exemplo de imagem que sofreu afinamento (original e transformada respectivamente). . . 28 Figura 9 – Elementos estruturantes usados para realizar o afinamento. Cada linha

é uma das máscaras rotacionada 4 vezes. . . 29 Figura 10 – Ilustração de uma imagem binária cujo pixel destacado é o centro do

código 𝜙 = (4, 3, 2, 1, 4, 3). . . . 31 Figura 11 – Cobertura de um Código de Vizinhança com diferentes configurações.

Estas são as configurações correspondentes às imagens: 𝛽𝑎 = (𝑏1, 𝑏2, 𝑏3, 𝑏4), 𝛽𝑏 = (𝑏5, 𝑏6, 𝑏7, 𝑏8) e 𝛽𝑐= (𝑏1, 𝑏2, 𝑏3, 𝑏4, 𝑏5, 𝑏6, 𝑏7, 𝑏8). . . 32

Figura 12 – Direção da codificação numa matriz de pixels. Em volta do pixel des-tacado existem duas regiões delimitadas usadas durante a codificação. . 33 Figura 13 – Passo a passo da compressão de imagens binárias usando Código de

Vizinhança. . . 36 Figura 14 – Imagem apple-3 e sua borda extraída . . . . 37 Figura 15 – Divisão da imagem em componentes conexos e extração da borda

(11)

Figura 16 – Exemplo de imagem codificada com apenas dois códigos Φ′ = {𝜙𝐴, 𝜙𝐵}.

A figura (𝑎) apresenta o código 𝜙𝐴posicionado na imagem, em seguida

temos em (𝑏) o código 𝜙𝐵. Em (𝑐) estão destacados os pixels que estão

cobertos pelos dois códigos ao mesmo tempo e por último (𝑑), a junção dos dois com algumas das funções de vizinhança descartadas. . . 38 Figura 17 – Exemplo da Codificação Aritmética para a sequência 𝐴𝐴𝐵𝐴𝐵𝐶. Cada

linha representa a escolha de um novo intervalo dado um caractere a ser codificado. O ponto em cada linha representa o mesmo valor 0,158. 40 Figura 18 – Passo a passo da compressão de imagens binárias usando Código de

Vizinhança proposto por (CARVALHO et al., 2010). . . 42 Figura 19 – Imagens usadas durante os experimentos de compressão, estas estão

apresentadas em tamanhos e proporções diferentes. As imagens (𝑎 − 𝑗) serão chamadas de 0 a 9. (𝑘 − 𝑜) são as imagens a, bell-2,

wingdings72-1, wingdings72-2 e wingdings72-3 respectivamente. (𝑝) é bat-12 e (𝑞) ouster. As imagens (𝑟 − 𝑡) são trechos de textos chamados courier12, oldeng16 e times12i. . . . 43 Figura 20 – Exemplo de dilatação aplicada a uma imagem do MNIST. Figura (𝑎)

é a imagem original, os pares (𝑏, 𝑐), (𝑑, 𝑒), (𝑓, 𝑔) e (ℎ, 𝑖) são as imagens dilatadas com seus respectivos elementos estruturantes (as proporções foram modificadas). Os quadrados marcados por um ponto representam a posição central do elemento estruturante e o centro do Código de Vizinhança. . . 46 Figura 21 – Exemplo de erosão aplicada a uma imagem do MNIST. Figura (𝑎) é

a imagem original, os pares (𝑏, 𝑐) e (𝑑, 𝑒) são as imagens que sofreram erosão com seus respectivos elementos estruturantes (as proporções fo-ram modificadas). Os quadrados marcados por um ponto representam a posição central do elemento estruturante e o centro do Código de Vizinhança. . . 47 Figura 22 – Exemplo de fechamento (𝑏) aplicado à imagem (𝑎) . . . . 48 Figura 23 – Exemplo de abertura (𝑏) aplicado à imagem (𝑎) . . . . 48 Figura 24 – Os 8 elementos estruturantes usados no afinamento implementado. O

quadrado preto marcado é o centro da máscara, os demais representam

𝑐𝑖 = 1, os cinza são 𝑐𝑖 = −1 e os brancos 𝑐𝑖 = 0. Por exemplo, a

primeira imagem seria representada pelo vetor do Código de Vizinhança (𝑐1, ..., 𝑐8) = (1, 1, 0, −1, −1, −1, 0, 1) . . . 50

Figura 25 – Exemplo de afinamento (𝑏) aplicado à imagem (𝑎). . . . 50 Figura 26 – Exemplo de Extração de bordas (𝑏) aplicado à imagem (𝑎) . . . . 50 Figura 27 – Imagem original (𝑎) e imagem dilatada por um elemento estruturante

(12)

Figura 28 – Exemplo de dois tamanhos de elementos estruturantes, o primeiro mede

1 e o segundo mede 2. . . 52

Figura 29 – Comparação do tempo de execução da dilatação de uma imagem com diferentes elementos estruturantes. . . 53

Figura 30 – Exemplo de imagens do MNIST. As imagens de (𝑎) a (𝑗) são as versões originais após a binarização enquanto as imagens de (𝑘) a (𝑡) foram recortadas e redimensionadas. . . 55

Figura 31 – Esquema do agrupamento realizado nas imagens de treino. . . 56

Figura 32 – Esquema do agrupamento por zona realizado nas imagens de treino. . . 56

Figura 33 – Projeção da imagem em dois vetores horizontais e verticais . . . 57

Figura 34 – Divisões da imagem usadas para o descritor de Multi Zonas. . . 58

Figura 35 – Esquema dos múltiplos classificadores. . . 60

(13)

Lista de tabelas

Tabela 1 – Resultados em bytes. A melhor taxa obtida para cada imagem está sublinhada, a segunda melhor está destacada em negrito. . . 44 Tabela 2 – Média dos erros e suas margens de erro para os descritores CEO, CES,

MZ e AB. A linha Total mostra o erro encontrado pro conjunto de testes inteiro, enquanto as linhas 1 a 9 mostram os erros para cada dígito específico de teste. . . 62 Tabela 3 – Média dos erros e e suas margens de erro para os descritores AH, AM

e IAZ. A linha Total mostra o erro encontrado pro conjunto de testes inteiro, enquanto as linhas 1 a 9 mostram os erros para cada dígito específico de teste. . . 63 Tabela 4 – Média dos erros e seus intervalos de confiança para diferentes conjuntos

de descritores. Cada coluna representa uma combinação de descritores, e as linhas mostram suas taxas de erro com intervalos de confiança. . . 64 Tabela 5 – Matriz de confusão com valores proporcionais dos acertos e erros por

classe. Resultado extraído de um teste com os descritores CES, CEO, MZ, AH, AB e AM. As colunas correspondem ao verdadeiro dígito da imagem enquanto as linhas são relativas às classificações escolhidas pelo classificador. Por exemplo, 98, 3% das vezes o dígito 0 foi corretamente classificado. 0, 3% das vezes foi erroneamente confundido com o dígito 2, 0, 1% com 5, e assim por diante. . . . 65

(14)

Lista de abreviaturas e siglas

AB Agrupamento Binário. AH Agrupamento Histograma. AM Agrupamento Montante.

CCITT Consultative Committee for International Telephony and Telegraphy. CEO Características Estruturais Original.

CES Características Estruturais Simples. CV Código de Vizinhança.

CV1 Código de Vizinhança versão 1. CV2 Código de Vizinhança versão 2. GIF Graphics Interchange Format. IAZ Índice de Agrupamento por Zona.

IEC International Electrotechnical Commission. ISO International Organization for Standardization. ITU Telecommunication Standardization Sector . JBIG Joint Bi-level Image Experts Group. LZW Lempel–Ziv–Welch.

MDS Multidimensional Scaling. MLP Multilayer Perceptron.

MPEG-7 Multimedia Content Description Interface. MZ Multi Zona.

PNG Portable Network Graphics. RLE Run-length Encoding.

(15)

Lista de símbolos

𝜙 Vetor de um Código de Vizinhança

𝑏𝑖 Função que determina uma direção de vizinhos 𝑖 do Código de

Vizi-nhança

𝛽 Configuração de um Código de Vizinhança, um conjunto de funções 𝑏𝑖

Φ Conjunto de códigos 𝜙 que representa uma imagem

Π Conjunto de coordenadas de uma imagem

𝜎 Lista de bits para determinar que funções 𝑏𝑖 de 𝛽 estão sendo usados

em um código 𝜙

𝜉 Par de um código 𝜙 com seu 𝜎

(16)

Sumário

1 INTRODUÇÃO . . . 17

1.1 Motivação . . . 18

1.2 Objetivos e contribuições . . . 18

1.3 Organização do documento . . . 19

2 CODIFICAÇÃO DE IMAGENS E OPERAÇÕES . . . 20

2.1 Imagens binárias . . . 21 2.2 Representação de imagens . . . 21 2.2.1 Código da Cadeia . . . 21 2.3 Compressão de imagens . . . 23 2.3.1 Tipos de compressão . . . 23 2.3.2 Principais padrões . . . 24 2.4 Morfologia matemática . . . 25 2.4.1 Dilatação e Erosão . . . 25 2.4.2 Abertura e Fechamento . . . 26 2.4.3 Hit-or-miss . . . 27 2.4.4 Afinamento . . . 28 2.5 Reconhecimento de caracteres . . . 29 3 CÓDIGO DE VIZINHANÇA . . . 30 3.1 Estrutura do código . . . 30 3.1.1 Tipos de Código . . . 32 3.2 Codificação da imagem . . . 33 3.3 Reconstrução da imagem . . . 33 3.4 Redução . . . 34 4 COMPRESSÃO . . . 35 4.1 Pré-processamento . . . 36 4.2 Redução de códigos . . . 37 4.3 Comprimindo códigos . . . 37 4.3.1 Codificação aritmética . . . 39 4.4 Formato do arquivo . . . 41 4.5 Versões . . . 41 4.6 Experimentos . . . 42 5 MORFOLOGIA MATEMÁTICA . . . 45 5.1 Dilatação . . . 45

(17)

5.2 Erosão . . . 46 5.3 Abertura e Fechamento . . . 47 5.4 Hit-or-miss . . . 48 5.4.1 Afinamento . . . 49 5.5 Extração de bordas . . . 50 5.6 Custo computacional . . . 51 6 RECONHECIMENTO DE CARACTERES . . . 54 6.1 Pré Processamento . . . 54 6.2 Descritores . . . 55

6.2.1 Características Estruturais Original (CEO) . . . 57

6.2.2 Características Estruturais Simples (CES) . . . 57

6.2.3 Multi Zona (MZ) . . . 58

6.2.4 Agrupamento Binário (AB) . . . 58

6.2.5 Agrupamento Histograma (AH) . . . 59

6.2.6 Agrupamento Montante (AM) . . . 59

6.2.7 Índice de Agrupamento por Zona (IAZ) . . . 59

6.3 Análise de Diversidade . . . 60

6.4 Experimentos . . . 61

7 CONCLUSÃO E TRABALHOS FUTUROS . . . 66

(18)

17

1 INTRODUÇÃO

Nos últimos anos, tem sido crescente o interesse pela área de processamento de imagens e visão computacional, bem como por suas aplicações. Com a popularização dos

smartpho-nes ligados à Internet e redes sociais, a difusão de conteúdo visual tem sido cada vez mais

significativa e, por isso mesmo, tem demandado novos olhares da comunidade científica sobre o fenômeno, suas implicações e desafios.

Uma das primeiras aplicações no ramo de processamento de imagens foi o aprimora-mento da qualidade da impressão das imagens digitais transmitidas através do sistema

Bartlane (GONZALEZ; WOODS, 2012). Esta foi uma técnica inventada em 1920 que per-mitia a transferência de imagens de jornais digitalizadas via cabo submarino entre Nova York e Londres. Entretanto, foi o advento dos primeiros computadores digitais o verda-deiro propulsor na área.

Desde a década de 1960, é expressiva a aplicação de processamento de imagens nas mais diferentes esferas (FILHO; NETO, 1999). Para a Medicina, foram desenvolvidas

téc-nicas voltadas à interpretação de imagens geradas por máquinas de raio-X, ultrassom, tomografia e ressonância magnética, dentre outras. A área da Biologia também foi benefi-ciada com métodos de melhoramento de imagens geradas por microscópios, auxiliando em atividades e diagnósticos rotineiros e repetitivos. Práticas semelhantes são realizadas no campo da geografia, meteorologia e geoprocessamento, como o processamento de imagens captadas por satélites. Temos também aplicações mais próximas do usuário comum, como leitores de códigos de barras, reconhecimento de faces, tratamento de fotos e interpretação de textos em imagens.

O processamento digital de imagens se baseia em duas principais áreas de aplicação: o aprimoramento da informação em forma de imagem para a percepção humana; e o processamento de imagens para armazenamento e análise computacional. Algumas das técnicas usadas são consideradas comuns à área de visão computacional, uma vez que não encontraremos uma delimitação clara entre os dois campos de estudo (GONZALEZ; WOODS, 2012).

Como representar a informação de uma imagem é um dos problemas da área de pro-cessamento de imagens. Um dos tipos mais importantes é a representação espacial (JäHNE, 2005). Os computadores só conseguem processar informação como uma sequência de nú-meros. Para uma imagem ser processada, esta precisa ser representada por uma sequência bidimensional de pontos. Esses pontos, ou pixels, são a unidade elementar da imagem e trazem como informação a quantidade de irradiação, ou cor, em um ponto específico da imagem.

Em relação à representação de uma região da imagem, existem dois tipos: caracte-rísticas externas ou internas, (GONZALEZ; WOODS, 2012). A externa traz características

(19)

Capítulo 1. INTRODUÇÃO 18

como o tamanho e forma, enquanto a interna traz características como cor e textura. Como exemplo para representação do tipo externa temos o Código da Cadeia, que faz uso da relação entre os pixels da borda da imagem para montar o código. Outro método de representação de imagens que faz uso da relação entre os pixels é o Código de Vizinhança, objeto de estudo da presente dissertação.

1.1 Motivação

Para que uma imagem digital seja armazenada na memória de uma máquina, aquela deve estar codificada em algum formato. Muitos formatos de imagens implementam um al-goritmo de compressão, caso contrário podem gerar arquivos demasiadamente grandes. Dependendo da aplicação, uma velocidade alta de codificação e decodificação são carac-terísticas desejadas.

Imagens binárias são imagens digitais cujo pontos podem assumir apenas dois valores, comumente representados pelo preto e branco. Seu formato mais básico de armazena-mento, bitmap, pode consumir muita memória. Suponhamos um acervo de jornais digita-lizados em imagens monocromáticas, onde as figuras geradas sejam tão grandes quanto as folhas dos jornais impressos. Se não for usado um método apropriado de compres-são, os arquivos podem ficar muito grandes, tornando-se impraticável guardá-los em uma biblioteca digitalizada.

Além de conservar documentos digitalizados em computadores, imagens binárias tam-bém são usadas em faxes, já que os modelos clássicos imprimem apenas imagens mono-cromáticas. O tamanho do arquivo da imagem é uma grande preocupação para o uso em faxes, uma vez que estas imagens serão transmitidas via linha telefônica.

Com o avanço da tecnologia, surgiram outros tipos de aplicações mais complexas, como o reconhecimento de caracteres manuscritos. A tendência é automatizar o trabalho do ser humano e o reconhecimento de manuscritos é um grande passo para isto. Alguns sistemas de reconhecimento têm como entrada os descritores extraídos de imagens binárias que contêm os caracteres (MARCHAND-MAILLET; SHARAIHA, 2000).

Além das aplicações aqui citadas, como compressão e reconhecimento de caracteres, existem outras aplicações que usam imagens binárias. Para cada aplicação, temos uma série de técnicas descritas na literatura, e cada uma trata a imagem de um modo diferente.

1.2 Objetivos e contribuições

Diante da conjuntura apresentada, a presente abordagem retoma a Codificação de Vizi-nhança, representação para imagens binárias inicialmente proposta por (TSANG; TSANG; DYCK, 1999). Algumas aplicações para a Codificação de Vizinhança já foram apresenta-das em publicações prévias e esta dissertação tem como objetivo ampliar estes trabalhos e melhorar seus resultados.

(20)

Capítulo 1. INTRODUÇÃO 19

A compressão de imagens binárias sem perdas usando Código de Vizinhança foi apre-sentada em (CARVALHO et al., 2010). A implementação sugerida altera o algoritmo prin-cipal de codificação de Huffman para Codificação Aritmética, entre outras mudanças menores. Tais mudanças trouxeram aumento da taxa de compressão.

As operações morfológicas apresentadas em (CARVALHO et al., 2012) são limitadas a um único elemento estruturante. A nova proposta permite realizar as operações tais quais suas definições, com elemento estruturante variável.

Uma solução para o problema de reconhecimento de caracteres manuscritos usando o Código de Vizinhança foi proposto por (TSANG; TSANG; DYCK, 1999). O algoritmo apresentado realiza uma redução nos códigos das imagens gerando um descritor que é usado como entrada em uma rede neural responsável pelo reconhecimento. Em contraste à proposta original, esta dissertação apresenta uma série de descritores para realizar o reconhecimento de caracteres manuscritos e implementa uma rede neural com múltiplos classificadores.

1.3 Organização do documento

O Capítulo 2 apresenta conceitos básicos para o entendimento deste documento. Nele, são apresentadas noções de representação de imagens binárias, compressão, morfologia mate-mática e reconhecimento de caracteres. O Capítulo 3, por sua vez, explica detalhadamente o Código de Vizinhança, assim como a codificação e decodificação de imagens neste for-mato. Os Capítulos 4, 5 e 6 trabalham cada aplicação da Codificação de Vizinhança, compressão, morfologia matemática e reconhecimento, respectivamente. Finalmente, o Capítulo 7 apresenta as conclusões e perspectivas para trabalhos futuros.

(21)

20

2 CODIFICAÇÃO DE IMAGENS E OPERAÇÕES

Segundo definição básica da Física, imagem vem a ser a representação de um objeto pela reunião dos raios luminosos emanados deste depois de uma reflexão. Também usamos a palavra imagem para descrever um objeto que remete a uma percepção visual, o qual pode ser bidimensional (como fotografias) ou tridimensional (como estátuas).

Imagem digital é uma representação de uma imagem bidimensional que pode ser arma-zenada e manipulada em meio eletrônico. Imagens digitais são divisíveis em pontos cujos valores são finitos e discretos, em contraste a imagens analógicas que não possuem uma di-visão discreta. Uma imagem digital é definida por uma função bidimensional 𝑓 (𝑥, 𝑦), onde a tupla de valores 𝑥 e 𝑦 correspondem a uma coordenada do plano cartesiano e o resultado da função é a intensidade da cor naquele ponto. Existem diversos tipos de imagens no que se refere à cor. Imagens coloridas são aquelas cujos pontos podem assumir uma cor dentro de um intervalo calculado pela quantidade de vermelho, verde e azul, também conhecido como RGB. Imagens em tons de cinza são limitadas à variação de branco a preto. O tipo mais simples é a imagem binária, composta apenas por branco e preto: objeto de estudo da presente dissertação. Além da fotografia, existem outras formas de criar imagens digi-tais, como a digitalização de documentos por escâneres ou faxes. Em comum, o fato de que todas estas modalidades mantêm imagens digitais em um meio eletrônico. Para que isto se torne possível, estas imagens devem estar representadas por uma codificação ou formato. A Seção 2.2 apresenta alguns conceitos básicos sobre representações de imagens. Uma imagem digital armazenada em um meio eletrônico, como na memória de um computador, por exemplo, pode ocupar muito espaço dependendo do formato escolhido. Razão pela qual alguns modelos são focados em compressão. A propósito do tema, a Seção 2.3 tratará de apresentar alguns destes formatos.

Outras tarefas realizadas em imagens binárias são relacionadas à morfologia mate-mática. Estas são funções baseadas na forma e topologia das imagens. Os operadores morfológicos podem ser utilizados durante o pré-processamento de outra atividade mais complexa, por exemplo, para melhorar uma imagem de uma impressão digital para identi-ficação. Muitos dos processamentos complexos, como reconhecimento de caracteres ou até mesmo compressão, fazem pré-processamentos na imagem para extrair informações dela. A Seção 2.4 explica os operadores morfológicos básicos. O problema de reconhecimento de caracteres manuscritos também será introduzido neste capítulo, mais especificamente, na Seção 2.5.

(22)

Capítulo 2. CODIFICAÇÃO DE IMAGENS E OPERAÇÕES 21

2.1 Imagens binárias

Esta abordagem trabalha especificamente com imagens binárias. Estas são caracterizadas por possuírem apenas duas cores possíveis para cada pixel, normalmente preto ou branco. Esse tipo de imagem pode ser representada por um mapa de bits, onde 1 corresponde à cor de primeiro plano e 0 à cor de segundo plano. Outra forma de descrever esse tipo de imagem vem a ser uma lista dos pixels de primeiro plano (tuplas com a localização (𝑥, 𝑦) ∈ N × N).

2.2 Representação de imagens

Uma das representações de imagens mais básica é a lista dos pixels que esta contém, porém esta forma é usada apenas para extração de descritores simples, como histogramas, e para visualização da imagem. É interessante usar esquemas que comprimam os dados brutos em uma representação mais utilizável para processamentos.

É importante ressaltar a diferença entre representação e descrição. Por exemplo, a região pode ser representada pela borda, e esta pode ser descrita por características como altura, orientação e número de cavidades. Uma propriedade desejável dos descritores é que estes sejam invariantes ao tamanho, rotação e translação da imagem (GONZALEZ; WOODS, 2012).

Existem dois tipos de representação: externa e interna. Na primeira, a região pode ser representada pela borda e seu foco é a descrição de formas. Enquanto isso, a interna armazena informações dos pixels das regiões, ao mesmo tempo em que tem como foco principal a geração de descritores com as propriedades das regiões (como cor e textura).

2.2.1 Código da Cadeia

Código da Cadeia é uma forma de representação conceituada do tipo externa ( GONZA-LEZ; WOODS, 2012). Este codifica a borda das regiões com uma sequência de elementos

conectados como uma lista encadeada. Cada item aponta para o próximo da sequência especificando uma direção (representada por um inteiro). Esta representação se baseia em 4 ou 8 conectividades. A Figura 1 mostra as possíveis direções e seus códigos correspon-dentes. A Figura 2 mostra um exemplo de uma imagem sendo codificada pelo Código da Cadeia.

A borda da região é codificada no sentido horário e o ponto inicial é arbitrário. Mesmo que o código resultante seja circular, qualquer ponto é elegível como o início da cadeia. Existem alguns métodos de normalização que auxiliam na determinação desse ponto ini-cial. Um destes métodos enxerga a sequência como um número inteiro. O ponto inicial será aquele que gerar o menor valor correspondente possível.

Dependendo da aplicação, manter todos os elementos da cadeia pode ser uma escolha pouco eficiente, já que esta pode ser muito grande. Alguns detalhes da borda podem não

(23)

Capítulo 2. CODIFICAÇÃO DE IMAGENS E OPERAÇÕES 22

Figura 1 – Direções dos elementos no Código da Cadeia para 4 e 8 conectividades corres-pondentemente.

Fonte: Elaborada pela autora

Figura 2 – Exemplo de imagem sendo codificada pelo Código da Cadeia usando os dois es-quemas de conectividades, a primeira usa apenas 4 conexões enquanto segunda faz uso de todas 8.

Fonte: Elaborada pela autora

Figura 3 – Redução da cadeia usando o método da re-amostragem.

Fonte: Elaborada pela autora

estar associados à forma e geram mais elementos. Existe uma técnica que realiza a re-amostragem da imagem em uma grade maior (menor resolução) e uma nova borda é criada pela proximidade da original, Reduzindo assim a quantidade de elementos necessários para representar uma imagem, mantendo uma forma similar. Exemplo da redução na Figura 3.

(24)

Capítulo 2. CODIFICAÇÃO DE IMAGENS E OPERAÇÕES 23

2.3 Compressão de imagens

A forma mais simples de armazenar uma imagem binária digital é guardando seu mapa de

bits em um arquivo. Não seria problema armazenar uma imagem pequena no seu formato

mais básico, mas quando esta é grande, o arquivo gerado pode ocupar muito espaço na memória. Para algumas aplicações é desejável que a imagem assuma um formato cujo arquivo seja pequeno, por exemplo, para transferência de imagens via fax.

Para alcançar o tamanho desejado, a imagem codificada passa por uma compressão. Um modelo de compressão consiste em dois componentes: um codificador e um decodifica-dor. Enquanto o primeiro comprime a imagem, o segundo recebe o resultado da compres-são e a recupera. Esse processo reduz a quantidade de dados necessários para representar a imagem. Imagens bidimensionais possuem três tipos principais de redundâncias: de có-digo, espacial e informações irrelevantes. As tarefas dos métodos de compressão consistem em eliminar essas redundâncias.

Código é o sistema de símbolos usado para representar a informação. Suponha que uma lista de inteiros represente a imagem. Um inteiro normalmente ocupa 32 bits quando armazenado. Na maioria dos casos, os valores da lista não precisam usar todos os bits. Uma forma de reduzir a redundância de código nesse caso é usar apenas os bits necessários para armazenar o maior valor da lista.

Os pixels das imagens são correlacionados espacialmente, ou seja, existem regiões cujos dados são repetidos. Este tipo de informação está replicado desnecessariamente, evento também conhecido como redundância espacial. Quando essa repetição ocorre entre quadros de um vídeo é chamada de redundância temporal.

Muitas vezes, pequenos detalhes da imagem são imperceptíveis ao olho humano e demandam espaço para armazenagem. Esses detalhes que não são perceptíveis são consi-derados descartáveis e são removidos durante uma compressão com perda.

2.3.1 Tipos de compressão

Existem dois tipos de compressão: com perdas e sem perdas. O primeiro busca alcançar taxas de compressão maiores, porém, há perda de informações da imagem. Ou seja, na compressão com perdas a versão recuperada não é igual à original. Esse método é usado quando se deseja obter arquivos menores e a diferença gerada na imagem não é perceptível ou é indiferente. Na compressão sem perdas, por sua vez, a imagem recuperada é exa-tamente igual a original. Entretanto, na compressão sem perdas as taxas de compressão tendem a ser menores.

Alguns formatos de imagens oferecem os dois tipos de compressão. Ademais, alguns disponibilizam uma variedade de níveis de perda, com diferentes taxas de compressão.

(25)

Capítulo 2. CODIFICAÇÃO DE IMAGENS E OPERAÇÕES 24

2.3.2 Principais padrões

Os padrões mais importantes de compressão de imagens binárias são CCITT Grupo 3, CCITT Grupo 4, JBIG e JBIG2 (Padrão Internacional ISSO/IEC 14492). Outros pa-drões conhecidos que não são exclusivos mas podem ser aplicados a imagens binárias, são JPEG2000, GIF e PNG, (BARNI, 2006).

CCITT Grupo 3 e CCITT Grupo 4 são dois protocolos de transmissão e compressão para imagens binárias proposto por Consultative Committee for International Telephony

and Telegraphy (CCITT). O padrão Grupo 3 incorpora técnicas simples e rápidas de

compressão de dados, como as codificações Run-length Encoding (RLE) e Huffman. Muitos documentos e arquivos de fax suportam a compressão Grupo 3. O padrão Grupo 4 foi publicado em 1984 com uso designado à rede de dados. Este alcança aproximadamente o dobro de compressão do Grupo 3.

Joint Bi-level Image Experts Group (JBIG), ou JBIG1, foi criado por International Organization for Standardization (ISO) e CCITT e é um padrão de compressão para

imagens binárias sem perdas. Este também é aplicado em aparelhos de fax e faz uso da codificação aritmética.

O estado da arte em compressão de imagens binárias é a versão posterior ao JBIG1, o JBIG2. Este foi designado para uso na internet e foi criado em conjunto pelo

Telecommu-nication Standardization Sector (ITU) e ISO/International Electrotechnical Commission

(IEC). Ele oferece compressão com ou sem perdas. Mesmo sem perdas, pode obter taxas 3 a 5 vezes menores que o Grupo 4, e 2 a 4 vezes menores que o JBIG1. Além disso, JBIG2 realiza a compressão do documento de imagem separando esta em regiões predefinidas: meio-tom, texto e outros. Uma vez realizada a classificação, o JBIG2 aplica um método específico para cada uma delas, obtendo assim melhores taxas de compressão.

JPEG2000, ou JP2, é um aperfeiçoamento do formato anterior, JPEG, cujo objetivo é realizar compressão de imagens coloridas, apesar de que é possível trabalhar com imagens binárias com taxas similares ao Grupo 4. A vantagem deste é que pode usar o mesmo formato para os dois tipos de imagem: colorida e binária. Outra propriedade do JPEG2000 é a multirresolução. Considerando-se que a imagem arquivada normalmente tem uma resolução alta, esta gera um mapa de bits muito grande.

Graphics Interchange Format (GIF), criado por CompuServe em 1987, foi destinado a

ser um formato de arquivo multiplataforma, razão pela qual ainda é usado na web. Este usa o algoritmo Lempel–Ziv–Welch (LZW) que realiza uma compressão sem perda e é limitado a 256 cores. Este padrão permite melhorar a taxa de compressão configurando alguns parâmetros.

Portable Network Graphics (PNG) foi criado como uma forma alternativa para as

restrições legais do algoritmo de compressão do GIF. Este performa compressão sem perda usando uma variação do algoritmo LZ77.

(26)

Capítulo 2. CODIFICAÇÃO DE IMAGENS E OPERAÇÕES 25

Figura 4 – Demonstração gráfica da dilatação. A Figura (𝑎) é a imagem inicial, (𝑏) é a máscara e (𝑐) é o resultado final da dilatação. Em (𝑑 − 𝑔) temos a sobreposição da máscara na imagem ponto a ponto.

(a) (b) (c)

(d) (e) (f) (g)

Fonte: Elaborada pela autora

2.4 Morfologia matemática

Morfologia matemática é um conjunto de teorias e técnicas usadas para extração de com-ponentes, representação e descrição de formas. Originalmente desenvolvida por ( MATHE-RON, 1975;SERRA, 1983;SERRA, 1986;SERRA, 1988) para imagens binárias apenas, poste-riormente estendido para tons de cinza por (STERNBERG, 1986). Esta seção irá apresentar os principais operadores morfológicos para imagens binárias digitais.

2.4.1 Dilatação e Erosão

Dilatação e Erosão são as operações fundamentais da morfologia matemática. Outras funções mais complexas são construídas a partir destas duas. A ideia básica dos métodos consiste em sondar a imagem com um elemento estruturante analisando se este se encaixa ou não na figura ponto a ponto.

A dilatação realiza o crescimento de uma região 𝐴 de acordo com o elemento estru-turante 𝐵, também chamado de máscara. O ponto central de 𝐵 é posicionado contra cada ponto de 𝐴, mesmo que não haja encaixe, o desenho da máscara é refletido na nova imagem. A Figura 4 ilustra uma dilatação. A função de dilatação é formalizada como

𝐴 ⊕ 𝐵 = {𝑧|( ^𝐵)𝑧∩ 𝐴 ̸= ∅}, (2.1)

onde ^𝐵 é a reflexão de 𝐵,

^

(27)

Capítulo 2. CODIFICAÇÃO DE IMAGENS E OPERAÇÕES 26

Figura 5 – Demonstração gráfica da erosão. A Figura (𝑎) é a imagem inicial, (𝑏) é a máscara e (𝑐) é o resultado final da erosão. Em (𝑑 − 𝑚) temos a sobreposição da máscara na imagem ponto a ponto. O ponto preenchido significa que este será mantido, enquanto que o ponto vazado significa que será descartado.

(a) (b) (c)

(d) (e) (f) (g) (h)

(i) (j) (k) (l) (m)

Fonte: Elaborada pela autora

e (𝐵)𝑧 é a translação de 𝐵 pelo ponto 𝑧 = (𝑧1, 𝑧2)

(𝐵)𝑧 = {𝑐|𝑐 = 𝑏 + 𝑧, para 𝑏 ∈ 𝐵}. (2.3)

Assim como na dilatação, a erosão compara todos os pontos de 𝐴 com 𝐵,

𝐴 ⊖ 𝐵 = {𝑧|( ^𝐵)𝑧 ⊆ 𝐴}. (2.4)

Quando o ponto central de 𝐵 é posicionado contra um ponto qualquer de 𝐴, e toda a extensão de 𝐵 está contida em 𝐴, consideramos que houve um encaixe. Se a máscara estiver encaixada, o ponto em que este se localiza será adicionado à imagem final, caso contrário, será descartado. A Figura 5 tem um exemplo da dilatação sendo aplicada passo a passo.

2.4.2 Abertura e Fechamento

Abertura e fechamento são operações realizadas com a combinação de dilatação e erosão. Abertura irá atenuar a borda das figuras e poderá remover áreas estreitas, como linhas.

(28)

Capítulo 2. CODIFICAÇÃO DE IMAGENS E OPERAÇÕES 27

Figura 6 – Exemplo de imagem antes e depois do fechamento e da abertura respectiva-mente.

Fonte: Montagem elaborada pela autora, imagem de uma impressão digital proveniente

da base FVC200 (MALTONI D. MAIO, 2009)

Enquanto isso, fechamento preenche pequenos espaços em branco, como fendas ou buracos na imagem, e também pode unir linhas com falhas ou pedaços próximos do desenho.

A abertura é realizada com a dilatação do resultado de uma erosão,

𝐴 ∘ 𝐵 = (𝐴 ⊖ 𝐵) ⊕ 𝐵. (2.5)

O fechamento é o contrário da abertura, uma erosão da dilatação,

𝐴 ∙ 𝐵 = (𝐴 ⊕ 𝐵) ⊖ 𝐵. (2.6)

2.4.3 Hit-or-miss

A transformação hit-or-miss é uma ferramenta básica para detecção de formas. Depen-dendo do elemento estruturante, diferentes funções podem ser obtidas. A operação tem uma máscara diferente, esta é composta por duas partes 𝐵 = (𝐵1, 𝐵2), onde 𝐵1 é disjunto

de 𝐵2,

𝐴 ⊙ 𝐵 = (𝐴 ⊖ 𝐵1) − (𝐴 ⊕ 𝐵2). (2.7)

Uma vez que 𝐵1 e 𝐵2 não se cruzam, muitas vezes a máscara é representada graficamente

com uma única imagem com três valores possíveis para seus pixels, iremos chamar-la de máscara composta 𝐵. Os quadrados marcados com um 𝑥 representam os pixels contidos em 𝐵1, os que estão preenchidos de cinza, são os pontos contidos em 𝐵2 e não importa

para os que estão em branco. A Figura 7 mostra o exemplo de uma máscara desenhada como uma única imagem.

(29)

Capítulo 2. CODIFICAÇÃO DE IMAGENS E OPERAÇÕES 28

Figura 7 – Representação gráfica de um elemento estruturante composto para operações

hit-or-miss. 𝐵 equivale à junção da informação em 𝐵1 e 𝐵2.

Fonte: Elaborada pela autora

Figura 8 – Exemplo de imagem que sofreu afinamento (original e transformada respecti-vamente).

(a) (b)

Fonte: Elaborada pela autora usando a fonte Arial

2.4.4 Afinamento

Afinamento (ou thinning em inglês) tem como objetivo afinar ao máximo uma imagem, o resultado se assemelha a um esqueleto, Figura 8. Este operador preserva a topologia, mantendo a extensão e conectividade dos componentes.

Sua equação é baseada em uma recursão de hit-or-miss e diferentemente dos operadores mais básicos, usa um conjunto de máscaras {𝐵} = {𝐵1, 𝐵2, ..., 𝐵𝑛}. Cada interação utiliza uma das máscaras em {𝐵},

𝐴 ⊗ 𝐵 = 𝐴 − (𝐴 ⊙ 𝐵). (2.8)

A recursão termina quando 𝐴 ⊗ {𝐵} for igual a 𝐴, para esse critério ser alcançado,

𝐴 ⊗ {𝐵} = ((...((𝐴 ⊗ 𝐵1) ⊗ 𝐵2)...) ⊗ 𝐵𝑛) (2.9) pode ser executada várias vezes.

Para realizar o afinamento, {𝐵} é criado a partir de 2 máscaras rotacionadas 4 vezes (0∘, 90∘, 180∘ e 270∘), totalizando 8 máscaras como mostra a Figura 9.

(30)

Capítulo 2. CODIFICAÇÃO DE IMAGENS E OPERAÇÕES 29

Figura 9 – Elementos estruturantes usados para realizar o afinamento. Cada linha é uma das máscaras rotacionada 4 vezes.

(a) (b) (c) (d)

(e) (f) (g) (h)

Fonte: Elaborada pela autora

2.5 Reconhecimento de caracteres

O interesse pela área de reconhecimento de caracteres se deve ao crescente número de apli-cações comerciais que desempenham essa tarefa. Por mais que pareça uma tarefa simples para o ser humano, este ainda é um problema difícil para as máquinas, graças à variedade dos estilos de escrita. O banco de dados de dígitos manuscritos MNIST (LECUN; CORTES; BURGES, 2018) está disponível na internet e concentra o resultado de várias pesquisas para o problema de reconhecimento de caracteres manuscritos. O melhor resultado pertence a (CIRESAN; MEIER; SCHMIDHUBER, 2012) cuja taxa de erro alcançada é de 0, 23% e usa rede neural convolucional para solucionar o problema.

A maioria dos métodos de reconhecimento de caracteres manuscritos é construída com base em sistemas de aprendizagem de máquina. O ponto crucial é a escolha de bons descritores para alimentar o sistema do reconhecimento de caracteres. Descritores são os dados extraídos das imagens dos caracteres, ao quais são usados no lugar da imagem propriamente dita. A maioria dos métodos realiza pré-processamento nas imagens e pode usar mais de um descritor.

(31)

30

3 CÓDIGO DE VIZINHANÇA

Imagens em geral, quando armazenadas ou manipuladas, assumem um formato adequado para o seu processamento. Dependendo do tipo de imagem, diferentes codificações podem ser usadas. Um dos modos mais básicos de representar uma imagem binária é atribuindo um bit para cada pixel. Um bit pode assumir apenas dois valores, 0 ou 1. Um dos valores é atribuído à cor de primeiro plano e o outro à cor de segundo plano. Este formato pode ser usado para armazenagem de imagens, também conhecido como bitmap (mapa de bits em inglês).

Outra forma simples de representar imagens binárias é através de um conjunto com as coordenadas dos seus pontos. Chamaremos esse conjunto de Π, onde Π ∈ ℘(N × N). Uma imagem bidimensional de tamanho 𝑤 × 𝑙 tem seus pontos posicionados em coordenadas (𝑥, 𝑦) : 0 ≤ 𝑥 < 𝑤, 0 ≤ 𝑦 < 𝑙.

A Codificação de Vizinhança proposta por (TSANG; TSANG; DYCK, 1999) é um método

de representação para imagens binárias. Para cada pixel de primeiro plano é gerado um vetor com informações da sua vizinhança, além da própria coordenada. É possível arma-zenar a imagem e realizar operações nela usando o método de vizinhança. A estrutura do código, bem como o processo de codificação e decodificação encontram-se descritos neste capítulo, enquanto suas aplicações e vantagens serão apresentadas nos próximos capítulos.

3.1 Estrutura do código

Um Código de Vizinhança (CV) carrega informações sobre um conjunto de pixels. Este é composto da posição central do grupo (𝑥, 𝑦) pertencente ao espaço N × N e da distância deste à borda do componente conectado em direções específicas. O trabalho de (TSANG; TSANG; DYCK, 1999) apresenta o código com quatro diferentes direções, correspondentes aos pontos cardeais.

O Código de Vizinhança foi formalizado por (CARVALHO et al., 2012) como

𝜙 = (𝑥, 𝑦, 𝑐1, 𝑐2, . . . , 𝑐𝑑−2), (3.1)

onde 𝜙 pertence ao espaço N𝑑, 𝑑 ≥ 3. O vetor é composto por duas partes, o núcleo com

a posição central do grupo na matriz bidimensional da imagem e as informações dos seus vizinhos 𝑐1, 𝑐2, ...𝑐𝑑−2. O valor 𝑐𝑖, 1 ≤ 𝑖 ≤ 𝑑 − 2, representa a quantidade de pixels vizinhos

em uma determinada direção, correspondente à função 𝑏𝑖 : N3 → ℘(N × N).

As funções 𝑏𝑖 são predefinidas. No trabalho (TSANG; TSANG, 2006b) foram propostas

quatro delas:

𝑏1(𝑥, 𝑦, 𝑐1) = {(𝑥, 𝑦 − 𝑘)|𝑘 ≤ 𝑐1, 𝑦 − 𝑘 ≥ 0}, (3.2)

(32)

Capítulo 3. CÓDIGO DE VIZINHANÇA 31

Figura 10 – Ilustração de uma imagem binária cujo pixel destacado é o centro do código

𝜙 = (4, 3, 2, 1, 4, 3).

Fonte: Elaborada pela autora

𝑏3(𝑥, 𝑦, 𝑐3) = {(𝑥, 𝑦 + 𝑘)|𝑘 ≤ 𝑐3, 𝑦 + 𝑘 ≤ 𝑙}, (3.4)

𝑏4(𝑥, 𝑦, 𝑐4) = {(𝑥 − 𝑘, 𝑦)|𝑘 ≤ 𝑐4, 𝑥 − 𝑘 ≥ 0}. (3.5)

Estas variam a direção dos vizinhos nos sentidos verticais e horizontais em relação à matriz da imagem. 𝑏𝑖(𝑥, 𝑦, 𝑐𝑖) retorna um subconjunto de pontos contidos na imagem de

dimensão 𝑤 × 𝑙 cuja posição é uma transformação da coordenada (𝑥, 𝑦).

Suponha o código 𝜙 = (4, 3, 2, 1, 4, 3). O primeiro ponto deduzido é o centro (𝑥, 𝑦) = (4, 3). Os pontos vizinhos encontrados pelas funções 𝑏𝑖 são: 𝑏1(4, 3, 2) = {(4, 2), (4, 1)}, 𝑏2(4, 3, 1) = {(5, 3)}, 𝑏3(4, 3, 4) = {(4, 4), (4, 5), (4, 6), (4, 7)} e 𝑏4(4, 3, 3) = {(3, 3), (2, 3),

(1, 3)}. Este exemplo encontra-se na Figura 10.

Recentemente Carvalho et al. (2010) propôs códigos com oito funções, as quatro ori-ginais 𝑏1 a 𝑏4 mais quatro novas, 𝑏5 a 𝑏8,

𝑏5(𝑥, 𝑦, 𝑐5) = {(𝑥 + 𝑧, 𝑦 − 𝑘)|𝑧 ≤ 𝑐5, 𝑥 + 𝑧 ≤ 𝑤, 𝑘 ≤ 𝑐5, 𝑦 − 𝑘 ≥ 0}, (3.6)

𝑏6(𝑥, 𝑦, 𝑐6) = {(𝑥 + 𝑧, 𝑦 + 𝑘)|𝑧 ≤ 𝑐6, 𝑥 + 𝑧 ≤ 𝑤, 𝑘 ≤ 𝑐6, 𝑦 + 𝑘 ≤ 𝑙}, (3.7)

𝑏7(𝑥, 𝑦, 𝑐7) = {(𝑥 − 𝑧, 𝑦 + 𝑘)|𝑧 ≤ 𝑐7, 𝑥 − 𝑧 ≥ 0, 𝑘 ≤ 𝑐7, 𝑦 + 𝑘 ≤ 𝑙}, (3.8)

𝑏8(𝑥, 𝑦, 𝑐8) = {(𝑥 − 𝑧, 𝑦 − 𝑘)|𝑧 ≤ 𝑐8, 𝑥 − 𝑧 ≥ 0, 𝑘 ≤ 𝑐8, 𝑦 − 𝑘 ≥ 0}. (3.9)

O conjunto de todas as funções possíveis com mesmas propriedades é definido por 𝐵,

𝐵 = {𝑏𝑖|𝑏𝑖 : N3 → ℘(N × N)}. (3.10)

A configuração do Código de Vizinhança é definida por 𝛽,

(33)

Capítulo 3. CÓDIGO DE VIZINHANÇA 32

Figura 11 – Cobertura de um Código de Vizinhança com diferentes configurações. Estas são as configurações correspondentes às imagens: 𝛽𝑎 = (𝑏1, 𝑏2, 𝑏3, 𝑏4), 𝛽𝑏 =

(𝑏5, 𝑏6, 𝑏7, 𝑏8) e 𝛽𝑐= (𝑏1, 𝑏2, 𝑏3, 𝑏4, 𝑏5, 𝑏6, 𝑏7, 𝑏8).

(a) (b) (c)

Fonte: Elaborada pela autora

um subconjunto de 𝐵 onde 𝛽 ∈ B𝑑−2, 𝑑 ≥ 3.

A associação do vetor de vizinhança 𝜙 com a configuração 𝛽 será chamada de 𝑢(𝜙, 𝛽), onde 𝑢 : N𝑑× 𝐵𝑑−2

→ ℘(N × N). A função 𝑢 irá retornar um subconjunto de pontos contidos na imagem resultado da união das funções de vizinhança 𝑏𝑖 com o dado ponto

𝜙, 𝑢(𝜙, 𝛽) = 𝑑−2 ⋃︁ 𝑖=1 𝑏𝑖(𝑥, 𝑦, 𝑐𝑖). (3.12)

O nosso exemplo anterior mostrou o código 𝜙 = (4, 3, 2, 1, 4, 3), suponha que a confi-guração usada foi 𝛽 = (𝑏1, 𝑏2, 𝑏3, 𝑏4), logo o valor de 𝑢(𝜙, 𝛽) seria o conjunto {(4, 3), (4, 2),

(4, 1), (5, 3), (4, 4), (4, 5), (4, 6), (4, 7), (3, 3), (2, 3), (1, 3)}.

A representação de uma imagem será dada por um conjunto de Códigos de Vizinhança Φ. A reconstrução desta pode ser obtida pelo retorno da função 𝑣(Φ, 𝛽),

𝑣(Φ, 𝛽) = |Φ|

⋃︁

𝑗=1

𝑢(𝜙𝑗, 𝛽), (3.13)

que faz a união de todos os pontos retornados por cada Código de Vizinhança 𝜙𝑖.

3.1.1 Tipos de Código

A proposta inicial apresenta códigos cujas funções 𝑏𝑖 cobrem os vizinhos na horizontal e

vertical (TSANG; TSANG; DYCK, 1999). A Figura 11 (𝑎) mostra visualmente qual seria a

área de cobertura de um código com configuração 𝛽 = (𝑏1, 𝑏2, 𝑏3, 𝑏4). Esse tipo de código

é chamado de Torre pela literatura, uma alusão aos movimentos da peça torre no jogo de xadrez.

O segundo tipo de código é configurado de forma que as funções de vizinhança cobrem pixels nas direções diagonais, como mostra a Figura 11 (𝑏). Esse tipo de código é chamado de bispo, outra referência ao jogo de xadrez.

Por último, temos códigos cuja configuração é a união das funções do código torre e bispo, Figura 11 (𝑐), conhecido como rainha.

(34)

Capítulo 3. CÓDIGO DE VIZINHANÇA 33

3.2 Codificação da imagem

Não existe um caminho único de se codificar a imagem usando a Codificação de Vizi-nhança. Esta pode ser feita de várias maneiras, contanto que a imagem recuperada a partir dos códigos seja a mesma. Uma implementação menos eficiente pode levar tempo polinomial para codificar, enquanto uma implementação mais eficiente termina essa tarefa em tempo linear. Esta seção apresenta uma forma de codificar a imagem em tempo linear. O conjunto de todos os pontos de uma imagem é representado por Π. Caso 𝑣(Φ, 𝛽) = Π, a codificação foi realizada sem perdas. Diferente da codificação com perdas, 𝑣(Φ, 𝛽) ⊂ Π. A operação aqui descrita irá codificar a imagem sem perdas, ou seja, o resultado desta irá recuperar a imagem completa.

Figura 12 – Direção da codificação numa matriz de pixels. Em volta do pixel destacado existem duas regiões delimitadas usadas durante a codificação.

Fonte: Elaborada pela autora

Para uma imagem Π, cada pixel será visitado apenas duas vezes durante a codificação. Em cada passada, os vizinhos que já foram visitados serão consultados para construir o vetor 𝜙. Desta forma, não haverá necessidade de percorrer toda vizinhança até encontrar uma borda. A Figura 12 ilustra os sentidos da codificação de uma imagem e destaca as regiões dos vizinhos que já foram visitados (sempre oposta ao sentido da seta). Durante a atualização do código, o valor do vetor 𝑐𝑖 será igual a 𝑐𝑖′ + 1, onde 𝑐𝑖′ é o valor

correspon-dente no vetor vizinho 𝜙′. O código 𝜙′ é localizado em 𝑏𝑖(𝑥, 𝑦, 1), onde (𝑥, 𝑦) é a posição

de 𝜙. Lembrando que 𝜙′ deve fazer parte dos vizinhos que já foram resolvidos na direção de codificação atual.

3.3 Reconstrução da imagem

A reconstrução nada mais é do que o caminho inverso, Φ resulta em Π. Formalmente ela foi apresentada pela Equação 3.13. Assim como na codificação, não existe um caminho único para fazer a reconstrução da imagem.

Infelizmente não é garantido um tempo linear durante a decodificação, uma vez que cada CV deve ter sua vizinhança completamente percorrida. Na prática o tempo pode ser curto se a imagem codificada passou por uma redução de códigos bem executada. Esta etapa está descrita na seção 3.4.

(35)

Capítulo 3. CÓDIGO DE VIZINHANÇA 34

3.4 Redução

Não é vantajoso apenas codificar a imagem de forma que cada pixel terá um CV correspon-dente, uma vez que no resultado final haverá muita redundância. Após uma codificação é esperado que |Φ′| < |Π|, para isso o conjunto de códigos gerados Φ é reduzido para Φ′, Φ′ ⊂ Φ. O processo de redução procura eliminar repetição de informação. Suponha que um código 𝜙𝑖 representa um conjunto de pontos que já está sendo codificado por outros

vetores Φ𝑘, 𝑢(𝜙𝑖, 𝛽) ⊆ 𝑣(Φ𝑘, 𝛽) |𝜙𝑖 ∈ Φ/ 𝑘. Não vale a pena guardar o código 𝜙𝑖 já que o

subconjunto de pontos que este representa é recuperado por outros códigos. O processo de redução visa eliminar casos como este de forma a minimizar |Φ′|.

Algoritmo 1: Redução do número de códigos Input: Φ, 𝛽; Output: Φ′; 1 Φ′ = {}; 2 while 𝑣(Φ, 𝛽) ̸= 𝑣(Φ, 𝛽) do 3 escolha 𝜙𝑖, |𝑢(𝜙𝑖, 𝛽) ∖ 𝑣(Φ, 𝛽)| ≥ |𝑢(𝜙𝑗, 𝛽) ∖ 𝑣(Φ, 𝛽)| ∀ 𝜙𝑖, 𝜙𝑗 ∈ Φ; 4 Φ′ ← Φ′∪ {𝜙𝑖}; 5 return Φ;

O procedimento da redução foi formalizado por (CARVALHO et al., 2012) e está descrito no Algoritmo 1. Este inicia com a imagem codificada Φ e a configuração 𝛽 com o objetivo de gerar Φ′ ⊂ Φ, onde 𝑣(Φ′, 𝛽) = 𝑣(Φ, 𝛽). Este algoritmo também será usado para a compressão de imagens, apresentado no Capítulo 4. Durante o procedimento, códigos 𝜙𝑖

são selecionados para integrar a lista reduzida Φ′. O código escolhido em cada interação é o que representa a maior quantidade de pontos não cobertos ainda por Φ′. Quando a imagem gerada por 𝑣(Φ′, 𝛽) for igual à 𝑣(Φ, 𝛽), o algoritmo atingiu seu critério de parada.

(36)

35

4 COMPRESSÃO

Imagens binárias podem ser usadas para digitalização de documentos de texto com o obje-tivo de criar registros. Pensemos nos jornais, cujo acervo documental acumulado é imenso. Anos da história humana estão registrados nesses volumes de papéis que se deterioram com o tempo. A fim de proteger as informações ali contidas, seus conteúdos são digita-lizados em imagens binárias. Esse tipo de arquivo, sem nenhum tipo de processamento, normalmente ocupa muita memória. Uma folha de jornal padrão mede 60 𝑐𝑚 × 38 𝑐𝑚 (BARNHURST; NERONE, 2001). A uma resolução baixa de 135 dpi, uma folha deste ta-manho no formato de mapa de bits pode ocupar um pouco mais de 786 MB. Ou seja, seria inviável o armazenamento destes arquivos sem que estes passassem por um prévio processo de compressão.

Esse tipo de imagem também pode ser usado para transferir arquivos via fax. Uma folha de papel A4, segundo a norma ISO 216, mede 21 𝑐𝑚 de largura por 29, 7 𝑐𝑚 de altura. Com resolução de 200 dpi, uma única pagina poderia ocupar até 472 MB: tamanho impraticável para transferência entre faxes. Alguns formatos usados para este fim são CCITT Group 3, CCITT Group 4 e JBIG (BARNI, 2006).

Para estas e outras aplicações, as imagens passam por um processo de compressão, reduzindo assim o tamanho necessário para representa-las. É interessante que a imagem já esteja codificada em um formato que permita essa manipulação. A codificação de vizi-nhança apresentada nesse documento pode ser aplicada para armazenagem e compressão de imagens binárias.

A compressão de imagens binárias usando Código de Vizinhança foi apresentado pre-viamente em (CARVALHO et al., 2010), este capítulo trás um novo algoritmo pro mesmo

problema. O processo tem várias etapas, entre elas a codificação da imagem em Códigos de Vizinhança e a redução dos códigos, passos já apresentados no Capítulo 3. Uma visão global do fluxo encontra-se na Figura 13.

(37)

Capítulo 4. COMPRESSÃO 36

Figura 13 – Passo a passo da compressão de imagens binárias usando Código de Vizi-nhança.

Fonte: Elaborada pela autora

4.1 Pré-processamento

As imagens que serão comprimidas passam por um pré-processamento que otimiza o re-sultado final da compressão. Uma imagem do tipo gráfica pode ter uma área grande preenchida pela cor de primeiro plano, exemplo na Figura 14 (𝑎). Guardar todos os pixels da imagem original é desnecessário, basta extrair a borda dos elementos e só então pro-ceder com a compressão. O método usado para extração da borda faz uso dos próprios Códigos de Vizinhança, Seção 5.5.

Para extrair a borda, a imagem será dividida em sub-imagens com os componentes conexos da original. Apenas as sub-imagens que possuem desenhos preenchidos terão suas bordas extraídas, evitando assim um preenchimento indevido durante a restauração. Exemplo na Figura 15. Os componentes serão divididos em dois grupos, os que tiveram a borda extraída e os que não tiveram, essa informação constará no arquivo final. Cada componente passará nas etapas seguintes como uma imagem independente.

Ao criar pequenas imagens ajudamos a manter as coordenadas (𝑥, 𝑦) dos códigos pequenas também, melhorando de forma discreta a taxa de compressão final. Essa etapa será de grande valia para imagens maiores e com vários componentes conexos, como na digitalização de jornal.

(38)

Capítulo 4. COMPRESSÃO 37

Figura 14 – Imagem apple-3 e sua borda extraída

(a) (b)

Fonte: (RICHARD, 2015)

Figura 15 – Divisão da imagem em componentes conexos e extração da borda apenas dos que são preenchidos.

Fonte: Elaborada pela autora

4.2 Redução de códigos

Como mostrado na Seção 3.4, o resultado de uma imagem codificada pelo método de vizinhança é uma lista de códigos Φ que pode ser reduzida para Φ′, onde |Φ′| ≤ |Φ|. Na redução sem perdas Φ′ recupera a mesma imagem que Φ. Esta redução do número de códigos é imprescindível para alcançar maiores taxas de compressão no arquivo gerado pela Codificação de Vizinhança.

Além dessa etapa, existem outras a serem executadas na compressão aqui descrita. Apesar de não existir mais redundância na coleção de códigos selecionados, alguns pixels podem sim serem cobertos por mais de um código, (𝑥, 𝑦) ∈ 𝑢(𝜙𝑖, 𝛽), (𝑥, 𝑦) ∈ 𝑢(𝜙𝑗, 𝛽), 𝑖 ̸=

𝑗.

Outros tipos de redundâncias também podem ser encontradas, como nas sequências de números gerados pelos códigos e nas sequências de bits gerados pela binarização dos mesmos para armazenamento em forma de arquivo. Todas essas repetições serão tratadas em etapas descritas nas seções seguintes.

4.3 Comprimindo códigos

Uma vez que a imagem foi codificada e teve seu conjunto de códigos reduzidos a Φ′, os elementos deste subconjunto passarão por um processo de compressão. Um código

(39)

Capítulo 4. COMPRESSÃO 38

Figura 16 – Exemplo de imagem codificada com apenas dois códigos Φ′ = {𝜙𝐴, 𝜙𝐵}. A

figura (𝑎) apresenta o código 𝜙𝐴 posicionado na imagem, em seguida temos

em (𝑏) o código 𝜙𝐵. Em (𝑐) estão destacados os pixels que estão cobertos

pelos dois códigos ao mesmo tempo e por último (𝑑), a junção dos dois com algumas das funções de vizinhança descartadas.

(a) (b) (c) (d)

Fonte: Elaborada pela autora

𝜙 = (𝑥, 𝑦, 𝑐1, ..., 𝑐𝑑−2) é associado a uma configuração 𝛽 = (𝑏1, ..., 𝑏𝑑−2). Cada valor do

vetor 𝑐𝑖 é responsável por guardar informação do conjunto de pixels vizinhos a (𝑥, 𝑦) em

uma determinada direção, 𝑏𝑖(𝑥, 𝑦, 𝑐𝑖). Se o conjunto de pontos retornados por 𝑏𝑖(𝑥, 𝑦, 𝑐𝑖)

estiver contido no conjunto gerado por outros códigos, torna-se desnecessário armazenar

𝑐𝑖 em 𝜙. A etapa de compressão de códigos consiste em personalizar configurações 𝛽 para

códigos que possuem valores 𝑐𝑖 que são desnecessários para a codificação da imagem.

Suponha uma imagem cuja redução resultou em Φ′ = {𝜙𝐴, 𝜙𝐵} com configuração

𝛽 = (𝑏1, 𝑏2, 𝑏3, 𝑏4, 𝑏5, 𝑏6, 𝑏7, 𝑏8), como mostra na Figura 16. Originalmente a imagem tinha

um código por pixel preto, |Φ| = 17. Após a redução de códigos restaram apenas dois, Φ′ = {𝜙𝐴, 𝜙𝐵}. Mesmo com poucos códigos, ainda tem áreas cujo pixels estão cobertos

por mais de um código, como mostra a Figura 16 (𝑐) que destacado os pixels que são codificados tanto por 𝜙𝐴quanto por 𝜙𝐵. A compressão dos códigos visa modificar 𝛽 para

evitar esse tipo de redundância.

O algoritmo de compressão de códigos irá descartar algumas das funções de vizinhança em prol da diminuição de redundância dos pixels que estes codificam. No exemplo dado, a configuração continha todas as funções de vizinhança apresentadas no capítulo 3, 𝛽 = (𝑏1, 𝑏2, 𝑏3, 𝑏4, 𝑏5, 𝑏6, 𝑏7, 𝑏8). Segundo essa configuração o pixel 𝐴 teria o código 𝜙𝐴 = (2, 2,

2, 2, 2, 1, 1, 1, 2, 1), onde 𝜙 = (𝑥, 𝑦, 𝑐1, 𝑐2, 𝑐3, 𝑐4, 𝑐5, 𝑐6, 𝑐7, 𝑐8). Porém 𝑐𝐴,5, 𝑐𝐴,6 cobrem pixels

que já são cobertos por 𝑐𝐵,1. Neste caso 𝑐𝐴,5 e 𝑐𝐴,6 não são relevantes para o código

𝜙𝐴 e sua configuração será reescrita para 𝛽𝐴 = (𝑏1, 𝑏2, 𝑏3, 𝑏4, 𝑏7, 𝑏8). Do mesmo jeito, 𝜙𝐵 também tem funções com redundância e sua configuração pode ser reduzida para

𝛽𝐵 = (𝑏1, 𝑏3, 𝑏5, 𝑏6) sem implicar numa perda para a imagem. Observa-se que 𝛽𝐵 também

perdeu funções 𝑏𝑖 cujo valor correspondente 𝑐𝑖 era zero.

A criação de configurações personalizadas para códigos adiciona uma nova complexi-dade para os mesmos, armazenar o conjunto de funções de vizinhança que este usa. Se esta informação não for salva, não será possível decodificar os códigos cujos vetores podem

(40)

Capítulo 4. COMPRESSÃO 39

assumir funções diferentes. Felizmente, é possível guardar esta informação com apenas 8

bits (limitando-se às oito funções aqui apresentadas). O conjunto de bits será

represen-tado por 𝜎 = (𝑎1, ..., 𝑎8). Cada bit 𝑎𝑖 corresponde a uma das funções 𝑏𝑖. 𝑎𝑖 = 1 significa

a presença de 𝑏𝑖 e 𝑎𝑖 = 0 a ausência de 𝑏𝑖 numa configuração. Os códigos comprimidos

serão reescritos como

𝜉 = (𝜙, 𝜎). (4.1)

Segundo este conceito, o código 𝜙𝐵 do exemplo anterior teria 𝜎𝐵 = (1, 0, 1, 0, 1, 1, 0, 0), o

resultado da sua compressão seria descrito como 𝜉𝐵 = (𝜙𝐵, 𝜎𝐵). O conjunto das funções

de vizinhança usadas por 𝜙𝐵 será 𝛽𝜎𝐵,

𝛽𝜎 = {𝑏𝑖| 𝑎𝑖 = 1, 𝑏𝑖 ∈ 𝛽}. (4.2)

Vale salientar que no momento em que um código é comprimido, este está trocando inteiros por um único byte. O tamanho comum para inteiros serem armazenados em uma memória é de 32 bits. Se apenas uma função de vizinhança for descartada em mais de 40% dos códigos, já vale a pena comprimi-los.

A escolha das configurações personalizadas dá-se por uma análise das funções de vizi-nhança de cada código em Φ′. Para cada código é testado se o valor salvo em 𝑐𝑖 segundo

𝑏𝑖 cobre algum ponto que não foi coberto por outros códigos já analisados ou se o valor é

zero. Se sim, marca 𝑎𝑖 = 1, caso contrário 𝑎𝑖 = 0.

O resultado da compressão de Φ′ será chamado de Ξ, o conjunto dos códigos com-primidos 𝜉. A equação referente à recuperação da imagem original a partir dos códigos comprimidos Ξ será rescrita como

𝑣(Ξ, 𝛽) = |Ξ| ⋃︁ 𝑗=1 𝜐(𝜉𝑗, 𝛽), (4.3) onde 𝜐(𝜉, 𝛽) = 𝑢(𝜙, 𝛽𝜎). (4.4) 4.3.1 Codificação aritmética

Uma vez que temos Ξ em mãos, podemos comprimi-los como dados numéricos. Os códigos comprimidos nada mais são do que vetores de números (𝜙) e bits (𝛼). Os vetores podem ter repetições entre seus valores. Suponha um código 𝜙 = (2, 3, 1, 1, 1, 1, 1, 1, 1, 1), o número 1 é repetido diversas vezes. Logo, é uma sequência com potencial para compressão. Esta etapa irá focar na identificação destas redundâncias e codificá-las de forma a eliminar a recorrência entre os valores e assim comprimir Ξ.

Codificação aritmética é um método de compressão sem perdas baseado em estatística, (WITTEN; CLEARY, 1987). Diferentemente de outros métodos que substituem os

elemen-tos da sequência por símbolos de um dicionário, como o Huffman (HUFFMAN, 1952), a Codificação Aritmética transforma uma sequência em apenas um único número decimal.

(41)

Capítulo 4. COMPRESSÃO 40

Figura 17 – Exemplo da Codificação Aritmética para a sequência 𝐴𝐴𝐵𝐴𝐵𝐶. Cada linha representa a escolha de um novo intervalo dado um caractere a ser codificado. O ponto em cada linha representa o mesmo valor 0,158.

Fonte: Elaborada pela autora

Para cada tipo de caractere é calculada sua probabilidade de ocorrência. Estes valores são distribuídos proporcionalmente em um intervalo [0, 1). Suponha que a sequência a ser comprimida seja 𝐴𝐴𝐵𝐴𝐵𝐶. 50% da série é composta por 𝐴’s, 33% são 𝐵’s e finalmente apenas 17% são 𝐶’s. De acordo com as proporções, os intervalos obtidos serão [0, 0,5), [0,5, 0,83) e [0,83, 1) respectivamente. Uma vez calculado os intervalos, pode ser iniciada a compressão. O primeiro elemento da sequência é o valor 𝐴, o intervalo de base [0, 1) será substituído pelo intervalo de 𝐴, em seguida as divisões serão refeitas. Após a subs-tituição, os novos intervalos serão [0, 0,25) para 𝐴, [0,25, 0,41) para 𝐵 e [0,41, 0,5) para

𝐶. Esses passos irão se repetir até terminar a sequência, qualquer número do intervalo

correspondente ao último elemento da lista poderá ser o representante da sequência. A Figura 17 mostra o passo a passo da Codificação Aritmética para a sequência do exemplo. Observa-se que o primeiro e último valor de um intervalo correspondem aos valores que delimitam o sub-intervalo marcado na linha anterior. Ao final do processo, o número 0,158 poderia codificar a sequência do exemplo (ponto destacado na Figura 17).

A decodificação segue passos parecidos à codificação. Munido do valor resultado, das proporções dos códigos e do tamanho da sequência, é possível recupera-la. O último parâmetro pode ser dispensado, basta adicionar um novo caractere durante a codificação que significa o fim da série e atribuir-lhe uma probabilidade pequena. O intervalo inicial da

Referências

Documentos relacionados

Os doentes paliativos idosos que permanecem nas instituições privadas são encaminhados pelos hospitais em que estavam ou internados pelos próprios familiares

v) por conseguinte, desenvolveu-se uma aproximação semi-paramétrica decompondo o problema de estimação em três partes: (1) a transformação das vazões anuais em cada lo-

Silva e Márquez Romero, no prelo), seleccionei apenas os contextos com datas provenientes de amostras recolhidas no interior de fossos (dado que frequentemente não há garantia

Os Oficiais de Registro Civil das Pessoas Na- turais do Estado de São Paulo também têm competência para os atos notariais de reconhecimento de firma, autenticação de cópia

No sentido de reverter tal situação, a realização deste trabalho elaborado na disciplina de Prática enquanto Componente Curricular V (PeCC V), buscou proporcionar as

Podemos então utilizar critérios tais como área, arredondamento e alongamento para classificar formas aparentadas a dolinas; no processamento digital de imagem, esses critérios

Este trabalho busca reconhecer as fragilidades e potencialidades do uso de produtos de sensoriamento remoto derivados do Satélite de Recursos Terrestres Sino-Brasileiro

Neste capítulo, será apresentada a Gestão Pública no município de Telêmaco Borba e a Instituição Privada de Ensino, onde será descrito como ocorre à relação entre