Está en la página 1de 70

Ingeniera Inform

atica
Proyectos Inform
aticos (E80)

Localizaci
on y decodificaci
on de c
odigos de barras
en im
agenes digitales

Proyecto presentado por:


Martnez
Vicente Castello

y dirigido por:
Vicente Javier Traver Roig

Castellon de la Plana, Julio de 2005

ii

Resumen
Esta memoria describe un metodo para la localizacion y posterior decodificacion de codigos de
barras presentes en imagenes digitales. El codigo de barras puede aparecer en cualquier posici
on
y orientacion dentro de la imagen, con lo cual debemos ser capaces de detectarlo y rectificar su
orientacion, para as poder decodificarlo de forma correcta.
Una tecnica que se presenta, debido a que los codigos de barras poseen unas caractersticas
muy definidas, como un metodo adecuado para la localizacion de un codigo de barras dentro
de una imagen es la deteccion de bordes. Ademas, como los puntos de borde pertenecientes al
codigo presentaran una orientacion similar, el objetivo sera de alguna forma homogeneizar esta
zona donde se encuentra el codigo, extendiendo el valor de la orientacion obtenido de los puntos
de borde a los que no lo son. A continuacion, debido a este proceso de expansion de la orientaci
on
conseguiremos un conjunto de regiones candidatas, de las cuales debemos ser capaces de poder
elegir una de ellas como susceptible de contener el codigo. A partir de esta region debemos
calcular la orientacion que presentan los puntos de borde de la misma, para poder rectificar
as la imagen. Una vez conseguida una subimagen centrada en el codigo intentamos decodificar
este con exito, basandonos en lo que conocemos del tipo de codificacion en concreto.
Por u
ltimo comentar que durante toda la memoria se presentan los resultados que se van
consiguiendo para cada una de las fases en las que se divide el metodo, ademas de una serie de
experimentos para reforzar la comprension del mismo o recalcar ciertos aspectos que se creen de
interes.

iii

iv

Agradecimientos
En unas pocas palabras quisiera agradecer a una serie de personas la ayuda que me han presta
do en la realizacion de este proyecto. Estas
son Ma Angeles Lopez (por su implementacion del
detector de bordes de Canny), Ra
ul Montoliu (por su codigo para el etiquetado de componentes
conexas) y Vctor Jimenez (por sus ideas acerca de posibles estrategias a seguir para la decodificacion), sin los cuales el esfuerzo realizado hubiese sido enormemente mayor. Por u
ltimo y no
por ello menos importante, agradecer en gran medida a mi director, Javier Traver, el tiempo
que me ha dedicado y la paciencia que ha tenido conmigo, ya que sin su colaboracion no hubiese
podido afrontar este proyecto. Simplemente, muchas gracias.

vi

Indice general

1. Introducci
on
1.1. Motivacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Organizacion de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Trabajos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. C
odigos de barras
2.1. Introduccion . . . . . . . .
2.2. Definicion . . . . . . . . .
2.3. Historia . . . . . . . . . .
2.4. Ventajas e inconvenientes
2.5. Aplicaciones . . . . . . . .
2.6. Clases de codigos . . . . .
2.7. Dispositivos de escritura y

1
1
1
2

.
.
.
.
.
.
.

7
7
7
8
10
10
10
11

3. Detecci
on de bordes
3.1. Tecnicas de localizacion de codigos de barras . . . . . . . . . . . . . . . . . . . .
3.2. Detector de bordes de Canny . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15
15
16
16

4. Detecci
on de regiones
4.1. Idea general . . .
4.2. Procedimiento . .
4.3. Ejemplo . . . . .

candidatas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19
19
19
21

5. Etiquetado y filtrado de regiones


5.1. Etiquetado de componentes conexas . . . . . . . . . . . . . . . . . . . . . . . . .
5.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23
23
23
25

6. Estimaci
on de la orientaci
on y rectificaci
on
6.1. Idea general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31
31
31

7. Decodificaci
on
7.1. Introduccion . . . . .
7.2. Procedimiento . . . .
7.3. Resultados . . . . . .
7.4. Analisis de robustez

33
33
34
37
39

.
.
.
.

.
.
.
.

.
.
.
.

. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
lectura de

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
codigos de barras

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

vii

Indice general
8. Sistema experimental
8.1. Informacion general .
8.2. Restricciones . . . . .
8.3. Valores por defecto . .
8.4. Tiempo de ejecucion .
8.5. Duracion del proyecto

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

45
45
46
46
47
47

9. Conclusiones

49

A. Detector de bordes de Canny

51

B. Algoritmo cl
asico de etiquetado de componentes conexas

53

C. M
etodo de Otsu

55

D. Caractersticas del c
odigo EAN-13

57

viii

1. Introducci
on
1.1.

Motivaci
on

Hoy en da los codigos de barras estan muy presentes en nuestro quehacer diario, ya que
nos aparecen en los supermercados, tiendas de toda clase, en los libros de las bibliotecas, etc.,
debido a que permiten obtener una especificacion u
nica de un producto o material en concreto.
Sin embargo no debemos olvidar que los codigos de barras necesitan de instrumentos que puedan
leerlos, al igual que de un software que permita captar y procesar la informacion.
Ademas en entornos controlados, las camaras pueden ser usadas para la identificacion de
objetos, es decir, si los objetos de nuestro interes presentan etiquetas de codigos de barras en
una superficie visible, entonces un simple sistema de camaras portatiles puede reconocer el c
odigo
de barras en el entorno y proporcionar al usuario informacion sobre el objeto etiquetado [26].
Por todo ello este proyecto intenta ofrecer un metodo de localizacion de un codigo de barras
dentro de una imagen, para su posterior decodificacion. Se ha utilizado una serie de procedimientos que nos han permitido conseguir nuestro objetivo y que se explican con detalle posteriores
captulos de esta memoria.
Como es obvio, hay una gran variedad de codigos de barras, pero en este proyecto nos hemos
centrado en una clase en concreto, el codigo EAN (European Article Number ) y mas concretamente en su version EAN-13 [20], que aunque dicho de esta forma no nos suene mucho, es uno de
los codigos mas presentes en nuestras vidas, ya que se utiliza en una gran cantidad de productos
de todo tipo, desde cualquiera de los artculos presentes en un supermercado hasta toda clase
de libros. Es en este u
ltimo uso donde nos centraremos, ya que los libros se codifican basandose
en un sistema internacional de numeracion, el ISBN (International Standard Book Number ) [9],
el cual utiliza para su codificacion el codigo EAN-13.
Si sabemos que los dgitos que encontramos normalmente impresos junto a las barras y espacios
de un codigo de barras suelen ser aquellos codificados dentro de este, por que no leer estos dgitos
en lugar de decodificar estas barras y espacios. La razon principal es que, incluso con los modernos
sistemas de reconocimiento optico de caracteres (OCR, Optical Character Recognition), no es
posible identificar las cifras de un codigo numerico con la suficiente rapidez, facilidad y fiabilidad
que se requiere y por tanto no queda otra solucion mas que representar el codigo mediante
smbolos facilmente legibles por el ordenador, empleando sus sistemas binarios.
Otra pregunta que puede surgir es por que investigar en este tema si los sistemas existentes
ya funcionan correctamente. Una de las razones es la posibilidad de que cualquier persona con
una camara, como por ejemplo una simple webcam, pudiese decodificar codigos de barras en su
propia casa si lo precisase, ya que es mas facil que un particular pueda adquirir una camara de
este tipo que un lector laser por ejemplo, mucho mas caro. Incluso podra ser utilizado por el
peque
no y mediano comercio, resultando una opcion mucha mas economica.

1.2.

Organizaci
on de la memoria

La memoria esta dividida en una serie de captulos donde cada uno de ellos presenta la
siguiente informacion:

1. Introduccion
El captulo 2, ((C
odigos de barras)), se dedica a aportar una serie de datos relacionados con
los codigos de barras: definicion, ventajas e inconvenientes, aplicaciones, lectores, etc., a
modo de informacion introductoria al mundo de los codigos de barras.
En el captulo 3, ((Detecci
on de bordes)), se explica la idea fundamental que se sigue para
la localizacion del codigo de barras y es que debido a las caractersticas que este posee,
la deteccion de bordes se presenta como una tecnica mas que adecuada para su posible
deteccion.
En el captulo 4, ((Detecci
on de regiones candidatas)), nos centramos en la idea que a la hora
de detectar el codigo de barras los pixels que son puntos de borde y forman parte del codigo
van a tener una orientacion similar. Con esta caracterstica lo que se pretende es expandir
esta orientacion a los vecinos de cada uno de los puntos de borde y as, homogeneizar toda
la zona donde se encuentra el codigo con una misma orientacion.
En el captulo 5, ((Etiquetado y filtrado de regiones)), explicamos como tras el paso anterior
mediante un proceso de agrupamiento, extendiendo la orientacion y gracias a una posterior
binarizacion, conseguimos obtener una serie de regiones susceptibles de ser la que se busca.
Utilizando algoritmos de etiquetado de componentes conexas y realizando a continuacion
un filtrado, podemos quedarnos con la region que ((supuestamente)) contiene el codigo.
En el captulo 6, ((Estimaci
on de la orientaci
on y rectificaci
on)), se indica como, al poder
presentar el codigo cualquier angulo dentro de la imagen, se debe calcular la orientacion
que presentan los puntos de borde que aparecen en esta region susceptible de contener
al codigo y que hemos obtenido en el paso anterior. Una vez conocida esta orientacion
simplemente debemos rectificar la imagen y conseguir una imagen centrada en el codigo,
para su posterior binarizacion.
En el captulo 7, ((Decodificaci
on)), se explica como basandonos en la imagen binarizada del
codigo de barras obtenida en el paso anterior, y empleando el conocimiento que tenemos
del tipo de codigo a interpretar (EAN-13 ), se obtiene la consiguiente decodificacion del
mismo.
El captulo 8, llamado ((Sistema experimental)), presenta informacion relativa al proyecto
y que creemos que debe ser mencionada, desde el software utilizado para la realizacion del
proyecto hasta el tiempo en que tarda en ejecutarse la tecnica implementada.
En el u
ltimo captulo simplemente mencionamos las conclusiones a las que llegamos despues
de la realizacion de este proyecto.
De forma grafica el proceso que se ha seguido para la localizacion y posterior decodificacion
de un codigo de barras se puede observar en la Figura 1.1. Cada una de las fases que componen
el proceso en general se explican con mas detalle, y como hemos comentado anteriormente, en
los correspondientes captulos que aparecen en esta memoria.

1.3.

Trabajos relacionados

Previamente y durante la realizacion de este proyecto se ha ido recopilando informacion de


artculos y trabajos relacionados con codigos de barras, algunos de los cuales vamos a comentar
en este punto, ya que han servido de complemento y ayuda al igual que nos han ofrecido ideas
para la realizacion del metodo, o simplemente pueden resultar de interes para conocer con mayor
detalle el estado del arte o profundizar en el tema.

1.3. Trabajos relacionados


La decodificacion de codigos de barras da
nados es un tema que se presta a estudio. Un ejemplo
sera la decodificacion de los codigos de barras que nos aparecen en las recetas medicas y que se
ven afectados por firmas o cualquier otro tipo de mancha [22]. El metodo en cuestion se basa
en la utilizacion de la transformada de Hough como herramienta que permite la b
usqueda de
lneas verticales dentro de una imagen. La tecnica implementada consigue leer alrededor de un
85 % de las prescripciones que se analizan, sin embargo cabe destacar que el proceso asume que,
a diferencia de nuestro proyecto, el codigo ya se encuentra en una orientacion mas o menos
adecuada para ser procesado por el algoritmo.
Sin embargo los estudios realizados no solo se han centrado en la localizacion de las barras
y los espacios que conforman el codigo, sino que han llegado a plantearse otra opcion como, el
decodificar un codigo de barras a partir de los dgitos presentes junto a las barras del mismo [5].
Los sistemas de analisis de imagen normalmente requieren que la imagen donde se encuentra el
codigo de barras a analizar tenga una resolucion lo suficientemente buena para su decodificaci
on.
Gracias a este nuevo metodo se consigue que la imagen pueda presentar una baja resoluci
on y
se decodifique el codigo con exito, ya que los caracteres o dgitos presentes debajo del c
odigo
de barras pueden verse menos afectados por un emborronamiento o una baja resolucion de
la imagen, con lo cual pueden convertirse en una acertada fuente de informacion, mejor que
el patron de barras. En este metodo la localizacion del codigo de barras se realiza a partir
del analisis del gradiente. Una vez localizado el codigo, basandose en el tipo de codificaci
on
que se quiere decodificar, se determina donde se encuentra la zona que incluye los caracteres
que representan al codigo, para posteriormente mediante tecnicas de probabilidad y estadstica
determinar a que dgitos corresponden.
Dentro del campo de la robotica tambien resulta de interes la localizacion y posterior decodificacion de codigos de barras. Se ha llegado a investigar en temas como el desarrollo de un
sistema robotizado que, utilizando algoritmos de procesamiento de imagenes, intenta reconocer
y decodificar los codigos de barras que aparecen en una gran variedad de barriles utilizados
en algunos sectores industriales para almacenar toda clase de residuos. Al mismo tiempo este
reconocimiento sirve para realizar una especie de inventario de los barriles inspeccionados [31].
El procedimiento se basa en dos fases: una primera en la que la imagen es procesada aplicando
filtros adaptativos de umbralizacion del gradiente. Este filtrado identifica bordes verticales en la
imagen. En la segunda fase la imagen es analizada por areas que tienen una alta concentraci
on
de estos bordes verticales, asumiendo que son zonas con una alta probabilidad de ser el c
odigo
de barras, idea parecida a la que se utiliza en nuestro metodo donde se consiguen regiones de
orientacion similar susceptibles de contener el codigo. Sin embargo presenta inconvenientes como la aparicion de falsos positivos, debido a que la imagen puede presentar zonas con bordes
similares a los de un codigo de barras y por tanto detectarse como zona donde se encuentra el
codigo cuando no lo es. Ademas tambien se ve bastante influenciado por el tama
no del c
odigo
de barras respecto a la imagen.
Normalmente los sistemas de analisis de imagenes requieren que el codigo de barras este contenido completamente en la imagen, sin embargo se han realizado investigaciones para evitar
esta limitacion. Un trabajo relacionado con este aspecto desarrollaba un metodo para la decodificacion de codigos de barras captados con una camara, cuyo campo de vision es mas peque
no
que el tama
no del propio codigo, con lo cual deba capturar distintas imagenes, que una vez
juntas, reconstruan el codigo, para posteriormente decodificarlo [28]. La localizacion del c
odigo
se realiza mediante el calculo del gradiente y buscando zonas donde la orientacion del mismo es
similar. Esta misma idea es en la que nos basamos en nuestro metodo para la localizacion del
codigo de barras. Una vez detectado el codigo se aprovecha el conocimiento que se posee del tipo
de codigo que se esta analizando para conseguir una correcta decodificacion. En nuestro proyecto
tambien explotamos este conocimiento que tenemos del codigo de barras para su decodificaci
on.

1. Introduccion
Relacionado con la problematica de la teora de se
nales podemos encontrar trabajos que tratan
de interpretar el codigo de barras a partir del tratamiento o reconocimiento de los picos presentes
en la se
nal u onda obtenida del mismo [18]. Se utilizan modelos estadsticos de reconocimiento
para clasificar estos picos como los caracteres presentes en el codigo. Mediante esta tecnica se
consigue mejores resultados ante codigos emborronados, ya que el proceso es mas resistente ante
tales contratiempos.
La ciencia no solo ha investigado en la mejora de tecnicas de decodificacion de codigos de
barras en cuanto a procesamiento de imagenes, sino que tambien se ha preocupado por mejorar
las prestaciones de los escaneres lectores de codigos. Un ejemplo es una investigacion realizada
con el objetivo de ofrecer mejoras en el funcionamiento de los escaneres a traves de un muestreo
selectivo y el uso de filtros de realzado para mejorar la deteccion de bordes, que detectan las
fronteras entre areas oscuras y claras (barras y espacios) [27]. Otros estudios se centran mas
en obtener tecnicas destinadas a la mejora de la decodificacion de codigos de barras borrosos o
emborronados [30].

1.3. Trabajos relacionados

Figura 1.1.: Diagrama global del proceso implementado

1. Introduccion

2. C
odigos de barras
2.1.

Introducci
on

Como informacion preliminar, antes de comenzar a explicar el metodo desarrollado, se ha


