Anda di halaman 1dari 120

UNIVERSIDADE ESTADUAL DE CAMPINAS

FACULDADE DE ENGENHARIA ELTRICA E DE COMPUTAO


DEPARTAMENTO DE ENGENHARIA DE COMPUTAO E AUTOMAO INDUSTRIAL

Dissertao de Mestrado

Estudo de Cdigo de Barras por Anlise de


Imagens

Ricardo Correia Soares


Orientador: Prof. Dr. Roberto de Alencar Lotufo
DISSERTAO DE MESTRADO
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA ELTRICA E DE COMPUTAO
DEPARTAMENTO DE ENGENHARIA DE COMPUTAO E AUTOMAO INDUSTRIAL

Estudo de Cdigo de Barras por Anlise de


Imagens

Autor: Ricardo Correia Soares


Orientador: Prof. Dr. Roberto de Alencar Lotufo
Banca examinadora:
Prof. Dr. Roberto de Alencar Lotufo FEEC / UNICAMP
Prof. Dr. Clsio Luis Tozzi FEEC / UNICAMP
Prof. Dr. Jacques Facon PPGIA PUC / PUC - Paran

Dissertao submetida Faculdade de Engenharia Eltrica e


de Computao da Universidade Estadual de Campinas, para
preenchimento dos pr-requisitos parciais para obteno do
Ttulo de Mestre em Engenharia Eltrica. rea de
concentrao: Engenharia de Computao.

12 de novembro de 2001
FICHA CATALOGRFICA ELABORADA PELA
BIBLIOTECA DA REA DE ENGENHARIA - BAE - UNICAMP

Soares, Ricardo Correia


So11e Estudo de Cdigo de barras por anlise de imagens /
Ricardo Correia Soares.--Campinas, SP: [s.n.], 2001.

Orientador: Roberto de Alencar Lotufo.


Dissertao (mestrado) - Universidade Estadual de
Campinas, Faculdade de Engenharia Eltrica e de
Computao.

1. Cdigo de barras. 2. Processamento de imagens.


I. Lotufo, Roberto de Alencar. II. Universidade Estadual
de Campinas. Faculdade de Engenharia Eltrica e de
Computao. III. Ttulo.
iv

Resumo
Neste trabalho, descrevemos tcnicas para decodificao de Cdigos de Barras
unidimensionais (EAN, UPC e Code 39). A decodificao realizada atravs de Anlise de
Imagens e Reconhecimento de Padres. Inicialmente, imagens contendo algum dos cdigos
acima citados so adquiridas atravs de digitalizao por um leitor tico de mesa, que gera
imagens em 256 nveis de cinza. As tcnicas de Anlise de Imagens consistem em: estudo da
inclinao do eixo longitudinal de cada smbolo presente na imagem e binarizao da
imagem (transformao da imagem com 256 nveis de cinza em uma nova imagem contendo
apenas 2 nveis de cinza). O Processo de Reconhecimento de Padres envolve as etapas de
aquisio de atributos da imagem binarizada, classificao de padres de larguras e
decodificao da informao contida na distribuio de larguras das barras e espaos. Alm
da eficincia da metodologia que abordamos em casos comuns , onde as barras no sofreram
danos graves, observamos que ela tambm eficaz em alguns casos crticos, quando as
barras sofreram danos.

Abstract
In this work, we described techniques for decoding of Linear Barcodes (EAN,
UPC and Code 39). The decoding is accomplished through Images Analysis and Patterns
Recognition. Initially, images holding some of the codes mentioned above are acquired
through scanner reading, that generates images in 256 gray levels. The techniques of Images
Analysis consist in: study of the inclination of the longitudinal axis of each symbol that
appears in the image and image thresholding (transformation of the image with 256 gray
levels into a new image with only 2 gray levels). The Process of Pattern Recognition
involves the stages of acquisition of attributes of the image with 2 gray levels, classification
of patterns of widths and decoding of the information held in the widths distribution of bars
and spaces. Besides the methodology efficiency that we broached in common cases, in
which the bars didn't suffer serious damages, we observed that this is also effective in some
critical cases, when the bars suffered damages.
v

Agradecimentos

Ao Prof. Dr. Roberto de Alencar Lotufo, pela oportunidade de enaltecer meus


conhecimentos atravs de sua orientao sempre perspicaz ao longo deste trabalho.
Aos meus amados pais Renato e Bernadete e aos meus irmos Jos Renato e
Renan, pelo incessante apoio e incentivo em todos os caminhos que percorri.
minha querida tia Avani e ao meu tio Hugo, pelo essencial apoio no incio da
minha chegada cidade de Campinas.
Ao CNPq, pelo indispensvel apoio financeiro durante a realizao deste trabalho.
Ao Prof. Dr. Ariovaldo V. Garcia , Coordenador de Ps-Graduao da FEEC, e
ao Prof. Dr. Jos Cludio Geromel , Pr-Reitor de Ps-Graduao, pelo apoio ao agilizar o
processo burocrtico no final do curso.
Ao FAEP, pela importante concesso da bolsa auxlio-ponte.
Aos meus amigos do LCA, que sempre acrescentaram algo em minha vida
acadmica.
Aos profissionais da Biblioteca de Engenharia, especialmente Rose, pelo
importantssimo auxlio na busca por artigos cientficos.
Aos profissionais do CECOM, especialmente Dra. Fernanda, que administraram
de forma incomparvel a minha sade.
E a esta magnfica Universidade que a UNICAMP, que foi minha inesquecvel e
acolhedora casa ao longo do mestrado, disponibilizando tanta infra-estrutura, indispensvel
na nobre arte da Educao.
vi

Aos meus pais Renato e Bernadete


e aos meus irmos Jos Renato e Renan.
vii

Sumrio

RESUMO ................................................................ iv

AGRADECIMENTOS ................................................... v

SUMRIO .............................................................. vii

1 Introduo .............................................................. 1
1.1 Benefcios oferecidos pelos Cdigos de Barras ..................... 3
1.2 Estrutura ............................................................ 3
1.3 Processo de Leitura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Proposta do Trabalho ................................................ 5
1.5 Estrutura do Trabalho ................................................ 5

2 Conceitos Iniciais ...................................................... 7


2.1 Princpios de Codificao ........................................... 7
2.2 Pontos Crticos Considerados ........................................ 9
2.2.1 Sentido de Varredura ......................................... 9
2.3 Universal Product Code - UPC ....................................... 10
2.3.1 Definio .................................................... 11
2.3.2 Estrutura ..................................................... 12
2.3.3 Interpretao ................................................. 14
2.3.4 Decodificao ............................................... 14
2.3.4.1 Dgito de Verificao ................................ 16
2.4 European Article Numbering - EAN .................................. 17
2.4.1 Estrutura .................................................... 18
2.4.2 Interpretao ................................................ 19
2.4.3 Dgito Verificador ............................................ 21
viii

2.5 Code 39 (Cdigo 3 de 9) ............................................. 22


2.5.1 Definio .................................................. 22
2.5.2 Estrutura .................................................... 23
2.5.3 Decodificao ................................................ 24
2.5.4 Dgito de Verificao ......................................... 26
3 Processos para Decodificao ........................................... 29
3.1 Princpios de Anlise ................................................. 29
3.1.1 Enquadramento ............................................... 31
3.1.2 Ilustrao de interferncias .................................... 32
3.1.3 Rudos e Distores ............................................ 33
Espalhamento de Tinta ......................................... 33
3.1.4 Tcnicas de Binarizao Avaliadas ........................... 34
3.1.4.1 Threshold (Limiarizao) ........................... 34
Threshold de Otsu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.4.2 Operadores Diferenciais ............................ 38
Gradiente .................................................. 40
Laplaciano ................................................ 42
3.1.4.3 Deteco de Passagem Por Zeros . . . . . . . . . . . . . . . . . . . . 43
3.1.4.4 Segmentao por Watershed . . . . . . . . . . . . . . . . . . . . . . . . 44
3.1.5 Resultados Obtidos ........................................... 49

4 Descrio de Tcnicas Aplicadas ........................................ 51


4.1 Code 39 ............................................................. 51
Binarizao ............................................... 51
Rotulao .................................................. 52
Estimativa da Largura do elemento mais estreito ............. 53
Localizao do Campo de Padres ........................ 55
Verificao das Margens e Obteno de Medidas . . . . . . . . . . . . . 57
Classificao e Decodificao ............................ 57
ix

4.2 Cdigo UPC/EAN ................................................... 59


Processamentos Iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Extrao de uma Faixa de Padres ......................... 59
Distribuio de Larguras e
Extrao do Campo de Padres ......................... 61
Normalizao e Classificao .............................. 62

5 Pr-processamentos .................................................... 67
5.1 Anlise dimensional ................................................. 67
5.2 Etapas de Pr-Processamentos ........................................ 68
5.2.1 Captao de contornos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.2 Estimao da localizao do smbolo ........................... 69
5.2.3 Localizao Precisa do smbolo ................................ 70
5.2.4 Alinhamento do eixo Longitudinal .............................. 70

6 Verificao ............................................................. 73
6.1 Parmetros analisados na leitura ...................................... 73
6.1.1 Deteriorao do smbolo ........................................ 73
6.1.2 Espalhamento de Tinta ......................................... 74
6.1.3 Resoluo de Digitalizao ..................................... 76
6.1.4 Distoro das barras ............................................ 76
6.1.5 Tolerncia para margens de silncio ............................ 77

7 Experimentos .......................................................... 79
7.1 Exemplo 1 .......................................................... 79
7.2 Exemplo 2 .......................................................... 84
7.3 Exemplo 3 .......................................................... 86

8 Concluses ............................................................. 89

Referncias ............................................................. 91
x

Apndice A - Tabela de Bandeiras para o Cdigo EAN ................ 93

Apndice B - Algoritmos implementados ............................... 95


1

Captulo 1

Introduo

Com a crescente evoluo da Automao Comercial, a necessidade de mtodos de


aquisio de dados de forma rpida e confivel favoreceu o desenvolvimento de diversos
meios de automatizao, entre eles os Cdigos de Barras.
O Cdigo de Barras consiste em um smbolo composto de barras escuras paralelas
com espessuras variadas, impressas em uma superfcie mediante espaamentos determinados
por especificaes tcnicas padronizadas de cada tipo de cdigo. Sua principal funo a
aquisio de dados para gerenciamento de entrada automatizada de informaes em um
sistema computadorizado, onde um dispositivo de leitura (scanner1.1) realiza, atravs de um
processo tico, uma varredura sobre o Cdigo de Barras, capturando sinais mediante o
lanamento de um feixe luminoso e reflexo desta radiao por espaos em branco.
O leitor tico converte as informaes luminosas em dados digitais compatveis a
uma linguagem computacional, capaz de verificar a validao da simbologia (forma na qual
se codifica a informao nas barras e espaos do smbolo).
importante distinguir os conceitos de smbolo e simbologia que sero utilizados
ao longo deste trabalho. Simbologia a forma como so padronizadas as regras que
estabelecem quantidade e larguras das barras e espaamentos a fim de expressar uma
palavra-cdigo (informao codificada que ser interpretada por um banco de dados inerente
a um sistema computadorizado). Existem inmeras simbologias atualmente utilizadas
comercialmente; entre as mais populares destacam-se UPC (Universal Product Code), EAN
(European Article Numbering) e Code 39 (Cdigo com 3 elementos largos entre os 9 que o

1.1
Dispositivo que, ligado a um computador, transforma informaes visuais em dados digitais.
2

compem), que sero analisados nos prximos captulos. Smbolo a representao grfica
impressa do tipo de simbologia adotada, ou seja, o Cdigo de Barras propriamente dito.
Inicialmente, os Cdigos de Barras foram destinados codificao de
licenciamento de veculos, onde o nmero de srie do veculo era codificado atravs de
barras pretas e brancas. Ao longo do tempo, surgiu a necessidade de um aumento na
capacidade de armazenamento de informaes.
Em 1984, a Automotive Industry Action Group (AIAG) padronizou um cdigo
que consistia em um empilhamento de quatro estruturas do Cdigo 39, j existente naquele
momento. Este novo cdigo foi destinado identificao de estoques de mercadorias a
serem transportadas.
Atualmente, existem inmeras simbologias de Cdigos de Barras, destinadas a
diversas reas. Cada uma possui caractersticas prprias de regras para codificao de cada
caractere (letras, nmeros ou caracteres especiais), assim como requisitos de impresso,
decodificao, verificao de erros, entre outros. Tais caractersticas e requisitos so
definidos atravs da padronizao de especificaes. Existem diversas organizaes
responsveis pelo controle da padronizao de especificaes dos Cdigos de Barras
geralmente utilizados hoje, entre elas destacam-se: ANSI (American National Standards
Institute), HIBC (Health Industry Business Communications Council), AIAG (Automotive
Industry Action Group), AIM1.2. (Automatic Identification Manufacturers), UCC (Uniform
Code Council).
Basicamente, as simbologias dos cdigos diferem-se umas das outras segundo
aspectos de representao visual e dos tipos de dados capazes de serem armazenados, alm
da diferena de capacidade mxima de armazenamento. Esses aspectos indicam a viabilidade
ou no do uso de cada uma das simbologias a uma determinada aplicao.

1.2
www.aimglobal.org
3

1.1 Benefcios oferecidos pelos Cdigos de Barras

Melhoria na eficincia operacional - Uma vez que os Cdigos de Barras


oferecem um armazenamento de informao mais rpido e seguro, a
velocidade de operao favorecida .

Reduo de Tempo - Dependendo da aplicao, a reduo de tempo gasto pode


ser um fator importante. O registro automtico de informaes de lotes de
mercadorias transportadas e dos preos de produtos em caixas de
supermercados so exemplos deste benefcio.

Reduo de Erros - A incidncia de erros em uma operao pode ser uma


fonte potencial a um aumento de custos e problemas. Existem diversas
situaes que expressam bem a importncia da exatido dos dados a serem
analisados, umas delas esto presentes na rea farmacutica e de anlise em
bancos de sangue.

Reduo de Custos - Os equipamentos exigidos em um sistema de codificao


por meio dos Cdigos de Barras so de baixo custo, alm disso, a
confiabilidade e rapidez de leitura favorece a uma reduo de gastos.

Benefcios ao usurio - os equipamentos de leitura e impresso so flexveis e


fceis de se instalar. Alm disso, o usurio pode padronizar suas prprias
etiquetas, interagindo o usurio s suas necessidades.

1.2 Estrutura

A estrutura do Cdigo de Barras mostrada na Figura 1.1.


4

Figura 1.1

Margens Inicial e Final de Silncio (ou Zonas de Silncio) - so espaos


geralmente brancos, onde nada impresso. Estas margens devem possuir dez vezes a largura
da barra mais estreita do cdigo.

Smbolo - consiste na rea composta de barras verticais paralelas espaadas de


forma variada.

Caractere de Incio - indica o incio do dado. Este caractere varia conforme o


sistema de codificao.

Dados - rea destinada ao contedo de informaes a serem codificadas.

Dgito Verificador certifica a ocorrncia erro na leitura atravs de um dgito de


dado interpretado.

Caractere de Parada - indica o trmino do dado.


5

1.3 Processo de Leitura

Cada caractere codificado representado por um padro de barras largas e


estreitas. O leitor tico usa um foto-sensor (dispositivo que converte energia luminosa em
energia eltrica) para converter o Cdigo de Barras em um sinal eltrico que ser
transformado em bits medida em que percorre o cdigo, calculando a relao entre as
larguras de barras e espaos. Dessa forma, ocorre uma traduo dos diferentes padres
impressos em caracteres inteligveis a um sistema computadorizado.
A codificao pode ser feita por Largura de Mdulo, onde o valor lgico "zero"
representado por barras estreitas e o valor lgico "um" representado por barras largas ou
por Anlise de Reflexo, onde as barras brancas (refletivas) indicam o valor lgico "zero" e
as pretas (no-refletivas) representam o valor lgico "um".
Os caracteres de incio e de parada do cdigo, juntamente com o dgito
verificador, informam ao leitor tico o sentido de varredura do feixe luminoso.
O dgito verificador calculado no instante da impresso do cdigo. Ao longo da
varredura do leitor tico sobre o cdigo, uma checagem de soma calculada e deve coincidir
com aquela impressa no smbolo. Caso isto no ocorra, o leitor tico interpreta esta
discrepncia como um erro de leitura e realiza uma nova varredura.

1.4 Proposta do trabalho

Neste trabalho pretendemos, atravs de tcnicas de anlise de imagens e


reconhecimento de padres, decodificar uma simbologia apresentada em uma imagem,
analisando aspectos de rotao, binarizao, decodificao e direcionamento de varredura.

1.5 Estrutura do trabalho

No captulo seguinte, apresentamos conceitos essenciais para uma viso geral de


estrutura das simbologias que sero estudadas, incluindo algumas teorias aplicadas para
decodificao.
6

Tcnicas de Processamento de Imagens e anlises de procedimentos para


decodificao esto presentes nos captulos 3, 4 e 5.
O captulo 6 apresenta Anlises de Verificao de Qualidade das simbologias, e
finalizando o trabalho, o captulo 6 apresenta as concluses obtidas.
Nossas concluses esto presentes no captulo 7.
Finalizamos o trabalho com os apndices A, B e C onde so apresentados a Tabela
de Bandeiras do Cdigo EAN, os algoritmos implementados em linguagem MATLAB e
resultados alcanados atravs de imagens de entrada e sada.
7

Captulo 2

Conceitos Iniciais

Apresentamos neste captulo, diversos conceitos que envolvem a descrio dos


Cdigos de Barras estudados e mtodos para identificao precisa de suas medidas. Sero
apresentados tambm breves histricos das simbologias estudadas, assim como as tabelas de
especificaes que regem cada uma delas.

2.1 Princpios de Codificao

Conforme indicado no captulo anterior, existem basicamente dois princpios de


codificao de informao em uma dimenso. Uma delas consiste na subdiviso de
intervalos em mdulos (menor unidade da medida de largura de uma barra ou espaamento )
que assumem valores 1 ou 0, onde os mdulos com valores 1 so expressos em
forma impressa de barra escura (doravante denominada barra), e aqueles com valores 0
so interpretados como espaos entre as barras escuras; caracterizando a Codificao por
Anlise de Reflexo, tambm denominada Cdigo Delta [3]. Cada barra ou espao pode
conter um ou mais mdulos. A outra metodologia, denominada Codificao por Largura de
Mdulo assume cada barra ou espao como um bit, impondo valor lgico 0 para o
elemento (seja barra ou espao) estreito, e valor lgico 1 para o elemento largo. Este tipo
de codificao tambm denominado Cdigo Binrio [4], uma vez que so usadas apenas
duas larguras pr-definidas, geralmente na proporo 3:1.
8

