Este documento describe un método para la localización y decodificación de códigos de barras en imágenes digitales. Primero se utiliza un detector de bordes para localizar posibles regiones candidatas que contengan el código de barras. Luego, se estima la orientación de los puntos de borde en cada región para rectificar la imagen. Finalmente, se intenta decodificar el código de barras rectificado para obtener la información almacenada. El método se aplica específicamente a códigos EAN-13, comúnmente usados para codificar libros
la unidad de s sesion edussssssssssssssscacio fisca
Localización y decodificación de códigos de barras EAN-13 en imágenes
1. Ingenier´ıa Inform´atica
Proyectos Inform´aticos (E80)
Localizaci´on y decodificaci´on de c´odigos de barras
en im´agenes digitales
Proyecto presentado por:
Vicente Castell´o Mart´ınez
y dirigido por:
Vicente Javier Traver Roig
Castell´on de la Plana, Julio de 2005
3. Resumen
Esta memoria describe un m´etodo para la localizaci´on y posterior decodificaci´on de c´odigos de
barras presentes en im´agenes digitales. El c´odigo de barras puede aparecer en cualquier posici´on
y orientaci´on dentro de la imagen, con lo cual debemos ser capaces de detectarlo y rectificar su
orientaci´on, para as´ı poder decodificarlo de forma correcta.
Una t´ecnica que se presenta, debido a que los c´odigos de barras poseen unas caracter´ısticas
muy definidas, como un m´etodo adecuado para la localizaci´on de un c´odigo de barras dentro
de una imagen es la detecci´on de bordes. Adem´as, como los puntos de borde pertenecientes al
c´odigo presentar´an una orientaci´on similar, el objetivo ser´a de alguna forma homogeneizar esta
zona donde se encuentra el c´odigo, extendiendo el valor de la orientaci´on obtenido de los puntos
de borde a los que no lo son. A continuaci´on, debido a este proceso de expansi´on de la orientaci´on
conseguiremos un conjunto de regiones candidatas, de las cuales debemos ser capaces de poder
elegir una de ellas como susceptible de contener el c´odigo. A partir de esta regi´on debemos
calcular la orientaci´on que presentan los puntos de borde de la misma, para poder rectificar
as´ı la imagen. Una vez conseguida una subimagen centrada en el c´odigo intentamos decodificar
´este con ´exito, bas´andonos en lo que conocemos del tipo de codificaci´on en concreto.
Por ´ultimo comentar que durante toda la memoria se presentan los resultados que se van
consiguiendo para cada una de las fases en las que se divide el m´etodo, adem´as de una serie de
experimentos para reforzar la comprensi´on del mismo o recalcar ciertos aspectos que se creen de
inter´es.
iii
5. Agradecimientos
En unas pocas palabras quisiera agradecer a una serie de personas la ayuda que me han presta-do
en la realizaci´on de este proyecto. ´Estas son Ma Angeles L´opez (por su implementaci´on del
detector de bordes de Canny), Ra´ul Montoliu (por su c´odigo para el etiquetado de componentes
conexas) y V´ıctor Jim´enez (por sus ideas acerca de posibles estrategias a seguir para la decodi-ficaci
´on), sin los cuales el esfuerzo realizado hubiese sido enormemente mayor. Por ´ultimo y no
por ello menos importante, agradecer en gran medida a mi director, Javier Traver, el tiempo
que me ha dedicado y la paciencia que ha tenido conmigo, ya que sin su colaboraci´on no hubiese
podido afrontar este proyecto. Simplemente, muchas gracias.
v
9. 1. Introducci´on
1.1. Motivaci´on
Hoy en d´ıa los c´odigos de barras est´an 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 especificaci´on ´unica de un producto o material en concreto.
Sin embargo no debemos olvidar que los c´odigos de barras necesitan de instrumentos que puedan
leerlos, al igual que de un software que permita captar y procesar la informaci´on.
Adem´as en entornos controlados, las c´amaras pueden ser usadas para la identificaci´on de
objetos, es decir, si los objetos de nuestro inter´es presentan etiquetas de c´odigos de barras en
una superficie visible, entonces un simple sistema de c´amaras port´atiles puede reconocer el c´odigo
de barras en el entorno y proporcionar al usuario informaci´on sobre el objeto etiquetado [26].
Por todo ello este proyecto intenta ofrecer un m´etodo de localizaci´on de un c´odigo de barras
dentro de una imagen, para su posterior decodificaci´on. Se ha utilizado una serie de procedimien-tos
que nos han permitido conseguir nuestro objetivo y que se explican con detalle posteriores
cap´ıtulos de esta memoria.
Como es obvio, hay una gran variedad de c´odigos de barras, pero en este proyecto nos hemos
centrado en una clase en concreto, el c´odigo EAN (European Article Number) y m´as concreta-mente
en su versi´on EAN-13 [20], que aunque dicho de esta forma no nos suene mucho, es uno de
los c´odigos m´as presentes en nuestras vidas, ya que se utiliza en una gran cantidad de productos
de todo tipo, desde cualquiera de los art´ıculos presentes en un supermercado hasta toda clase
de libros. Es en este ´ultimo uso donde nos centraremos, ya que los libros se codifican bas´andose
en un sistema internacional de numeraci´on, el ISBN (International Standard Book Number) [9],
el cual utiliza para su codificaci´on el c´odigo EAN-13.
Si sabemos que los d´ıgitos que encontramos normalmente impresos junto a las barras y espacios
de un c´odigo de barras suelen ser aquellos codificados dentro de ´este, por qu´e no leer estos d´ıgitos
en lugar de decodificar estas barras y espacios. La raz´on principal es que, incluso con los modernos
sistemas de reconocimiento ´optico de caracteres (OCR, Optical Character Recognition), no es
posible identificar las cifras de un c´odigo num´erico con la suficiente rapidez, facilidad y fiabilidad
que se requiere y por tanto no queda otra soluci´on m´as que representar el c´odigo mediante
s´ımbolos f´acilmente legibles por el ordenador, empleando sus sistemas binarios.
Otra pregunta que puede surgir es por qu´e investigar en este tema si los sistemas existentes
ya funcionan correctamente. Una de las razones es la posibilidad de que cualquier persona con
una c´amara, como por ejemplo una simple webcam, pudiese decodificar c´odigos de barras en su
propia casa si lo precisase, ya que es m´as f´acil que un particular pueda adquirir una c´amara de
este tipo que un lector l´aser por ejemplo, mucho m´as caro. Incluso podr´ıa ser utilizado por el
peque˜no y mediano comercio, resultando una opci´on mucha m´as econ´omica.
1.2. Organizaci´on de la memoria
La memoria est´a dividida en una serie de cap´ıtulos donde cada uno de ellos presenta la
siguiente informaci´on:
1
10. 1. Introducci´on
El cap´ıtulo 2, ((C´odigos de barras)), se dedica a aportar una serie de datos relacionados con
los c´odigos de barras: definici´on, ventajas e inconvenientes, aplicaciones, lectores, etc., a
modo de informaci´on introductoria al mundo de los c´odigos de barras.
En el cap´ıtulo 3, ((Detecci´on de bordes)), se explica la idea fundamental que se sigue para
la localizaci´on del c´odigo de barras y es que debido a las caracter´ısticas que ´este posee,
la detecci´on de bordes se presenta como una t´ecnica m´as que adecuada para su posible
detecci´on.
En el cap´ıtulo 4, ((Detecci´on de regiones candidatas)), nos centramos en la idea que a la hora
de detectar el c´odigo de barras los pixels que son puntos de borde y forman parte del c´odigo
van a tener una orientaci´on similar. Con esta caracter´ıstica lo que se pretende es expandir
esta orientaci´on a los vecinos de cada uno de los puntos de borde y as´ı, homogeneizar toda
la zona donde se encuentra el c´odigo con una misma orientaci´on.
En el cap´ıtulo 5, ((Etiquetado y filtrado de regiones)), explicamos c´omo tras el paso anterior
mediante un proceso de agrupamiento, extendiendo la orientaci´on y gracias a una posterior
binarizaci´on, conseguimos obtener una serie de regiones susceptibles de ser la que se busca.
Utilizando algoritmos de etiquetado de componentes conexas y realizando a continuaci´on
un filtrado, podemos quedarnos con la regi´on que ((supuestamente)) contiene el c´odigo.
En el cap´ıtulo 6, ((Estimaci´on de la orientaci´on y rectificaci´on)), se indica c´omo, al poder
presentar el c´odigo cualquier ´angulo dentro de la imagen, se debe calcular la orientaci´on
que presentan los puntos de borde que aparecen en esta regi´on susceptible de contener
al c´odigo y que hemos obtenido en el paso anterior. Una vez conocida esta orientaci´on
simplemente debemos rectificar la imagen y conseguir una imagen centrada en el c´odigo,
para su posterior binarizaci´on.
En el cap´ıtulo 7, ((Decodificaci´on)), se explica c´omo bas´andonos en la imagen binarizada del
c´odigo de barras obtenida en el paso anterior, y empleando el conocimiento que tenemos
del tipo de c´odigo a interpretar (EAN-13 ), se obtiene la consiguiente decodificaci´on del
mismo.
El cap´ıtulo 8, llamado ((Sistema experimental)), presenta informaci´on relativa al proyecto
y que creemos que debe ser mencionada, desde el software utilizado para la realizaci´on del
proyecto hasta el tiempo en que tarda en ejecutarse la t´ecnica implementada.
En el ´ultimo cap´ıtulo simplemente mencionamos las conclusiones a las que llegamos despu´es
de la realizaci´on de este proyecto.
De forma gr´afica el proceso que se ha seguido para la localizaci´on y posterior decodificaci´on
de un c´odigo de barras se puede observar en la Figura 1.1. Cada una de las fases que componen
el proceso en general se explican con m´as detalle, y como hemos comentado anteriormente, en
los correspondientes cap´ıtulos que aparecen en esta memoria.
1.3. Trabajos relacionados
Previamente y durante la realizaci´on de este proyecto se ha ido recopilando informaci´on de
art´ıculos y trabajos relacionados con c´odigos 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 realizaci´on del m´etodo, o simplemente pueden resultar de inter´es para conocer con mayor
detalle el estado del arte o profundizar en el tema.
2
11. 1.3. Trabajos relacionados
La decodificaci´on de c´odigos de barras da˜nados es un tema que se presta a estudio. Un ejemplo
ser´ıa la decodificaci´on de los c´odigos de barras que nos aparecen en las recetas m´edicas y que se
ven afectados por firmas o cualquier otro tipo de mancha [22]. El m´etodo en cuesti´on se basa
en la utilizaci´on de la transformada de Hough como herramienta que permite la b´usqueda de
l´ıneas verticales dentro de una imagen. La t´ecnica 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 c´odigo ya se encuentra en una orientaci´on m´as o menos
adecuada para ser procesado por el algoritmo.
Sin embargo los estudios realizados no s´olo se han centrado en la localizaci´on de las barras
y los espacios que conforman el c´odigo, sino que han llegado a plantearse otra opci´on como, el
decodificar un c´odigo de barras a partir de los d´ıgitos presentes junto a las barras del mismo [5].
Los sistemas de an´alisis de imagen normalmente requieren que la imagen donde se encuentra el
c´odigo de barras a analizar tenga una resoluci´on lo suficientemente buena para su decodificaci´on.
Gracias a este nuevo m´etodo se consigue que la imagen pueda presentar una baja resoluci´on y
se decodifique el c´odigo con ´exito, ya que los caracteres o d´ıgitos presentes debajo del c´odigo
de barras pueden verse menos afectados por un emborronamiento o una baja resoluci´on de
la imagen, con lo cual pueden convertirse en una acertada fuente de informaci´on, mejor que
el patr´on de barras. En este m´etodo la localizaci´on del c´odigo de barras se realiza a partir
del an´alisis del gradiente. Una vez localizado el c´odigo, bas´andose en el tipo de codificaci´on
que se quiere decodificar, se determina d´onde se encuentra la zona que incluye los caracteres
que representan al c´odigo, para posteriormente mediante t´ecnicas de probabilidad y estad´ıstica
determinar a qu´e d´ıgitos corresponden.
Dentro del campo de la rob´otica tambi´en resulta de inter´es la localizaci´on y posterior de-codificaci
´on de c´odigos de barras. Se ha llegado a investigar en temas como el desarrollo de un
sistema robotizado que, utilizando algoritmos de procesamiento de im´agenes, intenta reconocer
y decodificar los c´odigos de barras que aparecen en una gran variedad de barriles utilizados
en algunos sectores industriales para almacenar toda clase de residuos. Al mismo tiempo este
reconocimiento sirve para realizar una especie de inventario de los barriles inspeccionados [31].
El procedimiento se basa en dos fases: una primera en la que la imagen es procesada aplicando
filtros adaptativos de umbralizaci´on del gradiente. Este filtrado identifica bordes verticales en la
imagen. En la segunda fase la imagen es analizada por ´areas que tienen una alta concentraci´on
de estos bordes verticales, asumiendo que son zonas con una alta probabilidad de ser el c´odigo
de barras, idea parecida a la que se utiliza en nuestro m´etodo donde se consiguen regiones de
orientaci´on similar susceptibles de contener el c´odigo. Sin embargo presenta inconvenientes co-mo
la aparici´on de falsos positivos, debido a que la imagen puede presentar zonas con bordes
similares a los de un c´odigo de barras y por tanto detectarse como zona donde se encuentra el
c´odigo cuando no lo es. Adem´as tambi´en se ve bastante influenciado por el tama˜no del c´odigo
de barras respecto a la imagen.
Normalmente los sistemas de an´alisis de im´agenes requieren que el c´odigo de barras est´e con-tenido
completamente en la imagen, sin embargo se han realizado investigaciones para evitar
esta limitaci´on. Un trabajo relacionado con este aspecto desarrollaba un m´etodo para la decod-ificaci
´on de c´odigos de barras captados con una c´amara, cuyo campo de visi´on es m´as peque˜no
que el tama˜no del propio c´odigo, con lo cual deb´ıa capturar distintas im´agenes, que una vez
juntas, reconstru´ıan el c´odigo, para posteriormente decodificarlo [28]. La localizaci´on del c´odigo
se realiza mediante el c´alculo del gradiente y buscando zonas donde la orientaci´on del mismo es
similar. Esta misma idea es en la que nos basamos en nuestro m´etodo para la localizaci´on del
c´odigo de barras. Una vez detectado el c´odigo se aprovecha el conocimiento que se posee del tipo
de c´odigo que se est´a analizando para conseguir una correcta decodificaci´on. En nuestro proyecto
tambi´en explotamos este conocimiento que tenemos del c´odigo de barras para su decodificaci´on.
3
12. 1. Introducci´on
Relacionado con la problem´atica de la teor´ıa de se˜nales podemos encontrar trabajos que tratan
de interpretar el c´odigo 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 estad´ısticos de reconocimiento
para clasificar estos picos como los caracteres presentes en el c´odigo. Mediante esta t´ecnica se
consigue mejores resultados ante c´odigos emborronados, ya que el proceso es m´as resistente ante
tales contratiempos.
La ciencia no s´olo ha investigado en la mejora de t´ecnicas de decodificaci´on de c´odigos de
barras en cuanto a procesamiento de im´agenes, sino que tambi´en se ha preocupado por mejorar
las prestaciones de los esc´aneres lectores de c´odigos. Un ejemplo es una investigaci´on realizada
con el objetivo de ofrecer mejoras en el funcionamiento de los esc´aneres a trav´es de un muestreo
selectivo y el uso de filtros de realzado para mejorar la detecci´on de bordes, que detectan las
fronteras entre ´areas oscuras y claras (barras y espacios) [27]. Otros estudios se centran m´as
en obtener t´ecnicas destinadas a la mejora de la decodificaci´on de c´odigos de barras borrosos o
emborronados [30].
4
15. 2. C´odigos de barras
2.1. Introducci´on
Como informaci´on preliminar, antes de comenzar a explicar el m´etodo desarrollado, se ha
cre´ıdo conveniente aportar informaci´on general sobre los c´odigos de barras. Por ello, en este
punto de la memoria se presentan una serie de datos acerca de este sistema de codificaci´on.
Empezamos con una breve descripci´on de los c´odigos de barras, su nomenclatura b´asica y una
serie de caracter´ısticas. A continuaci´on nos adentramos en su historia [2], cu´ando surgieron y su
posterior desarrollo, ventajas e inconvenientes que presentan y un conjunto de aplicaciones en las
que los c´odigos de barras suelen ser de gran utilidad. Por ´ultimo se mencionan las distintas clases
de c´odigos que existen, para acabar comentando diferentes tipos de impresoras [4] y lectores para
esta clase de codificaci´on en concreto.
2.2. Definici´on
Los c´odigos de barras son un sistema de codificaci´on creado con el objetivo de identificar
objetos y facilitar la obtenci´on de informaci´on y de esta forma eliminar la posibilidad de error
en la captura. La utilizaci´on de este sistema de codificaci´on es tan exitosa debido a la fiabilidad
que presenta en la recolecci´on autom´atica de datos, reduciendo los posibles errores humanos que
se pueden producir en el caso de una introducci´on err´onea de informaci´on.
Podemos definir un c´odigo de barras como un patr´on formado por barras y espacios parale-los
que codifica informaci´on mediante las anchuras relativas de estos elementos. Su estructura
b´asica consiste de un patr´on de inicio, uno o m´as caracteres de datos, opcionalmente unos o dos
caracteres de verificaci´on y un patr´on de t´ermino.
Adem´as implementar un sistema de captura de datos por c´odigos de barras es poco costoso
y el conocimiento necesario para utilizar el sistema es m´ınimo, por lo que no debe presentarse
como un problema el aprendizaje del personal que manipule el mismo.
El desarrollo de este sistema de codificaci´on nos permite disponer de tres categor´ıas de c´odigos
de barras, dependiendo de la tecnolog´ıa que es necesaria para realizar una lectura de los mismos:
lineales, multifilas y bidimensionales. Una gran parte de la literatura existente llama tambi´en
c´odigos bidimensionales a los considerados multifilas. Por tanto se puede realizar una divisi´on
entre c´odigos de una dimensi´on (lineales) donde s´olo importa el ancho de las barras y el espacio
entre ellas y c´odigos de dos dimensiones (multifilas y bidimensionales) donde importa la altura
y anchura del s´ımbolo.
Nomenclatura b´asica
La visualizaci´on f´ısica de los c´odigos de barras suele presentarse mediante barras verticales:
´estas representan caracteres de informaci´on mediante barras negras y espacios, donde el ancho
de las barras y espacios puede ser variable. Por tanto, cada d´ıgito o car´acter representado en un
c´odigo est´a formado por barras y espacios que tienen una anchura total de una cierta cantidad
de unidades o m´odulos, dependiendo del c´odigo, de esta forma cada barra y cada espacio puede
tener una anchura de diversas unidades o m´odulos. De forma resumida se puede expresar de la
siguiente manera:
7
16. 2. C´odigos de barras
M´odulo: es la unidad m´ınima o b´asica de un c´odigo. Las barras y espacios est´an formados
por un conjunto de m´odulos.
Barra: el elemento ((oscuro)) dentro del c´odigo. Se hace corresponder con el valor binario 1.
Espacio: el elemento ((claro)) dentro del c´odigo. Se hace corresponder con el valor binario 0.
Car´acter: formado por barras y espacios. Normalmente se corresponde con un car´acter
alfanum´erico.
Todo esto se observa mejor gr´aficamente en la Figura 2.1.
Figura 2.1.: Cada car´acter o d´ıgito est´a formado por un conjunto de m´odulos
Caracter´ısticas
Un s´ımbolo de c´odigo de barras presenta una serie de caracter´ısticas entre las cuales cabe
destacar las siguientes:
Densidad: es la anchura del elemento, ya sea barra o espacio, m´as estrecho dentro del
s´ımbolo de c´odigo de barras. Un c´odigo de barras no se mide por su longitud f´ısica sino
por su densidad, que viene dada en mil´esimas de pulgada.
Raz´on ancho-estrecho (Wide to Narrow Ratio (WNR)): Es la relaci´on existente entre el
grosor del elemento m´as estrecho con respecto al m´as ancho. Normalmente es de 1:3 ´o 1:2.
Zona muda (Quiet Zone): Es el ´area blanca que aparece al principio y al final de un
s´ımbolo de c´odigo de barras y que es necesaria para una acertada lectura del s´ımbolo.
2.3. Historia
El c´odigo de barras como sistema de codificaci´on tiene aceptaci´on mundial y hoy en d´ıa 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 c´odigos
de barras aparecieran, ya surg´ıan investigaciones relacionadas con sistemas de codificaci´on de
informaci´on.
En 1932, Wallace Flint, un estudiante de la Universidad de Harvard, realiz´o un proyecto
final de carrera (master thesis) que desarrollaba un sistema mediante el cual los clientes de un
supermercado podr´ıan marcar aquello que quisieran comprar en una serie de tarjetas perforadas,
8
17. 2.3. Historia
que posteriormente se introducir´ıan en una serie de lectores que activar´ıan un sistema autom´atico
que les proporcionar´ıa aquello demandado.
Sin embargo la idea de c´odigo de barras conforme lo entendemos hoy en d´ıa naci´o en 1948. En
ese a˜no Bernard Silver, un estudiante graduado del Instituto Drexel de Tecnolog´ıa de Filadelfia,
escuch´o por casualidad como el presidente de una cadena de supermercados le ped´ıa a uno de los
decanos que emprendiese una investigaci´on para desarrollar un sistema que permitiese la lectura
autom´atica de informaci´on de los productos durante el cobro de los mismos.
Silver cont´o lo que hab´ıa escuchado a su amigo Normand Joseph Woodland, que ejerc´ıa como
profesor en esa misma universidad. La idea le fascin´o y empezaron a investigar en el tema.
Despu´es de un a˜no de gran esfuerzo Woodland y Silver registraron en 1949 la primera patente
para un c´odigo de barras. El sistema que ten´ıa forma circular se denomin´o ((bull’s eye code)) y
consist´ıa en una serie de c´ırculos conc´entricos con el objetivo de que pudiera leerse en cualquier
direcci´on.
Tres a˜nos m´as tarde, en 1952, construyeron el primer lector de c´odigos de barras, pero
lamentablemente el sistema no consigui´o ser demasiado efectivo, al igual que resultaba caro,
por lo que no lleg´o a comercializarse.
Los c´odigos de barras se emplearon por primera vez a principios de la d´ecada de los 60 para
identificar material rodante ferroviario y de ah´ı en adelante ha venido avanzando su aplicaci´on
y desarrollo. A finales de los a˜nos 60 y comienzos de los 70 aparecieron las primeras aplicaciones
industriales, pero s´olo para manejo de informaci´on.
Durante esos a˜nos la Asociaci´on Nacional de Cadenas Alimenticias (NAFC, de las siglas en
ingl´es) se di´o cuenta que deb´ıan 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 c´odigos de barras en su sucursal de Cincinnati (Ohio, EE.
UU.). El experimento present´o una serie de problemas que sirvieron para la mejora del sistema
y de esta forma su posterior adaptaci´on a todos los productores y comerciantes del sector.
Durante los a˜nos 70 y primeros de los 80 se produjo la evoluci´on de los c´odigos lineales. Su
utilizaci´on se difunde a varios sectores utiliz´andose en muy distintas tareas, desde el control de
documentos en bibliotecas, hasta la identificaci´on y verificaci´on autom´atica en los bancos de
sangre.
En el a˜no 1973 se anuncia la aparici´on del c´odigo UPC (Universal Product Code) que se
convertir´ıa en el est´andar de identificaci´on de productos en los Estados Unidos. Como an´ecdota,
comentar que el primer producto escaneado en un punto de pago utilizando este c´odigo fue un
paquete de chicles, el cual se encuentra hoy en d´ıa expuesto en el Museo Nacional de Historia
Americana. En 1976, Europa desarrolla su propia versi´on de UPC, el c´odigo EAN (European
Article Number), del cual se desarrollar´ıan dos versiones: el EAN-13 y el EAN-8.
En 1974, se inventa el c´odigo 39, el primero de tipo alfanum´erico y trece a˜nos m´as tarde, en
1987, se desarrolla el primer c´odigo bidimensional, el c´odigo 49, primer c´odigo multifilas que
apareci´o en el mercado.
Poco a poco, durante los a˜nos 80 y 90, la tecnolog´ıa de identificaci´on y manejo de datos a
trav´es de c´odigos de barras, logra convertirse en un est´andar al ser aplicada, cada vez con m´as
frecuencia, tanto en operaciones de distribuci´on 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 c´odigos y se desarrollaron sobretodo los c´odigos de alta
densidad o bidimensionales.
9
18. 2. C´odigos de barras
2.4. Ventajas e inconvenientes
La tecnolog´ıa de c´odigo de barras presenta una serie de ventajas sobre otros procedimientos
de colecci´on de datos, ´estas son:
Se imprime con costes bajos.
Su precisi´on en la informaci´on, evitando o reduciendo de esta forma los errores.
Su eficiencia debido a la rapidez en la lectura, ahorrando tiempo y dinero.
La relativa flexibilidad y facilidad de conexi´on e instalaci´on de los equipos de lectura e
impresi´on de c´odigo de barras.
Por contrapartida, no todo son ventajas, tambi´en presentan inconvenientes, como los que a
continuaci´on mencionamos:
En general los c´odigos de barra no son f´acilmente descifrables por las personas, necesitando
pues lectores que nos decodifiquen la informaci´on.
La facilidad con la cual es posible dificultar la legibilidad de ciertos c´odigos, es decir,
simplemente con agregar una barra al inicio o final del s´ımbolo o trazar una l´ınea paralela a
las barras en cualquier lugar dentro del c´odigo, complica en gran manera su decodificaci´on.
2.5. Aplicaciones
Las aplicaciones del c´odigo de barras cubren pr´acticamente cualquier tipo de actividad hu-mana,
lo podemos encontrar tanto en la industria, en el comercio, en instituciones guberna-mentales,
y en un sinfin de ´areas, ya que cualquier sector puede beneficiarse del uso de este
sistema de codificaci´on. Adem´as, la tecnolog´ıa que conlleva ofrece una de las mejores maneras
de automatizar el manejo de informaci´on, ofreciendo un sistema de colecci´on de datos mediante
identificaci´on autom´atica bastante r´apido y seguro.
Cualquier sector donde se necesita un sistema para capturar informaci´on y as´ı mejorar la
productividad, puede optar por utilizar c´odigos de barras. Algunas de las aplicaciones en las
que el uso del c´odigo de barras se muestra como una elecci´on 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, identificaci´on de carga, etc. Pero estas
son s´olo una parte de la gran variedad de aplicaciones en las que se pueden utilizar c´odigos de
barras como procedimiento de codificaci´on de datos.
En todas estas actividades el c´odigo de barras se presenta como una de las mejores tecnolog´ıas
para implementar un sistema de captaci´on de datos mediante identificaci´on autom´atica, presen-tando
una serie de beneficios desde la mejora de la calidad y servicio al cliente hasta una mayor
competitividad.
2.6. Clases de c´odigos
La simbolog´ıa de un c´odigo de barras nos define los detalles t´ecnicos de cada tipo particular
de c´odigo de barras, la anchura de las barras, la forma en que se codifica la informaci´on en las
barras y espacios del s´ımbolo de c´odigo de barras, etc.
Como hemos comentado anteriormente podemos distinguir entre c´odigos de una dimensi´on y
c´odigos de dos dimensiones. En los primeros, al efectuar la lectura, se tiene en cuenta el ancho
10
19. 2.7. Dispositivos de escritura y lectura de c´odigos 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 c´odigos representan la clave para acceder a un registro de alguna base de
datos en donde realmente reside la informaci´on, o sea, los s´ımbolos no contienen informaci´on del
producto o art´ıculo, sino una clave ´unica que lo identifica.
Por tanto la peque˜na capacidad de codificaci´on de estos c´odigos los hace depender de sistemas
de datos externos, sin el sistema externo el c´odigo no tiene significado. La dependencia de
sistemas externos de datos ofrece dos importantes ventajas:
Proporciona la posibilidad de acceder a gran cantidad de informaci´on utilizando un c´odigo
y s´ımbolo relativamente corto.
Permite cambiar los datos asociados a ´este sin tener que editar o modificar nuevamente el
c´odigo.
El otro tipo de codificaci´on que surgi´o no hace tantos a˜nos es la codificaci´on bidimensional,
dentro de la cual tenemos los llamados c´odigos de barras apilados o multifilas (((stacked))) y los
c´odigos matriz (((matrix ))). La principal ventaja de utilizar c´odigos de dos dimensiones es que
los datos est´an codificados tanto en la altura como en la longitud del s´ımbolo y la informaci´on
no se reduce s´olo al c´odigo del art´ıculo, sino que puede almacenar gran cantidad informaci´on
que puede ser le´ıda de manera r´apida y fiable, sin necesidad de acceder a una base de datos en
donde se almacene dicha informaci´on, como ocurre en el caso de los c´odigos de una dimensi´on.
Por el contrario, al contener mucha m´as informaci´on que los c´odigos unidimensionales requieren
de un esc´aner especial cuyo coste es m´as elevado.
La seguridad que son capaces de incorporar estos c´odigos los hace casi invulnerables a los posi-bles
agentes externos que pueden causar su deterioro, ya que ´este tipo de c´odigos han superado
innumerables pruebas de resistencia con el objetivo de determinar su integridad.
Los c´odigos bidimensionales deben ser considerados como un complemento a la tecnolog´ıa
tradicional de c´odigos 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-tificaci
´on 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 codificaci´on u otro.
Normalmente cuando la gente piensa en c´odigos de barras los suele relacionar con la t´ıpica
simbolog´ıa de barras y espacios, por ello en la Figura 2.2 se muestran un par de c´odigos bidi-mensionales
como curiosidad, ya que ´estos suelen ser, dentro de los c´odigos de barras, los m´as
desconocidos.
(a) (b)
Figura 2.2.: C´odigos bidimensionales: (a) Codablock; (b) MaxiCode
2.7. Dispositivos de escritura y lectura de c´odigos de barras
Para poder imprimir los c´odigos de barras se nos presentan en el mercado distintos tipos de
impresoras que pueden llevar a cabo tal funci´on. El empleo de una u otra depender´a de lo que
11
20. 2. C´odigos de barras
el usuario requiera para cada caso en particular.
Los c´odigos de barras se pueden imprimir en impresoras l´aser o de chorro de tinta con las cuales
se puede conseguir c´odigos de barras de alta densidad y calidad, pero, por el contrario, tambien
presentan problemas al imprimir en cantidad, al igual que las etiquetas donde se imprimen los
c´odigos deben tener un adhesivo especial que tolere las altas temperaturas generadas por la
impresora. Adem´as, la imagen en el c´odigo de barras se puede da˜nar f´acilmente, a menos que se
utilicen recubrimientos especiales en las etiquetas o bien laminarlas una vez que se ha impreso
el c´odigo.
Otra posibilidad es la impresi´on t´ermica directa, m´etodo m´as r´apido y simple de gran aceptaci´on
en la industria y el comercio. El coste de las etiquetas t´ermicas es mayor comparado con el de
las utilizadas para impresoras l´aser, pero sin embargo el coste del proceso global es menor. Por
tanto este tipo de impresi´on presenta una serie de ventajas como son su velocidad y calidad de
impresi´on, donde la imagen es duradera, al igual que es excelente para el trabajo por lotes. Por
el contrario tambi´en 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 espec´ıfica para etiquetas, una impresora de transferencia t´ermica, 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 l´aser y las t´ermicas directas.
En la figura 2.3 se muestra un ejemplo de cada uno de los diferentes tipos de impresoras que
hemos comentado en este apartado.
(a) (b) (c)
Figura 2.3.: Impresoras de c´odigos de barras: (a) l´aser; (b) t´ermica directa; (c) de transferencia
t´ermica
Para poder obtener la informaci´on presente en un c´odigo de barras necesitamos de dispositivos
que decodifiquen la informaci´on presente en el mismo, por ello los lectores de c´odigos de barras
nos permiten obtener esta informaci´on, de forma que pueda almacenarse en una computadora
para poder ser procesada.
Existen muchas opciones de conexi´on de lectores de c´odigos de barras a una computadora,
aunque existen dos tipos b´asicos: aquellos lectores que almacenan la informaci´on en memoria
para despu´es transferirla a una computadora y los lectores de radiofrecuencia que transmiten la
informaci´on a la computadora en tiempo real. En los primeros si la computadora central falla,
la recolecci´on 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 verificaci´on de datos inmediata y
m´as sofisticada, con una interacci´on con el usuario que consigue una mayor reducci´on de errores.
El funcionamiento de los lectores de c´odigos de barras se podr´ıa explicar de la siguiente manera:
el lector decodifica el c´odigo de barras a trav´es de la digitalizaci´on proveniente de una fuente
de luz que cruza el c´odigo y mide la intensidad de la luz reflejada por los espacios blancos, ya
12
21. 2.7. Dispositivos de escritura y lectura de c´odigos de barras
que las barras oscuras absorben la luz y los espacios la reflejan. El patr´on de la luz reflejada se
detecta a trav´es de un fotodiodo, el cual produce una se˜nal el´ectrica que coincide exactamente
con el patr´on impreso del c´odigo de barras. Un decodificador usa algoritmos matem´aticos para
traducir los impulsos el´ectricos en un c´odigo binario y transmite el mensaje decodificado a una
computadora como si la informaci´on hubiese sido introducida por teclado.
En cuanto a los lectores existe una gran variedad, pero podemos destacar cuatro que son los
principales:
1. Lectores tipo pluma o l´apiz (wand):
El modo de uso es simple, el operador coloca la punta del lector en la zona blanca que
est´a al inicio del c´odigo y lo desliza a trav´es del s´ımbolo a velocidad e inclinaci´on constante
haciendo contacto a lo ancho del c´odigo, envi´andose una se˜nal digital pura de las barras y
espacios a una frecuencia igual a la velocidad con que se desliza el l´apiz.
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 ca´ıdas 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 s´olo son pr´acticos cuando se leen c´odigos impresos de gran calidad
colocados preferentemente en superficies duras, planas y horizontales.
2. Lectores CCD (Charge Coupled Device):
Son lectores de contacto que emplean un fotodetector CCD formado por una fila de LEDs
que emite m´ultiples fuentes de luz y forma un dispositivo similar al encontrado en las
c´amaras de v´ıdeo, es decir, mediante un arreglo de foto diodos toma una ((foto)) del s´ımbolo
de c´odigo de barras y la traduce a una se˜nal, que puede ser similar a la enviada por el l´aser
o a la del l´apiz ´optico. Se requiere hacer contacto f´ısico con el c´odigo, 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 m´oviles, tiene un alto First Read Rate (FRR) y es econ´omico. Sin embargo
no todo son ventajas ya que requiere estar muy cerca del c´odigo (0–1.5 cm) y no puede
leer s´ımbolos que rebasen el ancho de su ventana.
3. Lectores l´aser tipo pistola:
Realiza un barrido mediante una luz l´aser que genera una se˜nal similar a la del l´apiz
´optico, pero a una mayor frecuencia. Esta se˜nal es conocida como HHLC (Hand Held
Laser Compatible). Un espejo rotatorio u oscilatorio dentro del equipo mueve el haz de
un lado a otro a trav´es del c´odigo de barras, de modo que no se requiere movimiento por
parte del operador, ´este solo debe apuntar y disparar. Adem´as usan un mecanismo para
prevenir la lectura accidental de otros c´odigos dentro de su distancia de trabajo.
Presenta las siguientes ventajas: r´apido, tiene un alto First Read Rate (FRR), puede leer
c´odigos estropeados o mal impresos y puede leer a distancia, desde unos pocos cent´ımetros
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 m´oviles.
4. Lectores l´aser fijos omnidireccionales:
Se encuentran normalmente en las cajas registradoras de supermercados. El haz de l´aser se
hace pasar por un conjunto de espejos que generan un patr´on ominidireccional, otorgando
as´ı la posibilidad de pasar el c´odigo en cualquier direcci´on, sin importar la orientaci´on del
13
22. 2. C´odigos 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
l´aser de pistola, adem´as de presentar un First Read Rate (FRR) de pr´acticamente el 100 %.
En contrapartida es un lector caro y el operador que lo utilice requiere que los art´ıculos
etiquetados no sean muy voluminosos pues el esc´aner se monta en posici´on fija.
En la Figura 2.4 se muestra un lector de cada uno de los diferentes tipos que hemos mencionado
anteriormente.
(a) (b) (c) (d)
Figura 2.4.: Lectores de c´odigos de barras: (a) tipo pluma o l´apiz; (b) lector CCD; (c) l´aser tipo
pistola; (d) l´aser omnidireccional
14
23. 3. Detecci´on de bordes
3.1. T´ecnicas de localizaci´on de c´odigos de barras
Existen distintas t´ecnicas para identificar d´onde se encuentra un c´odigo de barras dentro de
una imagen [28]:
Algoritmo Morfol´ogico Matem´atico: M´etodo de localizaci´on basado en operaciones
morfol´ogicas b´asicas como: dilataci´on, erosi´on, cierre y un conjunto de operaciones mor-fol
´ogicas geod´esicas. El algoritmo se basa en el hecho que los c´odigos de barras poseen
((valles estrechos)) (espacios estrechos existentes entre las barras), un alto contraste y l´ıneas
paralelas. Mediante una segmentaci´on, estos valles se juntan para formar una regi´on que
corresponde al c´odigo de barras, descartando peque˜nas ´areas que no pertenecen al c´odigo,
para a continuaci´on aplicar filtros morfol´ogicos en diferentes orientaciones con el fin de
extraer la orientaci´on del c´odigo de barras.
An´alisis de texturas mediante filtros de Gabor: La idea fundamental sobre la que
se basa este m´etodo es asumir que un c´odigo de barras es una regi´on con una textura
homog´enea. Adem´as en una imagen donde se encuentra presente la textura, el nivel de
gris de los pixels individuales no proporcionan suficiente informaci´on para llevar a cabo
una segmentaci´on satisfactoria de la imagen, por ello se hace necesario incluir las relaciones
espaciales existentes entre los niveles de gris de los pixels dentro de una vecindad local.
Detecci´on de texto en las im´agenes: Otra idea para la localizaci´on de c´odigos de barras
es utilizar t´ecnicas provenientes de los algoritmos de b´usqueda de texto, sin embargo este
tipo de m´etodos presentan como inconveniente que suelen consumir mucho tiempo.
Densidad de Gradiente: Otro m´etodo de localizaci´on de c´odigos de barras es el basado
en la extracci´on de ´areas que poseen una alta densidad de gradientes mono-orientados.
La localizaci´on de c´odigos de barras en una imagen con baja resoluci´on es el principal
prop´osito de este algoritmo, que utiliza para tal objetivo el c´alculo de gradientes y filtros
morfol´ogicos.
En nuestro m´etodo, la idea en la que nos basamos para la localizaci´on del c´odigo de barras,
es muy similar a la presente en la ´ultima t´ecnica mencionada. Aunque debemos recalcar que
el conocimiento sobre estas t´ecnicas no se produjo hasta bastante m´as tarde del comienzo de
este proyecto. Simplemente, el descubrir que exist´ıan y conocer en qu´e se basan, sobretodo esta
´ultima, nos llev´o a pensar que no ibamos mal encaminados en cuanto a la manera en que se
detecta y localiza el c´odigo de barras en nuestro proyecto.
Por tanto, el objetivo final que perseguimos es conseguir la decodificaci´on del c´odigo de barras,
para lo cual un paso esencial es la localizaci´on dentro de la imagen del c´odigo en cuesti´on.
La idea fundamental que se ha seguido para conseguir esta tarea ha sido que los c´odigos de
barras presentan unas caracter´ısticas que permiten su localizaci´on bas´andonos en el m´etodo de
la detecci´on de bordes, ya que cada uno de los puntos de borde que conforman el c´odigo de
barras ((supuestamente)) presentar´an una orientaci´on similar y por tanto, ser´an susceptibles de
ser clasificados como puntos de la imagen con una alta probabilidad de contener el c´odigo de
barras pretendido.
15
24. 3. Detecci´on de bordes
3.2. Detector de bordes de Canny
Un concepto relacionado con la extracci´on de bordes es el de la primera derivada, ya que ´esta
es cero en todas las regiones donde no var´ıa la intensidad y tiene un valor constante en toda la
transici´on de intensidad. Por tanto un cambio de intensidad se manifiesta como un cambio brusco
en la primera derivada [24], caracter´ıstica ´esta que puede utilizarse para detectar la presencia
de un borde.
Uno de los operadores basados en la primera derivada para la detecci´on de bordes es el
algoritmo de Canny, que consiste en tres grandes pasos [24]:
Obtenci´on del gradiente (magnitud y orientaci´on del vector gradiente en cada p´ıxel).
Supresi´on no m´axima o adelgazamiento del ancho de los bordes, obtenidos con el gra-diente,
hasta lograr bordes de un p´ıxel de ancho.
Hist´eresis de umbral al resultado de la supresi´on no m´axima, con este proceso se pre-tende
reducir la posibilidad de aparici´on de falsos contornos.
Por tanto, en primer lugar a la imagen se le aplica un filtro gaussiano, para suavizar la imagen
y tratar de conseguir la eliminaci´on 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
caracter´ısticas de inter´es, provocando de esta forma un peor resultado.
A continuaci´on se realiza el c´alculo del gradiente de la imagen suavizada, utilizando para ello
una aproximaci´on del gradiente de la funci´on Gaussiana.
La imagen correspondiente a la magnitud del gradiente de la funci´on gaussiana tendr´a valores
grandes donde la variaci´on de la intensidad sea grande. Por esta raz´on se debe eliminar aquellos
pixels que no tienen una magnitud alta utilizando para ello un cierto umbral.
Posteriormente se realiza un proceso de eliminaci´on de falsos bordes, conjuntamente a un
realzado de bordes poco definidos. Este proceso se consigue eliminando aquellos pixels que no
son m´aximos locales.
Un punto a tener en cuenta es la elecci´on de los valores de las variables que se aplican en
cada uno de los pasos anteriores, ya sea el valor de los umbrales o de la varianza en los filtros
gaussianos por ejemplo, ya que seg´un estos valores los resultados pueden ser mejores o peores.
Los valores que se han tomado definitivamente para estos par´ametros se muestran m´as adelante,
en el cap´ıtulo 8.
En resumen, la detecci´on de bordes usando operadores de aproximaci´on del gradiente tiende a
funcionar bien en los casos en que se utilizan im´agenes con transiciones de intensidad claramente
definidas y ruidos relativamente bajos [24].
El algoritmo de Canny para la detecci´on de bordes se explica con m´as detalle en el ap´endice A.
3.3. Ejemplo
Previamente a la utilizaci´on del algoritmo de Canny para la detecci´on de bordes se prob´o con
otros operadores como los de Sobel, pero el resultado que se obten´ıa era bastante peor que
con el primero. Al aplicar el filtro de Sobel, para conseguir el gradiente y posteriormente su
magnitud y orientaci´on, el resultado que se obten´ıa se ve´ıa afectado por el ruido que presentaba
la imagen. Por este motivo se pens´o en aplicar previamente un filtro media o mediana para
suavizar la imagen y as´ı obtener mejores resultados, pero la imagen tend´ıa a emborronarse
en vez de suavizarse. Otra opci´on que se hubiese podido aplicar es la utilizaci´on de un filtro
Gaussiano previamente al filtro de Sobel, sin embargo esta posibilidad no se prob´o, ya que
directamente enfocamos nuestra atenci´on hacia el detector de bordes de Canny.
16
25. 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-taci
´on; (c) supresi´on no m´axima; (d) hist´eresis de umbral
17
27. 4. Detecci´on de regiones candidatas
4.1. Idea general
Una idea que manejamos a la hora de detectar el c´odigo de barras dentro de la imagen es que
((supuestamente)) los pixels que forman parte del c´odigo van a tener una orientaci´on similar o
muy parecida, por ello se pretende extender la orientaci´on de los puntos de borde de la zona
donde se encuentra el c´odigo a los puntos de ´esta que no lo son, creando as´ı una regi´on de
orientaci´on similar que podr´a seleccionarse como regi´on que contiene el c´odigo. Los puntos de
borde representan la separaci´on entre los espacios y las barras del c´odigo, por este motivo se
pretende extender la orientaci´on 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 orientaci´on similar
donde se encuentra el c´odigo de barras.
Con este fin, una vez hemos conseguido el valor de la orientaci´on del gradiente de intensidad
para cada uno de los pixels de la imagen, operaci´on realizada en el paso anterior, se prosigue el
proceso realizando un an´alisis multiresoluci´on de la imagen. Con esta operaci´on vamos a obtener
una pir´amide de im´agenes donde cada imagen que precede a otra siempre ser´a de mayor tama˜no,
es decir, se van consiguiendo im´agenes de menor tama˜no. Pero esta operaci´on no s´olo conlleva
una reducci´on del tama˜no de la imagen progresivamente, sino que se pretende, como hemos
comentado, conseguir extender la orientaci´on de manera que podamos seleccionar una regi´on de
la imagen como posible zona donde se encuentra el c´odigo de barras por poseer, localmente, un
valor de orientaci´on 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 pasar´an a ser uno en la imagen de nivel posterior. A partir del valor de la orientaci´on de
estos cuatros pixels se calcula la media, pero s´olo participan en esta operaci´on los pixels que
pertenezcan a un punto de borde. As´ı, el pixel en la imagen reducida tomar´a un valor para la
orientaci´on que ser´a la media de los pixels de los que proviene, que ser´an aquellos que son puntos
de borde.
Adem´as, 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 c´odigo 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 =
X
(i,j)2N
I(i, j)
19
28. 4. Detecci´on 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-c´odigo para una
mejor comprensi´on de los pasos realizados. Nos aparece en el mismo la funci´on Vecindad() que
nos devuelve el conjunto de pixels vecinos de un determinado punto seg´un la vecindad indicada.
Adem´as esta funci´on ya tiene en cuenta no acceder a puntos de fuera de la imagen. Esta funci´on
tambi´en ser´a usada en algoritmos que aparecen m´as adelante.
Algoritmo 1 Agrupamiento de la orientaci´on seg´un la vecindad
Entrada: La imagen O de la orientaci´on de tama˜no M ×N, la imagen E de bordes de tama˜no
M × N y la vecindad Vx × Vy utilizada
Salida: La imagen S de tama˜no M
Vx
× M
Vy
1: for x ( 1 to M with step Vx do
2: for y ( 1 to N with step Vy do
3: numbordes ( 0
4: Suma ( 0
5: for all (i, j) 2 Vecindad(x, y, Vx, Vy) do
6: if E(i, j) = 1 then
7: numbordes ( numbordes + 1
8: Suma ( Suma + O(i, j)
9: if numbordes = 0 then
10: S( x
Vx
, y
Vy
) ( ((no-borde))
11: else
12: S( x
Vx
, y
Vy
) ( Suma
numbordes
Debemos se˜nalar que este algoritmo se utiliza s´olo para el primer nivel, es decir, cuando
partimos de la imagen de la orientaci´on obtenida en el punto anterior. A partir de entonces el
algoritmo a utilizar es muy similar a ´este, simplemente cambia que la entrada ser´a 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 est´en 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 pir´amide de im´agenes vamos
ahora a bajar, de forma que un p´ıxel extender´a su valor a los cuatro pixels de los que proven´ıa.
Con este proceso se pretende extender, en la zona donde se encuentra el c´odigo, la orientaci´on
de los pixels que eran bordes a aquellos que no lo eran, todo ello para intentar homogeneizar la
orientaci´on en nuestra regi´on de inter´es y as´ı, de esta forma, poder posteriormente elegir todos
estos pixels como posible zona donde pueda encontrarse el c´odigo de barras. El procedimiento
utilizado se describe en el Algoritmo 2.
Algoritmo 2 Reconstrucci´on para extender la orientaci´on
Entrada: Imagen I de tama˜no M × N y la vecindad Vx × Vy utilizada
Salida: Imagen S de tama˜no (M · Vx) × (N · Vy)
1: for x ( 1 to M do
2: for y ( 1 to N do
3: i ( x · Vx
4: j ( y · Vy
5: for all (i, j) 2 Vecindad(x, y, Vx, Vy) do
6: S(i, j) ( I(x, y)
20
29. 4.3. Ejemplo
Sin embargo, despu´es de realizar esta operaci´on, es decir, subir y bajar en la pir´amide de
im´agenes, la zona donde se encontraba el c´odigo no presentaba esa homogeneidad que se pre-tend
´ıa y todav´ıa exist´ıa demasiada variaci´on dentro de la zona en cuesti´on.
Por tanto se pens´o que para este proceso se podr´ıa coger una divisi´on 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 tend´ıan a ser peores, es decir, cuanto m´as grande es la vecindad que cogemos para
reducir, los resultados empeoran, de forma que la homogeneizaci´on, en cuanto al valor de la
orientaci´on de la zona donde se encuentra el c´odigo, es peor.
Esto puede ser debido a que al coger m´as puntos para realizar la media, en la zona pr´oxima al
c´odigo estamos cogiendo un n´umero mayor de pixels que son puntos de borde y que no pertenecen
al c´odigo y cuyo valor afecta de manera negativa a la hora de calcular la orientaci´on. De alguna
manera estamos provocando el proceso contrario al pretendido, ya que el valor de la orientaci´on
de los puntos de borde de la frontera exterior al c´odigo y que no pertenecen al c´odigo de barras,
dominan a los puntos de borde de dentro del c´odigo, provocando que su orientaci´on se extienda
hacia dentro del c´odigo y reduciendo as´ı la regi´on donde se encuentra ´este.
Otra opci´on con la que los resultados que se obtuvieran podr´ıan ser mejores, era la posibilidad
de utilizar la mediana y no la media, por su mayor robustez estad´ıstica. Al cambiar la media por
esta operaci´on empezamos a conseguir lo que se pretend´ıa, debido, seguramente, a que la media
se pod´ıa ver afectada, a la hora de realizarse la operaci´on, 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 im´agenes que se obtienen en este nuevo proceso,
tanto cuando subimos en la pir´amide, como cuando bajamos.
21
30. 4. Detecci´on de regiones candidatas
(a) (b)
Figura 4.1.: Detecci´on de regiones candidatas: (a) resultado del proceso cuando subimos; (b)
resultado del proceso cuando bajamos
22
31. 5. Etiquetado y filtrado de regiones
5.1. Etiquetado de componentes conexas
Una vez realizado el paso anterior, deb´ıamos pensar una forma de poder discriminar el conjunto
de pixels que no nos proporcionan informaci´on relevante y quedarnos s´olo con aquellos que nos
interesan por contener la regi´on de la imagen donde supuestamente se encuentra el c´odigo que
se pretende detectar.
En busca de este objetivo se pens´o en utilizar algoritmos de etiquetado de componentes
conexas, cuya idea b´asicamente consiste en agrupar pixels de una misma regi´on 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 deb´ıamos binarizar, de alguna forma, el resultado obtenido en el proceso anterior, para
poder despu´es 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 est´an conectados entre s´ı (usando 4-conectividad u 8-conectividad) por un
camino o conjunto de pixels todos con ese mismo valor binario se les asigna una misma etiqueta
identificativa, que debe ser ´unica de la regi´on a la cual pertenecen los pixels y constituye su
identificador [24].
5.2. Procedimiento
Con el fin de obtener la binarizaci´on deseada se pens´o en la siguiente idea: cuando ((subimos)) en
la pir´amide, como comentamos en el punto anterior, estamos intentando que la zona de la imagen
donde se encuentra el c´odigo de barras se homogeinice, en cuanto al valor de la orientaci´on, y
as´ı, posteriormente, poder elegir todos estos pixels, con valor similar, como posible zona donde
se encuentra un c´odigo de barras. Sin embargo, ahora cuando ((bajamos)), en lugar de extender
la orientaci´on a los distintos pixels seg´un la divisi´on implementada, podemos aprovechar para
binarizar y realizar a continuaci´on su correspondiente expansi´on.
Por tanto una vez hemos llegado al ´ultimo nivel (el m´as alto de la pir´amide) nos disponemos
a binarizar dicha imagen siguiendo el siguiente criterio: si la mitad de los pixels de la vecindad
elegida para la divisi´on son parecidos o similares entre s´ı, es decir, no distan mucho en cuanto al
valor de la orientaci´on, seg´un un umbral predeterminado, entonces todos los pixels de la vecindad
tendr´an el valor binario ((1)), si no es as´ı ser´an ((0)), al igual que si m´as de la mitad de los pixels son
puntos etiquetados como ((no-bordes)), tambi´en toman el valor ((0)). Una vez tenemos la imagen
binarizada, simplemente se trata a continuaci´on de extender esta binarizaci´on hasta el nivel
inicial, el cual se corresponde a una imagen de tama˜no igual al de la imagen original. El proceso
de binarizaci´on se puede observar en el Algoritmo 3 y el proceso de extender la orientaci´on es
similar al que aparece en el Algoritmo 2. En el Algoritmo 3 aparece la funci´on RelPixels() que
simplemente se encarga de ver la relaci´on 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 prob´o un poco con todas las posibles variables que nos dan juego a la hora de realizar este
proceso, para ver cu´ales son las condiciones con las cuales se obtienen los mejores resultados.
23
32. 5. Etiquetado y filtrado de regiones
Algoritmo 3 Binarizaci´on de un determinado nivel l de la pir´amide
Entrada: Una imagen Ol de tama˜no M × N, la vecindad Vx × Vy y un umbral U
Salida: Una imagen binaria S de tama˜no M × N
1: mitad ( (V x · V y)/2
2: for x ( 1 to M with step Vx do
3: for y ( 1 to N with step Vy do
4: num ( 0
5: for all (i, j) 2 Vecindad(x, y, Vx, Vy) do
6: if I(i, j)6= ((no-borde)) then
7: V ect[num] ( Ol(i, j)
8: num ( num + 1
9: if num < mitad then
10: for all (i, j) 2 Vecindad(x, y, Vx, Vy) do
11: S(i, j) ( 0
12: else
13: n ( RelPixels(V ect,U)
14: if n > mitad then
15: for all (i, j) 2 Vecindad(x, y, Vx, Vy) do
16: S(i, j) ( 1
17: else
18: for all (i, j) 2 Vecindad(x, y, Vx, Vy) do
19: S(i, j) ( 0
Se realizaron pruebas con diferentes tama˜nos en cuanto a las operaciones de agrupamiento de
los pixels vecinos 3 × 3, 5 × 5, etc., al igual que se prob´o a realizar el proceso de binarizaci´on
no desde el ´ultimo nivel sino desde cualquier otro de los calculados. Despu´es de varias pruebas
se pudo comprobar que utilizar una vecindad de 2 × 2 es la mejor opci´on, al igual que realizar
la binarizaci´on a partir, no desde el ´ultimo nivel, sino desde dos niveles menos. Adem´as, otra
conclusi´on que se obtuvo despu´es de probar distintas opciones, es que el nivel desde el cual es
mejor empezar a binarizar depende del tama˜no del c´odigo 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-baci
´on para asegurarnos que vamos por el camino acertado, no a nivel del algoritmo, sino como
comprobaci´on visual nuestra, es superponer a la imagen original esta imagen binarizada, para
ver que conjunto de pixels se est´an eligiendo, es decir, aquellos pixels que son la zona donde
supuestamente est´a el c´odigo. De esta manera se puede ver si el c´odigo de barras est´a dentro de
alguna de las regiones que detectaremos con los algoritmos antes mencionados. El resultado de
esta operaci´on 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
cl´asico [24] (Ap´endice B). Este algoritmo realiza s´olo 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, s´olo falta, para finalizar, descartar
24
33. 5.3. Resultados
Figura 5.1.: Imagen original con la m´ascara 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 im´agenes obtenidas seg´un la vecindad, de tama˜no m, y el nivel L desde
el cual binarizar siendo L el ´ultimo nivel de la pir´amide: (a) resultado obtenido con
una vecindad 2 × 2 y binarizando a partir del ´ultimo nivel; (b) resultado obtenido
con una vecindad 3×3 y binarizando a partir del nivel L−2; (c) resultado obtenido
con una vecindad 5 × 5 y binarizando a partir del nivel L − 1
aquellas regiones que no nos interesan y quedarnos con la que contiene el c´odigo de barras. Por
ello, en nuestro caso, nos quedaremos con la regi´on con mayor n´umero de pixels, que ser´a, con
gran probabilidad, la regi´on con m´as posibilidades de contener la zona donde se encuentra el
c´odigo de barras.
5.3. Resultados
A continuaci´on mostraremos un conjunto de im´agenes con el resultado obtenido al aplicar el
algoritmo de etiquetado de componentes conexas y quedarnos con aquella regi´on con un mayor
n´umero de pixels. De esta forma se podr´a observar en qu´e casos el proceso funciona, en cu´ales no
es exacto y qu´e factores afectan al mismo. Antes de todo recalcar que el algoritmo en un principio
se usaba para una 4-conectividad, pero se modific´o 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 c´odigo dentro de la regi´on.
En la imagen (c) el c´odigo de barras previamente fue modificado manualmente, dibujando una
l´ınea al principio y otra al final del mismo para ver qu´e resultado obten´ıamos. Como se puede
25
34. 5. Etiquetado y filtrado de regiones
Figura 5.3.: Resultado del algoritmo de etiquetado de componentes conexas
Figura 5.4.: La regi´on de mayor tama˜no de la Figura 5.3, hemos descartado las regiones que no
nos interesan y nos hemos quedado con la regi´on que contiene un mayor n´umero de
pixels
observar, la regi´on obtenida despu´es de realizar el proceso incluye estas dos falsas barras, como
es l´ogico, ya que el proceso las considera como propias del c´odigo. Este caracter´ıstica de los
c´odigos de barras, la facilidad con la cual es posible da˜narlos, conlleva la consiguiente dificultad
para los lectores que intenten descifrar dicho c´odigo. Pero esto ocurre tambi´en con otros tipos
de codificaci´on, por ejemplo, caracteres normales, los cuales si son da˜nados se dificulta, en gran
medida, su legibilidad.
En la Figura 5.6 podemos ver tres diferentes im´agenes del mismo c´odigo de barras, pero en
cada una de ellas el c´odigo se ha visto afectado por distintos factores que provocan el deterioro
del mismo. Como se observa aunque el c´odigo est´a rayado, como en (a) o en (b), o incluso
emborronado, como en (c), la regi´on que determina la zona donde se encuentra el c´odigo es
bastante acertada y no aparecen muchos huecos dentro de la misma. Esto es debido a que las
supuestas ((manchas)) que contiene el c´odigo, no tienen un trazo muy intenso con lo que no
afectan en gran medida al proceso, cosa muy diferente ser´ıa si fueran m´as intensas, m´as oscuras,
como en los siguientes ejemplos.
En la Figura 5.7 vemos como en las im´agenes (a) y (b), el ruido provocado por unas rayas de
26
35. 5.3. Resultados
(a) (b) (c)
Figura 5.5.: Resultado del proceso de localizaci´on ante un c´odigo de barras: (a,b) no da˜nado; (c)
al que se le ha dibujado una barra al principio y otra al final
(a) (b) (c)
Figura 5.6.: Diversas im´agenes de un mismo c´odigo de barras da˜nado por una serie de factores:
(a) da˜nado con una sola l´ınea; (b) afectado por m´as de una l´ınea; (c) emborronado
trazo m´as intenso que en la Figura 5.6, s´ı que afectan en mayor medida al proceso, provocando
que la regi´on que contiene el c´odigo no sea todo lo exacta que se precisa y dificultando su posterior
decodificaci´on. En la imagen (c) se han complicado todav´ıa m´as las cosas, incluyendo adem´as de
las rayas un elemento met´alico (((clip))) encima del c´odigo para comprobar as´ı el funcionamiento
del proceso ante tal situaci´on. Como era l´ogico la regi´on que se obtiene descarta la zona del
c´odigo donde se encuentra el ((clip)), adem´as de los puntos donde se encuentran las manchas, con
lo cual es muy poco probable que esta regi´on nos pueda llevar a una posible decodificaci´on con
´exito.
27
36. 5. Etiquetado y filtrado de regiones
(a) (b) (c)
Figura 5.7.: Resultado del proceso de detecci´on del c´odigo de barras ante diversas situaciones:
(a) c´odigo de barras rayado; (b) el mismo c´odigo que en la imagen anterior, pero al
que se le han a˜nadido m´as modificaciones; (c) misma imagen que la anterior, pero
a˜nadiendo un elemento ajeno al c´odigo de barras sobre ´el
(a) (b) (c)
Figura 5.8.: Conjunto de im´agenes a las que se les ha aplicado una transformaci´on geom´etrica:
(a) rotaci´on de 30; (b) espiral de −45; (c) espiral de 100
Para una mayor comprobaci´on, en cuanto al buen funcionamiento de este proceso, se ha
transformado una imagen digitalmente para ver qu´e ocurre cuando introducimos alg´un tipo de
transformaci´on geom´etrica en la misma, esto se observa en la Figura 5.8. En la imagen (a) se
ha aplicado una rotaci´on con un cierto ´angulo, de esta forma en la imagen aparece adem´as
del propio c´odigo a decodificar, un trozo del mismo en una esquina. La regi´on que obtenemos
contiene tanto el c´odigo, como el trozo que aparece en la esquina inferior. Esto es debido a la
forma en que agrupamos los pixels con una orientaci´on parecida seg´un un cierto umbral. Como
28
37. 5.3. Resultados
vemos esto tiene sus ventajas a la hora de capturar la zona donde se encuentra el c´odigo, c´omo
se observa en la imagen (b) y (c), pero por el contrario provoca que aquellas partes de la imagen
donde la orientaci´on es muy similar, y que no pertenezcan al propio c´odigo de barras, tambi´en
se puedan elegir como posible zona donde se encuentre ´este.
En la imagen (b) y (c) la transformaci´on geom´etrica realizada ha sido la misma en ambas, una
especie de remolino o espiral (((swirl))), pero utilizando ´angulos distintos. Aunque parezca dif´ıcil,
obtenemos unas regiones que contienen el c´odigo de barras con bastante exactitud, sin embargo
la decodificaci´on en nuestro caso es imposible. Para poder decodificar el c´odigo deber´ıamos ir
calculando las distintas orientaciones que el c´odigo presenta desde la primera barra hasta la
´ultima, para as´ı poder ir rectificando el c´odigo con el ´angulo adecuado en cada momento y
conseguir as´ı su decodificaci´on.
Despu´es de poder observar todos estos ejemplos parece que el proceso se comporta bastante
bien, siempre y cuando el c´odigo no se vea afectado, en gran medida, por alg´un tipo de ruido,
como manchas o rayas presentes en el c´odigo. Adem´as incluso aquellas im´agenes en las que se
les ha aplicado una transformaci´on geom´etrica, la zona donde se encuentra el c´odigo se detecta,
aunque su posterior decodificaci´on se complicar´ıa, y no se aborda en este proyecto.
Deber´ıamos comentar que se intentaron capturar im´agenes que sufrieran alg´un tipo de defor-maci
´on geom´etrica natural, realista, c´omo puede ser que la hoja donde se encuentre impreso el
c´odigo de barras est´e doblada por ejemplo. El proceso de localizaci´on creemos que igual fun-cionar
´ıa en estos casos, el problema de no poder tener im´agenes para comprobarlo ha sido por
culpa del enfoque. La imagen del c´odigo de barras, si ten´ıamos doblada la hoja, presentaba zonas
donde era dif´ıcil enfocar y obtener resultados n´ıtidos.
Tambi´en pudimos comprobar que algunas pruebas en las que el c´odigo no presentaba ninguna
raya ni mancha el resultado obtenido no era el deseado. Esto es debido a que el proceso se ve
bastante afectado por la calidad de la imagen, por lo que algunas mejoras para incrementar la
robustez del m´etodo pasar´ıan, posiblemente, por realizar alg´un tipo de preproceso de la imagen
con el objetivo de evitar esta dependencia.
29
39. 6. Estimaci´on de la orientaci´on y rectificaci´on
6.1. Idea general
Todos los pasos realizados hasta este instante nos han permitido poder localizar la regi´on de
la imagen donde se encuentra el c´odigo de barras. Como es obvio, el c´odigo de barras puede estar
en cualquier posici´on dentro de la imagen, al igual que puede presentar cualquier orientaci´on, lo
que dificulta su localizaci´on.
Por tanto, debemos calcular la orientaci´on que presentan los puntos de borde que contiene
la regi´on susceptible de contener al c´odigo y que hemos obtenido en el paso anterior. Una vez
conocida esta orientaci´on simplemente debemos rectificar la imagen y conseguir a continuaci´on
una imagen que s´olo contenga el c´odigo. Esta subimagen ser´a binarizada para su posterior
decodificaci´on.
6.2. Procedimiento
El procedimiento utilizado para averiguar el ´angulo que debemos aplicar en la rotaci´on de
la imagen y que de esta manera se nos quede en sentido horizontal, es decir, con las barras
verticales, ha sido el siguiente: de todos los puntos de borde que se encuentran en la regi´on que se
ha seleccionado, que es donde se encuentra el c´odigo, nos quedamos con el valor de la orientaci´on
de cada uno de ellos y calculamos la mediana para conseguir el valor m´as representativo de la
orientaci´on en esa zona. Se calcula la mediana en vez de la media, ya que ´esta primera resulta
ser m´as robusta.
Una vez obtenemos la orientaci´on que representa a todo el conjunto de puntos que conforman
la zona donde se encuentra el c´odigo, simplemente tenemos que utilizarla para rotar la imagen
original una cantidad igual al ´angulo estimado.
(a) (b) (c)
Figura 6.1.: Rotaciones con la orientaci´on estimada usando la mediana: (a) imagen original; (b)
imagen original rotada; (c) regi´on donde hemos estimado que se encuentra el c´odigo
Una vez realizada la rotaci´on, lo que se pretende es obtener una imagen de tama˜no igual a la
caja de m´ınima inclusi´on [13] que contiene el trozo de imagen original rotada que se corresponde
31
40. 6. Estimaci´on de la orientaci´on y rectificaci´on
al c´odigo de barras. Para ello debemos basarnos en la regi´on obtenida en el paso anterior y en la
imagen original rotada, siendo el resultado el que se muestra en la imagen (a) de la Figura 6.2.
Una vez obtenida esta nueva imagen, s´olo nos queda binarizarla para facilitarnos su posterior
decodificaci´on. Con el objetivo de obtener una mejor binarizaci´on realizaremos una ecualizaci´on
del histograma [12] que nos permitir´a conseguir un mayor constraste entre las barras negras y
los espacios como se puede observar en la imagen (b) de la Figura 6.2.
(a) (b)
Figura 6.2.: Caja de m´ınima inclusi´on que incluye la regi´on donde hemos determinado que se
encuentra el c´odigo: (a) antes de la ecualizaci´on del histograma; (b) despu´es de la
ecualizaci´on del histograma
Para la obtenci´on del umbral a partir del cual realizar la binarizaci´on existen diversos m´etodos
autom´aticos de b´usqueda de ´este [11], como el algoritmo de Otsu [8], que es el empleado en
nuestro caso. El umbral que se obtiene con este m´etodo se considera aquel punto que parte los
pixels de una imagen en dos clases de niveles de gris C0 = {0, 1, . . . , t} y C1 = {t+1, t+2, . . . ,L},
siendo L el valor m´aximo de niveles de gris y t el umbral ´optimo que maximiza la separabilidad
de estas dos clases. El m´etodo se explica con m´as detalle en el Ap´endice C.
De esta manera, el resultado que se obtiene despu´es de la binarizaci´on, utilizando como umbral
el obtenido con el algoritmo de Otsu, es el que aparece en la Figura 6.3.
Figura 6.3.: Binarizaci´on utilizando el algoritmo de Otsu
Tanto la ecualizaci´on del histograma como la b´usqueda autom´atica del umbral, mejoran los
resultados de la binarizaci´on, ya que en un primer momento no us´abamos estas t´ecnicas, siendo
adem´as el umbral un valor fijo, con lo cual se obten´ıan unos resultados bastante peores. Esto se
podr´a comprobar, con mayor detalle, en el siguiente cap´ıtulo.
32
41. 7. Decodificaci´on
7.1. Introducci´on
Durante la fase de decodificaci´on surgieron bastantes problemas que nos hicieron pensar que
la decodificaci´on no es un proceso tan trivial como en un principio pueda parecer, una vez
conseguida la localizaci´on del c´odigo dentro de la imagen.
Mientras se pensaba en un procedimiento que nos permitiese decodificar el c´odigo obtenido
en las fases anteriores, surgi´o la idea de utilizar t´ecnicas relacionadas con el reconocimiento del
habla. Dentro de estas t´ecnicas encontramos los modelos de Markov [25], que a base de entre-namiento
consiguen identificar palabras de una frase analizando los fonemas que las caracterizan.
Sin embargo dominar esta t´ecnica requiere de mucho tiempo, adem´as una vez determinados los
aut´omatas que conforman el modelo se necesita de un aprendizaje, con el consiguiente gasto de
tiempo que ello conlleva y sobretodo, no se ten´ıa la certeza de que fuera a funcionar en nuestro
caso. Debido a estas razones, y a la limitaci´on del tiempo que ten´ıamos para la realizaci´on de
nuestro proyecto, se descart´o su uso.
Otra t´ecnica relacionada con la anterior es la t´ecnica DTW (Dynamic Time Warping) [23, 15].
Este m´etodo intenta el reconocimiemto de palabras conectadas en una frase, pero al contrario
que en los modelos de Markov no requiere de entrenamiento. Lleg´o a implementarse un algoritmo
representativo de esta t´ecnica, pero adaptado a nuestro caso en particular, es decir, en vez de
conseguir descifrar palabras dentro de una frase intentamos descifrar d´ıgitos de una secuencia
binaria. Los resultados no fueron los deseados y se desestim´o esta opci´on.
Otro motivo que provoc´o que desestimaramos estas dos opciones es que son m´etodos dema-siado
generales para lo que se pretende en este proyecto. Tiene sentido reconocer palabras con
estas t´ecnicas, ya que las palabras pueden sufrir deformaciones seg´un quien las pronuncia, el
acento, etc. Nosotros no vamos a alargar nuestro c´odigo, ni sufrir´a deformaciones similares a las
indicadas, s´olo nos afecta la correcta estimaci´on de la orientaci´on para la rectificaci´on del c´odigo
de barras. Por tanto tendr´ıa sentido utilizar estas t´ecnicas, si nuestro c´odigo si que sufriese esa
serie de transformaciones que provocasen su alargamiento, por ejemplo.
Incluso se pens´o en utilizar la t´ecnica de crestas y valles (ridges and valleys) [21], utilizada en
ciertos campos, como la medicina o en el procesamiento de huellas digitales. Para ello se utilizan
estas crestas o valles que aparecen en la imagen como caracter´ısticas geom´etricas ´utiles en el
an´alisis de im´agenes.
Uno de los trabajos relacionados con los c´odigos de barras [28], del cual obtuvimos bastante
informaci´on y que mencionamos en el primer cap´ıtulo de esta memoria, intentaba decodificar
el c´odigo de barras de la siguiente forma: una vez obtenida la regi´on de inter´es se extra´ıa de la
misma una onda donde aparecer´ıan crestas y valles correspondientes a los espacios y las barras
del c´odigo. La onda se umbraliza para conseguir que los elementos de las barras y espacios del
c´odigo se distingan con claridad. Se extraen elementos de la onda seg´un las anchuras que ´estos
presentan en el tipo de c´odigo a interpretar. Finalmente, conociendo lo que ocupa un car´acter
seg´un el tipo de codificaci´on, se van obteniendo los distintos caracteres que contienen el c´odigo
y se decodifican.
33
42. 7. Decodificaci´on
7.2. Procedimiento
La decodificaci´on se basa en el conocimiento del tipo concreto de c´odigo de barras que se
utiliza, en nuestro caso el c´odigo EAN-13. Por este motivo recordar que la forma de codificaci´on
del c´odigo EAN-13 se explica en el Ap´endice D p´agina 57 de esta memoria, por lo que en caso
de duda, ante algunos de los comentarios que vamos a mencionar sobre el tipo de codificaci´on,
sirva este apartado como gu´ıa o ayuda.
En cuanto a la decodificaci´on del c´odigo de barras podemos aprovechar las posibles ventajas
que se nos presenten, es decir, podemos utilizar el conocimiento ((a priori)) que tenemos, para
simplificar el problema. En nuestro caso en particular, la ventaja primordial es que nosotros pre-tendemos
decodificar c´odigos de barras utilizados para codificar la numeraci´on ISBN de los libros
y, debido a ello, conocemos de antemano que los c´odigos de barras de este tipo de publicaciones
empiezan con los d´ıgitos 978. Sabemos pues que el primer d´ıgito es el 9 y, consecuentemente,
la disposici´on en cuanto al tipo de codificaci´on que presentar´a la primera parte del c´odigo, es
decir, el d´ıgito 9 se corresponde con la secuencia ABBABA. Por todo ello podemos determinar que
nuestro c´odigo presentar´a la siguiente forma (Tabla D.4 p´agina 59):
9 ABBABA CCCCCC
donde cada d´ıgito se codifica seg´un el tipo de codificaci´on que se ha determinado.
Para decodificar nuestro c´odigo vamos a trazar una serie de l´ıneas imaginarias horizontales
sobre la imagen binaria centrada en el c´odigo obtenida en la fase anterior, a modo de los lectores
l´aser, qued´andonos con el valor de cada p´ıxel por el que se atraviesa. El trazar m´as de una l´ınea
persigue una mayor seguridad a la hora de que la decodificaci´on sea correcta, por ello el n´umero
de l´ıneas que vamos a realizar ser´a igual a la altura de la imagen.
Las l´ıneas que obtengamos debemos poder dividirlas en segmentos correspondientes a cada
uno de los posibles patrones que debemos encontrar, es decir, patr´on inicial y final, el patr´on
intermedio y el correspondiente a cada uno de los d´ıgitos que componen el c´odigo. El patr´on
inicial y el final est´an formados por tres m´odulos (101), donde un m´odulo como se explic´o en el
apartado 2.2 (p´agina 7), es la unidad m´ınima o b´asica de un c´odigo. El patr´on intermedio, por su
parte, est´a formado por cinco m´odulos (01010) y cada uno de los d´ıgitos est´a compuesto por 7
m´odulos. Con esta informaci´on, si sabemos que en el c´odigo nos aparecen 12 d´ıgitos codificados,
ya que el primero no lo est´a, tendremos una cantidad total de m´odulos de 95:
Inicio Seis d´ıgitos Intermedio Seis d´ıgitos Fin N´umero de m´odulos
3 6 · 7 5 6 · 7 3 95
Pero las l´ıneas que calculemos van a tener una cantidad de pixels que depender´a de la escala
a la que est´e el codigo dentro de la imagen. Por ello debemos calcular esta deformaci´on y ver
como nos afecta en nuestro caso, calculando cu´antos pixels por m´odulo tenemos, es decir:
43. = n
M
donde n es la cantidad total de pixels que conforman el c´odigo en nuestra imagen,
44. ser´a el
n´umero de pixels por m´odulo y M es la cantidad total de m´odulos que aparecen en un c´odigo,
que en nuestro caso, como hemos visto, vale 95.
Una vez obtenemos este dato podemos averiguar la relaci´on de pixels que se corresponde con
cada uno de los patrones antes mencionados, simplemente multiplicando el n´umero de m´odulos
por el n´umero de pixels por m´odulo
45. , es decir, el tama˜no de un d´ıgito ser´a el valor que se
obtenga de multiplicar el n´umero de pixels por m´odulo
47. 7.2. Procedimiento
Con estos datos podemos ir dividiendo la l´ınea y quedarnos con los pixels correspondientes
a cada d´ıgito dentro de la l´ınea e intentar averiguar cu´al es este d´ıgito. Actuaremos de la
siguiente manera: si sabemos que un d´ıgito codificado con la codificaci´on de tipo A va a seguir
un determinado patr´on, teniendo una cantidad de ceros seguida de otra de unos, luego m´as ceros
y por ´ultimo otra vez unos, podemos determinar el tama˜no m´aximo que nos va a ocupar un
d´ıgito de la siguiente manera:
= m ·
49. (n´umero de pixels por m´odulo) es 2 y m = 7, siendo m el n´umero de m´odulos que forma
un d´ıgito,
= 14, siendo
el n´umero m´aximo de pixels que ocupar´a un d´ıgito. Dentro de este
tama˜no buscaremos el patr´on que hemos comentado (0101, con una cierta cantidad en cada caso
de ceros y unos). Podemos encontrar este patr´on dentro de los 14 pixels y que el ´ultimo p´ıxel
sea el n´umero 14 o no, y sea el 13 o el 12, simplemente donde nos quedemos ser´a el p´ıxel de
comienzo del siguiente d´ıgito y a partir de ´este empezaremos a buscar el patr´on correspondiente
al siguiente d´ıgito en los 14 pixels que le siguen. Para un mejor entendimiento veamos este
ejemplo,
. . . 11 |0000111{z1000111}
14
|000110{0z001111}
13
0
| {z }
14
000 . . .
Como se observa, el primer d´ıgito ocupa los 14 pixels que puede tener como m´aximo, sin
embargo el segundo d´ıgito no ocupa los 14 pixels sino 13, luego la posici´on en la que empezar´a el
siguiente d´ıgito ser´a el p´ıxel que se encuentra dentro de una caja y no el subrayado, como hubiese
sido si el d´ıgito ocupase el m´aximo n´umero de pixels posible.
Vemos que, a pesar de determinar las cantidades de pixels que cogemos para un d´ıgito concreto,
este valor puede tener una peque˜na variaci´on con lo que realmente ocupa el patr´on correspon-diente
al d´ıgito, debido a la p´erdida de informaci´on con los decimales y sus redondeos. Por esta
raz´on buscamos los diferentes patrones o cambios que deben aparecer en cada caso dentro de la
cantidad de pixels que hemos calculado y si se encuentra antes del tama˜no m´aximo que se ha
determinado, entonces ese punto en concreto ser´a el principio del siguiente d´ıgito.
Una vez tenemos el conjunto de unos y ceros correspondiente a cada d´ıgito, como sabemos
con que tipo de codificaci´on, A, B ´o C, se ha codificado, simplemente tenemos que averiguar con
que d´ıgito se corresponde. Para ello vamos a calcular la distancia que presenta este conjunto con
cada uno de los d´ıgitos del tipo correspondiente de la siguiente forma: podemos representar la
forma de codificaci´on de un d´ıgito en vez de como un patr´on de unos y ceros, como un patr´on
de n´umero de m´odulos que representan estos unos y ceros, es decir,
D´ıgito Codificaci´on A N´umero de m´odulos
0 0001101 3211
Como vemos, tenemos tres m´odulos correspondientes a un espacio ancho, dos m´odulos corres-pondientes
a una barra ancha, un m´odulo para un espacio estrecho y un m´odulo para una barra
estrecha.
Siguiendo esta idea lo mismo haremos nosotros para el conjunto de ceros y unos que obtenga-mos
de la l´ınea calculada y que representan un d´ıgito, para a continuaci´on emplear la f´ormula
de la suma de cuadrados y calcular para que d´ıgito esta distancia es menor.
Xn
i=1
(xi − yi)2
35
50. 7. Decodificaci´on
siendo xi cada uno de las cantidades correspondientes al n´umero de m´odulos del conjunto de
unos y ceros obtenidos de la l´ınea calculada, yi cada una de las cantidades de m´odulos de un
d´ıgito en la codificaci´on correspondiente y la variable n que se corresponde al valor 4 ya que
tenemos este n´umero de cambios en un d´ıgito.
Para que se entienda mejor este paso vamos a explicarlo con un ejemplo. Si tenemos el siguiente
conjunto de pixels para un d´ıgito en concreto:
00001111000111
calculamos el n´umero de unos y de ceros que contiene el conjunto de la siguiente manera,
|00{0z0}
4
|11{1z1}
4
|0{0z0}
3
|1{1z1}
3
a continuaci´on dividimos el n´umero de unos y ceros por el n´umero de pixels por m´odulo
51. , de
esta forma obtendremos el valor equivalente de m´odulos en cada caso.
|00{0z0}
4
56. = 2 obtendr´ıamos,
|00{0z0}
2
|11{1z1}
2
|0{0z0}
1,5
|1{1z1}
1,5
Ahora simplemente debemos aplicar la f´ormula de la suma de cuadrados con los 10 d´ıgitos con
los que debemos comparar y con aquel que el resultado sea menor, ser´a el d´ıgito representado
por el conjunto de unos y ceros que se est´a analizando.
Para todas las l´ıneas que realizamos, una vez decodificadas, calculamos el checksum o car´acter
de verificaci´on seg´un la codificaci´on EAN-13, con el objetivo de asegurarnos que la decodificaci´on
es correcta. En caso de no ser as´ı ese resultado se descarta por no ser correcto y s´olo se tienen
en cuenta para el resultado final aquellas l´ıneas donde el checksum sea correcto. Un peque˜no
problema que se nos presenta es que en ocasiones aparecen combinaciones de d´ıgitos que con-siguen
que el checksum sea correcto, pero sin embargo el c´odigo no representa al que aparece en
la imagen, provocando que el resultado final no sea correcto.
Como explicaremos a continuaci´on, los d´ıgitos finales que elegiremos como resultado se pueden
obtener mediante diferentes m´etodos, teniendo en cuenta todas las l´ıneas obtenidas con un
checksum correcto.
Una forma es calcular el n´umero de veces que aparece un d´ıgito en una determinada
posici´on y elegir como m´as probable aquel que m´as veces se repite en esa posici´on en
concreto.
Otra posible opci´on es utilizando probabilidades, es decir, calcularemos a partir de las
distancias que hemos calculado previamente la probabilidad que presenta un d´ıgito de ser
el correcto y nos quedaremos con aquel d´ıgito cuya probabilidad sea m´as alta. La obtenci´on
de estas probabilidades se realiza a partir de la siguiente f´ormula:
p = e
−d
2
donde p ser´a la probabilidad que presentar´a 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 d´ıgitos con
los que se ha realizado la operaci´on.
36
57. 7.3. Resultados
Otra forma de obtener el resultado es combinando la probabilidad con la confianza, me-diante
su producto y eligiendo aquel d´ıgito para el cual se obtenga un mayor valor de esta
operaci´on. Cuando nosotros trazamos una l´ınea, ´esta puede cruzar por una zona que no se
haya elegido como perteneciente al c´odigo, por ser una mancha o cualquier otra clase de
ruido, pero que, sin embargo, puede ser una zona m´ınima que igual permita al resto de la
l´ınea obtener un c´odigo v´alido. Adem´as los pixels que conforman esta zona est´an etiqueta-dos
como puntos de la imagen que no contienen informaci´on v´alida del c´odigo. Por tanto
cuando realizamos las distintas divisiones de la l´ınea para compararlas con los d´ıgitos del
tipo de codificaci´on que se corresponda para cada posici´on en concreto, puede ocurrir que
un conjunto de esos pixels contenga algunos etiquetados como puntos con informaci´on no
v´alida. Por ello la confianza nos vendr´a dada por el porcentaje de puntos con informaci´on
v´alida dentro del conjunto de pixels.
Como ´ultima opci´on estudiada es una igual que la anterior pero en vez de coger el valor
m´aximo, calculamos la mediana y nos quedamos con el valor que se obtenga.
Como existen diferentes caracter´ısticas o informaci´on a la hora de la decodificaci´on del c´odigo,
se debe de alguna forma intentar clasificar y combinar esta informaci´on [19], con la intenci´on de
ofrecernos ayuda a la hora de interpretar el c´odigo. En nuestro caso ha sido una tarea bastante
complicada y se opt´o por lo siguiente: una vez calculados los cuatro, elegimos aquel resultado
cuyo c´odigo sea correcto en cuanto al c´alculo del checksum y adem´as empiece por 978 que, como
comentamos al principio de este apartado, son los tres primeros d´ıgitos con los que empieza un
c´odigo ISBN. Veamos un ejemplo:
Tabla 7.1.: Ejemplo de posibles resultados seg´un la opci´on elegida
T´ecnica N.o decodificado Checksum ¿Inicio 978?
N.o veces aparici´on 9788428323086 Correcto S´ı
M´axima probabilidad 9478228323088 Correcto No
M´axima probabilidad × confianza 9488428323086 Incorrecto No
Mediana probabilidad × confianza 9788428323085 Incorrecto S´ı
En este ejemplo vemos el resultado obtenido con cada una de las opciones antes mencionadas,
por tanto seg´un estos resultados elegir´ıamos la primera opci´on.
7.3. Resultados
A continuaci´on se muestra una serie de im´agenes junto al c´odigo que hemos conseguido de-codificar.
En caso de haber alg´un d´ıgito del c´odigo err´oneo, ´este aparece dentro de una caja
indicando que no era el correcto. As´ı, de esta manera, se podr´a apreciar aquellos casos en los
que el m´etodo funciona correctamente y en cu´ales falla uno o varios d´ıgitos.
Como podemos observar en la Figura 7.1, se ha conseguido para cada una de esas im´agenes
decodificar el c´odigo y obtener los distintos d´ıgitos que lo componen sin ning´un error. Pero estas
im´agenes pertenec´ıan a c´odigos sin ning´un tipo de deterioro provocado por rayas o manchas,
por ello vamos a analizar como se comporta el m´etodo ante situaciones menos favorables.
El comportamiento del m´etodo ante c´odigos deteriorados lo podemos observar en la Figura 7.2
donde nos aparecen c´odigos con alg´un tipo de marca que dificulta su decodificaci´on, sin embargo
la soluci´on obtenida ha sido la deseada sin ning´un tipo de error. Esto es debido a que las manchas
que presenta el c´odigo de barras no son lo suficientemente fuertes como p o marcadas para evitar
la correcta decodificaci´on del mismo. En cambio, en ciertos casos como los que mostramos en la
37
58. 7. Decodificaci´on
9788428323086 9789706860507 9788428328647
Figura 7.1.: Distintas im´agenes con el c´odigo que se ha obtenido al aplicar nuestro m´etodo
Figura 7.3, el resultado final s´ı que presenta alg´un d´ıgito que no se corresponde con el d´ıgito del
c´odigo en cuesti´on.
9788428324304 9788428326360 9788428326360
Figura 7.2.: Una serie de im´agenes en las que el c´odigo sufre alguna alteraci´on en cuanto a
presentar rayas o manchas sobre ´el, pero la decodificaci´on final es completamete
correcta
9788428326 8 77 978842 79 27336 97884 1 8328111
Figura 7.3.: Conjunto de im´agenes en las que la decodificaci´on del c´odigo de barras presenta
alg´un d´ıgito err´oneo
Pero no siempre el resultado que se obtiene es aceptable. A veces, el resultado conseguido
presenta un n´umero de d´ıgitos la mayor´ıa de ellos err´oneo, como se observa en la Figura 7.4.
Este mal funcionamiento es debido a la intensidad de las marcas que presenta el c´odigo, que
como comentamos en apartados anteriores, afecta a la hora de la detecci´on de la zona donde se
encuentra ´este. Esta mala detecci´on provoca que esta ´ultima fase de decodificaci´on sea err´onea
al no tener la regi´on que contiene al c´odigo la suficiente informaci´on, de manera que permita la
decodificaci´on del c´odigo de barras con ´exito.
38
59. 7.4. An´alisis de robustez
9 0 8 7 42 4 3 42 3 63 978 51121 2864 0 9 34747551 8 301
Figura 7.4.: Im´agenes donde el m´etodo no consegu´ıa los resultados deseados
De forma global, los resultados que se han obtenido, bas´andonos en un conjunto de im´agenes
de prueba, han sido los que se muestran en la Tabla 7.2. S´olo comentar, que de las 15 im´agenes
en las que no se consigui´o obtener el c´odigo correcto, casi la mitad de ellas, m´as exactamente en
7, el c´odigo s´olo presentaba un d´ıgito err´oneo.
Tabla 7.2.: Comportamiento del m´etodo
Resultados
Caso analizado N.o im´agenes Correcto Incorrecto Porcentaje
Limpia 10 7 3 70
Da˜nada 24 12 12 50
Total 34 19 15 56
7.4. An´alisis de robustez
En este apartado se van a presentar una serie de ejemplos o experimentos para comprobar
hasta qu´e punto el m´etodo puede ser fiable, o simplemente con el prop´osito de dejar claro ciertos
aspectos que creemos pueden resultar de inter´es.
Automatizaci´on del proceso de binarizaci´on
Como comentamos en el cap´ıtulo anterior, previamente a la binarizaci´on se realiza una ecua-lizaci
´on del histograma, Este paso junto a la utilizaci´on del m´etodo de Otsu para encontrar el
umbral a partir del cual binarizar, mejoran dicha binarizaci´on y por consiguiente, la posterior
decodificaci´on. En la Figura 7.5 se muestra el resultado que se obtiene tanto sin ecualizar y
con un umbral fijo, como el mismo resultado ecualizando el histograma y aplicando Otsu para
encontrar dicho umbral.
Se puede observar que la subimagen que se obtiene del c´odigo de barras sin haber realizado
la ecualizaci´on y con un umbral fijo, es peor que en el otro caso comentado. Adem´as la decodi-ficaci
´on no tiene ´exito, debido a que la imagen binarizada no es lo bastante buena para poder
ser decodificada correctamente. De ah´ı la importancia, tanto de la ecualizaci´on previa de la
imagen como del c´alculo autom´atico del umbral a partir del cual binarizar, ya que si ´este es fijo,
en ciertas im´agenes nos va a resultar adecuado, pero en otras no. Debido a esto no pod´ıamos
encontrar un valor que fuese adecuado para todos los casos, por lo que se pens´o en el m´etodo
de Otsu para evitar este contratiempo.
39