credo conveniente aportar informacion general sobre los codigos de barras. Por ello, en este
punto de la memoria se presentan una serie de datos acerca de este sistema de codificacion.
Empezamos con una breve descripcion de los codigos de barras, su nomenclatura basica y una
serie de caractersticas. A continuacion nos adentramos en su historia [2], cuando surgieron y su
posterior desarrollo, ventajas e inconvenientes que presentan y un conjunto de aplicaciones en las
que los codigos de barras suelen ser de gran utilidad. Por u
ltimo se mencionan las distintas clases
de codigos que existen, para acabar comentando diferentes tipos de impresoras [4] y lectores para
esta clase de codificacion en concreto.

2.2.

Definici
on

Los codigos de barras son un sistema de codificacion creado con el objetivo de identificar
objetos y facilitar la obtencion de informacion y de esta forma eliminar la posibilidad de error
en la captura. La utilizacion de este sistema de codificacion es tan exitosa debido a la fiabilidad
que presenta en la recoleccion automatica de datos, reduciendo los posibles errores humanos que
se pueden producir en el caso de una introduccion erronea de informacion.
Podemos definir un codigo de barras como un patron formado por barras y espacios paralelos que codifica informacion mediante las anchuras relativas de estos elementos. Su estructura
basica consiste de un patron de inicio, uno o mas caracteres de datos, opcionalmente unos o dos
caracteres de verificacion y un patron de termino.
Ademas implementar un sistema de captura de datos por codigos de barras es poco costoso
y el conocimiento necesario para utilizar el sistema es mnimo, por lo que no debe presentarse
como un problema el aprendizaje del personal que manipule el mismo.
El desarrollo de este sistema de codificacion nos permite disponer de tres categoras de codigos
de barras, dependiendo de la tecnologa que es necesaria para realizar una lectura de los mismos:
lineales, multifilas y bidimensionales. Una gran parte de la literatura existente llama tambien
codigos bidimensionales a los considerados multifilas. Por tanto se puede realizar una divisi
on
entre codigos de una dimension (lineales) donde solo importa el ancho de las barras y el espacio
entre ellas y codigos de dos dimensiones (multifilas y bidimensionales) donde importa la altura
y anchura del smbolo.

Nomenclatura b
asica
La visualizacion fsica de los codigos de barras suele presentarse mediante barras verticales:
estas representan caracteres de informacion mediante barras negras y espacios, donde el ancho
de las barras y espacios puede ser variable. Por tanto, cada dgito o caracter representado en un
codigo esta formado por barras y espacios que tienen una anchura total de una cierta cantidad
de unidades o modulos, dependiendo del codigo, de esta forma cada barra y cada espacio puede
tener una anchura de diversas unidades o modulos. De forma resumida se puede expresar de la
siguiente manera:

2. Codigos de barras
M
odulo: es la unidad mnima o basica de un codigo. Las barras y espacios estan formados
por un conjunto de modulos.
Barra: el elemento ((oscuro)) dentro del codigo. Se hace corresponder con el valor binario 1.
Espacio: el elemento ((claro)) dentro del codigo. Se hace corresponder con el valor binario 0.
Car
acter: formado por barras y espacios. Normalmente se corresponde con un caracter
alfanumerico.
Todo esto se observa mejor graficamente en la Figura 2.1.

Figura 2.1.: Cada caracter o dgito esta formado por un conjunto de modulos

Caractersticas
Un smbolo de codigo de barras presenta una serie de caractersticas entre las cuales cabe
destacar las siguientes:
Densidad: es la anchura del elemento, ya sea barra o espacio, mas estrecho dentro del
smbolo de codigo de barras. Un codigo de barras no se mide por su longitud fsica sino
por su densidad, que viene dada en milesimas de pulgada.
Raz
on ancho-estrecho (Wide to Narrow Ratio (WNR)): Es la relacion existente entre el
grosor del elemento mas estrecho con respecto al mas ancho. Normalmente es de 1:3 o 1:2.
Zona muda (Quiet Zone): Es el area blanca que aparece al principio y al final de un
smbolo de codigo de barras y que es necesaria para una acertada lectura del smbolo.

2.3.

Historia

El codigo de barras como sistema de codificacion tiene aceptacion mundial y hoy en da es un


requisito indispensable para que los productos de una determinada empresa puedan ser comercializados tanto en el mercado interior como en el exterior. Pero mucho antes de que los codigos
de barras aparecieran, ya surgan investigaciones relacionadas con sistemas de codificacion de
informacion.
En 1932, Wallace Flint, un estudiante de la Universidad de Harvard, realizo un proyecto
final de carrera (master thesis) que desarrollaba un sistema mediante el cual los clientes de un
supermercado podran marcar aquello que quisieran comprar en una serie de tarjetas perforadas,

2.3. Historia
que posteriormente se introduciran en una serie de lectores que activaran un sistema autom
atico
que les proporcionara aquello demandado.
Sin embargo la idea de codigo de barras conforme lo entendemos hoy en da nacio en 1948. En
ese a
no Bernard Silver, un estudiante graduado del Instituto Drexel de Tecnologa de Filadelfia,
escucho por casualidad como el presidente de una cadena de supermercados le peda a uno de los
decanos que emprendiese una investigacion para desarrollar un sistema que permitiese la lectura
automatica de informacion de los productos durante el cobro de los mismos.
Silver conto lo que haba escuchado a su amigo Normand Joseph Woodland, que ejerca como
profesor en esa misma universidad. La idea le fascino y empezaron a investigar en el tema.
Despues de un a
no de gran esfuerzo Woodland y Silver registraron en 1949 la primera patente
para un codigo de barras. El sistema que tena forma circular se denomino ((bulls eye code)) y
consista en una serie de crculos concentricos con el objetivo de que pudiera leerse en cualquier
direccion.
Tres a
nos mas tarde, en 1952, construyeron el primer lector de codigos de barras, pero
lamentablemente el sistema no consiguio ser demasiado efectivo, al igual que resultaba caro,
por lo que no llego a comercializarse.
Los codigos de barras se emplearon por primera vez a principios de la decada de los 60 para
identificar material rodante ferroviario y de ah en adelante ha venido avanzando su aplicaci
on
y desarrollo. A finales de los a
nos 60 y comienzos de los 70 aparecieron las primeras aplicaciones
industriales, pero solo para manejo de informacion.
Durante esos a
nos la Asociacion Nacional de Cadenas Alimenticias (NAFC, de las siglas en
ingles) se dio cuenta que deban solucionar de una vez por todas los problemas que se presentaban
a la hora del cobro de sus productos. Por ello, en 1967, la cadena de supermercados Kroger instala
el primer sistema de venta basado en codigos de barras en su sucursal de Cincinnati (Ohio, EE.
UU.). El experimento presento una serie de problemas que sirvieron para la mejora del sistema
y de esta forma su posterior adaptacion a todos los productores y comerciantes del sector.
Durante los a
nos 70 y primeros de los 80 se produjo la evolucion de los codigos lineales. Su
utilizacion se difunde a varios sectores utilizandose en muy distintas tareas, desde el control de
documentos en bibliotecas, hasta la identificacion y verificacion automatica en los bancos de
sangre.
En el a
no 1973 se anuncia la aparicion del codigo UPC (Universal Product Code) que se
convertira en el estandar de identificacion de productos en los Estados Unidos. Como anecdota,
comentar que el primer producto escaneado en un punto de pago utilizando este codigo fue un
paquete de chicles, el cual se encuentra hoy en da expuesto en el Museo Nacional de Historia
Americana. En 1976, Europa desarrolla su propia version de UPC, el codigo EAN (European
Article Number ), del cual se desarrollaran dos versiones: el EAN-13 y el EAN-8.
En 1974, se inventa el codigo 39, el primero de tipo alfanumerico y trece a
nos mas tarde, en
1987, se desarrolla el primer codigo bidimensional, el codigo 49, primer codigo multifilas que
aparecio en el mercado.
Poco a poco, durante los a
nos 80 y 90, la tecnologa de identificacion y manejo de datos a
traves de codigos de barras, logra convertirse en un estandar al ser aplicada, cada vez con m
as
frecuencia, tanto en operaciones de distribucion y manejo de materiales, como en organizaciones
de manufactura industrial, al igual que en todo tipo de nuevos ambitos. Durante los a
nos 90
fueron apareciendo nuevos tipos de codigos y se desarrollaron sobretodo los codigos de alta
densidad o bidimensionales.

2. Codigos de barras

2.4.

Ventajas e inconvenientes

La tecnologa de codigo de barras presenta una serie de ventajas sobre otros procedimientos
de coleccion de datos, estas son:
Se imprime con costes bajos.
Su precision en la informacion, evitando o reduciendo de esta forma los errores.
Su eficiencia debido a la rapidez en la lectura, ahorrando tiempo y dinero.
La relativa flexibilidad y facilidad de conexion e instalacion de los equipos de lectura e
impresion de codigo de barras.
Por contrapartida, no todo son ventajas, tambien presentan inconvenientes, como los que a
continuacion mencionamos:
En general los codigos de barra no son facilmente descifrables por las personas, necesitando
pues lectores que nos decodifiquen la informacion.
La facilidad con la cual es posible dificultar la legibilidad de ciertos codigos, es decir,
simplemente con agregar una barra al inicio o final del smbolo o trazar una lnea paralela a
las barras en cualquier lugar dentro del codigo, complica en gran manera su decodificacion.

2.5.

Aplicaciones

Las aplicaciones del codigo de barras cubren practicamente cualquier tipo de actividad humana, lo podemos encontrar tanto en la industria, en el comercio, en instituciones gubernamentales, y en un sinfin de areas, ya que cualquier sector puede beneficiarse del uso de este
sistema de codificacion. Ademas, la tecnologa que conlleva ofrece una de las mejores maneras
de automatizar el manejo de informacion, ofreciendo un sistema de coleccion de datos mediante
identificacion automatica bastante rapido y seguro.
Cualquier sector donde se necesita un sistema para capturar informacion y as mejorar la
productividad, puede optar por utilizar codigos de barras. Algunas de las aplicaciones en las
que el uso del codigo de barras se muestra como una eleccion acertada son: control de material
en proceso, control de inventario, contro de tiempo y asistencia, puntos de venta, control de
calidad, bibliotecas, bancos de sangre, control de acceso, identificacion de carga, etc. Pero estas
son solo una parte de la gran variedad de aplicaciones en las que se pueden utilizar codigos de
barras como procedimiento de codificacion de datos.
En todas estas actividades el codigo de barras se presenta como una de las mejores tecnologas
para implementar un sistema de captacion de datos mediante identificacion automatica, presentando una serie de beneficios desde la mejora de la calidad y servicio al cliente hasta una mayor
competitividad.

2.6.

Clases de c
odigos

La simbologa de un codigo de barras nos define los detalles tecnicos de cada tipo particular
de codigo de barras, la anchura de las barras, la forma en que se codifica la informacion en las
barras y espacios del smbolo de codigo de barras, etc.
Como hemos comentado anteriormente podemos distinguir entre codigos de una dimension y
c
odigos de dos dimensiones. En los primeros, al efectuar la lectura, se tiene en cuenta el ancho

10

2.7. Dispositivos de escritura y lectura de codigos de barras


de las barras y los espacios entre ellas, en cambio la altura de las barras no otorga ning
un dato.
En cierta forma estos codigos representan la clave para acceder a un registro de alguna base de
datos en donde realmente reside la informacion, o sea, los smbolos no contienen informacion del
producto o artculo, sino una clave u
nica que lo identifica.
Por tanto la peque
na capacidad de codificacion de estos codigos los hace depender de sistemas
de datos externos, sin el sistema externo el codigo no tiene significado. La dependencia de
sistemas externos de datos ofrece dos importantes ventajas:
Proporciona la posibilidad de acceder a gran cantidad de informacion utilizando un c
odigo
y smbolo relativamente corto.
Permite cambiar los datos asociados a este sin tener que editar o modificar nuevamente el
codigo.
El otro tipo de codificacion que surgio no hace tantos a
nos es la codificacion bidimensional,
dentro de la cual tenemos los llamados codigos de barras apilados o multifilas (((stacked ))) y los
codigos matriz (((matrix ))). La principal ventaja de utilizar codigos de dos dimensiones es que
los datos estan codificados tanto en la altura como en la longitud del smbolo y la informaci
on
no se reduce solo al codigo del artculo, sino que puede almacenar gran cantidad informaci
on
que puede ser leda de manera rapida y fiable, sin necesidad de acceder a una base de datos en
donde se almacene dicha informacion, como ocurre en el caso de los codigos de una dimensi
on.
Por el contrario, al contener mucha mas informacion que los codigos unidimensionales requieren
de un escaner especial cuyo coste es mas elevado.
La seguridad que son capaces de incorporar estos codigos los hace casi invulnerables a los posibles agentes externos que pueden causar su deterioro, ya que este tipo de codigos han superado
innumerables pruebas de resistencia con el objetivo de determinar su integridad.
Los codigos bidimensionales deben ser considerados como un complemento a la tecnologa
tradicional de codigos unidimensionales, no como su reemplazo y las ventajas deben ser comparadas frente al incremento en coste. Por tanto, dependiendo del tipo de necesidades de identificacion interna del negocio o a los requisitos que se deben cumplir para comerciar seg
un las
normas del mercado, se debe optar por un sistema de codificacion u otro.
Normalmente cuando la gente piensa en codigos de barras los suele relacionar con la tpica
simbologa de barras y espacios, por ello en la Figura 2.2 se muestran un par de codigos bidimensionales como curiosidad, ya que estos suelen ser, dentro de los codigos de barras, los m
as
desconocidos.

(a)

(b)

Figura 2.2.: Codigos bidimensionales: (a) Codablock; (b) MaxiCode

2.7.

Dispositivos de escritura y lectura de c


odigos de barras

Para poder imprimir los codigos de barras se nos presentan en el mercado distintos tipos de
impresoras que pueden llevar a cabo tal funcion. El empleo de una u otra dependera de lo que

11

2. Codigos de barras
el usuario requiera para cada caso en particular.
Los codigos de barras se pueden imprimir en impresoras l
aser o de chorro de tinta con las cuales
se puede conseguir codigos de barras de alta densidad y calidad, pero, por el contrario, tambien
presentan problemas al imprimir en cantidad, al igual que las etiquetas donde se imprimen los
c
odigos deben tener un adhesivo especial que tolere las altas temperaturas generadas por la
impresora. Ademas, la imagen en el codigo de barras se puede da
nar facilmente, a menos que se
utilicen recubrimientos especiales en las etiquetas o bien laminarlas una vez que se ha impreso
el codigo.
Otra posibilidad es la impresi
on termica directa, metodo mas rapido y simple de gran aceptacion
en la industria y el comercio. El coste de las etiquetas termicas es mayor comparado con el de
las utilizadas para impresoras laser, pero sin embargo el coste del proceso global es menor. Por
tanto este tipo de impresion presenta una serie de ventajas como son su velocidad y calidad de
impresion, donde la imagen es duradera, al igual que es excelente para el trabajo por lotes. Por
el contrario tambien tiene inconvenientes como que requiere etiquetas de material especial y de
un tama
no limitado y que la imagen puede deteriorarse en caso de exponerse a la luz solar o a
altas temperaturas.
Para obtener unos mejores resultados que en las anteriores impresoras es necesario usar una
impresora especfica para etiquetas, una impresora de transferencia termica, capaz de imprimir, con gran velocidad y calidad, rollos de etiquetas autoadhesivas. Estos equipos suelen ser
los mejores para aplicaciones de mediano y alto volumen, ya que re
unen las ventajas de las
impresoras laser y las termicas directas.
En la figura 2.3 se muestra un ejemplo de cada uno de los diferentes tipos de impresoras que
hemos comentado en este apartado.

(a)

(b)

(c)

Figura 2.3.: Impresoras de codigos de barras: (a) laser; (b) termica directa; (c) de transferencia
termica
Para poder obtener la informacion presente en un codigo de barras necesitamos de dispositivos
que decodifiquen la informacion presente en el mismo, por ello los lectores de codigos de barras
nos permiten obtener esta informacion, de forma que pueda almacenarse en una computadora
para poder ser procesada.
Existen muchas opciones de conexion de lectores de codigos de barras a una computadora,
aunque existen dos tipos basicos: aquellos lectores que almacenan la informacion en memoria
para despues transferirla a una computadora y los lectores de radiofrecuencia que transmiten la
informacion a la computadora en tiempo real. En los primeros si la computadora central falla,
la recoleccion de datos puede continuar, al igual que si falla una lector en particular, este puede
ser reemplazado. Por su parte el segundo sistema presenta una verificacion de datos inmediata y
mas sofisticada, con una interaccion con el usuario que consigue una mayor reduccion de errores.
El funcionamiento de los lectores de codigos de barras se podra explicar de la siguiente manera:
el lector decodifica el codigo de barras a traves de la digitalizacion proveniente de una fuente
de luz que cruza el codigo y mide la intensidad de la luz reflejada por los espacios blancos, ya

12

2.7. Dispositivos de escritura y lectura de codigos de barras


