Você está na página 1de 6

ALGORITMO DE TRATAMENTO DE IMAGENS DE TEXTO DE BAIXA

QUALIDADE UTILIZANDO OPENCV


Rodrigo Barros da Silva

Faculdade de Tecnologia SENAI CIMATEC


Av. Orlando Gomes, 1845 - Piata
Salvador, Bahia, Brasil
E-mail: rodrigo.barros@fieb.org.br
Abstract This work presents a C++ programming routine using ANSI standards and OpenCV computa-
cional vision libraries to process text content images.
Keywords Computer Vision, OpenCV, C++ Programming, OpenFrameworks
Resumo O trabalho apresenta uma rotina de programacao em C++, voltada `a Visao Computacional, para
o controle de um robo movel atraves de uma webcam que captura os movimentos da cabeca realizados pelo
usuario.
Palavras-chave Visao Computacional, OpenCV, Programacao em C++, OpenFrameworks.
1 Introducao
Nos ultimos anos, um desenvolvimento notavel
vem ocorrendo em dois campos tecnologicos in-
timamente ligados `as areas de Processamento de
Imagem, Visao Computacional e disciplinas cor-
relatas:
Sistema de Aquisicao de Imagens (e.g. came-
ras fotogracas, lmadoras) - Surgimento de
dispositivos de alta deni cao e baixo custo;
Sistemas Computacionais - Evolu cao dos dis-
positivos atraves do aumento de seu poder de
processamento e de sua quantidade de memo-
ria, aliado `a reducao de seus custos e de seu
tamanho;
A evolucao desses sistemas criou o cenario
ideal para o desenvolvimento/aperfei coamento de
diversas aplicacoes, como na area biomedica e no
controle de qualidade e automacao de processos
industriais.
Como parte da avaliacao da disciplina Lo-
gica de Programa cao, pertencente ao Programa
de Pos-Graduacao em Modelagem Computacio-
nal e Tecnologia Industrial (PPGMCTI) da Facul-
dade de Tecnologia SENAI CIMATEC, foi solici-
tado aos discentes que propusessem um problema
e realizassem o projeto e desenvolvimento de um
algoritmo capaz de soluciona-lo.
Neste contexto e considerando o interesse dos
discentes no desenvolvimento de competencias na
area de automacao e processamento de imagens,
foi proposto o desenvolvimento de um algoritmo
para facilitar a visualiza cao de imagens que con-
tenham elementos textuais em um plano de fundo
que diculte a leitura. Para tal, foi utilizada uma
tecnica de saturacao por limiar (threshold), onde
as imagens de sada (pos-tratamento) sao do tipo
binaria (i.e. os objetos sao representados na cor
preta e o plano de fundo na cor branca). Este
tipo de tecnica e bastante util quando deseja-se
eliminar o plano de fundo da imagem em estudo,
evidenciando outros elementos como objetos, ca-
racteres etc.
Um exemplo de aplica cao deste algoritmo e
a melhoria de textos digitalizados atraves de ca-
meras de smartphones. Nesse tipo de imagem, a
qualidade varia bastante e nem sempre favorece o
reconhecimento e conforto visual do leitor, princi-
palmente devido `as mas condicoes de iluminacao,
baixa resolucao da imagem ou desconhecimento
das tecnicas de fotograa (que um prossional da
area possui, sendo capaz de obter boas amostras).
Uma outra aplica cao interessante esta ligada
ao reconhecimento automatico de placas de ve-
culos. Nos algoritmos com essa nalidade, nor-
malmente a primeira etapa corresponde ao pre-
processamento da imagem, onde e comum existir
uma etapa de conversao para o espaco de cor bina-
rio. De maneira geral, pode-se dizer que boa parte
dos algoritmos de Reconhecimento