Representao da Codificao por


Anlise de Reflexo

1 0 1 1 0 Cada mdulo recebe um valor lgico

Mdulo

Figura 2.1.a

1 0 1 1 0
Representao da
Codificao por Largura
de Mdulo

Cada elemento (barra ou espao)


recebe um valor lgico
Mdulo

Figura 2.1.b

2.1
Analisando a figura 2.1.a, observamos que para codificar a string 10110, pelo
mtodo de codificao por reflexo, so necessrios cinco mdulos, enquanto que para o
mtodo de anlise de largura de mdulo, so necessrios onze mdulos se a proporo de um
elemento estreito para um largo for 1:3.

2.1
Seqncia de caracteres alfanumricos ou palavras consecutivas que so manipuladas e tratadas como uma
unidade pelo computador
9

2.2 Pontos Crticos Considerados

Na anlise dos Cdigos de Barras, um dos pontos mais crticos consiste no


problema de interao entre barras impressas, geralmente ocasionado pelo Efeito de
Espalhamento de Tinta (seo 6.1.2 ). Este problema impede a delimitao precisa entre
duas barras, gerando erros de decodificao ou impedindo a decodificao.
Em alguns casos, as larguras das barras so calculadas atravs da deteco de
bordas [5], determinando-se assim a fronteira entre barras e espaos. Entretanto, devido ao
problema de espalhamento de tinta, esta deteco de bordas muitas vezes gera delimitaes
incorretas.
Existem mtodos[6] que resistem aos processos de borramento; necessitando
primeiramente da estimao de desvio padro de um ncleo (mscara de filtragem) de
borramento mnimo na imagem da forma de onda capturada. Em seguida,
reconhecimentos estatsticos de padro so usados para classificao dos picos encontrados
na forma de onda. Esses mtodos fogem do escopo deste trabalho.

2.2.1 Sentido de Varredura

Durante o processo de leitura, necessrio definir o sentido de varredura do leitor


tico, ou seja, o ponto de partida e parada da anlise de larguras dos elementos no smbolo
impresso. Isso necessrio, pois a princpio, o real posicionamento do smbolo no
conhecido. Eventualmente o smbolo pode estar sendo lido do seu ponto final para o inicial.
Na nossa anlise, antes da varredura, o eixo longitudinal do smbolo dever estar
na posio horizontal, mediante algum processo de alinhamento, que no nosso trabalho ser
por meio da anlise dos ngulos do vetor gradiente, que ser melhor detalhada no captulo
seguinte.
10

Para determinar o sentido de varredura, existem alguns caminhos que podem ser
seguidos. Um deles baseia-se no fato da existncia de palavras-cdigo especiais de comeo
e fim, presentes no incio e no final de alguns smbolos.
Um outro caminho dado pela anlise do dgito verificador, que, ao ser
determinado, pode certificar se o smbolo foi lido do fim ao incio.
Para um cdigo binrio (mencionado anteriormente) por exemplo, com trs
mdulos compostos por uma barra e um espao, teremos apenas as opes mostradas na
figura 2.2 .

opo 1 opo 2
Pares de Palavras-cdigo
Espelhos

opo 3 opo 4

Figura 2.2

Dessa forma, se as palavras de comeo e fim em um smbolo forem um dos pares


acima, no ser possvel determinar qual o sentido de varredura.
O Cdigo UPC usa padres de comeo e fim que no esto presentes na sua tabela
de codificao, ao contrrio do Cdigo 39 que usa uma nica palavra-cdigo de comeo e
fim que est presente na sua tabela de codificao.

2.3 Universal Product Code UPC

Considerado a primeira simbologia robusta adotada comercialmente, o UPC foi


desenvolvido por George J. Laurer. Em abril de 1973, a indstria americana de mercadorias
e produtos estabeleceu formalmente o UPC como o Cdigo de Barras padro de
11

identificao para diversos produtos. Mais tarde, em dezembro de 1976, uma outra
simbologia semelhante ao UPC foi adotada devido a interesses de outros pases, sendo
denominada EAN (European Article Numbering). O Uniform Code Council2.2 (UCC)
regulamenta a adoo do UPC em produtos comercializados ou no.
Atualmente existem cinco verses do UPC:

UPC-A verso mais adotada comercialmente e que ser descrita e analisada neste
trabalho;
UPC-E segunda verso mais utilizada, com supresso de dgitos zeros, e
destinada a produtos com espao til de impresso reduzido;
UPC-B verso desenvolvida para a indstria farmacutica, composta de 11
dgitos e sem dgito de checagem de erro;
UPC-C composta de 12 dgitos, esta verso destinada a viabilizar
compatibilidades de leituras entre indstrias;
UPC-D verso de comprimento varivel, composto de no mnimo 12 dgitos.

2.3.1 Definio

Como dito anteriormente, neste trabalho abordaremos a verso A do cdigo UPC,


doravante denominada apenas UPC, a fim de simplificao conceitual.
Cada palavra-cdigo desta simbologia formada por duas barras e dois
espaamentos, ocupando um total de sete mdulos.
O UPC uma simbologia numrica (codifica apenas dgitos decimais) que utiliza
Codificao por Anlise de Reflexo.
A largura mais estreita normalizada2.3, tornando-se valor padro de um mdulo.
Vale ressaltar que, para cada cdigo impresso, um valor especfico de medida de um mdulo

2.2
Uniform Code Council, Inc., Princeton Pike Corporate Center, 1009 Lenox Dr.,Suite 202, Lawrenceville,
New Jersey 08648
2.3
Normalizar: adoo de um valor de medida como referncia unitria para mensurar outros valores.
12

adotado, uma vez que os Cdigos de Barras so considerados sistemas abertos de


codificao, ou seja, suas dimenses so variveis.

2.3.2 Estrutura

Composto de 12 dgitos decimais, o Cdigo UPC possui uma estrutura


caracterizada pela presena de trs padres que subdividem o smbolo em dois campos
(esquerdo e direito). Os padres laterais so definidos pela seqncia 101 e o padro de guia
central pela seqncia 01010. A figura 2.3 ilustra com detalhes a estrutura desta simbologia.

  

A Dgito referente
identificao do fabricante ( 0 )

B Cinco dgitos do campo


esquerdo do cdigo
(12345)

C Cinco dgitos do campo


direito do cdigo
(67890)

D Dgito verificador ( 5 )

0 12345 67890 5

   
 (*)   19
/ :;9,<=1/ 91

!"#%$ &+' ,-%.0/1
23 4#54#' 564#7 ' 8 >
?@BA? CEDF!G6HIG6J

Figura 2.3

Cada dgito decimal pode ser expresso por meio de duas palavras-cdigo,
dependendo do posicionamento do dgito no smbolo (representao grfica). Se um dgito
estiver no lado esquerdo do padro de guia central, a palavra-cdigo que o representa ter
13

paridade mpar, ou seja, a soma dos mdulos ocupados pelas barras resulta em um nmero
mpar; caso o dgito esteja localizado no lado direito, a palavra-cdigo ter paridade par
(soma dos mdulos das barras resulta em nmero par). A Tabela I mostra o conjunto de
caracteres do cdigo UPC e suas representaes.
Uma vez que necessrio o reconhecimento do sentido de varredura do leitor
tico, no possvel incluir palavras-cdigo que sejam espelho uma da outra, ou seja,
opostamente idnticas, pois isso geraria inconsistncias na decodificao.
Pela Tabela I, verificamos que as palavras-cdigo presentes no campo esquerdo do
smbolo iniciam com um espaamento (bit 0), enquanto que aquelas presentes no campo
direito iniciam com uma barra (bit 1). Esta caracterstica, juntamente com a informao de
paridade e o padro de guia central so utilizados para a determinao do sentido de
varredura, a fim de resultar em uma decodificao correta e vlida. As larguras dos
elementos so definidas pelos valores c1,c2,c3 e c4 na tabela. Entretanto, o efeito de
espalhamento de tinta dificulta a determinao correta destas medidas de larguras. Assim, a
forma mais utilizada consiste na medida de distncia entre duas barras (t1) e entre dois
espaamentos (t2), que no so vulnerveis ao efeito de espalhamento. Por definio:
t1(mpar)= c3 + c4 ; t1(par)= c1 + c2 e t2=c2 + c3 .

Especificao UPC [8]

Padro de Distncias
Esquerda Direita
Dgito Largura (mpar) (par)
(MPAR) (PAR)
c 1,c 2,c 3,c 4 t 1,t 2 t 1,t 2
0 0001101 1110010 3,2,1,1 2,3 5,3
1 0011001 1100110 2,2,2,1 3,4 4,4
2 0010011 1101100 2,1,2,2 4,3 3,3
3 0111101 1000010 1,4,1,1 2,5 5,5
4 0100011 1011100 1,1,3,2 5,4 2,4
5 0110001 1001110 1,2,3,1 4,5 3,5
6 0101111 1010000 1,1,1,4 5,2 2,2
7 0111011 1000100 1,3,1,2 3,4 4,4
8 0110111 1001000 1,2,1,3 4,3 3,3
9 0001011 1110100 3,1,1,2 3,2 4,2
Tabela I
14

2.3.3 Interpreta o

No uso comercial, o primeiro dgito presente no cdigo UPC um dgito de


sistema, destinado a compatibilizao dos cdigos numricos existentes antes do UPC,
podendo tomar os seguintes valores:
0 cdigos UPC em geral;
2 para produtos de peso varivel;
3 cdigo americano de indstrias farmacuticas;
4 codificao personalizada de uso interno em estabelecimentos comerciais;
5 codificao de cupons.

Do segundo ao sexto dgito temos a identidade da empresa detentora do produto.


Cada empresa possui uma identificao prpria. A seqncia composta do stimo ao dcimo
primeiro dgito identifica o produto de cada fabricante. Cada item de uma determinada
empresa possui um cdigo especfico. Por fim, o ltimo dgito ( dgito verificador ),
verifica a validade do cdigo, e ser melhor explicado no item seguinte.

2.3.4 Decodifica o

No momento da decodificao de um Cdigo de Barras, um efeito comum de


espalhamento de tinta provocado durante o processo de impresso do Cdigo de Barras
resulta numa problemtica que pode ser um fator crtico dependendo da intensidade deste
efeito. Se o espalhamento verificado no for de grande intensidade, Cdigos de Barras
binrios (Cdigo 39, por exemplo) podero ser decodificados de forma satisfatria, uma vez
que neste tipo e simbologia existem apenas barras largas e estreitas. As larguras impressas
diferem entre si na proporo de 1:3 mdulos, existindo dessa forma, uma tolerncia com
relao a um possvel espalhamento de tinta.
Ao contrrio dos Cdigos Binrios, os cdigos UPC/EAN so extremamente
vulnerveis ao efeito de espalhamento de tinta, uma vez que suas palavras-cdigo possuem
15

elementos com larguras diferindo-se muitas vezes por apenas um mdulo. Este fato faz com
que alguns dgitos sejam decodificados de forma incorreta. Existem pares especiais de
dgitos que so confundidos entre si, pois possuem caractersticas semelhantes que
favorecem a uma decodificao incorreta, embora vlida. Esses pares so (1 e 7) e (2 e 8). A
Figura 2.4 mostra uma exemplificao do efeito de espalhamento entre esses pares especiais
de dgitos.
Conforme ilustra a Figura 2.4, assim como os dgitos 1 e 7 podem ser confundidos
devido ao problema de espalhamento de tinta, os dgitos 2 e 8 tambm so suscetveis a esse
tipo de equvoco. Dessa forma, uma tcnica destinada a solucionar este tipo de problema
consiste na adoo de outros parmetros alm dos coeficientes c1,c2, c3 e c4. Esta tcnica
baseia-se nas distncias entre duas barras (t1) e espaamentos (t2) subseqentes entre si.
O dgito verificador destinado a impedir este tipo de decodificao incorreta
porm vlida.

Representao em grande escala do


dgito 1 (para o campo esquerdo do
smbolo), corretamente expresso.

1K (2221)

2 2 2 1

Resultado do efeito de
espalhamento de tinta no sentido da
direita para a esquerda, ocorrido na
representao acima.
Este efeito resultou em uma
palavra-cdigo vlida (dgito 7),
embora incorretamente
interpretada.
1 3 1 2
7K (1312)

Figura 2.4
16

2.3.4.1 Dgito de verifica o

Sendo calculado mediante os onze primeiros dgitos, o dgito de checagem


encontra-se no final do cdigo UPC. Como os onze primeiros dgitos so estabelecidos de
forma variada (sob as normas estabelecidas pelo UCC), o dgito verificador uma forma de
verificar se realmente o leitor identificou de forma correta esses dgitos.
Para o clculo do dgito verificador, o algoritmo a seguir deve ser usado:

1. Enumerar os dgitos no sentido da direita para a esquerda. O dgito verificador tomar a


posio 1;
2. Somar os valores dos dgitos presentes nas posies pares;
3. Multiplicar o valor da soma encontrada no passo anterior por 3;
4. Somar os valores dos dgitos presentes nas posies mpares, iniciando-se pelo dgito
presente na posio 3;
5. Somar os valores encontrados nos passos 3 e 4;
6. Calcular o menor valor que somado ao resultado do passo 5 resulta em um nmero
mltiplo de 10. Este valor ser o valor do dgito verificador.

Como exemplo de clculo do dgito verificador, consideremos o smbolo presente


na Figura 2.3.

Passo 1:
1 = Dgito verificador que a princpio desconhecido;
2 = Dgito 0;
3 = Dgito 9;
4 = Dgito 8;
5 = Dgito 7;
0 12345 67890 5
6 = Dgito 6;
7 = Dgito 5;
Sentido de anlise
17

8 = Dgito 4;
9 = Dgito 3;
10 = Dgito 2;
11 = Dgito 1;
12 = Dgito 0;

Passo 2:
Soma dos dgitos nas posies pares: 0 + 8 + 6 + 4 + 2 + 0 = 20

Passo 3:
Multiplicando o valor anterior por 3: 20 3 = 60

Passo 4:
Soma dos dgitos nas posies mpares (iniciando-se pelo terceiro dgito):
9 + 7 + 5 + 3 + 1 = 25
Passo 5:
Soma dos valores encontrados nos passos 3 e 4: 60 + 25 = 85

Passo 6:
O menor nmero que, somado resultado do passo anterior, resulta em um nmero mltiplo
de 10 5, ou seja: 85 + 5 = 100. L ( Dgito verificador: 5 )

2.4 European Article Numbering - EAN

Devido ao grande sucesso alcanado pelo cdigo UPC nos Estados Unidos, surgiu
nos pases europeus o interesse em desenvolver um outro sistema de Cdigos de Barras que
mais tarde seria denominado European Article Numbering (EAN). Em 1974 uma comisso
de 12 pases foi formada para estudar e desenvolver este novo sistema de codificao
destinado a produtos industriais e comerciais. A adoo desta nova simbologia iniciou em
18

dezembro de 1976, e em 1977 foi criada a Associao Europia de Numerao de Artigos


(European Article Numbering Association) responsvel pelas diretrizes ligadas
implantao da simbologia. Mais tarde, em 1981, a EAN tornou-se a Associao
Internacional de Numerao de Artigos, sediada em Bruxelas, entretanto a sigla EAN foi
conservada.

2.4.1 Estrutura

Os cdigos UPC e EAN possuem a mesma estrutura de codificao, sendo


compatveis entre si, embora sejam utilizados em regies distintas no mundo. Basicamente,
estes cdigos diferem entre si pelo nmero de dgitos. Enquanto o UPC possui 12 dgitos de
codificao, o EAN possui um dgito a mais, entretanto o nmero de barras presentes em
ambos o mesmo. Na realidade, o dcimo terceiro dgito adicional do cdigo EAN no
apresentado na forma de padro de barras e espaos no smbolo; durante o processo de
decodificao, ele indiretamente calculado com o auxlio de uma Tabela Auxiliar de
Paridade (Figura 2.5) e dos seis primeiros conjuntos de padres apresentados,
correspondentes aos seis primeiros dgitos codificados do campo esquerdo, que seguem
paridades variadas, regidas pela Tabela Auxiliar de Paridade. Esta tabela determina a
utilizao de outras duas tabelas de padres (A ou B) para cada dgito do campo esquerdo.
Os dgitos do campo direito seguem a mesma tabela do cdigo UPC, definida como tabela
C.
Dessa forma, podemos dizer que o cdigo UPC uma verso do cdigo EAN,
pois atravs da Tabela Auxiliar de Paridade, vemos que, quando o dcimo terceiro dgito
zero, a paridade de todos os dgitos seguem a tabela do cdigo UPC (veja Tabela I), e assim
o cdigo EAN apresenta-se como UPC.
Conforme sejam as larguras das barras e espaos referentes aos seis primeiros
dgitos do smbolo, uma linha da tabela adicional ser escolhida, determinado o valor do
dcimo terceiro dgito, que utilizado no clculo do dgito verificador. A figura 2.6 ilustra o
19

processo de determinao do dcimo terceiro dgito, que visualmente impresso como o


primeiro dgito do cdigo EAN.
Observando o exemplo da Figura 2.6, vemos que neste caso, o 13 dgito nove, e
portanto a seqncia de paridade dos seis primeiros dgitos (788534) dada pela alternncia
das tabelas A,B,B,A,B,A, conforme a ltima linha da Tabela auxiliar de Paridade. Dessa
forma, os dgitos 7,5 e 4 sero representados na forma de padres conforme a Tabela A,
enquanto que os dois dgitos 8 e o dgito 3 sero representados mediante padres presentes
na Tabela B.
De fato, no momento de gerao de um cdigo EAN, compe-se o dado com 12
dgitos (seis dgitos do campo esquerdo e seis do campo direito) e calcula-se o dcimo
terceiro dgito (tambm denominado dgito adicional) baseado nos doze dgitos iniciais.

2.4.2 Interpreta o

Como o cdigo EAN destinado identificao de diversos produtos em diversas


partes do mundo, foi estabelecida uma identificao atravs dos 3 ou 2 primeiros dgitos do
cdigo, sendo denominada bandeira. Atravs desta identificao, cada pas que utiliza a
identificao de produtos pelo Cdigo de Barras EAN possui um rgo responsvel pelo
cadastramento de cada produto de uma determinada empresa/fabricante. Para o Brasil, a
representao de todos os produtos cadastrados inicia com os dgitos 789 e o rgo
responsvel pelo registro dos produtos a ABAC (Associao Brasileira de Automao
Comercial). O Apndice A mostra a relao das bandeiras de diversos pases que adotam a
representao do cdigo EAN em seus produtos, assim como os casos extras de
identificao.
Os dgitos do campo esquerdo que no fazem parte da bandeira do smbolo
identificam a empresa detentora do produto, e os dgitos do campo direito so atribudos
identificao do produto pertencente empresa.
Existem dois tipos de identificaes que adotam o padro EAN e largamente
utilizados atualmente: o ISSN (International Standard Serial Number) destinado a peridicos
20