que las barras oscuras absorben la luz y los espacios la reflejan. El patron de la luz reflejada se
detecta a traves de un fotodiodo, el cual produce una se
nal electrica que coincide exactamente
con el patron impreso del codigo de barras. Un decodificador usa algoritmos matematicos para
traducir los impulsos electricos en un codigo binario y transmite el mensaje decodificado a una
computadora como si la informacion hubiese sido introducida por teclado.
En cuanto a los lectores existe una gran variedad, pero podemos destacar cuatro que son los
principales:
1. Lectores tipo pluma o l
apiz (wand ):
El modo de uso es simple, el operador coloca la punta del lector en la zona blanca que
esta al inicio del codigo y lo desliza a traves del smbolo a velocidad e inclinacion constante
haciendo contacto a lo ancho del codigo, enviandose una se
nal digital pura de las barras y
espacios a una frecuencia igual a la velocidad con que se desliza el lapiz.
Con este tipo de lector obtenemos una serie de ventajas como son su bajo precio y su
tama
no reducido, por contra son susceptibles a cadas debido a su forma, pueden ser
necesarias varias pasadas para conseguir una lectura correcta, por lo tanto tiene un bajo
Fisrt Read Rate (FRR) y solo son practicos cuando se leen codigos impresos de gran calidad
colocados preferentemente en superficies duras, planas y horizontales.
2. Lectores CCD (Charge Coupled Device):
Son lectores de contacto que emplean un fotodetector CCD formado por una fila de LEDs
que emite m
ultiples fuentes de luz y forma un dispositivo similar al encontrado en las
camaras de vdeo, es decir, mediante un arreglo de foto diodos toma una ((foto)) del smbolo
de codigo de barras y la traduce a una se
nal, que puede ser similar a la enviada por el l
aser
o a la del lapiz optico. Se requiere hacer contacto fsico con el codigo, pero a diferencia del
anterior no hay movimiento que degrade la imagen al escanearla.
Algunas de las ventajas que presenta son su rapidez de lectura, es bastante duradero por
no tener partes moviles, tiene un alto First Read Rate (FRR) y es economico. Sin embargo
no todo son ventajas ya que requiere estar muy cerca del codigo (01.5 cm) y no puede
leer smbolos que rebasen el ancho de su ventana.
3. Lectores l
aser tipo pistola:
Realiza un barrido mediante una luz laser que genera una se
nal similar a la del l
apiz
optico, pero a una mayor frecuencia. Esta se
nal es conocida como HHLC (Hand Held
Laser Compatible). Un espejo rotatorio u oscilatorio dentro del equipo mueve el haz de
un lado a otro a traves del codigo de barras, de modo que no se requiere movimiento por
parte del operador, este solo debe apuntar y disparar. Ademas usan un mecanismo para
prevenir la lectura accidental de otros codigos dentro de su distancia de trabajo.
Presenta las siguientes ventajas: rapido, tiene un alto First Read Rate (FRR), puede leer
codigos estropeados o mal impresos y puede leer a distancia, desde unos pocos centmetros
a varios metros.
Las desventajes son: puede tener problemas para leer con demasiada luz ambiental, es
relativamente caro y puede presentar problemas de durabilidad debido a sus partes moviles.
4. Lectores l
aser fijos omnidireccionales:
Se encuentran normalmente en las cajas registradoras de supermercados. El haz de laser se
hace pasar por un conjunto de espejos que generan un patron ominidireccional, otorgando
as la posibilidad de pasar el codigo en cualquier direccion, sin importar la orientacion del

13

2. Codigos de barras
mismo. Los productos a leer se deben poder manipular y pasar a mano frente al lector.
Son recomendables cuando se requiere una alta tasa de lectura.
Las ventajas que se obtienen con este tipo de lector son las mismas ventajas que con el
laser de pistola, ademas de presentar un First Read Rate (FRR) de practicamente el 100 %.
En contrapartida es un lector caro y el operador que lo utilice requiere que los artculos
etiquetados no sean muy voluminosos pues el escaner se monta en posicion fija.
En la Figura 2.4 se muestra un lector de cada uno de los diferentes tipos que hemos mencionado
anteriormente.

(a)

(b)

(c)

(d)

Figura 2.4.: Lectores de codigos de barras: (a) tipo pluma o lapiz; (b) lector CCD; (c) laser tipo
pistola; (d) laser omnidireccional

14

3. Detecci
on de bordes
3.1.

T
ecnicas de localizaci
on de c
odigos de barras

Existen distintas tecnicas para identificar donde se encuentra un codigo de barras dentro de
una imagen [28]:
Algoritmo Morfol
ogico Matem
atico: Metodo de localizacion basado en operaciones
morfologicas basicas como: dilatacion, erosion, cierre y un conjunto de operaciones morfologicas geodesicas. El algoritmo se basa en el hecho que los codigos de barras poseen
((valles estrechos)) (espacios estrechos existentes entre las barras), un alto contraste y lneas
paralelas. Mediante una segmentacion, estos valles se juntan para formar una region que
corresponde al codigo de barras, descartando peque
nas areas que no pertenecen al codigo,
para a continuacion aplicar filtros morfologicos en diferentes orientaciones con el fin de
extraer la orientacion del codigo de barras.
An
alisis de texturas mediante filtros de Gabor: La idea fundamental sobre la que
se basa este metodo es asumir que un codigo de barras es una region con una textura
homogenea. Ademas en una imagen donde se encuentra presente la textura, el nivel de
gris de los pixels individuales no proporcionan suficiente informacion para llevar a cabo
una segmentacion satisfactoria de la imagen, por ello se hace necesario incluir las relaciones
espaciales existentes entre los niveles de gris de los pixels dentro de una vecindad local.
Detecci
on de texto en las im
agenes: Otra idea para la localizacion de codigos de barras
es utilizar tecnicas provenientes de los algoritmos de b
usqueda de texto, sin embargo este
tipo de metodos presentan como inconveniente que suelen consumir mucho tiempo.
Densidad de Gradiente: Otro metodo de localizacion de codigos de barras es el basado
en la extraccion de areas que poseen una alta densidad de gradientes mono-orientados.
La localizacion de codigos de barras en una imagen con baja resolucion es el principal
proposito de este algoritmo, que utiliza para tal objetivo el calculo de gradientes y filtros
morfologicos.
En nuestro metodo, la idea en la que nos basamos para la localizacion del codigo de barras,
es muy similar a la presente en la u
ltima tecnica mencionada. Aunque debemos recalcar que
el conocimiento sobre estas tecnicas no se produjo hasta bastante mas tarde del comienzo de
este proyecto. Simplemente, el descubrir que existan y conocer en que se basan, sobretodo esta
u
ltima, nos llevo a pensar que no ibamos mal encaminados en cuanto a la manera en que se
detecta y localiza el codigo de barras en nuestro proyecto.
Por tanto, el objetivo final que perseguimos es conseguir la decodificacion del codigo de barras,
para lo cual un paso esencial es la localizacion dentro de la imagen del codigo en cuesti
on.
La idea fundamental que se ha seguido para conseguir esta tarea ha sido que los codigos de
barras presentan unas caractersticas que permiten su localizacion basandonos en el metodo de
la deteccion de bordes, ya que cada uno de los puntos de borde que conforman el codigo de
barras ((supuestamente)) presentaran una orientacion similar y por tanto, seran susceptibles de
ser clasificados como puntos de la imagen con una alta probabilidad de contener el codigo de
barras pretendido.

15

3. Deteccion de bordes

3.2.

Detector de bordes de Canny

Un concepto relacionado con la extraccion de bordes es el de la primera derivada, ya que esta


es cero en todas las regiones donde no vara la intensidad y tiene un valor constante en toda la
transicion de intensidad. Por tanto un cambio de intensidad se manifiesta como un cambio brusco
en la primera derivada [24], caracterstica esta que puede utilizarse para detectar la presencia
de un borde.
Uno de los operadores basados en la primera derivada para la deteccion de bordes es el
algoritmo de Canny, que consiste en tres grandes pasos [24]:
Obtenci
on del gradiente (magnitud y orientacion del vector gradiente en cada pxel).
Supresi
on no m
axima o adelgazamiento del ancho de los bordes, obtenidos con el gradiente, hasta lograr bordes de un pxel de ancho.
Hist
eresis de umbral al resultado de la supresion no maxima, con este proceso se pretende reducir la posibilidad de aparicion de falsos contornos.
Por tanto, en primer lugar a la imagen se le aplica un filtro gaussiano, para suavizar la imagen
y tratar de conseguir la eliminacion del posible ruido que afecte a la misma. Sin embargo hay
que ir con cuidado para no realizar un suavizado excesivo de la imagen y perder detalles o
caractersticas de interes, provocando de esta forma un peor resultado.
A continuacion se realiza el calculo del gradiente de la imagen suavizada, utilizando para ello
una aproximacion del gradiente de la funcion Gaussiana.
La imagen correspondiente a la magnitud del gradiente de la funcion gaussiana tendra valores
grandes donde la variacion de la intensidad sea grande. Por esta razon se debe eliminar aquellos
pixels que no tienen una magnitud alta utilizando para ello un cierto umbral.
Posteriormente se realiza un proceso de eliminacion de falsos bordes, conjuntamente a un
realzado de bordes poco definidos. Este proceso se consigue eliminando aquellos pixels que no
son maximos locales.
Un punto a tener en cuenta es la eleccion de los valores de las variables que se aplican en
cada uno de los pasos anteriores, ya sea el valor de los umbrales o de la varianza en los filtros
gaussianos por ejemplo, ya que seg
un estos valores los resultados pueden ser mejores o peores.
Los valores que se han tomado definitivamente para estos parametros se muestran mas adelante,
en el captulo 8.
En resumen, la deteccion de bordes usando operadores de aproximacion del gradiente tiende a
funcionar bien en los casos en que se utilizan imagenes con transiciones de intensidad claramente
definidas y ruidos relativamente bajos [24].
El algoritmo de Canny para la deteccion de bordes se explica con mas detalle en el apendice A.

3.3.

Ejemplo

Previamente a la utilizacion del algoritmo de Canny para la deteccion de bordes se probo con
otros operadores como los de Sobel, pero el resultado que se obtena era bastante peor que
con el primero. Al aplicar el filtro de Sobel, para conseguir el gradiente y posteriormente su
magnitud y orientacion, el resultado que se obtena se vea afectado por el ruido que presentaba
la imagen. Por este motivo se penso en aplicar previamente un filtro media o mediana para
suavizar la imagen y as obtener mejores resultados, pero la imagen tenda a emborronarse
en vez de suavizarse. Otra opcion que se hubiese podido aplicar es la utilizacion de un filtro
Gaussiano previamente al filtro de Sobel, sin embargo esta posibilidad no se probo, ya que
directamente enfocamos nuestra atencion hacia el detector de bordes de Canny.

16

3.3. Ejemplo
Un ejemplo de los resultados que se obtienen al aplicar el algoritmo de Canny se puede observar
en la Figura 3.1:

(a)

(b)

(c)

(d)

Figura 3.1.: Resultado de aplicar el detector de bordes de Canny: (a) imagen original; (b) orientacion; (c) supresion no maxima; (d) histeresis de umbral

17

3. Deteccion de bordes

18

4. Detecci
on de regiones candidatas
4.1.

Idea general

Una idea que manejamos a la hora de detectar el codigo de barras dentro de la imagen es que
((supuestamente)) los pixels que forman parte del codigo van a tener una orientacion similar o
muy parecida, por ello se pretende extender la orientacion de los puntos de borde de la zona
donde se encuentra el codigo a los puntos de esta que no lo son, creando as una region de
orientacion similar que podra seleccionarse como region que contiene el codigo. Los puntos de
borde representan la separacion entre los espacios y las barras del codigo, por este motivo se
pretende extender la orientacion de estos puntos a aquellos puntos que no son borde y en los
cuales no tenemos nada. De esta forma se consigue una zona amplia con orientacion similar
donde se encuentra el codigo de barras.
Con este fin, una vez hemos conseguido el valor de la orientacion del gradiente de intensidad
para cada uno de los pixels de la imagen, operacion realizada en el paso anterior, se prosigue el
proceso realizando un analisis multiresolucion de la imagen. Con esta operacion vamos a obtener
una piramide de imagenes donde cada imagen que precede a otra siempre sera de mayor tama
no,
es decir, se van consiguiendo imagenes de menor tama
no. Pero esta operacion no solo conlleva
una reduccion del tama
no de la imagen progresivamente, sino que se pretende, como hemos
comentado, conseguir extender la orientacion de manera que podamos seleccionar una regi
on de
la imagen como posible zona donde se encuentra el codigo de barras por poseer, localmente, un
valor de orientacion com
un.

4.2.

Procedimiento

El proceso que se sigue es el siguiente: se divide el tama


no de la imagen por dos, reduciendo
este hasta alcanzar un determinado tama
no, por tanto cuatro pixels de la imagen en un cierto
nivel pasaran a ser uno en la imagen de nivel posterior. A partir del valor de la orientaci
on de
estos cuatros pixels se calcula la media, pero solo participan en esta operacion los pixels que
pertenezcan a un punto de borde. As, el pixel en la imagen reducida tomara un valor para la
orientacion que sera la media de los pixels de los que proviene, que seran aquellos que son puntos
de borde.
Ademas, si los cuatro pixels no pertenecen a ning
un punto de borde, entonces el nuevo pixel
que se obtiene se etiqueta como ((no-borde)), de forma que nos va a servir para descartar zonas
donde no hay ning
un punto de borde y por tanto es poco probable que el codigo de barras se
encuentre en ellas.
Por tanto, si partimos de una imagen I iremos cogiendo 4 pixels de la siguiente forma:
I(i, j)
I(i, j + 1)

I(i + 1, j)
I(i + 1, j + 1)

A partir de estos pixels se toman aquellos que son bordes y se realiza una media.
I =

I(i, j)

(i,j)N

19

4. Deteccion de regiones candidatas


siendo N el conjunto de pixels que son borde dentro de la vecindad considerada.
El procedimiento implementado se muestra en el Algoritmo 1 en pseudo-codigo para una
mejor comprension de los pasos realizados. Nos aparece en el mismo la funcion Vecindad() que
nos devuelve el conjunto de pixels vecinos de un determinado punto seg
un la vecindad indicada.
Ademas esta funcion ya tiene en cuenta no acceder a puntos de fuera de la imagen. Esta funcion
tambien sera usada en algoritmos que aparecen mas adelante.
Algoritmo 1 Agrupamiento de la orientaci
on seg
un la vecindad
Entrada: La imagen O de la orientacion de tama
no M N , la imagen E de bordes de tama
no
M N y la vecindad Vx Vy utilizada
Salida: La imagen S de tama
no VMx VMy
1: for x 1 to M with step Vx do
2:
for y 1 to N with step Vy do
3:
numbordes 0
4:
Suma 0
5:
for all (i, j) Vecindad(x, y, Vx , Vy ) do
6:
if E(i, j) = 1 then
7:
numbordes numbordes + 1
8:
Suma Suma + O(i, j)
9:
if numbordes = 0 then
10:
S( Vxx , Vyy ) ((no-borde))
11:
else
Suma
12:
S( Vxx , Vyy ) numbordes
Debemos se
nalar que este algoritmo se utiliza solo para el primer nivel, es decir, cuando
partimos de la imagen de la orientacion obtenida en el punto anterior. A partir de entonces el
algoritmo a utilizar es muy similar a este, simplemente cambia que la entrada sera la imagen de
salida del Algoritmo 1 y por tanto en vez de quedarnos con aquellos puntos que son bordes nos
quedaremos con aquellos que no esten etiquetados como ((no-borde)). El resto del funcionamiento
del algoritmo es el mismo.
Una vez hemos obtenido la u
ltima imagen del escalado, es decir, hemos llegado al u
ltimo nivel
L, realizamos ahora el proceso inverso, es decir, si hemos subido en la piramide de imagenes vamos
ahora a bajar, de forma que un pxel extendera su valor a los cuatro pixels de los que provena.
Con este proceso se pretende extender, en la zona donde se encuentra el codigo, la orientacion
de los pixels que eran bordes a aquellos que no lo eran, todo ello para intentar homogeneizar la
orientacion en nuestra region de interes y as, de esta forma, poder posteriormente elegir todos
estos pixels como posible zona donde pueda encontrarse el codigo de barras. El procedimiento
utilizado se describe en el Algoritmo 2.
Algoritmo 2 Reconstrucci
on para extender la orientaci
on
Entrada: Imagen I de tama
no M N y la vecindad Vx Vy utilizada
Salida: Imagen S de tama
no (M Vx ) (N Vy )
1: for x 1 to M do
2:
for y 1 to N do
3:
i x Vx
4:
j y Vy
5:
for all (i, j) Vecindad(x, y, Vx , Vy ) do
6:
S(i, j) I(x, y)

