Documentos de Académico
Documentos de Profesional
Documentos de Cultura
E80 Vicente Castello
E80 Vicente Castello
atica
Proyectos Inform
aticos (E80)
Localizaci
on y decodificaci
on de c
odigos de barras
en im
agenes digitales
y dirigido por:
Vicente Javier Traver Roig
ii
Resumen
Esta memoria describe un metodo para la localizacion y posterior decodificacion de codigos de
barras presentes en imagenes digitales. El codigo de barras puede aparecer en cualquier posici
on
y orientacion dentro de la imagen, con lo cual debemos ser capaces de detectarlo y rectificar su
orientacion, para as poder decodificarlo de forma correcta.
Una tecnica que se presenta, debido a que los codigos de barras poseen unas caractersticas
muy definidas, como un metodo adecuado para la localizacion de un codigo de barras dentro
de una imagen es la deteccion de bordes. Ademas, como los puntos de borde pertenecientes al
codigo presentaran una orientacion similar, el objetivo sera de alguna forma homogeneizar esta
zona donde se encuentra el codigo, extendiendo el valor de la orientacion obtenido de los puntos
de borde a los que no lo son. A continuacion, debido a este proceso de expansion de la orientaci
on
conseguiremos un conjunto de regiones candidatas, de las cuales debemos ser capaces de poder
elegir una de ellas como susceptible de contener el codigo. A partir de esta region debemos
calcular la orientacion que presentan los puntos de borde de la misma, para poder rectificar
as la imagen. Una vez conseguida una subimagen centrada en el codigo intentamos decodificar
este con exito, basandonos en lo que conocemos del tipo de codificacion en concreto.
Por u
ltimo comentar que durante toda la memoria se presentan los resultados que se van
consiguiendo para cada una de las fases en las que se divide el metodo, ademas de una serie de
experimentos para reforzar la comprension del mismo o recalcar ciertos aspectos que se creen de
interes.
iii
iv
Agradecimientos
En unas pocas palabras quisiera agradecer a una serie de personas la ayuda que me han presta
do en la realizacion de este proyecto. Estas
son Ma Angeles Lopez (por su implementacion del
detector de bordes de Canny), Ra
ul Montoliu (por su codigo para el etiquetado de componentes
conexas) y Vctor Jimenez (por sus ideas acerca de posibles estrategias a seguir para la decodificacion), sin los cuales el esfuerzo realizado hubiese sido enormemente mayor. Por u
ltimo y no
por ello menos importante, agradecer en gran medida a mi director, Javier Traver, el tiempo
que me ha dedicado y la paciencia que ha tenido conmigo, ya que sin su colaboracion no hubiese
podido afrontar este proyecto. Simplemente, muchas gracias.
vi
Indice general
1. Introducci
on
1.1. Motivacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Organizacion de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Trabajos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. C
odigos de barras
2.1. Introduccion . . . . . . . .
2.2. Definicion . . . . . . . . .
2.3. Historia . . . . . . . . . .
2.4. Ventajas e inconvenientes
2.5. Aplicaciones . . . . . . . .
2.6. Clases de codigos . . . . .
2.7. Dispositivos de escritura y
1
1
1
2
.
.
.
.
.
.
.
7
7
7
8
10
10
10
11
3. Detecci
on de bordes
3.1. Tecnicas de localizacion de codigos de barras . . . . . . . . . . . . . . . . . . . .
3.2. Detector de bordes de Canny . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
15
16
16
4. Detecci
on de regiones
4.1. Idea general . . .
4.2. Procedimiento . .
4.3. Ejemplo . . . . .
candidatas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
19
19
21
23
23
23
25
6. Estimaci
on de la orientaci
on y rectificaci
on
6.1. Idea general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
31
31
7. Decodificaci
on
7.1. Introduccion . . . . .
7.2. Procedimiento . . . .
7.3. Resultados . . . . . .
7.4. Analisis de robustez
33
33
34
37
39
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
lectura de
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
codigos de barras
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
vii
Indice general
8. Sistema experimental
8.1. Informacion general .
8.2. Restricciones . . . . .
8.3. Valores por defecto . .
8.4. Tiempo de ejecucion .
8.5. Duracion del proyecto
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
45
45
46
46
47
47
9. Conclusiones
49
51
B. Algoritmo cl
asico de etiquetado de componentes conexas
53
C. M
etodo de Otsu
55
D. Caractersticas del c
odigo EAN-13
57
viii
1. Introducci
on
1.1.
Motivaci
on
Hoy en da los codigos de barras estan muy presentes en nuestro quehacer diario, ya que
nos aparecen en los supermercados, tiendas de toda clase, en los libros de las bibliotecas, etc.,
debido a que permiten obtener una especificacion u
nica de un producto o material en concreto.
Sin embargo no debemos olvidar que los codigos de barras necesitan de instrumentos que puedan
leerlos, al igual que de un software que permita captar y procesar la informacion.
Ademas en entornos controlados, las camaras pueden ser usadas para la identificacion de
objetos, es decir, si los objetos de nuestro interes presentan etiquetas de codigos de barras en
una superficie visible, entonces un simple sistema de camaras portatiles puede reconocer el c
odigo
de barras en el entorno y proporcionar al usuario informacion sobre el objeto etiquetado [26].
Por todo ello este proyecto intenta ofrecer un metodo de localizacion de un codigo de barras
dentro de una imagen, para su posterior decodificacion. Se ha utilizado una serie de procedimientos que nos han permitido conseguir nuestro objetivo y que se explican con detalle posteriores
captulos de esta memoria.
Como es obvio, hay una gran variedad de codigos de barras, pero en este proyecto nos hemos
centrado en una clase en concreto, el codigo EAN (European Article Number ) y mas concretamente en su version EAN-13 [20], que aunque dicho de esta forma no nos suene mucho, es uno de
los codigos mas presentes en nuestras vidas, ya que se utiliza en una gran cantidad de productos
de todo tipo, desde cualquiera de los artculos presentes en un supermercado hasta toda clase
de libros. Es en este u
ltimo uso donde nos centraremos, ya que los libros se codifican basandose
en un sistema internacional de numeracion, el ISBN (International Standard Book Number ) [9],
el cual utiliza para su codificacion el codigo EAN-13.
Si sabemos que los dgitos que encontramos normalmente impresos junto a las barras y espacios
de un codigo de barras suelen ser aquellos codificados dentro de este, por que no leer estos dgitos
en lugar de decodificar estas barras y espacios. La razon principal es que, incluso con los modernos
sistemas de reconocimiento optico de caracteres (OCR, Optical Character Recognition), no es
posible identificar las cifras de un codigo numerico con la suficiente rapidez, facilidad y fiabilidad
que se requiere y por tanto no queda otra solucion mas que representar el codigo mediante
smbolos facilmente legibles por el ordenador, empleando sus sistemas binarios.
Otra pregunta que puede surgir es por que investigar en este tema si los sistemas existentes
ya funcionan correctamente. Una de las razones es la posibilidad de que cualquier persona con
una camara, como por ejemplo una simple webcam, pudiese decodificar codigos de barras en su
propia casa si lo precisase, ya que es mas facil que un particular pueda adquirir una camara de
este tipo que un lector laser por ejemplo, mucho mas caro. Incluso podra ser utilizado por el
peque
no y mediano comercio, resultando una opcion mucha mas economica.
1.2.
Organizaci
on de la memoria
La memoria esta dividida en una serie de captulos donde cada uno de ellos presenta la
siguiente informacion:
1. Introduccion
El captulo 2, ((C
odigos de barras)), se dedica a aportar una serie de datos relacionados con
los codigos de barras: definicion, ventajas e inconvenientes, aplicaciones, lectores, etc., a
modo de informacion introductoria al mundo de los codigos de barras.
En el captulo 3, ((Detecci
on de bordes)), se explica la idea fundamental que se sigue para
la localizacion del codigo de barras y es que debido a las caractersticas que este posee,
la deteccion de bordes se presenta como una tecnica mas que adecuada para su posible
deteccion.
En el captulo 4, ((Detecci
on de regiones candidatas)), nos centramos en la idea que a la hora
de detectar el codigo de barras los pixels que son puntos de borde y forman parte del codigo
van a tener una orientacion similar. Con esta caracterstica lo que se pretende es expandir
esta orientacion a los vecinos de cada uno de los puntos de borde y as, homogeneizar toda
la zona donde se encuentra el codigo con una misma orientacion.
En el captulo 5, ((Etiquetado y filtrado de regiones)), explicamos como tras el paso anterior
mediante un proceso de agrupamiento, extendiendo la orientacion y gracias a una posterior
binarizacion, conseguimos obtener una serie de regiones susceptibles de ser la que se busca.
Utilizando algoritmos de etiquetado de componentes conexas y realizando a continuacion
un filtrado, podemos quedarnos con la region que ((supuestamente)) contiene el codigo.
En el captulo 6, ((Estimaci
on de la orientaci
on y rectificaci
on)), se indica como, al poder
presentar el codigo cualquier angulo dentro de la imagen, se debe calcular la orientacion
que presentan los puntos de borde que aparecen en esta region susceptible de contener
al codigo y que hemos obtenido en el paso anterior. Una vez conocida esta orientacion
simplemente debemos rectificar la imagen y conseguir una imagen centrada en el codigo,
para su posterior binarizacion.
En el captulo 7, ((Decodificaci
on)), se explica como basandonos en la imagen binarizada del
codigo de barras obtenida en el paso anterior, y empleando el conocimiento que tenemos
del tipo de codigo a interpretar (EAN-13 ), se obtiene la consiguiente decodificacion del
mismo.
El captulo 8, llamado ((Sistema experimental)), presenta informacion relativa al proyecto
y que creemos que debe ser mencionada, desde el software utilizado para la realizacion del
proyecto hasta el tiempo en que tarda en ejecutarse la tecnica implementada.
En el u
ltimo captulo simplemente mencionamos las conclusiones a las que llegamos despues
de la realizacion de este proyecto.
De forma grafica el proceso que se ha seguido para la localizacion y posterior decodificacion
de un codigo de barras se puede observar en la Figura 1.1. Cada una de las fases que componen
el proceso en general se explican con mas detalle, y como hemos comentado anteriormente, en
los correspondientes captulos que aparecen en esta memoria.
1.3.
Trabajos relacionados
1. Introduccion
Relacionado con la problematica de la teora de se
nales podemos encontrar trabajos que tratan
de interpretar el codigo de barras a partir del tratamiento o reconocimiento de los picos presentes
en la se
nal u onda obtenida del mismo [18]. Se utilizan modelos estadsticos de reconocimiento
para clasificar estos picos como los caracteres presentes en el codigo. Mediante esta tecnica se
consigue mejores resultados ante codigos emborronados, ya que el proceso es mas resistente ante
tales contratiempos.
La ciencia no solo ha investigado en la mejora de tecnicas de decodificacion de codigos de
barras en cuanto a procesamiento de imagenes, sino que tambien se ha preocupado por mejorar
las prestaciones de los escaneres lectores de codigos. Un ejemplo es una investigacion realizada
con el objetivo de ofrecer mejoras en el funcionamiento de los escaneres a traves de un muestreo
selectivo y el uso de filtros de realzado para mejorar la deteccion de bordes, que detectan las
fronteras entre areas oscuras y claras (barras y espacios) [27]. Otros estudios se centran mas
en obtener tecnicas destinadas a la mejora de la decodificacion de codigos de barras borrosos o
emborronados [30].
1. Introduccion
2. C
odigos de barras
2.1.
Introducci
on
2.2.
Definici
on
Los codigos de barras son un sistema de codificacion creado con el objetivo de identificar
objetos y facilitar la obtencion de informacion y de esta forma eliminar la posibilidad de error
en la captura. La utilizacion de este sistema de codificacion es tan exitosa debido a la fiabilidad
que presenta en la recoleccion automatica de datos, reduciendo los posibles errores humanos que
se pueden producir en el caso de una introduccion erronea de informacion.
Podemos definir un codigo de barras como un patron formado por barras y espacios paralelos que codifica informacion mediante las anchuras relativas de estos elementos. Su estructura
basica consiste de un patron de inicio, uno o mas caracteres de datos, opcionalmente unos o dos
caracteres de verificacion y un patron de termino.
Ademas implementar un sistema de captura de datos por codigos de barras es poco costoso
y el conocimiento necesario para utilizar el sistema es mnimo, por lo que no debe presentarse
como un problema el aprendizaje del personal que manipule el mismo.
El desarrollo de este sistema de codificacion nos permite disponer de tres categoras de codigos
de barras, dependiendo de la tecnologa que es necesaria para realizar una lectura de los mismos:
lineales, multifilas y bidimensionales. Una gran parte de la literatura existente llama tambien
codigos bidimensionales a los considerados multifilas. Por tanto se puede realizar una divisi
on
entre codigos de una dimension (lineales) donde solo importa el ancho de las barras y el espacio
entre ellas y codigos de dos dimensiones (multifilas y bidimensionales) donde importa la altura
y anchura del smbolo.
Nomenclatura b
asica
La visualizacion fsica de los codigos de barras suele presentarse mediante barras verticales:
estas representan caracteres de informacion mediante barras negras y espacios, donde el ancho
de las barras y espacios puede ser variable. Por tanto, cada dgito o caracter representado en un
codigo esta formado por barras y espacios que tienen una anchura total de una cierta cantidad
de unidades o modulos, dependiendo del codigo, de esta forma cada barra y cada espacio puede
tener una anchura de diversas unidades o modulos. De forma resumida se puede expresar de la
siguiente manera:
2. Codigos de barras
M
odulo: es la unidad mnima o basica de un codigo. Las barras y espacios estan formados
por un conjunto de modulos.
Barra: el elemento ((oscuro)) dentro del codigo. Se hace corresponder con el valor binario 1.
Espacio: el elemento ((claro)) dentro del codigo. Se hace corresponder con el valor binario 0.
Car
acter: formado por barras y espacios. Normalmente se corresponde con un caracter
alfanumerico.
Todo esto se observa mejor graficamente en la Figura 2.1.
Figura 2.1.: Cada caracter o dgito esta formado por un conjunto de modulos
Caractersticas
Un smbolo de codigo de barras presenta una serie de caractersticas entre las cuales cabe
destacar las siguientes:
Densidad: es la anchura del elemento, ya sea barra o espacio, mas estrecho dentro del
smbolo de codigo de barras. Un codigo de barras no se mide por su longitud fsica sino
por su densidad, que viene dada en milesimas de pulgada.
Raz
on ancho-estrecho (Wide to Narrow Ratio (WNR)): Es la relacion existente entre el
grosor del elemento mas estrecho con respecto al mas ancho. Normalmente es de 1:3 o 1:2.
Zona muda (Quiet Zone): Es el area blanca que aparece al principio y al final de un
smbolo de codigo de barras y que es necesaria para una acertada lectura del smbolo.
2.3.
Historia
2.3. Historia
que posteriormente se introduciran en una serie de lectores que activaran un sistema autom
atico
que les proporcionara aquello demandado.
Sin embargo la idea de codigo de barras conforme lo entendemos hoy en da nacio en 1948. En
ese a
no Bernard Silver, un estudiante graduado del Instituto Drexel de Tecnologa de Filadelfia,
escucho por casualidad como el presidente de una cadena de supermercados le peda a uno de los
decanos que emprendiese una investigacion para desarrollar un sistema que permitiese la lectura
automatica de informacion de los productos durante el cobro de los mismos.
Silver conto lo que haba escuchado a su amigo Normand Joseph Woodland, que ejerca como
profesor en esa misma universidad. La idea le fascino y empezaron a investigar en el tema.
Despues de un a
no de gran esfuerzo Woodland y Silver registraron en 1949 la primera patente
para un codigo de barras. El sistema que tena forma circular se denomino ((bulls eye code)) y
consista en una serie de crculos concentricos con el objetivo de que pudiera leerse en cualquier
direccion.
Tres a
nos mas tarde, en 1952, construyeron el primer lector de codigos de barras, pero
lamentablemente el sistema no consiguio ser demasiado efectivo, al igual que resultaba caro,
por lo que no llego a comercializarse.
Los codigos de barras se emplearon por primera vez a principios de la decada de los 60 para
identificar material rodante ferroviario y de ah en adelante ha venido avanzando su aplicaci
on
y desarrollo. A finales de los a
nos 60 y comienzos de los 70 aparecieron las primeras aplicaciones
industriales, pero solo para manejo de informacion.
Durante esos a
nos la Asociacion Nacional de Cadenas Alimenticias (NAFC, de las siglas en
ingles) se dio cuenta que deban solucionar de una vez por todas los problemas que se presentaban
a la hora del cobro de sus productos. Por ello, en 1967, la cadena de supermercados Kroger instala
el primer sistema de venta basado en codigos de barras en su sucursal de Cincinnati (Ohio, EE.
UU.). El experimento presento una serie de problemas que sirvieron para la mejora del sistema
y de esta forma su posterior adaptacion a todos los productores y comerciantes del sector.
Durante los a
nos 70 y primeros de los 80 se produjo la evolucion de los codigos lineales. Su
utilizacion se difunde a varios sectores utilizandose en muy distintas tareas, desde el control de
documentos en bibliotecas, hasta la identificacion y verificacion automatica en los bancos de
sangre.
En el a
no 1973 se anuncia la aparicion del codigo UPC (Universal Product Code) que se
convertira en el estandar de identificacion de productos en los Estados Unidos. Como anecdota,
comentar que el primer producto escaneado en un punto de pago utilizando este codigo fue un
paquete de chicles, el cual se encuentra hoy en da expuesto en el Museo Nacional de Historia
Americana. En 1976, Europa desarrolla su propia version de UPC, el codigo EAN (European
Article Number ), del cual se desarrollaran dos versiones: el EAN-13 y el EAN-8.
En 1974, se inventa el codigo 39, el primero de tipo alfanumerico y trece a
nos mas tarde, en
1987, se desarrolla el primer codigo bidimensional, el codigo 49, primer codigo multifilas que
aparecio en el mercado.
Poco a poco, durante los a
nos 80 y 90, la tecnologa de identificacion y manejo de datos a
traves de codigos de barras, logra convertirse en un estandar al ser aplicada, cada vez con m
as
frecuencia, tanto en operaciones de distribucion y manejo de materiales, como en organizaciones
de manufactura industrial, al igual que en todo tipo de nuevos ambitos. Durante los a
nos 90
fueron apareciendo nuevos tipos de codigos y se desarrollaron sobretodo los codigos de alta
densidad o bidimensionales.
2. Codigos de barras
2.4.
Ventajas e inconvenientes
La tecnologa de codigo de barras presenta una serie de ventajas sobre otros procedimientos
de coleccion de datos, estas son:
Se imprime con costes bajos.
Su precision en la informacion, evitando o reduciendo de esta forma los errores.
Su eficiencia debido a la rapidez en la lectura, ahorrando tiempo y dinero.
La relativa flexibilidad y facilidad de conexion e instalacion de los equipos de lectura e
impresion de codigo de barras.
Por contrapartida, no todo son ventajas, tambien presentan inconvenientes, como los que a
continuacion mencionamos:
En general los codigos de barra no son facilmente descifrables por las personas, necesitando
pues lectores que nos decodifiquen la informacion.
La facilidad con la cual es posible dificultar la legibilidad de ciertos codigos, es decir,
simplemente con agregar una barra al inicio o final del smbolo o trazar una lnea paralela a
las barras en cualquier lugar dentro del codigo, complica en gran manera su decodificacion.
2.5.
Aplicaciones
Las aplicaciones del codigo de barras cubren practicamente cualquier tipo de actividad humana, lo podemos encontrar tanto en la industria, en el comercio, en instituciones gubernamentales, y en un sinfin de areas, ya que cualquier sector puede beneficiarse del uso de este
sistema de codificacion. Ademas, la tecnologa que conlleva ofrece una de las mejores maneras
de automatizar el manejo de informacion, ofreciendo un sistema de coleccion de datos mediante
identificacion automatica bastante rapido y seguro.
Cualquier sector donde se necesita un sistema para capturar informacion y as mejorar la
productividad, puede optar por utilizar codigos de barras. Algunas de las aplicaciones en las
que el uso del codigo de barras se muestra como una eleccion acertada son: control de material
en proceso, control de inventario, contro de tiempo y asistencia, puntos de venta, control de
calidad, bibliotecas, bancos de sangre, control de acceso, identificacion de carga, etc. Pero estas
son solo una parte de la gran variedad de aplicaciones en las que se pueden utilizar codigos de
barras como procedimiento de codificacion de datos.
En todas estas actividades el codigo de barras se presenta como una de las mejores tecnologas
para implementar un sistema de captacion de datos mediante identificacion automatica, presentando una serie de beneficios desde la mejora de la calidad y servicio al cliente hasta una mayor
competitividad.
2.6.
Clases de c
odigos
La simbologa de un codigo de barras nos define los detalles tecnicos de cada tipo particular
de codigo de barras, la anchura de las barras, la forma en que se codifica la informacion en las
barras y espacios del smbolo de codigo de barras, etc.
Como hemos comentado anteriormente podemos distinguir entre codigos de una dimension y
c
odigos de dos dimensiones. En los primeros, al efectuar la lectura, se tiene en cuenta el ancho
10
(a)
(b)
2.7.
Para poder imprimir los codigos de barras se nos presentan en el mercado distintos tipos de
impresoras que pueden llevar a cabo tal funcion. El empleo de una u otra dependera de lo que
11
2. Codigos de barras
el usuario requiera para cada caso en particular.
Los codigos de barras se pueden imprimir en impresoras l
aser o de chorro de tinta con las cuales
se puede conseguir codigos de barras de alta densidad y calidad, pero, por el contrario, tambien
presentan problemas al imprimir en cantidad, al igual que las etiquetas donde se imprimen los
c
odigos deben tener un adhesivo especial que tolere las altas temperaturas generadas por la
impresora. Ademas, la imagen en el codigo de barras se puede da
nar facilmente, a menos que se
utilicen recubrimientos especiales en las etiquetas o bien laminarlas una vez que se ha impreso
el codigo.
Otra posibilidad es la impresi
on termica directa, metodo mas rapido y simple de gran aceptacion
en la industria y el comercio. El coste de las etiquetas termicas es mayor comparado con el de
las utilizadas para impresoras laser, pero sin embargo el coste del proceso global es menor. Por
tanto este tipo de impresion presenta una serie de ventajas como son su velocidad y calidad de
impresion, donde la imagen es duradera, al igual que es excelente para el trabajo por lotes. Por
el contrario tambien tiene inconvenientes como que requiere etiquetas de material especial y de
un tama
no limitado y que la imagen puede deteriorarse en caso de exponerse a la luz solar o a
altas temperaturas.
Para obtener unos mejores resultados que en las anteriores impresoras es necesario usar una
impresora especfica para etiquetas, una impresora de transferencia termica, capaz de imprimir, con gran velocidad y calidad, rollos de etiquetas autoadhesivas. Estos equipos suelen ser
los mejores para aplicaciones de mediano y alto volumen, ya que re
unen las ventajas de las
impresoras laser y las termicas directas.
En la figura 2.3 se muestra un ejemplo de cada uno de los diferentes tipos de impresoras que
hemos comentado en este apartado.
(a)
(b)
(c)
Figura 2.3.: Impresoras de codigos de barras: (a) laser; (b) termica directa; (c) de transferencia
termica
Para poder obtener la informacion presente en un codigo de barras necesitamos de dispositivos
que decodifiquen la informacion presente en el mismo, por ello los lectores de codigos de barras
nos permiten obtener esta informacion, de forma que pueda almacenarse en una computadora
para poder ser procesada.
Existen muchas opciones de conexion de lectores de codigos de barras a una computadora,
aunque existen dos tipos basicos: aquellos lectores que almacenan la informacion en memoria
para despues transferirla a una computadora y los lectores de radiofrecuencia que transmiten la
informacion a la computadora en tiempo real. En los primeros si la computadora central falla,
la recoleccion de datos puede continuar, al igual que si falla una lector en particular, este puede
ser reemplazado. Por su parte el segundo sistema presenta una verificacion de datos inmediata y
mas sofisticada, con una interaccion con el usuario que consigue una mayor reduccion de errores.
El funcionamiento de los lectores de codigos de barras se podra explicar de la siguiente manera:
el lector decodifica el codigo de barras a traves de la digitalizacion proveniente de una fuente
de luz que cruza el codigo y mide la intensidad de la luz reflejada por los espacios blancos, ya
12
13
2. Codigos de barras
mismo. Los productos a leer se deben poder manipular y pasar a mano frente al lector.
Son recomendables cuando se requiere una alta tasa de lectura.
Las ventajas que se obtienen con este tipo de lector son las mismas ventajas que con el
laser de pistola, ademas de presentar un First Read Rate (FRR) de practicamente el 100 %.
En contrapartida es un lector caro y el operador que lo utilice requiere que los artculos
etiquetados no sean muy voluminosos pues el escaner se monta en posicion fija.
En la Figura 2.4 se muestra un lector de cada uno de los diferentes tipos que hemos mencionado
anteriormente.
(a)
(b)
(c)
(d)
Figura 2.4.: Lectores de codigos de barras: (a) tipo pluma o lapiz; (b) lector CCD; (c) laser tipo
pistola; (d) laser omnidireccional
14
3. Detecci
on de bordes
3.1.
T
ecnicas de localizaci
on de c
odigos de barras
Existen distintas tecnicas para identificar donde se encuentra un codigo de barras dentro de
una imagen [28]:
Algoritmo Morfol
ogico Matem
atico: Metodo de localizacion basado en operaciones
morfologicas basicas como: dilatacion, erosion, cierre y un conjunto de operaciones morfologicas geodesicas. El algoritmo se basa en el hecho que los codigos de barras poseen
((valles estrechos)) (espacios estrechos existentes entre las barras), un alto contraste y lneas
paralelas. Mediante una segmentacion, estos valles se juntan para formar una region que
corresponde al codigo de barras, descartando peque
nas areas que no pertenecen al codigo,
para a continuacion aplicar filtros morfologicos en diferentes orientaciones con el fin de
extraer la orientacion del codigo de barras.
An
alisis de texturas mediante filtros de Gabor: La idea fundamental sobre la que
se basa este metodo es asumir que un codigo de barras es una region con una textura
homogenea. Ademas en una imagen donde se encuentra presente la textura, el nivel de
gris de los pixels individuales no proporcionan suficiente informacion para llevar a cabo
una segmentacion satisfactoria de la imagen, por ello se hace necesario incluir las relaciones
espaciales existentes entre los niveles de gris de los pixels dentro de una vecindad local.
Detecci
on de texto en las im
agenes: Otra idea para la localizacion de codigos de barras
es utilizar tecnicas provenientes de los algoritmos de b
usqueda de texto, sin embargo este
tipo de metodos presentan como inconveniente que suelen consumir mucho tiempo.
Densidad de Gradiente: Otro metodo de localizacion de codigos de barras es el basado
en la extraccion de areas que poseen una alta densidad de gradientes mono-orientados.
La localizacion de codigos de barras en una imagen con baja resolucion es el principal
proposito de este algoritmo, que utiliza para tal objetivo el calculo de gradientes y filtros
morfologicos.
En nuestro metodo, la idea en la que nos basamos para la localizacion del codigo de barras,
es muy similar a la presente en la u
ltima tecnica mencionada. Aunque debemos recalcar que
el conocimiento sobre estas tecnicas no se produjo hasta bastante mas tarde del comienzo de
este proyecto. Simplemente, el descubrir que existan y conocer en que se basan, sobretodo esta
u
ltima, nos llevo a pensar que no ibamos mal encaminados en cuanto a la manera en que se
detecta y localiza el codigo de barras en nuestro proyecto.
Por tanto, el objetivo final que perseguimos es conseguir la decodificacion del codigo de barras,
para lo cual un paso esencial es la localizacion dentro de la imagen del codigo en cuesti
on.
La idea fundamental que se ha seguido para conseguir esta tarea ha sido que los codigos de
barras presentan unas caractersticas que permiten su localizacion basandonos en el metodo de
la deteccion de bordes, ya que cada uno de los puntos de borde que conforman el codigo de
barras ((supuestamente)) presentaran una orientacion similar y por tanto, seran susceptibles de
ser clasificados como puntos de la imagen con una alta probabilidad de contener el codigo de
barras pretendido.
15
3. Deteccion de bordes
3.2.
3.3.
Ejemplo
Previamente a la utilizacion del algoritmo de Canny para la deteccion de bordes se probo con
otros operadores como los de Sobel, pero el resultado que se obtena era bastante peor que
con el primero. Al aplicar el filtro de Sobel, para conseguir el gradiente y posteriormente su
magnitud y orientacion, el resultado que se obtena se vea afectado por el ruido que presentaba
la imagen. Por este motivo se penso en aplicar previamente un filtro media o mediana para
suavizar la imagen y as obtener mejores resultados, pero la imagen tenda a emborronarse
en vez de suavizarse. Otra opcion que se hubiese podido aplicar es la utilizacion de un filtro
Gaussiano previamente al filtro de Sobel, sin embargo esta posibilidad no se probo, ya que
directamente enfocamos nuestra atencion hacia el detector de bordes de Canny.
16
3.3. Ejemplo
Un ejemplo de los resultados que se obtienen al aplicar el algoritmo de Canny se puede observar
en la Figura 3.1:
(a)
(b)
(c)
(d)
Figura 3.1.: Resultado de aplicar el detector de bordes de Canny: (a) imagen original; (b) orientacion; (c) supresion no maxima; (d) histeresis de umbral
17
3. Deteccion de bordes
18
4. Detecci
on de regiones candidatas
4.1.
Idea general
Una idea que manejamos a la hora de detectar el codigo de barras dentro de la imagen es que
((supuestamente)) los pixels que forman parte del codigo van a tener una orientacion similar o
muy parecida, por ello se pretende extender la orientacion de los puntos de borde de la zona
donde se encuentra el codigo a los puntos de esta que no lo son, creando as una region de
orientacion similar que podra seleccionarse como region que contiene el codigo. Los puntos de
borde representan la separacion entre los espacios y las barras del codigo, por este motivo se
pretende extender la orientacion de estos puntos a aquellos puntos que no son borde y en los
cuales no tenemos nada. De esta forma se consigue una zona amplia con orientacion similar
donde se encuentra el codigo de barras.
Con este fin, una vez hemos conseguido el valor de la orientacion del gradiente de intensidad
para cada uno de los pixels de la imagen, operacion realizada en el paso anterior, se prosigue el
proceso realizando un analisis multiresolucion de la imagen. Con esta operacion vamos a obtener
una piramide de imagenes donde cada imagen que precede a otra siempre sera de mayor tama
no,
es decir, se van consiguiendo imagenes de menor tama
no. Pero esta operacion no solo conlleva
una reduccion del tama
no de la imagen progresivamente, sino que se pretende, como hemos
comentado, conseguir extender la orientacion de manera que podamos seleccionar una regi
on de
la imagen como posible zona donde se encuentra el codigo de barras por poseer, localmente, un
valor de orientacion com
un.
4.2.
Procedimiento
I(i + 1, j)
I(i + 1, j + 1)
A partir de estos pixels se toman aquellos que son bordes y se realiza una media.
I =
I(i, j)
(i,j)N
19
20
4.3. Ejemplo
Sin embargo, despues de realizar esta operacion, es decir, subir y bajar en la piramide de
imagenes, la zona donde se encontraba el codigo no presentaba esa homogeneidad que se pretenda y todava exista demasiada variacion dentro de la zona en cuestion.
Por tanto se penso que para este proceso se podra coger una division mayor y en vez de
un conjunto de 2 2 pixels de los que pasamos a uno, realizarlo de 3 3 o superior, pero los
resultados tendan a ser peores, es decir, cuanto mas grande es la vecindad que cogemos para
reducir, los resultados empeoran, de forma que la homogeneizacion, en cuanto al valor de la
orientacion de la zona donde se encuentra el codigo, es peor.
Esto puede ser debido a que al coger mas puntos para realizar la media, en la zona proxima al
codigo estamos cogiendo un n
umero mayor de pixels que son puntos de borde y que no pertenecen
al codigo y cuyo valor afecta de manera negativa a la hora de calcular la orientacion. De alguna
manera estamos provocando el proceso contrario al pretendido, ya que el valor de la orientaci
on
de los puntos de borde de la frontera exterior al codigo y que no pertenecen al codigo de barras,
dominan a los puntos de borde de dentro del codigo, provocando que su orientacion se extienda
hacia dentro del codigo y reduciendo as la region donde se encuentra este.
Otra opcion con la que los resultados que se obtuvieran podran ser mejores, era la posibilidad
de utilizar la mediana y no la media, por su mayor robustez estadstica. Al cambiar la media por
esta operacion empezamos a conseguir lo que se pretenda, debido, seguramente, a que la media
se poda ver afectada, a la hora de realizarse la operacion, por un valor muy alto en cuanto al
resto de valores o viceversa.
4.3.
Ejemplo
Por tanto con este nuevo paso los resultados que se consiguieron eran los deseados. En la
Figura 4.1 podemos observar un ejemplo de las imagenes que se obtienen en este nuevo proceso,
tanto cuando subimos en la piramide, como cuando bajamos.
21
(a)
(b)
Figura 4.1.: Deteccion de regiones candidatas: (a) resultado del proceso cuando subimos; (b)
resultado del proceso cuando bajamos
22
Una vez realizado el paso anterior, debamos pensar una forma de poder discriminar el conjunto
de pixels que no nos proporcionan informacion relevante y quedarnos solo con aquellos que nos
interesan por contener la region de la imagen donde supuestamente se encuentra el codigo que
se pretende detectar.
En busca de este objetivo se penso en utilizar algoritmos de etiquetado de componentes
conexas, cuya idea basicamente consiste en agrupar pixels de una misma region dentro de la
imagen, para lo cual les asigna la misma etiqueta a cada uno de ellos. Simplemente se presentaba
un problema y es que la imagen a partir de la cual se aplican estos algoritmos debe ser binaria.
Por ello debamos binarizar, de alguna forma, el resultado obtenido en el proceso anterior, para
poder despues aplicar el algoritmo de componentes conexas.
El concepto de componentes conexas es el siguiente: todos los pixels que tienen un mismo
valor binario 1 y estan conectados entre s (usando 4-conectividad u 8-conectividad) por un
camino o conjunto de pixels todos con ese mismo valor binario se les asigna una misma etiqueta
identificativa, que debe ser u
nica de la region a la cual pertenecen los pixels y constituye su
identificador [24].
5.2.
Procedimiento
Con el fin de obtener la binarizacion deseada se penso en la siguiente idea: cuando ((subimos)) en
la piramide, como comentamos en el punto anterior, estamos intentando que la zona de la imagen
donde se encuentra el codigo de barras se homogeinice, en cuanto al valor de la orientaci
on, y
as, posteriormente, poder elegir todos estos pixels, con valor similar, como posible zona donde
se encuentra un codigo de barras. Sin embargo, ahora cuando ((bajamos)), en lugar de extender
la orientacion a los distintos pixels seg
un la division implementada, podemos aprovechar para
binarizar y realizar a continuacion su correspondiente expansion.
Por tanto una vez hemos llegado al u
ltimo nivel (el mas alto de la piramide) nos disponemos
a binarizar dicha imagen siguiendo el siguiente criterio: si la mitad de los pixels de la vecindad
elegida para la division son parecidos o similares entre s, es decir, no distan mucho en cuanto al
valor de la orientacion, seg
un un umbral predeterminado, entonces todos los pixels de la vecindad
tendran el valor binario ((1)), si no es as seran ((0)), al igual que si mas de la mitad de los pixels son
puntos etiquetados como ((no-bordes)), tambien toman el valor ((0)). Una vez tenemos la imagen
binarizada, simplemente se trata a continuacion de extender esta binarizacion hasta el nivel
inicial, el cual se corresponde a una imagen de tama
no igual al de la imagen original. El proceso
de binarizacion se puede observar en el Algoritmo 3 y el proceso de extender la orientaci
on es
similar al que aparece en el Algoritmo 2. En el Algoritmo 3 aparece la funcion RelPixels() que
simplemente se encarga de ver la relacion existente entre los pixels de la vecindad elegida y,
seg
un el umbral determinado, devolver una cantidad que nos indica el n
umero de pixels que son
similares entre s.
Se probo un poco con todas las posibles variables que nos dan juego a la hora de realizar este
proceso, para ver cuales son las condiciones con las cuales se obtienen los mejores resultados.
23
24
5.3. Resultados
Figura 5.1.: Imagen original con la mascara correspondiente a las regiones candidatas
(a) m = 2, L = L
(b) m = 3, L = L 2
(c) m = 5, L = L 1
5.3.
Resultados
25
26
5.3. Resultados
(a)
(b)
(c)
Figura 5.5.: Resultado del proceso de localizacion ante un codigo de barras: (a,b) no da
nado; (c)
al que se le ha dibujado una barra al principio y otra al final
(a)
(b)
(c)
trazo mas intenso que en la Figura 5.6, s que afectan en mayor medida al proceso, provocando
que la region que contiene el codigo no sea todo lo exacta que se precisa y dificultando su posterior
decodificacion. En la imagen (c) se han complicado todava mas las cosas, incluyendo adem
as de
las rayas un elemento metalico (((clip))) encima del codigo para comprobar as el funcionamiento
del proceso ante tal situacion. Como era logico la region que se obtiene descarta la zona del
codigo donde se encuentra el ((clip)), ademas de los puntos donde se encuentran las manchas, con
lo cual es muy poco probable que esta region nos pueda llevar a una posible decodificaci
on con
exito.
27
(a)
(b)
(c)
Figura 5.7.: Resultado del proceso de deteccion del codigo de barras ante diversas situaciones:
(a) codigo de barras rayado; (b) el mismo codigo que en la imagen anterior, pero al
que se le han a
nadido mas modificaciones; (c) misma imagen que la anterior, pero
a
nadiendo un elemento ajeno al codigo de barras sobre el
(a)
(b)
(c)
Figura 5.8.: Conjunto de imagenes a las que se les ha aplicado una transformacion geometrica:
(a) rotacion de 30 ; (b) espiral de 45 ; (c) espiral de 100
Para una mayor comprobacion, en cuanto al buen funcionamiento de este proceso, se ha
transformado una imagen digitalmente para ver que ocurre cuando introducimos alg
un tipo de
transformacion geometrica en la misma, esto se observa en la Figura 5.8. En la imagen (a) se
ha aplicado una rotacion con un cierto angulo, de esta forma en la imagen aparece ademas
del propio codigo a decodificar, un trozo del mismo en una esquina. La region que obtenemos
contiene tanto el codigo, como el trozo que aparece en la esquina inferior. Esto es debido a la
forma en que agrupamos los pixels con una orientacion parecida seg
un un cierto umbral. Como
28
5.3. Resultados
vemos esto tiene sus ventajas a la hora de capturar la zona donde se encuentra el codigo, c
omo
se observa en la imagen (b) y (c), pero por el contrario provoca que aquellas partes de la imagen
donde la orientacion es muy similar, y que no pertenezcan al propio codigo de barras, tambien
se puedan elegir como posible zona donde se encuentre este.
En la imagen (b) y (c) la transformacion geometrica realizada ha sido la misma en ambas, una
especie de remolino o espiral (((swirl))), pero utilizando angulos distintos. Aunque parezca difcil,
obtenemos unas regiones que contienen el codigo de barras con bastante exactitud, sin embargo
la decodificacion en nuestro caso es imposible. Para poder decodificar el codigo deberamos ir
calculando las distintas orientaciones que el codigo presenta desde la primera barra hasta la
u
ltima, para as poder ir rectificando el codigo con el angulo adecuado en cada momento y
conseguir as su decodificacion.
Despues de poder observar todos estos ejemplos parece que el proceso se comporta bastante
bien, siempre y cuando el codigo no se vea afectado, en gran medida, por alg
un tipo de ruido,
como manchas o rayas presentes en el codigo. Ademas incluso aquellas imagenes en las que se
les ha aplicado una transformacion geometrica, la zona donde se encuentra el codigo se detecta,
aunque su posterior decodificacion se complicara, y no se aborda en este proyecto.
Deberamos comentar que se intentaron capturar imagenes que sufrieran alg
un tipo de deformacion geometrica natural, realista, como puede ser que la hoja donde se encuentre impreso el
codigo de barras este doblada por ejemplo. El proceso de localizacion creemos que igual funcionara en estos casos, el problema de no poder tener imagenes para comprobarlo ha sido por
culpa del enfoque. La imagen del codigo de barras, si tenamos doblada la hoja, presentaba zonas
donde era difcil enfocar y obtener resultados ntidos.
Tambien pudimos comprobar que algunas pruebas en las que el codigo no presentaba ninguna
raya ni mancha el resultado obtenido no era el deseado. Esto es debido a que el proceso se ve
bastante afectado por la calidad de la imagen, por lo que algunas mejoras para incrementar la
robustez del metodo pasaran, posiblemente, por realizar alg
un tipo de preproceso de la imagen
con el objetivo de evitar esta dependencia.
29
30
6. Estimaci
on de la orientaci
on y rectificaci
on
6.1.
Idea general
Todos los pasos realizados hasta este instante nos han permitido poder localizar la regi
on de
la imagen donde se encuentra el codigo de barras. Como es obvio, el codigo de barras puede estar
en cualquier posicion dentro de la imagen, al igual que puede presentar cualquier orientaci
on, lo
que dificulta su localizacion.
Por tanto, debemos calcular la orientacion que presentan los puntos de borde que contiene
la region susceptible de contener al codigo y que hemos obtenido en el paso anterior. Una vez
conocida esta orientacion simplemente debemos rectificar la imagen y conseguir a continuaci
on
una imagen que solo contenga el codigo. Esta subimagen sera binarizada para su posterior
decodificacion.
6.2.
Procedimiento
(a)
(b)
(c)
Figura 6.1.: Rotaciones con la orientacion estimada usando la mediana: (a) imagen original; (b)
imagen original rotada; (c) region donde hemos estimado que se encuentra el c
odigo
Una vez realizada la rotacion, lo que se pretende es obtener una imagen de tama
no igual a la
caja de mnima inclusion [13] que contiene el trozo de imagen original rotada que se corresponde
31
(a)
(b)
Figura 6.2.: Caja de mnima inclusion que incluye la region donde hemos determinado que se
encuentra el codigo: (a) antes de la ecualizacion del histograma; (b) despues de la
ecualizacion del histograma
Para la obtencion del umbral a partir del cual realizar la binarizacion existen diversos metodos
automaticos de b
usqueda de este [11], como el algoritmo de Otsu [8], que es el empleado en
nuestro caso. El umbral que se obtiene con este metodo se considera aquel punto que parte los
pixels de una imagen en dos clases de niveles de gris C0 = {0, 1, . . . , t} y C1 = {t+1, t+2, . . . , L},
siendo L el valor maximo de niveles de gris y t el umbral optimo que maximiza la separabilidad
de estas dos clases. El metodo se explica con mas detalle en el Apendice C.
De esta manera, el resultado que se obtiene despues de la binarizacion, utilizando como umbral
el obtenido con el algoritmo de Otsu, es el que aparece en la Figura 6.3.
32
7. Decodificaci
on
7.1.
Introducci
on
Durante la fase de decodificacion surgieron bastantes problemas que nos hicieron pensar que
la decodificacion no es un proceso tan trivial como en un principio pueda parecer, una vez
conseguida la localizacion del codigo dentro de la imagen.
Mientras se pensaba en un procedimiento que nos permitiese decodificar el codigo obtenido
en las fases anteriores, surgio la idea de utilizar tecnicas relacionadas con el reconocimiento del
habla. Dentro de estas tecnicas encontramos los modelos de Markov [25], que a base de entrenamiento consiguen identificar palabras de una frase analizando los fonemas que las caracterizan.
Sin embargo dominar esta tecnica requiere de mucho tiempo, ademas una vez determinados los
automatas que conforman el modelo se necesita de un aprendizaje, con el consiguiente gasto de
tiempo que ello conlleva y sobretodo, no se tena la certeza de que fuera a funcionar en nuestro
caso. Debido a estas razones, y a la limitacion del tiempo que tenamos para la realizaci
on de
nuestro proyecto, se descarto su uso.
Otra tecnica relacionada con la anterior es la tecnica DTW (Dynamic Time Warping) [23, 15].
Este metodo intenta el reconocimiemto de palabras conectadas en una frase, pero al contrario
que en los modelos de Markov no requiere de entrenamiento. Llego a implementarse un algoritmo
representativo de esta tecnica, pero adaptado a nuestro caso en particular, es decir, en vez de
conseguir descifrar palabras dentro de una frase intentamos descifrar dgitos de una secuencia
binaria. Los resultados no fueron los deseados y se desestimo esta opcion.
Otro motivo que provoco que desestimaramos estas dos opciones es que son metodos demasiado generales para lo que se pretende en este proyecto. Tiene sentido reconocer palabras con
estas tecnicas, ya que las palabras pueden sufrir deformaciones seg
un quien las pronuncia, el
acento, etc. Nosotros no vamos a alargar nuestro codigo, ni sufrira deformaciones similares a las
indicadas, solo nos afecta la correcta estimacion de la orientacion para la rectificacion del c
odigo
de barras. Por tanto tendra sentido utilizar estas tecnicas, si nuestro codigo si que sufriese esa
serie de transformaciones que provocasen su alargamiento, por ejemplo.
Incluso se penso en utilizar la tecnica de crestas y valles (ridges and valleys) [21], utilizada en
ciertos campos, como la medicina o en el procesamiento de huellas digitales. Para ello se utilizan
estas crestas o valles que aparecen en la imagen como caractersticas geometricas u
tiles en el
analisis de imagenes.
Uno de los trabajos relacionados con los codigos de barras [28], del cual obtuvimos bastante
informacion y que mencionamos en el primer captulo de esta memoria, intentaba decodificar
el codigo de barras de la siguiente forma: una vez obtenida la region de interes se extraa de la
misma una onda donde apareceran crestas y valles correspondientes a los espacios y las barras
del codigo. La onda se umbraliza para conseguir que los elementos de las barras y espacios del
codigo se distingan con claridad. Se extraen elementos de la onda seg
un las anchuras que estos
presentan en el tipo de codigo a interpretar. Finalmente, conociendo lo que ocupa un car
acter
seg
un el tipo de codificacion, se van obteniendo los distintos caracteres que contienen el c
odigo
y se decodifican.
33
7. Decodificacion
7.2.
Procedimiento
ABBABA
CCCCCC
Seis dgitos
67
Intermedio
5
Seis dgitos
67
Fin
3
N
umero de m
odulos
95
Pero las lneas que calculemos van a tener una cantidad de pixels que dependera de la escala
a la que este el codigo dentro de la imagen. Por ello debemos calcular esta deformacion y ver
como nos afecta en nuestro caso, calculando cuantos pixels por modulo tenemos, es decir:
=
n
M
donde n es la cantidad total de pixels que conforman el codigo en nuestra imagen, sera el
n
umero de pixels por modulo y M es la cantidad total de modulos que aparecen en un codigo,
que en nuestro caso, como hemos visto, vale 95.
Una vez obtenemos este dato podemos averiguar la relacion de pixels que se corresponde con
cada uno de los patrones antes mencionados, simplemente multiplicando el n
umero de modulos
por el n
umero de pixels por modulo , es decir, el tama
no de un dgito sera el valor que se
obtenga de multiplicar el n
umero de pixels por modulo por 7 modulos que forman un dgito.
34
7.2. Procedimiento
Con estos datos podemos ir dividiendo la lnea y quedarnos con los pixels correspondientes
a cada dgito dentro de la lnea e intentar averiguar cual es este dgito. Actuaremos de la
siguiente manera: si sabemos que un dgito codificado con la codificacion de tipo A va a seguir
un determinado patron, teniendo una cantidad de ceros seguida de otra de unos, luego mas ceros
y por u
ltimo otra vez unos, podemos determinar el tama
no maximo que nos va a ocupar un
dgito de la siguiente manera:
= m ,
si (n
umero de pixels por modulo) es 2 y m = 7, siendo m el n
umero de modulos que forma
un dgito, = 14, siendo el n
umero maximo de pixels que ocupara un dgito. Dentro de este
tama
no buscaremos el patron que hemos comentado (0101, con una cierta cantidad en cada caso
de ceros y unos). Podemos encontrar este patron dentro de los 14 pixels y que el u
ltimo pxel
sea el n
umero 14 o no, y sea el 13 o el 12, simplemente donde nos quedemos sera el pxel de
comienzo del siguiente dgito y a partir de este empezaremos a buscar el patron correspondiente
al siguiente dgito en los 14 pixels que le siguen. Para un mejor entendimiento veamos este
ejemplo,
. . . 11 |00001111000111
{z
} 0001100001111
|
{z
} 0 000 . . .
14
13
{z
14
Como se observa, el primer dgito ocupa los 14 pixels que puede tener como maximo, sin
embargo el segundo dgito no ocupa los 14 pixels sino 13, luego la posicion en la que empezar
a el
siguiente dgito sera el pxel que se encuentra dentro de una caja y no el subrayado, como hubiese
sido si el dgito ocupase el maximo n
umero de pixels posible.
Vemos que, a pesar de determinar las cantidades de pixels que cogemos para un dgito concreto,
este valor puede tener una peque
na variacion con lo que realmente ocupa el patron correspondiente al dgito, debido a la perdida de informacion con los decimales y sus redondeos. Por esta
razon buscamos los diferentes patrones o cambios que deben aparecer en cada caso dentro de la
cantidad de pixels que hemos calculado y si se encuentra antes del tama
no maximo que se ha
determinado, entonces ese punto en concreto sera el principio del siguiente dgito.
Una vez tenemos el conjunto de unos y ceros correspondiente a cada dgito, como sabemos
con que tipo de codificacion, A, B o C, se ha codificado, simplemente tenemos que averiguar con
que dgito se corresponde. Para ello vamos a calcular la distancia que presenta este conjunto con
cada uno de los dgitos del tipo correspondiente de la siguiente forma: podemos representar la
forma de codificacion de un dgito en vez de como un patron de unos y ceros, como un patr
on
de n
umero de modulos que representan estos unos y ceros, es decir,
Dgito
0
Codificaci
on A
0001101
N
umero de m
odulos
3211
Como vemos, tenemos tres modulos correspondientes a un espacio ancho, dos modulos correspondientes a una barra ancha, un modulo para un espacio estrecho y un modulo para una barra
estrecha.
Siguiendo esta idea lo mismo haremos nosotros para el conjunto de ceros y unos que obtengamos de la lnea calculada y que representan un dgito, para a continuacion emplear la formula
de la suma de cuadrados y calcular para que dgito esta distancia es menor.
n
X
(xi yi )2
i=1
35
7. Decodificacion
siendo xi cada uno de las cantidades correspondientes al n
umero de modulos del conjunto de
unos y ceros obtenidos de la lnea calculada, yi cada una de las cantidades de modulos de un
dgito en la codificacion correspondiente y la variable n que se corresponde al valor 4 ya que
tenemos este n
umero de cambios en un dgito.
Para que se entienda mejor este paso vamos a explicarlo con un ejemplo. Si tenemos el siguiente
conjunto de pixels para un dgito en concreto:
00001111000111
calculamos el n
umero de unos y de ceros que contiene el conjunto de la siguiente manera,
0000
000 |{z}
111
| {z } 1111
| {z } |{z}
4
a continuacion dividimos el n
umero de unos y ceros por el n
umero de pixels por modulo , de
esta forma obtendremos el valor equivalente de modulos en cada caso.
000 |{z}
111
0000
| {z } |{z}
| {z } 1111
4
1,5
1,5
Ahora simplemente debemos aplicar la formula de la suma de cuadrados con los 10 dgitos con
los que debemos comparar y con aquel que el resultado sea menor, sera el dgito representado
por el conjunto de unos y ceros que se esta analizando.
Para todas las lneas que realizamos, una vez decodificadas, calculamos el checksum o caracter
de verificacion seg
un la codificacion EAN-13, con el objetivo de asegurarnos que la decodificacion
es correcta. En caso de no ser as ese resultado se descarta por no ser correcto y solo se tienen
en cuenta para el resultado final aquellas lneas donde el checksum sea correcto. Un peque
no
problema que se nos presenta es que en ocasiones aparecen combinaciones de dgitos que consiguen que el checksum sea correcto, pero sin embargo el codigo no representa al que aparece en
la imagen, provocando que el resultado final no sea correcto.
Como explicaremos a continuacion, los dgitos finales que elegiremos como resultado se pueden
obtener mediante diferentes metodos, teniendo en cuenta todas las lneas obtenidas con un
checksum correcto.
Una forma es calcular el n
umero de veces que aparece un dgito en una determinada
posicion y elegir como mas probable aquel que mas veces se repite en esa posicion en
concreto.
Otra posible opcion es utilizando probabilidades, es decir, calcularemos a partir de las
distancias que hemos calculado previamente la probabilidad que presenta un dgito de ser
el correcto y nos quedaremos con aquel dgito cuya probabilidad sea mas alta. La obtencion
de estas probabilidades se realiza a partir de la siguiente formula:
d
p = e 2
36
7.3. Resultados
Otra forma de obtener el resultado es combinando la probabilidad con la confianza, mediante su producto y eligiendo aquel dgito para el cual se obtenga un mayor valor de esta
operacion. Cuando nosotros trazamos una lnea, esta puede cruzar por una zona que no se
haya elegido como perteneciente al codigo, por ser una mancha o cualquier otra clase de
ruido, pero que, sin embargo, puede ser una zona mnima que igual permita al resto de la
lnea obtener un codigo valido. Ademas los pixels que conforman esta zona estan etiquetados como puntos de la imagen que no contienen informacion valida del codigo. Por tanto
cuando realizamos las distintas divisiones de la lnea para compararlas con los dgitos del
tipo de codificacion que se corresponda para cada posicion en concreto, puede ocurrir que
un conjunto de esos pixels contenga algunos etiquetados como puntos con informacion no
valida. Por ello la confianza nos vendra dada por el porcentaje de puntos con informaci
on
valida dentro del conjunto de pixels.
Como u
ltima opcion estudiada es una igual que la anterior pero en vez de coger el valor
maximo, calculamos la mediana y nos quedamos con el valor que se obtenga.
Como existen diferentes caractersticas o informacion a la hora de la decodificacion del codigo,
se debe de alguna forma intentar clasificar y combinar esta informacion [19], con la intenci
on de
ofrecernos ayuda a la hora de interpretar el codigo. En nuestro caso ha sido una tarea bastante
complicada y se opto por lo siguiente: una vez calculados los cuatro, elegimos aquel resultado
cuyo codigo sea correcto en cuanto al calculo del checksum y ademas empiece por 978 que, como
comentamos al principio de este apartado, son los tres primeros dgitos con los que empieza un
codigo ISBN. Veamos un ejemplo:
Tabla 7.1.: Ejemplo de posibles resultados seg
un la opcion elegida
o
Tecnica
N. decodificado Checksum Inicio 978?
N.o veces aparicion
9788428323086
Correcto
S
Maxima probabilidad
9478228323088
Correcto
No
Maxima probabilidad confianza 9488428323086 Incorrecto
No
Mediana probabilidad confianza 9788428323085 Incorrecto
S
En este ejemplo vemos el resultado obtenido con cada una de las opciones antes mencionadas,
por tanto seg
un estos resultados elegiramos la primera opcion.
7.3.
Resultados
A continuacion se muestra una serie de imagenes junto al codigo que hemos conseguido decodificar. En caso de haber alg
un dgito del codigo erroneo, este aparece dentro de una caja
indicando que no era el correcto. As, de esta manera, se podra apreciar aquellos casos en los
que el metodo funciona correctamente y en cuales falla uno o varios dgitos.
Como podemos observar en la Figura 7.1, se ha conseguido para cada una de esas imagenes
decodificar el codigo y obtener los distintos dgitos que lo componen sin ning
un error. Pero estas
imagenes pertenecan a codigos sin ning
un tipo de deterioro provocado por rayas o manchas,
por ello vamos a analizar como se comporta el metodo ante situaciones menos favorables.
El comportamiento del metodo ante codigos deteriorados lo podemos observar en la Figura 7.2
donde nos aparecen codigos con alg
un tipo de marca que dificulta su decodificacion, sin embargo
la soluci
on obtenida ha sido la deseada sin ning
un tipo de error. Esto es debido a que las manchas
que presenta el codigo de barras no son lo suficientemente fuertes como p o marcadas para evitar
la correcta decodificacion del mismo. En cambio, en ciertos casos como los que mostramos en la
37
7. Decodificacion
9788428323086
9789706860507
9788428328647
Figura 7.1.: Distintas imagenes con el codigo que se ha obtenido al aplicar nuestro metodo
Figura 7.3, el resultado final s que presenta alg
un dgito que no se corresponde con el dgito del
c
odigo en cuestion.
9788428324304
9788428326360
9788428326360
Figura 7.2.: Una serie de imagenes en las que el codigo sufre alguna alteracion en cuanto a
presentar rayas o manchas sobre el, pero la decodificacion final es completamete
correcta
9788428326 8 77
978842 79 27336
97884 1 8328111
Figura 7.3.: Conjunto de imagenes en las que la decodificacion del codigo de barras presenta
alg
un dgito erroneo
Pero no siempre el resultado que se obtiene es aceptable. A veces, el resultado conseguido
presenta un n
umero de dgitos la mayora de ellos erroneo, como se observa en la Figura 7.4.
Este mal funcionamiento es debido a la intensidad de las marcas que presenta el codigo, que
como comentamos en apartados anteriores, afecta a la hora de la deteccion de la zona donde se
encuentra este. Esta mala deteccion provoca que esta u
ltima fase de decodificacion sea erronea
al no tener la region que contiene al codigo la suficiente informacion, de manera que permita la
decodificacion del codigo de barras con exito.
38
9 0 8 7 42 4 3 42 3 63
9 34747551 8 301
Caso analizado
Limpia
Da
nada
Total
7.4.
N.o
Resultados
im
agenes Correcto
10
7
24
12
34
19
Incorrecto
3
12
15
Porcentaje
70
50
56
An
alisis de robustez
En este apartado se van a presentar una serie de ejemplos o experimentos para comprobar
hasta que punto el metodo puede ser fiable, o simplemente con el proposito de dejar claro ciertos
aspectos que creemos pueden resultar de interes.
Automatizaci
on del proceso de binarizaci
on
Como comentamos en el captulo anterior, previamente a la binarizacion se realiza una ecualizacion del histograma, Este paso junto a la utilizacion del metodo de Otsu para encontrar el
umbral a partir del cual binarizar, mejoran dicha binarizacion y por consiguiente, la posterior
decodificacion. En la Figura 7.5 se muestra el resultado que se obtiene tanto sin ecualizar y
con un umbral fijo, como el mismo resultado ecualizando el histograma y aplicando Otsu para
encontrar dicho umbral.
Se puede observar que la subimagen que se obtiene del codigo de barras sin haber realizado
la ecualizacion y con un umbral fijo, es peor que en el otro caso comentado. Ademas la decodificacion no tiene exito, debido a que la imagen binarizada no es lo bastante buena para poder
ser decodificada correctamente. De ah la importancia, tanto de la ecualizacion previa de la
imagen como del calculo automatico del umbral a partir del cual binarizar, ya que si este es fijo,
en ciertas imagenes nos va a resultar adecuado, pero en otras no. Debido a esto no podamos
encontrar un valor que fuese adecuado para todos los casos, por lo que se penso en el metodo
de Otsu para evitar este contratiempo.
39
7. Decodificacion
9789687529714
(a)
9769687 0151 1 5
(b)
978968752914
(c)
Figura 7.5.: Obtencion de la subimagen binarizada centrada en el codigo de barras: (a) Imagen
original; (b) obtenida sin ecualizar el histograma y con un umbral fijo de 110; (c)
previamente se ha ecualizado el histograma y se ha aplicado Otsu para calcular el
umbral con el cual binarizar
(a)
(b) e = 0
(c) |e | = 10
40
14
12
10
0
-20
-15
-10
-5
0
5
error orientacion [grados]
10
15
20
Figura 7.7.: Efecto que provoca una estimacion de la orientacion erronea a la cantidad de dgitos
acertados en la decodificacion
de dgitos acertados disminuye, viendose mas afectado el resultado en un sentido que en el
otro. Suponemos que la razon por la cual puede suceder esto es debido a la imagen utilizada
para realizar el experimento, la imagen (a) de la Figura 7.6, en la cual podemos observar que
nos falta un trozo de codigo de barras en la parte inferior derecha. Como en la decodificaci
on
trazamos lneas horizontales para obtener la secuencia binaria que despues decodificamos, llega
un momento que la orientacion estimada es tan erronea que conlleva una inclinacion excesiva
del codigo, provocando que las lneas que nosotros trazamos no consiguan atravesar totalmente
este, es decir, no consigan pasar por todas las barras y espacios que lo forman. Esta situaci
on
se ve agravada cuando el codigo de barras se inclina hacia el lado contrario del trozo de c
odigo
que nos falta, provocando as su mala decodificacion.
41
7. Decodificacion
paso se ha realizado para poder tener las dos comparativas en una misma grafica.
14
localizacion codigo
localizacion [OK-no OK},aciertos [digitos correctos]
digitos acertados
12
10
0.2
0.4
0.6
0.8
1
factor de escala
1.2
1.4
1.6
1.8
Figura 7.8.: Estudio para comprobar como afecta el escalado a la localizacion del codigo de
barras y a la cantidad de dgitos acertados en la decodificacion
Seg
un estos resultados se tiene mejor funcionamiento de la localizacion de la region candidata
de contener al codigo, si se reduce el tama
no del mismo que si este se ve aumentado. Esto es
debido a que si aumentamos el tama
no del codigo tambien aumentamos el tama
no de las barras y
los espacios, con lo cual, a la hora de extender la orientacion, estas distancias existentes entre los
bordes provoca que la orientacion de los puntos de borde no se extiendan a todos los puntos de la
zona del codigo que no lo son, y por tanto, provoca que se falle en la fase de localizacion. Ademas,
tambien se observa que en cuanto al intervalo donde la localizacion es correcta, no siempre se
aciertan todos los dgitos del codigo, por lo que se deduce que una acertada localizacion del
c
odigo no siempre provoca una acertada decodificacion del mismo. Esto nos lleva a pensar que
la decodificacion debera ser mejorada de alguna forma, para que no ocurriese esto y sucediera
lo contrario, que una buena localizacion provocara una decodificacion correcta.
Tambien recalcar que pese a todo, la localizacion consigue funcionar incluso con cambios de
escala tan importantes como los que se consiguen aplicando un factor de 0.7 y 1.2.
En la Figura 7.9 se puede observar la misma imagen a la cual se le ha aplicado dos factores
de escala distintos, unos de ellos aumenta la imagen y el otro la disminuye, junto al codigo que
posteriormente se consigue decodificar.
Influencia del n
umero de lneas empleadas en la decodificaci
on
Para finalizar, resultara tambien interesante conocer como afecta a la hora de la decodificacion
el n
umero de lneas que se realizan para la misma. Con este motivo se han utilizado las dos
imagenes presentes en la Figura 7.10, en las cuales se observa como, una de las dos, presenta
una mancha, mientras que la otra se encuentra totalmente limpia sin ning
un tipo de mancha
o raya. Realizaremos un experimento y que consistira en utilizar para la decodificacion un
porcentaje de las lneas que conforman la altura de la subimagen centrada en el codigo. El
42
(a)
(b)
9788428323086
(c)
978 3661402308
(d)
Figura 7.9.: Imagenes escaladas: (a) se ha aplicado un factor de 0.8, con lo que se reduce el c
odigo
de barras; (b) se ha aplicado un factor de 1.3, con lo que se aumenta el codigo de
barras; (c) region obtenida al realizar el proceso de localizacion del codigo junto
al conjunto de dgitos del codigo de barras decodificado correctamente; (d) regi
on
obtenida para la imagen junto al codigo decodificado erroneamente
resultado del experimento se puede observar en la grafica que aparece en la Figura 7.11. La lnea
continua pertenece al resultado obtenido para la imagen (a) de la Figura 7.10, mientras que la
otra pertenece al resultado obtenido para la imagen (b) de la misma figura.
9788428323086
(a)
9788497320658
(b)
Figura 7.10.: Imagenes analizadas: (a) limpia; (b) presenta una mancha
Como podemos observar en una imagen limpia no importa la cantidad de lneas que utilicemos
a la hora de la decodificacion, ya que tanto con un n
umero elevado de lneas (en este caso el
100 % se corresponde a 118 lneas) como con un n
umero mas peque
no conseguimos decodificar el
43
7. Decodificacion
c
odigo correctamente. Sin embargo, cuando la imagen se ve da
nada por alg
un tipo de mancha,
esto no ocurre as, y s que afecta el n
umero de lneas que analicemos. Hasta que no llegamos
a un 40 % (en este caso el 100 % se corresponde a 79 lneas) no se obtiene la decodificacion del
c
odigo de barras con exito. Por tanto, podemos concluir que para no malgastar recursos con un
40 % de lneas que se utilicen en la fase de la decodificacion sera suficiente, pero como nosotros
no conocemos que tipo de manchas van a presentar los codigos que se analicen, debemos realizar
el maximo n
umero de lneas posible para su correcta decodificacion.
14
12
10
2
imagen 7.10 (a)
imagen 7.10 (b)
0
10
20
30
40
50
60
numero de lineas [%]
70
80
90
100
44
8. Sistema experimental
En este punto simplemente vamos a comentar el material utilizado para la realizacion del
proyecto, al igual que mencionaremos ciertas restricciones que se han adoptado durante la implementacion del mismo. Tambien creemos necesario comentar los valores que se han fijado para
algunas parametros utilizados en los algoritmos y el motivo por el cual se ha adoptado ese valor.
Por u
ltimo mostraremos el tiempo de ejecucion del algoritmo, desglosado para cada una de las
fases que lo componen.
8.1.
Informaci
on general
En primer lugar comentar que las imagenes de los codigos de barras empleadas en el proyecto
han sido tomadas del catalogo universitario de libros de matematicas, ciencias, ingeniera y
computacion del a
no 2004 de la editorial THOMSON. La camara con la cual se ha recopilado este
conjunto de imagenes era una camara SONY DFW-VL500 de color digital. Como caracterstica
a destacar comentar que la propia camara contiene unos botones que permiten realizar un zoom
y un enfoque de la imagen de forma manual, sin tener que determinar ning
un parametro desde la
aplicacion con la que se este utilizando la camara. Tambien se hicieron pruebas con otra camara,
una camara digital IEEE 1394, y usando para la visualizacion de las imagenes la aplicaci
on
Coriander 1.0.0 [1], pero finalmente solo se ha usado una de las imagenes que de esta forma se
tomaron.
Para la adquisicion de imagenes se ha empleado un conjunto de funciones de Matlab 7.0 y
que se explican en su correspondiente manual [17]. A continuacion se presenta un ejemplo de las
funciones utilizadas para la captura de una imagen, con el objetivo de poder grabarla luego a
disco:
vid=videoinput{dcam,Y422_320x240);
vid.ReturnedColorSpace=RGB;
preview(vid);
im=getSnapShot(vid);
imshow(im);
imwrite(im,barcode.pgm);
Por u
ltimo solo comentar que el metodo presentado en este proyecto se ha implementado
en C++ bajo el sistema Suse Linux 9.2. Como cabe pensar, se ha utilizado en el mismo una
librera de procesamiento de imagenes, en este caso la CImg [29] en su version 1.0.8, al igual que
un conjunto de programas de visualizacion y conversion de imagenes como el xv o el convert.
El convert se ha utilizado sobretodo para conversion de imagenes y para la realizacion de las
transformaciones geometricas que se pueden ver en la Figura 5.8 (pagina 28).
45
8. Sistema experimental
8.2.
Restricciones
Aunque como se ha comentado, el codigo de barras puede presentar cualquier orientacion, una
restriccion que se ha fijado en cuanto a nuestro proyecto, ha sido que la orientacion del codigo
debe encontrarse en un intervalo de entre 90 y 90 . Esto es debido a que si no fuera as se
dificulta en gran medida la decodificacion del codigo de barras. El motivo es que a la hora de
la rotacion, la orientacion que presentan las barras puede provocar que el codigo se quede en
sentido inverso, es decir, boca abajo, y la decodificacion de esta forma se complica bastante.
Debemos recalcar que no es lo mismo la orientacion del codigo de barras que la orientacion
de las barras presentes en el mismo, ya que cuando el codigo de barras se encuentra en sentido
horizontal la orientacion del mismo son 0 , pero por el contrario las barras presentan un angulo
de 90 .
El tama
no de todas las imagenes con las cuales se ha probado el metodo era de 320 240
pixels, simplemente para tener un tama
no base y por simplicidad, aunque se han hecho pruebas
con unas pocas imagenes de tama
no superior obteniendo resultados similares. Para finalizar
comentar que el tama
no del codigo de barras con respecto a la imagen siempre ha sido mas o
menos parecido dentro de un intervalo.
8.3.
Durante todo el proceso un conjunto de parametros, que creemos importantes, han mantenido
un valor fijo debido a una serie de razones que explicamos en este apartado. Estos valores se
muestran a continuacion en la siguiente tabla:
Par
ametro
t1
t2
U
Significado
Varianza
Umbral usado en la histeresis
Umbral usado en la histeresis
Umbral (dif. max. en orientacion)
Valor
0.5
20
40
10
46
8.4.
Tiempo de ejecuci
on
El tiempo de ejecucion del metodo implementado, desglosado para cada una de las fases y
expresado en milisegundos, es el que se observa en la Tabla 8.2. El tiempo de ejecucion se ha
determinado despues de realizar una media entre 10 ejecuciones distintas del algoritmo, tomando
en cada una de ellas, una de las 10 imagenes que tenamos donde el codigo aparece sin ning
un
tipo de mancha. El ordenador con el cual se han realizado cada una de las mediciones es un Intel
Pentium 4 a 1.70 GHz con 376 MB de RAM.
Como vemos el tiempo que tarda en ejecutarse el programa no es muy elevado, aunque este
se vera incrementado si se aumenta el tama
no de la imagen a analizar.
Tabla 8.2.: Tiempo de ejecucion de cada una de las fases
Fase
Deteccion de bordes
Deteccion de regiones candidatas
Etiquetado y filtrado de regiones
Estimacion de la orientacion y rectificacion
Decodificacion
Tiempo Total
Tiempo (ms)
339
27
39
633
28
1066
En la etapa de estimaci
on de la orientaci
on y rectificaci
on el tiempo es bastante mas elevado
que en las otras fases, cuando parece que las operaciones que en ella se realizan no deban costar
tanto. Este aumento en el tiempo es debido a que, para la estimacion de la orientacion, calculamos
la mediana de los puntos de borde de la subimagen centrada en el codigo que se obtiene en fases
anteriores, y esta operacion requiere que los valores de los puntos de bordes esten ordenados,
utilizando para ello el metodo de la burbuja, que es el causante de este incremento del tiempo.
Se utiliza este metodo de ordenacion por simplicidad, sin embargo si quisieramos conseguir un
metodo mas eficiente tendramos que implementar otro metodo de ordenacion mas eficiente.
Por u
ltimo, rese
nar que el tiempo que emplea el metodo, como hemos comentado, no es muy
elevado, incluso sin haber dedicado mucho tiempo a la optimizacion del mismo teniendo en
cuenta la eficiencia. Con lo cual se puede decir que es un metodo que se presta a ser utilizado
en aplicaciones para decodificacion de codigos de barras, en las que se requiera resultados al
instante.
8.5.
Duraci
on del proyecto
47
8. Sistema experimental
Semanas (5 dias)
2
10
4
4
20
Horas/semana
40
300
120
120
580
48
9. Conclusiones
El metodo implementado para la decodificacion de codigos de barras podemos concluir que
presenta un buen funcionamiento cuando las imagenes que se analizan no contienen codigos de
barras da
nados o afectados por alg
un tipo de ruido, como rayas o manchas, pero por el contrario
si los codigos que aparecen en las imagenes si que presentan ruido, el metodo no resulta ser
suficientemente robusto. Ademas esta tecnica se ve afectada de manera negativa por la calidad
de la imagen, ya que si esta no cumple unas condiciones bastante buenas, el proceso tiende
a fallar y por tanto la decodificacion no es posible. La solucion pasara seguramente por un
preproceso de la imagen a tratar.
Otra caracterstica a considerar de este metodo es que realiza los calculos de forma eficiente,
aunque este tiempo depende en gran medida del tama
no de la imagen. Sin embargo en nuestro
caso, donde se ha utilizado un tama
no de imagen fijo, el resultado se obtena con bastante
rapidez.
En el proceso de la decodificacion, la imagen binaria en la cual nos basamos para posteriormente interpretar el codigo se obtiene despues de una serie de pasos de la imagen original. Sera
a lo mejor mas conveniente utilizar la imagen de bordes de alguna forma, ya que de esta manera
seramos capaces de decodificar no solo codigos de barras con espacios blancos y barras negras,
sino que podramos decodificar codigos donde las barras y espacios fuesen de cualquier color a
parte del blanco y negro. Esto es debido a que la obtencion de bordes nos indica los cambios de
intensidad que aparecen en la imagen y no depende del color de las barras ni espacios, aunque
suponemos que sera necesario de igual manera recurrir a la imagen de niveles de gris, pero s
olo
a nivel consultivo sin depender de ella, simplemente para conocer en cada cambio que se produce
de que nivel venimos y a cual nos dirigimos.
Recalcar que el proceso de localizacion del codigo de barras dentro de la imagen es independiente del tipo de codigo de barras, es decir, cualquier codigo de barras cuya simbologa sea la de
barras y espacios puede ser localizado mediante la tecnica de deteccion utilizada en este metodo.
Sin embargo, para la fase de decodificacion, s que se explota el conocimiento previo que se tiene
del tipo de codificacion que se utiliza, todo ello con el objetivo de simplificar esta operacion.
Tambien mencionar que sera interesante realizar pruebas con una batera de imagenes mucho
mayor, para de esta forma mejorar en cuanto a la deteccion y decodificacion de codigos de barras
en imagenes de poca calidad y con ruido, como manchas, rayas, o cualquier otro factor externo
que modifique el codigo.
Como posibles extensiones o trabajos futuros cabra la posibilidad de intentar que el proceso
no solo funcionase con codigos de barras EAN-13, sino que valiese para otros muchos tipos
de codigos que existen en el mercado actual. Sin embargo hay que tener en cuenta la posible
dificultad que ello conlleva, ya que cada codigo utiliza una codificacion distinta y por tanto, que
el mismo procedimiento funcionase para una gran variedad de codigos puede ser complicado.
Ademas se presenta el problema de, una vez captada la imagen, reconocer que tipo de c
odigo
se esta tratando para utilizar en su decodificacion una serie de pasos que podran ser diferentes
seg
un el tipo o generalizar el proceso de decodificacion.
49
9. Conclusiones
50
Gy
y f (x, y)
siendo un vector perpendicular al borde, donde el vector G apunta en la direcci
on de
variacion maxima de f en el punto (x, y) por unidad de distancia, con la magnitud y
direccion dadas por:
q
|G| =
G2x + G2y ,
(x, y) = tan1
Gy
Gx
Es una practica habitual aproximar la magnitud del gradiente con valores absolutos
de la siguiente manera:
|G| = |Gx | + |Gy |
Obtendremos dos imagenes de salida: Em de la magnitud del gradiente y Eo de la orientacion, de acuerdo a las expresiones anteriores.
2. Supresi
on no m
axima al resultado del gradiente
Con Em y Eo como entradas y una nueva imagen IN como salida, considerar las cuatro
direcciones d1 , d2 , d3 , d4 identificadas por las orientaciones de 0o , 45o , 90o y 135o con
respecto al eje horizontal. Para cada pxel (i, j):
Encontrar la direccion dk que mejor se aproxima a la direccion Eo (i, j) (la perpendicular al borde).
51
52
B. Algoritmo cl
asico de etiquetado de
componentes conexas
Durante una de las fases de nuestro metodo, necesitamos poder elegir de entre un conjunto de
regiones aquella que tiene mayor probabilidad de ser la zona donde se encuentra el codigo. Sin
embargo, para llegar a este filtrado, previamente necesitamos etiquetar de alguna manera estas
regiones, y as poder distinguir unas de otras. Pero no solo distinguir, sino poder seleccionar la
que nosotros queramos. Para esta tarea un algoritmo de etiquetado de componentes conexas se
presentaba como una buen opcion.
El algoritmo clasico de etiquetado de componentes conexas [24] se caracteriza por realizar
solamente dos pasadas a traves de la imagen y necesita mantener durante todo el proceso una
tabla de equivalencias de etiquetas.
El primer paso del algoritmo consiste en la propagacion de etiquetas, es decir, como en la
mayora de algoritmos de este tipo, procesa en cada instante una fila de la imagen y asigna
nuevas etiquetas al primer pxel de cada componente, intentando ademas propagar la etiqueta
de cada pxel a sus pixels vecinos, que se encuentran a su derecha o por debajo de el.
Cuando se llega a la situacion en la que dos etiquetas distintas se propagan al mismo pxel,
prevalece la mas peque
na y cada equivalencia que se encuentra es introducida en una tabla de
equivalencias. Cada una de las entradas de la tabla esta formada por un par ordenado, donde
los valores de sus componentes son las etiquetas equivalentes halladas durante el proceso.
Una vez realizado este paso, se calculan las clases de equivalencias tomando el cierre transitivo
del conjunto de equivalencias almacenadas en la tabla de equivalencias. A cada una de las clases
de equivalencia encontradas se le asigna una etiqueta, generalmente la mas peque
na (o la m
as
antigua de la clase).
En el segundo paso se asigna a cada pxel la etiqueta de la clase de equivalencia correspondiente
calculada en el paso anterior.
El algoritmo clasico de etiquetado de componentes conexas se describe en el Algoritmo 4.
La funcion Vecinos() devuelve el conjunto de los vecinos ya etiquetados de un determinado
pxel en su misma lnea o en la lnea previa. La funcion NuevaEtiqueta() genera una nueva
etiqueta con valor entero cada vez que es llamada. La funcion Etiquetas() recibe como entrada un
conjunto de pixels ya etiquetados y devuelve el conjunto de sus etiquetas. Por u
ltimo la funci
on
ClasesEquivalencia() simplemente encuentra las clases de equivalencia de entre el conjunto de
equivalencias almacenadas en la tabla correspondiente.
53
Algoritmo 4 Metodo cl
asico de etiquetado de componentes conexas
Entrada: Una imagen binaria I de tama
no M N
Salida: Una imagen etiquetada E, donde E(i, j) es la etiqueta de I(i, j)
1: Inicializar la tabla de equivalencias T
2: for i 1 to M do
3:
for j 1 to N do
4:
E(i, j) 0
5:
if I(i, j) = 1 then
6:
V Vecinos(i, j)
7:
if V = then
8:
e NuevaEtiqueta()
9:
else
10:
e mn(Etiquetas(V ))
11:
E(i, j) e
12:
for all e0 Etiquetas(V ) e0 6= e do
13:
T T (e0 , e)
14: C ClasesEquivalencia(T )
15: for all c C do
16:
Equivalente[c] mn(Etiquetas(c))
17: for i 1 to M do
18:
for j 1 to N do
19:
if I(i, j) = 1 then
20:
E(i, j) Equivalente[Clase(E(i, j)]
54
C. M
etodo de Otsu
Con el objetivo de poder calcular de forma automatica un umbral a partir del cual binarizar
una imagen y evitar as los inconvenientes que presenta la eleccion de un umbral fijo, se pens
o en
la utilizacion del metodo de Otsu como opcion acertada para tal fin.
El metodo de Otsu [8], propuesto en 1979, es un algoritmo para la determinacion autom
atica
de un umbral de binarizacion a partir del histograma de una imagen. Si consideramos que el
conjunto de niveles de gris que conforman una imagen son G = {0, 1, 2, . . . , L}, siendo L el valor
maximo de niveles de gris, el umbral que vamos a obtener se considera el punto que parte los
pixels de una imagen en dos clases de niveles de gris C0 = {0, 1, . . . , t} y C1 = {t+1, t+2, . . . , L},
donde t es el umbral optimo que maximiza la separabilidad de estas dos clases.
El metodo esta basado en un analisis discriminante. Un umbral optimo puede ser determinado
minimizando algunas de las siguientes funciones con respecto a t:
=
2
B
2 ,
W
2
B
,
T2
T2
2
W
k=
De los tres criterios a minimizar, el segundo es el mas simple. Por tanto, el umbral optimo se
define como:
t = arg mn (t)
tG
donde
T2 =
L
X
(i T )2 Pi ,
T =
L
X
i=0
iPi ,
i=0
2
B
= w0 w1 (1 0 )2 ,
w0 =
t
X
Pi ,
w1 = 1 w0 ,
i=0
1 =
T t
,
1 w0
t =
t
X
i=0
iPi ,
0 =
Pi =
t
w0
ni
n
donde ni es el n
umero de
umero total de pixels en la imagen
Ppixels con nivel de gris i y n es el n
dada definido por n = L
n
.
Adem
a
s,
P
es
la
probabilidad
de aparicion del nivel de gris i
i
i=0 i
ni
definido como Pi = n .
Por u
ltimo, solo recalcar que la bibliografa encontrada acerca de este metodo presentaba
erratas y finalmente el metodo que aqu se presenta y que es el implementado en la memoria,
surge de la combinacion de las distintas fuentes consultadas [10, 8].
55
C. Metodo de Otsu
56
D. Caractersticas del c
odigo EAN-13
Existe una gran variedad de codigos de barras en el mercado, sin embargo en nuestro proyecto
nos hemos dedicado a trabajar con una sola clase de ellos, el codigo EAN-13 [20], uno de los
mas famosos y utilizados hoy en da.
El sistema de codificacion Universal Product Code (UPC) fue adoptado en los EE.UU. por
la industria de la alimentacion en los a
nos 70. Presentaba una serie de ventajas como eran su
rapidez, precision y fiabilidad al entrar informacion de stock en las computadoras. Este triunfo
tan repentino llevo al desarrollo del European Article Numbering System (EAN), una simbologia
similar a la UPC, que esta ampliamente difundida por Europa y el resto del mundo.
Existen varias versiones de estos codigos, siendo el codigo de barras EAN-13 el mas utilizado.
Esta formado por: un margen izquierdo, un dibujo normalizado de separacion, un dibujo que representa directamente seis dgitos e indirectamente un septimo, un dibujo central de separaci
on,
un dibujo de barras y espacios que representa directamente seis dgitos, un dibujo normalizado
de separacion y un margen derecho. De forma grafica lo podemos observar en la Figura D.1.
57
Tabla D.1.:
Posici
on
1, 2
3
4, 5, 6, 7
8, 9, 10, 11, 12
13
Separador
Izquierdo
Derecho
Central
barra y cada espacio pueden tener una anchura de una, dos, tres o cuatro unidades.
En la simbologa EAN pueden elegirse tres formas distintas de codificacion A, B y C para
representar cada dgito. Estas formas se utilizan para codificar los caracteres numericos ubicados
entre las posiciones 2 y 13.
Para representar la primera mitad del codigo de barras se emplea una combinacion de los
conjuntos numericos A y B, donde el orden de los conjuntos numericos utilizados representa a
su vez un septimo dgito, que aparece al principio de la secuencia de caracteres situada debajo
del codigo de barras. El conjunto numerico C se emplea solo para la segunda mitad del codigo
de barras, lo que provoca que el dispositivo lector pueda leer el codigo en cualquier sentido y
decodificarlo correctamente.
Por tanto los caracteres del tipo A y B estaran a la izquierda del separador central, mientras
que los del tipo C se ubican a la derecha del separador central, como se puede observar en la
Figura D.2.
58
Por u
ltimo, el dgito de verificacion se calcula siguiendo este procedimiento:
1.
2.
Sumar entre s los 6 productos anteriores, cada uno de valor entre 0 y 27, mas los valores
de cada caracter en posicion impar, excepto la posicion 13, obteniendo as un valor que se
llama ((Suma de Productos)) (SP ).
3.
4.
Restarle a 10 el resto, obteniendo el valor del caracter de verificacion (CV ) que se ubicar
a en
la posicion 13 del codigo, es decir, CV = 10 R.
59
60
Bibliografa
[1] Aplicacion para manejo y visualizacion de imagenes. http://www.tele.ucl.ac.be/
PEOPLE/DOUXCHAMPS/ieee1394/coriander. Ultimo
acceso: Junio 2005.
article-Barcode.html. Ultimo
acceso: Junio 2005.
[4] Informacion general sobre impresoras de codigos de barras. http://www.dimension-x.
com/cf-onsprn2.htm. Ultimo
acceso: Junio 2005.
[5] Kjersti Aas and Line Eikvil. Decoding bar codes from human-readable characters. Pattern
Recognitions Letters (PRL), 18:15191527, 1997.
[6] Russ Adams. Informacion general sobre codigos de barras. http://www.barcode-1.com.
Ultimo
acceso: Junio 2005.
[7] Jorge Badenas Carpio, Jose Luis Llopis Borras, and Oscar Coltell Simon. Curso pr
actico
de programaci
on en C y C++. Publicacions de la Universitat Jaume I, 1997.
[8] M. Cheriet, J.N. Said, and C. Y. Suen. A recursive thresholding techniques for image
segmentation. IEEE Transactions on Image Processing, 7:918921, 1998.
[9] Secretara de Estado de Cultura. Manual del Usuario, 2.a edicion espa
nola, 2001. Traducci
on
de ISBN Users Manual, 4th ed.
[10] Arturo de la Escalera Hueso. Visi
on por computador: fundamentos y metodos. Prentice
Hall, 2001.
[11] ivind Due Trier and Anil K. Jain. Goal-directed evaluation of binarization methods. IEEE
Transactions on Pattern Analysis and Machine Intelligence, 17:11911201, 1995.
[12] Nick Efford. Digital Image Processing. A Practical Introduction Using Java. AddisonWesley, 2000.
[13] H. Freeman and R. Shapira. Determining the minimum-area encasing rectangle for an
arbitrary closed curve. Communications of the ACM, 18:409413, 1975.
[14] Francisco Ortegon Gallego. LATEX, primeros pasos. MASSON, S.A., 1992.
[15] C. Godin and P. Lockwood. DTW schemes for continuous speech recognition: a unified
view. Computer Speech and Language, 3:169198, 1989.
[16] Silicon Graphics. Standard Template Library Programmers Guide. http://www.sgi.com/
tech/stl. Ultimo
acceso: Junio 2005.
61
Bibliografa
[17] The MathWorks Inc. Image Acquisition Toolbox Users Guide. For Use with MATLAB.
20032005.
[18] Eugene Joseph and Theo Pavlidis. Bar code waveform recognition using peak locations.
IEEE Transactions on Pattern Analysis and Machine Intelligence, 16:630640, 1994.
[19] Joseph Kittler, Mohamad Hatef, Robert P.W. Duin, and Jiri Matas. On combining classifiers. IEEE Transactions on Pattern Analysis and Machine Intelligence, 20:226239, 1998.
[20] Vault Information Services LLC. EAN-13 Symbology. http://www.barcodeisland.com/
ean13.phtml. Ultimo
acceso: Junio 2005.
[21] Antonio M. Lopez, Felipe Lumbreras, Joan Serrat, and Juan J. Villanueva. Evaluation
of methods for ridge and valley detection. IEEE Transactions on Pattern Analysis and
Machine Intelligence, 21:327335, 1999.
[22] Ruben Mu
niz, Luis Junco, and Adolfo Otero. A robust software barcode reader using
the Hough transform. IEEE International Conference on Information, Intelligence, and
Systems, pages 313319, 1999.
[23] Hermann Ney. The use of a one-stage dynamic programming algorithm for connected word
recognition. IEEE Trans. on ASSP, 32:263271, 1984.
[24] Gonzalo Pajares and Jes
us M. de la Cruz. Visi
on por Computador. Imagenes digitales y
aplicaciones. Ra-Ma, 2001.
[25] L.R. Rabiner. A tutorial on hidden Markov models and selected applications in speech recognition. Proceedings of the IEEE, 77:257286, 1989. http://www.ai.mit.edu/courses/6.
867-f02/papers/rabiner.pdf.
[26] Jun Rekimoto, Yuji Ayatsuka, and Kazuteru Hayashi. Augment-able reality: Situated communication through physical and digital spaces. International Symposium on Wearable
Computers (ISWC), pages 6875, 1998.
[27] Stephen Shellhammer, David P. Goren, and Theo Pavlidis. Novel signal-processing techniques in barcode scanning. IEEE Robotics & Automation Magazine, 6:5765, 1999.
[28] Peter Sundstrom. Bar code reader for surface mounting systems. http://www.f.kth.
se/~f96-psu/thesis.html, 2001. Master thesis on KTH - Kungliga Tekniska Hogskolan
[Royal Institute of Technology] (Stockholm).
[29] David Tschumperle. The C++ template image processing library.
sourceforge.net. Ultimo
acceso: Junio 2005.
http://cimg.
[30] Todd Wittman. Deblurring and restoration in barcode signal processing. SIAM (Society
for Industrial and Applied Mathematics) News, 37, 2004.
[31] William J. Wolfe, Jim Gunderson, and Matthew E. Walworth. Computer vision barrel
inspection. Mobile Robots VIII, 2058:128133, 1993.
62