Tabela Auxiliar de Paridade

Seqncia de Tabelas Utilizadas para cada padro do campo esquerdo


13 Dgito
1 padro 2 padro 3 padro 4 padro 5 padro 6 padro
0 A A A A A A Cdigo
1 A A B A B B UPC
2 A A B B A B
3 A A B B B A
4 A B A A B B
5 A B B A A B
6 A B B B A A
7 A B A B A B
8 A B A B B A
9 A B B A B A

Campo esquerdo Campo Direito


Dgito
TABELA A TABELA B TABELA C
0 0001101 0100111 1110010
1 0011001 0110011 1100110
2 0010011 0011011 1101100
3 0111101 0100001 1000010
4 0100011 0011101 1011100
5 0110001 0111001 1001110
6 0101111 0000101 1010000
7 0111011 0010001 1000100
8 0110111 0001001 1001000
9 0001011 0010111 1110100

Figura 2.5 - Tabelas do cdigo EAN

Padres:
0111011 0001001 0001001 0110001 0100001 0100011

7(A) 8(B) 8(B) 5(A) 3(B) 4(A)

Seqncia de Tabelas para os 6 primeiros dgitos:

ABBABA M 13 dgito = 9
Dgito
13 dgito Verificado
r
Figura 2.6 Clculo do 13 dgito para um cdigo EAN
21

(revistas, jornais, anurios etc.) e o ISBN (International Standard Book Number) destinado
identificao de livros. A representao do ISBN em EAN denominada Bookland EAN.
Para converter o cdigo ISBN para o Bookland EAN, inicialmente coloca-se o
prefixo (bandeira) 978. Em seguida so colocados os nove primeiros dgitos do cdigo
ISBN, e por fim o dgito de verificao da simbologia EAN. O dgito de verificao presente
no cdigo ISBN suprimido. Na maioria dos casos, os dgitos de verificao do ISBN e
EAN so distintos, mas eventualmente podem coincidir.

Atualmente, o Bookland EAN composto por dois Cdigos de Barras dispostos


lado a lado. O cdigo maior, no lado esquerdo o EAN derivado do ISBN. O menor, situado
direita o conjunto de padres que representam 5 dgitos onde diversas informaes
podem ser codificadas. Freqentemente, estes dgitos representam o preo da publicao. A
Figura 2.7 mostra a representao de um cdigo ISBN sob a simbologia EAN.

Figura 2.7 Estrutura da simbologia Bookland EAN

2.4.3 Dgito Verificador

O processo para o clculo do dgito verificador no cdigo EAN idntico quele


mostrado para o cdigo UPC. A nica diferena consiste no acrscimo de um dgito (13
dgito), que no cdigo UPC poderia ser considerado zero. Dessa forma, o algoritmo
22

explicado na seo 2.4.4.1 vlido para o cdigo EAN. A Figura 2.8 ilustra um exemplo de
clculo do dgito verificador.

POSIO 13 12 11 10 9 8 7 6 5 4 3 2 1
CDIGO 4 0 0 9 9 9 3 1 3 4 1 3 ?

PARES 0 + 9 + 9 + 1 + 4 + 3 = 26
MPARES 4 + 0 + 9 + 3 + 3 + 1 = 20

26 3 = 78
78 + 20 = 98 N 98 + 2 = 100 N Dgito Verificador=2

Figura 2.7 Clculo do Dgito Verificador para o cdigo EAN

2.5 Code 39 ( Cdigo 3 de 9 )

Esta simbologia surgiu em 1975, adotada pelo Departamento de Defesa dos


Estados Unidos, que oficializou o Cdigo 39 para todos os suprimentos, mediante a Norma
de Padronizao Militar 1189, em 1982. Atualmente esta simbologia adotada em diversos
pases nas reas de servios hospitalares, transportes areos, bibliotecas, entre outras.

2.5.1 Defini o

O Cdigo 39 um cdigo binrio alfanumrico capaz de codificar 44 caracteres


(26 letras, 10 algarismos numricos, 1 caractere de espaamento, e 7 caracteres de smbolos).
Um cdigo binrio possui elementos com apenas duas larguras possveis para expressar os
valores lgicos 0 e 1, ou seja, para uma barra ou espaamento, somente so possveis
espessuras largas (valor lgico 1) ou estreitas (valor lgico 0).
23

2.5.2 Estrutura

O Cdigo 39 constitudo por palavras-cdigo que possuem 9 elementos (barras e


espaamentos) dos quais 3 deles so largos. Esta estrutura justifica o nome da simbologia.
Cada palavra-cdigo que expressa um caractere possui cinco barras e quatro
espaamentos. Existe um espaamento intercaractere na concatenao das palavras cdigo,
caracterizando esta simbologia como discreta. A largura do espaamento intercaractere
deve ser aproximadamente idntica largura de um elemento estreito. A princpio, no h
um tamanho fixo para a representao do Cdigo 39, ou seja, possvel codificar quantos
caracteres forem necessrios.
Esta simbologia usa o caractere asterisco (*) como padro de incio e fim do
smbolo impresso. A Tabela II mostra o conjunto de padres para cada um dos 44 caracteres
possveis de codificao e a Figura 2.8 ilustra a estrutura de um Cdigo 39.

Caractere Padro Barras Espaos Caractere Padro Barras Espaos

ESPAO

Tabela II
24

Caractere de
Caracteres de Verificao
dados (opcional)

Padro de Incio Padro de fim


(*) (*)
Estrutura do Cdigo 39
Figura 2.8 Estrutura do Cdigo 39

Como ilustrado na Figura 2.8, aps os padres referentes codificao dos dados,
existe a possibilidade da adoo de um padro destinado a um caractere de verificao. Alm
disso, conforme mencionado no Captulo 1, existe uma margem de silncio presente nas
laterais do smbolo, que devem ser obedecidas para evitar erros de leitura pelo dispositivo
tico.

2.5.3 Decodifica o

A fim de habilitar o leitor tico a distinguir elementos largos e estreitos,


necessrio adotar uma razo de proporo. Mediante a resoluo adotada no processo de
impresso, a largura de um elemento largo dever ser no mnimo duas vezes a largura de um
elemento estreito. A proporo mais adequada 3:1. Deve-se seguir o critrio de
uniformidade, ou seja, os elementos do mesmo tipo devem possuir a mesma medida. Dessa
forma, a largura de uma barra estreita deve ser idntica largura de um espaamento
estreito, e vice-versa.
No momento da leitura, os padres de incio e fim do smbolo, definidos pelo
caractere asterisco (*), indicam o sentido da varredura do leitor tico, uma vez que as
leituras deste padro em sentidos opostos geram resultados distintos. As Figuras 2.9.a e
2.9.b ilustram como o sentido de varredura determinado atravs dos padres laterais.
25

* C MP S 2 0 0 1 *
sZt\u^v`wbxSydxWzg{hzS|I|jtkxm}n|z

Seqncia do primeiro asterisco


encontrado na leitura da direita
para a esquerda do cdigo :
oUpRoqoTpUo promo
001010010

Figura 2.9 b

* C MP S 2 0 0 1 *
XZY\[^]`_baScdaWegfheSiIijYkamlnie

Seqncia do primeiro asterisco


encontrado na leitura da
esquerda para a direita do
OQPROSOTPUO PVOWO
cdigo : 0 1 0 0 1 0 1 0 0

Figura 2.9 a
A anlise das Figuras 2.9.a e 2.9 b mostra como o leitor tico pode iniciar a leitura
26

do smbolo impresso, e como o padro asterisco interpretado conforme seja o sentido da


varredura. Se o padro de incio de leitura resultar em uma seqncia 0 1 0 0 1 0 1 0 0, o
leitor tico estar realizando uma leitura no sentido da esquerda para a direita do cdigo,
caso a seqncia seja 0 0 1 0 1 0 0 1 0, o sentido da varredura ser da direita para a esquerda.

2.5.4 Dgito de verifica o

O Cdigo 39 uma simbologia que apresenta uma estrutura favorvel a uma auto-
checagem, pois durante o processo de leitura, possvel avaliar a quantidade de elementos,
assim como a quantidade necessria de elementos largos e estreitos para que o smbolo seja
consistente. Dessa forma, para a validao do smbolo necessrio que:
1. A quantidade total de elementos (barras e espaos) encontrados pelo leitor
seja um mltiplo de 9 ;
2. A quantidade total de elementos largos seja um mltiplo de 3 ;
3. A quantidade total de elementos estreitos seja um mltiplo de 6 ;
4. A quantidade total de barras encontradas seja um mltiplo de 5 ;
5. A quantidade total de espaos encontrados seja um mltiplo de 4 ;
6. E que as somas das quantidades encontradas nos itens (2 e 3) e (4 e 5) sejam
idnticas e ambas resultem na quantidade encontrada no item 1.

Embora a validao do smbolo impresso possa ser analisada por meio dos passos
citados acima, possvel a adoo de um caractere opcional de verificao, que certifica se a
decodificao foi realizada sem erros.

O clculo do caractere de verificao denominado verificao mdulo 43, e


segue o seguinte algoritmo:

1. Para cada caractere presente na tabela padro adota-se um valor


correspondente ao seu posicionamento. Os valores variam de zero at 42 em
ordem ascendente de posicionamento. O caractere correspondente ao asterisco,
27

por definio, no possui valor, dessa forma, o caractere referente ao espao


possui valor 38 e o caractere correspondente ao smbolo $ possui valor
39.
2. Em seguida, soma-se os valores de todos os caracteres decodificados antes do
caractere de verificao ;
3. Divide-se o resultado da soma anterior por 43 e verifica-se o resto;
4. Atravs da tabela padro, verifica-se qual o caractere correspondente ao resto
da diviso, obtido no passo anterior. Este ser o caractere verificador.

Vejamos como exemplo, o mesmo smbolo das figuras 2.9.a e 2.9.b., presente na
Figura 2.10 (a seguir), porm com a insero do dgito verificador:

Figura 2.10

* C MP S 2 0 0 1 4 *

Vemos que o contexto codificado foi:


C M P S 2 0 0 1

Somando os valores dos caracteres, teremos:


C M P S 2 0 0 1
12 + 22 + 25 + 28 + 2 + 0 + 0 + 1 = 90

90 43 = 2 resto 4 ~ O caractere de verificao o caractere que possui valor


4, ou seja, pela tabela, quem possui valor 4 o algarismo numrico 4.
28
29

Captulo 3

Processos para Decodifica o

Em Automao Industrial, os cdigos de barras so analisados e interpretados


segundo diversos dispositivos de leitura: desde leitores manuais de feixe pontual aos
dispositivos CCD (Charge Coupled Device).
Mediante a sua popularizao e vasta aplicao para fins de economia de tempo, o
cdigo de barra necessita de um sistema de anlise de imagens aprimorado, a fim de permitir
uma decodificao diretamente a partir de uma imagem construda pelo dispositivo tico.
Este sistema envolve conceitos de reconhecimento tico de padres, classificao de objetos
e controle de qualidade.
Para uma otimizao de decodificao, necessria a aplicao de algumas
tcnicas de processamento de imagens. No presente trabalho, o sistema de anlise consiste
em alguns conceitos de morfologia matemtica e estatstica.

3.1 Princpios de Anlise

A partir da informao de entrada, que ser uma imagem composta de um smbolo


em uma posio aleatria, uma anlise deve ser feita a fim de se obter uma srie de
informaes contidas nesta imagem.
Independentemente da simbologia alvo de decodificao, uma seqncia de passos
deve ser seguida. O passo inicial consiste na aquisio do smbolo pelo dispositivo tico.
Um pr-processamento aplicado na imagem inicial capturada, a fim de solucionar
30

problemas de enquadramento do smbolo. A partir da, a imagem, que inicialmente possui


256 nveis de cinza, convertida em uma imagem binria (nveis preto e branco).
Aps a binarizao, conforme a simbologia presente na imagem inicial,
necessria a obteno de medidas especficas para a classificao dos padres encontrados
na leitura do Cdigo de Barras.
De forma geral, a figura 3.1 ilustra a seqncia seguida pelo algoritmo de
decodificao.

AQUISIO DA DECODIFICAO
IMAGEM

PR- BINARIZAO MEDIDAS CLASSIFICAO


PROCESSAMENTO

Figura 3.1 Passos para decodificao

Consideraremos a aquisio da imagem de entrada por meio de um processo de


digitalizao do smbolo, utilizando um leitor tico comum de mesa com resoluo tica
mxima de 300x600 dpi. A imagem resultante da digitalizao do smbolo por este leitor
tico possui 256 nveis de cinza.
A fim de garantir uma decodificao confivel, necessrio adotar uma resoluo
mnima tolervel, que dada a partir da largura de elemento mais estreito do smbolo. Na
maioria das imagens analisadas, a resoluo mnima de um elemento estreito foi de 4 pixels.
31

importante verificar se as zonas de silncio nas laterais do smbolo esto sendo


respeitadas, assim como os padres de incio e fim, pois estas partes do smbolo so
responsveis pelo processo de controle da decodificao.

3.1.1 Enquadramento

No momento da captura do smbolo pelo leitor tico, um fator importante que


deve ser levado em considerao o posicionamento do eixo longitudinal do smbolo, ou
seja, o ngulo do eixo longitudinal com a horizontal.
O desalinhamento caracterstico do Cdigo de Barras com a horizontal, no
momento da digitalizao deve ser determinado e corrigido. Existem algumas tcnicas que
detectam o ngulo de desalinhamento. No nosso trabalho, utilizaremos a tcnica de
estimao do ngulo preponderante do vetor gradiente pelas mscaras de Sobel, e ser
abordada mais adiante.
O ngulo do eixo longitudinal com relao horizontal deve ser nulo ou muito
prximo de zero, a fim de evitar problemas de serrilhados da imagem digitalizada, que
podem provocar erros de decodificao. A Figura 3.2 ilustra o processo de enquadramento.

(a) (b)

Figura 3.2 Enquadramento de um smbolo capturado.


(a) Imagem de entrada; (b) Enquadramento almejado
32

3.1.2 Ilustra o de Interferncias

A correta decodificao de um Cdigo de Barras est diretamente relacionada


qualidade do sinal gerado pelo leitor tico. Como existem diversos fatores que influenciam a
leitura, o sinal de sada do leitor tico caracterizado por uma forma de onda muitas vezes
indecifrvel, pois esses fatores impedem uma reconstruo perfeita da forma de onda ideal,
que deveria ser um conjunto de pulsos retangulares, conforme ilustra a Figura 3.3.

Linha de Imagem Capturada


Leitura

Sinal de Sada Sinal Ideal

Figura 3.3

Observando o sinal de sada na Figura 3.3, vemos a presena acentuada de rudo


ao longo do contorno da curva de onda no sinal de sada. Dessa forma, necessrio aplicar
uma tcnica eficiente de deteco de barras e espaos para interpretar de forma correta a
forma de onda e decodificar a informao contida no smbolo.
33

O foco de nosso trabalho a classificao das barras e espaos por meio de uma
Limiarizao (Threshold Global) eficiente, que dever resultar em um smbolo representado
atravs de uma imagem binria (apenas dois nveis de cores: preto e branco) com uma
quantidade de barras plausvel ao tipo de simbologia presente na imagem.

3.1.3. Rudos e distores

Alm do rudo, os padres da simbologia aplicada so influenciados pela presena


de distores na superfcie de impresso ou at mesmo no equipamento de leitura.
importante salientar a diferena entre rudo e distoro. Ao varrer o cdigo mais
de uma vez, os efeitos de distoro iro se repetir, embora os efeitos de rudo provavelmente
sero distintos. Os efeitos de rudo significativos para a decodificao esto presentes entre
barras e espaos.

Espalhamento de Tinta

Conforme mencionado no captulo 2, o espalhamento de tinta o efeito de


distoro mais comum nos smbolos impressos.
Existem dois processos de impresso dos Cdigos de Barras: um deles realizado
conforme critrios estabelecidos pelo usurio e um outro sob critrios de qualidade pr-
definidos. Geralmente, no processo de impresso sob critrios do usurio, a qualidade da
impresso baixa, e portanto o efeito de espalhamento de tinta bastante verificado.
Entretanto, na impresso sob critrios pr-definidos, o efeito de espalhamento de tinta
praticamente no existe, uma vez que a impresso de alta qualidade, sendo exigido uma
preciso de 0,01 polegada, praticamente imperceptvel ao olho humano. O cdigo UPC o
mais vulnervel ao efeito de espalhamento de tinta, conforme j mencionamos.
34

3.1.4 Tcnicas de Binariza o Avaliadas

A deteco de barras e espaos est sujeita a erros conforme a metodologia


adotada para esse fim, a variao de contraste no momento da varredura, ou mesmo a
iluminao do ambiente. Com isso, deve-se monitorar mudanas de intensidade de luz
refletida durante a varredura, a fim de se estabelecer uma uniformidade das condies de
leitura. Ou seja, necessrio um sistema de controle de ganho automtico de luminosidade
no dispositivo de leitura.
As tcnicas de deteco de barras e espaos consistem em um processo de
binarizao, que transforma a imagem de 256 nveis adquirida pelo leitor tico em uma
nova imagem de 2 nveis de cinza (imagem binria: preto e branco), destacando as transies
entre barras e espaos, necessrias para a decodificao. Este processo pode ser realizado
atravs de alguns mtodos, tais como Limiarizao (Threshold global) e Anlise do vetor
Gradiente ou pela Transio por zeros da segunda derivada.
Em nosso trabalho, avaliamos trs mtodos de binarizao: Limiarizao de Otsu,
Classificao por Watershed e Deteco de passagens por zeros .

3.1.4.1 Threshold (Limiariza o )

O processo de Limiarizao ser a primeira, e talvez a mais crtica tcnica de


processamento de imagem aplicada antes do processo de decodificao do smbolo
impresso.
Limiarizao um mtodo de segmentao de imagens em nveis de cinza que
extrai do plano de fundo de uma imagem, objetos de interesse, partindo-se do princpio que o
objeto e o plano de fundo da imagem possam ser diferenciados entre si pelos seus nveis de
cinza. Atravs da escolha de um valor de limiar k*, situado entre os valores de cinza
preponderantes do objeto e do plano de fundo, os valores de nveis de cinza originais da
35

