• Nenhum resultado encontrado

A estimativa da largura de traço proposta neste trabalho parte do principio de que, em um texto, normalmente, são utilizadas letras em tamanhos diferentes, especialmente quando o autor deseja enfatizar detalhes, chamar a atenção do leitor, ou simplesmente aprimorar a estética textual. Esse tipo de escrita, que varia de acordo com o tipo e a finalidade do documento, se faz presente não só em documentos recentes, como também em documentos antigos, mais frequentemente em documentos manuscritos.

Sabendo disso, é importante avaliar a largura do traço de forma mais robusta, e não se utilizar apenas do tratamento uniforme e global, tão presente na literatura. Neste tópico, propomos uma nova forma de calcular a largura do traço presente na imagem, levando-se em consideração o comportamento local da largura do traço e expandindo esse conceito para os demais pontos da imagem, a fim de se construir uma matriz de larguras de traço, ao invés de um valor único que representa toda a imagem.

Dessa forma, o tamanho da janela utilizada para um determinado pixel da imagem está associado a um valor correspondente na matriz de largura de traço. Isso garante que cada pixel da imagem possua um tamanho de janela mais adequado à sua vizinhança, calculada a partir da imagem de bordas binarizada que foi gerada anteriormente. Inicialmente, a estimativa é feita apenas para os pixels incluídos na região interna aos caracteres, expandindo- se, em seguida, para sua região externa e finalmente para a região de background da imagem.

A partir da imagem de bordas, é realizada uma análise de componentes conectados, que tem por objetivo eliminar componentes que apresentam dimensões fora do esperado para um caractere. Essa eliminação parte do pressuposto que a largura de um caractere cuja leitura

e entendimento por parte do leitor é possível, não pode ser menor que certa quantidade de pixels, dependendo das dimensões da imagem. Também são eliminados componentes que se mostram muito maiores do que um componente de texto. Assim, a análise, além de identificar todos os caracteres, também é responsável por eliminar regiões que permaneceram na imagem de bordas, mas que não apresentam conteúdo textual para a estimativa da largura do traço. Nas imagens utilizadas neste trabalho, todos os componentes que apresentaram informação textual, incluindo possíveis sinais de pontuação e acentuações gráficas apresentaram largura dentro do intervalo definido entre 2% e 25% da largura da imagem.

Uma vez identificados, cada elemento textual é analisado individualmente, levando-se em consideração a caixa retangular que engloba toda a região conectada do caractere. O intuito desta análise é identificar corretamente a totalidade da região interna do caractere, visto que podem ocorrer falhas no processo de binarização (Figura 4.10) que causariam erros na estimativa da largura do traçado. Para contornar tais falhas, optamos pela construção da região interna do elemento através da análise de sua região de fronteira. A correta detecção da região interna do componente textual é importante, pois, se ela for corretamente realizada, o problema de estimativa de largura de traço passa a ser um problema de contagem de pixels.

Figura 4.10: Exemplos de caracteres segmentados que apresentam falhas (em preto) que interferem no cálculo

da largura do traço e (em verde) a correção proposta neste trabalho.

Inicialmente, é aplicado um afinamento (Figura 4.11) sobre cada componente conectado, separadamente, utilizando o método clássico de Zhang (ZHANG e SUEN, 1984), para garantir que a fronteira do caractere tenha espessura mínima. A espessura não interfere diretamente no cálculo da largura do traço, mas a diminuição da espessura da região da fronteira dá uma maior ênfase à região interna do caractere.

Figura 4.11: (a-b) Bordas extraídas a partir do método de contraste e (c-d) seus respectivos afinamentos

produzidos por (ZHANG e SUEN, 1984).

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

Após o afinamento das bordas do caractere, são calculadas todas as distâncias entre dois pontos de borda demarcados na imagem, nas direções horizontal e vertical. Como não é possível garantir, com precisão, se a distância calculada entre dois pixels pretos na imagem corresponde à região interna do caractere, todas as distâncias são consideradas válidas neste primeiro passo (Figura 4.12). Após todas as distâncias serem calculadas, algumas serão eliminadas, através de um processo combinado de verificação. A ideia por trás desse método é que, dentro do caractere, sempre será possível calcular tanto a distância vertical quanto a horizontal, devido à própria característica da fronteira de separar a parte interna da parte externa do caractere. Fora do caractere, não existe garantia de que essas distâncias existem simultaneamente para todos os pontos da região. Por isso, ao analisar a continuidade vertical das distâncias horizontais, e vice-versa, é possível detectar, grosseiramente, algumas das distâncias que estão na região externa do caractere, e que, por tanto, não podem ser consideradas no cálculo da largura do traço (Figura 4.12).

