PROCESAMIENTO DE IMAGEN PARA EL RECONOCIMIENTO DE

Texto completo

(1)

P ROCESAMIENTO DE IMAGEN PARA EL RECONOCIMIENTO DE CÓDIGO QR .

Alumnos:

Francisco Javier Roberto Roda.

Miguel Mendez Hernandez Eric Ravel

(2)

PROCESAMIENTO DE IMAGEN PARA EL RECONOCIMIENTO DE CÓDIGO QR.   1  

Introducción.   3  

Características  generales.   3  

Posibles  aplicaciones.   4  

Motivación.   5  

Descripción  del  algoritmo.   5  

1.   Binarización  de  la  imagen.   5  

Método  de  Otsu   6  

Exposición  matemática   6  

2.   Corrección  de  la  inclinación.   8  

Corrección  geométrica  de  la  imagen.   10  

Obtención  de  los  cuatro  vértices  de  la  imagen.   10  

Obtención  de  los  nuevos  valores  e  los  vértices.   11  

Obtener  el  valor  en  cada  nuevo  pixel.   11  

Normalización  de  la  imagen.   12  

Corrección  del  error.   12  

Bibliografía.   13  

(3)

Introducción.

Un código QR (quick response barcode, «código de barras de respuesta rápida») es un sistema para almacenar información en una matriz de puntos o un código de barras bidimensional creado por la compañía japonesa Denso Wave. Se

caracterizan por los tres cuadrados que se encuentran en las esquinas y que permiten detectar la posición del código al lector.. Los códigos QR son muy comunes en Japón y de hecho son el código bidimensional más popular en ese país.

Características generales.

Aunque inicialmente se usó para registrar repuestos en el área de la fabricación de vehículos, hoy, los códigos QR se usan para administración de inventarios en una gran variedad de industrias. Recientemente, la inclusión de software que lee códigos QR en teléfonos móviles, ha permitido nuevos usos orientados al consumidor, que se manifiestan en comodidades como el dejar de tener que introducir datos de forma manual en los teléfonos. Las direcciones y los URLs se están volviendo cada vez más comunes en revistas y anuncios. El agregado de códigos QR en tarjetas de presentación también se está haciendo común, simplificando en gran medida la tarea de introducir detalles individuales de un nuevo cliente en la agenda de un teléfono móvil.

Los códigos QR también pueden leerse desde PC, smartphone o tablet mediante dispositivos de captura de imagen, como puede ser un escáner o la cámara de fotos, programas que lean los datos QR y una conexión a Internet para las direcciones web.

El estándar japonés para códigos QR (JIS X 0510) fue publicado en enero de 1999 y su correspondiente estándar internacional ISO(ISO/IEC18004) fue aprobado en junio de 2000.

Un detalle muy importante sobre el código QR es que su código es abierto y que sus derechos de patente (propiedad de Denso Wave) no son ejercidos.

(4)

Posibles aplicaciones.

Cupones – Los códigos QR son una fantástica manera de obtener cupones en las manos de los consumidores y se puede colocar sobre los productos, estantes, puntos de venta, o incluso en los carteles fuera de la tienda.

Asesoramiento e información del consumidor – Con los códigos QR no sólo tiene que ofrecer descuentos y ahorros. Se pueden colocar junto a los productos para proporcionar información adicional. Por ejemplo, los vendedores de vino podría colocar un código QR junto con diversas variedades para asesorar a los usuarios sobre cuáles son los

alimentos que mejor acompañan.

Concursos - Con los códigos QR puede hacer intervenir al instante a un consumidor en una competición, o que los lleve a una página web donde pueden inscribirse en premios.

Juegos / Entretenimiento - Los códigos QR se puede utilizar para entretener a los consumidores, tal vez en el transporte público o en las salas de espera. juegos de marca o demos de juegos se pueden distribuir a través de códigos QR, como libre descarga de música y vídeo.

Tarjetas de visita y la literatura de la compañía – Códigos QR puede reducir el costo de la literatura en la tienda al permitir que los datos de contacto y catálogos para acceder al instante con un clic.