imagem podem ser transformados em uma forma binria, onde os pontos associados ao
objeto assumem valor um, e aqueles associados ao plano de fundo assumem valor zero.
A determinao de um valor para a aplicao de uma Limiarizao na imagem de
um Cdigo de Barras requer critrios bastante flexveis, pois existem muitos fatores que
influenciam de forma diversificada o sinal de sada no leitor tico. O problema de
espalhamento de tinta um desses fatores e que dificulta muito a eficincia da escolha do
valor de limiar, pois a intensidade do espalhamento de tinta no um dado exato.
A fim de se obter um resultado satisfatrio desta tcnica, necessrio um estudo
dos critrios de escolha para este valor, pois o valor k* ser responsvel pela distino
entre o smbolo do Cdigo de Barras (objeto de interesse) e o plano de fundo. No nosso
estudo, a tcnica de Limiarizao adotada foi aquela desenvolvida por Nobuyuki Otsu [9].

Threshold de Otsu

A tcnica de limiarizao de Otsu um mtodo automtico de segmentao de


imagens em nveis de cinza, usando dados estatsticos do histograma da imagem como base
para escolha de um valor de limiar eficaz.
Sejam os pixels3.1 de uma imagem representados por L nveis de cinza
[1,2,3,...,L]. O nmero de pixels presente na imagem com intensidade de cinza i denotado
por ni e o total de pixels presentes na imagem por N = n1 + n2 + n3+...+ nL . Normaliza-se o
histograma, acumulando-o como uma distribuio de probabilidade:
L
pi = ni / N , pi 0 , p
i =1
i = 1. (3.1)

Em seguida, dividimos os pixels em duas classes C0 e C1 (plano de fundo e


objetos) por meio de um valor de limiar k. A classe C0 indica os pixels com nveis em
[1,2,...,k] e C1 denota os pixels com nveis em [k+1, k+2,...L]. A probabilidade de ocorrncia
das classes C0 e C1 e suas mdias so dadas por:

3.1
Pixel: Contrao de Picture (Pix) Element. Menor elemento de uma imagem grfica.
36

k L
0 = Pr(C 0 ) = Pi = ( k ) 1 = Pr(C 1 ) = P i = 1 (k ) (3.2)
i =1 i = k +1

k k
0 = i Pr(i | C 0 ) = ip i / 0 = (k ) / ( k ) (3.3)
i =1 i =1

L L
T (k )
1 =
i = k +1
i Pr(i | C 1 ) = ip
i = k +1
i / 1 =
1 (k )
(3.4)

Onde os momentos acumulados de ordem zero e um do histograma (para


nveis de cinza at k) so dados respectivamente por:

k k
(k ) = p i e (k ) = ip i (3.5)
i =1 i =1

E a mdia total de nveis na imagem dada por:


L
T = ( L) = ip i (3.6)
i =1

Assim: 0 0 + 1 1 = T

0 + 1 = 1 (3.7)

As varincias das classes C0 e C1 so dadas por:

k k
02 = (i 0 ) 2 Pr(i | C 0 ) = (i 0 ) 2 p i / 0 (3.8)
i =1 i =1

L L
12 = (i 1 ) 2 Pr(i | C1 ) =
i = k +1
(i
i = k +1
1 ) 2 pi / 1 (3.9)

A partir da, so estabelecidas medidas indicadoras de separabilidade, ou seja,


fatores que impem critrios para a determinao de um valor de limiar eficaz; dadas por:
= B2 + W2 , = T2 / W2 , = B2 / T2 (3.10)

Onde:
W2 = 0 02 + 1 12 (Varincia das classes) (3.11)
37

B2 = 0 ( 0 T ) 2 + 1 ( 1 T ) 2

= 0 1 ( 1 0 ) 2 (Varincia entre as classes) (3.12)

Dessa forma:
L
T2 = (i T ) 2 p i (Varincia Total dos nveis) (3.13)
i =1

Adotando como critrio de eficincia da escolha de um valor k como limiar,


devemos considerar que o valor otimizado (k*) ser aquele que maximiza , ou de forma
equivalente, maximiza B2 .

Portanto:

(k ) = B2 (k ) / T2 (3.14)

[ T ( k ) (k )] 2
(k ) =
2
(3.15)
( k )[1 (k )]
B

Finalmente, o valor de limiar timo (k*) ser dado por:

B2 (k *) = max B2 (k ) . (3.16)
1 k < L

Dentre as trs tcnicas de binarizao, o mtodo de limiarizao de Otsu mostrou-


se mais robusto nos aspectos de tempo de processamento e qualidade de imagem de sada. A
Limiarizao de Otsu apresentou uma adaptao eficaz na presena dos rudos inerentes ao
processo de digitalizao da imagem.
Na aplicao desta tcnica, o clculo de um fator importante (3.14), avalia a
separabilidade entre as duas classes da imagem (objeto e fundo), ou seja, a bimodalidade do
38

histograma da imagem original. Com este fator, podemos estimar a eficincia com que o
valor de limiar obtido k, discrimina um objeto do plano de fundo na imagem. Um
histograma com pouca variao de intensidade de cinza resulta em um fator de bimodalidade
baixo, ao contrrio de um histograma com nveis de cinza distintos e distribudos em dois
grupos definidos (Figura 3.4).

(a) (b)
Figura 3.4 (a) Histograma com bimodalidade baixa ; (b) Histograma com
bimodalidade alta

3.1.4.2 Operadores Diferenciais

O mtodo de segmentao de imagens por deteco de bordas consiste na anlise


de descontinuidades dos nveis de cinza presentes na imagem por meio de operadores
diferenciais. Os operadores diferenciais mais usados so o Gradiente e o Laplaciano.
Borda em uma imagem, caracterizada pelo limite entre duas regies cujos nveis
de cinza possuem propriedades distintas. No nosso estudo, onde imagem caracterizada pela
presena de um smbolo de Cdigo de Barras, as bordas resultantes sero as delimitaes das
barras e dos caracteres impressos. Significativamente, as bordas de maior interesse na
decodificao sero aquelas relacionadas s barras do smbolo. Como a imagem analisada,
39

do ponto de vista global, possui caractersticas relativamente homogneas, as


descontinuidades dos nveis de cinza caracterizam bem o limite entre regies distintas,
quando a imagem capturada de alta qualidade.
De forma bsica, a Figura 3.5 ilustra a tcnica de deteco de bordas.

Perfil de uma
linha horizontal

Primeira
Derivada

Segunda
Derivada

(a) (b)

Figura 3.5 - Deteco de Bordas por Operadores Derivativos


(Fonte: [10] - R. C. Gonzalez and R. E. Woods, Digital Image Processing )
40

Atravs dos perfis das imagens na Figura 3.5, observamos uma transio suave
nos nveis de cinza, que uma caracterstica geralmente presente nas imagens digitais, uma
vez que o processo de digitalizao provoca um leve borramento.
Os extremos da magnitude da primeira derivada so usados na deteco de bordas
enquanto que para a segunda derivada, as transies por zeros so os melhores indicadores
de bordas.

Gradiente

A primeira derivada em um ponto qualquer de uma imagem dada pela


magnitude do gradiente no ponto considerado.
atravs da orientao do vetor gradiente que determinamos a direo da
transio mais abrupta de uma funo, que no nosso estudo uma imagem. Dessa forma, as
informaes que o vetor gradiente oferece em uma imagem so as transies abruptas de
nveis de cinza e a distribuio dos seus ngulos de inclinao que ser analisada mais
adiante.
O vetor gradiente de uma imagem (x,y) dado por:

f

G x x
f = = (3.17)
G y f
y

E sua magnitude dada por:

[
f = mag (f ) = G x2 + G y2 ]
1/ 2
(3.18)

Esta magnitude corresponde maior taxa de aumento de (x,y) por unidade de


distncia na direo de f.
No clculo das derivadas parciais Gx e Gx, so utilizadas mscaras denominadas
operadores de Sobel, dados por:
41

-1 -2 -1 -1 0 1
0 0 0 -2 0 2
1 2 1 -1 0 1
Mscara de Gx Mscara de Gy

Assim, o resultado obtido no clculo de Gx dado atravs da convoluo da


imagem original pela mscara de Gx, e aquele obtido no clculo de Gy dado pela
convoluo de pela mscara de Gy.
Os pontos de mnimos e mximos da primeira derivada caracterizam a presena de
bordas, uma vez que nesses pontos ocorrem uma transio acentuada de nvel de cinza na
imagem.
No caso de uma imagem contendo um smbolo de Cdigo de Barras, o resultado
da anlise pelo gradiente dado pela equao 3.18, e ilustrado na Figura 3.6.

(a) (b)

(c) (d)
Figura 3.6 (a) Imagem Original ; (b) Convoluo de por Gx ;
(c) Convoluo de por Gy ; (d) Imagem da magnitude do gradiente
42

Conforme mencionado na seo 3.1.1, a aplicao de um pr-processamento na


imagem capturada pelo dispositivo tico dada pela rotao por um ngulo que o eixo
longitudinal do smbolo faz com a horizontal. Este ngulo calculado baseado na direo do
vetor gradiente. Para um ponto (x,y), a direo do vetor gradiente dada por:

G
( x , y ) = tan 1 x (3.20)
G
y

De fato, o desalinhamento do eixo longitudinal do smbolo ser determinado pela


anlise do histograma dos diversos ngulos de f, presentes na imagem, ou seja, um ngulo
preponderante encontrado mediante a curva do histograma de ngulos.

Laplaciano

Uma outra metodologia para deteco de bordas baseia-se na convoluo da


imagem original por uma mscara composta pelo laplaciano de uma funo gaussiana. Esta
mscara geralmente denominada filtro LoG (Laplacian of Gaussian).
O laplaciano de uma funo (x,y) dado por:

2 f 2 f
2 f = + (3.20)
x 2 y 2

Uma vez que o laplaciano gera bordas duplas, alm de possuir sensibilidade ao
rudo, ele se torna um operador bastante ruidoso. Dessa forma, a aplicao do laplaciano
para deteco de bordas baseia-se na propriedade de cruzamentos por zero, que proporciona
uma determinao confivel das bordas.
Existem diversas maneiras de se implementar a equao 3.20 e aplicar a tcnica de
cruzamentos por zero, que consiste na convoluo da imagem com o laplaciano de uma
gaussiana bidimensional dada por:

x2 + y2
h ( x, y ) = exp (3.21)
2 2
43

Onde o desvio padro.


Seja r2 = x2 + y2 . A partir de (3.20) temos:

r 2 2 r2
h =
2
exp (3.22)
2
4 2

A mscara de convoluo resultante da equao 3.22 depender do valor de .


Inicialmente, convolumos a imagem original pela funo 2h, definindo um valor para .
Esta operao resultar em uma imagem borrada cujos nveis de cinza mais escuros indicam
valores mais negativos obtidos, os nveis brancos representam valores mais positivos e
consequentemente os nveis intermedirios indicam zeros. A partir da, os valores positivos
so rotulados como branco e os negativos como zero, binarizando a imagem. Dessa forma,
as bordas sero dadas pelos pontos de transio entre os nveis de preto e branco, que
representam os pontos de cruzamento por zeros.

3.1.4.3 Detec o de Passagem Por Zeros

Esta tcnica, consiste na classificao dos pixels da imagem em duas classes


(objeto e fundo) , mediante a convoluo da imagem pelo filtro LoG (Laplaciano de uma
funo Gaussiana).
A binarizao obtida pela anlise dos valores dos pixels aps o processo de
convoluo, onde o conjunto de pixels com valores positivos sero definidos como objeto da
imagem resultante, e o conjunto de pixels com valores no-positivos sero classificados
como plano de fundo (ou simplesmente fundo) da imagem resultante.
O resultado da convoluo da imagem original com a funo 2h (3.22), apresenta
um borramento intenso (Figura 3.7) . Dessa forma, a imagem binarizada pela deteco de
passagem por zeros apresenta-se extremamente ruidosa, inviabilizando a princpio, a
decodificao do smbolo.
44

3.1.4.4 Segmenta o por Watershed

O mtodo Watershed [11][12] uma das ferramentas mais usadas em


segmentao de imagens, e seu conceito baseado na interpretao topogrfica da imagem e
sua inundao.

Imagem Original

= 0,4

= 0,8

= 1,2

(a) (b)

Figura 3.7 (a) Convoluo da imagem original com 2h; (b) Limiarizao por Zero
45

Seja uma imagem (em nvel de cinza), interpretada como uma superfcie
topogrfica S. Se imaginarmos gotas de gua caindo sobre S, elas iro escoar dos pontos
mais altos da superfcie em direo aos vales, que correspondem aos mnimos regionais da
superfcie S.
Em outras palavras, um mnimo regional M, de imagem um componente conexo
de pixels com valor v, tal que todo pixel vizinho a M possui valor estritamente acima de v.
Dessa forma, as guas acumular-se-o em regies denominadas bacias hidrogrficas H(M)
(Figura 3.8). Cada bacia hidrogrfica referente a uma imagem est associada a um mnimo
regional M.
Inicialmente, para interpretar o processo de Watershed, faamos furos em cada
mnimo regional presente na superfcie topogrfica S, que representa de forma fsica a
imagem inicial. Em seguida, imergimos S em um lago com velocidade vertical uniforme,
provocando inundaes nas bacias H(M). No decorrer das inundaes, as guas
provenientes de bacias distintas tendem a se encontrar. Entretanto, o nosso objetivo evitar
este encontro. Ento, na iminncia do encontro das guas, erguemos paredes (diques) a fim
de evitar que elas se misturem. Construmos estes diques at o momento em que no haja
mais ameaa de encontro das guas. No final deste processo, a coleo de todos os diques
erguidos caracterizam as linhas do Watershed.
A descrio do Watershed tambm pode ser dada pelas regies delimitadas pelos
diques.
Os mnimos regionais so denominados marcadores, cuja funo identificar os
locais onde o processo de inundao ir comear, ou seja, os locais dos furos feitos nas
bacias H(M). A princpio, estes marcadores so dados pelos mnimos regionais como
descrito acima. Normalmente, o Watershed aplicado na imagem do gradiente (g).
Entretanto, existem muitas bacias hidrogrficas na superfcie S de g que no so expressas
de forma visvel na imagem original, pois, embora a imagem do gradiente evidencie de
maneira relativamente clara as delimitaes dos objetos na imagem, existem muitos mnimos
regionais no plano de fundo que so visualizados de forma homognea. Estes mnimos
(ocultos a olho n), so responsveis por uma super-segmentao indesejada da imagem,
inviabilizando a decodificao do smbolo (Figura 3.9).
46

(a) (b)


H (M)

(c)

(d) (e)

Figura 3.8 Interpretao Fsica do Watershed


(a) Imagem Original ; (b) Curvas de nvel ; (c) Representao topogrfica
da imagem original ; (d) Mnimos regionais ; (e) Linhas do Watershed.
47

A fim de evitar esta super-segmentao da imagem, podemos adotar marcadores


obtidos por algum tipo de pr-processamento da imagem dos mnimos regionais do
gradiente, obtendo-se assim g(M). O que necessitamos, na realidade a determinao de
uma quantidade de marcadores que seja adequada a uma boa segmentao.

(a) (b)

Detalhe da super-segmentao
resultante do Watershed

Figura 3.9 (a) Imagem Original ; (b) Watershed

Considerando uma abordagem bidimensional, para uma delimitao clara das


barras presentes na imagem do cdigo de barras, devemos ter marcadores no interior de cada
barra preta e uma externa a elas. A obteno exata desta quantidade de marcadores exige um
pr-processamento extra da imagem do gradiente, que varia de acordo com a resoluo da
imagem capturada e do rudo presente nela. Para as imagens estudadas, o pr-processamento
aplicado baseou-se na remoo de mnimos regionais de g, cujo contraste eram inferiores a
um valor k . Conforme a resoluo de digitalizao da imagem varia, este valor deve variar.
A Figura 3.10 ilustra, a dificuldade em estipular um valor eficaz para k, tomando-se como
ponto de partida, a imagem original da Figura 3.7.
Atravs da Figura 3.10, notamos que para k=35 ocorre uma juno acentuada
entre barras. Se k=40, ocorre uma diminuio de junes, embora j ocorra o incio de uma
48

deteriorao de barras. Entretanto, se k=50, a juno entre barras cessa, mas a deteriorao
das barras muito acentuada e resulta em uma decodificao incorreta.
A quantidade eficaz de marcadores a serem impostos e a determinao do valor k
so fatores bastante subjetivos, inviabilizando o mtodo de Watershed como processo de
binarizao para o Cdigo de Barras .

k=35

k=40

k=50

Figura 3.10
49

3.1.5 Resultados Obtidos

Atravs da Figura 3.11, observamos que o mtodo de limiarizao de Otsu o


mais eficaz para a binarizao da imagem do cdigo.

(a)

(b)

(c)

Figura 3.11 Binarizao (a) Por Limiarizao de Otsu ; (b) Pelo


mtodo de Watershed ; (c) Por Deteco de Passagem por Zeros
50
51

Captulo 4

Descri o de Tcnicas Aplicadas

Para cada uma das simbologias abordadas no nosso trabalho, um algoritmo de


decodificao foi desenvolvido com critrios distintos para obteno de medidas e
classificao, uma vez que cada simbologia possui caractersticas particulares de codificao
no smbolo impresso. Inicialmente, so seguidos os trs primeiros passos mostrados na
figura 3.1, independentemente da simbologia analisada.

4.1 Code 39 (Cdigo 3 de 9)

Para esta simbologia, aps a aquisio da imagem de entrada, um vetor padro


obtido, atravs de um processo particular de classificao. Este vetor corresponde a uma
seqncia de palavras-cdigo presentes na tabela padro.
Os passos para a determinao deste vetor so explicados a seguir.

BINARIZAO

Mediante a imagem obtida a partir do processo de enquadramento, o passo


seguinte a binarizao, descrito na seo 3.1.4.
A partir da imagem binarizada, realizamos ento uma varredura longitudinal,
obtendo um vetor linha de padres vp, conforme ilustra a Figura 4.1.
52

ROTULAO

A partir do vetor linha de padres vp, rotulamos todos os seus componentes


conexos (seqncias de elementos com mesmo nvel de cinza) com valores ascendentes. Um
novo vetor resultante rp obtido, representando cada elemento da informao codificada
atravs de rtulos. A figura 4.2 ilustra este passo.

(a)

Linha varrida (b)

(c)

vp = [1110111010001000101000111010101000101010001...]
(d)