20

4.3. Ejemplo
Sin embargo, despues de realizar esta operacion, es decir, subir y bajar en la piramide de
imagenes, la zona donde se encontraba el codigo no presentaba esa homogeneidad que se pretenda y todava exista demasiada variacion dentro de la zona en cuestion.
Por tanto se penso que para este proceso se podra coger una division mayor y en vez de
un conjunto de 2 2 pixels de los que pasamos a uno, realizarlo de 3 3 o superior, pero los
resultados tendan a ser peores, es decir, cuanto mas grande es la vecindad que cogemos para
reducir, los resultados empeoran, de forma que la homogeneizacion, en cuanto al valor de la
orientacion de la zona donde se encuentra el codigo, es peor.
Esto puede ser debido a que al coger mas puntos para realizar la media, en la zona proxima al
codigo estamos cogiendo un n
umero mayor de pixels que son puntos de borde y que no pertenecen
al codigo y cuyo valor afecta de manera negativa a la hora de calcular la orientacion. De alguna
manera estamos provocando el proceso contrario al pretendido, ya que el valor de la orientaci
on
de los puntos de borde de la frontera exterior al codigo y que no pertenecen al codigo de barras,
dominan a los puntos de borde de dentro del codigo, provocando que su orientacion se extienda
hacia dentro del codigo y reduciendo as la region donde se encuentra este.
Otra opcion con la que los resultados que se obtuvieran podran ser mejores, era la posibilidad
de utilizar la mediana y no la media, por su mayor robustez estadstica. Al cambiar la media por
esta operacion empezamos a conseguir lo que se pretenda, debido, seguramente, a que la media
se poda ver afectada, a la hora de realizarse la operacion, por un valor muy alto en cuanto al
resto de valores o viceversa.

4.3.

Ejemplo

Por tanto con este nuevo paso los resultados que se consiguieron eran los deseados. En la
Figura 4.1 podemos observar un ejemplo de las imagenes que se obtienen en este nuevo proceso,
tanto cuando subimos en la piramide, como cuando bajamos.

21

4. Deteccion de regiones candidatas

(a)

(b)

Figura 4.1.: Deteccion de regiones candidatas: (a) resultado del proceso cuando subimos; (b)
resultado del proceso cuando bajamos

22

5. Etiquetado y filtrado de regiones


5.1.

Etiquetado de componentes conexas

Una vez realizado el paso anterior, debamos pensar una forma de poder discriminar el conjunto
de pixels que no nos proporcionan informacion relevante y quedarnos solo con aquellos que nos
interesan por contener la region de la imagen donde supuestamente se encuentra el codigo que
se pretende detectar.
En busca de este objetivo se penso en utilizar algoritmos de etiquetado de componentes
conexas, cuya idea basicamente consiste en agrupar pixels de una misma region dentro de la
imagen, para lo cual les asigna la misma etiqueta a cada uno de ellos. Simplemente se presentaba
un problema y es que la imagen a partir de la cual se aplican estos algoritmos debe ser binaria.
Por ello debamos binarizar, de alguna forma, el resultado obtenido en el proceso anterior, para
poder despues aplicar el algoritmo de componentes conexas.
El concepto de componentes conexas es el siguiente: todos los pixels que tienen un mismo
valor binario 1 y estan conectados entre s (usando 4-conectividad u 8-conectividad) por un
camino o conjunto de pixels todos con ese mismo valor binario se les asigna una misma etiqueta
identificativa, que debe ser u
nica de la region a la cual pertenecen los pixels y constituye su
identificador [24].

5.2.

Procedimiento

Con el fin de obtener la binarizacion deseada se penso en la siguiente idea: cuando ((subimos)) en
la piramide, como comentamos en el punto anterior, estamos intentando que la zona de la imagen
donde se encuentra el codigo de barras se homogeinice, en cuanto al valor de la orientaci
on, y
as, posteriormente, poder elegir todos estos pixels, con valor similar, como posible zona donde
se encuentra un codigo de barras. Sin embargo, ahora cuando ((bajamos)), en lugar de extender
la orientacion a los distintos pixels seg
un la division implementada, podemos aprovechar para
binarizar y realizar a continuacion su correspondiente expansion.
Por tanto una vez hemos llegado al u
ltimo nivel (el mas alto de la piramide) nos disponemos
a binarizar dicha imagen siguiendo el siguiente criterio: si la mitad de los pixels de la vecindad
elegida para la division son parecidos o similares entre s, es decir, no distan mucho en cuanto al
valor de la orientacion, seg
un un umbral predeterminado, entonces todos los pixels de la vecindad
tendran el valor binario ((1)), si no es as seran ((0)), al igual que si mas de la mitad de los pixels son
puntos etiquetados como ((no-bordes)), tambien toman el valor ((0)). Una vez tenemos la imagen
binarizada, simplemente se trata a continuacion de extender esta binarizacion hasta el nivel
inicial, el cual se corresponde a una imagen de tama
no igual al de la imagen original. El proceso
de binarizacion se puede observar en el Algoritmo 3 y el proceso de extender la orientaci
on es
similar al que aparece en el Algoritmo 2. En el Algoritmo 3 aparece la funcion RelPixels() que
simplemente se encarga de ver la relacion existente entre los pixels de la vecindad elegida y,
seg
un el umbral determinado, devolver una cantidad que nos indica el n
umero de pixels que son
similares entre s.
Se probo un poco con todas las posibles variables que nos dan juego a la hora de realizar este
proceso, para ver cuales son las condiciones con las cuales se obtienen los mejores resultados.

23

5. Etiquetado y filtrado de regiones


Algoritmo 3 Binarizaci
on de un determinado nivel l de la pir
amide
Entrada: Una imagen Ol de tama
no M N , la vecindad Vx Vy y un umbral U
Salida: Una imagen binaria S de tama
no M N
1: mitad (V x V y)/2
2: for x 1 to M with step Vx do
3:
for y 1 to N with step Vy do
4:
num 0
5:
for all (i, j) Vecindad(x, y, Vx , Vy ) do
6:
if I(i, j) 6= ((no-borde)) then
7:
V ect[num] Ol (i, j)
8:
num num + 1
9:
if num < mitad then
10:
for all (i, j) Vecindad(x, y, Vx , Vy ) do
11:
S(i, j) 0
12:
else
13:
n RelPixels(V ect, U )
14:
if n > mitad then
15:
for all (i, j) Vecindad(x, y, Vx , Vy ) do
16:
S(i, j) 1
17:
else
18:
for all (i, j) Vecindad(x, y, Vx , Vy ) do
19:
S(i, j) 0

Se realizaron pruebas con diferentes tama


nos en cuanto a las operaciones de agrupamiento de
los pixels vecinos 3 3, 5 5, etc., al igual que se probo a realizar el proceso de binarizacion
no desde el u
ltimo nivel sino desde cualquier otro de los calculados. Despues de varias pruebas
se pudo comprobar que utilizar una vecindad de 2 2 es la mejor opcion, al igual que realizar
la binarizacion a partir, no desde el u
ltimo nivel, sino desde dos niveles menos. Ademas, otra
conclusion que se obtuvo despues de probar distintas opciones, es que el nivel desde el cual es
mejor empezar a binarizar depende del tama
no del codigo de barras con respecto al tama
no de
la imagen, algo que, en nuestro caso asumimos, por su simplicidad, como constante.
Una vez obtenida la imagen binarizada del mismo tama
no que la imagen inicial, una comprobacion para asegurarnos que vamos por el camino acertado, no a nivel del algoritmo, sino como
comprobacion visual nuestra, es superponer a la imagen original esta imagen binarizada, para
ver que conjunto de pixels se estan eligiendo, es decir, aquellos pixels que son la zona donde
supuestamente esta el codigo. De esta manera se puede ver si el codigo de barras esta dentro de
alguna de las regiones que detectaremos con los algoritmos antes mencionados. El resultado de
esta operacion se puede ver en la Figura 5.1, donde las regiones obtenidas se superponen a la
imagen original que nos aparece en la Figura 3.1 (a).
Como hemos comentado, si cambiamos las opciones elegidas para realizar el proceso, el tama
no
de la vecindad con el que operar y el nivel a partir del cual binarizar, los resultados son bastante
peores como se puede observar en la Figura 5.2.
El algoritmo de etiquetado de componentes conexas que utilizamos es el que se denomina algoritmo clasico [24] (Apendice B). Este algoritmo realiza solo dos pasadas a la imagen, necesitando
para todo el proceso mantener una tabla de equivalencias de etiquetas.
El resultado del algoritmo se muestra en la Figura 5.3, donde las regiones obtenidas se han
coloreado para que se observe mejor el resultado.
Por tanto, una vez aplicado el algoritmo a nuestra imagen, solo falta, para finalizar, descartar

24

5.3. Resultados

Figura 5.1.: Imagen original con la mascara correspondiente a las regiones candidatas

(a) m = 2, L = L

(b) m = 3, L = L 2

(c) m = 5, L = L 1

Figura 5.2.: Distintas imagenes obtenidas seg


un la vecindad, de tama
no m, y el nivel L desde
el cual binarizar siendo L el u
ltimo nivel de la piramide: (a) resultado obtenido con
una vecindad 2 2 y binarizando a partir del u
ltimo nivel; (b) resultado obtenido
con una vecindad 3 3 y binarizando a partir del nivel L 2; (c) resultado obtenido
con una vecindad 5 5 y binarizando a partir del nivel L 1
aquellas regiones que no nos interesan y quedarnos con la que contiene el codigo de barras. Por
ello, en nuestro caso, nos quedaremos con la region con mayor n
umero de pixels, que sera, con
gran probabilidad, la region con mas posibilidades de contener la zona donde se encuentra el
codigo de barras.

5.3.

Resultados

A continuacion mostraremos un conjunto de imagenes con el resultado obtenido al aplicar el


algoritmo de etiquetado de componentes conexas y quedarnos con aquella region con un mayor
n
umero de pixels. De esta forma se podra observar en que casos el proceso funciona, en cuales no
es exacto y que factores afectan al mismo. Antes de todo recalcar que el algoritmo en un principio
se usaba para una 4-conectividad, pero se modifico para utilizar una mayor conectividad, ya que
de esta manera los resultados eran mejores.
En la Figura 5.5 podemos observar que tanto en la imagen (a) como en la (b) el resultado
es bastante bueno, aunque no se incluyan unos pocos puntos del codigo dentro de la regi
on.
En la imagen (c) el codigo de barras previamente fue modificado manualmente, dibujando una
lnea al principio y otra al final del mismo para ver que resultado obtenamos. Como se puede

25

5. Etiquetado y filtrado de regiones

Figura 5.3.: Resultado del algoritmo de etiquetado de componentes conexas

Figura 5.4.: La region de mayor tama


no de la Figura 5.3, hemos descartado las regiones que no
nos interesan y nos hemos quedado con la region que contiene un mayor n
umero de
pixels
observar, la region obtenida despues de realizar el proceso incluye estas dos falsas barras, como
es logico, ya que el proceso las considera como propias del codigo. Este caracterstica de los
c
odigos de barras, la facilidad con la cual es posible da
narlos, conlleva la consiguiente dificultad
para los lectores que intenten descifrar dicho codigo. Pero esto ocurre tambien con otros tipos
de codificacion, por ejemplo, caracteres normales, los cuales si son da
nados se dificulta, en gran
medida, su legibilidad.
En la Figura 5.6 podemos ver tres diferentes imagenes del mismo codigo de barras, pero en
cada una de ellas el codigo se ha visto afectado por distintos factores que provocan el deterioro
del mismo. Como se observa aunque el codigo esta rayado, como en (a) o en (b), o incluso
emborronado, como en (c), la region que determina la zona donde se encuentra el codigo es
bastante acertada y no aparecen muchos huecos dentro de la misma. Esto es debido a que las
supuestas ((manchas)) que contiene el codigo, no tienen un trazo muy intenso con lo que no
afectan en gran medida al proceso, cosa muy diferente sera si fueran mas intensas, mas oscuras,
como en los siguientes ejemplos.
En la Figura 5.7 vemos como en las imagenes (a) y (b), el ruido provocado por unas rayas de

26

5.3. Resultados

(a)

(b)

(c)

Figura 5.5.: Resultado del proceso de localizacion ante un codigo de barras: (a,b) no da
nado; (c)
al que se le ha dibujado una barra al principio y otra al final

(a)

(b)

(c)

Figura 5.6.: Diversas imagenes de un mismo codigo de barras da


nado por una serie de factores:
(a) da
nado con una sola lnea; (b) afectado por mas de una lnea; (c) emborronado

trazo mas intenso que en la Figura 5.6, s que afectan en mayor medida al proceso, provocando
que la region que contiene el codigo no sea todo lo exacta que se precisa y dificultando su posterior
decodificacion. En la imagen (c) se han complicado todava mas las cosas, incluyendo adem
as de
las rayas un elemento metalico (((clip))) encima del codigo para comprobar as el funcionamiento
del proceso ante tal situacion. Como era logico la region que se obtiene descarta la zona del
codigo donde se encuentra el ((clip)), ademas de los puntos donde se encuentran las manchas, con
lo cual es muy poco probable que esta region nos pueda llevar a una posible decodificaci
on con
exito.

27

5. Etiquetado y filtrado de regiones

(a)

(b)

(c)

Figura 5.7.: Resultado del proceso de deteccion del codigo de barras ante diversas situaciones:
(a) codigo de barras rayado; (b) el mismo codigo que en la imagen anterior, pero al
que se le han a
nadido mas modificaciones; (c) misma imagen que la anterior, pero
a
nadiendo un elemento ajeno al codigo de barras sobre el

(a)

(b)

(c)

Figura 5.8.: Conjunto de imagenes a las que se les ha aplicado una transformacion geometrica:
(a) rotacion de 30 ; (b) espiral de 45 ; (c) espiral de 100
Para una mayor comprobacion, en cuanto al buen funcionamiento de este proceso, se ha
transformado una imagen digitalmente para ver que ocurre cuando introducimos alg
un tipo de
transformacion geometrica en la misma, esto se observa en la Figura 5.8. En la imagen (a) se
ha aplicado una rotacion con un cierto angulo, de esta forma en la imagen aparece ademas
del propio codigo a decodificar, un trozo del mismo en una esquina. La region que obtenemos
contiene tanto el codigo, como el trozo que aparece en la esquina inferior. Esto es debido a la
forma en que agrupamos los pixels con una orientacion parecida seg
un un cierto umbral. Como

28

5.3. Resultados
vemos esto tiene sus ventajas a la hora de capturar la zona donde se encuentra el codigo, c
omo
se observa en la imagen (b) y (c), pero por el contrario provoca que aquellas partes de la imagen
donde la orientacion es muy similar, y que no pertenezcan al propio codigo de barras, tambien
se puedan elegir como posible zona donde se encuentre este.
En la imagen (b) y (c) la transformacion geometrica realizada ha sido la misma en ambas, una
especie de remolino o espiral (((swirl))), pero utilizando angulos distintos. Aunque parezca difcil,
obtenemos unas regiones que contienen el codigo de barras con bastante exactitud, sin embargo
la decodificacion en nuestro caso es imposible. Para poder decodificar el codigo deberamos ir
calculando las distintas orientaciones que el codigo presenta desde la primera barra hasta la
u
ltima, para as poder ir rectificando el codigo con el angulo adecuado en cada momento y
conseguir as su decodificacion.
Despues de poder observar todos estos ejemplos parece que el proceso se comporta bastante
bien, siempre y cuando el codigo no se vea afectado, en gran medida, por alg
un tipo de ruido,
como manchas o rayas presentes en el codigo. Ademas incluso aquellas imagenes en las que se
les ha aplicado una transformacion geometrica, la zona donde se encuentra el codigo se detecta,
aunque su posterior decodificacion se complicara, y no se aborda en este proyecto.
Deberamos comentar que se intentaron capturar imagenes que sufrieran alg
un tipo de deformacion geometrica natural, realista, como puede ser que la hoja donde se encuentre impreso el
codigo de barras este doblada por ejemplo. El proceso de localizacion creemos que igual funcionara en estos casos, el problema de no poder tener imagenes para comprobarlo ha sido por
culpa del enfoque. La imagen del codigo de barras, si tenamos doblada la hoja, presentaba zonas
donde era difcil enfocar y obtener resultados ntidos.
Tambien pudimos comprobar que algunas pruebas en las que el codigo no presentaba ninguna
raya ni mancha el resultado obtenido no era el deseado. Esto es debido a que el proceso se ve
bastante afectado por la calidad de la imagen, por lo que algunas mejoras para incrementar la
robustez del metodo pasaran, posiblemente, por realizar alg
un tipo de preproceso de la imagen
con el objetivo de evitar esta dependencia.