Publicidad - Dondequiera que se puede ver un código impreso en blanco y negro, o adheridos, pueden convertirse en espacios publicitarios. Podría ser un tatuaje temporal proporcionado a cabo en festivales o exposiciones, una camiseta, un anuncio impreso, trailer de cine, posa envases de bebidas, servilletas, ticket de caja, la tira deportiva, coche de carreras, el collar de la mascota, colores distintivos del vehículo, o incluso ser

incorporado en el tejido mismo de un edificio, tal este hotel Código QR.

Estar abierto cuando se está cerrada – Colocando un Código QR en la ventana de su tienda para que los consumidores puedan de manera más efectiva buscar en el inventario de la misma, incluso cuando su tienda física está cerrada para los negocios.

Tome la señalización de bienes raíces a un nuevo nivel al añadir los códigos QR que une a un tour de vídeo e imágenes desde el interior de la propiedad, o información sobre el área local.

Donaciones de caridad - sin fines de lucro se están utilizando cada vez más códigos QR que permiten una rápida y fácil donación a los necesitados, sobre todo utilizados durante el desastre del reciente terremoto de Japón.

Conectar a los consumidores a sus espacios sociales - Los Códigos QR permite a los consumidores conectarse en forma directa a la actividad de Facebook, Twitter, YouTube y otros servicios sociales.

Como se puede ver, el uso de código QR es limitado solamente por su imaginación.

¿Cuál es la más peculiar uso de un código QR que has visto?

(5)

Motivación.

Al leer un código QR podemos encontrar dificultades en la identificación del código, en imágenes con brillo desigual, con diferentes ángulos y distancias, además problemas de distorsión geométrica de la imagen debido al dispositivo de captura de la imagen.

La captura del código no será suficiente para identificar los datos que contiene, ya que podemos encontrarlo rotado, estirado o con diferentes tipos de zoom. Por tanto debemos de procesar la imagen antes de poder aplicarla a un algoritmo de decodificación de código QR.

Descripción del algoritmo.

El algoritmo para reconocer códigos QR es el siguiente:

1. Binarización de la imagen.

El proceso de binarización de la imagen tiene una gran importancia en el proceso de identificación de códigos QR.

Consiste en un proceso de reducción de la información de la misma, en la que sólo persisten dos valores: verdadero y falso. En una imagen digital, estos valores, verdadero y falso, pueden representarse por los valores 0 y 1, o más frecuentemente, por los colores negro (valor de gris 0) y blanco (valor de gris 255).

Una manera simple pero efectiva para separar los valores de blanco y negro se muestra a continuación:

1 si f(x,y) umbral g(x,y) =

0 si f(f,y) < umbral

El punto clave de la binarización es la elección del valor umbral más adecuado. Esto se puede realizar de manera manual, asignando el umbral que se desee a elección del usuario, aunque existen métodos para calcular el mejor valor umbral automáticamente.

Hay un gran número de métodos para la elección del valor.

(6)

Tanto si optamos por calcular el umbral manualmente o mediante un programa, el histograma sigue siendo el elemento más importante. Los máximos locales se

corresponden con los objetos de la imagen. En el mejor de los casos el histograma será

"bimodal", es decir, en el histograma se podrán reconocer dos picos claramente. Una técnica sencilla, pero también propensa a errores es elegir como valor umbral la media entre los dos picos del histograma. Otra técnica sencilla es elegir como umbral el valor más bajo entre los dos picos. Con este método seguramente se conseguiría una segmentación algo mejor.

Un método todavía mejor para calcular el valor de umbral automáticamente es el método de Otsu que se ha establecido como estándar, y que nosotros utilizamos en nuestro programa.

Método de Otsu

El método de Otsu, utiliza técnicas estadísticas, para elegir el mejor umbral. En concreto, se utiliza la variancia, para medir la dispersión de los niveles de gris.

El método de Otsu calcula el valor umbral de forma que la dispersión dentro de cada segmento sea lo más pequeña posible, pero al mismo tiempo la dispersión sea lo más alta posible entre segmentos diferentes. Para ello se calcula el cociente entre ambas variancias y se busca un valor umbral para el que este cociente sea máximo.