Figura 4.1 - (a) Imagem aps o processo de Enquadramento ( 256 nveis de


cinza); (b) Imagem Binarizada por Limiarizao de Otsu ( 2 nveis de cinza:
0 e 1 ); (c) Representao da linha varrida, ampliada na vertical; (d)
Vetor linha de padres vp que representa a linha varrida.
53

Atravs da Figura 4.2, vemos que, para cada elemento (barra ou espao)
subseqente, um rtulo imposto de forma ascendente. obedecida a razo de 3:1 entre
elementos largos e estreitos, e a margem de silncio possui 11 vezes a largura de um
elemento estreito.

Imagem
Binarizada

Trecho obtido para


exemplificao

Representao vetorial da rotulao do trecho acima:

[1 1 1 1 1 1 1 1 1 1 1 2 3 3 3 4 5 6 6 6 7 8 8 8 9 10 11 12 12 12 13 13 13 ...]

FIGURA 4.2 Ilustrao de uma rotulao

ESTIMATIVA DA LARGURA DO ELEMENTO MAIS ESTREITO

Aps a rotulao dos elementos encontrados, achamos o histograma do vetor de


rtulos rp, a fim de obtermos uma estimativa da largura (em pixels) do elemento mais
estreito, le. Esta estimativa necessria, pois indica se a resoluo est igual ou acima da
mnima tolervel e determina qual a dimenso da rea responsvel pela abertura que
aplicaremos no passo seguinte.
A largura do elemento mais estreito le, encontrado na varredura, determinada
analisando a funo distribuio do histograma do vetor de rtulos. A princpio, sabemos
que a quantidade de elementos estreitos maior que a quantidade dos elementos largos, pois
54

para cada palavra-cdigo existem seis elementos estreitos e trs largos. Dessa forma, pela
funo distribuio obtemos qual o maior valor de ocorrncia de elementos rotulados. Para
este valor de ocorrncia preponderante, achamos qual a largura correspondente, pois ela
corresponde largura do elemento mais estreito.
A Figura 4.3 ilustra o histograma do vetor de rtulos obtido no passo anterior,
(cuja imagem de entrada corresponde imagem original da Figura 3.7) e a funo
distribuio das larguras dos elementos rotulados.
ocorrncias

Histograma do
vetor de Rtulos

Rtulos

Funo distribuio
ocorrncias

das larguras

larguras

Figura 4.3
55

Pelos grficos da Figura 4.3, vemos que a largura com maior ndice de ocorrncia
aquela com valor igual a 4. Assim, le = 4.

LOCALIZAO DO CAMPO DE PADRES

Uma vez definida a largura le, encontrada na varredura, necessitamos aplicar a


tcnica de abertura por rea no vetor vp para localizar com preciso o campo de dados que
contm os padres das palavras-cdigo, ou seja, devemos extrair o campo de padres (CP)
entre as zonas de silncio, pois apenas ele contm as barras e espaos que codificam a
informao a ser obtida.
A imagem de anlise para a aplicao da abertura por rea , na realidade, o vetor
vp, contendo seqncias de elementos com valores 0 (zero) e 1 (um). Os segmentos de valor
1 correspondem s margens de silncio (presentes esquerda e direita do smbolo) e aos
espaos entre as barras (veja Figura 4.4).
O princpio da abertura por rea baseia-se na idia de comparar as reas de
componentes conexos correspondentes ao objeto da imagem, com um valor de rea pr-
definido, A . Caso a rea de cada componente conexo seja igual ou superior ao valor A, este
componente ser objeto da imagem resultante, caso contrrio pertencer ao plano de fundo.
Na nossa anlise, o valor de rea torna-se um valor de comprimento, pois a imagem de
entrada possui apenas uma linha, caracterizada pelo vetor linha de padres vp.
O objetivo deste processo consiste na remoo dos elementos, presentes no vetor
vp, cujas larguras sejam inferiores ao valor de comparao A . Obtermos ento como
resultado, um vetor constitudo apenas pelas margens de silncio que sero o objeto (valor
1) deste vetor resultante, e o fundo (valor 0) indica o local do campo CP . A Figura 4.4
ilustra de forma mais clara este processo.
O valor A um fator importante, pois garante uma extrao correta do campo
de padres, que o nosso alvo de anlise neste passo. necessria uma escolha de um valor
que favorea a obteno de apenas trs componentes conexos ( dois componentes com valor
1, e um componente com valor 0 ) como resultado desta operao. Os dois componentes
56

de valor 1 correspondero s margens de silncio (esquerda e direita), e o componente


com valor 0, ao campo de padres. Portanto, o valor de comparao de rea escolhido
deve ser um mltiplo do valor da largura mais estreita le. No algoritmo implementado,
utilizamos um valor 5 vezes maior que a largura mais estreita (A = 5 . le), garantindo uma
extrao correta de CP . Notamos que todos os espaos (componentes de valor 1 presentes
no campo CP) sero excludos aps a abertura por rea, recebendo valor 0.
Eventualmente, devido a imperfeies de impresso, manchas ou outros tipos de
interferncias na leitura do cdigo, aps a aplicao da abertura por rea, o vetor resultante
poder apresentar mais ou menos de trs componentes conexos. Se o vetor resultante
contiver menos de trs componentes, provavelmente a largura das zonas de silncio no
foram respeitadas no momento de impresso da simbologia, pois o valor correto da largura
das zonas de silncio deve ser aproximadamente 11 vezes o valor da largura do elemento
mais estreito presente no smbolo.

Linha varrida que gera o vetor de padres, ampliada na vertical

Elemento de rea de comparao


A=( 5 . le)

Campo de padres (CP)

Abertura por rea da Linha varrida, adotando o elemento de rea


acima

FIGURA 4.4 Ilustrao da Abertura por rea


57

Analisando a Figura 4.4, notamos que o elemento de rea adotado (se) s


encaixa nos locais das margens de silncio. Como o elemento se mais largo que os
espaos (componentes brancos) entre as barras pretas, estes espaos so excludos, ou seja,
recebem valor 0, tornando-se fundo do vetor resultante. Apenas as margens de silncio
permanecem com valor 1 (branco), indicando pixels do objeto.

VERIFICAO DAS MARGENS E OBTENO DE MEDIDAS

Uma vez verificado que a imagem resultante da abertura por rea apresenta trs
componentes conexos (dois componentes com valor 1 e um componente de valor 0),
extramos aqueles situados no campo CP que foram rotulados anteriormente a fim de
determinarmos quais so as larguras de cada elemento que compe o dado armazenado.

CLASSIFICAO E DECODIFICAO

A partir dos elementos rotulados presentes no campo CP, obtemos o histograma


dos rtulos, que nos fornece uma seqncia de larguras consecutivas por meio de um novo
vetor de larguras, LP. O vetor particionado em subconjuntos de nove elementos,
correspondendo s palavras-cdigo do smbolo, uma vez que elas possuem 9 elementos
(barras e espaos). A quantidade de subconjuntos de nove elementos corresponde
quantidade de palavras-cdigo presentes no smbolo e que codifica a informao.
Devemos identificar a largura de cada elemento presente em cada subconjunto,
que deve possuir 6 elementos estreitos e 3 elementos largos. Atravs do vetor LP, adotando
passos de 9, ordenamos em ordem ascendente, os valores de larguras dos subconjuntos. Os
trs ltimos valores de cada subconjunto correspondem aos trs elementos mais largos da
palavra-cdigo; os remanescentes correspondem aos seis elementos mais estreitos. Dessa
forma, para cada valor de largura inferior ao menor dos trs elementos mais largos,
interpretamos como sendo um elemento estreito, e os outros trs elementos com valores
iguais ou acima a este terceiro elemento mais largo, so interpretados como elementos
largos. A figura 4.5 ilustra este passo de classificao.
58

Aps interpretar cada elemento do vetor LP, criamos um vetor de padro final (P),
a partir daquele. Os elementos identificados como largos recebero uma seqncia de 3
dgitos binrios com rtulo correspondente ao seu valor original (se barra, recebe rtulo 0 ;
se espao, recebe rtulo 1). Em contrapartida, os elementos estreitos recebem um nico
dgito binrio, correspondente ao seu valor original, proporcionando dessa forma uma razo
entre elementos largos e estreitos de 3:1.

gap gap gap gap

c m p

leitura
3 1 3 11 3 1 21 4 2 3 1 111 3 1 1 2 3 2 3 11 3 1

Ordem ascendente: Ordem ascendente: Ordem ascendente:


111112333 111112334 111122333

Menor dgito largo Menor dgito largo Menor dgito largo


lido: 3 lido: 3 lido: 3

c m p

3 1 3 1 1 3 1 1 1 3 1 3 1 1 1 1 3 1 113 1 3 1 13 1

Padres por gabarito na razo 1:3 para o dado cmp

Representao dos vetores Lp e P , para os caracteres cmp (onde


as reticncias equivalem possvel continuao do dado):

Lp = [...3 1 3 1 1 3 1 2 1 4 2 3 1 1 1 1 3 1 1 2 3 2 3 1 1 3 1...]
P = [...3 1 3 1 1 3 1 1 1 3 1 3 1 1 1 1 3 1 1 1 3 1 3 1 1 3 1 ...]

Figura 4.5 Classificao


59

Cada seqncia de 15 bits (correspondentes a 6 elementos estreitos de 1 bit e 3


elementos largos de 3 bits) do vetor P so comparados com a matriz de padres do Cdigo
39 (ver Tabela II), que contm 44 linhas de padres correspondentes aos 44 caracteres que
esta simbologia capaz de codificar. Atravs desta comparao, ocorrer um casamento
entre o padro da seqncia de 15 bits e alguma linha da matriz. A linha da matriz onde
ocorrer o casamento dos padres, indica qual o caractere codificado no smbolo.

4.2 Cdigo UPC/EAN

Como os cdigos UPC e EAN possuem a mesma estrutura de codificao, o


processo de decodificao para ambos idntico. A anlise dos Cdigos UPC/EAN difere
daquela referente ao cdigo 39, pois suas formas de decodificao no esto relacionadas
apenas interpretao de duas larguras, mas sim de quatro larguras distintas. Com isso,
necessrio uma normalizao das larguras dos elementos que compem as palavras-cdigo.
Alguns procedimentos seguidos para decodificar estes cdigos so semelhantes
queles necessrios decodificao do cdigo 39.

PROCESSAMENTOS INICIAIS

O passo de limiarizao consiste, assim como no caso do cdigo 39, no passo


inicial aps o enquadramento do smbolo.
Para a simbologia UPC/EAN, o valor de limiar um fator bastante crtico, pois os
elementos que compem uma palavra cdigo podem diferir entre si de quatro maneiras
distintas, exigindo uma boa preciso na determinao de cada largura.

EXTRAO DE UMA FAIXA DE PADRES

Uma vez que estas simbologias exigem uma preciso mais apurada das larguras
dos elementos, extramos uma faixa de padres a fim de capturarmos mais informaes a
respeito da distribuio de larguras. Em outras palavras, as divergncias entre uma largura
lida daquela ideal so amenizadas pela captura de diversas linhas de varredura e
60

determinao de uma mdia para cada largura subseqente. A Figura 4.6 ilustra o
procedimento de captura de uma faixa do smbolo, que ser analisada para a obteno da
informao codificada. A faixa extrada da imagem do smbolo interpretada como um
empilhamento de linhas que o compem.
Aps a extrao da faixa, uma verificao da quantidade de elementos para cada
linha deve ser feita, a fim de garantir uma quantidade correta de barras e espaos que uma
simbologia UPC/EAN deve possuir. O smbolo do UPC ou EAN formado de doze padres
compostos de quatro elementos (barras e espaos) cada, dois padres laterais com trs
elementos e um padro central de cinco elementos, portanto em uma leitura longitudinal da
imagem so encontrados cinqenta e nove elementos correspondentes ao smbolo e mais
dois referentes s margens de silncio. Assim, uma anlise feita nas linhas empilhadas que
compem a faixa extrada. Caso uma linha no apresente a quantidade correta de elementos
ela ser removida da faixa de anlise . A presena de linhas com uma quantidade errada de
elementos ocorre devido s interferncias no momento da digitalizao do cdigo.

hf

Figura 4.6 Faixa Extrada

A quantidade de elementos encontrados em uma linha corresponde quantidade


de rtulos resultantes aps o processo de rotulao.
61

DISTRIBUIO DE LARGURAS E EXTRAO DO CAMPO DE PADRES

Aps a eliminao de linhas ruidosas da faixa extrada, obtemos uma nova faixa
filtrada que eventualmente pode conter a mesma quantidade de linhas da faixa inicial (caso
todas as linhas verificadas possuam a quantidade correta de elementos), ou uma quantidade
inferior de linhas (caso sejam detectadas linhas ruidosas). Para imagens com boa resoluo,
no haver linhas ruidosas, e a faixa escolhida permanece inalterada.
Uma rotulao aplicada na faixa filtrada a fim de medirmos as reas
correspondentes aos blocos dos elementos concatenados. A partir da, o artifcio para
determinar a largura dos elementos dado pela diviso da rea de cada elemento pela
altura hf da faixa filtrada. Esta forma de determinao das larguras equilibra pequenas
discrepncias entre as linhas empilhadas, devido ao rudo da leitura. Encontramos ento um
vetor de padres vUPC com seqncias correspondentes aos elementos de larguras
concatenadas. Veja figura 4.7.

hf

Elementos de rea
varridos

hf

A1 A2 A3 A4A5 A6 A7 A8 A9 A10 A11 A12 A13A14 A15 A16A17 A18 A19A20A21A22A23 A24

reas dos elementos


varridos
vUPC =
1
[A1 A2 A3 A4 .... A61 ]
hf

Figura 4.7 Obteno do vetor de padres


62

Por meio do histograma do vetor vUPC achamos o grfico de distribuio de


larguras que informa o valor estimado do elemento mais estreito. De forma idntica ao
cdigo 39, um processo de abertura por rea aplicado no vetor vUPC, a fim de localizar o
campo de padres.

NORMALIZAO E CLASSIFICAO

Cada palavra cdigo possui quatro elementos dispostos em sete mdulos (ver
seo 2.4.2). Assim, aps os trs elementos correspondentes ao padro lateral (010),
selecionamos seis subconjuntos sucessivos compostos de quatro elementos, referentes aos
seis dgitos do lado esquerdo do padro central. Em seguida, selecionamos mais seis
subconjuntos de quatro elementos, aps o padro central (01010), que correspondem aos
outros seis dgitos remanescentes.
Um valor de largura de mdulo lm deve ser determinado, para que os elementos de
largura que compem um dgito sejam interpretados como mltiplo de lm. Este valor pode
ser determinado de duas maneiras: analisando todas as larguras encontradas na varredura do
smbolo, ou atravs de cada palavra-cdigo referente a um dgito codificado.
Um smbolo UPC ou EAN possui noventa e cinco mdulos que correspondem aos
84 mdulos dos doze dgitos (12 x 7 = 84) somados aos onze mdulos correspondentes aos
dois padres laterais de trs mdulos (cada) e cinco mdulos do padro central (Figura 2.3).
Dessa forma, para estimar o valor de largura de um mdulo, dividimos a largura total (em
pixels) da linha varrida no campo de padres por 95. A eficincia da obteno de lm por este
mtodo afetada pela falta de uniformidade entre os elementos. Ou seja, para um
determinado valor de largura de mdulo X encontrado em uma palavra-cdigo lida, existir
um outro valor de largura de mdulo que se distancia de X, encontrado em uma palavra
posterior. Entretanto, estes valores de largura de mdulos devem ser idnticos no caso ideal.
Portanto, o aumento do domnio de anlise para definir lm diminui a eficincia do valor
calculado, favorecendo a erros de decodificao conforme verificamos em testes
implementados.
63

A forma mais confivel de determinar o valor de mdulo lm dada a partir de cada


palavra-cdigo encontrada, ou seja, para cada conjunto de quatro elementos correspondentes
a um dgito, calculado um valor lm. Inicialmente, achamos a soma das larguras dos 4
elementos que compem um dgito e em seguida dividimos este resultado por 7, obtendo-se
ento lm . Como o valor da largura de cada elemento est sob ponto flutuante, o valor de lm
estar tambm sob esta representao.
Durante a anlise de cada palavra-cdigo, aps a determinao de lm, os elementos
que compem a palavra sero normalizados com base no valor lm, e em seguida obtemos 6
parmetros, referentes aos padres lidos, apresentados mais adiante.
Para definir os dgitos codificados, aplicamos uma ou duas classificaes. Uma
segunda classificao ser realizada, caso a primeira resulte em um dos dgitos dos pares (1 e
7) ou (2 e 8), uma vez que estes pares de dgitos apresentam os parmetros t1 e t2 idnticos;
caso contrrio, a primeira classificao decodifica com eficincia os dgitos presentes no
smbolo. Uma tabela de classificao (Tabela III) usada para a primeira classificao das
palavras-cdigo. Os parmetros que compem esta tabela so os coeficientes c1, c2, c3, c4, as
distncias t1, t2 (analisados na Tabela 2.1) e um parmetro adicional CA utilizado para uma
eventual segunda classificao .
Obtemos a partir da Tabela III, os vetores-padro de caractersticas dados por:

x (d ) = [c1 c2 c3 c4 t1 t2 ] (3.23)

A primeira classificao dos dgitos codificados dada por meio da comparao


entre o vetor x(d), cujos atributos so dados pelos valores da Tabela III, e o vetor de
caractersticas x, cujos atributos so obtidos a partir da varredura do smbolo.

x ' = [C'1 C' 2 C' 3 C' 4 t '1 t' 2 ] (3.24)

Uma vez calculado o vetor x, o dgito d da Tabela III para o qual ocorra o
menor valor para a distncia:
64

6
D = (x (  ) x )
2
(3.25)
i =1

indicar o dgito codificado.

Dgitos da Dgitos da
Larguras dos Elementos CA
Dgito Esquerda Direita
c1 c2 c3 c4 t1 t2 t1 t2 c1+c3 / c2 +c4
1 2 2 2 1 3 4 4 4 4/3
2 2 1 2 2 4 3 3 3 4/3
3 1 4 1 1 2 5 5 5 2/5
4 1 1 3 2 3 4 2 4 4/3
5 1 2 3 1 4 5 3 5 4/3
6 1 1 1 4 5 2 2 2 2/5
7 1 3 1 2 3 4 4 4 2/5
8 1 2 1 3 4 3 3 3 2/5
9 3 1 1 2 3 2 4 2 4/3
10 3 2 1 1 4 3 5 3 4/3
Tabela III Tabela para Classificao dos padres

A Figura 4.8 ilustra um exemplo para a primeira classificao.