Figura 4.12: Análise das distâncias entre pixels de borda para as imagens da Figura 4.10. Em vermelho, as

distâncias horizontais, em azul, as distâncias verticais, e em verde, respectivamente, as distâncias horizontais que existem por completo na imagem vertical e as distâncias verticais que existem por completo na imagem horizontal.

Com a análise inicial realizada, é possível gerar uma primeira estimativa da região interna do caractere, combinando as duas imagens produzidas (Figura 4.12 em verde) que agora já eliminam algumas distâncias contidas na região externa do caractere. Essa combinação tem como objetivo unificar as análises vertical e horizontal para eliminar a maior parte possível da região externa ao caractere. A combinação entre as duas imagens retoma a suposição de que, para qualquer pixel presente na região interna do caractere, é possível calcular tanto o comprimento horizontal quanto a vertical. Sendo assim, cada pixel que contém uma distância vertical e uma horizontal, simultaneamente, é considerado um pixel válido para o cálculo da largura do traço (Figura 4.13). Do contrário, ele é marcado como pixel de background, e será desconsiderado pelo resto do procedimento.

Figura 4.13: Eliminação dos pixels que não possuem comprimentos verticais e horizontais nas duas direções.

Em verde, as distâncias horizontal e vertical da Figura 4.12. Em cinza, o resultado da combinação das duas imagens.

Neste ponto, a imagem gerada pela combinação das distâncias pode ser entendida como uma representação do traço, e com ela já é possível obter uma boa estimativa a respeito da região interna do caractere. Porém, alguns problemas peculiares podem surgir, dependendo da forma do caractere. Caracteres circulares, ou com regiões semicirculares podem induzir a um erro de análise, já que, para esses pontos, é possível encontrar distâncias em ambas as direções, mesmo que tais regiões não pertençam à região interna do caractere. Essas regiões podem introduzir pequenas distorções no cálculo da largura traço (Figura 4.14).

Figura 4.14: Exemplos de estimativas de largura após a combinação das distâncias. Em (a) a estimativa foi

capaz de reconhecer toda a região interna do caractere, sem erros. Em (b), a região interna foi reconhecida, mas uma parte da região externa foi aceita. Em (c), praticamente toda a região de background, que estava dentro do caractere foi considerado como integrante da parte interna.

(a) (b) (c)

Para corrigir tais problemas, um último conjunto de varreduras é realizado, de forma a verificar o padrão das regiões demarcadas como distâncias válidas na representação do traço. Para qualquer linha da imagem de um caractere, independente do sentido de varredura, o fluxograma indicado na Figura 4.15 é verdadeiro.

Figura 4.15: Fluxograma que representa o comportamento das regiões da imagem, quando submetidas a uma

varredura de pixels, seja na direção vertical ou horizontal.

Ao se impor este comportamento aos pixels da imagem do caractere, efetuando varreduras da esquerda para a direita e vice-versa, os pixels que pertencem à região externa do caractere e que, até então, estavam sendo marcados como pertencentes à região interna são automaticamente corrigidos. Nesses casos, é atribuído o valor de background a todo o conjunto de pixels marcados como foreground que não obedecer ao fluxograma definido. Um exemplo da aplicação do fluxograma da Figura 4.15 na verificação do caractere pode ser visualizado na Figura 4.16.

Figura 4.16: Varredura nas direções horizontal e vertical. Os pontos em vermelho indicam a varredura sobre o

background da imagem. Em qualquer sentido, a varredura deve cruzar pontos de borda (amarelos) e pontos da região interna (azul), antes de voltar ao background.

Essa ação, porém, pode fazer com que alguns pixels da região interna sejam erroneamente qualificados como background, devido à má formação de algumas regiões dos caracteres (Figura 4.17). Neste caso, as imagens produzidas pelas varreduras são combinadas, de forma a se produzir a imagem final do caractere (Figura 4.17).

A combinação se baseia no fato de que, ao analisarmos o padrão de comportamento definido no fluxograma (Figura 4.15), nos dois sentidos de uma mesma horizontal ou vertical, fica claro que, para uma região interna do caractere, tal comportamento deve existir em ambos os sentidos. Já para a região externa ao caractere, esse comportamento não se verifica. Então, é possível corrigir as falhas produzidas pela análise anterior, verificando se, para todo pixel de uma representação do traço, em pelo menos uma das duas imagens (Figura 4.17-a-b) ele foi demarcado como borda ou foreground. Se isso ocorrer, significa que o fluxo foi obedecido em pelo menos um sentido e que aquele pixel pertence à região interna do caractere. Se, por outro lado, em ambos os sentidos, a varredura identificou o ponto como sendo um ponto de background, isso nos obriga a classificar o pixel como, de fato, pertencente ao background.