Optico de Ca-
racteres
1
utiliza algum algoritmo semelhante ao
apresentado neste trabalho (Woodford, 2012).
O texto do artigo esta organizado da seguinte
forma: A 1
a
secao traz algumas informa coes basi-
cas a respeito do processamento de imagens (ne-
cessarias ao melhor entendimento do trabalho).
Na 2
a
secao, e fornecida uma visao geral do pro-
jeto, atraves de um diagrama de blocos e do uxo-
grama geral do algoritmo. Na 3
a
secao e apresen-
tada a metodologia de trabalho e a descricao das
funcoes utilizadas. Em seguida, os resultados sao
apresentados e analisados. Finalmente, sao apon-
tadas as diculdades encontradas e sao feitas as
consideracoes nais a respeito do trabalho.
1
Em ingles, utiliza-se o termo OCR - Optical Character
Recognition.
2 Processamento de Imagens
Existe uma serie de disciplinas intimamente rela-
cionadas ou ate mesmo em parte coincidentes com
a area de processamento de imagens, como a vi-
sao computacional, a computacao graca ou ainda
a analise de imagens (Maintz, 2005). Nao ha um
consenso entre os especialistas a respeito das fron-
teiras entre essas disciplinas, mas o quadro esque-
matico da gura 1 representa de maneira razoavel
a relacao entre elas:
Figura 1: Rela cao entre Processamento de Ima-
gens e demais areas correlatas (Maintz, 2005).
Dentro de um contexto mais amplo, as tecni-
cas de processamento de imagem possuem diversas
funcoes, podendo ser normalmente enquadradas
na lista abaixo:
Aprimoramento de Imagens;
Combinacao de Imagens;
Sntese de Imagens;
Compressao de Dados;
Reconhecimento de Padroes;
Transformacao de dados em informacoes mais
facilmente manipulaveis ou interpretaveis;
Ao falar de processamento de imagens, nor-
malmente esta implcito tratar-se de imagens di-
gitais
2
. Uma imagem digital nada mais e do que
uma matriz de n umeros, onde cada elemento (i,
j) da matriz e conhecido como pixel (do ingles
picture element). Cada pixel, por sua vez, e re-
presentado por uma n-upla de n umeros inteiros
(normalmente entre 0 e 255), que varia de acordo
com o espa co de cores utilizado. Na representa-
cao de uma imagem no espaco de cores RGB, por
exemplo, cada pixel e representado por 3 n ume-
ros inteiros. Por outro lado, para representar esta
mesma imagem no espa co de cores de Escala de
Cinza e necessario apenas 1 n umero inteiro.
Ao representar uma imagem por uma matriz
de pixels, pode-se efetuar uma mirade de ope-
racoes matematicas sobre esses dados para im-
plementar a fun cao que se deseja. Do ponto de
2
Apesar de o Processamento de Imagens Analogicas
existir, pouqussimas aplicacoes s ao desenvolvidas na pra-
tica, devido ` a complexidade do hardware envolvido, dos
custos elevados e da falta de exibilidade e modularidade
dos equipamentos.
vista pratico, as opera coes matematicas utiliza-
das correspondem a derivadas, convolucoes, ope-
racoes estatsticas (medias simples e ponderadas,
medianas) transformadas (de Fourier, Wavelet, de
Hough), dentre outras. Uma peculiaridade de se
trabalhar com imagens, que pode se tornar uma
das principais diculdades de implementacao, esta
no fato de que uma imagem quase nunca e uma
funcao bem comportada (i.e. contnua e deri-
vavel ao longo do intervalo de interesse). Deste
modo, torna-se necessario fazer algumas aproxi-
ma coes e adapta coes nos calculos.
3 Projeto do Algoritmo
3.1 Descricao do Problema
Em muitas aplicacoes de processamento de ima-
gem e visao computacional e necessario eliminar
o plano de fundo da imagem em estudo, eviden-
ciando outros elementos como objetos ou carac-
teres com os quais se deseja trabalhar. Nos al-
goritmos com essa nalidade, normalmente a pri-
meira etapa corresponde a um pre-processamento
da imagem, onde e comum existir uma etapa de
conversao para o espaco de cor binario.
Dentro desse contexto, foi proposto o desen-
volvimento de um algoritmo para facilitar a vi-
sualizacao de imagens que contenham elementos
textuais em um plano de fundo que diculte a lei-
tura. Para tal, foi utilizada uma tecnica de satu-
racao por limiar (threshold), onde as imagens de
sada (pos-tratamento) sao do tipo binaria (i.e. os
objetos sao representados na cor preta e o plano
de fundo na cor branca).
A ideia por tras dessa conversao e bem in-
tuitiva: partindo do pressuposto que, numa ima-
gem qualquer que contenha um texto ou objeto,
a grande maioria dos pixels representa o plano de
fundo da imagem e o restante representa o proprio
texto ou objeto, e de se esperar que o histograma
da imagem em Escala de Cinza possua dois pi-
cos. O maior dos dois picos esta relacionado `a cor
do plano de fundo e o menor ao texto ou objeto.
Sendo assim, pode-se denir um limiar de satura-
cao, que sera utilizado para separar quais pixels
pertencem ao plano de fundo e quais pertencem
ao texto ou objeto.
3.2 Escopo do Trabalho
O escopo do trabalho compreende o processo de
acesso e leitura de imagens contidas em arquivo,
processamento dessas imagens utilizando um al-
goritmo hbrido de bibliotecas padrao ANSI e
OpenCV, alem da exibicao em tela dos resulta-
dos do processamento para o usuario, conforme
gura 2.
O algoritmo proposto consiste de 4 etapas
principais: A escolha da imagem, a escolha de um
Figura 2: Escopo do trabalho.
metodo de escala de cinza, a geracao de um his-
tograma e a exibicao da imagem preto e branco
corrigida, como pode ser visto no uxograma da
gura 3, nesta representacao e possvel distinguir,
quais fun coes foram utilizadas das bibliotecas do
pacote OpenCV ou nao.
Embora as bibliotecas OpenCV possuam mais
de 500 funcoes para processamento de imagens
(Bradski and Kaehler, 2008), como por exemplo,
a fun cao de conversao RGB para escala de cinza,
o algoritmo proposto realiza o tratamento dos da-
dos em baixo nvel, i.e., pixel a pixel, garantindo
portanto maior liberdade na aplicacao e manipu-
lacao de tecnicas de processamento de imagens,
uma vez que se dene de forma transparente no
codigo todas as operacoes matematicas aplicadas
a uma determinada imagem de entrada.
3.3 Convers ao RGB => Escala de Cinza
Dentre os metodos de conversao de imagem RGB
para escala de cinza foram selecionados tres con-
forme segue:
Clareza (Lightness): Consiste na media dos
valores maximo e mnimo de cada pixel.
Pixel =
max(R, G, B) +min(R, G, B)
2
(1)
Media (Average): Consiste na media dos tres
canais RGB.
Pixel =
R +G+B
3
(2)
Luminosidade (Luminosity): Consiste na me-
dia ponderada dos canais em favor do G, con-
forme a expressao 3.
Pixel = (0.299R)+(0.587G)+(0.114B) (3)
`
As vezes estes metodos produzem resultados
bem similares, porem podem apresentar melhor
desempenho dependendo da imagem utilizada. O
metodo da clareza, por exemplo, reduz o con-
traste enquanto que o da luminosidade tende a
ser a melhor escolha para casos gerais e e utili-
zado em softwares de edicao de imagens como o
GIMP (Cook, 1999).
4 Desenvolvimento do Algoritmo
O projeto foi desenvolvido em ambiente linux, dis-
tribui cao Mint Petra 16, no qual foi instalado o pa-
cote OpenCV versao 2.4.8.0 (Community, 2014) e
utilizado o compilador GNU GCC. O codigo foi
desenvolvido no ambiente de desenvolvimento in-
tegrado Code::Blocks IDE, versao 12.11 (Team,
2014) proporcionando recursos como criacao de
projetos, autocompletar fun coes, realce de varia-
veis repetidas, mas, principalmente, depuracao de
codigo linha a linha e acompanhamento de varia-
veis locais e globais.
4.1 Bibliotecas ANSI C
As bibliotecas C, padrao ANSI, includas no algo-
ritmo foram stdio e math das quais foram utili-
zadas funcoes de entrada e sada de dados como
scanf e printf e fun coes de maximo e mnimo,
fmax e fmin, respectivamente (Schildt, 1997).
Alem disso, foram utilizadas estruturas condicio-
nais e de repeticao como if, for, switch...case, while
e operadores logicos como o AND ao longo do pro-
grama em conjunto com as funcoes exclusivas do
pacote OpenCV.
4.2 Bibliotecas OpenCV
As bibliotecas utilizadas foram cv e highgui. A pri-
meira, tambem conhecida por core corresponde
aos conjuntos de funcoes basicas usadas em to-
das as outras bibliotecas, dene, por exemplo, os
tipos imagem (IplImage), matriz (CvMat) e esca-
lar (CvScalar) e funcoes que permitem a criacao
e conversao entre esses tipos. A segunda corres-
ponde a biblioteca de interface graca que permite
carregar e exibir as imagens na tela atraves de fun-
coes como cvLoadImage e cvShowImage.
4.3 Funcoes Implementadas
Abaixo sao descritas as funcoes criadas neste tra-
balho a partir de funcoes das bibliotecas citadas:
pausa: Limpa o buer de entrada do teclado
e espera que o usuario aperte alguma tecla. Trata-
se principalmente de um requisito de codigo com-
plementar para a funcao de carregamento e exibi-
cao de uma imagem em uma janela.
img2mat: converte uma imagem do tipo
IplImage para CvMat. Para ns de depuracao do
codigo, e possvel exibir na tela a matriz de pixels
obtida contendo os 3 canais (RGB). Essa impres-
sao em tela, no entanto, e deixada como comen-
tario para nao consumir tempo de processamento
na execu cao do programa.
lightness: Corresponde `a primeira op cao de
metodo de conversao RGB para escala de cinza,
clareza, conforme a expressao 1. Para isto, faz
uma conversao da matriz obtida, tipo CvMat,
para o tipo escalar que e manipulavel algebrica-
mente. Esta conversao tambem e feita no caso
da impressao em tela mencionada anteriormente
na fun cao img2mat. Apos essa opera cao mate-
matica, e necessario realizar o caminho inverso,
Figura 3: Fluxograma do Algoritmo Desenvolvido.
convertendo os pixels escalares resultantes para o
formato CvMat.
average: Corresponde `a segunda opcao de
metodo de conversao RGB para escala de cinza -
media - e tem exatamente a mesma estrutura da
funcao lightness, exceto pela opera cao matema-
tica realizada que desta vez corresponde a media
aritmetica dos pixels R,G e B.
luminosity: Terceiro e ultimo metodo de
conversao RGB para escala de cinza proposto -
luminosidade - que, da mesma forma que o ante-
rior so sofre altera cao no calculo executado sobre
os pixels escalares de acordo com a expressao 3.
rgb2gray: Re une as chamadas das fun coes
de conversao RGB para escala de cinza a partir
de um menu de selecao para o usuario. Retorna
uma matriz convertida em tons de cinza do tipo
CvMat.
mat2hist: Fun cao que plota um histograma
da escala de cinza de 0 a 255 a partir da ma-
triz gerada por rgb2gray. A construcao do histo-
grama consiste na geracao de um graco de bar-
ras que neste trabalho possui altura e largura xas
(640x480 px). Para isso, e denida uma largura de
bin sobre o qual sao distribudos os pixels norma-
lizados, uma vez que a quantidade de pixels por
barra depende da gura analisada.
gray2mono: Converte a imagem em escala
de cinza em escala binaria, objetivo deste traba-
lho. Com base no histograma apresentado, o usua-
rio dene o limiar (threshold) da escala de cinza,
i.e., de 0 a 255, para denir os pixels que serao
saturados para branco e os que serao saturados
para preto. Dessa forma, uma varredura da ma-
triz atraves de dois lacos for aninhados executam
um teste logico dos pixels entre maior e menor que
o limiar denido.
5 Analise dos Resultados
Nessa secao, sao apresentados os resultados obti-
dos atraves da aplica cao do algoritmo em 2 ima-
gens diferentes:
1. Imagem de uma palavra escrita `a mao em
uma empalagem de papel;
2. Imagem de uma placa de carro;
As guras 4 a 7 mostram a evolu cao da ima-
gem de uma palavra escrita `a mao em uma emba-
lagem de papel ao longo do algoritmo. Neste caso,
a escolha do limiar de saturacao (22) a partir da
gura 7 e feita de maneira ad hoc e deriva da ob-
serva cao de que os pixels mais escuros da imagem
correspondem basicamente ao texto escrito `a mao.
As guras 8 a 11 mostram a evolu cao da ima-
gem de uma placa de carro ao longo do algoritmo.
Neste caso, a escolha do limiar de saturacao (90) e
mais obvia do que no exemplo anterior.