Mais um parmetro adicional CA = (c1+c3 / c2 +c4) utilizado na segunda
classificao, caso a primeira classificao resulte em um dos dgitos 1, 2, 7 ou 8 .
Pela tabela de classificao (Tabela III) vemos que a razo entre os parmetros CA
para esses pares dada por:

CA(1) = 3,33 CA(7)


CA(2) = 3,33 CA(8)

tanto para os dgitos com paridade mpar ou par. Conclumos que o parmetro CA distingue
de forma eficaz os pares (1 e 7) e (2 e 8).
Analisando a Figura 4.8, vemos que o dgito para o qual ocorre a menor distncia
D o dgito 7. Dessa forma, para a primeira classificao, o dgito lido sete. Como esta
65

primeira classificao resultou no dgito 7, a segunda classificao realizada, pois o dgito


7 pode ser resultante de uma interpretao equivocada do dgito 1. Comparando-se o
resultado de CA para o dgito lido, com os parmetros CAs para os dgitos 1 e 7 da Tabela
III, certificamos que o dgito lido realmente o dgito 7, uma vez que:

CA(1) = 1,333
CA(7) = 0,4
CA = C1 + C3 /C2 + C4 =1,26+0,7/2,94+2,1 = 0,388888 0,4 = CA(7)
66

Caractersticas de um dgito lido no campo esquerdo

Larguras lm = (1,8 + 4,2 + 1 + 3) / 7 = 1,4285714


Obtidas C' 1 = 1,8 / lm = 1,26
A1/hf 1,8 C' 2 = 4,2 / lm = 2,94
A2/hf 4,2 C' 3 = 1,0 / lm = 0,7
A3/hf 1,0 C' 4 = 3,0 / lm = 2,1
A4/hf 3,0 t ' 1 ( esquerda ) = C' 3 + C' 4 = 2,8
t ' 2 = C' 2 + C' 3 =3,64
x ' = [C' 1 C' 2 C' 3 C' 4 t ' 1 t ' 2 ]=[1,26 2,94 0,7 2,1 2,8 3,64]

6
D = ( x( d ) x ) 2
Campo
Esquerdo
d i =1
c1 c2 c3 c4 t1 t2
1 2 2 2 1 3 4 D1 =(2-1,26)2+(2-2,94)2+ (2-0,7)2+ (1-2,1)2+ (3-2,8)2+ (4-3,64)2 = 4.5008
2 2 1 2 2 4 3 D2 =(2-1,26)2+ (1-2,94)2+ (2-0,7)2+ (2-2,1)2+ (4-2,8)2+ (3-3,64)2 = 7.8608
3 1 4 1 1 2 5 D3 =(1-1,26)2+ (4-2,94)2+ (1-0,7)2+ (1-2,1)2+ (2-2,8)2+ (5-3,64)2 = 4.9808
4 1 1 3 2 5 4 D4 =(1-1,26)2+ (1-2,94)2+ (3-0,7)2+ (2-2,1)2+ (5-2,8)2+ (4-3,64)2 = 14.1008
5 1 2 3 1 4 5 D5 =(1-1,26)2+ (2-2,94)2+ (3-0,7)2+ (1-2,1)2+ (4-2,8)2+ (5-3,64)2 = 10.7408
6 1 1 1 4 5 2 D6 =(1-1,26)2+ (1-2,94)2+ (1-0,7)2+ (4-2,1)2+ (5-2,8)2+ (2-3,64)2 = 15.0608
7 1 3 1 2 3 4 D7 =(1-1,26)2+ (3-2,94)2+ (1-0,7)2+ (2-2,1)2+ (3-2,8)2+ (4-3,64)2 = 0.3408
8 1 2 1 3 4 3 D8 =(1-1,26)2+ (2-2,94)2+ (1-0,7)2+ (3-2,1)2+ (4-2,8)2+ (3-3,64)2 = 3.7008
9 3 1 1 2 3 2 D9 =(3-1,26)2+ (1-2,94)2+ (1-0,7)2+ (2-2,1)2+ (3-2,8)2+ (2-3,64)2 = 9.6208
10 3 2 1 1 2 3 D10=(3-1,26)2+ (2-2,94)2+ (1-0,7)2+ (1-2,1)2+ (2-2,8)2+ (3-3,64)2 = 6.2608

Figura 4.8 Exemplo da Primeira classificao para um dgito lido no campo


esquerdo
67

Captulo 5

Pr-processamentos

No nosso estudo, consideramos uma imagem digitalizada contendo um smbolo


em uma posio aleatria. A captura do smbolo deve ser realizada em uma resoluo de no
mnimo 300 pontos por polegada, a fim de garantir uma estimativa de, no mnimo, 4 pixels
para uma largura de mdulo da simbologia presente na imagem.

5.1 Anlise dimensional

A representao simblica do cdigo UPC-A no tamanho padro em magnitude 1,


apresenta uma largura de mdulo de 0,33mm. Dessa forma, uma palavra-cdigo
representando um dgito codificado possui 7 0,33mm = 2,31mm .
A largura de todos os dgitos codificados, padres de guarda laterais e central
somam 95 0,33mm = 31,35mm. As margens de silncio para o cdigo UPC-A possuem
como largura, 9 vezes a largura de um mdulo, tanto na esquerda como na direita.
Acima das barras deve haver um espaamento de 1 largura de mdulo, assim
como entre as barras e os nmeros arbicos que expressam o dado armazenado. A Figura 5.1
ilustra um gabarito para o smbolo UPC-A.
Atravs da Figura 5.1, vemos que a rea total de um smbolo ideal dado por
37,29mm 26,26mm = 9,79 cm2, que resulta em uma rea de aproximadamente 440 310
pixels para uma digitalizao em 300 pontos por polegada.
68

5.2 Etapas de Pr-Processamentos

O smbolo presente na imagem pode estar imerso em um plano de fundo que varia
muito conforme o produto em questo. Para uma localizao eficiente, a impresso do
smbolo deve obedecer as normas dimensionais.

b ! b b b !

0
6 !%
R E A D E IM P RES S O 0
DA S BA RRA S !%

E%j!6E
%0

 66 ! 0 6 60 !

b b 0 b b

b*6j!6E b*6j!%
E E !00b 606E

Figura 5.1 Dimenses ideais para o smbolo UPC-A em tamanho nominal (Medidas em milmetros)

5.2.1 Capta o de contornos

Inicialmente, a partir da imagem original em nvel de cinza, obtemos a imagem da


magnitude do vetor gradiente, que ressalta os contornos dos objetos presentes na imagem.
Este processo realizado para obtermos o conjunto de retngulos que circundam todas as
barras do smbolo. A figura 5.2 ilustra o processo de determinao de contornos para uma
imagem de 452 462 pixels.
69

5.2.2 Estima o da localiza o do smbolo

A partir da imagem com os contornos das barras, sabendo-se que os espaamentos


entre elas no devem ultrapassar 4 vezes o valor de uma largura de mdulo, aplicamos uma
abertura com elemento estruturante circular de dimetro 20 pixels. A escolha deste valor
como dimetro garante um nivelamento de todas as barras em uma faixa de valor de cinza
reduzido. A nuvem escura com forma retangular mostrada na Figura 5.3 ilustra este
processo.

(a) (b)

Figura 5.2 (a) Imagem Original (636 x 651 pixels) ; (b) Magnitude do gradiente.

Figura 5.3 Abertura da Figura 5.2 (b) por um disco de dimetro 20 pixels
70

5.2.3 Localiza o Precisa do smbolo

A imagem obtida pelo processo de abertura (Figura 5.3) apresenta partes


irrelevantes com baixos nveis de cinza que devem ser extradas para proporcionar uma
localizao precisa do smbolo. Aplicamos inicialmente uma limiarizao de Otsu para
binarizao da imagem, e assim obtemos uma imagem com diversos objetos, incluindo
aquele referente ao local onde se encontra o smbolo do Cdigo de Barras.
Para assegurar um enquadramento eficaz, que ser aplicado posteriormente,
necessrio que o smbolo esteja livre de cortes no seu corpo. Dessa forma, o smbolo no
deve tocar as bordas da imagem, a fim de garantir a sua integridade. Assim, apenas sero
considerados objetos que estejam posicionados no interior da imagem, sendo excludos
aqueles que tocam as bordas. A Figura 5.4 ilustra este passo.

(a) (b)

Figura 5.4 (a) Binarizao da Figura 5.3 ;


(b) Extrao dos objetos que tocam as bordas da imagem

A partir da imagem mostrada na Figura 5.4 (b), devemos determinar o objeto que
melhor indique a presena do smbolo. Aplicamos ento uma abertura por rea, cujo limiar
71

remova objetos irrelevantes de rea pequena na imagem. O objeto remanescente desta


abertura por rea ser aquele que indica a presena do smbolo.

5.2.4 Alinhamento do eixo Longitudinal

Focalizamos o posicionamento do objeto referente ao smbolo (Figura 5.5.a), e o


enquadramos atravs de uma janela imaginria que o circunda mediante uma tolerncia da
ordem de 9 vezes a largura de mdulo para a simbologia UPC, devido presena das
margens de silncio. Caso a simbologia presente na imagem seja EAN-13, o valor desta
tolerncia dever ser da ordem de 11 vezes o valor da largura de mdulo, pois a largura da
margem de silncio esquerda nesta simbologia possui 11 vezes a largura de mdulo. A fim
de uma generalizao, a adoo dos valores para a simbologia EAN-13 possibilita a
decodificao dos cdigos UPC-A, uma vez que estes cdigos so verses especficas do
EAN-13. Obtemos ento uma imagem com dimenses reduzidas contendo o objeto do
smbolo posicionado de forma centralizada (Figura 5.5.b).
Tomando a imagem da Figura 5.5.b como mscara, extramos parcialmente a
imagem original do smbolo (Figura 5.5.c) a fim de determinarmos de forma eficaz a
inclinao do eixo longitudinal do smbolo.
Atravs da anlise do histograma de ngulos do vetor gradiente, determinamos o
ngulo preponderante, que indicar a inclinao das diversas barras que compem o
smbolo. Rotacionamos a imagem do enquadramento, colocando o eixo longitudinal do
smbolo na posio horizontal.
Ocasionalmente, a rotao para o alinhamento pode posicionar o smbolo de
cabea para baixo, impedindo a leitura correta do cdigo; entretanto, o dgito verificador
(seo 2.3.5.1) certifica qual o sentido da leitura do smbolo, e uma rotao de 180
realizada se necessrio.
72

(a) (b) (c)

(d) (e) (f)

Decodificao:
724385310225

Figura 5.5 a) Enquadramento por uma janela imaginria; b) Enquadramento


preciso do objeto referente ao smbolo; c) Extrao parcial da imagem original
usando (b) como mscara; d) Histograma de ngulos do Vetor Gradiente de (c);
e) Alinhamento do eixo longitudinal; f) captura de uma faixa do smbolo.
73

Captulo 6

Verifica o

A fim de determinar a qualidade de um smbolo estudado, seja do ponto de vista


de impresso ou de interpretao durante a anlise da imagem capturada, calculamos alguns
parmetros que caracterizam o termo verificao. Geralmente, um processo de verificao
realizado quando ocorre um erro na tentativa de decodificao do cdigo. Quando a
decodificao realizada sem a deteco de erros, nenhum clculo de parmetros feito. Os
parmetros de verificao seguem normas estabelecidas pelo ANSI (American National
Standards Institute) e CEN (Comission for European Normalization).
Quanto maior a qualidade de impresso do smbolo, mais fcil e confivel sero a
leitura e decodificao, respectivamente. Na nossa anlise, a resoluo de digitalizao um
dos fatores mais importantes para uma decodificao livre de erros.

6.1 Parmetros analisados na leitura

6.1.1 Deteriora o do smbolo

Talvez, os maiores problemas encontrados no momento de leitura de um Cdigo


de Barras sejam os danos causados por arranhes na superfcie de impresso ou mesmo a
presena de defeitos que impossibilitam a leitura correta do cdigo.
Ao longo do smbolo, podemos verificar muitas vezes, dois tipos de defeitos
tpicos: vazios, caracterizados por reas claras internas s barras e manchas, caracterizadas
por reas escuras presentes nos espaamentos. A Figura 6.1 ilustra os dois casos tpicos de
defeitos explicados.
74

Para o algoritmo de decodificao do cdigo UPC/EAN, implementado no nosso


trabalho, a faixa extrada (Figura 3.13) proporciona uma tolerncia a esses tipos de defeitos,
pois a

Figura 6.1 Ilustrao de defeitos tpicos encontrados em um Cdigo de


Barras

cada varredura de linha da faixa, uma verificao da quantidade de elementos que compem
a simbologia realizada, a fim de garantir uma confiabilidade de leitura.

6.1.2 Espalhamento de Tinta

Um outro problema bastante persistente na decodificao de Cdigos de Barras


o efeito de espalhamento de tinta (Seo 2.2), que provoca impresses incorretas de barras e
espaamentos. Este espalhamento de tinta tambm denominado ganho de ponto ou de
impresso, que a princpio deve diferir de um valor muito pequeno para mquinas de
impresso distintas, e alm disso devem ser controlveis para qualquer processo de
impresso.
O valor do ganho de ponto possui uma faixa de variao conforme seja o processo
de impresso ou da mquina utilizada. Diversos fatores interferem na determinao do ganho
de ponto, tais como a viscosidade da tinta, porosidade e absoro da superfcie de impresso,
presso da mquina, velocidade de impresso etc. Alguns programas de impresso de
75

Cdigos de Barras aplicam uma tcnica de compensao de espalhamento de tinta,


reduzindo a princpio o ganho de impresso.
Existem calibradores padro destinados a ajustes de impresso, que consistem em
gabaritos com quadrados compostos por linhas paralelas finas que se distanciam
gradativamente para cada quadrado. Estes quadrados so impressos e uma vistoria feita a
fim de determinar se as impresses foram realizadas conforme regras pr-estabelecidas.
Uma forma de se garantir um efeito de espalhamento aceitvel consiste na
uniformidade de larguras de mdulos encontrados para cada elemento varrido (seja barra ou
espao), isto , para cada elemento com nx de largura (n = 1,2,3,4 ; x = largura de mdulo)
os desvios padro para as barras e espaos devem ser calculados e seus valores devero ser
reduzidos e diferirem entre si, de um valor muito pequeno para assegurar uma leitura correta,
pois quanto menor for o valor do desvio padro para barras ou espaos, maior ser a
uniformidade de cada elemento, e quanto menor a diferena entre as medianas das
distribuies de larguras para barras e espaos, menor ser o efeito de espalhamento de tinta.
Este parmetro denominado gradual, pois no impede a realizao correta da
decodificao, apenas indica a intensidade de uma caracterstica do smbolo impresso. Uma
ilustrao de anlise destes parmetros apresentada na Figura 6.2.

p Desvio padro das larguras das


barras
b b Desvio padro das larguras dos
p espaos
_
p Mediana da distribuio de
larguras de barras
_
b- Mediana da distribuio de
larguras de espaos
p b

Esp ndice de espalhamento de tinta


Esp = | p - b |

Figura 6.2 Ilustrao da anlise do ndice de espalhamento


76

6.1.3 Resolu o de Digitaliza o

Diversos so os fatores que levam a uma decodificao incorreta ou at mesmo


impossvel de ser realizada. Inicialmente, a verificao da resoluo na digitalizao deve
ser feita a fim de garantir uma tolerncia eficaz na estimao da largura de um mdulo, ou
seja, da largura do mais estreito elemento presente no smbolo. Caso este valor de largura de
mdulo seja inferior a 4 pixels, um alerta dever ser feito ou mesmo o impedimento de
decodificao dever ser realizado.
O parmetro de resoluo denominado de permisso/impedimento, ou seja,
conforme o resultado da anlise das caractersticas avaliadas, a leitura ser realizada ou no.
Caso o resultado seja desfavorvel leitura, uma mensagem de erro dever ser apresentada.

6.1.4 Distor o das barras

As superfcies mais vulnerveis a problemas de impresso e consequentemente de


leitura so os plsticos, devido possibilidade de deformaes apresentadas em alguns
casos. Atualmente, alguns fabricantes de produtos esto tentando solucionar este problema
atravs do aumento da altura do smbolo, que facilita a leitura por meio de alguns leitores
ticos.
A deformao da superfcie de impresso pode causar a princpio, dois problemas
na representao do smbolo: uma inclinao varivel das barras e espaos, ou um aumento
desordenado entre os elementos.
A inclinao dos elementos poder ser imperceptvel caso seja aplicada de forma
uniformemente distribuda, ou seja, se ocorrer devido a uma fora de cisalhamento, pois
neste caso, a proporo entre as larguras poder permanecer inalterada. As Figuras 6.3 e 6.4
exemplificam os casos citados acima.
77

Figura 6.3 Exemplo de uma distoro por cisalhamento

Figura 6.4 Exemplo de uma distoro desordenada

Para a simbologia UPC/EAN, os elementos podem apresentar 4 larguras possveis,


que so mltiplos da largura de um mdulo. Assim, para cada um dos 4 mltiplos
encontrados na varredura, as larguras nominais so avaliadas e por meio do clculo do
desvio padro (tanto para as barras quanto para os espaos), determinamos a uniformidade
das larguras, que representa a intensidade de deformao do smbolo. Quanto maior a
uniformidade, menor ser a distoro presente no smbolo.

6.1.5 Tolerncia para margens de silncio

Um parmetro importante a ser analisado no processo de decodificao a


tolerncia dada para as margens de silncio dos smbolos.
78

Todas as simbologias de Cdigos de Barras possuem os mesmos elementos


bsicos, embora muitos apresentem aspectos visuais diferentes. As simbologias apresentadas
em nosso trabalho (Code 39, UPC e EAN) possuem os seguintes elementos comuns entre si:

Margem de silncio esquerda


Caractere/Padro de incio
Informao codificada (Dados)
Caractere/Padro de parada
Margem de silncio direita

Cada simbologia apresenta suas caractersticas prprias. As margens de silncio


do Cdigo 39 so da ordem de 11 vezes a largura do elemento mais estreito, tanto no lado
esquerdo como no direito. No cdigo UPC, as margens de silncio esquerda e direita so
idnticas e devem possuir uma largura da ordem de 9 vezes a largura de um mdulo
(elemento mais estreito). Para o cdigo EAN, as margens de silncio esquerda e direita so
estabelecidas na razo de 11 para 7 mdulos. Muitas vezes a decodificao de um smbolo
impossvel de ser realizada quando as tolerncias estipuladas para as margens de silncio no
so seguidas.
79

Captulo 7

Experimentos