Exposición matemática

Como punto de partida tomamos dos segmentos de puntos (K0(t) y K1(t)), que serán definidos a partir del valor umbral t.

t es la variable que buscamos, y los dos segmentos son el resultado deseado en la segmentación.

Sea p(g) la probabilidad de ocurrencia del valor de gris 0 < g < G (G es el valor de gris máximo). Entonces la probabilidad de ocurrencia de los pixels en los dos segmentos es:

K0:

(7)

K1:

Si tomamos dos segmentos (o sea un solo valor umbral) la suma de estas dos probabilidades dará evidentemente 1.

Si es la media aritmética de los valores de gris en toda la imagen, y y los valores medios dentro de cada segmento, entonces se

pueden calcular las variancias dentro de cada segmento como:

y

La meta es mantener la variancia dentro de cada segmento lo más pequeña posible y conseguir que la variancia entre los dos segmentos sea lo más grande posible. Así obtenemos:

La variancia entre los segmentos es:

La variancia dentro de los segmentos se obtiene de la suma de ambas:

El valor umbral t se elige de manera que el cociente Q(t) sea máximo. Q(t) es por lo tanto la medida buscada. De esta forma elegimos un valor umbral que optimiza los dos segmentos en términos de variancia.

(8)

2. Corrección de la inclinación.

Cuando la imagen es capturada, a menudo aparece girada y necesita una operación de rotación para corregirse.

Para corregir este problema se opera como sigue:

Sabemos que cualquiera que sea la rotación, los patrones A,B y C tienen el mismo tamaño y forma. Los patrones de detección están compuestos de tres cuadrados concéntricos superpuestos, su relación del módulo entre blanco y negro en todas las direcciones será 1:1:3:1:1.

Para detectar las tres esquinas del código, se hace un barrido de la imagen fila por fila. Un pixel negro puede pertenecer al borde de una esquina, entonces se mira los demás de la fila mientras cumplen la proporción. Si tenemos la proporción entonces puede ser verdaderamente una esquina pero hace falta verificar

verticalmente. Se coge el punto central de la parte de la fila donde hemos detectado la proporción de manera horizontal, y a partir de este se verifica por arriba y abajo si la columna cumple la proporción. Si ocurre, es una esquina y guardamos el punto medio de la zona de la columna donde tenemos la proporción.

Para detectar las siguientes hace falta limitar el estudio a regiones de la imagen donde la distancia al centro encontrado. Se elige una distancia equivalente a la anchura de la esquina aunque más podría ser.

Después es el momento de determinar el ángulo de rotación.

(9)

Como muestra la figura, el área del cuadrado S es la imagen del código QR original, el cuadrado N es el área después de la operación. P1, P2 y P3 son los centros de los patrones de detección(también llamados “vértices”).

Asumiendo que el ángulo de rotación es Ɵ, se calcula la distancia mayor entre los 3 puntos centrales de los vértices, se supone P2 y P3.

Para calcular la pendiente de P2,P3:

Si k>-1 y k<1, entonces se requiere una rotación en el sentido de las agujas del reloj.

Ɵ=arctan((k-1)/(1+k))

Si no se cumple, entonces se necesitará una rotación en el sentido contrario a las agujas del reloj.

Ɵ=arctan(-(k-1)/(1+k))

Después de determinar las coordenadas del centro de la imagen, se calcula la longitud de uno de los lados:

nuevaLongitud = √2*LongitudOriginal*sin Ɵ

Después de la rotación se llevará a cabo una interpolación para que la imagen no quede distorsionada.

Los métodos más usados son el del vecino más cercano, bilineal y trilineal.

(10)

Se utiliza el del vecino más cercano por ser el más simple, con el tiempo de

procesamiento más corto y un rendimiento muy bueno en ejecución en tiempo real.

Aunque tiene por inconveniente una menor calidad de imagen que los otros métodos.

Corrección geométrica de la imagen.

