You are on page 1of 110

CENTRO UNIVERSITRIO DE BRASLIA - UniCEUB

CURSO DE ENGENHARIA DE COMPUTAO

JEAN DIAS DO NASCIMENTO

DETECO E RECONHECIMENTO DE PLACA AUTOMOTIVA COM BAIXO


CUSTO

Orientador: Prof. Ms. C. Francisco Javier De Obalda Daz

Braslia
dezembro, 2012

JEAN DIAS DO NASCIMENTO

DETECO E RECONHECIMENTO DE PLACA AUTOMOTIVA COM BAIXO


CUSTO

Trabalho apresentado ao Centro Universitrio de Braslia


(UniCEUB) como pr-requisito para a obteno de Certificado
de Concluso de Curso de Engenharia de Computao.
Orientador: Ms. C. Francisco Javier De Obalda Daz.

Braslia
dezembro, 2012

JEAN DIAS DO NASCIMENTO

DETECO E RECONHECIMENTO DE PLACA AUTOMOTIVA COM BAIXO


CUSTO

Trabalho apresentado ao Centro Universitrio de Braslia


(UniCEUB) como pr-requisito para a obteno de Certificado
de Concluso de Curso de Engenharia de Computao.
Orientador: Ms. C. Francisco Javier De Obalda Daz.

Este trabalho foi julgado adequado para a obteno do Ttulo de Engenheiro de Computao,
e aprovado em sua forma final pela Faculdade de Tecnologia e Cincias Sociais Aplicadas FATECS.
____________________________
Prof. Abiezer Amarilia Fernandes
Coordenador do Curso
Banca Examinadora:

________________________________

________________________________

Prof. Francisco Javier De Obalda Daz, Ms.

Prof. Flvio Antnio Klein, Ms.

Orientador

UnB

________________________________

________________________________

Prof. Fabiano Mariath DOliveira, Ms.

Prof. Joo Marcos Souza Costa, Esp.

UniCEUB

UniCEUB

DEDICATRIA

Diz no livro de xodo, 35:35 Encheu-os de


sabedoria do corao, para fazer toda a obra de
mestre, at a mais engenhosa, e a do gravador, em
azul, e em prpura, em carmesim, e em linho fino,
e do tecelo; fazendo toda a obra, e criando
invenes.
Este trabalho s tem significado memorvel
quando existem pessoas que repassam sabedoria e
do companheirismo a cada dia. Dedico esta obra:
Aos meus pais, Jorge Jean e Alda Celeste, pela
orientao do caminho a percorrer com amor e
fraternidade. A minha amada esposa, Marcela
Zago, pela comunho de nossa famlia. A minha
irm, Ana Cludia, que sempre renova o
significado de harmonia e amizade. A Deus, pelo
qual tudo possvel e acontece.

AGRADECIMENTOS

Pelo apoio e orientao, professores Francisco Javier e Abiezer Fernandes que


colaboraram de forma relevante para que o trabalho fosse realizado.

SUMRIO

DEDICATRIA

AGRADECIMENTOS

SUMRIO

LISTA DE FIGURAS

LISTA DE TABELAS

11

LISTA DE ABREVIATURAS E SIGLAS

12

RESUMO

14

ABSTRACT

15

1.

16

INTRODUO

1.1.

Apresentao do Problema

16

1.2.

Objetivo do Trabalho

16

1.2.1.

Objetivo geral

16

1.2.2.

Objetivo especfico

17

1.3.

Justificativa e Importncia do Trabalho

17

1.4.

Escopo do Trabalho

17

1.5.

Resultados Esperados

18

1.6.

Estrutura do Trabalho

19

2.

APRESENTAO DO PROBLEMA

20

2.1.

O Problema

20

2.2.

Solues Existentes

21

2.2.1.

Radar e lombada eletrnica

21

2.2.2.

FISCA Sistema de Fiscalizao Inteligente

21

2.3.
3.

Benefcios da Soluo Apresentada


BASES METODOLGICAS PARA RESOLUO DO PROBLEMA

22
24

3.1.

O que Viso Computacional?

24

3.2.

Enfrentando os Desafios

25

3.3.

Componentes de um Sistema de Viso Computacional

26

3.4.

Sistema tico

29

3.5.

Sistema tico Propriamente Dito

32

3.6.

Sistema de Iluminao

35

3.7.

Fundamentos de Imagem Digital

36

3.8.

Rudo

40

3.9.

Filtro Gaussiano

42

3.10.

Segmentao Baseada em Bordas

44

3.11.

Operaes de Dilatao e Eroso da imagem

47

3.12.

OpenCV

48

3.13.

Tesseract OCR

49

3.14.

Linguagem de Programao C/C++

51

3.14.1.

Linguagem C

51

3.14.2.

Linguagem C++

52

4.

MODELO PROPOSTO PARA DETECO E RECONHECIMENTO DE PLACA


AUTOMOTIVA

54

4.1.

Apresentao Geral do Modelo proposto

54

4.2.

Descrio das Etapas do Modelo

54

4.3.

Ferramentas Utilizadas

55

4.3.1.

Microsoft Visual Studio 2008

55

4.3.2.

OpenCV

56

4.3.2.1.

Baixando o OpenCV

57

4.3.2.2.

CMake

58

4.3.2.3.

Compilando com o MSVS 2008

59

4.3.2.4.

Configurando a biblioteca OpenCV no MSVS 2008

61

4.3.3.

Tesseract OCR

63

4.3.3.1.

Leptonica

63

4.3.3.2.

Baixando o Tesseract OCR

64

4.3.3.3.

Compilando o Tesseract OCR

65

4.3.3.4.

Configurando a biblioteca Tesseract OCR no MSVS 2008

65

4.4.

Descrio da Implementao

66

4.4.1.

A captura

67

4.4.2.

O pr-processamento

69

4.4.3.

A localizao do objeto

72

4.4.4.

A validao

75

4.4.5.

A segmentao

77

4.4.6.

A leitura OCR

78

5.

APLICAO PRTICA DA SOLUO PROPOSTA

88

5.1.

Apresentao da rea de Aplicao da Soluo

88

5.2.

Descrio da Aplicao da Soluo

88

5.3.

Resultados da Aplicao da Soluo

90

5.4.

Avaliao Global da Soluo

94

6.

CONCLUSO

96

6.1.

Concluses

96

6.2.

Sugestes para Trabalhos Futuros

97

REFERNCIAS
APNDICE

98
104

LISTA DE FIGURAS

FIGURA 1.1- ARQUITETURA DO PROJETO

18

FIGURA 2.1- FISCA - BLIZ INTELIGENTE.

22

FIGURA 3.1-

PARA O COMPUTADOR O RETROVISOR DE UM CARRO APENA UMA GRADE DE

25

NMEROS

FIGURA 3.2- COMPONENTES GERAIS DE UM SISTEMA DE PROCESSAMENTO DE IMAGENS.

28

FIGURA 3.3- PARMETROS FUNDAMENTAIS PARA DEFINICAO DE UM SISTEMA TICO.

30

FIGURA 3.4 - METODOLOGIA

SISTEMTICA PARA O PROJETO DE UM SISTEMA DE VISO

COMPUTACIONAL.

31

FIGURA 3.5- RELACIONAMENTO ENTRE A PROFUNDIDADE DE CAMPO E A ABERTURA DE LENTES.


33
FIGURA 3.6 - FAIXAS DO ESPECTRO LUMINOSO.

35

FIGURA 3.7 - UMA IMAGEM MONOCROMTICA E A CONVENO UTILIZADA PARA O PAR DE EIXOS
(X,Y).
FIGURA 3.8 - OS COMPONENTES ILUMINNCIA (I) E REFLETNCIA (R) DE UMA IMAGEM.

37
38

FIGURA 3.9 - (A) IMAGEM RUIDOSA. (B) BORDAS DETECTADAS PELO MTODO DE PREWITT. (C)
FILTRAGEM PELA CONVOLUO COM UMA GAUSSINA.

42

FIGURA 3.10 - FILTRO GAUSSIANO

43

FIGURA 3.11- DETECO DE BORDAS DE CANNY

46

FIGURA 3.12 - PRINCPIO DE FUNCIONAMENTO DE OPERADORES MORFOLGICOS.

48

FIGURA 3.13 - A ESTRUTURA BSICA DO OPENCV.

49

FIGURA 4.1- MODELO PROPOSTO NO PROJETO

54

FIGURA 4.2 - INSTALADOR DO MICROSOFT VISUAL STUDIO 2008

56

FIGURA 4.3 - TORTOISESVN

57

FIGURE 4.4 - CMAKE

59

FIGURA 4.5 - COMPILAO DO OPENCV

60

FIGURA 4.6 - TORTOISE TESSERACT OCR

64

FIGURA 4.7 ESTRUTURA DO PROGRAMA IMPLEMENTADO

67

FIGURE 4.8- MODELOS DE PLACAS ADOTAS PELO CONTRAN.

70

FIGURE 4.9- TRANSFORMAO DE CORES EM HLS.

71

FIGURA 4.10 - SUAVIZAO GAUSSIANA.

71

FIGURA 4.11- DETECO DE BORDAS DE CANNY.

73

FIGURA 4.12- CONTORNOS

ENCONTRADOS PELO MTODO CVFINDCONTOURS, UTILIZANDO O

MODO CV_RECT_TREE E MTODO CV_CHAIN_APPROX_SIMPLE DE BUSCA.

FIGURA 4.13- MODO CV_RETR_TREE. RECUPERA

74

TODOS OS CONTORNOS E RECONSTRI A

HIERARQUIA COMPLETA DE CONTORNOS ANINHADOS.

74

FIGURA 4.14 ESPECIFICAO DA PLACA AUTOMOTIVA EM MM PARA CARROS E CAMINHES. 75


FIGURA 4.15- LOCALIZAO DA PLACA.

77

FIGURA 4.16- PLACA RECORDADA E REDIMENSIONADA.

78

FIGURA 4.17- TIPOS DE LIMIARIZAES UTILIZADAS.

80

FIGURA 4.18- PLACA EM PRETO E BRANCO APS O THRESHOLD.

81

FIGURA 4.19- PLACA APS O DILATE E ERODE. PREPARADO PARA LEITURA.

81

FIGURA 4.20- ESPECIFICAO DE FONTE PARA PLACAS.

82

FIGURA 4.21- ARQUIVO PLACA.ARIAL.EXP0.TIF. CARACTERES


TREINAMENTO DA FERRAMENTA DE OCR.

UTILIZADOS

PARA

83

FIGURA 5.1-MOTION EYE DO SONY VAIO.

89

FIGURA 5.2- CMERA ISIGHT DE 8 MEGAPIXELS

89

LISTA DE TABELAS

TABELA 3.1- EXEMPLOS DE VALORES PARA I(X,Y) [EM LUX OU LMEN/M2]. ............................ 38
TABELA 3.2- EXEMPLOS DE VALORES PARA R(X,Y). .................................................................. 38
TABELA 3.3 - NMERO DE BYTES NECESSRIOS PARA ARMAZENAR UMA IMAGEM DIGITAL NXN
COM 2N NVEIS. .................................................................................................................. 40

TABELA 5.1- EXATIDO NA DETECO DA PLACA ..................................................................... 90


TABELA 5.2- PERFORMANCE DO ALGORITMO ............................................................................ 91
TABELA 5.3- EXATIDO DO TESSERACT OCR ........................................................................... 91
TABELA 5.4 - PERFORMANCES

DOS SISTEMAS DE DETECO DE PLACAS AUTOMOTIVAS, NAS

LITERATURAS. .................................................................................................................... 92

LISTA DE ABREVIATURAS E SIGLAS

A/D Analgico/Digital
ALGOL ALGOrithmic Language
API Application Programming Interface
ASCII American Standard Code for Information Interchange
BCPL Basic Combined Programming Language
CLU CLUsters Language
CNSeg Confederao Nacional das Empresas de Seguros Gerais, Previdncia Privada e
Vida, Sade Suplementar e Capitalizao
CONTRAN Conselho Nacional de Transito
FISCA Sistema de Fiscalizao Inteligente
HSL Hue Saturation Lightness
IP Interface Protocols
LCD Liquid Crystal Display
LED Light Emitting Diode Displays
ML Metalanguage
MSVS Microsoft Visual Studio
OCR Optical Character Recognition
RAM Random Access Memory
RGB Red-Green-Blue
SURF Speedef-Up Robust Features
SVN Subversion
TCP Transmission Control Protocol
UF Unidade Federativa
UTF-8 8-bit Unicode Transformation Format

VGA Video Graphics Array

RESUMO

A proposta desse trabalho apresentar uma soluo de viso computacional para


deteco e reconhecimento de placa automotiva utilizando cmeras de baixo custo e
bibliotecas open source de tratamento de imagem OpenCV e de reconhecimento de caracteres
Tesseract OCR. Sendo assim, criado um modelo seguindo os conceitos da viso
computacional abordado em seis etapas, todas comentadas em nvel de instalao e
implementao, sejam elas: a captura, o pr-processamento, a localizao, a validao, a
segmentao e por final transcrevendo a imagem da placa do veculo em caracteres. Aps o
desenvolvimento das etapas, so realizadas trs aferies: do nvel de exatido na deteco da
placa do veiculo, do desempenho do algoritmo e da exatido na converso dos caracteres da
imagem para o formato texto. Neste trabalho so apresentadas todas as dificuldades que foram
encontradas no transcorrer do projeto, desde a fase de concepo aos resultados obtidos,
colecionando assim, vrios materiais tcnicos para se trabalhar com a viso computacional e
proporcionando um exemplo de aplicao que ajudar entender melhor cada etapa.

Palavras Chave: viso computacional, OpenCV, Tesseract OCR, placa automotiva, deteco,
reconhecimento.

ABSTRACT

The purpose of this study is to present a computer vision solution for detection and
recognition of automotive plate using inexpensive cameras and opensource libraries like
OpenCV processing image and Tesseract OCR character recognition. Thus, a model is created
following the concepts of computer vision approached in six steps, all commented on the
level of installation and implementation, they are: the capture, preprocessing, location,
validation, targeting and end transcribing the image of the characters on board the vehicle.
After the development of the steps are performed three measurements: the level of accuracy in
detecting plate of the vehicle, the algorithm's performance and accuracy in converting the
characters from the image into the text format. This work presents all the difficulties that were
encountered in the course of the project, from the design stage to the results obtained,
collecting so many technical materials to work with computer vision and providing an
example application that will help better understand each step.

Keywords: computer vision, OpenCV, Tesseract OCR, automotive plate, detection,


recognition.

16

1. INTRODUO

1.1.

Apresentao do Problema

Os seres humanos podem reconhecer, sem muito esforo, objetos em movimento


utilizando o sentido da viso. E o avano da tecnologia, em capacidade de processamento,
memria e sensoriamento, alm do conjunto de bibliotecas de softwares, envolvendo
melhores prticas e tcnicas, vem reconstruindo a possibilidade dessa capacidade humana.
Porm, a tarefa de reconhecimento de um objeto especfico pelo computador em uma
imagem, um dos tpicos mais complexos no campo da programao visual. O
reconhecimento de uma placa veicular um pequeno desafio nessa rea, devido aos diferentes
tipos, formas e cores. Tambm, dos diversos meios de exposio luminosa, ngulo e distncia
durante aquisio da imagem. Alm disso, para esse tipo de aplicao, fundamental utilizar
uma codificao que satisfaa um rpido processamento para reconhecimento dos padres,
tpico de sistemas que operam em tempo real.
Diante do exposto questiona-se: como possvel localizar e determinar padres de
objetos atravs de uma cmera? Como por exemplo: localizar uma placa veicular em uma
rodovia.

1.2. Objetivo do Trabalho

1.2.1. Objetivo geral

A proposta desse trabalho desenvolver um software que identifique a placa veicular


por vdeo imagem utilizando uma cmeras de baixo custo, como por exemplo, de um celular,
adotando melhores tcnicas e estudos acadmicos em filtros, deteco de padres e
bibliotecas de software, utilizando como base as interfaces de programao de aplicativos
(API) OpenCV e Tessaract OCR, na linguagem de programao C/C++.

17

1.2.2. Objetivo especfico

Para alcanar o objetivo geral do projeto, foram traados alguns objetivos especficos
que primeiramente precisavam ser atendidos:

Identificar as melhores prticas para a programao em C/C++;

Conhecer o funcionamento de sistema de viso: sistema tico, sistema de iluminao,


sistema de aquisio de imagens, sistema de processamento de dados, propriedades
das imagens, pr-processamento, tcnicas de segmentao, filtros e reconhecimento de
padres;

Integrar as bibliotecas de tratamento de imagem OpenCV e de reconhecimento de


caracteres Tesseract OCR, aplicando-as.

1.3. Justificativa e Importncia do Trabalho

Essa necessidade de reconhecer uma placa veicular vem ganhando espao comercial,
onde cada vez mais, o sistema de transporte e segurana vem incrementando benefcios vida
dos cidados, uma vez que pode ser utilizado em inmeras aplicaes, como em controle de
acesso, monitoramento e segurana. Exemplos: utilizando em acessos aos estacionamentos,
controle de trfego em rodovias, em pedgios, em deteco e controle de veculos pelo
departamento de trnsito etc.

1.4. Escopo do Trabalho

Sendo assim, este trabalho dar nfase somente implementao do aplicativo:


deteco e leitura da placa veicular para carros e caminhes - respeitando as possibilidades
impostas pelas configuraes mnimas do meio fsico (distncias, ngulos, condies
climticas e iluminao) e dispositivos eletrnicos (cmera e microcomputador), esclarecidas
ao longo desse trabalho. A figura 1.1 a seguir representa a proposta global:

18

Figura 1.- Arquitetura do projeto


Fonte: Autor.

1.5. Resultados Esperados

O projeto final tem por finalidade:

A entrada de um vdeo em tempo real ou gravado;

A deteco da placa do veculo;

A leitura da placa detectada para o formato texto.


Espera-se tambm com esse trabalho dar profundidade ao assunto, aplicando tcnicas

cada vez mais elaboradas para deteco de objetos e padres, com possibilidade de futura
comercializao.

19

1.6. Estrutura do Trabalho

Alm deste captulo introdutrio, esse trabalho est estruturado em mais cinco
captulos, organizados da seguinte forma:

Captulo 2 Apresentao do Problema: Nesse captulo apresentada uma descrio


do problema que o projeto pretende resolver. Primeiramente sero mostrados alguns
dados atuais e como o problema vem sendo resolvido por alguns profissionais da rea.
Em seguida so mostrados os benefcios da soluo apresentada.

Captulo 3 Bases Metodolgicas para a Resoluo do Problema: Aqui a monografia


apresenta todo o referencial terico e tecnolgico que embasa o projeto. Alm de
aplicar contedos vistos nas disciplinas para a resoluo do problema proposto.

Captulo 4 Modelo Proposto: Esse captulo detalha todas as etapas e passos


necessrios para a resoluo do problema apresentado no captulo 2.

Captulo 5 Aplicao do Modelo Proposto: apresentada nesse captulo uma


aplicao prtica, envolvendo um caso real de aplicao, mostrando a viabilidade da
proposta de resoluo sugerida. Aqui so demonstrados os testes, a simulao e a
avaliao do projeto.

Captulo 6 Concluso: Com este termina-se a documentao do trabalho, permitindo