Neste captulo apresentamos o resultado de alguns experimentos atravs de


ilustraes dos passos seguidos pelos algoritmos implementados.
Uma verificao de qualidade do smbolo capturado na digitalizao foi feita por
meio de um parmetro que denominamos de Taxa de Recuperao, que consiste na relao
entre a altura da faixa extrada inicialmente e a altura da faixa resultante de sua filtragem
(verificao da quantidade correta de elementos). Este parmetro foi definido como a razo
entre a altura da faixa filtrada e a altura da faixa inicialmente extrada, multiplicado por 100.
Dessa forma, quanto maior a qualidade do smbolo impresso, maior ser o valor da Taxa de
Recuperao, pois as dimenses das alturas inicial e final aproximar-se-o entre si.
Outros parmetros de verificao so avaliados atravs dos desvios-padro das
larguras dos elementos (barras e espaos) encontrados em cada smbolo estudado.

7.1 Exemplo 1

Neste exemplo, a imagem de entrada possui 1170 x 1082 pixels, e ilustra a


digitalizao de dois smbolos presentes em produtos com embalagens plsticas.
Notamos que, embora as digitalizaes apresentem alguns reflexos devido ao
material que compe as embalagens, o threshold de Otsu mostrou-se como uma tcnica
bastante robusta para o processo de limiarizao, proporcionando uma caracterizao eficaz
de ambos os smbolos.
80

Uma vez que a imagem de entrada possui uma quantidade considervel de pixels,
o tempo de execuo verificado foi longo.

Imagem Original

Imagem Inversa da Magnitude do Abertura Morfolgica por um disco


Vetor Gradiente de dimetro 20 pixels
81

Threshold de Otsu Abertura Morfolgica da inversa do


Threshold de Otsu por um elemento
cruz de raio 8

Localizao aproximada dos


Remoo de componentes conexos elementos conexos correspondentes
que tocam as bordas aos smbolos, por meio de uma
anlise de rea
82

Primeiro Smbolo Extrado

Alinhamento do eixo longitudinal


( =59)

Enquadramento do smbolo Threshold de Otsu

Faixa extrada inicialmente Faixa final filtrada

Taxa de Recuperao: 91,67 %


Decodificao: 4 9 0 2 5 5 5 1 2 3 7 2 1
83

Segundo smbolo extrado

Alinhamento do eixo longitudinal


( =150)

Enquadramento do smbolo Threshold de Otsu

Faixa extrada inicialmente Faixa final filtrada

Taxa de Recuperao: 88,51 %


Decodificao: 4 9 0 3 3 3 3 0 1 7 8 7 4
84

7.2 Exemplo 2
Neste exemplo, a imagem de entrada contm 3 smbolos, representados em 1700
x 1383 pixels.

Imagem Inversa da Magnitude


Imagem Original do Vetor Gradiente

Abertura Morfolgica por um Threshold de Otsu


disco de dimetro 20 pixels
85

Abertura Morfolgica da inversa do Remoo de componentes conexos


Threshold de Otsu por um elemento que tocam as bordas
cruz de raio 8

Determinao dos elementos conexos

Faixa Final extrada


Taxa de recuperao: 98,81%
Decodificao: 724385310225
Primeiro smbolo capturado
(=108)
86

Faixa Final extrada


Taxa de recuperao: 98,74%
Segundo smbolo capturado
Decodificao:
( =17)
977141447530

Faixa Final extrada


Terceiro smbolo capturado Taxa de recuperao: 99,36%
( =108) Decodificao:
729180128792

7.3 Exemplo 3

Para um caso onde ocorre manchas no corpo do smbolo, a imagem resultante do


processo de limiarizao de Otsu apresenta-se bastante ruidosa, necessitando de uma
filtragem adicional* para a decodificao correta. Esta filtragem consistiu em uma abertura
morfolgica por um elemento estruturante linha na posio vertical, conforme visto na
imagem subseqente quela que mostra a primeira faixa extrada.
Neste terceiro exemplo, a imagem de entrada possui 700 x 521 pixels, contendo
um smbolo.
87

Imagem Original Imagem Inversa da Magnitude


do Vetor Gradiente

Abertura Morfolgica por um disco


de dimetro 20 pixels Threshold de Otsu

Enquadramento preciso e Captura


do smbolo Alinhamento do eixo longitudinal
( =155)
88

Extrao do smbolo Threshold de Otsu

Extrao da Primeira faixa Filtragem adicional* da primeira faixa

Taxa de recuperao aps a filtragem adicional*: 97,91%


Decodificao:
7891038028004
89

Captulo 8

Concluses

Nosso trabalho descreve uma abordagem para decodificao de cdigos de barras


unidimensionais, usando anlise de imagens.
Ao longo do desenvolvimento de nossa dissertao, elaboramos algoritmos
destinados s etapas de decodificao, tais como captura de um smbolo presente em uma
imagem, anlise de validao do smbolo, alinhamento do eixo longitudinal do smbolo,
verificao de caractersticas relevantes do smbolo, e determinao do dado codificado. Os
algoritmos foram desenvolvidos em linguagem MATLAB, utilizando diversas ferramentas
de morfologia matemtica presentes na SDC Morphology Toolbox .
As imagens de estudo foram digitalizadas em um leitor tico de mesa
convencional, em resoluo tica de 300 dpi, garantiu uma largura de mdulo para cada
simbologia suficiente para uma leitura que proporcionasse a decodificao sem erros para
um smbolo bem impresso.
Por ser um prottipo experimental, nosso objetivo no focou tempo de
processamento competitivo aos dispositivos comuns de leitores de cdigos. O tempo de
processamento para uma imagem de 636 651 pixels, com o smbolo em uma posio
aleatria, foi da ordem de 1 minuto e vinte segundos em um PC Pentium MMX 233 MHz.
Notamos que as imagens analisadas deveriam possuir dimenses elevadas, pois somente
assim garantiam uma estimativa de no mnimo 3 pixels por largura de mdulo, com isso foi
exigido um tempo de processamento elevado, principalmente nas operaes de abertura por
rea, cujo valor de limiar exigido foi alto para localizao precisa do smbolo.

www.mmorph.com
90

Outro gargalo do processo de decodificao foi encontrado no momento de


decodificao das simbologias UPC/EAN, uma vez que exigiu etapas de comparaes a
diversas tabelas e clculo do dgito verificador.

Como ponto de destaque em nossa proposta, citamos:


Operaes simples de anlise de imagens e
Aplicabilidade em processos de decodificao na indstria de automao
comercial, utilizando cmeras CCD de boa resoluo.

O ponto deficiente est centralizado no tempo de processamento exigido pelo


algoritmo, decorrente da linguagem de programao e sobretudo do tamanho das imagens
capturadas.
Como sugesto de trabalho de continuidade, destacamos a possibilidade de
migrao do algoritmo para uma outra linguagem que permita um tempo de processamento
reduzido.
91

Referncias

[1] Louis J. Galbiati, Jr. , Machine Vision and Digital Image Processing Fundamentals,
Englewood Cliffs: Prentice Hall, 1990.
[2] Fbio Grossmann e Mauro Luiz Zyngier, Cdigo de barras: da teoria prtica, So
Paulo : Nobel, 1991.
[3] T. Pavlidis, J. Swartz, and Y. P. Wang, Fundamentals of Bar Code Information
Theory, IEEE Computer, pp. 74-86, Apr. 1990.
[4] Zuguang Cai, A New Decode Algorithm for Binary Bar Codes, Pattern Recognition
Letters, 15 , 1994, pp.1191-1199.
[5] J. S. Chen and G. Medioni, Detection, localization and estimation of edges, IEEE
Trans. Pattern. Anal. Machine Intell., vol.11, pp. 191-198, 1989.
[6] E. Joseph and T. Pavlidis, Bar Code Waveform Recognition Using Peak Locations,
IEEE Trans. Pattern. Anal. Machine Intell., vol 16, n 6, June, 1994.
[7] Vera Lcia Pinheiro da Silva, Aplicaes Prticas do Cdigo de Barras, So Paulo:
Nobel, 1989.
[8] Roberto A. Lotufo, Inspeo Visual Automtica (Uma Abordagem computacional
atravs de estudos de casos) Leitor de Cdigo de Barras , IA-330 Tpicos em
Computao, 1 semestre 1991, Notas de Aula
[9] N. Otsu, A Threshold Selection Method from grey-level histograms. IEEE Trans.
Systems Man. Cybernet., 9, 62-66, 1979
[10] R. C. Gonzalez and R. E. Moods, Digital Image Processing , Addison-Wesley
Publishing Company, Inc.
[11] S. Beucher and F. Meyer, The Morphological Approach to Segmentation: The
Watershed Transformation, In E. R. Dougherty, editor, Mathematical Morphology in
Image Processing, 433-481. Marcel Dekker, New York City, New York, 1993.
92

[12] J. Goutsias and S. Batman, Morphological Methods for Biomedical Image Analysis,
Handbook of Medical Imaging: Vol.3 Progress in Image Processing and Analysis.
SPIE Optical Engineering Press, 1999.
[13] Zuguang Cai, A New Decode Algorithm for Binary Bar Codes, Pattern Recognition
Letters, 15 , 1191-1199, December 1994.
[14] E. Joseph and T. Pavlidis, Peak Classifier for bar code waveforms, SUNY at Stony
Brook, 0-8186-2915-0/92 1992 IEEE.
[15] T. Pavlidis , J. Swartz, and Ynjiun P. Wang, Information Encoding with Two-
Dimensional Bar Codes, IEEE Computer, pp. 18-28, June. 1992
93

Apndice A

Tabela de Bandeiras para o Cdigo EAN


00-13 Estados Unidos e Canad 609 Maurcio
20-29 Reservado ao uso local do 611 Marrocos
estabelecimento comercial 613 Arglia
30 -37 Frana 619 Tunsia
400-440 Alemanha 622 Egito
45 Japo 625 Jordan
46 Federao Russa 626 Ir
471 Taiwan 64 Finlndia
474 Estnia 690-692 China
475 Latvia 70 Noruega
477 Litunia 729 Israel
479 Sri Lanka 73 Sucia
480 Filipinas 740-745 Guatemala, El Salvador,
482 Ucrnia Honduras, Nicargua,
484 Moldvia Costa Rica e Panam
485 Armnia 746 Repblica Dominicana
486 Georgia 750 Mxico
487 Casaquisto 759 Venezuela
489 Hong Kong 76 Sua
49 Japo 770 Colmbia
50 Reino Unido 773 Uruguai
520 Grcia 775 Per
528 Lbano 777 Bolvia
529 Chipre 779 Argentina
531 Macednia 780 Chile
535 Malta 784 Paraguai
539 Irlanda 785 Per
54 Blgica & Luxemburgo 786 Equador
560 Portugal 789 Brasil
569 Islndia 80 -83 Itlia
57 Dinamarca 84 Espanha
590 Polnia 850 Cuba
594 Romnia 858 Eslovquia
599 Hungria 859 Thecoslovquia
600-601 frica do Sul 860 Iugoslvia
94

869 Turquia
87 Pases Baixos
880 Coria do Sul
885 Tailndia
888 Cingapura
890 ndia
893 Vietn
899 Indonsia
90 -91 ustria
93 Austrlia
94 Nova Zelndia
955 Malsia
977 ISSN (International Standard Serial Number)
978 ISBN (International Standard Book Number)
979 ISMN (International Standard Music Number)
980 Recibos de reembolso
99 Cupons
95

Apndice B

Algoritmos implementados

Decodifica o da simbologia EA N / UPC :

Captura do smbolo e decodifica o:


warning off;
mmfreedom(2);

f=mmreadgray('nome_do_arquivo_da_imagem');

original=f;
[fmg,ft,ht]=sobel(f,50);
faux=mmneg(fmg);

f1=mmopen(faux,mmsedisk(10));

ot=iaotsu(f1);
f1o=(f1>ot);

f2o=mmopen(mmneg(f1o),mmsecross(8));

f2o2=mmneg(f2o);

hole1=mmclohole(f2o2);

blobsimbol=mmsubm(hole1,f2o2);

simbol=double(mmareaopen(blobsimbol,39000));

f7=mmlabel(simbol);
total=double(max(max(f7)));

if total==0
close all;
disp(' ');
disp('------------------------------------------------------------');
disp(' ATENO !!! ');
disp('A digitalizao da imagem que contm o smbolo foi realizada');
disp(' em uma resoluo inferior a 300 pontos por polegada. ');
disp(' ');
disp(' Realize uma nova digitalizao, aumentando a resoluo. ');
disp(' ');
disp(' ((( NO FOI POSSVEL REALIZAR A LEITURA ))) ');
disp('------------------------------------------------------------');
else
96

for n=1:total

f7a=(f7==n);
box=double(mmblob(f7a,'boundingbox','data'));

[fh fw]=size(f);
if (box(1,1)-30)<0 |(box(1,3)+30)>fh | (box(1,2)-30)<0 | (box(1,4)+30)>fw
disp(' ');
disp('-----------------------------------------------------');
disp(' ATENO !!! ');
disp(' O smbolo encontra-se prximo s bordas da imagem. ');
disp(' ');
disp(' Realize uma nova digitalizao. ');
disp(' ');
disp(' ((( NO FOI POSSVEL DECODIFICAR O SMBOLO ))) ');
disp('-----------------------------------------------------');
else

img=f(box(1,1)-30:(double(box(1,3))+30),box(1,2)-
30:(double(box(1,4))+30));

mask=simbol(box(1,1)-30:(double(box(1,3))+30),box(1,2)-
30:(double(box(1,4))+30));

place=double(img).*double(mask);

% INCLINAO DO CDIGO (Sobel) :

[fmag, ftheta, htheta]=sobel(place,50);

% Extrao de picos indesejados no histograma de Sobel:


h=mmopen(htheta,mmsecross(6));

% Mximo pico:
hm=max(h(:));

% Determinao Pontual do mximo pico no histograma:


h1=mmthreshad(h,hm,hm);

% Interseco entre o ponto de mximo e a curva do histograma:


hh=mmintersec(mmgray(h1,'uint16'),htheta);

% Localizao do ngulo cujo valor de mximo no histograma verificado:


[hm theta]=max(hh(:));

%Alinhamento da mscara final:


align_mask=imrotate(mask,-theta);

%Imagem complemento da mscara


align_mask_comp=mmneg(align_mask);
97

% Alinhamento do smbolo:
alinhamento1=imrotate(place,-theta);

alinhamento2=mmthreshad(alinhamento1,1,255);
alinhamento=uint8(mmsymdif(alinhamento1,mmgray(alinhamento2,
'uint8',255)));
alinhamento=mmneg(alinhamento);

imwrite(alinhamento,'resultado8.jpg','jpg');

% Rotulao da Mscara Final


f8=mmlabel(align_mask);

box2=double(mmblob(f8,'boundingbox','data'));
hb2=(box2(1,3)-box2(1,1))+1;
wb2=(box2(1,4)-box2(1,2))+1;

% Plano de fundo branco:


scaux=255*(ones(hb2,wb2+66));
scaux(:,34:end-
33)=alinhamento(box2(1,1):(double(box2(1,3))),box2(1,2):(double(box2(1,4))
));
img2=scaux;

% Captura de uma faixa central ao corpo do smbolo:


[hmk wmk]=size(align_mask);
auxbox=align_mask(fix(4*hmk/9):fix(5*hmk/9),:);
figure;mmshow(auxbox);
box3=double(mmblob(auxbox,'boundingbox','data'));

imgextra=imrotate(img,-theta);
imgextra2=imgextra(box2(1,1):box2(1,3),:); % Parte da imagem original
[hx wx]=size(imgextra2);
stripeaux=imgextra2(fix(4*hx/9):fix(5*hx/9),:);

stot=iaotsu(stripeaux);
stoto=(stripeaux>stot);

colaux1=stripeaux(:,box3(1,2)-44:box3(1,2)); % Fatia da BG esquerda


colaux2=stripeaux(:,box3(1,4):box3(1,4)+44); % Fatia da BG direita
colaux1=colaux1>iaotsu(colaux1);
colaux2=colaux2>iaotsu(colaux2);

qualidade_margem_e=(1-(sum(sum(abs(double(colaux1)-
1)))/(size(colaux1,1)*(size(colaux1,2)))))*100
qualidade_margem_d=(1-(sum(sum(abs(double(colaux2)-
1)))/(size(colaux2,1)*(size(colaux2,2)))))*100
98

%*********************************************************************
% DECODIFICAO
%*********************************************************************
[codigo,inconsistencia]=upcia4(img2);