29

5. Etiquetado y filtrado de regiones

30

6. Estimaci
on de la orientaci
on y rectificaci
on
6.1.

Idea general

Todos los pasos realizados hasta este instante nos han permitido poder localizar la regi
on de
la imagen donde se encuentra el codigo de barras. Como es obvio, el codigo de barras puede estar
en cualquier posicion dentro de la imagen, al igual que puede presentar cualquier orientaci
on, lo
que dificulta su localizacion.
Por tanto, debemos calcular la orientacion que presentan los puntos de borde que contiene
la region susceptible de contener al codigo y que hemos obtenido en el paso anterior. Una vez
conocida esta orientacion simplemente debemos rectificar la imagen y conseguir a continuaci
on
una imagen que solo contenga el codigo. Esta subimagen sera binarizada para su posterior
decodificacion.

6.2.

Procedimiento

El procedimiento utilizado para averiguar el angulo que debemos aplicar en la rotacion de


la imagen y que de esta manera se nos quede en sentido horizontal, es decir, con las barras
verticales, ha sido el siguiente: de todos los puntos de borde que se encuentran en la region que se
ha seleccionado, que es donde se encuentra el codigo, nos quedamos con el valor de la orientaci
on
de cada uno de ellos y calculamos la mediana para conseguir el valor mas representativo de la
orientacion en esa zona. Se calcula la mediana en vez de la media, ya que esta primera resulta
ser mas robusta.
Una vez obtenemos la orientacion que representa a todo el conjunto de puntos que conforman
la zona donde se encuentra el codigo, simplemente tenemos que utilizarla para rotar la imagen
original una cantidad igual al angulo estimado.

(a)

(b)

(c)

Figura 6.1.: Rotaciones con la orientacion estimada usando la mediana: (a) imagen original; (b)
imagen original rotada; (c) region donde hemos estimado que se encuentra el c
odigo
Una vez realizada la rotacion, lo que se pretende es obtener una imagen de tama
no igual a la
caja de mnima inclusion [13] que contiene el trozo de imagen original rotada que se corresponde

31

6. Estimacion de la orientacion y rectificacion


al codigo de barras. Para ello debemos basarnos en la region obtenida en el paso anterior y en la
imagen original rotada, siendo el resultado el que se muestra en la imagen (a) de la Figura 6.2.
Una vez obtenida esta nueva imagen, solo nos queda binarizarla para facilitarnos su posterior
decodificacion. Con el objetivo de obtener una mejor binarizacion realizaremos una ecualizacion
del histograma [12] que nos permitira conseguir un mayor constraste entre las barras negras y
los espacios como se puede observar en la imagen (b) de la Figura 6.2.

(a)

(b)

Figura 6.2.: Caja de mnima inclusion que incluye la region donde hemos determinado que se
encuentra el codigo: (a) antes de la ecualizacion del histograma; (b) despues de la
ecualizacion del histograma
Para la obtencion del umbral a partir del cual realizar la binarizacion existen diversos metodos
automaticos de b
usqueda de este [11], como el algoritmo de Otsu [8], que es el empleado en
nuestro caso. El umbral que se obtiene con este metodo se considera aquel punto que parte los
pixels de una imagen en dos clases de niveles de gris C0 = {0, 1, . . . , t} y C1 = {t+1, t+2, . . . , L},
siendo L el valor maximo de niveles de gris y t el umbral optimo que maximiza la separabilidad
de estas dos clases. El metodo se explica con mas detalle en el Apendice C.
De esta manera, el resultado que se obtiene despues de la binarizacion, utilizando como umbral
el obtenido con el algoritmo de Otsu, es el que aparece en la Figura 6.3.

Figura 6.3.: Binarizacion utilizando el algoritmo de Otsu


Tanto la ecualizacion del histograma como la b
usqueda automatica del umbral, mejoran los
resultados de la binarizacion, ya que en un primer momento no usabamos estas tecnicas, siendo
ademas el umbral un valor fijo, con lo cual se obtenan unos resultados bastante peores. Esto se
podra comprobar, con mayor detalle, en el siguiente captulo.

32

7. Decodificaci
on
7.1.

Introducci
on

Durante la fase de decodificacion surgieron bastantes problemas que nos hicieron pensar que
la decodificacion no es un proceso tan trivial como en un principio pueda parecer, una vez
conseguida la localizacion del codigo dentro de la imagen.
Mientras se pensaba en un procedimiento que nos permitiese decodificar el codigo obtenido
en las fases anteriores, surgio la idea de utilizar tecnicas relacionadas con el reconocimiento del
habla. Dentro de estas tecnicas encontramos los modelos de Markov [25], que a base de entrenamiento consiguen identificar palabras de una frase analizando los fonemas que las caracterizan.
Sin embargo dominar esta tecnica requiere de mucho tiempo, ademas una vez determinados los
automatas que conforman el modelo se necesita de un aprendizaje, con el consiguiente gasto de
tiempo que ello conlleva y sobretodo, no se tena la certeza de que fuera a funcionar en nuestro
caso. Debido a estas razones, y a la limitacion del tiempo que tenamos para la realizaci
on de
nuestro proyecto, se descarto su uso.
Otra tecnica relacionada con la anterior es la tecnica DTW (Dynamic Time Warping) [23, 15].
Este metodo intenta el reconocimiemto de palabras conectadas en una frase, pero al contrario
que en los modelos de Markov no requiere de entrenamiento. Llego a implementarse un algoritmo
representativo de esta tecnica, pero adaptado a nuestro caso en particular, es decir, en vez de
conseguir descifrar palabras dentro de una frase intentamos descifrar dgitos de una secuencia
binaria. Los resultados no fueron los deseados y se desestimo esta opcion.
Otro motivo que provoco que desestimaramos estas dos opciones es que son metodos demasiado generales para lo que se pretende en este proyecto. Tiene sentido reconocer palabras con
estas tecnicas, ya que las palabras pueden sufrir deformaciones seg
un quien las pronuncia, el
acento, etc. Nosotros no vamos a alargar nuestro codigo, ni sufrira deformaciones similares a las
indicadas, solo nos afecta la correcta estimacion de la orientacion para la rectificacion del c
odigo
de barras. Por tanto tendra sentido utilizar estas tecnicas, si nuestro codigo si que sufriese esa
serie de transformaciones que provocasen su alargamiento, por ejemplo.
Incluso se penso en utilizar la tecnica de crestas y valles (ridges and valleys) [21], utilizada en
ciertos campos, como la medicina o en el procesamiento de huellas digitales. Para ello se utilizan
estas crestas o valles que aparecen en la imagen como caractersticas geometricas u
tiles en el
analisis de imagenes.
Uno de los trabajos relacionados con los codigos de barras [28], del cual obtuvimos bastante
informacion y que mencionamos en el primer captulo de esta memoria, intentaba decodificar
el codigo de barras de la siguiente forma: una vez obtenida la region de interes se extraa de la
misma una onda donde apareceran crestas y valles correspondientes a los espacios y las barras
del codigo. La onda se umbraliza para conseguir que los elementos de las barras y espacios del
codigo se distingan con claridad. Se extraen elementos de la onda seg
un las anchuras que estos
presentan en el tipo de codigo a interpretar. Finalmente, conociendo lo que ocupa un car
acter
seg
un el tipo de codificacion, se van obteniendo los distintos caracteres que contienen el c
odigo
y se decodifican.

33

7. Decodificacion

7.2.

Procedimiento

La decodificacion se basa en el conocimiento del tipo concreto de codigo de barras que se


utiliza, en nuestro caso el codigo EAN-13. Por este motivo recordar que la forma de codificacion
del codigo EAN-13 se explica en el Apendice D pagina 57 de esta memoria, por lo que en caso
de duda, ante algunos de los comentarios que vamos a mencionar sobre el tipo de codificacion,
sirva este apartado como gua o ayuda.
En cuanto a la decodificacion del codigo de barras podemos aprovechar las posibles ventajas
que se nos presenten, es decir, podemos utilizar el conocimiento ((a priori)) que tenemos, para
simplificar el problema. En nuestro caso en particular, la ventaja primordial es que nosotros pretendemos decodificar codigos de barras utilizados para codificar la numeracion ISBN de los libros
y, debido a ello, conocemos de antemano que los codigos de barras de este tipo de publicaciones
empiezan con los dgitos 978. Sabemos pues que el primer dgito es el 9 y, consecuentemente,
la disposicion en cuanto al tipo de codificacion que presentara la primera parte del codigo, es
decir, el dgito 9 se corresponde con la secuencia ABBABA. Por todo ello podemos determinar que
nuestro codigo presentara la siguiente forma (Tabla D.4 pagina 59):
9

ABBABA

CCCCCC

donde cada dgito se codifica seg


un el tipo de codificacion que se ha determinado.
Para decodificar nuestro codigo vamos a trazar una serie de lneas imaginarias horizontales
sobre la imagen binaria centrada en el codigo obtenida en la fase anterior, a modo de los lectores
l
aser, quedandonos con el valor de cada pxel por el que se atraviesa. El trazar mas de una lnea
persigue una mayor seguridad a la hora de que la decodificacion sea correcta, por ello el n
umero
de lneas que vamos a realizar sera igual a la altura de la imagen.
Las lneas que obtengamos debemos poder dividirlas en segmentos correspondientes a cada
uno de los posibles patrones que debemos encontrar, es decir, patron inicial y final, el patron
intermedio y el correspondiente a cada uno de los dgitos que componen el codigo. El patron
inicial y el final estan formados por tres modulos (101), donde un modulo como se explico en el
apartado 2.2 (pagina 7), es la unidad mnima o basica de un codigo. El patron intermedio, por su
parte, esta formado por cinco modulos (01010) y cada uno de los dgitos esta compuesto por 7
modulos. Con esta informacion, si sabemos que en el codigo nos aparecen 12 dgitos codificados,
ya que el primero no lo esta, tendremos una cantidad total de modulos de 95:
Inicio
3

Seis dgitos
67

Intermedio
5

Seis dgitos
67

Fin
3

N
umero de m
odulos
95

Pero las lneas que calculemos van a tener una cantidad de pixels que dependera de la escala
a la que este el codigo dentro de la imagen. Por ello debemos calcular esta deformacion y ver
como nos afecta en nuestro caso, calculando cuantos pixels por modulo tenemos, es decir:
=

n
M

donde n es la cantidad total de pixels que conforman el codigo en nuestra imagen, sera el
n
umero de pixels por modulo y M es la cantidad total de modulos que aparecen en un codigo,
que en nuestro caso, como hemos visto, vale 95.
Una vez obtenemos este dato podemos averiguar la relacion de pixels que se corresponde con
cada uno de los patrones antes mencionados, simplemente multiplicando el n
umero de modulos
por el n
umero de pixels por modulo , es decir, el tama
no de un dgito sera el valor que se
obtenga de multiplicar el n
umero de pixels por modulo por 7 modulos que forman un dgito.

34

7.2. Procedimiento
Con estos datos podemos ir dividiendo la lnea y quedarnos con los pixels correspondientes
a cada dgito dentro de la lnea e intentar averiguar cual es este dgito. Actuaremos de la
siguiente manera: si sabemos que un dgito codificado con la codificacion de tipo A va a seguir
un determinado patron, teniendo una cantidad de ceros seguida de otra de unos, luego mas ceros
y por u
ltimo otra vez unos, podemos determinar el tama
no maximo que nos va a ocupar un
dgito de la siguiente manera:
= m ,
si (n
umero de pixels por modulo) es 2 y m = 7, siendo m el n
umero de modulos que forma
un dgito, = 14, siendo el n
umero maximo de pixels que ocupara un dgito. Dentro de este
tama
no buscaremos el patron que hemos comentado (0101, con una cierta cantidad en cada caso
de ceros y unos). Podemos encontrar este patron dentro de los 14 pixels y que el u
ltimo pxel
sea el n
umero 14 o no, y sea el 13 o el 12, simplemente donde nos quedemos sera el pxel de
comienzo del siguiente dgito y a partir de este empezaremos a buscar el patron correspondiente
al siguiente dgito en los 14 pixels que le siguen. Para un mejor entendimiento veamos este
ejemplo,
. . . 11 |00001111000111
{z
} 0001100001111
|
{z
} 0 000 . . .
14

13