E interes-
sante observar que existem 3 picos no histograma
Figura 4: Imagem de Teste 01 em RGB.
Figura 5: Imagem de Teste 01 em Escala de Cinza.
Figura 6: Imagem de Teste 01 em Escala Binaria
(Limiar = 22).
Figura 7: Histograma da Imagem de Teste 01 em
Escala de Cinza
da imagem em escala de cinza. Supoe-se que o
1
o
pico corresponde `as letras, o 2
o
pico `a parte es-
cura da placa e o 3
o
pico `a parte clara da placa e
ao plano de fundo da foto.
IMAGENS/placaRGB.png
Figura 8: Imagem de Teste 02 em RGB.
IMAGENS/placaGRAY.png
Figura 9: Imagem de Teste 02 em Escala de Cinza.
IMAGENS/placaMONO.png
Figura 10: Imagem de Teste 02 em Escala Binaria.
IMAGENS/placaHIST.png
Figura 11: Histograma da Imagem de Teste 02 em
Escala de Cinza (Limiar = 90).
6 Diculdades Encontradas
Ao longo do trabalho, foram encontradas dicul-
dades em alguns aspectos da execu cao, dentre
os quais destaca-se aqui os principais. Primeira-
mente, a inexperiencia na area de processamento
de imagens exigiu da equipe o aprendizado de al-
guns conceitos e tecnicas desconhecidos ate entao.
De modo semelhante, ao utilizar as bibliotecas
do OpenCV pela 1
a
vez, fez-se necessario conhecer
a logica do framework disponibilizado e compreen-
der todo um conjunto de estruturas de dados com
o qual a biblioteca opera. Isso tudo, aliado a uma
documentacao que nem sempre e sucientemente
elucidativa, tambem prejudicou o andamento do
projeto.
Finalmente, apesar de ter sido importante na
execucao do projeto, o conceito de ponteiros bem
como sua utiliza cao ainda nao e algo dominado
pela equipe.
7 Conclusao
Com base nos resultados encontrados, pode-se
concluir que os objetivos propostos foram atingi-
dos, visto que o algoritmo desenvolvido proporci-
ona, de maneira satisfatoria, uma melhor visuali-
za cao de imagens que contenham elementos tex-
tuais em um plano de fundo que diculte a leitura.
Obviamente, a utiliza cao da tecnica de satu-
racao por limiar (threshold) para este tipo de apli-
ca cao possui uma serie de limita coes. A primeira
delas ocorre com a presen ca de objetos indeseja-
veis no plano de fundo, que por ventura podem
possuir padroes de cor semelhantes aos do texto
ou objeto que se deseja evidenciar (mascarando as
informacoes do histograma). Outra limitacao esta
relacionada `a dependencia de uma ilumina cao ra-
zoavelmente uniforme, que, caso nao exista, pode
levar a um problema semelhante ao anterior. Fi-
nalmente, a propria deni cao do limiar por si so ja
e um desao. Enquanto neste trabalho a escolha
do limiar foi feita de maneira manual e arbitraria,
em um sistema automatizado deve-se utilizar um
criterio bem denido e que otimize os resultados
de sada como, por exemplo, o Metodo de Otsu
(Otsu, 1979).
O trabalho desenvolvido podera futuramente
ser aprimorado de diversar formas. Uma delas e
aplicar o Metodo de Otsu para detec cao automa-
tizada do limiar de satura cao otimo. Em paralelo,
pensando numa aplicacao de Reconhecimento

Op-
tico de Caracteres, por exemplo, pode-se imple-
mentar funcoes que realizem a segmentacao, de-
teccao dos contornos, extra cao de caractersticas e
classicacao dos caracteres. Por ultimo, com o al-
goritmo devidamente testado e validado, o mesmo
pode compor o rmware de um sistema embar-
cado.
Referencias
Bradski, G. and Kaehler, A. (2008). Learning
OpenCV, OReilly, Sebastopol, CA.
Community, U. (2014). Help wiki opencv.
https://help.ubuntu.com/community/OpenCV.
Cook, J. D. (1999). Three algorithms for conver-
ting color to grayscale.
Maintz, T. (2005). Digital and medical image pro-
cessing, Lecure Notes, Utrecht University .
Otsu, N. (1979). A threshold selection method
from gray-level histograms.
Schildt, H. (1997). C Completo e Total, 3rd edn,
Makron Books.
Team, T. C. (2014). The open-source, cross pla-
taform ide. https://www.codeblocks.org.
Woodford, C. (2012). Opti-
cal character recognition (ocr).
http://www.explainthatstu.com/how-
ocr-works.html.

Interesses relacionados