SlideShare una empresa de Scribd logo
1 de 70
Descargar para leer sin conexión
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
ii
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
iv
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
vi
´Indice general 
1. Introducci´on 1 
1.1. Motivaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 
1.2. Organizaci´on de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 
1.3. Trabajos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 
2. C´odigos de barras 7 
2.1. Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 
2.2. Definici´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 
2.3. Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 
2.4. Ventajas e inconvenientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 
2.5. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 
2.6. Clases de c´odigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 
2.7. Dispositivos de escritura y lectura de c´odigos de barras . . . . . . . . . . . . . . . 11 
3. Detecci´on de bordes 15 
3.1. T´ecnicas de localizaci´on de c´odigos de barras . . . . . . . . . . . . . . . . . . . . 15 
3.2. Detector de bordes de Canny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 
3.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 
4. Detecci´on de regiones candidatas 19 
4.1. Idea general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 
4.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 
4.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 
5. Etiquetado y filtrado de regiones 23 
5.1. Etiquetado de componentes conexas . . . . . . . . . . . . . . . . . . . . . . . . . 23 
5.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 
5.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 
6. Estimaci´on de la orientaci´on y rectificaci´on 31 
6.1. Idea general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 
6.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 
7. Decodificaci´on 33 
7.1. Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 
7.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 
7.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 
7.4. An´alisis de robustez . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 
vii
´Indice general 
8. Sistema experimental 45 
8.1. Informaci´on general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 
8.2. Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 
8.3. Valores por defecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 
8.4. Tiempo de ejecuci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 
8.5. Duraci´on del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 
9. Conclusiones 49 
A. Detector de bordes de Canny 51 
B. Algoritmo cl´asico de etiquetado de componentes conexas 53 
C. M´etodo de Otsu 55 
D. Caracter´ısticas del c´odigo EAN-13 57 
viii
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
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
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
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
1.3. Trabajos relacionados 
Figura 1.1.: Diagrama global del proceso implementado 
5
1. Introducci´on 
6
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
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
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
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
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
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
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
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
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
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
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
3. Detecci´on de bordes 
18
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
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
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
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
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
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
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
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
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
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
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
5. Etiquetado y filtrado de regiones 
30
6. Estimaci´on de la orientaci´on y rectificaci´on 
6.1. Idea general 
Todos los pasos realizados hasta este instante nos han permitido poder localizar la regi´on de 
la imagen donde se encuentra el 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
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
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
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:
= n 
M 
donde n es la cantidad total de pixels que conforman el c´odigo en nuestra imagen,
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
, 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
por 7 m´odulos que forman un d´ıgito. 
34
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 ·
, 
si
(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
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
, de 
esta forma obtendremos el valor equivalente de m´odulos en cada caso. 
|00{0z0} 
4
|11{1z1} 
4
|0{0z0} 
3
|1{1z1} 
3
Suponiendo que
= 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
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
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
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
Localización y decodificación de códigos de barras EAN-13 en imágenes
Localización y decodificación de códigos de barras EAN-13 en imágenes
Localización y decodificación de códigos de barras EAN-13 en imágenes
Localización y decodificación de códigos de barras EAN-13 en imágenes
Localización y decodificación de códigos de barras EAN-13 en imágenes
Localización y decodificación de códigos de barras EAN-13 en imágenes
Localización y decodificación de códigos de barras EAN-13 en imágenes
Localización y decodificación de códigos de barras EAN-13 en imágenes
Localización y decodificación de códigos de barras EAN-13 en imágenes
Localización y decodificación de códigos de barras EAN-13 en imágenes
Localización y decodificación de códigos de barras EAN-13 en imágenes

Más contenido relacionado

Similar a Localización y decodificación de códigos de barras EAN-13 en imágenes

Algoritmo de Reconocimiento de Objetos en Escenas Complejas para Aplicaciones...
Algoritmo de Reconocimiento de Objetos en Escenas Complejas para Aplicaciones...Algoritmo de Reconocimiento de Objetos en Escenas Complejas para Aplicaciones...
Algoritmo de Reconocimiento de Objetos en Escenas Complejas para Aplicaciones...CIMAT
 
DataMining_lastfm
DataMining_lastfmDataMining_lastfm
DataMining_lastfmRub Afonso
 
Bases de-datos
Bases de-datosBases de-datos
Bases de-datossabu47
 
Introduccion a los Sistemas Digitales
Introduccion a los Sistemas DigitalesIntroduccion a los Sistemas Digitales
Introduccion a los Sistemas Digitalesgiov gmb
 
Fundamentos de Programación con Lenguaje de Programación C++
Fundamentos de Programación con Lenguaje de Programación C++Fundamentos de Programación con Lenguaje de Programación C++
Fundamentos de Programación con Lenguaje de Programación C++Andy Juan Sarango Veliz
 
El lenguaje de programación c++
El lenguaje de programación c++El lenguaje de programación c++
El lenguaje de programación c++Darkcame
 
Realidad aumentada 1a_edicion
Realidad aumentada 1a_edicionRealidad aumentada 1a_edicion
Realidad aumentada 1a_ediciondayitk295
 
Realidad aumentada 1a_edicion
Realidad aumentada 1a_edicionRealidad aumentada 1a_edicion
Realidad aumentada 1a_edicionlaura23jimenez
 
MANUAL DE LENGUAJE C
MANUAL DE LENGUAJE CMANUAL DE LENGUAJE C
MANUAL DE LENGUAJE Cclaudiocj7
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaAngel De las Heras
 
Programacion de una tienda virtual en Grails
Programacion de una tienda virtual en GrailsProgramacion de una tienda virtual en Grails
Programacion de una tienda virtual en GrailsGabriel Bermudez
 
ApuntesC++.pdf
ApuntesC++.pdfApuntesC++.pdf
ApuntesC++.pdfbilgrado01
 
Libro javacontapa
Libro javacontapaLibro javacontapa
Libro javacontapaRobert Wolf
 

Similar a Localización y decodificación de códigos de barras EAN-13 en imágenes (20)

TFM_MJVillanueva
TFM_MJVillanuevaTFM_MJVillanueva
TFM_MJVillanueva
 
Algoritmo de Reconocimiento de Objetos en Escenas Complejas para Aplicaciones...
Algoritmo de Reconocimiento de Objetos en Escenas Complejas para Aplicaciones...Algoritmo de Reconocimiento de Objetos en Escenas Complejas para Aplicaciones...
Algoritmo de Reconocimiento de Objetos en Escenas Complejas para Aplicaciones...
 
DataMining_lastfm
DataMining_lastfmDataMining_lastfm
DataMining_lastfm
 
Tesis jaime
Tesis jaimeTesis jaime
Tesis jaime
 
Msc_Thesis
Msc_ThesisMsc_Thesis
Msc_Thesis
 
Bases de-datos
Bases de-datosBases de-datos
Bases de-datos
 
Bases de-datos
Bases de-datosBases de-datos
Bases de-datos
 
Introduccion a los Sistemas Digitales
Introduccion a los Sistemas DigitalesIntroduccion a los Sistemas Digitales
Introduccion a los Sistemas Digitales
 
Fundamentos de Programación con Lenguaje de Programación C++
Fundamentos de Programación con Lenguaje de Programación C++Fundamentos de Programación con Lenguaje de Programación C++
Fundamentos de Programación con Lenguaje de Programación C++
 
El lenguaje de programación c++
El lenguaje de programación c++El lenguaje de programación c++
El lenguaje de programación c++
 
Hefesto v2.1
Hefesto v2.1Hefesto v2.1
Hefesto v2.1
 
Realidad aumentada 1a_edicion
Realidad aumentada 1a_edicionRealidad aumentada 1a_edicion
Realidad aumentada 1a_edicion
 
Realidad aumentada 1a_edicion
Realidad aumentada 1a_edicionRealidad aumentada 1a_edicion
Realidad aumentada 1a_edicion
 
MANUAL DE LENGUAJE C
MANUAL DE LENGUAJE CMANUAL DE LENGUAJE C
MANUAL DE LENGUAJE C
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuela
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuela
 
Programacion de una tienda virtual en Grails
Programacion de una tienda virtual en GrailsProgramacion de una tienda virtual en Grails
Programacion de una tienda virtual en Grails
 
Grafi3
Grafi3Grafi3
Grafi3
 
ApuntesC++.pdf
ApuntesC++.pdfApuntesC++.pdf
ApuntesC++.pdf
 
Libro javacontapa
Libro javacontapaLibro javacontapa
Libro javacontapa
 

Más de Henry Quilla

eastron-sdm230-protocol-v14 (1).pdf
eastron-sdm230-protocol-v14 (1).pdfeastron-sdm230-protocol-v14 (1).pdf
eastron-sdm230-protocol-v14 (1).pdfHenry Quilla
 
Análisis por fluidodinámica
Análisis por fluidodinámicaAnálisis por fluidodinámica
Análisis por fluidodinámicaHenry Quilla
 
Alimentos funcionales, nutraceúticos y foshu: ¿vamos hacia un nuevo concepto ...
Alimentos funcionales, nutraceúticos y foshu: ¿vamos hacia un nuevo concepto ...Alimentos funcionales, nutraceúticos y foshu: ¿vamos hacia un nuevo concepto ...
Alimentos funcionales, nutraceúticos y foshu: ¿vamos hacia un nuevo concepto ...Henry Quilla
 
El gas ideal: Modelacion en computadora
El gas ideal: Modelacion en computadoraEl gas ideal: Modelacion en computadora
El gas ideal: Modelacion en computadoraHenry Quilla
 
Evaluación del impacto de las redes agalleras en la estructura de la població...
Evaluación del impacto de las redes agalleras en la estructura de la població...Evaluación del impacto de las redes agalleras en la estructura de la població...
Evaluación del impacto de las redes agalleras en la estructura de la població...Henry Quilla
 
Fisica 3 Hugo Medina Guzmán
Fisica 3 Hugo Medina GuzmánFisica 3 Hugo Medina Guzmán
Fisica 3 Hugo Medina GuzmánHenry Quilla
 
Xxx planeamento integrado recursos energeticos
Xxx planeamento integrado recursos energeticosXxx planeamento integrado recursos energeticos
Xxx planeamento integrado recursos energeticosHenry Quilla
 
Proyecto educativo10680
Proyecto educativo10680Proyecto educativo10680
Proyecto educativo10680Henry Quilla
 

Más de Henry Quilla (8)

eastron-sdm230-protocol-v14 (1).pdf
eastron-sdm230-protocol-v14 (1).pdfeastron-sdm230-protocol-v14 (1).pdf
eastron-sdm230-protocol-v14 (1).pdf
 
Análisis por fluidodinámica
Análisis por fluidodinámicaAnálisis por fluidodinámica
Análisis por fluidodinámica
 
Alimentos funcionales, nutraceúticos y foshu: ¿vamos hacia un nuevo concepto ...
Alimentos funcionales, nutraceúticos y foshu: ¿vamos hacia un nuevo concepto ...Alimentos funcionales, nutraceúticos y foshu: ¿vamos hacia un nuevo concepto ...
Alimentos funcionales, nutraceúticos y foshu: ¿vamos hacia un nuevo concepto ...
 
El gas ideal: Modelacion en computadora
El gas ideal: Modelacion en computadoraEl gas ideal: Modelacion en computadora
El gas ideal: Modelacion en computadora
 
Evaluación del impacto de las redes agalleras en la estructura de la població...
Evaluación del impacto de las redes agalleras en la estructura de la població...Evaluación del impacto de las redes agalleras en la estructura de la població...
Evaluación del impacto de las redes agalleras en la estructura de la població...
 
Fisica 3 Hugo Medina Guzmán
Fisica 3 Hugo Medina GuzmánFisica 3 Hugo Medina Guzmán
Fisica 3 Hugo Medina Guzmán
 
Xxx planeamento integrado recursos energeticos
Xxx planeamento integrado recursos energeticosXxx planeamento integrado recursos energeticos
Xxx planeamento integrado recursos energeticos
 
Proyecto educativo10680
Proyecto educativo10680Proyecto educativo10680
Proyecto educativo10680
 

Último

30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFlor Idalia Espinoza Ortega
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
Movimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en VenezuelaMovimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en Venezuelacocuyelquemao
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscaeliseo91
 

Último (20)

Razonamiento Matemático 1. Deta del año 2020
Razonamiento Matemático 1. Deta del año 2020Razonamiento Matemático 1. Deta del año 2020
Razonamiento Matemático 1. Deta del año 2020
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamica
 
Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
Movimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en VenezuelaMovimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en Venezuela
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
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
  • 2. ii
  • 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
  • 4. iv
  • 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
  • 6. vi
  • 7. ´Indice general 1. Introducci´on 1 1.1. Motivaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2. Organizaci´on de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3. Trabajos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2. C´odigos de barras 7 2.1. Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2. Definici´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3. Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4. Ventajas e inconvenientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.5. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.6. Clases de c´odigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.7. Dispositivos de escritura y lectura de c´odigos de barras . . . . . . . . . . . . . . . 11 3. Detecci´on de bordes 15 3.1. T´ecnicas de localizaci´on de c´odigos de barras . . . . . . . . . . . . . . . . . . . . 15 3.2. Detector de bordes de Canny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4. Detecci´on de regiones candidatas 19 4.1. Idea general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5. Etiquetado y filtrado de regiones 23 5.1. Etiquetado de componentes conexas . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 6. Estimaci´on de la orientaci´on y rectificaci´on 31 6.1. Idea general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 7. Decodificaci´on 33 7.1. Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 7.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 7.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 7.4. An´alisis de robustez . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 vii
  • 8. ´Indice general 8. Sistema experimental 45 8.1. Informaci´on general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 8.2. Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 8.3. Valores por defecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 8.4. Tiempo de ejecuci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 8.5. Duraci´on del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 9. Conclusiones 49 A. Detector de bordes de Canny 51 B. Algoritmo cl´asico de etiquetado de componentes conexas 53 C. M´etodo de Otsu 55 D. Caracter´ısticas del c´odigo EAN-13 57 viii
  • 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
  • 13. 1.3. Trabajos relacionados Figura 1.1.: Diagrama global del proceso implementado 5
  • 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
  • 26. 3. Detecci´on de bordes 18
  • 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
  • 38. 5. Etiquetado y filtrado de regiones 30
  • 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
  • 46. por 7 m´odulos que forman un d´ıgito. 34
  • 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 ·
  • 48. , si
  • 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