{z
14

Como se observa, el primer dgito ocupa los 14 pixels que puede tener como maximo, sin
embargo el segundo dgito no ocupa los 14 pixels sino 13, luego la posicion en la que empezar
a el
siguiente dgito sera el pxel que se encuentra dentro de una caja y no el subrayado, como hubiese
sido si el dgito ocupase el maximo n
umero de pixels posible.
Vemos que, a pesar de determinar las cantidades de pixels que cogemos para un dgito concreto,
este valor puede tener una peque
na variacion con lo que realmente ocupa el patron correspondiente al dgito, debido a la perdida de informacion con los decimales y sus redondeos. Por esta
razon buscamos los diferentes patrones o cambios que deben aparecer en cada caso dentro de la
cantidad de pixels que hemos calculado y si se encuentra antes del tama
no maximo que se ha
determinado, entonces ese punto en concreto sera el principio del siguiente dgito.
Una vez tenemos el conjunto de unos y ceros correspondiente a cada dgito, como sabemos
con que tipo de codificacion, A, B o C, se ha codificado, simplemente tenemos que averiguar con
que dgito se corresponde. Para ello vamos a calcular la distancia que presenta este conjunto con
cada uno de los dgitos del tipo correspondiente de la siguiente forma: podemos representar la
forma de codificacion de un dgito en vez de como un patron de unos y ceros, como un patr
on
de n
umero de modulos que representan estos unos y ceros, es decir,
Dgito
0

Codificaci
on A
0001101

N
umero de m
odulos
3211

Como vemos, tenemos tres modulos correspondientes a un espacio ancho, dos modulos correspondientes a una barra ancha, un modulo para un espacio estrecho y un modulo para una barra
estrecha.
Siguiendo esta idea lo mismo haremos nosotros para el conjunto de ceros y unos que obtengamos de la lnea calculada y que representan un dgito, para a continuacion emplear la formula
de la suma de cuadrados y calcular para que dgito esta distancia es menor.
n
X

(xi yi )2

i=1

35

7. Decodificacion
siendo xi cada uno de las cantidades correspondientes al n
umero de modulos del conjunto de
unos y ceros obtenidos de la lnea calculada, yi cada una de las cantidades de modulos de un
dgito en la codificacion correspondiente y la variable n que se corresponde al valor 4 ya que
tenemos este n
umero de cambios en un dgito.
Para que se entienda mejor este paso vamos a explicarlo con un ejemplo. Si tenemos el siguiente
conjunto de pixels para un dgito en concreto:
00001111000111
calculamos el n
umero de unos y de ceros que contiene el conjunto de la siguiente manera,
0000
000 |{z}
111
| {z } 1111
| {z } |{z}
4

a continuacion dividimos el n
umero de unos y ceros por el n
umero de pixels por modulo , de
esta forma obtendremos el valor equivalente de modulos en cada caso.
000 |{z}
111
0000
| {z } |{z}
| {z } 1111
4

Suponiendo que = 2 obtendramos,


0000
000 |{z}
111
| {z } 1111
| {z } |{z}
2

1,5

1,5

Ahora simplemente debemos aplicar la formula de la suma de cuadrados con los 10 dgitos con
los que debemos comparar y con aquel que el resultado sea menor, sera el dgito representado
por el conjunto de unos y ceros que se esta analizando.
Para todas las lneas que realizamos, una vez decodificadas, calculamos el checksum o caracter
de verificacion seg
un la codificacion EAN-13, con el objetivo de asegurarnos que la decodificacion
es correcta. En caso de no ser as ese resultado se descarta por no ser correcto y solo se tienen
en cuenta para el resultado final aquellas lneas donde el checksum sea correcto. Un peque
no
problema que se nos presenta es que en ocasiones aparecen combinaciones de dgitos que consiguen que el checksum sea correcto, pero sin embargo el codigo no representa al que aparece en
la imagen, provocando que el resultado final no sea correcto.
Como explicaremos a continuacion, los dgitos finales que elegiremos como resultado se pueden
obtener mediante diferentes metodos, teniendo en cuenta todas las lneas obtenidas con un
checksum correcto.
Una forma es calcular el n
umero de veces que aparece un dgito en una determinada
posicion y elegir como mas probable aquel que mas veces se repite en esa posicion en
concreto.
Otra posible opcion es utilizando probabilidades, es decir, calcularemos a partir de las
distancias que hemos calculado previamente la probabilidad que presenta un dgito de ser
el correcto y nos quedaremos con aquel dgito cuya probabilidad sea mas alta. La obtencion
de estas probabilidades se realiza a partir de la siguiente formula:
d

p = e 2

donde p sera la probabilidad que presentara un valor de ser el correcto, d es la distancia


obtenida con la suma de cuadrados para ese determinado valor y 2 es la varianza del
conjunto de valores obtenidos con la suma de cuadrados para cada uno de los dgitos con
los que se ha realizado la operacion.

36

7.3. Resultados
Otra forma de obtener el resultado es combinando la probabilidad con la confianza, mediante su producto y eligiendo aquel dgito para el cual se obtenga un mayor valor de esta
operacion. Cuando nosotros trazamos una lnea, esta puede cruzar por una zona que no se
haya elegido como perteneciente al codigo, por ser una mancha o cualquier otra clase de
ruido, pero que, sin embargo, puede ser una zona mnima que igual permita al resto de la
lnea obtener un codigo valido. Ademas los pixels que conforman esta zona estan etiquetados como puntos de la imagen que no contienen informacion valida del codigo. Por tanto
cuando realizamos las distintas divisiones de la lnea para compararlas con los dgitos del
tipo de codificacion que se corresponda para cada posicion en concreto, puede ocurrir que
un conjunto de esos pixels contenga algunos etiquetados como puntos con informacion no
valida. Por ello la confianza nos vendra dada por el porcentaje de puntos con informaci
on
valida dentro del conjunto de pixels.
Como u
ltima opcion estudiada es una igual que la anterior pero en vez de coger el valor
maximo, calculamos la mediana y nos quedamos con el valor que se obtenga.
Como existen diferentes caractersticas o informacion a la hora de la decodificacion del codigo,
se debe de alguna forma intentar clasificar y combinar esta informacion [19], con la intenci
on de
ofrecernos ayuda a la hora de interpretar el codigo. En nuestro caso ha sido una tarea bastante
complicada y se opto por lo siguiente: una vez calculados los cuatro, elegimos aquel resultado
cuyo codigo sea correcto en cuanto al calculo del checksum y ademas empiece por 978 que, como
comentamos al principio de este apartado, son los tres primeros dgitos con los que empieza un
codigo ISBN. Veamos un ejemplo:
Tabla 7.1.: Ejemplo de posibles resultados seg
un la opcion elegida
o
Tecnica
N. decodificado Checksum Inicio 978?
N.o veces aparicion
9788428323086
Correcto
S
Maxima probabilidad
9478228323088
Correcto
No
Maxima probabilidad confianza 9488428323086 Incorrecto
No
Mediana probabilidad confianza 9788428323085 Incorrecto
S

En este ejemplo vemos el resultado obtenido con cada una de las opciones antes mencionadas,
por tanto seg
un estos resultados elegiramos la primera opcion.

7.3.

Resultados

A continuacion se muestra una serie de imagenes junto al codigo que hemos conseguido decodificar. En caso de haber alg
un dgito del codigo erroneo, este aparece dentro de una caja
indicando que no era el correcto. As, de esta manera, se podra apreciar aquellos casos en los
que el metodo funciona correctamente y en cuales falla uno o varios dgitos.
Como podemos observar en la Figura 7.1, se ha conseguido para cada una de esas imagenes
decodificar el codigo y obtener los distintos dgitos que lo componen sin ning
un error. Pero estas
imagenes pertenecan a codigos sin ning
un tipo de deterioro provocado por rayas o manchas,
por ello vamos a analizar como se comporta el metodo ante situaciones menos favorables.
El comportamiento del metodo ante codigos deteriorados lo podemos observar en la Figura 7.2
donde nos aparecen codigos con alg
un tipo de marca que dificulta su decodificacion, sin embargo
la soluci
on obtenida ha sido la deseada sin ning
un tipo de error. Esto es debido a que las manchas
que presenta el codigo de barras no son lo suficientemente fuertes como p o marcadas para evitar
la correcta decodificacion del mismo. En cambio, en ciertos casos como los que mostramos en la

37

7. Decodificacion

9788428323086

9789706860507

9788428328647

Figura 7.1.: Distintas imagenes con el codigo que se ha obtenido al aplicar nuestro metodo
Figura 7.3, el resultado final s que presenta alg
un dgito que no se corresponde con el dgito del
c
odigo en cuestion.

9788428324304

9788428326360

9788428326360

Figura 7.2.: Una serie de imagenes en las que el codigo sufre alguna alteracion en cuanto a
presentar rayas o manchas sobre el, pero la decodificacion final es completamete
correcta

9788428326 8 77

978842 79 27336

97884 1 8328111

Figura 7.3.: Conjunto de imagenes en las que la decodificacion del codigo de barras presenta
alg
un dgito erroneo
Pero no siempre el resultado que se obtiene es aceptable. A veces, el resultado conseguido
presenta un n
umero de dgitos la mayora de ellos erroneo, como se observa en la Figura 7.4.
Este mal funcionamiento es debido a la intensidad de las marcas que presenta el codigo, que
como comentamos en apartados anteriores, afecta a la hora de la deteccion de la zona donde se
encuentra este. Esta mala deteccion provoca que esta u
ltima fase de decodificacion sea erronea
al no tener la region que contiene al codigo la suficiente informacion, de manera que permita la
decodificacion del codigo de barras con exito.

38

7.4. Analisis de robustez

9 0 8 7 42 4 3 42 3 63

978 51121 2864 0

9 34747551 8 301

Figura 7.4.: Imagenes donde el metodo no consegua los resultados deseados


De forma global, los resultados que se han obtenido, basandonos en un conjunto de im
agenes
de prueba, han sido los que se muestran en la Tabla 7.2. Solo comentar, que de las 15 im
agenes
en las que no se consiguio obtener el codigo correcto, casi la mitad de ellas, mas exactamente en
7, el codigo solo presentaba un dgito erroneo.
Tabla 7.2.: Comportamiento del metodo

Caso analizado
Limpia
Da
nada
Total

7.4.

N.o

Resultados
im
agenes Correcto
10
7
24
12
34
19

Incorrecto
3
12
15

Porcentaje
70
50
56

An
alisis de robustez

En este apartado se van a presentar una serie de ejemplos o experimentos para comprobar
hasta que punto el metodo puede ser fiable, o simplemente con el proposito de dejar claro ciertos
aspectos que creemos pueden resultar de interes.

Automatizaci
on del proceso de binarizaci
on
Como comentamos en el captulo anterior, previamente a la binarizacion se realiza una ecualizacion del histograma, Este paso junto a la utilizacion del metodo de Otsu para encontrar el
umbral a partir del cual binarizar, mejoran dicha binarizacion y por consiguiente, la posterior
decodificacion. En la Figura 7.5 se muestra el resultado que se obtiene tanto sin ecualizar y
con un umbral fijo, como el mismo resultado ecualizando el histograma y aplicando Otsu para
encontrar dicho umbral.
Se puede observar que la subimagen que se obtiene del codigo de barras sin haber realizado
la ecualizacion y con un umbral fijo, es peor que en el otro caso comentado. Ademas la decodificacion no tiene exito, debido a que la imagen binarizada no es lo bastante buena para poder
ser decodificada correctamente. De ah la importancia, tanto de la ecualizacion previa de la
imagen como del calculo automatico del umbral a partir del cual binarizar, ya que si este es fijo,
en ciertas imagenes nos va a resultar adecuado, pero en otras no. Debido a esto no podamos
encontrar un valor que fuese adecuado para todos los casos, por lo que se penso en el metodo
de Otsu para evitar este contratiempo.

39

7. Decodificacion

9789687529714
(a)

9769687 0151 1 5
(b)

978968752914
(c)

Figura 7.5.: Obtencion de la subimagen binarizada centrada en el codigo de barras: (a) Imagen
original; (b) obtenida sin ecualizar el histograma y con un umbral fijo de 110; (c)
previamente se ha ecualizado el histograma y se ha aplicado Otsu para calcular el
umbral con el cual binarizar

Influencia del error de la estimaci


on de la orientaci
on
Otro aspecto que resultara de interes analizar es hasta que punto influye el valor que se estima
de la orientacion con el cual se rectifica la imagen. Es decir, si la estimacion de la orientacion es
muy exacta podremos conseguir rotar la imagen de manera que se obtenga el codigo totalmente
horizontal, la variacion que este valor presente nos llevara a obtener un codigo de barras con
una cierta inclinacion hacia un lado o hacia el otro como se puede observar en la Figura 7.6.

(a)

(b) e = 0

(c) |e | = 10

Figura 7.6.: Subimagenes que se obtienen seg


un el error en la estimacion de la orientacion (e )
realizada: (a) imagen original; (b) estimacion de la orientacion practicamente perfecta; (c) estimacion de la orientacion erronea en unos 10
Por ello se ha realizado un experimento con el objetivo de comprobar cual es el intervalo en
el que nos podemos mover en cuanto a la estimacion de la orientacion. De esta forma podremos
conocer tambien la robustez del metodo cuando se tiene que decodificar un codigo que no se
encuentra totalmente horizontal, sino que presenta una cierta inclinacion mas o menos exagerada.
En la Figura 7.7 se muestra una grafica que relaciona el nivel de inclinacion que puede presentar el codigo una vez rectificado con respecto al n
umero de dgitos acertados a la hora de la
decodificacion. Como es logico, en el eje de abcisas, el valor 0 se corresponde a una estimacion
de la orientacion perfecta, con lo que se obtendra un codigo de barras totalmente horizontal.
El resto de valores se corresponde al aumento del error en la estimacion de la orientacion que
presenta el codigo de barras, hacia un lado o hacia el otro.
En la grafica se observa que podemos tener un error en la orientacion bastante elevado, de
alrededor de 10 grados, tanto en un sentido como en otro. A partir de este error el n
umero

40

7.4. Analisis de robustez

14

12

aciertos [digitos correctos]

10

0
-20

-15

-10

-5
0
5
error orientacion [grados]

10

15

20

Figura 7.7.: Efecto que provoca una estimacion de la orientacion erronea a la cantidad de dgitos
acertados en la decodificacion
de dgitos acertados disminuye, viendose mas afectado el resultado en un sentido que en el
otro. Suponemos que la razon por la cual puede suceder esto es debido a la imagen utilizada
para realizar el experimento, la imagen (a) de la Figura 7.6, en la cual podemos observar que
nos falta un trozo de codigo de barras en la parte inferior derecha. Como en la decodificaci
on
trazamos lneas horizontales para obtener la secuencia binaria que despues decodificamos, llega
un momento que la orientacion estimada es tan erronea que conlleva una inclinacion excesiva
del codigo, provocando que las lneas que nosotros trazamos no consiguan atravesar totalmente
este, es decir, no consigan pasar por todas las barras y espacios que lo forman. Esta situaci
on
se ve agravada cuando el codigo de barras se inclina hacia el lado contrario del trozo de c
odigo
que nos falta, provocando as su mala decodificacion.

Influencia del tama


no relativo del c
odigo de barras
Pero nuestro metodo tambien se puede ver afectado por la influencia del tama
no relativo del
codigo de barras dentro de la imagen. Por esta razon se ha realizado un escalado de la imagen
con distintos factores, con el objetivo de aumentar o disminuir el tama
no del codigo y poder
comprobar as, hasta que punto el metodo implementado consigue ser efectivo, en cuanto a la
obtencion de la region que contiene al codigo en la fase de localizacion del mismo.
En la grafica presente en la Figura 7.8 se observa no solo hasta que nivel podemos aumentar o
disminuir el tama
no del codigo y que la localizacion sea buena, sino tambien el n
umero de dgitos
acertados que tenemos en cada caso. La lnea discontinua corresponde al n
umero de dgitos
acertados, mientras que la lnea continua representa la validez de la localizacion conseguida.
Cabe destacar que la determinacion de que una localizacion es buena o no, es cualitativa y
subjetiva, mientras que el n
umero de dgitos acertado es una variable cuantitativa y objetiva.
Por esta razon, cuando la localizacion es buena, se le asigna el maximo valor de dgitos acertados
13 y cuando no lo es su valor es 0, es como si 13 se correspondiese a ((OK)) y 0 a ((no OK)). Este

41

7. Decodificacion
paso se ha realizado para poder tener las dos comparativas en una misma grafica.

14
localizacion codigo
localizacion [OK-no OK},aciertos [digitos correctos]

digitos acertados
12

10

0.2

0.4

0.6

0.8

1
factor de escala

1.2

1.4

1.6

1.8

Figura 7.8.: Estudio para comprobar como afecta el escalado a la localizacion del codigo de
barras y a la cantidad de dgitos acertados en la decodificacion
Seg
un estos resultados se tiene mejor funcionamiento de la localizacion de la region candidata
de contener al codigo, si se reduce el tama
no del mismo que si este se ve aumentado. Esto es
debido a que si aumentamos el tama
no del codigo tambien aumentamos el tama
no de las barras y
los espacios, con lo cual, a la hora de extender la orientacion, estas distancias existentes entre los
bordes provoca que la orientacion de los puntos de borde no se extiendan a todos los puntos de la
zona del codigo que no lo son, y por tanto, provoca que se falle en la fase de localizacion. Ademas,
tambien se observa que en cuanto al intervalo donde la localizacion es correcta, no siempre se
aciertan todos los dgitos del codigo, por lo que se deduce que una acertada localizacion del
c
odigo no siempre provoca una acertada decodificacion del mismo. Esto nos lleva a pensar que
la decodificacion debera ser mejorada de alguna forma, para que no ocurriese esto y sucediera
lo contrario, que una buena localizacion provocara una decodificacion correcta.
Tambien recalcar que pese a todo, la localizacion consigue funcionar incluso con cambios de
escala tan importantes como los que se consiguen aplicando un factor de 0.7 y 1.2.
En la Figura 7.9 se puede observar la misma imagen a la cual se le ha aplicado dos factores
de escala distintos, unos de ellos aumenta la imagen y el otro la disminuye, junto al codigo que
posteriormente se consigue decodificar.

Influencia del n
umero de lneas empleadas en la decodificaci
on
Para finalizar, resultara tambien interesante conocer como afecta a la hora de la decodificacion
el n
umero de lneas que se realizan para la misma. Con este motivo se han utilizado las dos
imagenes presentes en la Figura 7.10, en las cuales se observa como, una de las dos, presenta
una mancha, mientras que la otra se encuentra totalmente limpia sin ning
un tipo de mancha
o raya. Realizaremos un experimento y que consistira en utilizar para la decodificacion un
porcentaje de las lneas que conforman la altura de la subimagen centrada en el codigo. El

42

7.4. Analisis de robustez

(a)

(b)

9788428323086
(c)

978 3661402308
(d)

Figura 7.9.: Imagenes escaladas: (a) se ha aplicado un factor de 0.8, con lo que se reduce el c
odigo
de barras; (b) se ha aplicado un factor de 1.3, con lo que se aumenta el codigo de
barras; (c) region obtenida al realizar el proceso de localizacion del codigo junto
al conjunto de dgitos del codigo de barras decodificado correctamente; (d) regi
on
obtenida para la imagen junto al codigo decodificado erroneamente
resultado del experimento se puede observar en la grafica que aparece en la Figura 7.11. La lnea
continua pertenece al resultado obtenido para la imagen (a) de la Figura 7.10, mientras que la
otra pertenece al resultado obtenido para la imagen (b) de la misma figura.

9788428323086
(a)

9788497320658
(b)

Figura 7.10.: Imagenes analizadas: (a) limpia; (b) presenta una mancha
Como podemos observar en una imagen limpia no importa la cantidad de lneas que utilicemos
a la hora de la decodificacion, ya que tanto con un n
umero elevado de lneas (en este caso el
100 % se corresponde a 118 lneas) como con un n
umero mas peque
no conseguimos decodificar el

43

7. Decodificacion
c
odigo correctamente. Sin embargo, cuando la imagen se ve da
nada por alg
un tipo de mancha,
esto no ocurre as, y s que afecta el n
umero de lneas que analicemos. Hasta que no llegamos
a un 40 % (en este caso el 100 % se corresponde a 79 lneas) no se obtiene la decodificacion del
c
odigo de barras con exito. Por tanto, podemos concluir que para no malgastar recursos con un
40 % de lneas que se utilicen en la fase de la decodificacion sera suficiente, pero como nosotros
no conocemos que tipo de manchas van a presentar los codigos que se analicen, debemos realizar
el maximo n
umero de lneas posible para su correcta decodificacion.

14

12

aciertos [digitos correctos]

10

2
imagen 7.10 (a)
imagen 7.10 (b)
0

10

20

30

40

50
60
numero de lineas [%]

70

80

90

100

Figura 7.11.: Efecto que provoca el n


umero de lneas empleado para la decodificacion a la cantidad de dgitos acertados en la misma

44

8. Sistema experimental
En este punto simplemente vamos a comentar el material utilizado para la realizacion del
proyecto, al igual que mencionaremos ciertas restricciones que se han adoptado durante la implementacion del mismo. Tambien creemos necesario comentar los valores que se han fijado para
algunas parametros utilizados en los algoritmos y el motivo por el cual se ha adoptado ese valor.
Por u
ltimo mostraremos el tiempo de ejecucion del algoritmo, desglosado para cada una de las
fases que lo componen.

8.1.

Informaci
on general

En primer lugar comentar que las imagenes de los codigos de barras empleadas en el proyecto
han sido tomadas del catalogo universitario de libros de matematicas, ciencias, ingeniera y
computacion del a
no 2004 de la editorial THOMSON. La camara con la cual se ha recopilado este
conjunto de imagenes era una camara SONY DFW-VL500 de color digital. Como caracterstica
a destacar comentar que la propia camara contiene unos botones que permiten realizar un zoom
y un enfoque de la imagen de forma manual, sin tener que determinar ning
un parametro desde la
aplicacion con la que se este utilizando la camara. Tambien se hicieron pruebas con otra camara,
una camara digital IEEE 1394, y usando para la visualizacion de las imagenes la aplicaci
on
Coriander 1.0.0 [1], pero finalmente solo se ha usado una de las imagenes que de esta forma se
tomaron.
Para la adquisicion de imagenes se ha empleado un conjunto de funciones de Matlab 7.0 y
que se explican en su correspondiente manual [17]. A continuacion se presenta un ejemplo de las
funciones utilizadas para la captura de una imagen, con el objetivo de poder grabarla luego a
disco:

vid=videoinput{dcam,Y422_320x240);
vid.ReturnedColorSpace=RGB;
preview(vid);
im=getSnapShot(vid);
imshow(im);
imwrite(im,barcode.pgm);

Por u
ltimo solo comentar que el metodo presentado en este proyecto se ha implementado
en C++ bajo el sistema Suse Linux 9.2. Como cabe pensar, se ha utilizado en el mismo una
librera de procesamiento de imagenes, en este caso la CImg [29] en su version 1.0.8, al igual que
un conjunto de programas de visualizacion y conversion de imagenes como el xv o el convert.
El convert se ha utilizado sobretodo para conversion de imagenes y para la realizacion de las
transformaciones geometricas que se pueden ver en la Figura 5.8 (pagina 28).

45

8. Sistema experimental

8.2.

Restricciones

Aunque como se ha comentado, el codigo de barras puede presentar cualquier orientacion, una
restriccion que se ha fijado en cuanto a nuestro proyecto, ha sido que la orientacion del codigo
debe encontrarse en un intervalo de entre 90 y 90 . Esto es debido a que si no fuera as se
dificulta en gran medida la decodificacion del codigo de barras. El motivo es que a la hora de
la rotacion, la orientacion que presentan las barras puede provocar que el codigo se quede en
sentido inverso, es decir, boca abajo, y la decodificacion de esta forma se complica bastante.
Debemos recalcar que no es lo mismo la orientacion del codigo de barras que la orientacion
de las barras presentes en el mismo, ya que cuando el codigo de barras se encuentra en sentido
horizontal la orientacion del mismo son 0 , pero por el contrario las barras presentan un angulo
de 90 .
El tama
no de todas las imagenes con las cuales se ha probado el metodo era de 320 240
pixels, simplemente para tener un tama
no base y por simplicidad, aunque se han hecho pruebas
con unas pocas imagenes de tama
no superior obteniendo resultados similares. Para finalizar
comentar que el tama
no del codigo de barras con respecto a la imagen siempre ha sido mas o
menos parecido dentro de un intervalo.

8.3.

Valores por defecto

Durante todo el proceso un conjunto de parametros, que creemos importantes, han mantenido
un valor fijo debido a una serie de razones que explicamos en este apartado. Estos valores se
muestran a continuacion en la siguiente tabla:

Tabla 8.1.: Parametros con valores por defecto


Fase
Deteccion de bordes
Deteccion de bordes
Deteccion de bordes
Etiquetado y filtrado de regiones

Par
ametro

t1
t2
U

Significado
Varianza
Umbral usado en la histeresis
Umbral usado en la histeresis
Umbral (dif. max. en orientacion)

Valor
0.5
20
40
10

Para los parametros , t1 y t2 utilizados en el algoritmo de Canny para deteccion de bordes, se


ha fijado un determinado valor despues de realizar una serie de pruebas con el objetivo de obtener
los mejores resultados posibles. Se consulto diferente bibliografa para comprobar cuales eran
los valores mas adecuados a utilizar en estas variables, sin embargo no se consiguio determinar
que valores a usar eran los mas acertados ni conocemos procedimientos automaticos para su
seleccion. Por este motivo se realizaron distintas pruebas, con diferentes valores e imagenes, y
nos quedamos con aquellos valores que presentaban unos mejores resultados.
El parametro U , que aparece en el algoritmo 3 (pagina 24) de esta memoria, es el umbral que
se utiliza para determinar cual es la diferencia maxima que pueden presentar dos pixels entre
s, para determinar si son parecidos o no, durante el proceso de binarizacion de un determinado
nivel de la piramide de imagenes. Su valor es el que se indica en la tabla, simplemente porque se
creyo adecuado para obtener el resultado que se pretenda, ademas de ser un valor con el cual
los resultados eran buenos.

46

8.4. Tiempo de ejecuci


on

8.4.

Tiempo de ejecuci
on

El tiempo de ejecucion del metodo implementado, desglosado para cada una de las fases y
expresado en milisegundos, es el que se observa en la Tabla 8.2. El tiempo de ejecucion se ha
determinado despues de realizar una media entre 10 ejecuciones distintas del algoritmo, tomando
en cada una de ellas, una de las 10 imagenes que tenamos donde el codigo aparece sin ning
un
tipo de mancha. El ordenador con el cual se han realizado cada una de las mediciones es un Intel
Pentium 4 a 1.70 GHz con 376 MB de RAM.
Como vemos el tiempo que tarda en ejecutarse el programa no es muy elevado, aunque este
se vera incrementado si se aumenta el tama
no de la imagen a analizar.
Tabla 8.2.: Tiempo de ejecucion de cada una de las fases
Fase
Deteccion de bordes
Deteccion de regiones candidatas
Etiquetado y filtrado de regiones
Estimacion de la orientacion y rectificacion
Decodificacion
Tiempo Total

Tiempo (ms)
339
27
39
633
28
1066

En la etapa de estimaci
on de la orientaci
on y rectificaci
on el tiempo es bastante mas elevado
que en las otras fases, cuando parece que las operaciones que en ella se realizan no deban costar
tanto. Este aumento en el tiempo es debido a que, para la estimacion de la orientacion, calculamos
la mediana de los puntos de borde de la subimagen centrada en el codigo que se obtiene en fases
anteriores, y esta operacion requiere que los valores de los puntos de bordes esten ordenados,
utilizando para ello el metodo de la burbuja, que es el causante de este incremento del tiempo.
Se utiliza este metodo de ordenacion por simplicidad, sin embargo si quisieramos conseguir un
metodo mas eficiente tendramos que implementar otro metodo de ordenacion mas eficiente.
Por u
ltimo, rese
nar que el tiempo que emplea el metodo, como hemos comentado, no es muy
elevado, incluso sin haber dedicado mucho tiempo a la optimizacion del mismo teniendo en
cuenta la eficiencia. Con lo cual se puede decir que es un metodo que se presta a ser utilizado
en aplicaciones para decodificacion de codigos de barras, en las que se requiera resultados al
instante.

8.5.

Duraci
on del proyecto

En la siguiente tabla vamos a mostrar el tiempo que hemos empleado en la realizaci


on de
nuestro proyecto, tanto en semanas como en horas. Se ha desglosado el mismo en un conjunto de
etapas generales que incluye desde la recopilacion inicial de informacion sobre codigos de barras
hasta la composicion de esta memoria. Simplemente recalcar que el tiempo que se muestra en
estas fases no solo incluye la implementacion del proceso empleado en esa fase, sino tambien el
tiempo empleado pensando la idea de como hacerlo, al igual que las posibles modificaciones que
se hayan podido realizar de lo que en un principio se tena pensado. Con esto queremos recalcar
que normalmente se utiliza mas tiempo en pensar como hacer las cosas que en la implementaci
on
de las mismas. Ademas siempre surgen contratiempos que provocan ciertos retrasos que no se
haban previsto.

47

8. Sistema experimental

Tabla 8.3.: Tiempo empleado en la realizacion del proyecto


Etapa
Recopilacion de informacion
Dise
no e implementacion de la localizacion
Dise
no e implementacion de la decodificacion
Documentacion y redaccion memoria
Total

Semanas (5 dias)
2
10
4
4
20

Horas/semana
40
300
120
120
580

En la tabla el calculo de horas/semana se ha realizado teniendo en cuenta que para la etapa


de recopilaci
on de informaci
on se utilizaron 4 horas/dia y para el resto de etapas 6 horas/dia.

48

9. Conclusiones
El metodo implementado para la decodificacion de codigos de barras podemos concluir que
presenta un buen funcionamiento cuando las imagenes que se analizan no contienen codigos de
barras da
nados o afectados por alg
un tipo de ruido, como rayas o manchas, pero por el contrario
si los codigos que aparecen en las imagenes si que presentan ruido, el metodo no resulta ser
suficientemente robusto. Ademas esta tecnica se ve afectada de manera negativa por la calidad
de la imagen, ya que si esta no cumple unas condiciones bastante buenas, el proceso tiende
a fallar y por tanto la decodificacion no es posible. La solucion pasara seguramente por un
preproceso de la imagen a tratar.
Otra caracterstica a considerar de este metodo es que realiza los calculos de forma eficiente,
aunque este tiempo depende en gran medida del tama
no de la imagen. Sin embargo en nuestro
caso, donde se ha utilizado un tama
no de imagen fijo, el resultado se obtena con bastante
rapidez.
En el proceso de la decodificacion, la imagen binaria en la cual nos basamos para posteriormente interpretar el codigo se obtiene despues de una serie de pasos de la imagen original. Sera
a lo mejor mas conveniente utilizar la imagen de bordes de alguna forma, ya que de esta manera
seramos capaces de decodificar no solo codigos de barras con espacios blancos y barras negras,
sino que podramos decodificar codigos donde las barras y espacios fuesen de cualquier color a
parte del blanco y negro. Esto es debido a que la obtencion de bordes nos indica los cambios de
intensidad que aparecen en la imagen y no depende del color de las barras ni espacios, aunque
suponemos que sera necesario de igual manera recurrir a la imagen de niveles de gris, pero s
olo
a nivel consultivo sin depender de ella, simplemente para conocer en cada cambio que se produce
de que nivel venimos y a cual nos dirigimos.
Recalcar que el proceso de localizacion del codigo de barras dentro de la imagen es independiente del tipo de codigo de barras, es decir, cualquier codigo de barras cuya simbologa sea la de
barras y espacios puede ser localizado mediante la tecnica de deteccion utilizada en este metodo.
Sin embargo, para la fase de decodificacion, s que se explota el conocimiento previo que se tiene
del tipo de codificacion que se utiliza, todo ello con el objetivo de simplificar esta operacion.
Tambien mencionar que sera interesante realizar pruebas con una batera de imagenes mucho
mayor, para de esta forma mejorar en cuanto a la deteccion y decodificacion de codigos de barras
en imagenes de poca calidad y con ruido, como manchas, rayas, o cualquier otro factor externo
que modifique el codigo.
Como posibles extensiones o trabajos futuros cabra la posibilidad de intentar que el proceso
no solo funcionase con codigos de barras EAN-13, sino que valiese para otros muchos tipos
de codigos que existen en el mercado actual. Sin embargo hay que tener en cuenta la posible
dificultad que ello conlleva, ya que cada codigo utiliza una codificacion distinta y por tanto, que
el mismo procedimiento funcionase para una gran variedad de codigos puede ser complicado.
Ademas se presenta el problema de, una vez captada la imagen, reconocer que tipo de c
odigo
se esta tratando para utilizar en su decodificacion una serie de pasos que podran ser diferentes
seg
un el tipo o generalizar el proceso de decodificacion.

49

9. Conclusiones

50

A. Detector de bordes de Canny


Como se ha comentado en esta memoria, se penso en la deteccion de bordes como una posible
tecnica para la localizacion del codigo de barras dentro de una imagen, debido a las caractersticas
que este presenta. Por esta razon, se utiliza para tal objetivo, el algoritmo de deteccion de bordes
de Canny, ya que este es presentado en la bibliografa en general como uno de los mejores metodos
para la deteccion de bordes y con el cual se obtienen unos buenos resultados.
El algortimo de Canny [24] se fundamenta en la teora de operadores primera derivada para
la extraccion de bordes y se desglosa en tres grandes pasos:
1. Obtenci
on del gradiente (magnitud y orientaci
on del vector gradiente en cada
pxel)
La entrada es una imagen I corrompida por ruido. Sea H un n
ucleo Gaussiano discreto
con media cero y desviacion estandar .
Suavizar la imagen I con dicho n
ucleo para obtener una imagen de salida J.
Para cada pxel (i, j) en J obtener la magnitud y modulo del gradiente basandose en
las siguientes expresiones:
El gradiente de una imagen f (x, y) en un punto (x, y) se define como un vector
bidimensional dado por la ecuacion:
 


f (x, y)
Gx
x
=
G [f (x, y)] =

Gy
y f (x, y)
siendo un vector perpendicular al borde, donde el vector G apunta en la direcci
on de
variacion maxima de f en el punto (x, y) por unidad de distancia, con la magnitud y
direccion dadas por:
q
|G| =

G2x + G2y ,

(x, y) = tan1

Gy
Gx

Es una practica habitual aproximar la magnitud del gradiente con valores absolutos
de la siguiente manera:
|G| = |Gx | + |Gy |
Obtendremos dos imagenes de salida: Em de la magnitud del gradiente y Eo de la orientacion, de acuerdo a las expresiones anteriores.
2. Supresi
on no m
axima al resultado del gradiente
Con Em y Eo como entradas y una nueva imagen IN como salida, considerar las cuatro
direcciones d1 , d2 , d3 , d4 identificadas por las orientaciones de 0o , 45o , 90o y 135o con
respecto al eje horizontal. Para cada pxel (i, j):
Encontrar la direccion dk que mejor se aproxima a la direccion Eo (i, j) (la perpendicular al borde).

51

A. Detector de bordes de Canny


Si Em (i, j) es mas peque
no que al menos uno de sus dos vecinos en la direccion dk ,
al pxel (i, j) de IN se le asigna el valor 0, IN (i, j) = 0 (supresion), de otro modo
IN (i, j) = Em (i, j).
La salida IN (i, j) es una imagen con los bordes adelgazados, es decir, es Em (i, j) despues
de la supresion no maxima de puntos de borde.
3. Hist
eresis de umbral a la supresi
on no m
axima
La salida IN (i, j) suele contener maximos locales creados por el ruido. Se podran eliminar los pixels por debajo de un determinado umbral, pero esto presenta problemas. Una
solucion puede ser la histeresis de umbral, cuyo procedimiento es el siguiente:
Tomar como entrada IN , que es la salida del proceso anterior, Eo la orientacion de
los puntos de borde de la imagen, y dos umbrales t1 y t2 , tales que t1 < t2 .
Para todos los puntos de IN y explorando IN en un orden fijo:
Localizar el siguiente punto de borde no explorado previamente, IN (i, j), tal que
IN (i, j) > t2 .
Comenzar a partir de IN (i, j), seguir las cadenas de maximos locales conectados
en ambas direcciones perpendiculares a la normal de borde, siempre que IN > t1 .
Marcar todos los puntos explorados y salvar la lista de todos los puntos en el
entorno conectado encontrado.
La salida es un conjunto de bordes conectados de contornos de la imagen, as como
la magnitud y orientacion, describiendo las propiedades de los puntos de borde.

52

B. Algoritmo cl
asico de etiquetado de
componentes conexas
Durante una de las fases de nuestro metodo, necesitamos poder elegir de entre un conjunto de
regiones aquella que tiene mayor probabilidad de ser la zona donde se encuentra el codigo. Sin
embargo, para llegar a este filtrado, previamente necesitamos etiquetar de alguna manera estas
regiones, y as poder distinguir unas de otras. Pero no solo distinguir, sino poder seleccionar la
que nosotros queramos. Para esta tarea un algoritmo de etiquetado de componentes conexas se
presentaba como una buen opcion.
El algoritmo clasico de etiquetado de componentes conexas [24] se caracteriza por realizar
solamente dos pasadas a traves de la imagen y necesita mantener durante todo el proceso una
tabla de equivalencias de etiquetas.
El primer paso del algoritmo consiste en la propagacion de etiquetas, es decir, como en la
mayora de algoritmos de este tipo, procesa en cada instante una fila de la imagen y asigna
nuevas etiquetas al primer pxel de cada componente, intentando ademas propagar la etiqueta
de cada pxel a sus pixels vecinos, que se encuentran a su derecha o por debajo de el.
Cuando se llega a la situacion en la que dos etiquetas distintas se propagan al mismo pxel,
prevalece la mas peque
na y cada equivalencia que se encuentra es introducida en una tabla de
equivalencias. Cada una de las entradas de la tabla esta formada por un par ordenado, donde
los valores de sus componentes son las etiquetas equivalentes halladas durante el proceso.
Una vez realizado este paso, se calculan las clases de equivalencias tomando el cierre transitivo
del conjunto de equivalencias almacenadas en la tabla de equivalencias. A cada una de las clases
de equivalencia encontradas se le asigna una etiqueta, generalmente la mas peque
na (o la m
as
antigua de la clase).
En el segundo paso se asigna a cada pxel la etiqueta de la clase de equivalencia correspondiente
calculada en el paso anterior.
El algoritmo clasico de etiquetado de componentes conexas se describe en el Algoritmo 4.
La funcion Vecinos() devuelve el conjunto de los vecinos ya etiquetados de un determinado
pxel en su misma lnea o en la lnea previa. La funcion NuevaEtiqueta() genera una nueva
etiqueta con valor entero cada vez que es llamada. La funcion Etiquetas() recibe como entrada un
conjunto de pixels ya etiquetados y devuelve el conjunto de sus etiquetas. Por u
ltimo la funci
on
ClasesEquivalencia() simplemente encuentra las clases de equivalencia de entre el conjunto de
equivalencias almacenadas en la tabla correspondiente.

53

B. Algoritmo clasico de etiquetado de componentes conexas

Algoritmo 4 Metodo cl
asico de etiquetado de componentes conexas
Entrada: Una imagen binaria I de tama
no M N
Salida: Una imagen etiquetada E, donde E(i, j) es la etiqueta de I(i, j)
1: Inicializar la tabla de equivalencias T
2: for i 1 to M do
3:
for j 1 to N do
4:
E(i, j) 0
5:
if I(i, j) = 1 then
6:
V Vecinos(i, j)
7:
if V = then
8:
e NuevaEtiqueta()
9:
else
10:
e mn(Etiquetas(V ))
11:
E(i, j) e
12:
for all e0 Etiquetas(V ) e0 6= e do
13:
T T (e0 , e)
14: C ClasesEquivalencia(T )
15: for all c C do
16:
Equivalente[c] mn(Etiquetas(c))
17: for i 1 to M do
18:
for j 1 to N do
19:
if I(i, j) = 1 then
20:
E(i, j) Equivalente[Clase(E(i, j)]

54

C. M
etodo de Otsu
Con el objetivo de poder calcular de forma automatica un umbral a partir del cual binarizar
una imagen y evitar as los inconvenientes que presenta la eleccion de un umbral fijo, se pens
o en
la utilizacion del metodo de Otsu como opcion acertada para tal fin.
El metodo de Otsu [8], propuesto en 1979, es un algoritmo para la determinacion autom
atica
de un umbral de binarizacion a partir del histograma de una imagen. Si consideramos que el
conjunto de niveles de gris que conforman una imagen son G = {0, 1, 2, . . . , L}, siendo L el valor
maximo de niveles de gris, el umbral que vamos a obtener se considera el punto que parte los
pixels de una imagen en dos clases de niveles de gris C0 = {0, 1, . . . , t} y C1 = {t+1, t+2, . . . , L},
donde t es el umbral optimo que maximiza la separabilidad de estas dos clases.
El metodo esta basado en un analisis discriminante. Un umbral optimo puede ser determinado
minimizando algunas de las siguientes funciones con respecto a t:
=

2
B
2 ,
W

2
B
,
T2

T2
2
W

k=

De los tres criterios a minimizar, el segundo es el mas simple. Por tanto, el umbral optimo se
define como:
t = arg mn (t)
tG

donde
T2 =

L
X

(i T )2 Pi ,

T =

L
X

i=0

iPi ,

i=0

2
B
= w0 w1 (1 0 )2 ,

w0 =

t
X

Pi ,

w1 = 1 w0 ,

i=0

1 =

T t
,
1 w0

t =

t
X
i=0

iPi ,

0 =
Pi =

t
w0
ni
n

donde ni es el n
umero de
umero total de pixels en la imagen
Ppixels con nivel de gris i y n es el n
dada definido por n = L
n
.
Adem
a
s,
P
es
la
probabilidad
de aparicion del nivel de gris i
i
i=0 i
ni
definido como Pi = n .
Por u
ltimo, solo recalcar que la bibliografa encontrada acerca de este metodo presentaba
erratas y finalmente el metodo que aqu se presenta y que es el implementado en la memoria,
surge de la combinacion de las distintas fuentes consultadas [10, 8].

55

C. Metodo de Otsu

56

D. Caractersticas del c
odigo EAN-13
Existe una gran variedad de codigos de barras en el mercado, sin embargo en nuestro proyecto
nos hemos dedicado a trabajar con una sola clase de ellos, el codigo EAN-13 [20], uno de los
mas famosos y utilizados hoy en da.
El sistema de codificacion Universal Product Code (UPC) fue adoptado en los EE.UU. por
la industria de la alimentacion en los a
nos 70. Presentaba una serie de ventajas como eran su
rapidez, precision y fiabilidad al entrar informacion de stock en las computadoras. Este triunfo
tan repentino llevo al desarrollo del European Article Numbering System (EAN), una simbologia
similar a la UPC, que esta ampliamente difundida por Europa y el resto del mundo.
Existen varias versiones de estos codigos, siendo el codigo de barras EAN-13 el mas utilizado.
Esta formado por: un margen izquierdo, un dibujo normalizado de separacion, un dibujo que representa directamente seis dgitos e indirectamente un septimo, un dibujo central de separaci
on,
un dibujo de barras y espacios que representa directamente seis dgitos, un dibujo normalizado
de separacion y un margen derecho. De forma grafica lo podemos observar en la Figura D.1.

Figura D.1.: Formato codigo EAN-13


Cada codigo de barras contiene 13 valores, desde las posiciones 1 a la 13. El significado de
estos dgitos es el que se muestra en la Tabla D.1.
En el codigo de barras existen dos separadores izquierdo y derecho, y una lnea intermedia
mas larga. Estas tres lineas son mas largas que el resto y son usadas para ((calibrar)) el escaner a
la dimension del codigo de barras. El formato de estos separadores se muestra en la Tabla D.2.
La primera posicion cae a la izquierda del borde izquierdo y tiene un significado especial, los
otros doce dgitos estan escritos dentro del codigo y estan divididos en dos grupos por la lnea
intermedia. Cada valor esta codificado a traves de 7 modulos: negro=1 y blanco=0, formando
dos parejas de barras de diferentes gruesos. Por tanto, cada dgito se representa mediante dos
barras y dos espacios que tienen una anchura total de siete unidades o modulos, donde cada

57

D. Caractersticas del codigo EAN-13

Tabla D.1.:
Posici
on
1, 2
3
4, 5, 6, 7
8, 9, 10, 11, 12
13

Separador
Izquierdo
Derecho
Central

Significado de los dgitos del codigo seg


un la posicion
Significado
identificacion del pas donde se comercializa el producto
identificacion del pas (a veces del fabricante)
identificacion del fabricante del producto
identificacion del producto
dgito de verificacion (su valor es calculado)

Tabla D.2.: Caractersticas de los separadores


Caractersticas
3 modulos (2 barras con 1 espacio al medio, codificado: 101)
3 modulos (2 barras con 1 espacio al medio, codificado: 101)
5 modulos (3 espacios con 2 barras intercaladas, codificado: 01010)

barra y cada espacio pueden tener una anchura de una, dos, tres o cuatro unidades.
En la simbologa EAN pueden elegirse tres formas distintas de codificacion A, B y C para
representar cada dgito. Estas formas se utilizan para codificar los caracteres numericos ubicados
entre las posiciones 2 y 13.
Para representar la primera mitad del codigo de barras se emplea una combinacion de los
conjuntos numericos A y B, donde el orden de los conjuntos numericos utilizados representa a
su vez un septimo dgito, que aparece al principio de la secuencia de caracteres situada debajo
del codigo de barras. El conjunto numerico C se emplea solo para la segunda mitad del codigo
de barras, lo que provoca que el dispositivo lector pueda leer el codigo en cualquier sentido y
decodificarlo correctamente.
Por tanto los caracteres del tipo A y B estaran a la izquierda del separador central, mientras
que los del tipo C se ubican a la derecha del separador central, como se puede observar en la
Figura D.2.

Figura D.2.: Tipo de codificacion seg


un la posicion
La codificacion para cada uno de los tres diferentes posibilidades se muestran en la Tabla D.3,
teniendo en cuenta que 1=negro y 0=blanco.
Las secuencias A y B de los caracteres ubicados en las posiciones de la 2 a la 7, determinan
el caracter numerico ubicado en la posicion 1. Este caracter no esta representado por barras ni
espacios y generalmente se imprime en la zona de la izquierda. En este punto hemos encontrado

58

Tabla D.3.: Representacion de cada dgito seg


un el tipo de codificacion
Dgito
Codificaci
on A
Codificaci
on B
Codificaci
on C
(Parte izquierda) (Parte izquierda) (Parte derecha)
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

una cierta controversia en cuanto a que, seg


un la fuente consultada, el caracter numerico de la
posicion 1 depende de la combinacion de los caracteres de la primera parte del codigo teniendo
en cuenta el tipo de codificacion como hemos comentado o por el contrario, es el primer car
acter
el que determina la combinacion para cada uno de los seis primeros dgitos. Aunque por l
ogica
parece mas probable la primera opcion, ya que el primer dgito no se encuentra codificado
dentro del codigo y por tanto los lectores no pueden saber de que dgito se trata. Las posibles
combinaciones que determinan el valor del primer dgito son las que se muestran en la Tabla D.4.
Tabla D.4.: Posibles combinaciones de los seis primeros dgitos del codigo
Posici
on 1 Posici
on 2 Posici
on 3 Posici
on 4 Posici
on 5 Posici
on 6 Primer dgito
A
A
A
A
A
A
0
A
A
B
A
B
B
1
A
A
B
B
A
B
2
A
A
B
B
B
A
3
A
B
A
A
B
B
4
A
B
B
A
A
B
5
A
B
B
B
A
A
6
A
B
A
B
A
B
7
A
B
A
B
B
A
8
A
B
B
A
B
A
9

Por u
ltimo, el dgito de verificacion se calcula siguiendo este procedimiento:
1.

Multiplicar el valor de cada caracter en posicion par por 3.

2.

Sumar entre s los 6 productos anteriores, cada uno de valor entre 0 y 27, mas los valores
de cada caracter en posicion impar, excepto la posicion 13, obteniendo as un valor que se
llama ((Suma de Productos)) (SP ).

3.

Dividir la suma de productos por 10 (constante), obteniendo un cociente (C) y un resto


(R), o sea C = [ SP
10 ] y R = SP 10C.

4.

Restarle a 10 el resto, obteniendo el valor del caracter de verificacion (CV ) que se ubicar
a en
la posicion 13 del codigo, es decir, CV = 10 R.

59

D. Caractersticas del codigo EAN-13


La autoverificacion del caracter (CV ) recien calculado se realiza con el valor de la posicion
13. Si el valor obtenido coincide con el de la posicion 13, queda confirmado y verificado.

60

Bibliografa
[1] Aplicacion para manejo y visualizacion de imagenes. http://www.tele.ucl.ac.be/

PEOPLE/DOUXCHAMPS/ieee1394/coriander. Ultimo
acceso: Junio 2005.

[2] History of barcodes. http://www.basics.ie/History.htm. Ultimo


acceso: Junio 2005.
[3] Informacion general sobre codigos de barras. http://www.serebella.com/encyclopedia/

article-Barcode.html. Ultimo
acceso: Junio 2005.
[4] Informacion general sobre impresoras de codigos de barras. http://www.dimension-x.

com/cf-onsprn2.htm. Ultimo
acceso: Junio 2005.
[5] Kjersti Aas and Line Eikvil. Decoding bar codes from human-readable characters. Pattern
Recognitions Letters (PRL), 18:15191527, 1997.
[6] Russ Adams. Informacion general sobre codigos de barras. http://www.barcode-1.com.

Ultimo
acceso: Junio 2005.
[7] Jorge Badenas Carpio, Jose Luis Llopis Borras, and Oscar Coltell Simon. Curso pr
actico
de programaci
on en C y C++. Publicacions de la Universitat Jaume I, 1997.
[8] M. Cheriet, J.N. Said, and C. Y. Suen. A recursive thresholding techniques for image
segmentation. IEEE Transactions on Image Processing, 7:918921, 1998.
[9] Secretara de Estado de Cultura. Manual del Usuario, 2.a edicion espa
nola, 2001. Traducci
on
de ISBN Users Manual, 4th ed.
[10] Arturo de la Escalera Hueso. Visi
on por computador: fundamentos y metodos. Prentice
Hall, 2001.
[11] ivind Due Trier and Anil K. Jain. Goal-directed evaluation of binarization methods. IEEE
Transactions on Pattern Analysis and Machine Intelligence, 17:11911201, 1995.
[12] Nick Efford. Digital Image Processing. A Practical Introduction Using Java. AddisonWesley, 2000.
[13] H. Freeman and R. Shapira. Determining the minimum-area encasing rectangle for an
arbitrary closed curve. Communications of the ACM, 18:409413, 1975.
[14] Francisco Ortegon Gallego. LATEX, primeros pasos. MASSON, S.A., 1992.
[15] C. Godin and P. Lockwood. DTW schemes for continuous speech recognition: a unified
view. Computer Speech and Language, 3:169198, 1989.
[16] Silicon Graphics. Standard Template Library Programmers Guide. http://www.sgi.com/

tech/stl. Ultimo
acceso: Junio 2005.

61

Bibliografa
[17] The MathWorks Inc. Image Acquisition Toolbox Users Guide. For Use with MATLAB.
20032005.
[18] Eugene Joseph and Theo Pavlidis. Bar code waveform recognition using peak locations.
IEEE Transactions on Pattern Analysis and Machine Intelligence, 16:630640, 1994.
[19] Joseph Kittler, Mohamad Hatef, Robert P.W. Duin, and Jiri Matas. On combining classifiers. IEEE Transactions on Pattern Analysis and Machine Intelligence, 20:226239, 1998.
[20] Vault Information Services LLC. EAN-13 Symbology. http://www.barcodeisland.com/

ean13.phtml. Ultimo
acceso: Junio 2005.
[21] Antonio M. Lopez, Felipe Lumbreras, Joan Serrat, and Juan J. Villanueva. Evaluation
of methods for ridge and valley detection. IEEE Transactions on Pattern Analysis and
Machine Intelligence, 21:327335, 1999.
[22] Ruben Mu
niz, Luis Junco, and Adolfo Otero. A robust software barcode reader using
the Hough transform. IEEE International Conference on Information, Intelligence, and
Systems, pages 313319, 1999.
[23] Hermann Ney. The use of a one-stage dynamic programming algorithm for connected word
recognition. IEEE Trans. on ASSP, 32:263271, 1984.
[24] Gonzalo Pajares and Jes
us M. de la Cruz. Visi
on por Computador. Imagenes digitales y
aplicaciones. Ra-Ma, 2001.
[25] L.R. Rabiner. A tutorial on hidden Markov models and selected applications in speech recognition. Proceedings of the IEEE, 77:257286, 1989. http://www.ai.mit.edu/courses/6.
867-f02/papers/rabiner.pdf.
[26] Jun Rekimoto, Yuji Ayatsuka, and Kazuteru Hayashi. Augment-able reality: Situated communication through physical and digital spaces. International Symposium on Wearable
Computers (ISWC), pages 6875, 1998.
[27] Stephen Shellhammer, David P. Goren, and Theo Pavlidis. Novel signal-processing techniques in barcode scanning. IEEE Robotics & Automation Magazine, 6:5765, 1999.
[28] Peter Sundstrom. Bar code reader for surface mounting systems. http://www.f.kth.
se/~f96-psu/thesis.html, 2001. Master thesis on KTH - Kungliga Tekniska Hogskolan
[Royal Institute of Technology] (Stockholm).
[29] David Tschumperle. The C++ template image processing library.

sourceforge.net. Ultimo
acceso: Junio 2005.

http://cimg.

[30] Todd Wittman. Deblurring and restoration in barcode signal processing. SIAM (Society
for Industrial and Applied Mathematics) News, 37, 2004.
[31] William J. Wolfe, Jim Gunderson, and Matthew E. Walworth. Computer vision barrel
inspection. Mobile Robots VIII, 2058:128133, 1993.

62

También podría gustarte