uma anlise completa de todo o desenvolvimento do projeto e da monografia. Em
seguida so apresentadas sugestes para trabalhos futuros.

20

2.

APRESENTAO DO PROBLEMA

2.1. O Problema

Para muitos especialistas, as estatsticas oficiais no Brasil no relatam a real situao


do trnsito no pas. A demora em compilar os dados obtidos e a forma como so notificados,
at mesmo pelos estados e municpios, comprometem o resultado final das estatsticas. Por
exemplo, sabe-se que atualmente existe um aumento desenfreado da frota de veculos e que a
malha viria das grandes cidades j no suporta essa capacidade de crescimento, porm no se
sabe muito bem como est sendo distribudo o fluxo de veculos que trafegam naquele
determinado instante ou perodo em uma via central de uma capital, inviabilizando a tomada
de decises instantneas para controlar o trafego. Ou, no tem informaes mais elaboradas
da quantidade de carros que trafegam em uma via sem o devido licenciamento do veculo.
Uma situao que muito vem se discutindo tambm sobre o controle da segurana
pblica. Estatsticas do ms de junho de 2012, elaborado pela CNseg (Confederao Nacional
das Empresas de Seguros Gerais, Previdncia Privada e Vida, Sade Suplementar e
Capitalizao), revelou que 19.987 veculos foram furtados no Brasil. Esses elevados nmeros
refletem a ineficincia dos sistemas de segurana.
Portanto, na tendncia natural, previsto que no decorrer do tempo estes nmeros
aumentem ainda mais, tornando o monitoramento e a identificao dos veculos um problema
complexo, trabalhoso ou mesmo ineficiente.
Sendo assim, o intuito deste projeto desenvolver um aplicativo que ajude a realizar o
reconhecimento da placa do veculo, auxiliando, assim, trabalhos futuros que consigam
solucionar os problemas que envolvem a fiscalizao urbana, a gesto do trnsito e a
segurana pblica.

21

2.2. Solues Existentes

2.2.1. Radar e lombada eletrnica

Atualmente, a forma mais comum de monitoramento e fiscalizao dos veculos so os


radares fixos ou mveis que existem nas ruas das grandes cidades.
Existem quatro tipos de radares que multam carros, o radar fixo um deles. Seu
funcionamento bastante simples e acontece sem qualquer interveno humana. So trs
laos detectores em cada faixa de uma via. Quando um veculo passa, os laos calculam sua
velocidade. Se o motorista estiver acima da velocidade permitida no local, a cmera
fotogrfica acionada. Para no ofuscar o motorista durante a noite, alguns radares utilizam
flash infravermelho. O sistema independente em cada faixa, ou seja, se dois carros passarem
ao mesmo tempo um do lado do outro em um radar, ele consegue diferenciar a velocidade.
Os outros trs tipos de radares tambm funcionam de modo parecido, mas com
algumas diferenas. No primeiro, h totens na calada que mostram a velocidade do veculo
para o motorista utilizando um lao detector que calcula a velocidade do carro. O segundo o
radar esttico com trip popularmente conhecido como o radar mvel dois feixes de
laser perpendiculares pista calculam a velocidade dos carros que passam. Esse sistema
incapaz de diferenciar dois carros que passem juntos por um feixe. Assim, quando isso
acontece, o radar anula a medio, mesmo que um dos veculos esteja em alta velocidade. O
ltimo tipo de radar o nico realmente mvel e tambm o nico que , de fato, um radar,
pois usa o efeito doppler para clculo da velocidade. Apontado para um veculo, ele lana
uma onda eletromagntica que, aps atingir o veculo e voltar, mostra a velocidade em que ele
estava.

2.2.2. FISCA Sistema de Fiscalizao Inteligente

A empresa Search Tecnologia desenvolveu um produto chamado FISCA visando


fiscalizar os veculos cadastrados na base local e de outras UF's do Departamento de Transito
(DETRAN), propondo a deteco instantnea das irregularidades dos veculos que trafegam.

22

O sistema captura a placa dos veculos que cruzam pela barreira (BLITZ), por meio de
cmara. O procedimento pode capturar as placas dianteiras ou traseiras dos veculos.
O sistema transmite a placa em forma de imagem para uma estao de reconhecimento
de caracteres onde convertida para arquivo texto e encaminha para o sistema central de
processamento que por sua vez, verifica as informaes de dbitos, informaes de bloqueios,
informaes de roubo/furto, informaes de seguro obrigatrio e ainda os dados do condutor
se este for o proprietrio do veiculo.
A figura 2.1 a seguir, exemplifica o funcionamento.

Figura 2.- FISCA - Bliz Inteligente.


Fonte: extrado da internet no endereo, em 13/10/12: http://detran.ap.gov.br/produtos/fisca/fisca.jsp

2.3. Benefcios da Soluo Apresentada

A ideia de trazer a inteligncia na fiscalizao com a prvia triagem dos veculos,


identificando possveis usurios com problemas e prestando servios para corrigirem suas
pendncias com os rgos arrecadadores, ou na possibilidade de identificao e localizao
imediata de veculo com registro de roubo e bloqueios judiciais para apreenso do veculo,

23

so alguns dos benefcios para o sistema. Essa possibilidade aumentaria a eficincia das
autoridades de fiscalizao, acabando com a seleo aleatria de veculos e prestando um
servio de segurana eficiente.

24

3.

BASES METODOLGICAS PARA RESOLUO DO PROBLEMA

Nas

prximas

sees

sero

apresentados

conceitos

importantes

para

desenvolvimento do projeto.

3.1. O que Viso Computacional?

Viso computacional a transformao de dados de uma cmera fotogrfica ou de


vdeo em qualquer uma deciso ou em uma nova representao, segundo os autores Trucco
(1998) e Forsyth (2003). Todas essas transformaes so feitas para alcanar algum objetivo
particular. Os dados de entrada podem incluir uma informao de contexto como tem um
carro nesse local ou o laser localizador indica um objeto est a 1 metro de distncia". A
deciso pode ser o carro est em movimento" ou existem 14 clulas tumorais neste slide. A
nova representao pode transformar uma imagem colorida em escala de cinza ou remoo de
uma cena a partir de uma sequncia de imagens.
Como criaturas visuais, fcil o ser humano se enganar pensando que o computador
realizar tarefas de forma simples. Quo difcil encontrar, por exemplo, um carro quando
algum est olhando para ele em uma imagem? O crebro humano divide a viso em muitos
canais diferentes, onde exprimem uma grande quantidade de informaes em seu crebro. O
crebro humano tambm tem um sistema de deteco que cruza informaes ao ver uma parte
de um objeto, utilizando uma espcie de realimentao que cruza informaes associadas ao
longo da experincia vivida.
Num sistema de viso artificial, no entanto, um computador recebe grandes
quantidades de nmeros a partir de uma cmera ou de um meio de armazenamento de
informao. Que, para a maior parte, no h reconhecimento do padro interno ou nenhum
controle automtico de foco e abertura. Tambm no h associaes cruzadas com anos de
experincia. Assim, por inferncia ao exposto, conclui-se que a rea da viso computacional
pouco desenvolvida, exigindo assim, vrios estudos complexos de fsica, matemtica e
computao.
A Figura 3.1 mostra a imagem de um automvel. Nesse quadro, existe um retrovisor
do lado do motorista. No entanto, o que o computador "v" apenas uma grade de nmeros.

25

Estes nmeros trazem poucas informaes. Existe assim, a difcil misso de transformar esta
grande quantidade de nmeros em sentido, o que faz o estudo da viso computacional uma
tarefa difcil.

Figura 3.- para o computador o retrovisor de um carro apena uma grade de nmeros
Fonte: Bradski e Kaehler (2008).

Outro motivo importante que os dados so corrompidos por rudo e distoro. Tal
fato decorre de variaes no mundo (clima, iluminao, reflexos, movimentos), imperfeies
na lente e configurao mecnica, o tempo de integrao com o sensor (borro na imagem), o
rudo eltrico no sensor ou outros aparelhos eletrnicos e artefatos de compresso aps
captura de imagem. Dado os desafios, como obter algum progresso?

3.2. Enfrentando os Desafios

Para o autor E. Roy Davies (2005), a viso computacional depende de vrios mtodos
para ter uma margem de sucesso considervel. Desde a aquisio da imagem tomada de
deciso. A seguir, algumas resumidamente:

26

Aquisio de imagem: atualmente existem de vrios modelos de sensores de imagem,


como por exemplo: as cmeras fotogrficas, dispositivos de infravermelho e
ultravioleta, sensores gamas etc. Que tem por finalidade extrair um conjunto de
informaes bidimensional ou tridimensional.

Pr-processamento: antes que algum mtodo de viso computacional possa ser


aplicado, a fim de extrair alguma informao especfica, geralmente necessrio
processar os dados de modo a assegurar que a mesma satisfaa certas hipteses
impostas pelo mtodo. Exemplos so: re-amostragem, a fim de assegurar que o
sistema de coordenadas est correta. A reduo do rudo, a fim de assegurar que o
rudo do sensor no introduza informaes falsas. Aumento de contraste, para
assegurar que a informao relevante seja detectada.

Segmentao: um ponto importante para deteco de um objeto conhecer as regies


da imagem, pontuando-as por nveis de interesse ou relevncia.

Alto nvel de processamento: nessa etapa, tipicamente utiliza-se um pequeno


conjunto de informaes, assumindo que contenha o objeto especfico de pesquisa.
Como por exemplo: verifica-se se os dados satisfazem o modelo bsico ou um
pressuposto especfico das informaes. Assim como os parmetros de observao,
como o tamanho do objeto ou a posio onde este se encontra. O reconhecimento da
imagem, classificando-a como um objeto. E o registro da informao, comparando ou
combinando duas vises de um mesmo cenrio.

Tomada de deciso: nesse nvel, o sistema toma a deciso final. Como por exemplo:
encontrou ou no o objeto de estudo. Se, passa ou descarta o produto, pela inspeo
automtica de qualidade. Sinaliza o cenrio, indicando se existem as caractersticas
informadas, como a deteco da placa do automvel ou localizao de uma
determinada pessoa em um local.

3.3. Componentes de um Sistema de Viso Computacional

Sistemas de viso integram, em uma nica soluo, uma srie de tecnologias


diferentes, permitindo a grande flexibilidade no desenvolvimento de aplicaes em diversas
reas do conhecimento.

27

A organizao destes sistemas em diferentes partes/componentes conveniente, pois


permite o estudo de cada tecnologia empregada no sistema em separado.
Gonzalez and Woods (2002) apresentam uma estrutura de componentes interligados
para a organizao de sistemas de processamento de imagens como pode ser visto na figura
3.2.
Segue uma breve descrio de cada componente do modelo:

Sensores: dispositivo fsico sensvel energia irradiada pelo objeto do qual se


pretende adquirir uma imagem, convertendo-a num sinal eltrico proporcional
intensidade da energia recebida.

Hardware de Aquisio: dispositivo responsvel pela digitalizao do sinal


proveniente do sensor e por realizar algum pr-processamento sobre estes dados antes
de envi-los ao computador.

Computador: o elemento principal do sistema, que coordena todas as atividades


desempenhadas, desde o acionamento do hardware de aquisio da imagem, as tarefas
do software de processamento de imagem, o armazenamento dos dados, cpia backup
em mdias, at a visualizao dos resultados em um display. De acordo com o tipo de
aplicao, o computador pode ser um PC comum, ou um super computador, ou at
mesmo uma unidade de processamento dedicada ao controle das tarefas do sistema,
podendo estar embutido totalmente junto ao sensor e ao hardware de aquisio das
imagens (cmeras inteligentes).

Software de Processamento: consiste de uma cadeia de algoritmos de processamento


de imagem ordenada de forma a solucionar o problema em questo, retornando dados
importantes para o computador, o qual deve tomar as decises em relao aos
resultados apresentados.

Armazenamento: espao de memria dedicada ao armazenamento das imagens e


dados adquiridos pelo sistema para possibilitar seu processamento de forma rpida e
otimizada. Compreende o espao de memria RAM no computador, memria no
prprio hardware de aquisio ou at mesmo as demais mdias de acesso mais lento do
computador.

28

Displays: dispositivos responsveis por apresentar um resultado grfico do estado de


evoluo do sistema ao usurio. Pode ser um monitor, LCDs, telas de plasma, dentre
outros.

Meios de cpia: dispositivos que fazem a cpia fsica segura da informao adquirida
e processada pelo sistema. Podem ser impressoras, mdias ticas, cartes de memria,
dentre outros.

Rede: a rede um componente essencial do sistema principalmente quando os


resultados do sistema tm de ser enviados a uma estao remota distante do local de
operao do sistema.

Figura 3.- Componentes gerais de um sistema de processamento de imagens.


Fonte: Gonzalez and Woods (2002).

29

J para a organizao modular de um sistema de viso completo, segundo o autor


Jhne (1999) apresenta uma estrutura de componentes visando separar metodicamente as
diferentes tecnologias contidas no sistema.

Fonte de Radiao: iluminao adequada para o realce das caractersticas do objeto


em estudo necessria, tendo em vista que a maioria dos objetos no emitem luz
prpria, sendo esta importante para sensibilizar o sensor de aquisio da imagem.

Cmera: direciona e coleta a radiao proveniente do objeto em estudo para o sensor


de aquisio.

Sensor: converte o sinal de radiao recebido em outro compreensvel unidade de


processamento.

Unidade de Processamento: coleta, organiza e processa os sinais recebidos do


sensor, extraindo caractersticas e tomando decises a partir destas informaes.

Atores: reagem ao resultado das observaes realizadas pela unidade de


processamento.

3.4. Sistema tico

No desenvolvimento de uma aplicao de viso, deve-se tomar muito cuidado na


escolha de cada componente do sistema. Um princpio bsico para que se possa escolher bons
algoritmos de processamento de imagens e alcanar bons resultados na interpretao das
informaes, obter como entrada do sistema uma imagem de boa qualidade (Davies, 2005);
(Jain, Kasturi e Schunck, 1995). Ou seja, a etapa de aquisio da imagem deve ser bem
configurada, o que implica a escolha correta e precisa do hardware do sistema de viso.
Conforme explicado anteriormente, erros na configurao destes equipamentos, como por
exemplo, obteno de imagens escuras ou com sombras perturbadoras, foco inapropriado,
magnificao insuficiente, tempo de aquisio imprprio e rudos demasiados podem
inviabilizar a implementao da aplicao.

30

Alguns parmetros de um sistema de viso exercem normalmente maior influncia


sobre a configurao do sistema tico. Estes parmetros so ditos parmetros fundamentais,
sendo necessrio familiarizar-se com os mesmos para de iniciar um projeto.
A figura 3.3 ilustra estes parmetros.

Figura 3.- Parmetros fundamentais para definicao de um sistema tico.


Fonte: Edmund Optics em http://www.edmundoptics.com/

Segue uma descrio detalhada dos mesmos parmetros segundo os autores Jain,
Kasturi and Brian (1995):

Campo de Viso (Field of Vision FOV): representa a rea visvel do objeto em


estudo que incide sobre o sensor, ou seja, a poro do objeto que preenche e
sensibiliza a rea do sensor.

Distncia de Trabalho (Working Distance WD): representa a distncia da parte


frontal das lentes at a superfcie do objeto. Trata-se normalmente de uma faixa de
valores (mximo e mnimo).

Profundidade de Campo (Depth of Field DOF): representa a maior distncia (em


termos profundidade no campo de viso) que pode ser mantida em foco no objeto de
estudo para uma determinada distncia de trabalho. Tambm pode ser vista como a
quantidade de movimento permitida ao objeto que ainda conserve foco na rea ou
superfcie inspecionada.

31

Resoluo (Resolution R): representa a menor poro do objeto em estudo que pode
ser distinguida pelo sistema. normalmente visualizada em pares de linha, ou em
nmero de pixels, e tambm bem conhecida pela expresso resoluo espacial.

Tamanho do Sensor (Sensor Size SS): representa o tamanho da rea ativa do sensor,
especificada em sua dimenso horizontal.
Desta forma, o primeiro passo de um projeto de sistema de viso identificar os

parmetros fundamentais na aplicao, que permitem inferir a respeito dos demais


dispositivos necessrios ao sistema. A figura 3.4 apresenta uma metodologia sistemtica para
o projeto de um sistema de viso do ponto de vista do hardware do sistema (Deschamps,
2004).

Figura 3. - Metodologia sistemtica para o projeto de um sistema de viso computacional.


Fonte: Deschamps (2004).

32

Observa-se no diagrama que o projeto inicia sempre com a identificao dos


parmetros fundamentais para a boa formao das imagens (FOV, DOF, WD, R, SS e
derivados). Na sequncia, um pr-projeto do sistema de processamento pode ser inferido, de
acordo com as restries temporais da aplicao. Em geral nesta fase j foram adquiridas
algumas imagens do objeto de estudo, e pode-se tentar inferir solues preliminares para o
processamento destas.
Um sensor para aquisio das imagens deve ser escolhido, levando-se em conta o tipo
de varredura, taxa de aquisio e resoluo necessrias para atacar o problema. O conjunto
tico e de iluminao devem ser ajustados para permitir correta magnificao, foco e destaque
para o objeto em estudo na imagem. Em geral a escolha de ambos estes sistemas feita de
maneira paralela pela forte ligao de algumas caractersticas das lentes e a quantidade de
luminosidade que afeta o sistema.

3.5. Sistema tico Propriamente Dito

O sistema tico formado pela composio de lentes, tubos extensores e de


montagem, filtros, difusores, polarizadores, espelhos, prismas e fibras ticas, sendo
responsvel pelo direcionamento e dimensionamento dos feixes luminosos que provm do
objeto para o sensor tico (Jhne, 1999).
As lentes definem a superfcie de foco e a magnificao (ampliao ou reduo) da
imagem do objeto em estudo. Podem ser cncavas, convexas, plano-convexas, telecntricas,
dentre outras. Os tubos extensores (ou espaadores) auxiliam na magnificao da imagem do
objeto em estudo, porm, diminuem a quantidade de iluminao incidente sobre o sensor e
limitam a distncia de trabalho. J os tubos de montagem servem para adaptar diferentes
padres de lentes e cmeras. Filtros extraem frequncias especficas do espectro luminoso que
incide no sensor, como por exemplo, filtros de cores visveis ao olho humano, filtros
infravermelhos e ultravioletas, dentre outros. Difusores so aplicados no espalhamento ou
disperso dos raios luminosos incidindo sobre os objetos, para dar um aspecto mais
homogneo de iluminao. J os polarizadores filtram a intensidade dos feixes luminosos
incidentes sobre o objeto em estudo. Espelhos so usados na manipulao da trajetria dos
feixes luminosos incidentes na cena em estudo por reflexo, sendo muito usados para simular
dupla aquisio de imagens, ou seja, aquisio feita por duas cmeras, porm, realizada com

33

apenas uma cmera, para economizar custos do sistema. Os prismas tambm possuem
caractersticas reflexivas, porm, costumam ser usados para realizar a diviso dos feixes
luminosos em mais de uma direo, ou at mesmo a separao de componentes da luz.
Abaixo alguns conceitos para entendimento do sistema tico:

Abertura de lentes ( f /# ou f-number): representa o controle de abertura da ris das


lentes, proporcionando uma medida da quantidade de luminosidade que sensibiliza o
sensor tico. medida que a ris se fecha, f /# aumenta. H uma relao ntima entre a
abertura de lentes e a profundidade de campo do sistema, como pode ser visto na
figura 3.5. H um aumento na profundidade de campo do sistema medida que a
abertura da ris diminui. Em contrapartida, deve-se compensar a quantidade luminosa
incidente no sensor aumentando a potncia da fonte luminosa.

Figura 3.- Relacionamento entre a profundidade de campo e a abertura de lentes.


Fonte: Edmund Optics em http://www.edmundoptics.com/

Magnificaes primria: representam a relao de proporo entre as dimenses do


objeto em estudo no mundo real e as imagens projetadas no sistema. Representa o
quanto o objeto em estudo ser aumentado (ou diminudo) de acordo com o tamanho
da imagem projetada no sensor.

34

Limites focais da lente: influenciada diretamente pela distncia de trabalho do


sistema, ou seja, necessrio conhecer a distncia do objeto em estudo em relao s
lentes para poder determinar onde queremos manter foco para a aquisio das
imagens. Os limites focais significam na verdade uma faixa de valores de distncias
em que o sistema alcana foco sobre o objeto. O termo limite focal tambm
conhecido como profundidade de foco na literatura de viso de Griot (1999).

Contraste: uma comparao entre as diversas tonalidades de cinza (intensidade


luminosa) da imagem adquirida, que auxilia a identificar e separar objetos do fundo da
imagem. fortemente influenciado pelas caractersticas da lente, da cmera e
principalmente da iluminao do sistema. O contraste normalmente definido em
termos de porcentagem. Por exemplo, uma linha preta desenhada sobre uma superfcie
branca resulta em 100% de contraste entre a linha e a superfcie.

Distores e erros de perspectiva: fenmenos como o de distoro e os erros de


perspectiva alteram a qualidade final da imagem. A distoro um fenmeno (ou
aberrao de natureza geomtrica) que ocorre com as lentes devido as suas
caractersticas esfricas, produzindo diferenas de magnificao em pontos distintos
da imagem, fazendo com que os objetos sejam dispostos incorretamente na imagem
em relao ao seu centro. Ou seja, a distoro no causa perda de informaes na
imagem, mas sim um posicionamento incorreto de partes da imagem. A distoro
(D%) pode ser corrigida por software calculando a porcentagem de erro de distoro
ou deslocamento ocasionado pelas lentes, atravs dos valores de distncia atuais (AD)
e previstos (PD) nas imagens adquiridas. J os erros de perspectiva (conhecidos por
parallax) so fenmenos bem conhecidos da viso humana, sendo de fato, o que
permite o crebro humano interpretar as informaes 3D do mundo real. Estes erros
so mudanas na magnificao de um objeto, dando a impresso de que as regies
mais prximas da lente tenham dimenses maiores do que as que se encontram mais
distantes.
Os conceitos apresentados nos tpicos de sistema tico (3.4) e sistema tico

propriamente dito (3.5), no fazem parte do projeto fsico deste trabalho e tem por finalidade,
citar conceitos mais amplos sobre o assunto. O autor deste projeto utiliza um sistema tico de
baixo custo, a exemplo de vdeos cmeras de celulares (Iphone 4S) e webcam (resoluo
VGA) cujo sistema tico projetado foi otimizado necessidade do prprio aparelho.

35

3.6. Sistema de Iluminao

O objetivo do sistema de iluminao a projeo de luz sobre o objeto em estudo, pois


em geral estes no emitem luz prpria, que necessria para a sensibilizao do sensor tico.
Quando se menciona em luz, entende-se qualquer faixa do espectro luminoso, e no apenas a
faixa do espectro visvel ao olho humano. Existem muitas solues de viso que requerem
inclusive a aplicao de luz incidente em faixas no visveis do espectro luminoso, como, por
exemplo, as imagens de tomografia mdica, algumas imagens astronmicas e imagens
infravermelho de curvas de calor. A figura 3.6 ilustra toda a faixa do espectro luminoso.
Repara-se como pequena a faixa visvel ao olho humano, e quo limitada seria a tecnologia
de viso caso se restringisse apenas a esta estreita faixa do espectro.

Figura 3. - faixas do espectro luminoso.


Fonte: extrado da internet no endereo, em 21/11/2012: http://danscientia.blogspot.com.br/2010/03/relacao-da-frequencia-com-o-comprimento.html

Sendo assim, a escolha de um tipo de iluminao correto para o ambiente da aplicao


torna-se extremamente importante, pois se o objeto em estudo no for destacado (apresentar
bom contraste) em relao s demais informaes da cena, dificilmente consegue-se progredir
na soluo, e o projeto pode ser totalmente inviabilizado. Em contrapartida, caso uma boa

36

iluminao seja alcanada, as etapas de processamento das informaes tornam-se muito mais
fceis conforme Erhardt-Ferron (2000).
Em geral, a escolha de uma fonte luminosa e de uma tcnica de iluminao adequada
so influenciadas pelas caractersticas superficiais do objeto em estudo (geometria, estrutura,
cor, transparncia, reflectncia), onde o objetivo normalmente incidir sobre a superfcie do
objeto uma iluminao homognea e constante ao longo do tempo, conforme Erhardt-Ferron
(2000) e Jhne (1999).
O projeto de iluminao de um sistema de viso consiste normalmente de trs etapas,
Deschamps (2004):

Determinar o tamanho exato do campo de viso (junto ao projeto do sistema tico),


para que se compreenda o tamanho e as caractersticas superficiais da rea que se
deseja iluminar.

Determinar o tipo de fonte luminosa adequada aplicao (tungstnio, fluorescente,


halognio, LED, laser), escolhendo uma faixa de frequncia apropriada do espectro
luminoso conforme as caractersticas superficiais do objeto em estudo vistas no passo
anterior.

Determinar a geometria (posio da fonte em relao ao objeto e sensor, direo dos


feixes luminosos), a potncia, eficcia e caractersticas temporais da fonte luminosa,
necessrias para realar as partes desejveis do objeto de forma homognea e
constante ao longo do tempo.

3.7. Fundamentos de Imagem Digital 1

Este tpico tem por objetivo apresentar as principais caractersticas das imagens
digitais.
Uma imagem monocromtica pode ser descrita matematicamente por uma funo
f(x,y) da intensidade luminosa, sendo seu valor, em qualquer ponto de coordenadas espaciais

MARQUES FILHO, Og; VIEIRA NETO, Hugo. Processamento Digital de Imagens, Rio de Janeiro:

Brasport, p.19-20, 1999.

37

(x,y), proporcional ao brilho (ou nvel de cinza) da imagem naquele ponto. A figura 3.7
mostra uma imagem monocromtica e a conveno utilizada para o par de eixos (x,y).

Figura 3. - Uma imagem monocromtica e a conveno utilizada para o par de eixos (x,y).
Fonte: MARQUES FILHO, Og; VIEIRA NETO (2009).

A funo f(x,y) representa o produto da interao entre a iluminncia i(x,y) que


exprime a quantidade de luz que incide sobre o objeto e as propriedades de refletncia ou
de transmitncia prprias do objeto, que podem ser representadas pela funo r(x,y), cujo
valor exprime a frao de luz incidente que o objeto vai transmitir ou refletir ao ponto (x,y).
Estes conceitos esto ilustrados na figura 3.8. Matematicamente:

f ( x, y ) = i ( x, y ) . r ( x, y )
com:
i ( x, y ) > 0
0 < r (x,y) < 1

(3.1)

38

Figura 3. - Os componentes iluminncia (I) e refletncia (R) de uma imagem.


Fonte: MARQUES FILHO, Og; VIEIRA NETO (2009).

As tabelas 3.1 e 3.2 apresentam valores tpicos de iluminncia e refletncia.

Tabela 3.- Exemplos de valores para i(x,y) [em lux ou lmen/m2].


i(x,y)
900

dia ensolarado

100

dia nublado

10

iluminao mdia de escritrio

0,001

noite clara de lua cheia

Fonte: MARQUES FILHO, Og; VIEIRA NETO (2009).

Tabela 3.- Exemplos de valores para r(x,y).


r(x,y)
0.93

neve

0.8

parede branco-fosca

0.65

ao inoxidvel

0.01

veludo preto

Fonte: MARQUES FILHO, Og; VIEIRA NETO (2009).

39

No caso de uma imagem que possui informaes em intervalos ou bandas distintas de


frequncia, necessria uma funo f(x,y) para cada banda. o caso de imagens coloridas
padro RGB, que so formadas pela informao de cores primrias aditivas, como o vermelho
(R - Red), verde (G - Green) e azul (B - Blue).
No processo de digitalizao, o sinal analgico de vdeo obtido atravs da sada do
dispositivo de aquisio deve ser submetido a uma discretizao espacial e em amplitude para
tomar o formato desejvel ao processamento computacional.
A amostragem o processo de discretizao espacial e dar-se o nome de quantizao
ao processo de discretizao em amplitude.
Basicamente, a amostragem converte a imagem analgica em uma matriz de M por N
pontos, cada qual denominado pixel (ou elemento de imagem):

(
(

[
(

)
)

(
(
)

)
)

(
(
)

)
)

(3.2)

Maiores valores de M e N implicam em uma imagem de maior resoluo.


Por outro lado, a quantizao faz com que cada um destes pixels assuma um valor
inteiro, na faixa de 0 a 2n-1. Quanto maior o valor de n, maior o nmero de cores presentes na
imagem digitalizada.
Do ponto de vista eletrnico, a digitalizao consiste em uma converso analgica
digital na qual o nmero de amostras do sinal contnuo por unidade de tempo indica a taxa de
amostragem e o nmero de bits do conversor A/D utilizado determina o nmero cores
resultantes na imagem digitalizada.
Na especificao do processo de digitalizao deve-se decidir que valores de N, M e n
so adequados, do ponto de vista de qualidade da imagem e da quantidade de bytes
necessrios para armazen-la. A tabela 3.3 fornece uma ideia estimada do nmero de bytes
necessrios para armazenar uma imagem de N x N pixels com 2n tons de cinza, calculados
como: N x N x n / 8.

40

Tabela 3. - Nmero de bytes necessrios para armazenar uma imagem digital NxN com 2n
nveis.

Fonte: MARQUES FILHO, Og; VIEIRA NETO (2009).

Assume-se que um pixel estar inteiramente contido em um byte, mesmo que isto
signifique que alguns bits de cada byte permaneam vazios. Por exemplo, para n igual a 5,
assume-se que cada pixel ocupa um byte, restando 3 bits sem utilizao em cada byte.
Do ponto de vista qualitativo, pode-se perguntar: quantos pontos e nveis de cinza
sero necessrios para que a verso digitalizada de uma imagem apresente qualidade
comparvel imagem original? Parece evidente que quanto maiores os valores de M, N e n,
melhor a imagem digital resultante. Mas sabendo que elevados valores de M, N e n implicaro
em maiores custos de digitalizao e armazenagem. Deve existir uma forma de definir valores
adequados qualidade desejada. Convm observar ainda que qualidade de imagem um
conceito altamente subjetivo, que tambm depende fortemente dos requisitos da aplicao
dada.

3.8. Rudo 2

Na prtica, as imagens digitais so corrompidas por rudos durante sua aquisio ou


transmisso, requerendo que essas imagens sejam filtradas antes de seu processamento. A
definio do termo rudo no precisa, mas geralmente rudo considerado informao
espria (indesejada) na imagem. Em sentido amplo, o termo filtragem implica na manipulao

ROSITO JUNG, Cludio. Filtragem de Imagens com Preservao das Bordas Usando a Transformada
Wavelet, Porto Alegre: p. 19-20, 2002.

41

do contedo de frequncia da imagem, porm aqui utilizado para denotar a remoo (ou
atenuao) do rudo em uma imagem.
Em particular, de extrema importncia que as bordas sejam preservadas durante a
filtragem. As bordas da imagem delimitam as fronteiras entre dois objetos que compem uma
cena, e so fundamentais tanto na percepo do sistema visual humano segundo Hubel (1962),
quanto na anlise de imagens (por exemplo, na segmentao da imagem em seus objetos
componentes). Infelizmente, a grande maioria das tcnicas de filtragem existentes na literatura
no se mostram eficientes na preservao das bordas. A distino entre rudo e bordas
muito difcil para um sistema de viso computacional, embora seja normalmente uma tarefa
trivial para o sistema visual humano. Na verdade, os processos de filtragem e deteco de
bordas so interdependentes, como ser visto a seguir.
A caracterizao matemtica do rudo no simples, pois existem diferentes tipos de
rudos e com origens distintas. Entretanto, o rudo em uma imagem monocromtica
caracterizado geralmente por variaes de alta frequncia espacial na intensidade de tons de
cinza. Por outro lado, as bordas da imagem representam as fronteiras entre os objetos que
compem uma cena, e so caracterizadas por variaes bruscas nos tons de cinza
(correspondentes s transies entre duas regies aproximadamente homogneas associadas a
dois objetos distintos), que tambm correspondem s altas frequncias espaciais.
Em geral, as variaes de intensidade correspondentes s bordas tm amplitude maior
do que as variaes de intensidade associadas ao rudo. Contudo, essa hiptese no vlida
para bordas de baixo contraste (como, fronteiras entre regies que tem aproximadamente a
mesma mdia nos tons de cinza), ou quando a quantidade de rudo presente na imagem
grande. Nesses casos, a distino entre bordas e rudo pode ser bastante complexa, resultando
em falsas bordas (rudo erroneamente detectado como borda) e/ou falhas na deteco das
bordas de baixo contraste.
Para que a filtragem seja eficiente, o rudo deve ser atenuado nas regies homogneas
da imagem, mas as bordas no devem ser suavizadas. Para tal, importante que se conhea a
localizao das bordas. Por outro lado, a deteco das bordas requer uma imagem filtrada,
pois a deteco das mesmas em imagens ruidosas apresenta resultados errneos. Como
exemplo, a figura 3.9 (a) mostra uma imagem contaminada por rudo Gaussiano aditivo,
Larson and Shubert (1979). A figura 3.9 (b), mostra as bordas detectadas pelo mtodo de
Prewitt, Pratt (1991), enquanto que a figura 3.9 (c) mostra o resultado da filtragem pela

42

convoluo com filtro Gaussiano (Jain, 1989). Pode-se notar que as bordas da imagem filtrada
esto borradas, e que a deteco delas no foram eficientes (contornos abertos e varias falsas
bordas detectadas).

Figura 3. - (a) Imagem ruidosa. (b) Bordas detectadas pelo mtodo de Prewitt. (c) Filtragem
pela convoluo com uma Gaussina.
Fonte: Jung, Cludio (2002).

3.9. Filtro Gaussiano 3

Um dos filtros mais utilizados para atenuao de rudo o baseado na distribuio


Gaussiana. O filtro gaussiano tambm muito utilizado para suavizao de imagens, com a
diferena de no preservar as arestas uma vez que no considera a diferena das intensidades.
Ele possui dois parmetros, a dimenso da janela e um valor para o desvio padro mximo
sigma. Seu comportamento similar ao filtro passa-baixa, isto , suavizao de imagens. O
quanto a imagem ser suavizada est relacionada ao desvio padro sigma, isto , quanto maior
o sigma, mais a imagem suavizada, no dependendo muito do parmetro referente a
dimenso da janela. Quanto maior o sigma, maior o nmero de pixels cujo valor diferente de
zero, o que leva os pixels vizinhos a terem maior influncia em cada ponto, realizando uma
suavizao maior na imagem, o que no significa, necessariamente, uma melhoria na qualidade
da imagem, conforme mostra a figura 3.10.

Texto
modificado,
retirado
em
Joint
Bilateral
Upsample
<http://lvelho.impa.br/ip09/demos/jbu/filtros.html > acesso em 13/10/2012).

(disponvel

em:

43

Visto que um filtro utilizado para atenuao do rudo, o mtodo deve ser bem
empregado para trabalhar com a deteco de bordas, visto que a qualidade da imagem diminui
devido a suavizao, dificultado a localizao precisa do objeto.
O filtro Gaussiano definido por:

(||

||)

(3.3)

Onde,

( )

(3.4)

A figura 3.10, a seguir, mostra o resultado da aplicao do filtro gaussiano com


diferentes .

Figura 3. - Filtro Gaussiano


Fonte: extrado da internet no endereo, em 13/10/12: http://lvelho.impa.br/ip09/demos/jbu/filtros.html

44

3.10. Segmentao Baseada em Bordas 4

Na deteco de bordas so analisadas as descontinuidades nos nveis de cinza. Neste


trabalho ela empregada para delimitar os objetos encontrados na imagem. Definindo os
padres dos objetos, o sistema capaz de identific-los.
Uma borda o limite entre duas regies com propriedades relativamente distintas de
nvel de cinza. As bordas na imagem caracterizam os contornos dos objetos e so bastante
teis para segmentao e identificao de objetos na cena. Porm, quando a imagem
diferenciada, todas as variaes dos nveis de cinza so detectadas e, por consequncia,
detectam-se tambm bordas esprias, que uma forma indesejvel de variao. Para que as
bordas esprias, provenientes de rudo ou textura da imagem, no sejam detectadas, deve-se
suavizar a imagem antes da deteco. Contudo, existem efeitos inoportunos ligados
suavizao, como a perda de informao e o deslocamento de estruturas de feies relevantes
na imagem. Alm disso, existem diferenas entre as propriedades dos operadores diferenciais
comumente utilizados, ocasionando bordas diferentes. Logo, difcil formular um algoritmo
de deteco de bordas que possua um bom desempenho em diferenciados contextos e capture
os requisitos necessrios aos estgios subsequentes de processamento (Ziou e Tabbone,
1997). Consequentemente, no tocante ao processamento de imagem digital, uma variedade de
detectores de bordas tem sido desenvolvida visando diferentes propsitos, com formulaes
matemticas diferenciadas e com propriedades algortmicas distintas.
Com base nos problemas acima mencionados, Canny (1986), desenvolveu um
processo de deteco de bordas a partir de critrios de quantificao de desempenho de
operadores de bordas conhecidos como os critrios de deteco e de localizao.
Canny menciona trs critrios bsicos. O primeiro deles denominado Taxa de Erro
ou Deteco, consistindo na maximizao da razo sinal/rudo (SNR). Quanto maior for o
SNR, maior a probabilidade de se detectar as bordas verdadeiras da imagem. Assim, o
detector de bordas deveria detectar somente bordas e nenhuma poderia faltar. O segundo
critrio especifica que pontos de borda devem estar bem localizados, isto , as distncias entre
os pontos extrados pelo detector e as respectivas posies verdadeiras devem ser
minimizadas. Tem-se ento o critrio de Localizao (L), definido como sendo o inverso da

Texto extraido: VALE , G. e DAL POZ, A. Processo de deteco de bordas de Canny. Curitiba: Bol. Cinc.
Geod., sec. Artigos, v. 8, no 2, p.67-78, 2002.

45

distncia entre um ponto detectado e a respectiva posio verdadeira. Portanto, quanto maior
for L, mais prximos das posies verdadeiras estaro os pontos detectados pelo filtro. Pelo
exposto, o projeto de um filtro para a deteco de bordas arbitrrias envolve a maximizao
de ambos os critrios, o que equivalente maximizao do produto entre ambos (SNR e L),
ficando (Canny, 1986):

(3.5)

onde f(x) a resposta de impulso do filtro definido no intervalo [-w; w], G(x) uma
borda unidimensional e n0 a quantificao do rudo da imagem. Assume-se que a borda est
centrada em x = 0. Na equao 3.5, a primeira quantidade entre parntesis corresponde ao
SNR e a segunda L. A condio de filtro timo de Canny deve ainda atender a um terceiro
critrio, denominado critrio de resposta mltipla. A idia bsica que deve haver um nico
ponto de borda onde existe uma nica borda verdadeira. Seja (Canny, 1986):

(3.6)

a expresso matemtica para a distncia (xmax ) entre mximos adjacentes na resposta do


filtro f(x) devido ao rudo. Assim, ao maximizar a condio dada pela equao 3.5, deve-se
tambm garantir que xmax seja maior possvel, aumentando a possibilidade de separao de
mximos verdadeiros dos falsos na sada do filtro f(x).

46

Figura 3.- Deteco de bordas de Canny


Fonte: Autor.

Sendo assim, se considerar uma borda de uma dimenso variando no contraste (um
degrau) e ento convolucionando a borda com a funo de uniformizao de Gauss, o
resultado ser uma variao contnua do valor inicial ao final, com uma inclinao mxima no
ponto onde existe o degrau. Se esta continuidade diferenciada em relao a x, esta
inclinao mxima ser o mximo da nova funo em relao a original (figura 3.11).
Os mximos da convoluo da mscara e da imagem indicaro bordas na imagem.
Este processo pode ser realizado atravs do uso de uma funo de Gauss de 2-dimenses na
direo de x e y. Os valores das mscaras de Gauss dependem da escolha do sigma na
equao de Gauss, visto na frmula 3.4 deste trabalho.
A aproximao do filtro de Canny para deteco de bordas G'. Convolucionando a
imagem com G' se obter uma imagem I que mostrar as bordas, mesmo na presena de rudo.
A convoluo relativamente simples de ser implementada, mas cara computacionalmente,
especialmente se for em 2-dimenses. Entretanto, uma convoluo de Gauss de 2-dimenses
pode ser separada em duas convolues de Gauss de 1-dimenso.
A intensidade computacional do detector de bordas de Canny relativamente alta, e os
resultados so geralmente ps-processados para maior clareza. Entretanto, o algoritmo mais
eficiente no processamento de imagens com rudos ou com bordas difusas.
Algoritmo de Canny:

Ler a imagem (I) a ser processada;

47

Criar uma mscara de Gauss de 1-D (G) para convolucionar I. O desvio (S) de Gauss
um parmetro para o detector de bordas;

Criar uma mscara de 1-D para a primeira derivada de Gauss nas direes x e y;
nomear como Gx e Gy. O mesmo valor S usado;

Convolucionar a imagem I com G percorrendo as linhas na direo x (Ix) e percorrer


as colunas na direo y (Iy);

Convolucionar Ix, com Gx, para dar Ix (o componente x). De I convolucionado com a
derivada de Gauss. E convolucionar Iy, com Gy para dar Iy;

Neste ponto, o resultado dos componentes x e y devem ser "combinados". A


magnitude do resultado computada para cada pixel (x,y).

3.11. Operaes de Dilatao e Eroso da imagem

Duas operaes bsicas so fundamentais para o tratamento da imagem que auxiliaro


posteriormente o processo de segmentao e leitura dos caracteres da placa.

Dilatao: a aplicao de um elemento estruturante de forma concntrica sobre um


conjunto definido de pontos (brancos ou pretos) em uma imagem, de maneira que o
elemento estruturante adicione informao sobre a vizinhana destes pontos. Ou seja,
pode-se imaginar que o elemento estruturante desliza sobre um conjunto de pontos
dilatando sua vizinhana numa proporo que varia conforme as dimenses do
elemento estruturante (Gonzalez and Woods, 2002). Esta operao utilizada
principalmente para preencher intervalos e lacunas indesejveis na imagem.

Eroso: o inverso da dilatao. A aplicao do elemento estruturante ocorre


analogamente operao anterior, porm, ao invs de dilatar a vizinhana do ponto
percorrido inserindo informao, o elemento retira informao (gerando eroso nas
reas percorridas) (Gonzalez and Woods, 2002). Esta operao utilizada
principalmente para eliminar detalhes irrelevantes, como rudos, e abrir intervalos ou
lacunas em regies de conexo indesejada.

48

Figura 3. - Princpio de funcionamento de operadores morfolgicos.


Fonte: Gonzalez and Woods (2002).

3.12. OpenCV

Conforme mencionado no objetivo do trabalho, o OpenCV a interface de


programao utilizada para o desenvolvimento do software.
uma biblioteca de viso computacional open source (cdigo aberto) escrito na
linguagem de programao C e C++. Sua infraestrutura trabalha com um grau de desempenho
em processamento - muito exigido no tratamento de imagens em tempo real retirando
proveito da tecnologia de multiprocessamento.
Atualmente com um pouco mais de 500 funes, proporciona uma srie de facilidades
no processo de entrada e sada de imagens e vdeos, estrutura de dados, lgebra linear, filtros,
calibrao de cmera, tratamento de imagem etc.
Desde seu lanamento em janeiro de 1999, vrias aplicaes e pesquisas esto
utilizando o OpenCV. Alguns exemplos: na reduo de rudo em imagens mdicas, na anlise
de objeto, nos sistemas de segurana e deteco objeto, em aplicao militar e inspeo area.
A biblioteca basicamente estruturada em cinco principais componentes, dentre as
quais quatro so mostradas na figura 3.13.

49

Figura 3. - A estrutura bsica do OpenCV.


Fonte: Autor.

O mdulo CV contm as principais funcionalidades de processamento de imagem,


contemplando o algoritmo de viso computacional. O mdulo ML a biblioteca de
aprendizado, que inclui funes de estatsticas e ferramentas de clusterizao. O mdulo
HighGUI contm o controle de interface com o usurio e as rotinas de entrada e sada de
vdeos e imagens. O CXCore contm a estrutura bsica de dados, funes de desenho e
operao vetorial. A figura 3.13 no contempla o mdulo CVAux integrando tcnicas de
reconhecimento de objetos, pois ainda est em fase experimental.

3.13. Tesseract OCR

No trabalho empregada a biblioteca Tesseract OCR para leitura da placa automotiva.


OCR significa Optical Character Recognition, o processo pelo qual o computador
consegue ler o texto contido numa imagem. Quando passada uma pgina de texto de um
livro no scanner o resultado uma foto. Essa foto precisa passar por um processo de OCR
para extrair o texto dela.
Originalmente desenvolvido pela Hewlett Packard (HP) entre 1985 e 1995, o Tesseract
OCR foi redescoberto pelo Google. A biblioteca tambm open source e desenvolvida na
linguagem C++, onde combinada com a biblioteca de processamento de imagem Leptonica,

50

pode ler uma grande variedade de formatos de imagem e convert-los em texto em mais de 40
idiomas.
A partir da verso 3.x, a ferramenta fornece o mdulo totalmente treinvel, podendo
lidar com quaisquer caracteres na codificao UTF-8 (8-bit Unicode Transformation Format).
Por convenincia, o que se segue um breve resumo de como funciona Tesseract:

Os contornos so analisados e armazenados;

Os contornos so reunidos como bolhas;

As bolhas so organizadas em linhas de texto;

Linhas de texto so divididas em palavras;

A primeira passagem do processo de reconhecimento tenta encontrar cada palavra,


uma de cada vez;

As palavras encontradas so ento informadas ao treinador adaptativo;

Existe uma segunda anlise das palavras que no foram entendidas na primeira
passagem

Os espaos borrados do texto so considerados como pequenas marcaes;

As palavras encontradas so informadas;


Durante esses processos, o Tesseract utiliza:

Algoritmos para deteco de linhas de texto de uma pgina distorcida;

Algoritmos para detectar a proporo das palavras e smbolos (essa proporo verifica
se todas as letras de uma palavra tem a mesma largura);

Algoritmos para cortar caracteres unidos ou associar caracteres quebrados;

Analisador lingustico para identificar as palavras mais utilizadas dentre um conjunto


de caracteres;

Dois classificadores de caracteres: um classificador esttico, e um classificador


adaptativo que utiliza os dados de treino, distinguindo caracteres maisculos e
minsculos.
O

projeto

Tesseract

est

http://code.google.com/p/tesseract-ocr/.

no

seguinte

endereo

da

internet:

51

3.14. Linguagem de Programao C/C++5

No projeto proposto utilizada uma mistura da linguagem de programao C e C++,


pelo fato das bibliotecas empregadas: OpenCV e Tesseract OCR, serem desenvolvidas para
estas linguagens.
Abaixo uma viso geral das linguagens C e C++, mostrando algumas caractersticas:

3.14.1. Linguagem C

O desenvolvimento inicial de C ocorreu nos laboratrios Bell da AT&T, entre 1969 e


1973. Segundo Ritchie, o perodo mais criativo ocorreu em 1972. Deu-se o nome C
linguagem porque muitas das suas caractersticas derivaram de uma linguagem de
programao anterior chamada B. H vrios relatos que se referem origem do nome B:
Ken Thompson d crdito linguagem de programao BCPL mas ele tambm criou uma
outra linguagem de programao chamada Bom, em honra da sua mulher Bonnie. Por volta
de 1973, a linguagem C tinha se tornado suficientemente poderosa para que grande parte do
ncleo de Unix, originalmente escrito na linguagem de programao PDP-11/20 assembly,
fosse reescrito em C. Este foi um dos primeiros ncleos de sistema operativo que foi
implementado numa linguagem sem ser o assembly.
C uma linguagem imperativa e procedural para implementao de sistemas. Seus
pontos de design foram para ele ser compilado, fornecendo acesso de baixo nvel memria e
baixos requerimentos do hardware. Tambm foi desenvolvido para ser uma linguagem de alto
nvel, para maior reaproveitamento do cdigo. C foi til para muitas aplicaes que forma
codificadas originalmente em Assembly. Essa propriedade no foi acidental; a linguagem C
foi criada com o objetivo principal: facilitar a criao de programas extensos com menos
erros, recorrendo ao paradigma da programao algortmica ou procedimental, mas
sobrecarregando menos o autor do compilador, cujo trabalho complica-se ao ter de realizar as
caractersticas complexas da linguagem. Para este fim, a linguagem C possui as seguintes
caractersticas:

Texto
modificado,
retirado
em
Expert.net
(disponvel
http://www.tiexpert.net/programacao/c/index.php > acesso em 13/10/2012).

em:

<http://

52

Uma linguagem nuclear extremamente simples, com funcionalidades no-essenciais,


tais como funes matemticas ou manuseamento de ficheiros (arquivos), fornecida
por um conjunto de bibliotecas de rotinas padronizada;

A focalizao no paradigma de programao procedimental;

Um sistema de tipos simples que evita vrias operaes que no fazem sentido;

Uso de uma linguagem de pr-processamento, o pr-processador de C, para tarefas tais


como a definio de macros e a incluso de mltiplos ficheiros de cdigo fonte;

Um acesso de baixo-nvel memria do computador, atravs do uso de ponteiros;

Parmetros que so sempre passados por valor para as funes e nunca por referncia
( possvel simular a passagem por referncia com o uso de ponteiros);

Definio do alcance lexical de variveis;

Estruturas de variveis (structs), que permitem que dados relacionados sejam


combinados e manipulados como um todo.

3.14.2. Linguagem C++

O C++ foi inicialmente desenvolvido por Bjarne Stroustrup dos Bell Labs durante a
dcada de 1980 com o objetivo de melhorar a linguagem de programao C ainda que
mantendo mxima compatibilidade. Stroustrup percebeu que a linguagem Simula possua
caractersticas bastante teis para o desenvolvimento de software, mas era muito lenta para
uso prtico. Por outro lado, a linguagem BCPL era rpida, mas possua demasiado baixo
nvel, dificultando sua utilizao em desenvolvimento de aplicaes. Durante seu perodo na
Bell Labs, ele enfrentou o problema de analisar o kernel UNIX com respeito computao
distribuda. A partir de sua experincia de doutorado, comeou a acrescentar elementos do
Simula no C. O C foi escolhido como base de desenvolvimento da nova linguagem pois
possua uma proposta de uso genrico, era rpido e tambm portvel para diversas
plataformas. Algumas outras linguagens que tambm serviram de inspirao para o cientista
da computao foram ALGOL 68, Ada, CLU e ML.

53

Vantagens:

Produo de cdigo o quanto mais eficiente possvel;

Possibilidade em programao de alto e baixo nvel;

Alta flexibilidade, portabilidade e consistncia;

Adequado para grandes projetos;

Ampla disponibilidade e suporte, devido principalmente grande base de


desenvolvedores;

No est sob o domnio de uma empresa (em contraste do Java Sun ou Visual Basic
Microsoft);

Padronizao pela ISSO;

Grandes possibilidades para a metaprogramao e programao genrica;

Compatilidade com C, resultando em vasta base de cdigos.

Desvantagens:

Compatilidade com o C herdou os problemas de entendimento de sintaxe do mesmo;

Os compiladores atuais nem sempre produzem o cdigo mais otimizado, tanto em


velocidade quando tamanho do cdigo;

Grande perodo para o aprendizado;

A biblioteca padro no cobre reas importantes da programao, como threads,


conexes TCP/IP, interface grfica e manipulao de sistemas de arquivos, o que
implica na necessidade de criao de bibliotecas prprias para tal, que pecam em
portabilidade;

Devido grande flexibilidade no desenvolvimento, recomendado o uso de padres


de programao mais amplamente que em outras linguagens.

54

4. MODELO PROPOSTO PARA DETECO E RECONHECIMENTO DE PLACA


AUTOMOTIVA

Neste captulo ser detalhado o desenvolvimento da aplicao, demonstrando os


passos utilizados desde a instalao das bibliotecas bases para o projeto aos mtodos
utilizados para deteco e leitura da placa veicular.

4.1. Apresentao Geral do Modelo proposto

Conforme mostrado de modo superficial na arquitetura do projeto (vide figura 1.1),


para obteno dos caracteres alfanumrico da placa, foi desenvolvida a seguinte estratgia
baseada nas metodolgicas supracitadas no captulo anterior. Na figura 4.1 abaixo, observa-se
o modelo proposto da viso computacional empregado neste projeto:

Figura 4.- Modelo proposto no projeto


Fonte: Autor.

4.2. Descrio das Etapas do Modelo


Captura: a imagem pode ser adquirida por um dispositivo que filma em tempo real;
por exemplo, de uma webcam, cmera infravermelha de segurana, cmera profissional de
alta resoluo etc. Ou, atravs de uma gravao armazenada em uma memria; no caso, um
pendrive ou um hard disk. importante enfatizar, que no mtodo utilizado, no prestabelecido que j se tenha a imagem da placa do veculo fotografado, visto que o objetivo
aqui a deteco automtica da placa.

55

Pr-processamento: nessa etapa so utilizadas algumas tcnicas para o tratamento da


imagem, aumentando as condies para o sistema de localizao do objeto. Neste trabalho
empregaram-se tcnicas de diminuio de rudo de Gauss, converso de cores do formato
RGB (com trs canais, vermelho-verde-azul) para escala de cinza (nico canal),
experimentando tambm a tcnica de converso em HSL (matriz-saturao-luz) para
manipulao das cores.
Localizao do objeto: aqui sero detectadas as bordas dos objetos presentes na
imagem. Nesse processo, aplicou-se a tcnica de deteco e segmentao de bordas de Canny.
Tentou-se tambm utilizar outras tcnicas de deteco de borda, como Sobel e Wavelet 2D,
onde a tcnica de Sobel foi implementada (vide apndice A), porm sem xito significante ao
trabalho devido ao reduzido tempo de projeto e pesquisas.
Validao: aps a localizao dos objetos, os mesmo sero validados, procurando
localizar a placa do carro. Aqui so utilizadas como parmetros as dimenses da placa, como
a altura e o comprimento. Assim, objetos retangulares e proporcionais pela razo do
comprimento e da altura sero considerados como objetos vlidos. Sero apresentadas
tambm outras condies de validao da placa.
Segmentao: um processo de recorte do objeto localizado e validado.
Leitura OCR: nessa fase a imagem preparada para o processo de leitura da imagem
onde o reconhecedor de caracteres ir retornar os valores alfanumricos da placa.

4.3. Ferramentas Utilizadas


Para o desenvolvimento deste trabalho, foi utilizado o sistema operacional Windows 7,
no precisando ter uma experincia aprofundada sobre este sistema operacional. Abaixo
demonstrado o processo de instalao das ferramentas utilizadas.

4.3.1. Microsoft Visual Studio 2008

Conforme explicado anteriormente, as bibliotecas aqui utilizadas (OpenCV e o


Tesseract OCR), tem suporte a linguagem de programao C/C++. Alm disso, essas
bibliotecas

podem

ser

configuradas

para

utilizao

em

diversos

ambientes

de

56

desenvolvimento (IDE) empregando para isso o programa CMake. Nesse trabalho, as


bibliotecas foram configuradas para o Microsoft Visual Studio 2008 (MSVS), devido a um
suporte completo e vasto contedo literrio.
O MSVS na verso Professional Edition foi instalado utilizando o instalador no modo
custom e desmarcando a opo de instalao do SQL Server Express, pois no se far
proveito neste trabalho. importante observar tambm se as linguagens C e C++ esto
selecionadas para instalao, na opo Language Tools.
O processo de instalao no apresentou nenhuma dificuldade ou problema.
Na figura 4.2 abaixo, exibe a interface do instalador.

Figura 4. - Instalador do Microsoft Visual Studio 2008


Fonte: Autor.

4.3.2. OpenCV

Resumo da instalao:

Optou-se utilizar a verso mais recente do OpenCV a partir do repositrio SVN do


desenvolvimento, na verso 2.4.2. A ideia era obter o cdigo fonte e conhecer o
processo de compilao da biblioteca;

57

Instalao do CMake: utilizado para criao do projeto OpenCV para o formato


MSVS 2008, a partir dos fontes da biblioteca. No final desse processo ser gerado o
arquivo sln, extenso MSVS utilizado para organiza projetos, itens de projeto e itens
de soluo, fornecendo ao ambiente, referncias a seus locais no disco.

Compilao do projeto OpenCV no MSVS 2008;

Finalmente, a configurao no MSVS para utilizar a biblioteca OpenCV compilada.

4.3.2.1. Baixando o OpenCV

Para obter o cdigo fonte que atualizado quase diariamente, necessrio baixar a
partir do repositrio SVN, no endereo: http://code.opencv.org/svn/opencv/trunk/opencv.
Nesse caso, o programa TortoiseSVN realizou esta tarefa no dia 20/09/2012 baixando
a verso 2.4.2, conforme figura 4.3, abaixo:

Figura 4. - TortoiseSVN
Fonte: Autor.

58

Seguindo os passos:

Deve-se

localizar

pasta

onde

deseja

fazer

download

dos

cdigos

fontes. Ex.: C:\opencv;

Com o boto direito do mouse escolha SVN checkout no menu de contexto;

Preencher o URL: http://code.opencv.org/svn/opencv/trunk/opencv;

Escolher o diretrio de checkout. Ex.: C:\opencv;

Clicar em OK. O programa comea a baixar os fontes.

4.3.2.2. CMake

CMake criar os arquivos de projeto para verso MSVS 2008 necessrios para
construir posteriormente os fontes do OpenCV.
A verso utilizada foi a 2.8.9, baixado no endereo: http://www.cmake.org/.
Seguindo os passos:

Abrir CMake (cmake-gui);

Escolher o caminho do cdigo fonte (onde foi baixado OpenCV). Neste diretrio deve
conter o arquivo CMakeLists.txt. Ex.: C:\opencv;

Escolher o diretrio de sada (onde construir os binrios). Ex.: C:\opencv\msvc2008;


Clique em Sim para criar o diretrio se no existir;

Clicar no boto Configurar;

Escolher o compilador / IDE que deseja usar. Neste caso, escolha Visual Studio 9.

Escolher as opes que deseja usar. Como construir exemplos, construir opencv_core,
construir opencv_highgui, etc;

Clicar no boto Configurar at que todos os conflitos sejam resolvidos (todas as


linhas vermelhas mudam a sua cor para branca);

Clicar em Gerar.

59

Figure 4. - CMake
Fonte: Autor.

4.3.2.3. Compilando com o MSVS 2008

Para compilar o cdigo fonte do OpenCV com o Visual Studio 2008:

Abrir o arquivo de soluo, localizado no diretrio de sada informado no CMaker.


Ex.: "C:\opencv\msvc2008\OpenCV.sln";

Aguardar at que todos os arquivos sejam completamente carregados;

Pressionar F7 para criar a soluo.

60

Figura 4. - Compilao do OpenCV


Fonte: Autor.

No final desse processo, ser gerado um diretrio. Como, por exemplo:


C:\opencv\build.

61

4.3.2.4. Configurando a biblioteca OpenCV no MSVS 2008

1. Configurando o Visual Studio

Abrir VC++ Directories: Tools > Options > Projects and Solutions > VC++
Directories;

Escolher Show directories for: Include files;

Adicionar $openCVDir\include

Escolher Show directories for: Library files;

Adicionar $openCVDir\lib

Escolher Show directories for: Source files;

Adicionar $openCVDir\bin

2. Configurando o projeto de reconhecimento de placa veicular

Abrir Propriedades do Projeto: NomedoProjeto > Properties;

Escolher Linker: Configuration Properties > Linker > Input;

Em Configuration , selecionar o modo: Debug | Release;

Para Configuration Debug:

No Additional Dependencies , colocar em cada linha:


opencv_calib3d242d.lib
opencv_contrib242d.lib
opencv_core242d.lib
opencv_features2d242d.lib
opencv_flann242d.lib
tbb.lib
opencv_gpu242d.lib
opencv_haartraining_engined.lib

62

opencv_highgui242d.lib
opencv_imgproc242d.lib
opencv_legacy242d.lib
opencv_ml242d.lib
opencv_nonfree242d.lib
opencv_objdetect242d.lib
opencv_photo242d.lib
opencv_stitching242d.lib
opencv_ts242d.lib
opencv_video242d.lib
opencv_videostab242d.lib

Para Configuration Release:

No Additional Dependencies, colocar em cada linha:


opencv_contrib242.lib
opencv_core242.lib
opencv_features2d242.lib
opencv_flann242.lib
opencv_gpu242.lib
opencv_haartraining_engine.lib
opencv_highgui242.lib
opencv_imgproc242.lib
opencv_legacy242.lib
opencv_ml242.lib
opencv_nonfree242.lib
opencv_objdetect242.lib

63

opencv_photo242.lib
opencv_stitching242.lib
opencv_ts242.lib
opencv_video242.lib
opencv_videostab242.lib

Feito isso, o projeto reconhecer todas as bibliotecas do OpenCV.

4.3.3. Tesseract OCR

Resumo da instalao:

Conforme explicado anteriormente, o Tesseract OCR compartilha recursos da


biblioteca Leptonica, necessitando a prvia instalao dessa biblioteca;

Para instalao do Tesseract OCR, a equipe de suporte ao produto recomenda baixar o


cdigo fonte para manter o produto atualizado. Sendo assim, o mesmo processo
utilizado para o OpenCV foi realizado, utilizando o repositrio SVN;

Compilar a biblioteca no MSVS2008;

Configurar a biblioteca no MSVS para utilizao no projeto.

4.3.3.1. Leptonica

A verso utilizada foi a 1.68 pr-compilada, no endereo:


http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68-win32-libinclude-dirs.zip;
Feito isso, descompacte-a para C:\opencv\tesseract\.

64

4.3.3.2. Baixando o Tesseract OCR

A partir do repositrio SVN, o programa TortoiseSVN realizou a mesma tarefa


utilizada para o OpenCV, conforme figura 4.6, abaixo:

Figura 4. - Tortoise Tesseract OCR


Fonte:Autor
Seguindo os passos:

Ir

at

pasta

onde

deseja

fazer

download

fontes. Ex.: C:\OpenSource\Tesseract-OCR;

Com o boto direito do mouse escolher SVN checkout no menu de contexto;

Preencher o URL: http://tesseract-ocr.googlecode.com/svn/trunk/;

Escolher o diretrio de checkout. Ex.: C:\OpenSource\Tesseract-OCR;

Clicar em OK. Ele comear a baixar os cdigos fontes.

A verso da biblioteca a 3.0.2.

das

65

4.3.3.3. Compilando o Tesseract OCR

Para construir o Tesseract com o Visual Studio 2008:

Abra o arquivo de soluo, localizado no diretrio de sada. Ex.: "C:\


OpenSource\Tesseract-OCR\vs2008\tesseract.sln";

Aguarde at que todos os arquivos sejam completamente carregados;

Abrir Propriedades do Projeto: libtesseract302 > Properties;

Em Configuration, selecionar o modo: DLL_Debug | DLL_Release | Lib_Debug |


Lib_Release;

Compilar para cada configurao acima o projeto libtesseract302, clicando com o


boto direito do mouse o e selecione Build;

No final desse processo sero gerados quatro diretrios na pasta "C:\ OpenSource\TesseractOCR\vs2008\", chamados: LIB_Debug, LIB_Release, DLL_Debug e DLL_Release;

4.3.3.4. Configurando a biblioteca Tesseract OCR no MSVS 2008

1. Configurando o Visual Studio

Abrir VC++ Directories: Tools > Options > Projects and Solutions > VC++
Directories;

Escolher Show directories for: Include files;

Adicionar:
C:\OpenSource\Tesseract-OCR\include,
C:\OpenSource\Tesseract-OCR\include\leptonica;
C:\OpenSource\Tesseract-OCR\tesseract-ocr\ccutil;
C:\OpenSource\Tesseract-OCR\tesseract-ocr\ccstruct;
C:\OpenSource\Tesseract-OCR\tesseract-ocr\ccmain;
C:\OpenSource\Tesseract-OCR\tesseract-ocr\api

66

2. Configurando o projeto de reconhecimento de placa veicular

Abrir Propriedades do Projeto: NomedoProjeto > Properties

Escolher Linker: Configuration Properties > Linker > Input

Em Configuration, selecionar o modo: Debug | Release

Para Configuration Debug:

libtesseract302d.lib

Para Configuration Release:

libtesseract302.lib

3. Adicionando a biblioteca ao projeto

Adicionar os seguintes arquivos no pasta Debug do projeto:

Libfftw3-3.dll
Liblept168.dll
Libtesseract302d.dll

Completada todas as instalaes e configuraes dos pr-requisitos de software, ser


possvel desenvolver o projeto aqui proposto.

4.4.

Descrio da Implementao

A seguir, ser descrito a implementao do software desenvolvido neste projeto, de


acordo com as etapas do modelo proposto. Com isso, se compreender melhor os conceitos da
viso computacional e da prpria soluo final, de forma a contribuir com os futuros trabalhos
acadmicos que d esse enfoque. No apndice A, contm o cdigo fonte completo. A figura a
seguir representa a estrutura do programa implementado.

67

Figura 4. Estrutura do programa implementado


Fonte: Autor.

1. O programa inicializado pela estrutura Main que realiza o processo de captura da


imagem e chama o mtodo frameDeteccaoPlaca;
2. O mtodo frameDeteccaoPlaca l cada frame do vdeo e responsvel pelo prprocessamento e localizao das bordas da imagem;
3. A funo encontraPlaca valida todas as bordas encontradas tentando encontrar objetos
que tenham a dimenso de uma placa de carro ou caminho. Caso positivo, realiza a
segmentao e passa esta imagem para o mtodo tesseractOCR;
4. O mtodo tesseractOCR l a imagem segmentada e a transforma para o formato texto
(caracteres).

4.4.1. A captura

O algoritmo de captura da biblioteca OpenCV foi otimizado para trabalhar com


diversas operaes de processamento de imagem. Tambm prov interface para diferentes
modelos de cmera.
Nesse trabalho, foi utilizado uma cmera de baixssima resoluo (640x480), 8 bits
por pixel (256 cores), no padro VGA (Video Graphics Array), provendo otimizao no
processamento da imagem, porm dificultando proporcionalmente o processo de
reconhecimento de padres. O motivo pela escolha foi a falta de recurso do autor na obteno

68

de uma cmera de alta qualidade. Por outro lado, funcionando em cmeras de baixa resoluo,
de se esperar um melhor resultado com cmeras que trabalham em alta resoluo.
importante destacar, que para um projeto com finalidade comercial fundamental a
escolha de um sistema tico adequado, exigindo um estudo mais complexo de cmeras,
conforme o anunciado do tpico 3.4.
A seguir, o trecho de cdigo para captura de vdeo na cmera (em tempo real) extrado
do cdigo fonte utilizado nesse trabalho:

24
30

CvCapture *capture = NULL;


//capture = cvCaptureFromCAM( -1 );

ou
28

capture = cvCreateFileCapture( "teste1.wmv" );

A varivel capture foi declarada utilizando a estrutura de vdeo chamada CvCapture


apontando para uma rea vazia da memria. Esta estrutura no tem uma interface pblica e
usada somente como parmetro para as funes de captura de vdeo. A varivel recebe ento a
funo cvCaptureFromCAM, onde inicializa a cmera. Da mesma forma, caso se queira
utilizar um vdeo gravado, utiliza-se a funo cvCreateFileCapture.

22 IplImage *frame;
36 frame = cvQueryFrame( capture );

A varivel frame foi declarada utilizando a estrutura IplImage. Essa estrutura a


mais completa para trabalhar com imagem no OpenCV, definindo propriedades da imagem,
como: o tamanho, quantidade de canais, modelo de cor etc. importante lembrar, que uma
imagem uma matriz de informaes ordenadas por uma quantidade de linhas e colunas. O
mtodo cvQueryFrame l as propriedades do vdeo e retorna varivel.

32
33
34
35
36
37
38
39

if( capture )
{
while( true )
{
frame = cvQueryFrame( capture );
if(frame)
{

69

40
41
42
43
44
45
46
47
48
49
50
51
52
53

startT=clock();
frameDeteccaoPlaca( frame );
endT=clock();
cout << (double) (endT-startT) << endl;
}
else
{
cout << "FIM da captura" << endl;
break;
}
if( cvWaitKey(5) == 27 ) { break; }
}
}

Por final, se faz a validao da captura do vdeo, para chamada do mtodo


frameDeteccaoPlaca, que a cada frame reproduzido, inicializa as rotinas do programa de
deteco da placa.

4.4.2. O pr-processamento

Conforme visto anteriormente, precisamos tratar a imagem, reduzindo assim, o rudo e


melhorando as caractersticas da imagem que servir de entrada no processo de localizao da
placa.
O OpenCV trabalha com inmeras funes e mtodos de pr-processamento. Veja
agora algumas utilizadas no trabalho.

75

cvCvtColor( frame, frame_gray, CV_BGR2GRAY );

273
337

cvCvtColor( frame, frame_HLS, CV_BGR2HLS );


cvCvtColor( frame_HLS, frame, CV_HLS2BGR );

O mtodo cvCvtColor faz diversas converses de imagem. Nos dois casos mostrados
acima, o cdigo de converso CV_BGR2GRAY, converte uma imagem com codifio de cores
tanto em RGB ou BRG para escala de cinza. J o cdigo de converso CV_BGR2HLS,
converte uma imagem com codifio de cores tanto em RGB ou BRG para representao de
cores em HLS (Hue-Lightness-Saturation), ou vice-versa, com a codifio CV_HLS2BGR.

70

importante aplicar o cdigo de converso em escala de cinza, reduzindo a


quantidade de canais da imagem, de trs (RGB) para um (cinza), reduzindo, assim, o espao
de memria utilizado no processamento da imagem e ajudando a otimizar o mtodo de
localizao de bordas, posteriormente aplicado.
A converso em HLS, serve para inmeras finalidades. Neste trabalho, foi utilizado
algumas vezes para alterar o contraste da imagem e trabalhar tambm no processo de
mudana de cores. Alterando o contraste da imagem, pode-se aumentar as caracteristicas que
distingue os objetos na imagem. J na modificao de cores, pode-se trabalhar com diferentes
tipos de placas adotadas pelo Conselho Nacional de Trnsito (CONTRAN), figura 4.7,
transformando-as em um formato nico de cores.
No processo de alterao de cores, no obteve-se um sucesso desejado, muito relativo
ao ruido capturado pela camera VGA. Vejamos na figura 4.8, um exemplo que altera a cor de
uma caneta na cor azul para branco. Nesse processo, percebe-se os pixels alterados em alguns
pontos, no cobrindo completamente a caneta, como era o esperado. Essa interferncia pode
ser atribuido tambm ao tipo de iluminao do meio.

Figure 4.- Modelos de placas adotas pelo CONTRAN.


Fonte:Autor.

71

Figure 4.- Transformao de cores em HLS.


Fonte:Autor.

Seguindo assim, a ideia de diminuio de rudo explicado no tpico 3.8 desse trabalho,
veremos abaixo outro mtodo da biblioteca OpenCV utilizado para diminuio do ruido:

77

cvSmooth(frame_gray, frame_gray, CV_GAUSSIAN, 3,3);

Nesse mtodo utilizado o filtro Gaussiano sobre uma rea de cinco por cinco
centralizada em cada pixel que ser varrido, com objetivo de suavizar a transio entre os
valores dos pulsos, reduzindo o rudo. Este parmetro da dimenso de rea do filtro de
suavizao depender primordialmente da qualidade da captura da imagem. A figura 4.9,
abaixo, mostra a processo de suavizao.

Figura 4. - Suavizao Gaussiana.


Fonte: Autor.

72

Aqui importante reforar, que o processo de suavizao pode causar efeitos


inoportunos, como a perda de informao e o deslocamento de estruturas de feies relevantes
na imagem.

4.4.3. A localizao do objeto

Na etapa de localizao do objeto preciso primeiramente distinguir cada um dos


objetos presentes na imagem. Desta forma, a tcnica utilizada no trabalho foi a de deteco de
bordas de Canny.

cvCanny( frame_gray, frame_canny, 50, 70, 3);


90
//cvCanny( frame, frame_canny2, 0, 70, 3 );
92
93

// Soma dos filtros


//cvAddWeighted(frame_canny, 0.5, frame_canny2, 0.5, 0, frame_merge);

Ao trabalhar com a funo cvCanny do OpenCV, precisa-se configurar trs parmetros


fundamentais: o limiar mnimo (min threshold), o limiar mximo (max threshold) e o
tamanho de abertura (aperture). Definido os limiares, caso o pixel tenha um gradiente maior
que o limiar mximo, ele considerado como elemento de borda. Caso o pixel tenha um
gradiente menor que o limiar mnimo definido, ele descartado. Caso o gradiente do pixel
esteja entre os limiares definidos (mnimo e mximo), ser aceito com a condio de que o
gradiente do pixel adjacente pertena a condio do limiar mximo. O parmetro de abertura
dever ser impar (1, 3, 5 ou 7) e representa o tamanho da matriz utilizado para calcular a
derivada.
Canny recomenda a razo de mximo e mnimo, na proporo de 5:1 ou 3:2,
respectivamente.
No trabalho a funo cvCanny foi utilizada duas vezes. Um para a imagem na escala
cinza e outra para imagem colorida, para somar as duas respostas utilizando o mtodo
cvAddWeighted e conseguir uma maior preciso da localizao do objeto. Invariavelmente
isso torna o processo mais lento muito devido aos trs canais da imagem colorida (RGB).

73

Figura 4.- Deteco de bordas de Canny.


Fonte:Autor.

95
96
97
98
99
100
101
102
103

// declara contorno e area na memoria


CvSeq* contours = 0;
CvMemStorage* storage = NULL;
if( storage==NULL ) storage = cvCreateMemStorage(0);
else cvClearMemStorage(storage);
cvFindContours( frame_canny, storage, &contours, sizeof(CvContour),
CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

A varivel contours foi declarada utilizando a estrutura de sequncia CvSeq. Esta


estrutura tem similaridades s classes de containeres (ou modelo de classe de contineres) que
existem em outras linguagens de programao. Essa estrutura foi construda para adicionar ou
excluir um objeto, alm de realizar um rpido acesso ao objeto. Essa estrutura tem alguns
elementos importantes, como por exemplo, a quantidade total dos nodos da sequncia.
Tambm existem quatro elementos importantes para percorrer os nodos: h_prev, h_next,
v_prev, e v_next. Estes quatros ponteiros fazem parte do modelo de estrutura chamada
CV_TREE_NODE_FIELDS, que so utilizados para indicar elementos dentro da sequncia,
em vez de ligar sequncias diferentes um no outro. As variveis h_prev e h_next da estrutura
podem ser utilizadas isoladamente para criar uma lista simples. Os outros dois, v_prev e
v_next, podem ser usados para criar topologias mais complexas que se relacionam uns com os
outros nodos. por meio desses quatro ponteiros que o mtodo cvFindContours ser capaz de
navegar por todos os contornos encontrados da estrutura de sequncia.
Para utilizar o mtodo cvFindContours necessrio tambm alocar um espao
reservado de memria (cvCreateMemStorage). declarada ento uma varivel chamada
storage do tipo CvMemStorage.

74

Na figura 4.11 abaixo, mostra os contornos encontrados a partir de uma imagem.

Figura 4.- Contornos encontrados pelo mtodo cvFindContours, utilizando o modo


CV_RECT_TREE e mtodo CV_CHAIN_APPROX_SIMPLE de busca.
Fonte: Learn OpenCV.

Figura 4.- Modo CV_RETR_TREE. Recupera todos os contornos e reconstri a hierarquia


completa de contornos aninhados.
Fonte: Learn OpenCV.

75

4.4.4. A validao

Aps o processo de localizao dos contornos dos objetos, a validao tem for
finalidade encontrar o objeto desejado. Sendo assim, necessrio conhecer basicamente duas
caractersticas:

A forma: se retangular (poligonal), circular etc;

As dimenses: a altura, a largura, a profundidade e os ngulos;


A placa automotiva para carros e caminhes tem as seguintes especificaes,

conforme o Conselho Nacional de Trnsito (CONTRAN), figura 4.13:


Forma: polgono quadriltero;
Dimenses: altura (a) 130 mm e largura (l) 400 mm; ngulo das bordas: entre 80 e
110.

Figura 4. Especificao da Placa automotiva em mm para carros e caminhes.


Fonte: CONTRAN, 2007.

123
124
125
126
127
128
129
130
131
132
133
134
135

for ( ;contours!= NULL; contours = contours->h_next)


{
CvSeq* approxContour = cvApproxPoly(contours,
contours->header_size ,
contours->storage,
CV_POLY_APPROX_DP,
cvContourPerimeter(contours)*0.05,
0);
if (approxContour->total >=4 &&
fabs(cvContourArea(approxContour,CV_WHOLE_SEQ)) > 2000 &&
cvCheckContourConvexity(approxContour))

76

136
{
137
CvBox2D box = cvMinAreaRect2(approxContour);
138
double whRatio = (double)box.size.width /
139
box.size.height;
140
if ((!(2.7 < whRatio && whRatio < 3.4))
) //||
141 abs(box.angle)>20 razao da largura e altura do objeto (essa proporcao
142 para o formato brasileiro).
143
{
144
CvSeq* child = contours->v_next;
145
if (child != NULL)
146
encontraPlaca(child, frame_gray, frame);
147
continue;
}
/*...*/
}
/*...*/
}

O lao for percorrer todos os contornos que foram localizados na etapa anterior.
Para cada contorno percorrido pelo lao, a funo cvApproxPoly tem por finalidade
aproximar

as

formas

curvas

para

poligonais.

mtodo

utilizado

CV_POLY_APPROX_DP, que corresponde ao algoritmo de Douglas e Peucker (1973), que


reduz a quantidade de pontos em uma curva tornando-a mais linear. E o parmetro de
preciso, que utiliza a funo cvContourPerimeter, retorna o permetro do contorno original,
na qual,

multiplicado por um fator, aumenta a preciso de aproximao. A varivel

approxcontour armazena o novo contorno.


Como o objetivo encontrar contornos na forma de polgono quadriltero
especificada a quantidade total de quatro vrtices. E com intuito de reduzir a quantidade de
polgonos, utiliza-se uma condio mnima para o tamanho da rea aceitvel. A funo
cvCheckContourConvexity, informa tambm que o contorno deve ser simples, no havendo
convexidade (ou sem auto-intersees).
Aps isso, deve-se verificar se o retngulo encontrado tem a proporo da placa
automotiva. A varivel whRatio significa aqui, a razo do comprimento pela altura, onde
calculado, d um valor aproximado de 3 (trs). Essa varivel testada, mantendo uma
variao mnima e mxima de -0.3 e +0.3 respectivamente, representando 10% (dez por
cento) de variao.dd
Caso o objeto encontrado tenha as caractersticas mnimas para uma placa segundo o
modelo do CONTRAN, desenhado o retngulo na cor vermelha indicando a localizao,
conforme a figura 4.14.

77

Figura 4.- Localizao da placa.


Fonte: Autor.

4.4.5. A segmentao
182

207
208
209
210

CvRect box2 = cvBoundingRect(approxContour);


//recorta imagem
cvSetImageROI(frame_gray, box2);
cvResize(frame_gray, licenca, CV_INTER_LINEAR);
cvResetImageROI(frame_gray);

Nesta etapa, feito o recorte da placa que foi localizada na imagem utilizando o
mtodo cvSetImageROI que seleciona o local informado pela varivel chamada box2 do
tipo CvRect estrutura utilizada para trabalhar com polgonos retangulares, contendo as
informaes de localizao, largura e altura do objeto.
O mtodo cvResize tem por finalidade redimensionar a imagem utilizando a tcnica de
interpolao bilinear, CV_INTER_LINEAR. O redimensionamento do recorte ampliar a
placa, facilitando o processo de reconhecimento de detalhes da imagem na etapa seguinte.

78

Figura 4.- Placa recordada e redimensionada.


Fonte: Autor.

4.4.6. A leitura OCR

Antes de iniciar o processo de OCR necessrio realizar alguns passos, como:

Transformar a imagem para o formato preto e branco;

Utilizar tcnicas de dilatao e eroso da imagem, para separar os caracteres que por
ventura estejam prximos uns dos outros;

Realizar o processo de treinamento dos caracteres pelo Tesseract OCR.

Para transformar a figura 4.15 em preto e branco, utilizam-se as seguintes funes:

212
213
214
215
216
217
218
219

//trata placa comum


cvThreshold(licenca,licenca,0,255,
CV_THRESH_TRUNC | CV_THRESH_OTSU);
cvThreshold(licenca,licenca,0,255,
CV_THRESH_BINARY | CV_THRESH_OTSU);
//trata placa colorida
//cvThreshold(licenca,licenca,0,255,
CV_THRESH_BINARY_INV | CV_THRESH_OTSU);

A funo cvThreshold normalmente usado para obter dois nveis de imagem


(binrio), convertendo a imagem da escala de cinza para preto e branco, ou na remoo de
rudos na imagem, isto , filtrando pixels com valores muito pequenos ou muito grandes. As
limiarizaes

utilizadas

neste

trabalho

foram

CV_THRESH_BINARY e o CV_THRESH_BINARY_INV.

CV_THRESH_TRUNC,

79

CV_THRESH_TRUNC

Se um pixel estiver acima do valor limiar, ser definido o valor limiar indicado. Se o
pixel estiver abaixo do valor limiar, continua com o mesmo valor. geralmente usado quando
se quer destacar pixels acima do valor limiar, deixando outras originais.

CV_THRESH_BINARY

Se um pixel estiver acima do valor limiar, ser definido o valor mximo indicado. Se o
pixel estiver abaixo do valor limiar, ser ajustado para o valor zero. Poderia ser usado para
realar pixels acima de um limiar de uma imagem, ao remover os outros.

CV_THRESH_BINARY_INV

O aposto do CV_THRESH_BINARY.

A figura 4.16, exemplifica.

80

Figura 4.- Tipos de limiarizaes utilizadas.


Fonte: BRADSKI and KAEHLER; Learning OpenCV, (2008).

Alm disso, o valor especial CV_THRESH_OTSU pode ser combinado com um dos
valores acima indicados. Neste caso, a funo determina o valor do limiar timo usando o
algoritmo de Otsu e o usa, em vez do limiar especificado. A funo retorna o valor limite
computadorizado. Atualmente, o mtodo de Otsu implementado apenas para imagens de 8
bits. O algoritmo de Otsu baseia-se nas mdias dos valores dos pixels dentro da imagem.
Para a placa capturada na figura 4.15, observa-se o modelo de placa particular (fundo
na cor cinza e letra na cor preta), utilizando dessa forma o tipo de limiarizao binria. J para
os casos de modelo de placas de aluguel, de experincia ou de fabricantes (fundo com cor e
letra na cor branca), utiliza-se o tipo de limiarizao binria inversa.

81

Figura 4.- Placa em preto e branco aps o threshold.


Fonte: Autor.

A figura 4.17 exemplifica o resultado da transformao, de forma que os caracteres j


so claramente visveis no formato preto e branco, podendo-se melhorar com as operaes de
dilatao e eroso da imagem, a seguir:

221
222

cvDilate(licenca,licenca,NULL,2);
cvErode(licenca,licenca,NULL,2);

O mtodo cvDilate ir expandir a rea em branco da imagem, diminuindo as bordas


dos caracteres. Dessa maneira, busca-se separar os caracteres para que no prejudique
futuramente a leitura dos caracteres. J o mtodo cvErode trabalha de forma inversa do
mtodo cvDilate. O valor 2 utilizado especifica a quantidade de iteraes repetidas a
varivel licena do tipo IplImage.

Figura 4.- Placa aps o Dilate e Erode. Preparado para leitura.


Fonte: Autor.

82

A seguir, j com a imagem tratada e com os caracteres legveis na imagem,


necessrio realizar o treino da ferramenta de reconhecimento de caracteres. Feito o treino do
Tesseract, a imagem poder ser convertida em texto.
Na figura 4.19 especificado o tipo de fonte utilizado nas placas, conforme o
Conselho Nacional de Trnsito.

Figura 4.- Especificao de fonte para placas.


Fonte: CONTRAN, 2007.

Observa-se assim, uma grande diferena do tipo de fonte especificado pelo rgo
regulador e o capturado na imagem. Essa diferena deve ser tratada, caso contrrio o
Tesseract OCR reconhecer caracteres estranhos ou errneos, justamente porque a biblioteca
de treinamento padro no tenha aprendido o tipo de letra.
Alm disso, quando realizado o processo de aprendizado da linguagem, nota-se
visivelmente um aumento da performance no reconhecimento dos caracteres.
A seguir ser demonstrado especificamente o processo de treinamento dos caracteres
exemplificados neste trabalho, nas seguintes etapas:

Criao das amostras dos caracteres;

Correo dos caracteres errados encontrados pelo processo padro de reconhecimento;

Compilar uma nova biblioteca de caracteres.


No processo de criao das amostras, foi realizado o arquivamento das imagens

geradas na etapa de preparao dos caracteres para leitura. Este passo fundamental, pois
para cada imagem gerada, diferenciam-se as formas para os mesmos caracteres encontrados.
Para isso, o Tesseract utiliza um tipo de arquivo com formato TIFF - um formato de
ficheiro grfico bitmap.

83

Das imagens arquivadas no formato JPEG pelo mtodo saveImage (vide apndice
A), foram extrados manualmente os caracteres utilizando a ferramenta Paint (copiando e
colando) no novo arquivo nomeado de placa.arial.exp0.tif, conforme vemos na figura 4.20 o
resultado final:

Figura 4.- Arquivo placa.arial.exp0.tif. Caracteres utilizados para o treinamento da


ferramenta de OCR.
Fonte:Autor.

A partir do arquivo TIFF, com as amostras montadas, so executados os comandos


de aprendizagem:

$ tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num]


batch.nochop makebox

No exemplo:

$ tesseract placa.arial.exp0.tif placa.arial.exp0 batch.nochop makebox

A parte mais trabalhosa no processo de aprendizagem editar manualmente o arquivo


com codificao UTF-8 gerado, placa.arial.exp0.box. Este arquivo informa a letra
encontrada e o local em pixel da localizao. Nesse estgio necessrio corrigir os caracteres
indevidamente informados pelo processo padro de reconhecimento.
Feito os ajustes, por fim o arquivo ter a seguinte sequncia, baseado na figura 4.20:

84

J
K
E
8
9
.
4
6
J
K
E
8
9
4
6
J
K
E
8
9
4
6
J
K
E
8
9
4
6
J
K
E
8
9
4
6
J
K
E
8
9
4
6

13 976 97 1103 0
114 973 201 1103 0
202 961 307 1104 0
335 1028 352 1044 0
380 969 468 1103 0
488 969 577 1102 0
582 957 608 965 0
596 969 683 1101 0
704 969 792 1102 0
12 801 95 940 0
113 799 201 940 0
202 789 308 936 0
338 856 354 875 0
381 798 469 933 0
491 792 575 931 0
596 793 681 931 0
703 792 786 931 0
12 618 95 753 0
112 614 198 752 0
203 601 307 748 0
337 670 352 687 0
382 609 468 744 0
487 608 573 744 0
593 606 679 741 0
701 604 783 739 0
12 410 94 545 0
114 404 200 543 0
204 393 305 543 0
338 465 348 479 0
383 402 466 541 0
488 401 573 539 0
595 401 680 533 0
703 401 785 536 0
9 213 93 347 0
112 207 197 346 0
200 199 304 344 0
337 269 349 283 0
380 207 466 343 0
486 206 574 342 0
593 207 680 340 0
702 206 786 340 0
13 36 98 166 0
114 34 202 167 0
203 22 308 166 0
336 92 353 111 0
382 33 468 166 0
487 31 573 166 0
578 21 679 166 0
702 34 787 167 0

85

Agora necessrio compilar uma nova biblioteca. Seguem os comandos que executam
essa tarefa:
1 Para cada arquivo TIFF treinado, executar:

$tesseract

[lang].[fontname].exp[num].tif

[lang].[fontname].exp[num]

nobatch box.train

O resultado desse comando, um arquivo chamado [lang].[fontname].exp[num].tr ,


que contm todas as propriedades de cada caractere treinado.

2 O Tesseract precisa ainda conhecer o conjunto de caracteres de sada. Para gerar o


arquivo unicharset, preciso executar o extrator:

$ unicharset_extractor [lang].[fontname].exp[num].box ...

O resultado desse comando, um arquivo chamado [lang].unicharset , representando


as caractersticas de cada caractere, como o tipo (se pontuao, um nmero, um alfabtico
etc.) e a representao em hexadecimal.

3 A partir da verso 3.0.1 do Tesseract preciso criar um arquivo declarando as


propriedades da fonte utilizada, como: o nome da fonte, se est em negrito, itlico etc.
Definiu-se ento criar o um arquivo chamado font_properties conforme o modelo, a seguir:

<fontname> <italic> <bold> <fixed> <serif> <fraktur>

Exemplo:

Arial 0 1 0 0 0

86

No exemplo: fonte Arial, no tem itlico, tem negrito, no fixado, no serif e no


fraktur.

4 necessrio juntar o(s) arquivo(s) treinado(s) clusterizando-o(s), em dois


comandos: mftraining e cntraining .

Executando:

mftraining

-F

font_properties

-U

unicharset

-O

[lang].unicharset

[lang].[fontname].exp[num].tr ...

Exemplo:

mftraining

-F

font_properties

-U

unicharset

-O

placa.unicharset

placa.arial.exp0.tr ...

Este comando gerar dois arquivos: [lang].inttemp e [lang].pffmtable .

E executando:

$ cntraining [lang].[fontname].exp[num].tr ...

Exemplo:

$ cntraining placa.arial.exp0.tr ...

Este comando gera um arquivo: [lang].normproto .

87

5 Combinando todos os arquivos, executa o comando:

$ combine_tessdata [lang].

Feito todos esses procedimentos, o treinamento nomeado placa est criado e pronto
para ser utilizado no programa de reconhecimento de caracteres, conforme a seguir:

248 void tesseractOCR(IplImage *placa, int x, int y, int width, int height)
249 {
250
TessBaseAPI tess;
251
tess.SetVariable("tessedit_char_whitelist",
252
"ABCDEFGHIJKLMNOPRSTUVWXYZ1234567890");
253
tess.Init(NULL,"placa" );
254
tess.SetImage((uchar*)placa->imageData, placa->width, placa->height,
255
placa->nChannels, placa->widthStep);
256
tess.SetRectangle(x,y,width,height);
257
//tess.GetBoxText(0);
258
tess.Recognize(0);
259
//tess.TesseractRect
260
261
const char* out = tess.GetUTF8Text();
262
tess.End();
263
264
cout << out << endl;
265 }

A varivel tess declarada pelo tipo de estrutura chamada TessBaseAPI da


biblioteca do Tesseract. O processo de leitura OCR somente inicializa quando chamado o
mtodo Init que especifica a base de treinamento (por padro o ingls), que ocorreu no
processo de aprendizado, nomeado anteriormente de placa.
O mtodo Recognize inicializa o reconhecimento dos caracteres da imagem.
J o mtodo getUTF8Text imprime o texto no formado ASCII.

88

5.

APLICAO PRTICA DA SOLUO PROPOSTA

Conforme explicado no escopo do trabalho no captulo 1, o prottipo foi desenvolvido


especificamente para identificar a placa veicular de automveis e caminhes, obedecendo ao
modelo adotado oficialmente pelo Conselho Nacional de Trnsito.
Sendo assim, o objetivo principal do captulo apresentar a operao do sistema de
deteco com testes e os respectivos resultados.

5.1. Apresentao da rea de Aplicao da Soluo

Logicamente, por se tratar de um prottipo, o projeto no est apto para utilizao


comercial, pois envolveria obrigatoriamente um projeto de captura da imagem e um projeto
de iluminao adequada ao local. Dessa maneira, este software direcionado unicamente para
fins acadmicos.
Existem inmeras reas para aplicao desse modelo, contemplando at mesmo
trabalhos mais complexos como na segurana pblica, monitorando os veculos que trafegam
em vias. Assim como, para aplicaes mais especficas que identifique a placa de veculo em
um determinado cenrio ou situao.

5.2. Descrio da Aplicao da Soluo

A seguir, sero mostrados os testes realizados no modelo, descrevendo o passo-apasso, alm dos equipamentos utilizados.
No processo de captura, utilizaram-se dois equipamentos de filmagem: uma webcam
que filma em qualidade VGA (figura 5.1) e uma cmera de oito Mega pixel do iPhone 4S
(figura 5.2). A webcam foi utilizada para testes de desenvolvimento, aferindo em tempo-real o
funcionamento e a qualidade da implementao do algoritmo e da prpria biblioteca de
imagem utilizada. A cmera do iPhone 4S serviu para gravar as vdeos-imagens dos veculos

89

que estivessem na via, para posteriormente utiliz-los no software, evitando levar o


computador at os ambientes de testes.
Tambm no foi utilizado nenhum sistema de iluminao, a no ser a natural do
cenrio, no caso: luz solar, lmpadas fluorescentes e incandescentes. importante mencionar
aqui, que a grande maioria dos dispositivos de captura j possui um modo automtico que
controla a intensidade luminosa que chega ao foto sensor, colaborando na etapa de prprocessamento da imagem.

Figura 5.-Motion Eye do Sony Vaio.


Fonte: Autor.

Figura 5.- Cmera iSight de 8 megapixels


Fonte: Autor.

J os processos de pr-processamento, localizao, validao, segmentao e leitura da


imagem, foram realizadas com o apoio de um notebook com as seguintes configuraes:

90

Processador:

Tipo: Intel Core i5-2410M;

Velocidade: 2.3GHz with Turbo Boost Technology up to 2.90GHz;

Cache : 3MB.

Processador Grfico:

Processador : AMD Radeon HD 6630M;

RAM : 1GB dedicado.

Memria:

Instalado: 4GB (2GB x 2);

Frequncia: DDR3-1333MHz.

Passo-a-passo para utilizao do programa:


1 Captura da imagem utilizando o iPhone 4S na resoluo 1080p;
2 Apontar na linha de cdigo do programa o endereo do arquivo de vdeo;
3 Executar o programa;
4 O programa pode salvar as placas encontradas, que sero utilizadas futuramente
para criar os arquivos de aprendizados do Tesseract OCR;
5 O programa informa em formato texto, os caracteres das placas encontradas.

5.3. Resultados da Aplicao da Soluo

Foram realizados trs tipos de testes: de nvel de exatido na deteco da placa do


veculo, da performance do algoritmo utilizando as bibliotecas OpenCV e Tesseract OCR, e
da exatido na converso dos caracteres da imagem para o texto. Foram obtidos os resultados,
apresentados nas tabelas 5.1, 5.2 e 5.3:

Tabela 5.- Exatido na deteco da placa

91

Arquivo

Resoluo

Amostras

Sucesso

Falha

Proporo(%)

teste1.wmv

480p

100 %

teste2.wmv

1080p

17

12

70,5 %

teste3.wmv

1080p

30

19

11

63.3 %

Tabela 5.- Performance do Algoritmo


Arquivo

Resoluo

Tempo mdio (ms)

teste1.wmv

480p

~ 60

teste2.wmv

1080p

~ 95

teste3.wmv

1080p

~105

Tabela 5.- Exatido do Tesseract OCR


Arquivo

Resoluo

Amostras

Sucesso

Falha

Proporo(%)

teste1.wmv

480p

100 %

teste2.wmv

1080p

12

12

100 %

teste3.wmv

1080p

19

19

100 %

Observa-se na tabela 5.1, que a soluo de deteco da placa funcional. Porm no


foi previsto no incio do projeto um fator muito importante que contribuiu para as falhas
encontradas nos testes, refletido no resultado. Isto , para carros nas cores branca e prata com
placas do modelo particular, na cor cinza, o sistema no detectou corretamente nos testes que
foram realizados (filmados). Tentou-se contornar isso, utilizando a tcnica de alterao de
cores da placa no modelo HLS conforme explicado no item 4.4.2 da descrio da
implementao, mostrado na figura 4.8, no obtendo sucesso devido ao alto nvel de rudo
detectado pela cmera VGA. Tambm se tentou utilizar a tcnica de deteco de borda de
Sobel implementada (vide apndice A), porm a tcnica no compatvel com a funo de
deteco de contorno, precisando utilizar tcnicas de limiarizao, sobrecarregando ainda
mais o algoritmo. Dessa maneira, pode-se inferir por comparao, que o mesmo problema
ocorra para carros com tons de cores que sejam parecidas com o fundo da placa, por exemplo,
carros vermelhos com o modelo de placa de aluguel, tambm na cor vermelho, ou carros, com
tons de cores brancos e pratas que utilizam o modelo de placa de aprendizado ou oficial, com
fundo na cor branca. Houve um caso particular de sucesso de deteco para um carro na cor

92

prata utilizando a placa do modelo particular: na placa existia a borda sutilmente preta, que
encobria o material de alumnio que normalmente no pintada.
Na performance do algoritmo, verifica-se que o modelo rodou no mximo de 16,6
frames/segundo e um mnimo de 9,5 frames/segundo, considerado inferior ao previsto para
utilizar em tempo real. No caso, a configurao do notebook utilizado neste projeto no
mostrou desempenho suficiente para a aplicao em tempo real. Uma maneira de otimizar o
processo criando um algoritmo que melhor utilize a caracterstica de multiprocessamento do
processador.
Utilizando o Tesseract OCR obteve-se um bom resultado, desde que seja realizado
previamente o treinamento dos caracteres baseado no processo de segmentao e leitura OCR,
esclarecidos nos itens 4.4.5 e 4.4.6 desse trabalho. No mesmo item 4.4.6 importante destacar
que o processo de aprendizagem dos caracteres ajuda na performance da biblioteca.
Na tabela 5.4 a seguir, ilustrado a performance dos sistemas de deteco de placas
automotivas, encontradas em algumas literaturas.

Tabela 5. - Performances dos sistemas de deteco de placas automotivas, nas literaturas.


Referencial

Taxa de
reconhecimento

Plataforma e
processador

Tempo
(seg)

DP: deteco da
placa

Conhecimento cientifico envolvido no


mtodo
P: mtodo de deteco da placa
R: mtodo de reconhecimento dos
caracteres

RC: reconhecimento
dos caracteres
T: sucesso total
[2]

100% (DP)
92.5% (RC)

Matlab 6.0, P
II ,
300MHz

~4

P: analise de componentes conectados. R:


2 PNNs (um para letras e outra para
nmeros). Teste: 40 imagens.

AMD K6,
350MHZ

~5

P: Morfologia matemtica. R: Hausdoff


distance.

~0.1

P: Morfologia e estatstica de borda.


Testes: ~10000 imagens.

P: Magnitude de gradientes verticais e


componentes geomtricos. Testes: 104
imagens.

~1.6

P: Tecnica baseada em processamento e


referencia de imagens. Motocicletas
tambm foram identificadas.

P: Processamento em escala de cinza. R:


projeo dinmica.

~0.3

P: Combinao de informaes de cores e

[3]

80.4% (T)

[4]

99.6% (DP)

P IV, 1.7GHz

[6]

94.2% (DP),

C++, P II,
300MHz

98,6% (RC)
[7]

92.3% (DP),
95.7% (RC)

[8]

93.1% (T)

[9]

90% (T)

P III, 1GHz

93

formas das placas.


[10]

97% (T no dia),

0.1 1.5

Unidade de Computao de alta


performance para reconhecimento de
placa.

90% (T a noite)
[11]

91% (T)

RS/6000 mod.
560

~1.1

P: Informao de contraste. R: Template


Matching. Teste: 3200 imagens.

[12]

80% (T)

Intel
486/66MHz

~15

P: Processamento em escala de cinza. R:


Feedforward ANN.

[13]

89% (DP)

C++, P III
800MHz

~1.3

P: Suport Vector Machine (SVM),


continuous adaotive meanshift algorithm
(CAMShift) in color measurements.

[14]

98.5% (DP)

AMD Athlon
1.2

~34

P: Um classificador supervisionado
treinados sobre as caractersticas de
textura. R: kd-tree data and
approximate nearest neighbour. Teste:
131 imagens.

[15]

95% (T)

Visual C++, P
IV

P: mtodo de mltiplo entrelaamento. R:


ANN.

[16]

97% (DP)

Workstation
SG INDIGO
2

P: Regras de lgica Fuzzy. Teste:100


imagens.

[17]

75.4% (DP),

[18]

98.5% (RC)
97.6% (DP)
95.6% (RC)

P: Logica Fuzzy. R: Rede neural. Teste


10000 imagens.

P IV, 1.6 GHz

~2.5

[19]

98% (DP)

P IV, 1.4 GHz

3.12

[20]

0.15

[21]

80.6% (DP) average

[22]

P III, 600
MHz
P III, 500
MHz
-

P: Regras de lgica Fuzzy. R: Self


Organized Neural Network. Teste: 1065
imagens de 71 veiculos.
P: Gabor Transform and Vector
Quantization. Executa somente a
localizao da placa e a segmentao de
caracteres (94.2%).
P: Sub-machine-code Genetic
Programming.
P: Real-coded genetic algorithm (RGA).

[23]

98.8% (DP),
95.2% (RC)

Visual C++, P
IV 1.4 GHz

[24]

95.6% (DP)

0.65
(plates)
0.1 (per
character
)
-

[25]

92.4% (DP)

[26]

93.6% (DP)

[27]

85% (DP)

Borland C++,
P IV 1.6GHz
Visual C++,
AMD Athlon
900Mhz
-

[28]

85% (DP)

[29]

100% (DP),
94.7% (RC)

Pulse-Coupled
NN Processor
Visual C++, P
II

0.18
-

P: Markov Random Field and Genetic


Algorithm in video sequence.
P: Hough transform. R: Hidden Markov
Model.

P: AdaBoost (Adaptive HBoostingH)


meta - algorithm.
P: Wavelet transform.

~1.3

P: Generalized Symmetry Transform and


Image Warping.

P: Discrete Time Cellular Neural


Networks. R: Multi-Layer Perceptron.
P: Pulse Coupled Neural Network
(PCNN).
P: 2 Time-Delay Neural networks
(TDNNs). R: support vector machine
(SVM)-based character recognizer. Teste:

~1

94

[30]

98% (DP)

C++, P I, 200
MHz

0.2

[31]

97.0-99.3%

[32]

84.5% (RC
segmentation)
96.8% (RC)

Visual C++, P
IV 2.4GHz
-

~1.5

[33]

[36]

88% (DP), 95.7%


(RC)
99%

[37]

[34]

1000 imagens.
P: Vector Quantization (VQ) for picture
compression and effective license plate
location.
P: Sensing system with a wide dynamic
range. Teste: 1000 imagens.
Character segmentation: Feature vector
extraction and mathematical morphology.
P: Block based local adaptive
binarization method.
P: Connected components. R: Hidden
Markov Models.
R: Character recognition-PNN. Teste:
680 imagens.
P:Gradientanalysis,R:Templatematching

Comparando as tcnicas utilizadas por alguns autores, este trabalho deu um foco maior
literatura desenvolvida pelos autores Bai Hongliang e Liu Changping (2004), focando na
localizao de bordas e caractersticas morfolgicas da placa.

5.4. Avaliao Global da Soluo

O modelo de processamento de imagens empregado nesse trabalho obteve resultados


positivos em partes, conforme explicado no item anterior. Trabalhar com a viso
computacional exige um trabalho muito minucioso e conhecimento de diversas reas que a
compreende.
Abaixo so listadas algumas dificuldades encontradas ao longo das execues deste
trabalho que afetaram diretamente o processo de deteco da placa e leitura dos caracteres:

Deteco da placa: utilizao de vrios mtodos de segmentao de bordas.


Principalmente devido ao problema das cores dos automveis e a cor do fundo das
placas.

Tratamento da imagem da placa: utilizando os processos de dilatao e eroso,


geram alteraes nos formatos dos caracteres, aumentando ou diminuindo as bordas.
Isso pode gerar alterao nos padres dos caracteres j catalogados no processo de
aprendizado.

Iluminao insuficiente do meio: geram caracteres imprevistos e no catalogados


pelo banco de aprendizado

95

Velocidade inadequada de gravao da cmera: com a quantidade frames por


segundo insuficiente, gerado borres nas imagens, efeito blur.

Outro fator que deve ser levado em considerao para o projeto ter eficcia a
velocidade de processamento do computador. A princpio, o sistema deve ser ajustado
para trabalhar com uma velocidade de processamento equivalente a velocidade de
gravao da cmera, permitindo a deteco das placas em tempo real. Caso no seja
possvel, procura-se trabalhar com o processamento, adequando velocidade para
acima da mxima permitida pela via. Por exemplo, se o sistema captura a placa numa
distncia de 30 metros entre os pontos de mnima e mxima deteco e a velocidade
da via seja de 30m/s (108Km/h), calcula-se que em um segundo que o carro percorra
os 30 metros, o sistema deva capturar no mnimo um quadro perfeito.

96

6. CONCLUSO

6.1. Concluses

A utilizao da viso computacional com a finalidade de aproxim-la viso humana


mostrou-se realmente um desafio ao utiliz-la no desenvolvimento do projeto de deteco e
reconhecimento de placa automotiva. Diversas reas de estudo foram exigidas para
elaborao deste trabalho, cuja interdisciplinaridade agrega diversas tcnicas matemticas e
tecnolgicas.

As

disciplinas

como

fsica,

mtodos

matemticos,

programao

processamento digital de imagem, so exemplos que compem a parte terica. A cmera que
filma em um formato e em uma determinada resoluo e o computador que processa e
armazena dados, foram aqui consideradas como tecnologias fins para obteno de
informaes. Assim, para a construo do software de deteco e reconhecimento de placas
para carros e caminhes, aplicou-se o modelo proposto na figura 4.1, baseado em um projeto
de viso computacional utilizando as bibliotecas open source, OpenCV e o Tesseract OCR.
No decorrer da fase de desenvolvimento do software, no faltaram problemas para
serem solucionados. Por exemplo, no processo de captura da imagem no foi utilizada uma
cmera adequada que trouxesse qualidade imagem, alm da parte de iluminao sem a luz
e um equipamento eficaz, outras fases do modelo so afetadas diretamente. Dessa maneira, a
fase de pr-processamento exigiu um tratamento das imagens, aplicando filtros para
diminuio de rudos. No processo de localizao, empregou-se a tcnica de segmentao de
bordas que melhor oferecesse performance ao algoritmo. No processo de validao, foram
ajustados parmetros para conferir maior preciso para a deteco da placa automotiva. J no
processo da leitura e reconhecimento de caracteres, destacou-se a necessidade prvia do
aprendizado dos caracteres, por um mtodo bastante trabalhoso atualmente.
Dessa maneira, o objetivo principal do projeto foi cumprido para a maioria dos casos
de testes, salvo nos casos particulares apresentados na sesso dos resultados da aplicao do
captulo da aplicao prtica, onde foram encontrados casos em que o mtodo de deteco de
borda falha e necessita uma ateno especial nos equipamentos de captura.
Para aperfeioar o trabalho de deteco de objeto por bordas, tentou-se utilizar
tambm em conjunto outras tcnicas de segmentao, como a de Sobel e a wavelet 2D, porm

97

os resultados no foram expressivos, visto o curto tempo de pesquisa e desenvolvimento do


projeto. Em complemento, o projeto de um sistema de iluminao eficaz em conjunto ao
sistema tico e a bons equipamentos para processamento de dados, trariam excelentes
resultados para o trabalho.

6.2. Sugestes para Trabalhos Futuros

Foram referenciadas ao longo deste trabalho, inmeras tcnicas para deteco e


reconhecimento de placa automotiva, que podero ser exploradas em complemento a tcnica
de deteco de bordas apresentadas. Dessa maneira, este trabalho pode ser complementado
utilizando outras tcnicas de bordas como de Sobel ou Wavelet. Alm disso, podem ser
criadas interfaces que tragam facilidades para ajustes s variveis do programa, agilizando a
configurao dos mtodos empregados no sistema, adaptando-os consequentemente ao meio
ambiente utilizado. Ou, integrando este sistema a outros que controlam e/ou monitoram
acessos de veculos, exemplo: shopping.
Outra metodologia para localizao de objetos que tem se expandido utilizando o
treinamento de imagens, como haartraining e o Speeded-Up Robust Features (SURF) que o
OpenCV j disponibiliza. Essas tcnicas utilizam critrios de repetio das caractersticas do
objeto treinado sob diferentes cenrios que ocorrem, construindo assim, um banco de
informaes.

98

REFERNCIAS

CANNY, J.; A Computational Approach To Edge Detection, IEEE Trans. Pattern Analysis
and Machine Intelligence, 1986.
BRADSKI, KAEHLER Adrian; Learning OpenCV, (2008).
DAVIES, E. Roy. Machine Vision: Teoria, Algoritmos, Practicalities. Morgan Kaufmann,
2005.
DESCHAMPS, Fernando. Contribuies para o Desenvolvimento de um Sistema de Viso
aplicado ao Monitoramento do Desgaste de Ferramentas de Corte - O Sistema ToolSpy.
Dissertao de mestrado, Universidade Federal de Santa Catarina - Programa de Ps
Graduao em Engenharia Eltrica, Florianpolis - SC - Brasil, 2004.
ERHARDT-FERRON. Theory and Applications of Digital Image Processing. University of
Applied Sciences Offenburg, 1 edition, 2000.
FORSYTH, J. Ponce, Computer Vision: A Modern Approach, Englewood Cliff s, NJ:
Prentice-Hall, 2003.
GONZALEZ, RICHARD E. Woods. Digital Image Processing. Pearson Education, 2 edition,
2002.
GRIOT, Melles. The Practical Application of Light. Estados Unidos, 1999.
HUBEL, WIESEL; Receptive Fields, binocular interaction and functional architecture in the
cats visual cortex. J. Physiol, 1962.
JHNE, HAUSSECKER, PETER Geissler. Handbook of Computer Vision and Applications
- Sensors and Imaging, volume 1. Academic Press, San Diego - CA, 1 edition, 1999.
JAIN, A. K. Fundamentals of digital image processing. Englewood Cliffs, NJ: Prentice Hall,
1989.
JAIN, KASTURI, BRIAN G. Schunck. Machine Vision. McGraw Hill, 1 edition, 1995.
LARSON, H. J.; SHUBERT, B. O. Probabilistic Models in engineering sciences 1979, v.1
MARQUES FILHO, Og; VIEIRA NETO, Hugo. Processamento Digital de Imagens, Rio de
Janeiro:Brasport, 1999.
MORRIS, Tim. Computer Vision and Image Processing. Palgrave Macmillan, 2004.

99

PRATT, W. K. Digital image processing. New York: John Wiley and Sons, 1991.
SHAPIRO, GEORGE Stockman. Computer Vision. Prentice Hall, 2001.
TRUCCO, A. Verri, Introductory Techniques for 3-D Computer Vision, Englewood Cliff s,
NJ: Prentice-Hall, 1998.
ZIOU D., TABBONE S. Edge Detection Techniques - An Overview. International Journal of
Pattern Recognition and Image Analysis,Vol. 8, No. 4, pp. 537-559, 1998. also Technical
Report, No. 195, Dept. Math. Et Informatique, Universit de Sherbrooke, 41p, 1997.

Links externos:
TheComputerVision uma comunidade para os pesquisadores de viso por computador e
profissionais para compartilhar, discutir, conectar e colaborar.
Disponvel em: The Computer Vision <http://cvisioncentral.com/>
Acesso em: 10 de nov. 2012.

Uma boa fonte para cdigos-fonte, pacotes de software, conjuntos de dados, etc relacionada
viso de computacional.
Disponvel em: Computer Vision Online <http://www.computervisiononline.com/>
Acesso em: 10 de nov. 2012.

Bob Fisher's Compendium of Computer Vision.


Disponvel em: CVonline < http://homepages.inf.ed.ac.uk/rbf/CVonline/>
Acesso em: 10 de nov. 2012.

Image Processing - Grupo de Pesquisa


Disponvel em: IPRG < http://iprg.co.in/index.php>
Acesso em: 10 de nov. 2012.

100

Referencial da tabela 5.4:


[2] C. Anagnostopoulos, E. Kayafas, V. Loumos, Digital image processing and neural
networks for vehicle license plate identification, Journal of Electrical Engineering, vol. 1,
No.2,

p.p.

2-7,

2000.

[Online].

Available:

http://www.medialab.ntua.gr/people/canag/journals.php.
[3] F. Martn, M. Garca, J. L. Alba, (2002, Jun.), New Methods for Automatic Reading of
VLP's (Vehicle License Plates), presented at IASTED International Conference Signal
Processing, Pattern Recognition, and Applications, SPPRA 2002. [Online]. Available:
http://www.gpi.tsc.uvigo.es/pub/papers/sppra02.pdf.
[4] Bai Hongliang and Liu Changping, A hybrid License Plate Extraction Method Based On
Edge Statistics and Morphology, in proc. Conf. on Pattern Recognition (ICPR), 2004, pp.
831-834.
[5] Danian Zheng, Yannan Zhao, Jiaxin Wang, An efficient method of license plate
location, Pattern Recognition Letters (2005), Volume 26, Issue 15, November 2005, Pages
2431-2438.
[6] SherrZheng Wang and HsMian Lee, Detection and Recognition of License Plate
Characters with Different Appearences, in proc. Conf. Intelligent Transportation Systems,
vol. 2, 2003, pp. 979 - 984.
[7] Hsi-Jian Lee, Si-Yuan Chen and Shen-Zheng Wang, Extraction and Recognition of
License Plates of Motorcycles and Vehicles on Highways, in proc Int. Conf. on Pattern
Recognition (ICPR), 2004, pp. 356 359.
[8] Tsang-Hong Wang, Feng-Chou Ni, Keh-Tsong Li, Yon-Ping Chen, Robust License Plate
Recognition based on Dynamic Projection Warping, in proc. IEEE Int. Conf. on Networking,
Sensing & Control, 2004, pp.784-788.
[9] Xifan Shi, Weizhong Zhao, and Yonghang Shen, Automatic License Plate Recognition
System Based on Color Image Processing, Lecture Notes on Computer Science 3483, O.
Gervasi et al., Ed. Springer-Verlag, 2005, pp. 1159 1168.
[10] Dai Yan, Ma Hongqing, Liu Jilin and Li Langang, A High Performance License Plate
Recognition System Based on the Web Technique, in proc. Conf. Intelligent Transportation
Systems, 2001, pp. 325-329.

101

[11] P. Comelli, P. Ferragina, M.N. Granieri, F. Stabile, Optical recognition of motor vehicle
license plates, IEEE Trans. On Vehicular Technology, vol. 44, No. 4, pp. 790-799, 1995.
[12] S. Draghici, A neural network based artificial vision system for license plate
recognition, International Journal of Neural Systems, vol. 8, no. 1, pp. 113-126, 1997.
[13] Kwang In Kim, Keechul Jung, and Jin Hyung Kim , Color Texture-Based Object
Detection: An Application to License Plate Localization, Lecture Notes on Computer
Science 2388, S.-W. Lee and A. Verri, Ed., Springer-Verlag, pp. 293-309.
[14] J. Cano and J. C. Perez-Cortes, Vehicle License Plate Segmentation in Natural Images,
Lecture Notes on Computer Science 2652, F.J. Perales et al., Ed. Springer-Verlag, 2003, pp.
142149.
[15] A.Broumandnia, M.Fathy, (2005, Dec.) , Application of pattern recognition for Farsi
license plate recognition, to be presented at ICGST International Conference on Graphics,
Vision and Image Processing (GVIP-05). [Online]. Available: http://www.icgst.com/gvip
/v2/P1150439001.pdf.
[16] N. Zimic, J. Ficzko, M. Mraz, J. Virant, The Fuzzy Logic Approach to the Car Number
Plate Locating Problem, in proc. Intelligent Information Systems (IIS97), pp.227-230, 1997.
[17] J. A. G. Nijhuis, M. H. ter Brugge, K.A. Helmholt, J.P.W. Pluim, L. Spaanenburg,R.S.
Venema, M.A. Westenberg, Car License Plate Recognition with Neural Networks and Fuzzy
Logic, in proc.. IEEE International Conference on Neural Networks, vol.5, 1995, pp. 22322236.
[18] Shyang-Lih Chang, Li-Shien Chen, Yun-Chung Chung, and Sei-Wan Chen, Automatic
License Plate Recognition, IEEE Trans. on Intelligent Transportation Systems, Vol. 5, No. 1,
pp. 42-53, 2004.
[19] Fatih Kahraman, Binnur Kurt, and Muhittin Gkmen , License Plate Character
Segmentation Based on the Gabor Transform and Vector Quantization, Lecture Notes on
Computer Science 2869, A. Yazici and C. Sener, Ed., Springer-Verlag, 2003, pp. 381-388.
[20] G. Adorni, S. Cagnoni, M. Gori, and M. Mordonini, Access control system with neurofuzzy supervision, in proc. Conf. Intelligent Transportation Systems, 2001, pp. 472-477.
[21] Seiki Yoshimori, Yasue Mitsukura, Minoru Fukumi, and Norio Akamatsu, License
Plate Detection Using Hereditary Threshold Determine Method, Lecture Notes in Artificial

102

Intelligence 2773, V. Palade, R.J. Howlett, and L.C. Jain, Ed. Springer-Verlag, 2003, pp.
585593.
[22] Yuntao Cui, Qian Huang, Extracting characters of license plates from video sequences,
Machine Vision and Applications, vol. 10, pp. 308-320, 1998.
[23] Tran Duc Duan, Tran Le Hong Du, Tran Vinh Phuoc, Nguyen Viet Hoang, Building an
Automatic Vehicle License-Plate Recognition System, in proc. Intl. Conf. in Computer
Science (RIVF), 2005, pp. 59-63.
[24] Louka Dlagnekov, (2004, Mar.), License Plate Detection Using AdaBoost, Computer
Science

&

Engineering

Dpt.,

San

Diego,

La

Jolla.

[Online].

Available:

http://www.cse.ucsd.edu/classes/ fa04/cse252c/projects/louka.pdf.
[25] Ching-Tang Hsieh, Yu-Shan Juan, Kuo-Ming Hung, Multiple License Plate Detection
for Complex Background, in Proc. Int Conf. on Advanced Information Networking and
Applications (AINA), vol. 2, 2005, pp. 389-392.
[26] Dong-Su Kim, Sung-I1 Chien, Automatic Car License Plate Extraction Using Modified
Generalized Symmetry Transform and Image Warping, in proc. Int. Symposium on
Industrial Electronics (ISIE), 2001 , pp. 2022-2027.
[27] M. H. ter Brugge, J. H. Stevens, J.A. G. Nijhuis, L. Spaanenburg, License Plate
Recognition Using DTCNNs, in proc. IEEE lnt. Workshop on Cellular Neural Networks and
their Applications, 1998, pp. 212-217.
[28] Mario I. Chacon M., Alejandro Zimmerman S., License Plate Location Based on a
Dynamic PCNN Scheme, in proc. Int. Joint Conf. on Neural Networks, vol. 2, 2003, pp.
1195 1200.
[29] K.K.Kim K.I.Kim J.B.Kim H. J.Kim, Learning-Based Approach, for License Plate
Recognition, in proc. IEEE Signal Processing Society Workshop, Neural Networks for
Signal Processing, Vol. 2, 2000, pp. 614 - 623.
[30] R. Zunino, S. Rovetta, Vector quantization for license-plate location and image coding,
IEEE Trans. on Industrial Electronics, February, vol.47, No.1, pp.159-167, 2000.
[31] T. Naito, T. Tsukada, K. Yamada, K. Kozuka, S. Yamamoto, Robust license-plate
recognition method for passing vehicles under outside environment, IEEE Trans. on
Vehicular Technology, Vol. 49, No.6, pp. 2309-2319, 2000.

103

[32] Shigueo Nomura, Keiji Yamanaka, Osamu Katai, Hiroshi Kawakami, Takayuki Shiose,
A novel adaptive morphological approach for degraded character image segmentation,
Pattern Recognition, Vol. 38, Issue 11, November 2005, pp.1961-1975.
[33] Byeong Rae Lee, Kyungsoo Park, Hyunchul Kang, Haksoo Kim, and Chungkyue Kim,
Adaptive Local Binarization Method for Recognition of Vehicle License Plates, Lecture
Notes on Computer Science 3322 R. Klette and J. uni, Ed. Springer-Verlag, 2004, pp. 646
655.
[34] David Llorens, Andres Marzal, Vicente Palazon, and Juan M. Vilar , Car License Plates
Extraction and Recognition Based on Connected Components Analysis and HMM
Decoding, Lecture Notes on Computer Science 3522, J.S. Marques et al. , Ed. SpringerVerlag, 2005, pp. 571578.
[35] C. Anagnostopoulos, T. Alexandropoulos, S. Boutas, V. Loumos, E. Kayafas, A
template-guided approach to vehicle surveillance and access control, in proc. IEEE Conf. on
Advanced Video and Signal Based Surveillance, 2005., pp. 534 539.
[36] Yafeng Hu, Feng Zhu, and Xianda Zhang, A Novel Approach for License Plate
Recognition Using Subspace Projection and Probabilistic Neural Network, Lecture Notes on
Computer Science 3497, J. Wang, X. Liao, and Z. Yi, Ed. Springer-Verlag 2005, LNCS 3497,
pp. 216221.
[37] Yo-Ping Huang, Shi-Yong Lai and Wei-Po Chuang, A Template-Based Model for
License Plate Recognition, in proc. IEEE Int. Conf. on Networking, Sensing & Control,
2004, pp. 737-742.

104

APNDICE

APENDICE A Algoritmo do projeto este algoritmo foi comentado no item 4.4, no


descritivo da implementao, assim como em alguns trechos do cdigo.

1 #include <stdio.h>
2 #include <highgui.h>
3 #include <cv.h>
4 #include <baseapi.h>
5
6
7 using namespace cv;
8 using namespace std;
9 using namespace tesseract;
10
11 void frameDeteccaoPlaca( IplImage* frame );
12 IplImage* encontraPlaca(CvSeq* contours, IplImage* frame_gray,
13
IplImage* frame );
14 void trataImagemHLS(IplImage* frame);
15 void tesseractOCR(IplImage *placa, int x, int y, int width, int height);
16 void saveImg(IplImage *img);
17 double angle( CvPoint* pt1, CvPoint* pt2, CvPoint* pt0 );
18 IplImage* sobelImg(IplImage* frame);
19
20 int main(int argc, char** argv)
21 {
22
IplImage *frame;
23
24
CvCapture *capture = NULL;
25
26
clock_t startT, endT;
27
28
capture = cvCreateFileCapture( "teste1.wmv" );
29
30
//capture = cvCaptureFromCAM( -1 );
31
32
if( capture )
33
{
34
while( true )
35
{
36
frame = cvQueryFrame( capture );
37
if( !frame ) break;
38
if( !frame->imageSize==0 )
39
{
40
startT=clock();
41
frameDeteccaoPlaca( frame );
42
endT=clock();
43
cout << (double) (endT-startT) << endl;
44
}
45
else
46
{
47
cout << "Problema na webcam! Sem captura" << endl;
48
break;
49
}
50

105

51
if( cvWaitKey(5) == 27 ) { break; }
52
}
53
}
54
cvReleaseCapture( &capture );
55
cvDestroyWindow("Deteccao da placa");
56 }
57
58 void frameDeteccaoPlaca( IplImage* frame )
59 {
60
//trata imagem utilizando o tipo HLS (HUE, Light, Saturation)
61
//trataImagemHLS(frame);
62
63
//IplImage* frame_gray_s = cvCreateImage( cvSize( frame->width,frame64 >height ), IPL_DEPTH_8U, 1); // gray smooth
65
IplImage* frame_gray = cvCreateImage( cvSize( frame->width,
66
frame->height ), IPL_DEPTH_8U, 1);
67
IplImage* frame_canny = cvCreateImage( cvSize( frame->width,
68
frame->height ), IPL_DEPTH_8U, 1);
69
IplImage* frame_canny2 = cvCreateImage( cvSize( frame->width,
70
frame->height ), IPL_DEPTH_8U, 1);
71
IplImage* frame_merge = cvCreateImage( cvSize( frame->width,
72
frame->height ), IPL_DEPTH_8U, 1);
73
74
// Escala cinza
75
cvCvtColor( frame, frame_gray, CV_BGR2GRAY );
76
// Retira ruidos
77
cvSmooth(frame_gray, frame_gray, CV_GAUSSIAN, 3,3);
78
79
//Sobel
80
//IplImage* frame_sobel = cvCreateImage( cvSize( frame->width,
81
frame->height ), IPL_DEPTH_8U, 1);
82
//frame_sobel = sobelImg(frame_gray);
83
84
//cvConvertScaleAbs(frame_sobel, frame_sobel);
85
86
//cvShowImage("Sobel", frame_sobel);
87
88
// Filtros canny cinza e canny colorida
89
cvCanny( frame_gray, frame_canny, 0, 255, 3);
90
//cvCanny( frame, frame_canny2, 0, 70, 3 );
91
92
// Soma dos filtros
93
//cvAddWeighted(frame_canny, 0.5, frame_canny2, 0.5, 0, frame_merge);
94
95
// declara contorno e area na memoria
96
CvSeq* contours = 0;
97
CvMemStorage* storage = NULL;
98
99
if( storage==NULL ) storage = cvCreateMemStorage(0);
100
else cvClearMemStorage(storage);
101
102
cvFindContours( frame_canny, storage, &contours, sizeof(CvContour),
103
CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
104
105
//-- Mostra imagem
106
cvShowImage("Deteccao da placa",
107
encontraPlaca(contours,frame_gray,frame) );
108
//cvShowImage("Deteccao da placa", frame);
109
110
// Libera recursos
111
cvReleaseImage(&frame_gray);

106

112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172

//cvReleaseImage(&frame_gray_s);
cvReleaseImage(&frame_canny);
cvReleaseImage(&frame_canny2);
cvReleaseImage(&frame_merge);
cvReleaseMemStorage(&storage);
}
IplImage* encontraPlaca(CvSeq* contours, IplImage* frame_gray,
IplImage* frame )
{
for ( ;contours!= NULL; contours = contours->h_next)
{
CvSeq* approxContour = cvApproxPoly(contours,
contours->header_size ,
contours->storage,
CV_POLY_APPROX_DP,
cvContourPerimeter(contours)*0.05,
0);
if (approxContour->total >=4 &&
fabs(cvContourArea(approxContour,CV_WHOLE_SEQ)) > 2000 &&
cvCheckContourConvexity(approxContour))
{
CvBox2D box = cvMinAreaRect2(approxContour);
double whRatio = (double)box.size.width /
box.size.height;
if ((!(2.7 < whRatio && whRatio < 3.4))
) //||
abs(box.angle)>20 razao da largura e altura do objeto (essa proporcao
para o formato brasileiro).
{
CvSeq* child = contours->v_next;
if (child != NULL)
encontraPlaca(child, frame_gray, frame);
continue;
}
double s = 0;
for( int i = 0; i <= 4; i++ )
{
// find minimum angle between joint
// edges (maximum of cosine)
if( i >= 2 )
{
double t = fabs(angle(
(CvPoint*)cvGetSeqElem(approxContour, i),
(CvPoint*)cvGetSeqElem(approxContour, i-2),
(CvPoint*)cvGetSeqElem(approxContour, i-1)));
s = s > t ? s : t;
}
}
// if cosines of all angles are small
// (all angles are ~90 degree) then write quandrange
// vertices to resultant sequence
if( !(s < 0.3) )
{
CvSeq* child = contours->v_next;
if (child != NULL)

107

173
174
175
176
177
178
179
180
181
182
183
184 largura
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233

encontraPlaca(child, frame_gray, frame);


continue;
}
// desenha retangulo vermelho
cvDrawContours( frame , approxContour, CV_RGB(255,0,0),
CV_RGB(255,0,0), -1, CV_FILLED, 8 );
//amplia imagem
CvRect box2 = cvBoundingRect(approxContour);
int m_width = (int)9000/box2.width; //multiplicador de
int height_size, width_size, width_char, height_char;
if (m_width < 1)
{
height_size = 300;
width_size = 900;
height_char = 159; //53%
width_char = 102; //11.4%
}else
{
height_size = m_width * box2.height / 10;
width_size = m_width * box2.width / 10;
height_char = height_size * 46/100; // altura da
sessao dos caracteres
width_char = width_size * 12/100; // largura
}
IplImage* licenca = NULL;
licenca = cvCreateImage( cvSize( width_size,
height_size ), IPL_DEPTH_8U, 1);
//recorta imagem
cvSetImageROI(frame_gray, box2);
cvResize(frame_gray, licenca, CV_INTER_LINEAR);
cvResetImageROI(frame_gray);
//trata placa comum
cvThreshold(licenca,licenca,0,255,
CV_THRESH_TRUNC | CV_THRESH_OTSU);
cvThreshold(licenca,licenca,0,255,
CV_THRESH_BINARY | CV_THRESH_OTSU);
//trata placa colorida
//cvThreshold(licenca,licenca,0,255,
CV_THRESH_BINARY_INV | CV_THRESH_OTSU);
cvDilate(licenca,licenca,NULL,4);
cvErode(licenca,licenca,NULL,2);
//separa os caracteres
CvRect box_char;
box_char.x = width_size*5/100;
box_char.y = height_size*33/100;
box_char.width = width_size*88/100;
box_char.height = height_size*57/100;
//saveImg(licenca);

108

234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293

cvShowImage("Placa", licenca);
tesseractOCR(licenca, box_char.x, box_char.y ,
box_char.width , box_char.height);
}
cvClearSeq(approxContour);
}
return frame;
}