La distorsión geométrica de la imagen aparece debido al ángulo de disparo, rotación de la imagen, si la superficie en la que se ubica el código no es plan, etc. Esto puede disminuir la tasa de reconocimiento de códigos.

El algoritmo para la corrección geométrica se explica a continuación:

Obtención de los cuatro vértices de la imagen.

Debido al proceso de rotación, el ruido externo ha sido eliminado, por lo tanto el código es escaneado línea por línea, en las 8 direcciones posibles (arriba, abajo, izquierda, derecha y la diagonales).

Se escanea en línea recta hasta que dos o más intersecciones encuentran el bloque negro(vértice). Después de el escaneo en las 8 direcciones, se consiguen,al menos, 16 puntos. El punto mostrado en ambas direcciones será el vértice.

Cuando estos pasos hayan sido completados, se habrán encontrado 3 o más vértices.

Basándose en la distancia entre vértices y el centro de los patrones de detección, se obtienen los 3 vértices más cortos, que serán los centros de los patrones.

(11)

Obtención de los nuevos valores e los vértices.

Los vértices P1,P2,P3 y P4 son los 4 vértices de la imagen del código QR sin distorsión.

P1’,P2’,P3’ y P4’ son los vértices de la imagen actual. f(x,y) será el valor en la coordenada (x,y) en la imagen corregida, y f(x’,y’) el valor en la coordenada (x’,y’) en la imagen no corregida.

Suponiendo que la coordenadas de Pi(1<=i<=4) son (xi,yi), y las coordenadas de Pi’(1<=i<=4) son (xi’,yi’).

Entonces existe la siguiente relación:

Los parámetros a,b,c,d,m,n,p,q pueden ser resueltos mediante el método de iteración de Jacobi, y con ésto realizar la transformación de un paralelepípedo a un cuadrado.

Obtener el valor en cada nuevo pixel.

Cuando el punto(x’,y’) se transforma en el punto (x,y) mediante la corrección de la distorsión geométrica, se debe de realizar una interpolación bilineal para determinar el

(12)

valor de f(x,y). Suponiendo las 4 coordenadas adyacentes de (x’,y’), las cuales son y los valores de la

coordenada .

Entonces la formula de la interpolación bilineal será:

En las nuevas versiones de los códigos QR, se añade un patrón de alineación que hace esta tarea más fácil.

Normalización de la imagen.

Una vez conseguida la imagen corregida geométricamente, casi tenemos la imagen terminada. El último paso será normalizar la imagen para que el decodificador entienda la información que le estamos introduciendo.

Primeramente, se obtiene el número de versión del algoritmo de decodificación para el código QR.

Después, se divide equitativamente la imagen del código QR en pequeñas mallas n x n, (este valor n tiene que ser acorde al número de versión del algoritmo, obtenido en el paso anterior). Buscamos el centro de cada malla y fijamos como punto de muestreo. A partir de ahí, se puede conseguir el valor del símbolo de la malla, haciendo una media de los valores contenidos en ella.

Corrección del error.

Aunque estás operaciones lleguen a modificar algunos pixeles de la imagen, qr puede llegar a corregir los errores. Existen 4 niveles de corrección de error y dependiendo del porcentaje de recuperación que queramos se necesitará más información al código.

Capacidad de corrección de error del código QR

Nivel L 7%

Nivel M 15%

Nivel Q 25%

Nivel H 30%

(13)

Bibliografía.

http://es.wikipedia.org/wiki/C%C3%B3digo_QR

http://es.wikipedia.org/wiki/M%C3%A9todo_del_valor_umbral http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5765349 http://qrbcn.com/imatgesbloc/Three_QR_Code.pdf

http://docencia-eupt.unizar.es/ctmedra/tutorial_opencv.pdf

http://harleyhacking.blogspot.com/2010/03/qr-code-image-processing-part-2.html http://code.google.com/p/zxing/

http://qrbcn.com/imatgesbloc/Three_QR_Code.pdf

http://www.labbookpages.co.uk/software/imgProc/otsuThreshold.html http://www.dandiggins.co.uk/arlib-9.html

Figure

Actualización...

Referencias

Actualización...

Related subjects :