Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Indice general
1. Introduccion 1
1.1. Motivacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Organizacion de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3. Trabajos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Codigos de barras 7
2.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Denicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3. Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4. Ventajas e inconvenientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6. Clases de codigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.7. Dispositivos de escritura y lectura de codigos de barras . . . . . . . . . . . . . . . 11
3. Deteccion de bordes 15
3.1. Tecnicas de localizacion de codigos de barras . . . . . . . . . . . . . . . . . . . . 15
3.2. Detector de bordes de Canny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4. Deteccion de regiones candidatas 19
4.1. Idea general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5. Etiquetado y ltrado de regiones 23
5.1. Etiquetado de componentes conexas . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6. Estimacion de la orientacion y recticacion 31
6.1. Idea general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7. Decodicacion 33
7.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
7.4. Analisis de robustez . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
vii
Indice general
8. Sistema experimental 45
8.1. Informacion general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
8.2. Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
8.3. Valores por defecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
8.4. Tiempo de ejecucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
8.5. Duracion del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
9. Conclusiones 49
A. Detector de bordes de Canny 51
B. Algoritmo clasico de etiquetado de componentes conexas 53
C. Metodo de Otsu 55
D. Caractersticas del codigo EAN-13 57
viii
1. Introduccion
1.1. Motivacion
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 especicacion unica 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 identicacion de
objetos, es decir, si los objetos de nuestro interes presentan etiquetas de codigos de barras en
una supercie visible, entonces un simple sistema de camaras portatiles puede reconocer el codigo
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 decodicacion. Se ha utilizado una serie de procedimien-
tos 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 concreta-
mente 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 ultimo uso donde nos centraremos, ya que los libros se codican basandose
en un sistema internacional de numeracion, el ISBN (International Standard Book Number) [9],
el cual utiliza para su codicacion 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 codicados dentro de este, por que no leer estos dgitos
en lugar de decodicar 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 identicar las cifras de un codigo numerico con la suciente rapidez, facilidad y abilidad
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 decodicar 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. Organizacion de la memoria
La memoria esta dividida en una serie de captulos donde cada uno de ellos presenta la
siguiente informacion:
1
1. Introduccion
El captulo 2, ((Codigos de barras)), se dedica a aportar una serie de datos relacionados con
los codigos de barras: denicion, ventajas e inconvenientes, aplicaciones, lectores, etc., a
modo de informacion introductoria al mundo de los codigos de barras.
En el captulo 3, ((Deteccion 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, ((Deteccion 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 ltrado 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 ltrado, podemos quedarnos con la region que ((supuestamente)) contiene el codigo.
En el captulo 6, ((Estimacion de la orientacion y recticacion)), 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 recticar la imagen y conseguir una imagen centrada en el codigo,
para su posterior binarizacion.
En el captulo 7, ((Decodicacion)), 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 decodicacion 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 ultimo captulo simplemente mencionamos las conclusiones a las que llegamos despues
de la realizacion de este proyecto.
De forma graca el proceso que se ha seguido para la localizacion y posterior decodicacion
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.
2
1.3. Trabajos relacionados
La decodicacion de codigos de barras da nados es un tema que se presta a estudio. Un ejemplo
sera la decodicacion de los codigos de barras que nos aparecen en las recetas medicas y que se
ven afectados por rmas 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
decodicar 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 sucientemente buena para su decodicacion.
Gracias a este nuevo metodo se consigue que la imagen pueda presentar una baja resolucion y
se decodique el codigo con exito, ya que los caracteres o dgitos presentes debajo del codigo
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 codicacion
que se quiere decodicar, 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 de-
codicacion 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 decodicar 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
ltros adaptativos de umbralizacion del gradiente. Este ltrado identica bordes verticales en la
imagen. En la segunda fase la imagen es analizada por areas que tienen una alta concentracion
de estos bordes verticales, asumiendo que son zonas con una alta probabilidad de ser el codigo
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 co-
mo 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 inuenciado por el tama no del codigo
de barras respecto a la imagen.
Normalmente los sistemas de analisis de imagenes requieren que el codigo de barras este con-
tenido 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 decod-
icacion 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 decodicarlo [28]. La localizacion del codigo
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 decodicacion. En nuestro proyecto
tambien explotamos este conocimiento que tenemos del codigo de barras para su decodicacion.
3
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 clasicar 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 decodicacion 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 ltros 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 decodicacion de codigos de barras borrosos o
emborronados [30].
4
1.3. Trabajos relacionados
Figura 1.1.: Diagrama global del proceso implementado
5
1. Introduccion
6
2. Codigos de barras
2.1. Introduccion
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 codicacion.
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 ultimo se mencionan las distintas clases
de codigos que existen, para acabar comentando diferentes tipos de impresoras [4] y lectores para
esta clase de codicacion en concreto.
2.2. Denicion
Los codigos de barras son un sistema de codicacion creado con el objetivo de identicar
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 codicacion es tan exitosa debido a la abilidad
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 denir un codigo de barras como un patron formado por barras y espacios parale-
los que codica 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 vericacion 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 codicacion 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, multilas y bidimensionales. Una gran parte de la literatura existente llama tambien
codigos bidimensionales a los considerados multilas. Por tanto se puede realizar una division
entre codigos de una dimension (lineales) donde solo importa el ancho de las barras y el espacio
entre ellas y codigos de dos dimensiones (multilas y bidimensionales) donde importa la altura
y anchura del smbolo.
Nomenclatura basica
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:
7
2. Codigos de barras
Modulo: 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.
Caracter: formado por barras y espacios. Normalmente se corresponde con un caracter
alfanumerico.
Todo esto se observa mejor gracamente 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.
Razon 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 nal 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 codicacion tiene aceptacion mundial y hoy en da es un
requisito indispensable para que los productos de una determinada empresa puedan ser comer-
cializados 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 codicacion de
informacion.
En 1932, Wallace Flint, un estudiante de la Universidad de Harvard, realizo un proyecto
nal 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,
8
2.3. Historia
que posteriormente se introduciran en una serie de lectores que activaran un sistema automatico
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 Filadela,
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
identicar material rodante ferroviario y de ah en adelante ha venido avanzando su aplicacion
y desarrollo. A nales 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 identicacion y vericacion 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 identicacion 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 multilas que
aparecio en el mercado.
Poco a poco, durante los a nos 80 y 90, la tecnologa de identicacion y manejo de datos a
traves de codigos de barras, logra convertirse en un estandar al ser aplicada, cada vez con mas
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.
9
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 eciencia debido a la rapidez en la lectura, ahorrando tiempo y dinero.
La relativa exibilidad 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 decodiquen la informacion.
La facilidad con la cual es posible dicultar la legibilidad de ciertos codigos, es decir,
simplemente con agregar una barra al inicio o nal del smbolo o trazar una lnea paralela a
las barras en cualquier lugar dentro del codigo, complica en gran manera su decodicacion.
2.5. Aplicaciones
Las aplicaciones del codigo de barras cubren practicamente cualquier tipo de actividad hu-
mana, lo podemos encontrar tanto en la industria, en el comercio, en instituciones guberna-
mentales, y en un sinn de areas, ya que cualquier sector puede beneciarse del uso de este
sistema de codicacion. 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
identicacion 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, identicacion 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 codicacion 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 identicacion automatica, presen-
tando una serie de benecios desde la mejora de la calidad y servicio al cliente hasta una mayor
competitividad.
2.6. Clases de codigos
La simbologa de un codigo de barras nos dene los detalles tecnicos de cada tipo particular
de codigo de barras, la anchura de las barras, la forma en que se codica 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 unica que lo identica.
Por tanto la peque na capacidad de codicacion de estos codigos los hace depender de sistemas
de datos externos, sin el sistema externo el codigo no tiene signicado. La dependencia de
sistemas externos de datos ofrece dos importantes ventajas:
Proporciona la posibilidad de acceder a gran cantidad de informacion utilizando un codigo
y smbolo relativamente corto.
Permite cambiar los datos asociados a este sin tener que editar o modicar nuevamente el
codigo.
El otro tipo de codicacion que surgio no hace tantos a nos es la codicacion bidimensional,
dentro de la cual tenemos los llamados codigos de barras apilados o multilas (((stacked))) y los
codigos matriz (((matrix))). La principal ventaja de utilizar codigos de dos dimensiones es que
los datos estan codicados tanto en la altura como en la longitud del smbolo y la informacion
no se reduce solo al codigo del artculo, sino que puede almacenar gran cantidad informacion
que puede ser leda de manera rapida y able, 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 dimension.
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 posi-
bles 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 com-
paradas frente al incremento en coste. Por tanto, dependiendo del tipo de necesidades de iden-
ticacion 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 codicacion 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 bidi-
mensionales como curiosidad, ya que estos suelen ser, dentro de los codigos de barras, los mas
desconocidos.
(a) (b)
Figura 2.2.: Codigos bidimensionales: (a) Codablock; (b) MaxiCode
2.7. Dispositivos de escritura y lectura de codigos 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 laser 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
codigos 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 impresion 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 especca para etiquetas, una impresora de transferencia termica, capaz de impri-
mir, 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 gura 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 decodiquen 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 vericacion de datos inmediata y
mas sosticada, 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 decodica 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 reejada 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 reejan. El patron de la luz reejada 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 decodicador usa algoritmos matematicos para
traducir los impulsos electricos en un codigo binario y transmite el mensaje decodicado 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 lapiz (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 supercies duras, planas y horizontales.
2. Lectores CCD (Charge Coupled Device):
Son lectores de contacto que emplean un fotodetector CCD formado por una la 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 laser
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 laser tipo pistola:
Realiza un barrido mediante una luz laser que genera una se nal similar a la del lapiz
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 laser jos 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 ja.
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. Deteccion de bordes
3.1. Tecnicas de localizacion de codigos de barras
Existen distintas tecnicas para identicar donde se encuentra un codigo de barras dentro de
una imagen [28]:
Algoritmo Morfologico Matematico: Metodo de localizacion basado en operaciones
morfologicas basicas como: dilatacion, erosion, cierre y un conjunto de operaciones mor-
fologicas 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 ltros morfologicos en diferentes orientaciones con el n de
extraer la orientacion del codigo de barras.
Analisis de texturas mediante ltros 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 suciente 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.
Deteccion de texto en las imagenes: 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 ltros
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 ultima 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
ultima, 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 nal que perseguimos es conseguir la decodicacion del codigo de barras,
para lo cual un paso esencial es la localizacion dentro de la imagen del codigo en cuestion.
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 clasicados 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 maniesta 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]:
Obtencion del gradiente (magnitud y orientacion del vector gradiente en cada pxel).
Supresi on no maxima o adelgazamiento del ancho de los bordes, obtenidos con el gra-
diente, hasta lograr bordes de un pxel de ancho.
Histeresis de umbral al resultado de la supresion no maxima, con este proceso se pre-
tende reducir la posibilidad de aparicion de falsos contornos.
Por tanto, en primer lugar a la imagen se le aplica un ltro 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 denidos. 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 ltros
gaussianos por ejemplo, ya que seg un estos valores los resultados pueden ser mejores o peores.
Los valores que se han tomado denitivamente 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
denidas 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 ltro 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 ltro 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 ltro
Gaussiano previamente al ltro 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) orien-
tacion; (c) supresion no maxima; (d) histeresis de umbral
17
3. Deteccion de bordes
18
4. Deteccion 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 n, 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 region 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 orientacion 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 + 1, j)
I(i, j + 1) I(i + 1, j + 1)
A partir de estos pixels se toman aquellos que son bordes y se realiza una media.
I =
(i,j)N
I(i, j)
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 orientacion 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 V
x
V
y
utilizada
Salida: La imagen S de tama no
M
V
x
M
V
y
1: for x 1 to M with step V
x
do
2: for y 1 to N with step V
y
do
3: numbordes 0
4: Suma 0
5: for all (i, j) Vecindad(x, y, V
x
, V
y
) 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(
x
V
x
,
y
V
y
) ((no-borde))
11: else
12: S(
x
V
x
,
y
V
y
)
Suma
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 ultima imagen del escalado, es decir, hemos llegado al ultimo 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 Reconstruccion para extender la orientacion
Entrada: Imagen I de tama no M N y la vecindad V
x
V
y
utilizada
Salida: Imagen S de tama no (M V
x
) (N V
y
)
1: for x 1 to M do
2: for y 1 to N do
3: i x V
x
4: j y V
y
5: for all (i, j) Vecindad(x, y, V
x
, V
y
) 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 pre-
tenda 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 orientacion
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 ltrado 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
identicativa, que debe ser unica de la region a la cual pertenecen los pixels y constituye su
identicador [24].
5.2. Procedimiento
Con el n 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 orientacion, 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 ultimo 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 orientacion 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 ltrado de regiones
Algoritmo 3 Binarizacion de un determinado nivel l de la piramide
Entrada: Una imagen O
l
de tama no M N, la vecindad V
x
V
y
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 V
x
do
3: for y 1 to N with step V
y
do
4: num 0
5: for all (i, j) Vecindad(x, y, V
x
, V
y
) do
6: if I(i, j) = ((no-borde)) then
7: V ect[num] O
l
(i, j)
8: num num+ 1
9: if num < mitad then
10: for all (i, j) Vecindad(x, y, V
x
, V
y
) 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, V
x
, V
y
) do
16: S(i, j) 1
17: else
18: for all (i, j) Vecindad(x, y, V
x
, V
y
) 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 ultimo 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 ultimo 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 compro-
bacion 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 algo-
ritmo 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 nalizar, 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 ultimo nivel de la piramide: (a) resultado obtenido con
una vecindad 2 2 y binarizando a partir del ultimo nivel; (b) resultado obtenido
con una vecindad 33 y binarizando a partir del nivel L2; (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 modico 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 region.
En la imagen (c) el codigo de barras previamente fue modicado manualmente, dibujando una
lnea al principio y otra al nal del mismo para ver que resultado obtenamos. Como se puede
25
5. Etiquetado y ltrado 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
codigos de barras, la facilidad con la cual es posible da narlos, conlleva la consiguiente dicultad
para los lectores que intenten descifrar dicho codigo. Pero esto ocurre tambien con otros tipos
de codicacion, por ejemplo, caracteres normales, los cuales si son da nados se diculta, 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 nal
(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 dicultando su posterior
decodicacion. En la imagen (c) se han complicado todava mas las cosas, incluyendo ademas 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 decodicacion con
exito.
27
5. Etiquetado y ltrado 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 modicaciones; (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
i=1
(x
i
y
i
)
2
35
7. Decodicacion
siendo x
i
cada uno de las cantidades correspondientes al n umero de modulos del conjunto de
unos y ceros obtenidos de la lnea calculada, y
i
cada una de las cantidades de modulos de un
dgito en la codicacion 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
..
4
1111
..
4
000
..
3
111
..
3
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.
0000
..
4
1111
..
4
000
..
3
111
..
3
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 conanza, me-
diante 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 etiqueta-
dos 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 codicacion 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 conanza nos vendra dada por el porcentaje de puntos con informacion
valida dentro del conjunto de pixels.
Como ultima 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 decodicacion del codigo,
se debe de alguna forma intentar clasicar y combinar esta informacion [19], con la intencion 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
Tecnica N.
o
decodicado Checksum Inicio 978?
N.
o
veces aparicion 9788428323086 Correcto S
Maxima probabilidad 9478228323088 Correcto No
Maxima probabilidad conanza 9488428323086 Incorrecto No
Mediana probabilidad conanza 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 de-
codicar. 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
decodicar 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 diculta su decodicacion, sin embargo
la solucion 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 sucientemente fuertes como p o marcadas para evitar
la correcta decodicacion del mismo. En cambio, en ciertos casos como los que mostramos en la
37
7. Decodicacion
9788428323086 9789706860507 9788428328647
Figura 7.1.: Distintas imagenes con el codigo que se ha obtenido al aplicar nuestro metodo
Figura 7.3, el resultado nal 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 decodicacion nal es completamete
correcta
9788428326 8 77 978842 79 27336 97884 1 8328111
Figura 7.3.: Conjunto de imagenes en las que la decodicacion 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 ultima fase de decodicacion sea erronea
al no tener la region que contiene al codigo la suciente informacion, de manera que permita la
decodicacion 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 imagenes
de prueba, han sido los que se muestran en la Tabla 7.2. Solo comentar, que de las 15 imagenes
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
Resultados
Caso analizado N.
o
imagenes Correcto Incorrecto Porcentaje
Limpia 10 7 3 70
Da nada 24 12 12 50
Total 34 19 15 56
7.4. Analisis de robustez
En este apartado se van a presentar una serie de ejemplos o experimentos para comprobar
hasta que punto el metodo puede ser able, o simplemente con el proposito de dejar claro ciertos
aspectos que creemos pueden resultar de interes.
Automatizacion del proceso de binarizacion
Como comentamos en el captulo anterior, previamente a la binarizacion se realiza una ecua-
lizacion 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
decodicacion. En la Figura 7.5 se muestra el resultado que se obtiene tanto sin ecualizar y
con un umbral jo, 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 jo, es peor que en el otro caso comentado. Ademas la decodi-
cacion no tiene exito, debido a que la imagen binarizada no es lo bastante buena para poder
ser decodicada 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 jo,
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. Decodicacion
9789687529714 9769687 0151 1 5 978968752914
(a) (b) (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 jo de 110; (c)
previamente se ha ecualizado el histograma y se ha aplicado Otsu para calcular el
umbral con el cual binarizar
Inuencia del error de la estimacion de la orientacion
Otro aspecto que resultara de interes analizar es hasta que punto inuye el valor que se estima
de la orientacion con el cual se rectica 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
y 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 nalizar
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 jo 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 Parametro Signicado Valor
Deteccion de bordes Varianza 0.5
Deteccion de bordes t
1
Umbral usado en la histeresis 20
Deteccion de bordes t
2
Umbral usado en la histeresis 40
Etiquetado y ltrado de regiones U Umbral (dif. max. en orientacion) 10
Para los parametros , t
1
y t
2
utilizados en el algoritmo de Canny para deteccion de bordes, se
ha jado 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 ejecucion
8.4. Tiempo de ejecucion
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 Tiempo (ms)
Deteccion de bordes 339
Deteccion de regiones candidatas 27
Etiquetado y ltrado de regiones 39
Estimacion de la orientacion y recticacion 633
Decodicacion 28
Tiempo Total 1066
En la etapa de estimacion de la orientacion y recticacion 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 eciente tendramos que implementar otro metodo de ordenacion mas eciente.
Por ultimo, 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 eciencia. Con lo cual se puede decir que es un metodo que se presta a ser utilizado
en aplicaciones para decodicacion de codigos de barras, en las que se requiera resultados al
instante.
8.5. Duracion del proyecto
En la siguiente tabla vamos a mostrar el tiempo que hemos empleado en la realizacion 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 modicaciones 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 implementacion
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 Semanas (5 dias) Horas/semana
Recopilacion de informacion 2 40
Dise no e implementacion de la localizacion 10 300
Dise no e implementacion de la decodicacion 4 120
Documentacion y redaccion memoria 4 120
Total 20 580
En la tabla el calculo de horas/semana se ha realizado teniendo en cuenta que para la etapa
de recopilacion de informacion se utilizaron 4 horas/dia y para el resto de etapas 6 horas/dia.
48
9. Conclusiones
El metodo implementado para la decodicacion 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
sucientemente 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 decodicacion 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 eciente,
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 jo, el resultado se obtena con bastante
rapidez.
En el proceso de la decodicacion, la imagen binaria en la cual nos basamos para posterior-
mente 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 decodicar no solo codigos de barras con espacios blancos y barras negras,
sino que podramos decodicar 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 solo
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 independi-
ente 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 decodicacion, s que se explota el conocimiento previo que se tiene
del tipo de codicacion que se utiliza, todo ello con el objetivo de simplicar 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 decodicacion de codigos de barras
en imagenes de poca calidad y con ruido, como manchas, rayas, o cualquier otro factor externo
que modique 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
dicultad que ello conlleva, ya que cada codigo utiliza una codicacion 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 codigo
se esta tratando para utilizar en su decodicacion una serie de pasos que podran ser diferentes
seg un el tipo o generalizar el proceso de decodicacion.
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. Obtencion del gradiente (magnitud y orientacion 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 dene como un vector
bidimensional dado por la ecuacion:
G[f(x, y)] =
_
G
x
G
y
_
=
_
x
f(x, y)
y
f(x, y)
_
siendo un vector perpendicular al borde, donde el vector G apunta en la direccion de
variacion maxima de f en el punto (x, y) por unidad de distancia, con la magnitud y
direccion dadas por:
|G| =
_
G
2
x
+G
2
y
,
(x, y) = tan
1
G
y
G
x
Es una practica habitual aproximar la magnitud del gradiente con valores absolutos
de la siguiente manera:
|G| = |G
x
| +|G
y
|
Obtendremos dos imagenes de salida: E
m
de la magnitud del gradiente y E
o
de la ori-
entacion, de acuerdo a las expresiones anteriores.
2. Supresion no maxima al resultado del gradiente
Con E
m
y E
o
como entradas y una nueva imagen I
N
como salida, considerar las cuatro
direcciones d
1
, d
2
, d
3
, d
4
identicadas por las orientaciones de 0
o
, 45
o
, 90
o
y 135
o
con
respecto al eje horizontal. Para cada pxel (i, j):
Encontrar la direccion d
k
que mejor se aproxima a la direccion E
o
(i, j) (la perpen-
dicular al borde).
51
A. Detector de bordes de Canny
Si E
m
(i, j) es mas peque no que al menos uno de sus dos vecinos en la direccion d
k
,
al pxel (i, j) de I
N
se le asigna el valor 0, I
N
(i, j) = 0 (supresion), de otro modo
I
N
(i, j) = E
m
(i, j).
La salida I
N
(i, j) es una imagen con los bordes adelgazados, es decir, es E
m
(i, j) despues
de la supresion no maxima de puntos de borde.
3. Histeresis de umbral a la supresion no maxima
La salida I
N
(i, j) suele contener maximos locales creados por el ruido. Se podran elimi-
nar 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 I
N
, que es la salida del proceso anterior, E
o
la orientacion de
los puntos de borde de la imagen, y dos umbrales t
1
y t
2
, tales que t
1
< t
2
.
Para todos los puntos de I
N
y explorando I
N
en un orden jo:
Localizar el siguiente punto de borde no explorado previamente, I
N
(i, j), tal que
I
N
(i, j) > t
2
.
Comenzar a partir de I
N
(i, j), seguir las cadenas de maximos locales conectados
en ambas direcciones perpendiculares a la normal de borde, siempre que I
N
> t
1
.
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 clasico 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 ltrado, 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 la 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 mas
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 ultimo la funcion
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 clasico 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 e
Etiquetas(V ) e
= e do
13: T T (e
, 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. Metodo 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 jo, se penso en
la utilizacion del metodo de Otsu como opcion acertada para tal n.
El metodo de Otsu [8], propuesto en 1979, es un algoritmo para la determinacion automatica
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 C
0
= {0, 1, . . . , t} y C
1
= {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
2
T
, k =
2
T
2
W
De los tres criterios a minimizar, el segundo es el mas simple. Por tanto, el umbral optimo se
dene como:
t
= arg mn
tG
(t)
donde
2
T
=
L
i=0
(i
T
)
2
P
i
,
T
=
L
i=0
iP
i
,
2
B
= w
0
w
1
(
1
0
)
2
, w
0
=
t
i=0
P
i
, w
1
= 1 w
0
,
1
=
T
t
1 w
0
,
0
=
t
w
0
t
=
t
i=0
iP
i
, P
i
=
n
i
n
donde n
i
es el n umero de pixels con nivel de gris i y n es el n umero total de pixels en la imagen
dada denido por n =
L
i=0
n
i
. Ademas, P
i
es la probabilidad de aparicion del nivel de gris i
denido como P
i
=
n
i
n
.
Por ultimo, solo recalcar que la bibliografa encontrada acerca de este metodo presentaba
erratas y nalmente 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 codigo 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 codicacion 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 abilidad 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 re-
presenta directamente seis dgitos e indirectamente un septimo, un dibujo central de separacion,
un dibujo de barras y espacios que representa directamente seis dgitos, un dibujo normalizado
de separacion y un margen derecho. De forma graca 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 signicado 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 signicado especial, los
otros doce dgitos estan escritos dentro del codigo y estan divididos en dos grupos por la lnea
intermedia. Cada valor esta codicado 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.: Signicado de los dgitos del codigo seg un la posicion
Posicion Signicado
1, 2 identicacion del pas donde se comercializa el producto
3 identicacion del pas (a veces del fabricante)
4, 5, 6, 7 identicacion del fabricante del producto
8, 9, 10, 11, 12 identicacion del producto
13 dgito de vericacion (su valor es calculado)
Tabla D.2.: Caractersticas de los separadores
Separador Caractersticas
Izquierdo 3 modulos (2 barras con 1 espacio al medio, codicado: 101)
Derecho 3 modulos (2 barras con 1 espacio al medio, codicado: 101)
Central 5 modulos (3 espacios con 2 barras intercaladas, codicado: 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 codicacion A, B y C para
representar cada dgito. Estas formas se utilizan para codicar 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
decodicarlo 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 codicacion seg un la posicion
La codicacion 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 codicacion
Dgito Codicacion A Codicacion B Codicacion 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 codicacion como hemos comentado o por el contrario, es el primer caracter
el que determina la combinacion para cada uno de los seis primeros dgitos. Aunque por logica
parece mas probable la primera opcion, ya que el primer dgito no se encuentra codicado
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
Posicion 1 Posicion 2 Posicion 3 Posicion 4 Posicion 5 Posicion 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 ultimo, el dgito de vericacion 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 vericacion (CV ) que se ubicara en
la posicion 13 del codigo, es decir, CV = 10 R.
59
D. Caractersticas del codigo EAN-13
La autovericacion 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 conrmado y vericado.
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.