void tesseractOCR(IplImage *placa, int x, int y, int width, int height)


{
TessBaseAPI tess;
tess.SetVariable("tessedit_char_whitelist",
"ABCDEFGHIJKLMNOPRSTUVWXYZ1234567890");
tess.Init(NULL,"placa" );
tess.SetImage((uchar*)placa->imageData, placa->width, placa->height,
placa->nChannels, placa->widthStep);
tess.SetRectangle(x,y,width,height);
//tess.GetBoxText(0);
tess.Recognize(0);
//tess.TesseractRect
const char* out = tess.GetUTF8Text();
tess.End();
cout << out << endl;
}
void trataImagemHLS(IplImage* frame)
{
//transforma para o formato HLS
IplImage* frame_HLS = cvCreateImage( cvSize( frame->width,
frame->height ), IPL_DEPTH_8U,
3);
cvCvtColor( frame, frame_HLS, CV_BGR2HLS );
/**
* Pega os valores da imagem de entrada
*/
unsigned int height = frame_HLS->height;
unsigned int width = frame_HLS->width;
unsigned int step = frame_HLS->widthStep;
unsigned int channels= frame_HLS->nChannels;
uchar *data = (uchar*) frame_HLS->imageData;
/**
* Aqui vamos varrer os pixels da imagem.
* No for externo percorremos a altura e no
* interno a largura.
*/
for(unsigned int i=0; i < height; i++)
{
for(unsigned int j=0; j < width; j++){

109

294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354

float H = float(data[i*step + j*channels]); // escala de


0 a 360
float L = float(data[i*step + j*channels+1]); // escala
de 0 a 100
float S = float(data[i*step + j*channels+2]); // escala
de 0 a 100
// o branco fica mais cinza
//if (!( (S <=30) && (L >= 70) )){
//
H = 0;
//
L = 0;
//
S = 0;
//
// o verde fica branco
//if ( !((H >= 0) && (H <=140) && (S >= 50)) ){
//
L = 100;
//
S = 0;
//}
// o azul fica branco
//if ((H >= 90) && (H <=125) &&(L >= 0) && (S >= 100) ){
//
//
//}

L = 255;
S = 0;

// o vermelho fica branco


//if ( (H>=330) && (H <=20) && (L >= 50) && (S >= 50)){
//
L = 100;
//
S = 0;
//}
data[i*step + j*channels]= uchar(H);
data[i*step + j*channels+1]= uchar(L);
data[i*step + j*channels+2]= uchar(S);
}
}
//Converte para o formato BGR (padrao)
cvCvtColor( frame_HLS, frame, CV_HLS2BGR );
cvReleaseImage(&frame_HLS);
}
double angle( CvPoint* pt1, CvPoint* pt2, CvPoint* pt0 )
{
double dx1 = pt1->x - pt0->x;
double dy1 = pt1->y - pt0->y;
double dx2 = pt2->x - pt0->x;
double dy2 = pt2->y - pt0->y;
return (dx1*dx2 + dy1*dy2)/
sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);
}
void saveImg(IplImage *img)
{
time_t t = time(0);
struct tm tstruct;

110

355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383

char buf[80];
tstruct = *localtime (&t);
strftime(buf, sizeof(buf), "%m-%d-%H-%M-%S.jpg" , &tstruct);
cvSaveImage(buf,img);
}
IplImage* sobelImg(IplImage* frame) //utilizando a escala de cinza
{
IplImage* frame_x = cvCreateImage( cvSize( frame->width,
frame->height ), IPL_DEPTH_8U, 1);
IplImage* frame_y = cvCreateImage( cvSize( frame->width,
frame->height ), IPL_DEPTH_8U, 1);
IplImage* frame_sobel = cvCreateImage( cvSize( frame->width,
frame->height ), IPL_DEPTH_8U, 1);
//em X
cvSobel(frame, frame_x, 2, 0);
//em Y
cvSobel(frame, frame_y, 0, 2);
cvAddWeighted( frame_x, 0.5, frame_y, 0.5, 0, frame_sobel );
cvReleaseImage(&frame_x);
cvReleaseImage(&frame_y);
return frame_sobel;
}

You might also like