Figura 4.17: Varreduras sobre os caracteres para corrigir as falhas dos caracteres (b) e (c) da Figura 4.14. (a)

Verificando se o fluxo da Figura 4.15 é obedecido para qualquer pixel da esquerda para a direita, (b) da direita para a esquerda. Os pixels que não obedecem ao fluxo são marcados como background. Em (c) a combinação dos resultados. Exibindo somente os resultados da varredura horizontal.

(a) (b) (c)

Uma vez definida a região interna do caractere, a definição da largura do traço se dá através de uma análise de contagem, utilizando a estratégia básica dos métodos run-length para estimativa da largura do traço. A principal diferença entre o run-length tradicional e o aqui proposto, é a maior robustez do método, referente às pequenas falhas que possam existir na região interna do caractere, devido ao processo de construção da região interna demonstrado anteriormente. Falhas que seriam consideradas como normais, pelos algoritmos tradicionais, aqui são reduzidas, devido à análise de bordas no inicio do processo. Dependendo das dimensões da falha, podem até ser corrigidas e, assim, o cálculo do traçado do caractere é feito de forma mais precisa.

Para realizar a contagem de forma coerente com o traço real do caractere, os pixels de borda e os da região interna são considerados como pixels de foreground. Para cada um desses pixels, é calculado o comprimento das linhas horizontal e vertical do foreground que varrem a extensão do traço e passam pelo pixel processado (Figura 4.18). O intuito desta análise é garantir que a largura do traço utilizada será aquela que melhor representa a largura do traço para o ponto em questão. Normalmente, ao se analisar os comprimentos em ambas as direções, o menor deles é o que mais fielmente representa a largura do traço. Por isso, essa regra é aplicada nesta análise, resultando em um conjunto de pontos cuja distância mais representativa é o conjunto vertical, e em outro conjunto cuja maior representatividade é obtida a partir dos comprimentos horizontais (Figura 4.18).

Figura 4.18: (a-b) Contagem das distâncias horizontal (linhas vermelhas) e vertical (linhas azuis) para cada um

dos pixels definidos como pixels internos. A menor delas será utilizada como largura do traço para o pixel localizado no cruzamento das linhas. (c-d) Distâncias que foram utilizadas para definir a largura do traço para essas letras (em vermelho, distâncias horizontais, em azul, distâncias verticais).

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

Ao se realizar esta análise para todos os pixels da imagem do caractere, estabelece-se uma largura de traço específica para cada pixel pertencente à representação do traço do caractere, que é muito próxima daquilo que o caractere realmente representa (Figura 4.19-a e Figura 4.19-b). Para os pixels localizados no background de cada caractere, é atribuído um valor único, correspondente à média de todas as larguras estabelecidas para os pixels do

foreground do mesmo (Figura 4.19-c e Figura 4.19-d). Outras abordagens para definição da

largura do traço para os pixels de background foram avaliadas (GATOS, PRATIKAKIS e PERANTONIS, 2006), mas a média foi a que obteve melhores resultados, e, por tanto, foi a escolhida.

Figura 4.19: (a-b) Valores de distância calculados para a região interna e (c-d) externa do caractere. Para

melhorar a visualização, as distâncias foram normalizadas para a escala de 256 tons de cinza.

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

Uma vez que todos os componentes de texto são processados, restam apenas os pontos pertencentes ao background da imagem para a estimativa completa da matriz de largura de traço. Como a estimativa do background foi feita de forma rudimentar, é importante definir a largura de traço para esses pontos, pois, após a etapa de refinamento do background, esses pontos podem se tornar úteis durante a etapa de classificação, caso algum dos pontos de

background passe a ser considerado um candidato à componente de texto. Também é

importante estabelecer a largura do traço para que ela sirva como parâmetro durante a etapa de eliminação de artefatos, no final do algoritmo.

Para estimar a largura do traço de background, quando todas as regiões de caracteres são processadas, uma nova média é calculada, agora, levando-se em conta, todos os caracteres juntos. Essa média é atribuída aos pixels considerados como background da imagem, desde que ela não seja inferior a um determinado valor mínimo para a largura do traço. Isso define a construção da matriz de largura de traço (Figura 4.20).

Neste trabalho, nenhuma largura de traço é menor do que quatro pixels. Com a matriz de largura de traço, cada pixel da imagem possui, agora, um valor próprio para ser utilizado como largura de traço. Alternativamente, a média geral da largura do traço é calculada para que ela possa ser utilizada no refinamento do background.

Figura 4.20: Matriz de largura de traços calculada para as imagens da Figura 4.2. Cada região do caractere

possui seu próprio valor de largura. Para o background de cada caractere, é atribuído o valor médio de suas larguras. Para o background da imagem é atribuída uma média de todas as larguras calculadas para os caracteres.