if inconsistencia==0
dado=codigo'
else
img2=imrotate(img2,180);
[codigo,inconsistencia]=upcia4(img2);
if inconsistencia==0
dado=codigo'
else
disp('
');
disp('-----------------------------------------------------');
disp(' ATENO !!! ');
disp(' Ocorreram problemas na deteco do smbolo ');
disp(' ');
disp(' Realize uma nova digitalizao. ');
disp(' ');
disp(' ((( NO FOI POSSVEL DECODIFICAR O SMBOLO ))) ');
disp('-----------------------------------------------------');
error(' ');
end

end
end
end
end

-------------------------

function [codigo,inconsistencia,faixa]=upcia4(imagem)

mmfreedom(2);
% Inicializao dos vetores:
codigo=[];
erro=0;
v13=[];
d13=[];
desvio=[];
black1=[];
black2=[];
acumblack1=[];
acumblack2=[];
white1=[];
white2=[];
acumwhite1=[];
acumwhite2=[];
99

f=imagem;

[y x]=size(f);

[t,eta]=iaotsu(f); % THRESHOLD DE OTSU


f=(f>t); % IMAGEM LIMIARIZADA

faixa=f(round((1/4)*(y)):round((3/4)*(y)),:);

[yf xf]=size(faixa);

nlabel=61;
nlabel2=61;
lfaixa=[];

%<<<<<< Filtragem Adicional* PARA SMBOLOS COM MANCHAS >>>>>>>


%fn=mmneg(faixa);
%se1=ones((yf/2),2);
%se2=mmimg2se(se1); % Elemento estruturante
%fno=mmopen(fn,se2);% Filtragem para remoo de junes
% entre barras (elementos pretos).
%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

for lyf=1:yf
lfaixa2=mmlabelflat(faixa(lyf,:)); % Rotulao por "mmlabelflat"
nlabel=double(max(max(lfaixa2))); % Quantidade de rtulos
% do empilhamento

if nlabel==61 & nlabel2==61


lfaixa=[lfaixa;faixa(lyf,:)];
lfaixa3=mmlabelflat(lfaixa);
nlabel2=double(max(max(lfaixa3)));

else
end
end

[ylf xlf]=size(lfaixa);

figure;mmshow(lfaixa);truesize;

if size(lfaixa,1)~=1

lfaixa=lfaixa(1:end-1,:);

[hf lf]=size(lfaixa);

qualidade=(hf/yf)*100

llfaixa=mmlabelflat(lfaixa); % Rotulao

hlfaixa=mmhistogram(llfaixa); % Histograma da rotulao


100

dist2=[];
largura=(double(hlfaixa)/(hf))'; % Larguras em ponto flutuante

[yd xd]=size(largura);

for i=1:xd
dist2=[dist2,repmat(rem(i,2),1,round(largura(1,i)))];
end

linha=(dist2==0);

lflinha=mmlabelflat(linha); % Rotulao por "mmlabelflat"

hlflinha=mmhistogram(lflinha); % Histograma da rotulao

hhlflinha=mmhistogram(hlflinha); % Funo distribuio

[dmax imax]= max(double(hhlflinha)); %[valor mx n do rtulo]

disp(' ');
disp('---------------------------------------- ');
fprintf('Um mdulo tem aproximadamente: %d pixels\n', imax);
disp('---------------------------------------- ');

aolinha=mmareaopen(linha, 6 * imax); % Abertura p/ extrair zona


% de silncio
k=max(max(mmlabelflat(aolinha)));

if k~=3
disp(' ');
disp(' (((( ATENO: )))) ');
disp(' ');
disp('Margem de silncio fora da especificao ');
disp(' ou Threshold inadequado ');
disp('---------------------------------------- ');
error('Extrao da zona de silncio com problemas.');
else

localbar=mmneg(aolinha); % Local das barras

linha2=linha(localbar);

lbll2=mmlabelflat(linha2);

k2=max(max(mmlabelflat(linha2)));
if k2~=59
disp(' ');
disp('ATENO: ');
disp('-------- ');
disp('Quantidade de barras fora da especificao !!!');
disp(' O Cdigo pode estar danificado. ');
error(' ');

else
101

%t1 t2 c1 c2 c3 c4
mb=...
[4 4 1 2 2 2 ;
3 3 2 2 1 2 ;
5 5 1 1 4 1 ;
2 4 2 3 1 1 ;
3 5 1 3 2 1 ;
2 2 4 1 1 1 ;
4 4 2 1 3 1 ;
3 3 3 1 2 1 ;
4 2 2 1 1 3 ;
5 3 1 1 2 3 ];

%t1 t2 c1 c2 c3 c4 t1 t2
mc=...
[3 4 2 2 2 1 4 4 ;
4 3 2 1 2 2 3 3 ;
2 5 1 4 1 1 5 5 ;
5 4 1 1 3 2 2 4 ;
4 5 1 2 3 1 3 5 ;
5 2 1 1 1 4 2 2 ;
3 4 1 3 1 2 4 4 ;
4 3 1 2 1 3 3 3 ;
3 2 3 1 1 2 4 2 ;
2 3 3 2 1 1 5 3 ];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% CAMPO ESQUERDO
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

largura=largura(3:end-1);

for n=4:4:24

C1=double(largura(1,n));
C2=double(largura(1,n+1));
C3=double(largura(1,n+2));
C4=double(largura(1,n+3));

t1u=C3+C4;
t1e=C3+C4;
t2=C2+C3;

fator=(C1+C2+C3+C4)/7; % mdulo estimado para o dgito

rC1=C1/fator; % Mdulos ocupados pelo 1 Espao


rC2=C2/fator; % Mdulos ocupados pela 1 Barra
rC3=C3/fator; % Mdulos ocupados pelo 2 Espao
rC4=C4/fator; % Mdulos ocupados pela 2 Barra
102

rt1=rC3+rC4;
rt2=rC2+rC3;

rcsrate=(rC1+rC3)/(rC2+rC4);

vc=[rt1 rt2 rC1 rC2 rC3 rC4];

%________________________________________________________________

% 1 Classificao

dist1=zeros(10,1);
dist2=zeros(10,1);
for i=1:10
dist1(i)=sum((abs((mc(i,1:end-2)-vc))).^2); %Tabela A
dist2(i)=sum((abs((mb(i,1:end)-vc))).^2); %Tabela B
end
minA=min(min(dist1));
minB=min(min(dist2));
if minA<minB
v13=[v13 1];
ls=find(dist1==minA);
troubles1=[4/3 2/5]; % (c1+c3)/(c2+c4)
else
v13=[v13 double(0)];
ls=find(dist2==minB);
troubles1=[3/4 5/2]; % (c1+c3)/(c2+c4)
end

if size(ls)==1 % Certificao de que no h 2 distncias iguais

if ls==1|ls==2|ls==7|ls==8

% 2 Classificao

dif=((abs((troubles1-rcsrate))).^2);

ls2=find(dif==min(min(dif)));

if size(ls2)==1 % Certificao de que no h 2 distncias iguais

%---------Problemas da simbologia--------

if ls==1|ls==7

if ls2==1
codigo=[codigo 1];
else
codigo=[codigo 7];
end
else

if ls==2|ls==8
103

if ls2==1
codigo=[codigo 2];
else
codigo=[codigo 8];
end
end
end
else % Caso ls2 seja 2
erro=1;
disp('A leitura apresentou redundncias de decodificao');
disp(' na banda esquerda !!!');
end
else
codigo=[codigo ls];
end

else % Certificao que h 2 distncias iguais no 2 teste


erro=1;
disp('A leitura apresentou redundncias de decodificao');
disp(' na banda esquerda !!!');
end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% CAMPO DIREITO
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for n=33:4:53

C1=double(largura(1,n));
C2=double(largura(1,n+1));
C3=double(largura(1,n+2));
C4=double(largura(1,n+3));

fator=(C1+C2+C3+C4)/7; % mdulo estimado para o dgito

rC1=C1/fator; % Mdulos ocupados pela 1 Barra


rC2=C2/fator; % Mdulos ocupados pelo 1 Espao
rC3=C3/fator; % Mdulos ocupados pela 2 Barra
rC4=C4/fator; % Mdulos ocupados pelo 2 Espao

rt1=rC1+rC2;
rt2=rC2+rC3;

rcsrate=(rC1+rC3)/(rC2+rC4);

vc=[rC1 rC2 rC3 rC4 rt1 rt2];

%________________________________________________________________

% 1 Classificao

dist=zeros(10,1);
for i=1:10
104

dist(i)=sum((abs((mc(i,3:end)-vc))).^2);
end
ls=find(dist==min(min(dist)));

if size(ls)==1 % Garantia de 1 distncia mnima apenas

if ls==1|ls==2|ls==7|ls==8 % Problemas da simbologia

% 2 Classificao

troubles1=[4/3 2/5];

dif=((abs((troubles1-rcsrate))).^2);

ls2=find(dif==min(min(dif)));

if size(ls2)==1 % Certificao de que no h 2 distncias iguais

%---------Problemas da simbologia--------

if ls==1|ls==7
if ls2==1
codigo=[codigo 1];
else
codigo=[codigo 7];
end
else
if ls==2|ls==8

if ls2==1
codigo=[codigo 2];
else
codigo=[codigo 8];
end
end
end
else % Caso ls2 seja 2
erro=1;
disp('A leitura apresentou redundncias de decodificao');
disp(' na banda direita !!!');
end
else % Caso os nmeros detetados no forem 1, 2, 7 ou 8
codigo=[codigo,ls];
end
else % Certificao que h 2 distncias iguais no 2 teste
erro=1;
disp('A leitura apresentou redundncias de decodificao');
disp(' na banda direita !!!');
end
end
end
end
if erro~=1
codigo=codigo;
105

else
codigo=[];
end

else % Caso a quantidade de linhas de lfaixa seja realmente " 1 "


codigo=[];
disp(' ');
disp(' ATENO !!! ');
disp(' ');
disp(' A digitalizao do cdigo est excessivamente ruidosa !!! ');
disp(' ');
disp('');
end

m13=...
[1 1 0 1 0 0;...
1 1 0 0 1 0;...
1 1 0 0 0 1;...
1 0 1 1 0 0;...
1 0 0 1 1 0;...
1 0 0 0 1 1;...
1 0 1 0 1 0;...
1 0 1 0 0 1;...
1 0 0 1 0 1;...
1 1 1 1 1 1];

rmv13=repmat(v13,10,1);
dif13=mmcmp(uint8(rmv13),'==',uint8(m13));
d13=find(sum(dif13,2)==6);

if isempty(d13)
inconsistencia=1
disp(' Problemas no smbolo ');
disp('FALHA NA TENTATIVA DE LEITURA');
else

codigo=[d13 codigo];

% Dgito Verificador:
di=codigo(1,1)+codigo(1,3)+codigo(1,5)+codigo(1,7)+codigo(1,9)+codigo(1,11
);
dp=codigo(1,2)+codigo(1,4)+codigo(1,6)+codigo(1,8)+codigo(1,10)+codigo(1,1
2);
vd1=(dp*3)+di;
vd2=fix(vd1/10);
vd=rem(((vd2+1)*10),vd1);

if double(codigo(1,13))==vd
inconsistencia=0
else
inconsistencia=1
end

%******************************
106

codigoaux=codigo(1,2:end);
for b=1:6
dig=double(codigoaux(1,b));
largaux=largura(1,4*b:(4*b)+3);
tab=double(v13(b));
if tab==1 % Uso da tabela A
acum=zeros(4,4);
acumblack1=zeros(4,4);
acumwhite1=zeros(4,4);
matriz_a=[mc(dig,3:end-2)];

for z=1:4
acum(matriz_a(1,z),z)=largaux(1,z);
desvio=[desvio acum];
if rem(z,2)==0
acumblack1(matriz_a(1,z),z)=largaux(1,z);
black1=[black1 acumblack1];
else
acumwhite1(matriz_a(1,z),z)=largaux(1,z);
white1=[white1 acumwhite1];
end
end
else % Uso da tabela B

acum=zeros(4,4);
matriz_b=[mb(dig,3:end)];
for z=1:4
acum(matriz_b(1,z),z)=largaux(1,z);
desvio=[desvio acum];
if rem(z,2)==0
acumblack1(matriz_b(1,z),z)=largaux(1,z);
black1=[black1 acumblack1];
else
acumwhite1(matriz_b(1,z),z)=largaux(1,z);
white1=[white1 acumwhite1];
end
end
end
end

for b=7:12
dig=double(codigoaux(1,b));
largaux=largura(1,(4*b)+5:(4*b)+8);
acum=zeros(4,4);
matriz_a=[mc(dig,3:end-2)];
acumblack2=zeros(4,4);
acumwhite2=zeros(4,4);
for z=1:4
acum(matriz_a(1,z),z)=largaux(1,z);
desvio=[desvio acum];
if rem(z,2)==1
acumblack2(matriz_a(1,z),z)=largaux(1,z);
black2=[black2 acumblack2];
else
107

acumwhite2(matriz_a(1,z),z)=largaux(1,z);
white2=[white2 acumwhite2];
end
end
end

guarda_aux=[largura(1,1:3) largura(1,28:32) largura(1,57:59)];


guarda=zeros(4,11);
guarda(1,1:11)=guarda_aux;

guardablack1=[largura(1,1:2:3) largura(1,29:2:31) largura(1,57:2:59)];


barblack1=zeros(4,6);
barblack1(1,1:6)=guardablack1;
black=[black1 black2 barblack1];
black=black';
bk1=black(find((black(:,1)~=0)),1);
bk2=black(find((black(:,2)~=0)),2);
bk3=black(find((black(:,3)~=0)),3);
bk4=black(find((black(:,4)~=0)),4);

std_black=[std(bk1,0,1) std(bk2,0,1) std(bk3,0,1) std(bk4,0,1)]

guardawhite1=[largura(1,2) largura(1,28:2:32) largura(1,58)];


barwhite1=zeros(4,5);
barwhite1(1,1:5)=guardawhite1;
white=[white1 white2 barwhite1];
white=white';
wt1=white(find((white(:,1)~=0)),1);
wt2=white(find((white(:,2)~=0)),2);
wt3=white(find((white(:,3)~=0)),3);
wt4=white(find((white(:,4)~=0)),4);
std_white=[std(wt1,0,1) std(wt2,0,1) std(wt3,0,1) std(wt4,0,1)]

desvio=[desvio guarda];
desv=desvio';

l1=desv(find((desv(:,1)~=0)),1);
l2=desv(find((desv(:,2)~=0)),2);
l3=desv(find((desv(:,3)~=0)),3);
l4=desv(find((desv(:,4)~=0)),4);

std_distorcao=[std(l1,0,1) std(l2,0,1) std(l3,0,1) std(l4,0,1)]

nlarg1=size(find(desvio(1,:)),2);
nlarg2=size(find(desvio(2,:)),2);
nlarg3=size(find(desvio(3,:)),2);
nlarg4=size(find(desvio(4,:)),2);

media1=sum(desvio(1,:))/nlarg1;
media2=sum(desvio(2,:))/nlarg2;
media3=sum(desvio(3,:))/nlarg3;
media4=sum(desvio(4,:))/nlarg4;

medias=[1 media1 ; 2 media2 ; 3 media3 ;4 media4]


108

%********************************
occur10=find(codigo==10);
codigo(occur10)=0;

end % Final "isempty(d13)"

Decodifica o da simbologia Code 39:

imagem='nome_do_arquivo_da_imagem';

f=mmreadgray(imagem); % Leitura da imagem


[linha,padrao]=leitura(f);
[decode]=decod(padrao)

-------------------------

function [linha,padrao]=leitura(f)
mmfreedom(2);
padrao=[1];
[y x]=size(f);

b=f>(iaotsu(f)); % Threshold

linha=[b(fix(y/3),:)]; % Linha de anlise

lflinha=mmlabelflat(linha);

mxlf=double(max(max(lflinha)));
sile=double(find(lflinha==1));
sild=double(find(lflinha==mxlf));
mxs=double(max(sile)+1);
mns=double(min(sild)-1);

area=mmhistogram(lflinha);
h=mmhistogram(area);
[dmax imax]= max(double(h));
fprintf('Estimativa da barra fina : %d pixels\n', imax);

aolinha=mmareaopen(linha, 5 * imax);
laolinha=mmlabelflat(aolinha);
mxll=max(max(laolinha));
if mxll~=3
error('O smbolo est intensamente danificado !!!');
else

[yl xl]=size(linha);

rotbarras=(double(lflinha(1,(mxs):(mns)))-1);

mxr=max(uint8(rotbarras));
109

h=mmhistogram(rotbarras);
h=double(h);
h=[h;1];
haux=h;

[hh wh]=size(h);

for n=2:10:hh
h(n:n+9)=sort(h(n:n+9));
mnh=min(h(n+7:n+9));
for i=n:n+9
valuebar=abs(rem(i,2));
if haux(i)>=mnh
padrao=[padrao repmat(valuebar,1,3)];
else
padrao=[padrao valuebar];
end
end
end

end
[hp wp]=size(padrao);
padrao=padrao(1,17:wp-17);

-------------------------

function [decode]=decod(t)
k=[t];
decode=[];
erro=0;
cp=['1234567890abcdefghijklmnopqrstuvwxyz-. $/+%']';

m=[ 1 0 0 0 1 0 1 1 1 0 1 0 1 0 0 0;
1 0 1 0 0 0 1 1 1 0 1 0 1 0 0 0;
1 0 0 0 1 0 0 0 1 1 1 0 1 0 1 0;
1 0 1 0 1 1 1 0 0 0 1 0 1 0 0 0;
1 0 0 0 1 0 1 1 1 0 0 0 1 0 1 0;
1 0 1 0 0 0 1 1 1 0 0 0 1 0 1 0;
1 0 1 0 1 1 1 0 1 0 0 0 1 0 0 0;
1 0 0 0 1 0 1 1 1 0 1 0 0 0 1 0;
1 0 1 0 0 0 1 1 1 0 1 0 0 0 1 0;
1 0 1 0 1 1 1 0 0 0 1 0 0 0 1 0;
1 0 0 0 1 0 1 0 1 1 1 0 1 0 0 0;
1 0 0 0 1 0 1 0 1 1 1 0 1 0 0 0;
1 0 0 0 1 0 0 0 1 0 1 1 1 0 1 0;
1 0 1 0 1 0 0 0 1 1 1 0 1 0 0 0;
1 0 0 0 1 0 1 0 0 0 1 1 1 0 1 0;
1 0 1 0 0 0 1 0 0 0 1 1 1 0 1 0;
1 0 1 0 1 0 1 1 1 0 0 0 1 0 0 0;
1 0 0 0 1 0 1 0 1 1 1 0 0 0 1 0;
1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 0;
110

1 0 1 0 1 0 0 0 1 1 1 0 0 0 1 0;
1 0 0 0 1 0 1 0 1 0 1 1 1 0 0 0;
1 0 1 0 0 0 1 0 1 0 1 1 1 0 0 0;
1 0 0 0 1 0 0 0 1 0 1 0 1 1 1 0;
1 0 1 0 1 0 0 0 1 0 1 1 1 0 0 0;
1 0 0 0 1 0 1 0 0 0 1 0 1 1 1 0;
1 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0;
1 0 1 0 1 0 1 0 0 0 1 1 1 0 0 0;
1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0;
1 0 1 0 0 0 1 0 1 0 0 0 1 1 1 0;
1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 0;
1 0 0 0 1 1 1 0 1 0 1 0 1 0 0 0;
1 0 1 1 1 0 0 0 1 0 1 0 1 0 0 0;
1 0 0 0 1 1 1 0 0 0 1 0 1 0 1 0;
1 0 1 1 1 0 1 0 0 0 1 0 1 0 0 0;
1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 0;
1 0 1 1 1 0 0 0 1 0 0 0 1 0 1 0;
1 0 1 1 1 0 1 0 1 0 0 0 1 0 0 0;
1 0 0 0 1 1 1 0 1 0 1 0 0 0 1 0;
1 0 1 1 1 0 0 0 1 0 1 0 0 0 1 0;
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 0;
1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0;
1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0;
1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0];

for i=1:16:size(k,2)

comp=mmcmp(uint16(double(m)),'==',uint16(double(repmat(k(1,i:i+15),43,1))));
[x]=find(sum(comp,2)==16);

if any(sum(comp,2)==16)
decode=[decode cp(x(1),1)];
else
erro=erro+1;
invalido=k(1,i:i+15);
disp([' ']);
disp([' Padrao Invlido < 'int2str(invalido) ' >']);
disp([' ']);

end
end

if ~erro
disp([' ']);
disp([' Decodificacao < 'decode ' >']);
disp([' ']);
end

Anda mungkin juga menyukai