ES2817926B2 - Codigo visual y procedimiento para codificar y decodificar una imagen bidimensional - Google Patents

Codigo visual y procedimiento para codificar y decodificar una imagen bidimensional Download PDF

Info

Publication number
ES2817926B2
ES2817926B2 ES201930861A ES201930861A ES2817926B2 ES 2817926 B2 ES2817926 B2 ES 2817926B2 ES 201930861 A ES201930861 A ES 201930861A ES 201930861 A ES201930861 A ES 201930861A ES 2817926 B2 ES2817926 B2 ES 2817926B2
Authority
ES
Spain
Prior art keywords
dimensional
visual code
frequency
waves
image
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES201930861A
Other languages
English (en)
Other versions
ES2817926A1 (es
Inventor
De Teruel Alcolea Pedro Enrique Lopez
Garcia Alberto Ruiz
Clemente Felix Jesús Garcia
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Universidad de Murcia
Original Assignee
Universidad de Murcia
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Universidad de Murcia filed Critical Universidad de Murcia
Priority to ES201930861A priority Critical patent/ES2817926B2/es
Priority to US17/766,378 priority patent/US11868844B2/en
Priority to PCT/ES2020/070599 priority patent/WO2021064273A1/es
Priority to EP20797811.5A priority patent/EP4044065A1/en
Publication of ES2817926A1 publication Critical patent/ES2817926A1/es
Application granted granted Critical
Publication of ES2817926B2 publication Critical patent/ES2817926B2/es
Priority to CL2022000811A priority patent/CL2022000811A1/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K19/00Record carriers for use with machines and with at least a part designed to carry digital markings
    • G06K19/06Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
    • G06K19/06009Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • G06K7/1404Methods for optical code recognition
    • G06K7/1408Methods for optical code recognition the method being specifically adapted for the type of code
    • G06K7/14172D bar codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K19/00Record carriers for use with machines and with at least a part designed to carry digital markings
    • G06K19/06Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
    • G06K19/06009Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking
    • G06K19/06037Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking multi-dimensional coding

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Electromagnetism (AREA)
  • Health & Medical Sciences (AREA)
  • Toxicology (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Image Processing (AREA)
  • Image Analysis (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

DESCRIPCIÓN
Código visual y procedim iento para cod ifica r y decodificar una imagen bidim ensional
La presente descripción se refiere a un código visual basado en codificación de frecuencias, que comprende una imagen sintetizada con un espectro de frecuencias característico, rodeada por un marco de color preferiblemente oscuro.
La descripción se refiere también a un procedimiento para codificar un código visual tal como el descrito, y a un procedimiento para decodificar este código visual. También se refiere a un producto de programa informático para ejecutar el procedimiento de codificación, así como a un producto de programa informático para ejecutar el procedimiento de decodificación.
La invención se encuadra dentro de las tecnologías para reconocimiento y el soporte de datos, más concretamente soportes de registro para utilización con máquinas.
ESTADO DE LA TÉCNICA ANTERIOR
Un código visual es una representación, por ejemplo, impresa o en formato digital, de una determinada información que es susceptible de ser leída automáticamente por algún tipo de dispositivo de adquisición o captura de imagen conectado a un sistema informático o electrónico (el dispositivo de adquisición o captura de imagen puede ser el propio sistema informático o electrónico). Como portador de una determinada cantidad de información, su capacidad se mide en el número de combinaciones distintas que pueden almacenarse y, posteriormente decodificarse. Por lo tanto, su capacidad puede cuantificarse simplemente con un número concreto N de bits almacenados.
En general, estos códigos son utilizados en una amplia variedad de aplicaciones tanto en la industria como en el comercio, es decir, allí donde se requiera la identificación sencilla de un elemento cualquiera sobre el que se quiera realizar un determinado tipo de seguimiento. Con el amplio rango de aplicaciones potenciales que ofrece la posibilidad de tener un acceso rápido a información vinculada con cada código, que cubren desde los ámbitos del comercio (control de stock, cálculo rápido del importe de una compra, etc.) hasta la sanidad (acceso inmediato a expedientes médicos, control de material médico, etc.), pasando por la seguridad (control de accesos, identificación de personal, etc.), el entretenimiento (videojuegos, realidad aumentada), o las aplicaciones industriales (control de procesos de fabricación, trazabilidad, etc.), se puede decir que los códigos visuales son ya ubicuos en casi cualquier ámbito de la economía y la sociedad.
Históricamente, los primeros códigos visuales eran unidimensionales (los populares códigos de barras, introducidos originalmente en [US Patent 2,612,994 (1952) “Classifying apparatus and method"]), y estaban diseñados para su lectura mediante dispositivos basados en una tecnología óptica específica que, en su momento, permitía fabricar sensores más sencillos y baratos que las cámaras. Dichos códigos fueron rápidamente adoptados por los servicios postales en sus inicios, si bien se extendieron posteriormente con rapidez en el ámbito del etiquetado e identificación de productos, tanto en entornos comerciales como industriales, generalizándose la gama de sensores disponibles, que en la actualidad suelen estar ya basados en láser o en cámaras convencionales.
A partir de la década de los 90, y precisamente a partir de la disponibilidad cada vez mayor de dispositivos de adquisición digital de imágenes conectables a, por ejemplo, un sistema informático, comenzaron a desarrollarse los códigos bidimensionales. Un código bidimensional, también llamado matricial, representa igualmente la información de una forma fácilmente detectable y decodificable visualmente de forma automática, pero tiene la ventaja de poder almacenar más información en una misma área. El código visual de este tipo más conocido es sin duda el código QR [US Patent 5,726,435 (1998) “Optically readable twodimensional code and method and apparatus using the same"].
La característica principal de estos códigos QR es que comprenden matrices binarias bidimensionales, en las que cada celda puede tomar un color blanco o negro, y que permiten diversos tamaños (en número de celdas) de cara a ofrecer una amplia gama de capacidades distintas, pudiéndose, en los de mayor resolución, incluso llegar a codificar hasta URLs completos, con varios centenares de bytes.
A partir de los códigos QR descritos, se han propuesto otros códigos bidimensionales similares. Algunos de los ejemplos más populares son los AztecCodes, AR Codes, DataMatrix, EZ codes, usados en los ámbitos comerciales, industriales, transportes, videojuegos o realidad aumentada, entre otros muchos. Todos estos diseños son estrictamente binarios, basándose los respectivos códigos en el uso exclusivo del blanco y el negro, habitualmente en forma de matriz dividida en celdas cuadradas, sin faltar tampoco diseños alternativos, como el circular en el que está basado ShotCode. De todos ellos puede obtenerse información muy completa en, por ejemplo, [https://en.wikipedia.org/wiki/Barcode#Matrix_(2D)_barcodes)].
Una idea adicional, explotada por propuestas posteriores, es la extensión de la idea original de los códigos bidimensionales matriciales binarios para incluir colores diferentes al blanco y negro puros (por ejemplo, los colores primarios rojo, verde y azul, o sus complementarios cian, magenta y amarillo) para aumentar la capacidad de los códigos, manteniendo acotado el número de celdas de los mismos. Sin embargo, éste tipo de códigos con matrices de celdas de colores no son robustos en condiciones de iluminación adversa.
Por otro lado, en los códigos de matriz tradicionales la capacidad de almacenamiento para una determinada distancia depende de la máxima resolución angular de la cámara. La robustez del proceso de decodificación depende críticamente de la integridad de las celdas, que en imágenes de baja calidad suele ser frágil por la contaminación de los niveles de gris de las celdas vecinas. Debido a esto, la gran mayoría de los códigos visuales conocidos deben reservar un importante número de bits para introducir alguna forma de redundancia con el objetivo de detectar (y en algunos casos incluso autocorregir) posibles errores en el proceso de decodificación (bits de paridad, checksums, CRCs, códigos polinomiales, Reed Solomon, etc.).
En consecuencia, hay una necesidad de un código visual que resuelva al menos parcialmente los problemas mencionados anteriormente.
EXPLICACIÓN DE LA INVENCIÓN
En un aspecto, un código visual comprende una imagen bidimensional, la cual es el resultado de aplicar una operación matemática predeterminada (por ejemplo, una adición) sobre un número c de ondas bidimensionales determinadas por al menos dos parámetros, a saber, una primera frecuencia espacial u en una primera dirección y una segunda frecuencia espacial v en una segunda dirección diferente de la primera.
Esta construcción del código visual proporciona la redundancia necesaria para la detección y corrección de errores, ya que ésta se basa en la coherencia global de las ondas componentes, sin que la modificación aleatoria de un número relativamente elevado de píxeles afecte al proceso de decodificación.
En un ejemplo las ondas bidimensionales pueden ser ondas puras en el plano, como sinusoides bidimensionales. La operación de adición (también llamada superposición) es una suma punto a punto en el plano.
En otro aspecto, un procedimiento para codificar una imagen bidimensional comprende las etapas de:
predefinir una colección de ondas bidimensionales como componentes potenciales de la imagen bidimensional, estando cada una de estas ondas bidimensionales determinada por al menos dos parámetros, a saber, una primera frecuencia espacial u en una primera dirección y una segunda frecuencia espacial v en una segunda dirección diferente de la primera; predeterminar un número natural c de dichas ondas bidimensionales para componer la imagen bidimensional;
seleccionar un número c de ondas bidimensionales de entre todas las de la colección; componer la imagen bidimensional aplicando una operación matemática predeterminada sobre las c ondas bidimensionales seleccionadas;
formar un código visual enmarcando la imagen bidimensional con una banda de un color predeterminado cuyo contorno es una curva plana cerrada predeterminada; y
reproducir el código visual en una etiqueta.
En otro aspecto, un procedimiento para decodificar un código visual reproducido en una etiqueta de identificación comprende las etapas de:
captar una imagen plana de la etiqueta mediante un sensor óptico;
calcular la Transformada Discreta de Fourier (DFT) de esta imagen plana;
extraer de esta DFT c componentes de frecuencia dominantes, tanto para una primera frecuencia espacial u’ como para una segunda frecuencia espacial v’; y
buscar una identificación entre estas c componentes dominantes de primera frecuencia espacial u’ y segunda frecuencia espacial v’ con c ondas bidimensionales de una colección predeterminada de ondas bidimensionales, cada una de las cuales está determinada por al menos dos parámetros, a saber, una primera frecuencia espacial u en una primera dirección y una segunda frecuencia espacial v en una segunda dirección diferente de la primera.
La DFT también puede proporcionar las fases angulares de las componentes de frecuencia dominantes. Estas fases se pueden asociar a los valores más cercanos dentro de un conjunto de fases posibles.
Otros objetos, ventajas y características de realizaciones de la invención se pondrán de manifiesto para el experto en la materia a partir de la descripción y las reivindicaciones, o se pueden aprender con la práctica de la invención.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
A continuación se describirán realizaciones particulares de la presente invención a título de ejemplo no limitativo, con referencia a los dibujos adjuntos, en los cuales:
La Figura 1 muestra varios ejemplos de códigos visuales de acuerdo con la invención.
La Figura 2 muestra las ondas componentes de un código visual de ejemplo.
La Figura 3 muestra la combinación (suma) de las ondas de la Figura 2.
La Figura 4 muestra una amplificación de contraste de la Figura 2: potencia 0,75, tritono y blanco/negro.
La Figura 5 muestra un mapa de enumeración de frecuencias 2D.
La Figura 6 muestra otro ejemplo de código visual.
La Figura 7 muestra un nuevo ejemplo de código visual.
La Figura 8 muestra un diagrama de flujos de un procedimiento para localizar y rectificar posibles códigos candidatos ubicados en posiciones cualesquiera de la imagen.
La Figura 9 muestra un diagrama de flujos de un procedimiento para decodificar un código visual.
La Figura 10 muestra esquemáticamente un escenario de aplicación, en el que una o más cámaras, conectadas a una intranet, envían las imágenes captadas en una determinada zona de una planta a un sistema informático central (por ejemplo, un servidor), donde son procesadas. Circulando por la planta hay, por ejemplo, carretillas móviles portando algún tipo de producto sobre el cual se ha adherido una etiqueta con uno de los códigos visuales.
EXPOSICIÓN DETALLADA DE MODOS DE REALIZACIÓN
Uno de los objetivos de la invención es el diseño de un código visual, junto con los correspondientes procedimientos automatizados de codificación y decodificación del mismo a partir de imágenes tomadas con un dispositivo de captura adecuado, por ejemplo, una cámara. El código visual está rodeado por un contorno negro para facilitar su localización y consiste en una imagen sintetizada con un espectro de frecuencias característico, diseñado explícitamente para ser decodificado de forma robusta y eficiente en condiciones de captura problemáticas, tales como las degradaciones y pérdidas de resolución crecientes que se producen al alejar el código a identificar del sensor óptico de una cámara y/o variar significativamente las condiciones lumínicas.
Estos códigos están diseñados para ser impresos sobre una etiqueta, papel, adhesivo, plástico, tejido, o cualquier otro tipo de soporte que pueda ser adherido por algún medio a cualquier tipo de activo potencialmente móvil (productos, materiales, personas, etc.) sobre el que interese realizar un seguimiento o trazabilidad. Una característica fundamental de los mismos, pues, es que son extremadamente robustos a variaciones grandes de iluminación en el escenario de decodificación: típicamente, son fundamentalmente las cámaras las que están situadas de forma estática en puntos clave del escenario de aplicación, aunque no existe tampoco ninguna limitación en que éstos puedan ser igualmente detectados por cámaras móviles, como por ejemplo cámaras montadas en carretillas motorizadas, pero los códigos están situados indefectiblemente en activos móviles, y pueden sufrir, por lo tanto, grandes variaciones en la iluminación que reciben. Ello afecta en gran medida a cómo son sensorizados por los correspondientes dispositivos de captura de imagen. Las consideraciones principales de diseño de los códigos visuales propuestos se basan fundamentalmente, pues, en la idea de hacer los procesos de localización y posterior decodificación lo más robustos posible a las degradaciones de imagen producidas habitualmente en dichas condiciones de movilidad y cambios de iluminación constantes.
Por otro lado, los códigos visuales propuestos en esta invención poseen, por construcción, un alto grado de redundancia que proporciona de forma natural una gran robustez en el proceso de decodificación. El código establece un compromiso entre la capacidad de almacenamiento de información y la robustez en la detección a largas distancias. Dicho compromiso se obtiene mediante la elección del repertorio óptimo de frecuencias y fases que pueden intervenir en los códigos en función de la resolución y rango dinámico efectivos de una cámara.
Estos códigos están especialmente diseñados para su uso industrial; en particular su ámbito principal de aplicación es la identificación de productos, cajas o palets en el control de trazabilidad, si bien tampoco se descartan otras aplicaciones alternativas, como, por ejemplo, la localización de personas, vehículos o cualquier otro tipo de activos móviles. Usando esta tecnología, resulta viable realizar la lectura de códigos a varios metros de distancia, incluso para tamaños de impresión de etiquetas relativamente pequeños (por ejemplo, de entre 5 y 10 cm de lado), requiriéndose únicamente una línea visual directa entre el código y el dispositivo de captura de imagen (habitualmente una cámara conectada con un dispositivo informático, usando cualquier medio de comunicación inalámbrico o cableado). Además, puede conseguir la lectura simultánea y computacionalmente eficiente de varios códigos en cada imagen capturada, permitiendo así cubrir un espacio visual y de trabajo amplio con una sola captura. Resulta, por tanto, una solución más económica y flexible que otros sistemas de identificación, como soluciones inalámbricas (por ejemplo, RFID), que, además de más costosas, pueden tener menos garantías en entornos poco controlados, donde pueda haber interferencias causadas por elementos como agua o metal.
Las principales novedades aportadas por un código visual de la invención son:
a) se basa en principios de diseño radicalmente diferentes a los del resto de códigos visuales previos, en particular, no usa una matriz bidimensional de celdas;
b) la redundancia necesaria para la detección y corrección de errores se basa en la coherencia global de las ondas componentes, que están extendidas completamente en la imagen, sin que la modificación aleatoria de un número relativamente elevado de píxeles afecte al proceso de decodificación; y
c) la capacidad de almacenamiento puede graduarse mediante sencillos parámetros de configuración, sin necesidad de cambiar el diseño del código.
Los parámetros de configuración incluyen la frecuencia máxima permitida, relacionada con la distancia deseada de detección y la resolución angular efectiva disponible; y el conjunto de fases posibles para dichas frecuencias, relacionado con la precisión del proceso previo de localización del código en la imagen de entrada.
La Figura 1 muestra varios ejemplos de códigos visuales. El aspecto visual es novedoso y estéticamente atractivo, con formas de suave curvatura (que a veces se parecen a las manchas de la piel de las cebras).
Los códigos visuales de la invención están formados por la superposición (suma punto a punto) de ondas puras en una región cuadrada del plano. La Figura 2 muestra este tipo de ondas, mientras que la Figura 3 muestra el resultado de la superposición.
El resultado de esta suma se somete a una etapa final de normalización que puede consistir simplemente en un re-escalado de rango para producir un código "continuo” como el de la Figura 3, o bien en una modificación no lineal del contraste que, en la práctica, puede reducirse a un sencillo umbralizado. En este último caso se obtiene un código en blanco y negro, como los mostrados en la Figura 1, sin niveles de gris intermedios. Alternativamente, puede aplicarse una umbralización de 3 niveles: blanco, gris y negro (marcador "tritono”). Los diferentes tipos de amplificación de contraste se muestran en la Figura 4.
Este proceso reduce los costes de impresión y en algunas condiciones de trabajo puede mejorar la discriminación de los códigos. El procedimiento de decodificación que se describirá más adelante es completamente independiente de la amplificación de contraste elegida.
Entrando en detalle, cada una de las ondas que pueden utilizarse para componer un determinado código se especifica por una tupla de tres números (u,v,p), de modo que, para cualquier posición [x, y] del plano:
código [x, y ] = £ £ =1 onda (uk, vk, pk) [x, y ] (ecuación 1)
donde
o n d a (u ,v ,p )[x ,y ] = cos(2n(ux vy) p)
Los números u y v son números enteros que representan respectivamente las frecuencias vertical y horizontal de la onda en ciclos por unidad de longitud (correspondientes a la base de representación de la Transformada Discreta de Fourier (DFT) 2D) y el número real p es la fase que se aplica a la onda. En nuestro caso la unidad de longitud la marca el lado del cuadro donde se inscribe el código.
Una onda real de parámetros (u,v,p) es indistinguible de la definida por (-u,-v,-p), con frecuencias y fase opuestas, por lo que las ondas se especifican por convención con tupias con u>0.
Cada tupla de frecuencia (u,v) y su onda correspondiente se nombra mediante un número entero positivo como se muestra en la Figura 5, de tal manera que dichos enteros queden ordenados para todas las tuplas posibles de menor a mayor frecuencia escalar w = V u 2 v 2 y, en caso de empate, de menor a mayor frecuencia horizontal.
El conjunto o catálogo de códigos que se utilizan en una aplicación concreta queda definido por un determinado "esquema de codificación”, que incluye: un repertorio de frecuencias, un repertorio de fases y un número de componentes.
En relación con el repertorio de frecuencias, este viene dado por las frecuencias mínima y máxima permitidas para componer un código. Por ejemplo, utilizando la Figura 5, un esquema de codificación puede utilizar 29 ondas desde la número 5 hasta la 33.
El repertorio de fases es el conjunto de fases posibles alternativas que podemos elegir para cada onda. Por ejemplo, un repertorio con 4 fases equidistantes es el compuesto por:
Figure imgf000010_0001
El esquema de codificación queda completamente determinado al especificar el número total de componentes c que aparecen mezcladas en el código. En aplicaciones que requieran gran robustez frente a condiciones adversas es razonable establecer entre 3 y 6 componentes.
La combinatoria puede aumentarse eligiendo diferentes amplitudes en la combinación de ondas. Sin embargo, experimentalmente se observa un grado de atenuación de las diferentes frecuencias bastante irregular y, por tanto, el uso de amplitudes intermedias complica la discriminación de los armónicos espurios. En consecuencia, para mayor robustez se recomienda usar la misma amplitud en todas las componentes del código.
Para representar de manera simple un esquema de codificación, se define la siguiente sintaxis: c-RF-RP, donde c es el número de componentes, RF es el repertorio de frecuencias y RP el repertorio de fases. Como ejemplo, un esquema de codificación de 4 componentes con frecuencias desde la 5 a la 33 y 4 fases (A-D), queda completamente especificado mediante la expresión: 4-5:33-ABCD.
Para representar un código visual, se define cada componente con la siguiente sintaxis: lp; donde n¡>indica el número de frecuencia en el repertorio de frecuencias y lp indica la letra asociada a la fase. Como ejemplo, el código de las Figuras 2, 3 y 4, que pertenece al esquema de codificación 4-5:33-ABCD, queda completamente especificado mediante la expresión: 9A 18A 29C 33B. Los valores 9, 18, 29 y 33 hacen referencia a las frecuencias definidas en la Figura 5 y los valores A, B y C a las fases indicadas anteriormente.
Los códigos visuales necesitan una enumeración efectiva en base al esquema de codificación elegido. Por tanto, a cada posible código de un determinado esquema se le asigna un número de orden entre 1 y el número total de códigos disponible. Existen varias formas de realizar la enumeración.
Una posible enumeración es por frecuencia. En esta enumeración las fases avanzan más rápido que las frecuencias y éstas se ordenan en base a la mayor de todas. De esta forma, el código numérico está relacionado con la máxima distancia de lectura: los códigos inferiores contienen solo bajas frecuencias y pueden leerse a mayores distancias. Los códigos superiores contienen frecuencias más altas y serán de menor alcance.
La enumeración de posibilidades usando el esquema de codificación 4-5:33-ABCD (que trabaja con combinaciones de 4 frecuencias de entre 29 posibles, con 4 posibles fases para
cada una, para un total de ^ í29 J \ • 44 = 6,080,256 combinaciones distintas) y la enumeración
por frecuencia puede seguir el siguiente esquema:
Número orden Código Número orden Código
1 5A 6A 7A 8A
2 5A 6A 7A 8B 256 (= 44) 5D 6D 7D 8D
3 5A 6A 7A 8C 257 5A 6A 7A 9A
4 5A 6A 7A 8D
5 5A 6A 7B 8A 6080255 30D 31D 32D 33C
6 5A 6A 7B 8B 6080256 30D 31D 32D 33D Otra alternativa de enumeración es por fase. En esta modalidad de enumeración, las frecuencias avanzan más rápido que las fases, de modo que códigos próximos en la sucesión poseen una estructura de frecuencias distinta. Por tanto, si la detección de fase es errónea, el código estimado tiene un número de orden muy alejado. Esta característica es útil para detectar errores en escenarios de trabajo en los que en cada sesión los productos se etiquetan con números consecutivos.
La secuencia de enumeración usando de nuevo el mismo esquema anterior de codificación 4-5:33-ABCD (con las mismas 6,080,256 posibilidades asociadas), pero usando en este caso la enumeración por fase queda del siguiente modo:
Número orden Código Número orden Código
1 5A 6A 7A 8A
2 5A 6A 7A 9A 23751 (= ( 249> 30A 31A 32A 33A
3 5A 6A 7A 10A 23572 5A 6A 7A 8B
4 5A 6A 7A 11A
5 5A 6A 7A 12A 6080255 29D 31D 32D 33D
6 5A 6A 7A 13A 6080256 30D 31D 32D 33D
La amplificación de contraste provoca que las ondas componentes dejen de ser sinusoides puras y el espectro de frecuencias se contamina con armónicos indeseados. Este fenómeno se aprecia especialmente en los códigos saturados a blanco y negro.
En el caso unidimensional, el resultado de este tipo de saturación es una onda cuadrada, cuyo espectro de frecuencias incluye, además de la fundamental w, sucesivos 3w, 5w, etc. con amplitudes progresivamente decrecientes 1/3, 1/5, etc. En dos dimensiones la situación es más complicada, al producirse interacciones complejas entre las diferentes direcciones espaciales. Como consecuencia, existen configuraciones como, por ejemplo, 9A 10A 11C 18C que es perfectamente válida en modo continuo (o tritono) pero que en modo binario presenta armónicos que enmascaran completamente las frecuencias propias del código.
Para evitar estas situaciones se pre-computa una lista de excepciones para modo binario: dado un esquema de codificación, se analizan todos los posibles códigos en formato blanco y negro, y se almacenan todas aquellas configuraciones de frecuencias que tienen armónicos potencialmente problemáticos. Dependiendo de la capacidad del esquema de codificación, este proceso requiere entre unos pocos minutos y varias horas.
En muchas aplicaciones el código visual puede aparecer en cualquier orientación respecto a la vertical de la cámara, siendo necesario determinar la orientación correcta. En principio esto puede hacerse mediante la inclusión de algún elemento adicional al marco cuadrado, lo que puede resultar estéticamente poco atractivo, o mediante el uso de códigos invariantes a rotaciones de 90 grados, lo que reduce enormemente la capacidad de almacenamiento.
Una ventaja adicional de estos códigos es la detección automática de orientación gracias a las propiedades matemáticas de las ondas bidimensionales utilizadas como soporte de la información. Una onda (u,v,p) es indistinguible de (u,v,-p) en un marcador rotado 180°, y en rotaciones de 90° es indistinguible de ondas que intercambian u con v y pueden cambiar el signo de v y/o de p. Para deshacer esta ambigüedad se propone el siguiente procedimiento.
El procedimiento consiste en restringir la onda de menor frecuencia a un determinado cuadrante (cuyos números aparecen en color claro en la Figura 5, aproximadamente la mitad del total) y asignar a dicha menor frecuencia una fase positiva (códigos A o B, en el esquema de 4 fases). Esto reduce el número de configuraciones a la cuarta parte, como cabe esperar de las cuatro posibles orientaciones del código.
Como podrá verse en el procedimiento de decodificación, la composición y orientación del código se determina conjuntamente con un único análisis de frecuencias mediante la (FFT) [J. W. COOLEY & J. W. TUKEY, "An Algorithm for the Machine Calculation of Complex Fourier Series," Math. Comput., Vol. 19, no. 2, pp. 297-301, Apr. 1965].
A partir de todo lo descrito, un procedimiento de codificación de un código visual, definido un esquema de codificación c-RF-RP y una enumeración de los códigos, dado un entero n (número deseado), un tamaño de la imagen resultado M y una amplificación de contraste a entre cero y uno, puede comprender las siguientes etapas:
1) Utilizando la enumeración definida, obtener las frecuencias y fases de cada uno de los componentes para el número n.
2) Construir la combinación de ondas con la Ecuación 1 considerando un plano MxM.
3) Para amplificar el contraste se eleva el resultado de cada punto del plano MxM a la potencia a (según la fórmula s ig n (r )
Figure imgf000014_0001
siendo r el valor de entrada, para manejar adecuadamente tanto los valores positivos como los negativos) y se transforma linealmente el rango final de valores al intervalo 0-255 (o el que corresponda con el negro y blanco, respectivamente, en el formato de imagen utilizado).
4) Para construir el código en blanco y negro, el paso anterior se reduce a convertir en 0 los puntos cuya suma es negativa y en 255 los positivos. Para crear los códigos tritono se aplica el doble umbral [0,99] ^ 0, [100,155] ^ 128, [156,255] ^ 255.
5) Finalmente se añade el marco negro y se imprime la imagen.
Como ejemplos, el código 5A 6D 7A 13D en el esquema de codificación mencionado 4-5:33-ABCD y el código 8B 9A 11D 20B se muestran en las Figuras 6 y 7, respectivamente, con tres variantes de amplificación de contraste: a=0.75, tritono, y blanco y negro.
Para el paso o etapa 3), de manera equivalente, puede utilizarse una matriz compleja de tamaño MxM, inicializada a cero, en la que se rellenan las posiciones u,v correspondientes a las frecuencias Fk de acuerdo con la Figura 5 con el valor e lPk, y se toma la parte real de la Transformada Rápida Inversa de Fourier (IFFT) de esta matriz.
Para ilustrar la capacidad de almacenamiento de un código visual de la invención, la siguiente tabla muestra el número de códigos diferentes en varios esquemas de ejemplo que incluyen la detección automática de orientación. En el esquema blanco y negro la capacidad está disminuida por la lista de excepciones. En los demás se indica la capacidad máxima sin este tipo de reducción.
Esquema de cod ificación Contraste Capacidad
4 -5 :33 - ABCD blanco y negro 1,293,184
5 -5 :43 -A B C D continuo/tritono 151,138,816
6 -5 :33 -A B C D continuo/tritono 509,267,968
6 -5 :33 -A B C D continuo/tritono 3,448,807,424
Obsérvese, para el ejemplo de la primera fila de la tabla, que el número original de
combinaciones ^ í29 J \ • 44 = 6,080,256ha quedado reducido aquí a sólo algo más de un
millón, por los dos motivos explicados anteriormente: en primer lugar por la división por 4 causada por la invarianza a la orientación, y en segundo lugar por la cantidad de combinaciones excepcionales eliminadas por tener armónicos problemáticos (que en este caso resultan ser 226,880). Por esta razón, el número total de combinaciones para ese caso es de 6,080,256 / 4 - 226,880 = 1,293,184).
Una vez impresa una etiqueta con un código determinado sobre papel, adhesivo, plástico, tejido, u otro tipo de soporte que pueda ser adherido por algún medio a cualquier tipo de activo (productos, materiales, personas, etc.) sobre el que interese realizar un seguimiento o trazabilidad, es necesario describir el procedimiento para localizar y decodificar correctamente el código a partir de una imagen en la que el mismo aparezca visible. Un posible escenario de aplicación sería el mostrado en la Figura 10, que se describirá detalladamente más adelante, donde una serie de una o más cámaras 101, conectadas a una intranet 105 envían las imágenes captadas en una determinada zona de una planta a un sistema central 106, donde serán procesadas. Circulando por la planta podría haber, por ejemplo, carretillas móviles 102 portando algún tipo de producto 103 sobre el cual se ha adherido una etiqueta con uno de los códigos 104. Es posible que en una misma imagen aparezcan varios códigos, así como que, simultáneamente, varias cámaras capturen un mismo código o conjunto de códigos en cada instante determinado. Un software de procesamiento de imagen instalado en el servidor debe procesar cada imagen de entrada para detectar cada uno de los posibles códigos visibles en cada imagen procesada. A continuación se describen las etapas involucradas en este procesamiento, cuyo esquema global se define en dos fases: localización de códigos en la imagen y proceso de decodificación.
La Figura 8 muestra de manera esquematizada el procedimiento de localización de códigos en la imagen. El procedimiento comienza con la localización exacta en la escena de cada código candidato. Para ello, se procede primero con un algoritmo de umbralizado dinámico de la imagen, que tiene en cuenta las posibles diferentes condiciones de iluminación en diferentes áreas de la imagen de entrada. Se utiliza un umbral adaptativo, que calcula el valor de un umbral diferente para cada posición de la imagen, dependiendo de la distribución de valores de gris de una pequeña región de imagen alrededor de cada píxel, tal y como se describe, por ejemplo, en [ “Local Adaptive Thresholding." Li S.Z., Jain A. (eds) Encyclopedia of Biometrics. Springer" (2009)]. A continuación, se procede con un algoritmo de extracción de contornos cerrados sobre la imagen binarizada resultante, que son posteriormente reducidos mediante una aproximación poligonal (por ejemplo, siguiendo el procedimiento descrito en [ “Algorithms for the reduction of the number of points required to represent a digitized line or its caricature", David Douglas & Thomas Peucker, The Canadian Cartographer 10(2), 112-122, (1973)]). Sólo aquellos contornos que pasen un test de ser proyectivamente equivalentes a un cuadrado pasan a la siguiente etapa de procesamiento. Cabe decir también aquí que la corrección de la posible distorsión radial introducida por la cámara no se considera en principio necesaria, ya que los códigos están explícitamente diseñados para ser pequeños y ser visualizados a larga distancia. No obstante, para su visualización cercana (por ejemplo, con un teléfono inteligente o smartphone situado cerca del código), puede tener que realizarse en algún caso una pre-corrección de dicha distorsión, especialmente para objetivos de tipo gran angular.
En una segunda etapa de procesamiento, y tras un opcional alineamiento sub-píxel de cada contorno extraído, se usan sus cuatro esquinas para realizar una rectificación homográfica de la imagen original a un marco canónico cuadrado de tamaño suficiente, por ejemplo (sin pérdida de generalidad) de 100x100 píxeles.
A continuación, se describe el procedimiento de decodificación del código visual a partir de una imagen cuadrada resultante del procedimiento de detección y rectificación anterior.
Definido un esquema de codificación c-RF-RP y una enumeración de los códigos:
1) Se calcula la Transformada Rápida de Fourier (FFT) de la zona cuadrada interior al marco negro.
2) Se extraen las frecuencias u<10 y |v|<10 del FFT y se descartan aquellas con un valor menor que la frecuencia mínima del esquema de codificación.
3) Se ordenan de mayor a menor módulo y se normalizan dividiendo por el máximo módulo.4
4) Se calculan las fases de las c componentes de frecuencia dominantes, y para cada una de ellas, su fase más cercana a las disponibles en RP.
5) Si la enumeración definida aplica la restricción indicada con anterioridad, se calculan las posiciones y valores de los c componentes dominantes correspondientes a las otras tres posibles orientaciones del código. Esto puede hacerse rotando sucesivamente 90° la imagen y repitiendo cada vez las etapas anteriores 1 a 4.
Sólo una de las cuatro alternativas es válida considerando la restricción de frecuencia y fase especificadas anteriormente.
El procedimiento termina entregando el número correspondiente que se obtiene a partir de las componentes detectadas, que pertenecen al esquema de codificación, según la enumeración definida.
Es recomendable ampliar el procedimiento de decodificación anterior para conseguir la protección ante la eventualidad de que, en imágenes muy deterioradas, los errores de alineamiento o el ruido de imagen produzcan algún componente falso que pueda incluso superar en amplitud a una onda componente verdadera. La Figura 9 muestra de manera esquematizada este procedimiento ampliado. La modificación fundamental respecto al procedimiento base es que, tras extraer las componentes frecuenciales y ordenarlas por su magnitud según los pasos 1 a 4 anteriores, se pueden llegar a considerar distintos subconjuntos de c componentes de entre los c+k de mayor magnitud (siendo k cualquier entero positivo pequeño, por ejemplo, igual a 1 o 2). Naturalmente, esto sólo tiene que hacerse en el caso de que el espectro frecuencial obtenido ofrezca dudas, por ejemplo, porque no hay un salto claro de magnitud entre la componente c y la c+1 (ya que las magnitudes de las componentes de la FFT obtenidas a partir de la componente c+1, ésta incluida, deben idealmente anularse).
Tal y como se muestra en el procedimiento de la Figura 9, se consideran entonces tres casos bien diferenciados:
a) Que haya c componentes no nulas muy claras, con un salto de magnitud apreciable respecto a la componente c+1, y con fases muy cercanas a las canónicas A, B, C y/o D. En este caso se tiene un código bien detectado directamente.
b) Que entre la componente c y la c+1 este salto no sea tan claro. En ese caso se pueden generar diferentes combinaciones usando diferentes subconjuntos de c elementos de entre los c+k mencionados anteriormente, y para cada uno de ellos generar una imagen sintética con la que comparar píxel a píxel la original debidamente rectificada. Si en estas comparaciones hay una que destaca entre las demás por estar particularmente cerca de la imagen de entrada, se da también el código correspondiente como correctamente detectado. Algo similar puede también hacerse si, por ejemplo, una o varias componentes tienen una distancia de fase con respecto a las básicas A, B, C o D superior a un determinado umbral, aumentándose el número de alternativas progresivamente también en este caso.
c) Que el espectro obtenido se diferencie claramente de uno con únicamente c picos de frecuencia, o bien alguna(s) de las fases obtenidas esté(n) muy lejos de las canónicas A, B, C y/o D, o finalmente, que habiendo probado las combinaciones mencionadas en b), ninguna de ellas destaque particularmente al ser comparada con la original. En cualquiera de estos casos el cuadrilátero es rechazado y no se da ningún código por detectado.
En el paso o etapa 5 del procedimiento se propone rotar sucesivamente 90° la imagen, calculando de nuevo la FFT y repitiendo los primeros pasos, pero supone un gasto de tiempo innecesario, toda vez que la posición y fase de los elementos dominantes en una rotación de 90° son directamente deducibles de los valores originales.
Las frecuencias cambian de forma sencilla:
F (u ,v ) ^ F ( - v ,u )
Para calcular la fase resultante de esta rotación hay que tener en cuenta un factor de corrección procedente de la inversión de uno de los ejes del espacio de frecuencias. En un dominio continuo (en el sentido de no discretizado), la transformada de una rotación es exactamente igual a la rotación de la transformada, pero en el caso discreto hay una asimetría: la primera muestra coincide con el principio del período de muestreo mientras que la última se sitúa un intervalo de muestreo antes del final. Teniendo esto en cuenta, para una resolución NxN la corrección es:
F (u ,v ) ^ F (u ,v )e x p ( i2 n v /N )
Finalmente, es preciso aplicar una segunda corrección a la fase, causada por la diferencia entre los intervalos de muestreo del código impreso (que suele tener resolución SxS moderadamente alta para evitar pixelización, p.ej. S=250) y la imagen rectificada de entrada (que tiene menor resolución, NxN, por ejemplo, N=64, para agilizar el proceso de decodificación). La corrección es:
Figure imgf000019_0001
En estas condiciones, si el proceso anterior se aplica directamente sobre la matriz de pixeles de un código continuo (sin amplificación de contraste), sin pasar por el proceso de impresión y captura con una cámara, la fase calculada coincide exactamente (salvo ruido numérico) con la fase establecida al generar el código. En otras palabras, la detección de fase no introduce perturbaciones adicionales a las de sensorización y amplificación de contraste.
El procedimiento ampliado requiere construir varios códigos candidatos para comparar con la imagen de entrada. Esto puede hacerse, por supuesto, mediante el procedimiento de codificación general explicado anteriormente, basado en la trasformada inversa de Fourier. Sin embargo, únicamente se necesita componer un número pequeño de elementos de la base, por lo que resulta más eficiente pre-computar en un array las ondas del repertorio de frecuencias. De esta forma la generación del código se reduce simplemente a la suma punto a punto de los elementos seleccionados.
Para el preprocesamiento de la imagen rectificada, no es necesario realizar ninguna operación. El procedimiento de decodificación trabaja directamente con el cuadrángulo rectificado monocromo. En particular, no se aplica ningún filtro previo, ni de suavizado ni de paso alto, como los utilizados para eliminar ruido o mejorar el contraste en sistemas de codificación de matriz tradicionales. Tampoco se realiza ningún proceso de balance de blancos, corrección de color o ecualización de histograma. Toda la información necesaria y suficiente para la decodificación de un código visual de acuerdo con la invención se extrae de la FFT de la imagen original.
Gracias al cálculo del error de reconstrucción mediante la síntesis de candidatos con ondas pre-computadas, el tiempo de cómputo del proceso de decodificación está dominado por las operaciones esenciales de rectificación previa del cuadrángulo candidato y la FFT del paso 1. En un ordenador actual el análisis completo de una región se puede realizar en un tiempo de procesamiento del orden de 1 ms.
Pueden plantearse escenarios de uso en los que se sabe con anterioridad que el código visual a reconocer no puede ser cualquiera, sino que necesariamente se halla en un subconjunto predeterminado más limitado (y previamente conocido) de códigos. Por ejemplo, podría conocerse, por las particularidades del proceso de producción, que en una planta podrían circular en un periodo determinado de tiempo sólo un conjunto reducido de, por ejemplo, 100 códigos diferentes. Si estos códigos son previamente conocidos, el problema de su decodificación no parte, como el procedimiento anteriormente descrito, del absoluto desconocimiento, sino que se tiene una cierta información a priori que podría ser explotada para detectar estos códigos incluso en condiciones de iluminación y/o toma de imagen extremadamente desafiantes.
En estas condiciones el conjunto reducido de códigos posibles permite limitar el conjunto de candidatos generados en el procedimiento ampliado y, si se desea, pueden establecerse umbrales de detección más permisivos, sin riesgo de aumentar la probabilidad de falsos positivos.
A continuación se presenta un ejemplo de implementación de todo el esquema de generación, detección y decodificación de códigos propuesto, en concreto sobre la planta principal de una empresa dedicada a la producción y envasado de productos frescos de origen hortofrutícola. El escenario específico de aplicación es la correcta localización y seguimiento en el tiempo y en el espacio de palets cargados con productos, que son descargados en los muelles de la empresa, y monitorizados desde el mismo momento de su entrada en la planta de envasado. Para ello, las cajas con los productos son etiquetadas ya en el momento de su recolección en el campo, con códigos visuales como los descritos, en un lugar bien visible en las mismas.
Este ejemplo de implementación considera un esquema de codificación 4-5:33-ABCD, con un conjunto de excepciones que permite leer con gran robustez 1,293,184 códigos.
El sistema de sensorización planteado para este ejemplo cuenta con un número variable de cámaras, interconectadas a la red principal de la empresa mediante tecnología Gigabit Ethernet.
En esta implementación particular se usan cámaras con resoluciones de hasta 3840x2160 píxeles y 60 frames por segundo, y ópticas de zoom variable que permiten ángulos de visión de entre 37° y 109° en horizontal. Se trata de una implementación directa del esquema ya mostrado anteriormente en la Figura 10: desde su entrada en el almacén, las cajas 103 con los productos procedentes de los muelles de carga, ya debidamente etiquetadas 104, son transportadas por carretillas paletizadoras 102 por el interior de la planta de envasado. Las cámaras 101 montadas en ciertos puntos clave de la planta monitorizan de forma continua la evolución de las carretillas, enviando las imágenes capturadas de forma continua a un servidor central 106, a través de una Intranet dedicada 105, cuyo ancho de banda (1 Gbps) permite, en combinación con un adecuado factor de compresión de imagen, el envío simultáneo de varias secuencias de vídeo a decenas de frames por segundo desde múltiples cámaras (las cámaras usadas están dotadas de una CPU y memoria propias, para realizar la compresión del vídeo en tiempo real, empleando la tecnología Zipstream; dicha tecnología utiliza un codec H264 con bitrate variable, que permite una velocidad en fps y ancho de banda controlables desde el servidor central).
En este punto es importante destacar que la comunicación entre las cámaras y el servidor central puede realizarse de manera alámbrica (con cables) o inalámbricamente. En el caso de una comunicación cableada (alámbrica), la conexión puede realizarse mediante puertos serie, tales como USB, micro USB, mini USB, Firewire o Ethernet (tal como la Intranet descrita anteriormente). En el caso de comunicaciones inalámbricas, la conexión puede realizarse mediante módulos de comunicaciones inalámbricas de corto alcance (las cámaras y el servidor están lo suficientemente cerca), por ejemplo, Bluetooth, NFC, Wifi, IEEE 802.11 o Zigbee. Si las comunicaciones son de largo alcance (las cámaras y el servidor están alejados), la conexión puede realizarse mediante módulos de comunicaciones basados en tecnología GSM, GPRS, 3G, 4G, 5G o tecnología por satélite (por ejemplo, si la comunicación se realiza a través de una red global de comunicación, tal como Internet) o incluso a través de una red de comunicaciones para Internet de las cosas (loT - Internet of Things). Para securizar la comunicación entre las cámaras y el servidor, esta comunicación puede asegurarse mediante, por ejemplo, nombre de usuario/contraseña, claves criptográficas y/o mediante un túnel SSL establecido en la comunicación.
Cada vez que una imagen nueva llega al servidor 106, éste la procesa mediante una implementación del procedimiento descrito en las Figuras 8 y 9, localizando y decodificando, en su caso, todas las etiquetas visuales detectadas en la escena. La implementación del mismo puede realizarse, por ejemplo, en el lenguaje Python, en su versión 3.6, haciendo uso de las librerías OpenCV (versión 3.4) y Numpy (versión 1.14) para todas las funciones relativas al proceso de imagen: umbralizado, extracción y poligonización de contornos, alineamiento y rectificación homográfica, y el proceso de decodificación frecuencial descrito. La interacción con el resto de las aplicaciones y bases de datos relevantes para el sistema de control de producción y trazabilidad de la empresa se hace a través de un API REST específicamente diseñado para ello, que se apoya en la librería Flask (versión 0.12). Dicho código Python es ejecutado, en esta implementación particular, en un servidor con una CPU i7 de 8 núcleos y 16 GB de RAM. El rendimiento obtenido depende de la resolución de las imágenes de entrada, siendo del orden de (tomando un ejemplo concreto) unos 20 milisegundos por frame para una resolución de entrada de 1920x1080, pudiéndose detectar varios códigos (por ejemplo, hasta 6) por imagen (sin que tampoco haya un límite estricto en este sentido).
Finalmente, la distancia de visualización y correcta decodificación depende a su vez tanto de la distancia focal de la cámara (y, por tanto, de su campo de visión) como de la resolución de imagen empleada. El esquema de codificación elegido en esta implementación concreta (4-5:33-ABCD), contiene frecuencias de hasta 4.5 ciclos por lado, lo que requiere una resolución superior a la frecuencia de muestreo de Nyquist de 9 muestras por ciclo. En teoría es más que suficiente trabajar con un margen de seguridad de tamaño de al menos 12x12 píxeles excluyendo el marco negro. En la práctica, la resolución angular real disponible depende de muchos factores: iluminación, calidad de la óptica, desenfoque, etc., por lo que para mayor robustez se recomienda trabajar con marcadores de aproximadamente 18x18 píxeles incluyendo el marco negro.
Jugando adecuadamente con ópticas de zoom variable, y dependiendo del tamaño físico de impresión de la etiqueta, ello equivale a posibles distancias de decodificación de incluso decenas de metros. La tabla siguiente muestra algunos escenarios concretos de ejemplo:
Campo de v is ión Resolución Tamaño etiqueta D istancia aproximada
37° 1980x1080 50 mm 8 m
90° 1980x1080 200 mm 11 m
37° 3840x2160 50 mm 15 m
37° 1980x1080 100 mm 16 m
90° 3840x2160 200 mm 21 m
37° 3840x2160 100 mm 31 m
Todas las anteriores posibilidades responden en realidad a la siguiente fórmula general:
PIX = TC*RH/(2000*D*tan(AVH/2))
donde:
PIX = Tamaño resultante del código visual en la imagen (en píxeles).
TC = Tamaño del código visual impreso (en mm).
RH = Resolución horizontal de la imagen (en píxeles).
D = Distancia de la cámara a la etiqueta (en metros).
AVH = Ángulo de visión horizontal de la cámara (en grados).
En teoría, y restringidos a las cámaras con las ópticas mencionadas anteriormente, esto permite igualmente detectar y decodificar códigos impresos a tamaño, por ejemplo, 200 mm de ancho a distancias superiores a los 60 metros (para el ángulo de visualización correspondiente al mayor zoom admitido por la óptica de la cámara, 37°, y su mayor resolución, de 3840x2160 píxeles). Por supuesto, montando ópticas de teleobjetivo con mayores focales (y por tanto menor ángulo de visión), estas distancias de decodificación pueden aumentarse aún más. En el escenario concreto del presente ejemplo, sin embargo, en ningún caso es necesaria una configuración de tales características, optándose por tamaños más pequeños en la implementación final, con códigos visuales impresos a 80 mm de ancho y distancias de visualización típicamente inferiores a los 10 m, pudiéndose aumentar así el ángulo de visión hasta un valor de alrededor de 80°, lo que permite ampliar el tamaño de la zona de detección cubierta por cada cámara. En todo momento el sistema muestra una buena tolerancia a diferentes fuentes de ruido que se traducen en diferentes causas de pérdida de nitidez en la imagen, como desenfoques puntuales, movimientos rápidos en la escena, ruido de "sal y pimienta” en la imagen sensorizada motivado por las bajas condiciones de iluminación, e incluso artefactos originados por la compresión de la imagen.
Es importante destacar que tanto el procedimiento de codificación como el procedimiento de decodificación descritos con anterioridad pueden implementarse, cada uno, con un sistema con una configuración totalmente informática, totalmente electrónica o mediante una combinación de ambos.
En el caso de que un sistema sea puramente informático (por ejemplo, un servidor informático), el sistema puede comprender una memoria y un procesador (por ejemplo, un microprocesador), en el que la memoria almacena instrucciones de programa informático ejecutables por el procesador, comprendiendo estas instrucciones funcionalidades para ejecutar un procedimiento para decodificar o un procedimiento para codificar un código visual tal como los descritos.
La memoria de este sistema informático puede estar comprendida en el procesador o puede ser externa. Si está comprendida en el propio procesador, puede tratarse, por ejemplo, de una memoria tipo EEPROM o similar. En el caso de que sea externa, puede ser, por ejemplo, unos medios de almacenamiento de datos tales como discos magnéticos (por ejemplo, discos duros), discos ópticos (por ejemplo, DVD o CD), tarjetas de memoria, memorias flash (por ejemplo, pendrives) o unidades de estado sólido (SSD basadas en RAM, basadas en flash, etc.). Estos medios de almacenamiento pueden formar parte del propio sistema informático y/o pueden estar dispuestos remotos al mismo, conectados de manera alámbrica (con cables) o inalámbricamente. En el caso de una comunicación cableada (alámbrica), la conexión puede realizarse mediante puertos serie, tales como USB, micro USB, mini USB, Firewire o Ethernet. En el caso de comunicaciones inalámbricas, la conexión puede realizarse mediante módulos de comunicaciones inalámbricas de corto alcance (el sistema y los medios de almacenamiento están lo suficientemente cerca), por ejemplo, Bluetooth, NFC, Wifi, IEEE 802.11 o Zigbee. Si las comunicaciones son de largo alcance (el sistema y los medios de almacenamiento están alejados), la conexión puede realizarse mediante módulos de comunicaciones basados en tecnología GSM, GPRS, 3G, 4G, 5G o tecnología por satélite (por ejemplo, si la comunicación se realiza a través de una red global de comunicación, tal como Internet) o incluso a través de una red de comunicaciones para Internet de las cosas (loT -In te rneto f Things). En este último caso de un sistema con los medios de almacenamiento dispuestos remotos, la comunicación establecida entre el sistema y los medios de almacenamiento puede asegurarse mediante, por ejemplo, nombre de usuario/contraseña, claves criptográficas y/o mediante un túnel SSL establecido en la comunicación entre el sistema y los medios de almacenamiento.
Por lo tanto, el conjunto de instrucciones de programa informático (un programa informático) ejecutables por el procesador puede estar almacenado en unos medios de almacenamiento físico, tales como los citados, pero también puede ser portado por una onda portadora (el medio portador puede ser cualquier entidad o dispositivo capaz de portar el programa), tal como eléctrica u óptica, que puede transmitirse vía cable eléctrico u óptico o mediante radio u otros medios. De este modo, cuando el programa informático está contenido en una señal que puede transmitirse directamente mediante un cable u otro dispositivo o medio, el medio portador puede estar constituido por dicho cable u otro dispositivo o medio.
Alternativamente, el medio portador puede ser un circuito integrado en el que está encapsulado (embedded) el programa informático, estando adaptado dicho circuito integrado para realizar o para usarse en la realización de los procedimientos relevantes.
El programa informático puede estar en forma de código fuente, de código objeto o en un código intermedio entre código fuente y código objeto, tal como en forma parcialmente compilada, o en cualquier otra forma adecuada para usar en la implementación de los procedimientos descritos.
Por otro lado, al menos uno de los sistemas (el que ejecuta el procedimiento de codificación y/o el que ejecuta el procedimiento de decodificación) puede tener una configuración puramente electrónica, por lo que podría estar formado por un dispositivo electrónico programable tal como un CPLD (Complex Programmable Logic Device), un FPGA (Field Programmable Gate Array) o un ASIC (Application-Specific Integrated Circuit).
Finalmente, al menos uno de los sistemas puede presentar también una configuración híbrida entre informática y electrónica. En este caso, el sistema debe comprender una memoria y un procesador para implementar informáticamente una parte de sus funcionalidades, así como determinados circuitos electrónicos para implementar el resto de las funcionalidades.
A pesar de que se han descrito aquí sólo algunas realizaciones y ejemplos particulares de la invención, el experto en la materia comprenderá que son posibles otras realizaciones alternativas y/o usos de la invención, así como modificaciones obvias y elementos equivalentes. Además, la presente invención abarca todas las posibles combinaciones de las realizaciones concretas que se han descrito. Los signos numéricos relativos a los dibujos y colocados entre paréntesis en una reivindicación son solamente para intentar aumentar la comprensión de la reivindicación, y no deben ser interpretados como limitantes del alcance de la protección de la reivindicación. El alcance de la presente invención no debe limitarse a realizaciones concretas, sino que debe ser determinado únicamente por una lectura apropiada de las reivindicaciones adjuntas.

Claims (43)

REIVINDICACIONES
1. Código visual que comprende una imagen bidimensional, caracterizado por el hecho de que la imagen bidimensional es el resultado de aplicar una operación matemática predeterminada sobre un número c de ondas bidimensionales determinadas por al menos dos parámetros, a saber, una primera frecuencia espacial u en una primera dirección y una segunda frecuencia espacial v en una segunda dirección diferente de la primera.
2. Código visual según la reivindicación 1, caracterizado por el hecho de que las ondas bidimensionales son sinusoides bidimensionales.
3. Código visual según la reivindicación 1 ó 2, caracterizado por el hecho de que la operación matemática sobre las c ondas bidimensionales es una adición.
4. Código visual según cualquiera de las reivindicaciones anteriores, caracterizado por el hecho de que cada onda bidimensional está determinada por al menos tres parámetros, a saber, las mencionadas frecuencias primera y segunda y además una fase angular.
5. Código visual según la reivindicación 4, caracterizado por el hecho de que cada onda bidimensional está determinada por al menos cuatro parámetros, a saber, las mencionadas frecuencias primera y segunda, la fase angular y además una amplitud.
6. Código visual según cualquiera de las reivindicaciones anteriores, caracterizado por el hecho de que las direcciones primera y segunda son ortogonales.
7. Código visual según cualquiera de las reivindicaciones anteriores, caracterizado por el hecho de que el valor de cada frecuencia angular u, v es un número entero.
8. Código visual según cualquiera de las reivindicaciones anteriores, caracterizado por comprender un marco para la imagen bidimensional, siendo dicho marco de un color y un grosor predeterminados.
9. Etiqueta de identificación, caracterizada por comprender un código visual según la reivindicación 8.
10. Procedimiento para decodificar un código visual reproducido en una etiqueta de identificación, caracterizado por comprender las etapas de:
captar una imagen plana de la etiqueta mediante un sensor óptico;
calcular la Transformada Discreta de Fourier (DFT) de esta imagen plana;
extraer de esta DFT c componentes de frecuencia dominantes, tanto para una primera frecuencia espacial u’ como para una segunda frecuencia espacial v’;
buscar una identificación entre estas c componentes dominantes de primera frecuencia espacial u’ y segunda frecuencia espacial v’ con c ondas bidimensionales de una colección predeterminada de ondas bidimensionales, cada una de las cuales está determinada por al menos dos parámetros, a saber, una primera frecuencia espacial u en una primera dirección y una segunda frecuencia espacial v en una segunda dirección diferente de la primera.
11. Procedimiento según la reivindicación 10, caracterizado por comprender la etapa de obtener de la DFT las fases de las c componentes de frecuencia dominantes.
12. Procedimiento según la reivindicación 11, caracterizado por comprender la etapa de ordenar por orden decreciente de magnitud las c componentes de frecuencias u’ y v’ extraídas, y de asignarles un número ordinal entre 1 y c, siendo la magnitud de ordenación una frecuencia escalar w’ definida por la ecuación w '2 = (u '2 v '2).
13. Procedimiento según la reivindicación 12, caracterizado por comprender la etapa de extraer otras k componentes c+1, .... c+k de frecuencias u’ y v’ correspondientes, con k>1, siempre y cuando al menos una de estas frecuencias de la componente c+1 sea de magnitud no nula.
14. Procedimiento según la reivindicación 13, caracterizado por comprender la etapa de dar por bien decodificado el código visual siempre y cuando haya una diferencia de magnitud mayor que una cantidad predeterminada entre las componentes c y c+1 de frecuencia.
15. Procedimiento según cualquiera de las reivindicaciones 12 a 14, caracterizado por comprender la etapa de dar por bien decodificado el código visual siempre y cuando la máxima diferencia entre las fases de las c componentes de frecuencia y las fases de un repertorio predeterminado de fases posibles sea menor que una cantidad predeterminada.
16. Procedimiento según la reivindicación 13, caracterizado por comprender la etapa de dar por no decodificado el código visual si entre las componentes c y c+1 de frecuencia hay una diferencia de magnitud menor que una cantidad predeterminada.
17. Procedimiento según la reivindicación 12 ó 16, caracterizado por comprender la etapa de dar por no decodificado el código visual si la máxima diferencia entre las fases de las c componentes de frecuencia y las fases de un repertorio predeterminado de fases posibles es mayor que una cantidad predeterminada.
18. Procedimiento según la reivindicación 13, caracterizado por comprender las etapas de: generar varias combinaciones de c componentes de frecuencia entre las c+k componentes extraídas;
ordenar por orden decreciente de magnitud cada una de las c componentes de frecuencias u’ y v’ extraídas;
asignar a cada una de estas c componentes de frecuencias un número ordinal entre 1 y c.
19. Procedimiento según la reivindicación 18, caracterizado por comprender la etapa de dar por bien decodificado el código visual siempre y cuando al menos una de las combinaciones de c componentes de frecuencia entre las c+k componentes extraídas corresponda a un código visual que se diferencia de la imagen de entrada en una magnitud menor que una cantidad predeterminada.
20. Procedimiento según la reivindicación 18, caracterizado por comprender la etapa de dar por no decodificado el código visual si ninguna de las combinaciones de c componentes de frecuencia entre las c+k componentes extraídas corresponde a un código visual que se diferencia de la imagen de entrada en una magnitud menor que una cantidad predeterminada.
21. Procedimiento según cualquiera de las reivindicaciones 10 a 20, caracterizado por el hecho de que la DFT se calcula mediante una Transformada Rápida de Fourier (FFT).
22. Procedimiento para codificar una imagen bidimensional, caracterizado por comprender las etapas de:
predefinir una colección de ondas bidimensionales como componentes potenciales de la imagen bidimensional, estando cada una de estas ondas bidimensionales determinada por al menos dos parámetros, a saber, una primera frecuencia espacial u en una primera dirección y una segunda frecuencia espacial v en una segunda dirección diferente de la primera; predeterminar un número natural c de dichas ondas bidimensionales para componer la imagen bidimensional;
seleccionar un número c de ondas bidimensionales de entre todas las de la colección; componer la imagen bidimensional aplicando una operación matemática predeterminada sobre las c ondas bidimensionales seleccionadas;
formar un código visual enmarcando la imagen bidimensional con una banda de un color predeterminado cuyo contorno es una curva plana cerrada predeterminada;
reproducir el código visual en una etiqueta.
23. Procedimiento según la reivindicación 22, caracterizado por el hecho de que las ondas bidimensionales son sinusoides bidimensionales.
24. Procedimiento según la reivindicación 22 ó 23, caracterizado por el hecho de que la operación matemática sobre las c ondas bidimensionales seleccionadas es una adición.
25. Procedimiento según cualquiera de las reivindicaciones 22 a 24, caracterizado por el hecho de que cada onda bidimensional está determinada por al menos tres parámetros, a saber, las mencionadas frecuencias primera y segunda y además una fase angular, siendo dicha fase un número real.
26. Procedimiento según la reivindicación 25, caracterizado por el hecho de que las fases se seleccionan de un repertorio finito.
27. Procedimiento según cualquiera de las reivindicaciones 22 a 26, caracterizado por el hecho de que cada onda bidimensional está determinada por al menos tres parámetros, a saber, las mencionadas frecuencias primera y segunda y además una amplitud, siendo la amplitud un número real.
28. Procedimiento según cualquiera de las reivindicaciones 22 a 27, caracterizado por el hecho de que las frecuencias primera y segunda son números enteros y las direcciones primera y segunda son ortogonales.
29. Procedimiento según cualquiera de las reivindicaciones 22 a 28, caracterizado por el hecho de que las frecuencias espaciales se seleccionan de un repertorio finito.
30. Procedimiento según las reivindicaciones 26 y 29, caracterizado por el hecho de que la colección de ondas bidimensionales es finita.
31. Procedimiento según la reivindicación 30, caracterizado por el hecho de comprender la etapa de ordenar las ondas bidimensionales de la colección por orden creciente de magnitud de una frecuencia escalar w de cada onda espacial bidimensional, estando dicha frecuencia escalar w definida por la ecuación w 2 = (u 2 v 2) .
32. Procedimiento según la reivindicación 31, caracterizado por el hecho de comprender la etapa de asignar un número ordinal a cada onda bidimensional de la colección, de acuerdo con la ordenación anterior.
33. Procedimiento según cualquiera de las reivindicaciones 30 a 32, caracterizado por el hecho de comprender la etapa de asignar un número ordinal a cada posible onda espacial bidimensional de acuerdo con un criterio de enumeración.
34. Procedimiento según la reivindicación 33, caracterizado por el hecho de que el criterio de enumeración sigue un orden de frecuencia escalar creciente.
35. Procedimiento según la reivindicación 34, caracterizado por el hecho de que para cada frecuencia escalar se recorren todas las fases angulares.
36. Procedimiento según la reivindicación 33, caracterizado por el hecho de que el criterio de enumeración sigue un orden de fase angular creciente.
37. Procedimiento según la reivindicación 36, caracterizado por el hecho de que para cada fase angular se recorren todas las frecuencias escalares.
38. Procedimiento según cualquiera de las reivindicaciones 22 a 37, caracterizado por el hecho de comprender la etapa de aumentar el contraste de la imagen bidimensional resultante de la operación matemática predeterminada sobre las c ondas espaciales bidimensionales seleccionadas.
39. Procedimiento según la reivindicación 38, caracterizado por el hecho de comprender la etapa de aumentar el contraste de la imagen bidimensional resultante de la operación matemática sobre las c ondas espaciales bidimensionales seleccionadas, hasta producir una imagen bidimensional saturada a blanco y negro.
40. Procedimiento según las reivindicaciones 30 y 39, caracterizado por el hecho de comprender la etapa de analizar todas las posibles imágenes bidimensionales en formato blanco y negro, y la etapa de marcar como indeseables todas estas imágenes bidimensionales cuyas configuraciones de frecuencias presentan armónicos predefinidos como indeseados.
41. Procedimiento según cualquiera de las reivindicaciones 22 a 40, caracterizado por el hecho de que la etapa de imprimir el código visual en una etiqueta comprende la subetapa de imprimir un marco negro que sigue la forma de la curva plana cerrada.
42. Procedimiento según la reivindicación 41, caracterizado por el hecho de que la curva plana cerrada es un rectángulo o un cuadrado.
43. Procedimiento según cualquiera de las reivindicaciones 22 a 42, caracterizado por el hecho de que el número c de ondas potencialmente componentes de la imagen bidimensional es uno de {3, 4, 5, 6}.
ES201930861A 2019-10-04 2019-10-04 Codigo visual y procedimiento para codificar y decodificar una imagen bidimensional Active ES2817926B2 (es)

Priority Applications (5)

Application Number Priority Date Filing Date Title
ES201930861A ES2817926B2 (es) 2019-10-04 2019-10-04 Codigo visual y procedimiento para codificar y decodificar una imagen bidimensional
US17/766,378 US11868844B2 (en) 2019-10-04 2020-10-02 Visual code and method for encoding and decoding a two-dimensional image
PCT/ES2020/070599 WO2021064273A1 (es) 2019-10-04 2020-10-02 Código visual y procedimiento para codificar y decodificar una imagen bidimensional
EP20797811.5A EP4044065A1 (en) 2019-10-04 2020-10-02 Visual code and method for encoding and decoding a two-dimensional image
CL2022000811A CL2022000811A1 (es) 2019-10-04 2022-03-31 Código visual y procedimiento para codificar y decodificar una imagen bidimensional

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
ES201930861A ES2817926B2 (es) 2019-10-04 2019-10-04 Codigo visual y procedimiento para codificar y decodificar una imagen bidimensional

Publications (2)

Publication Number Publication Date
ES2817926A1 ES2817926A1 (es) 2021-04-08
ES2817926B2 true ES2817926B2 (es) 2021-11-12

Family

ID=73030154

Family Applications (1)

Application Number Title Priority Date Filing Date
ES201930861A Active ES2817926B2 (es) 2019-10-04 2019-10-04 Codigo visual y procedimiento para codificar y decodificar una imagen bidimensional

Country Status (5)

Country Link
US (1) US11868844B2 (es)
EP (1) EP4044065A1 (es)
CL (1) CL2022000811A1 (es)
ES (1) ES2817926B2 (es)
WO (1) WO2021064273A1 (es)

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US2612994A (en) 1949-10-20 1952-10-07 Norman J Woodland Classifying apparatus and method
US5726435A (en) * 1994-03-14 1998-03-10 Nippondenso Co., Ltd. Optically readable two-dimensional code and method and apparatus using the same
US6267296B1 (en) * 1998-05-12 2001-07-31 Denso Corporation Two-dimensional code and method of optically reading the same
US7050653B2 (en) * 2000-04-05 2006-05-23 Anoto Ab Identification of virtual raster pattern
KR20080071334A (ko) * 2007-01-30 2008-08-04 (주) 애니모비 2차원 코드의 판독부를 가지는 모바일 단말기로의 매체콘텐츠 전송 시스템 및 그 방법
JP6406758B2 (ja) 2015-03-06 2018-10-17 国立大学法人 鹿児島大学 撮像装置、電子透かしの抽出方法、電子透かし及び符号化開口の最適化方法
CN108790469B (zh) 2017-04-27 2020-06-30 中钞特种防伪科技有限公司 光学防伪元件与防伪产品
WO2019043553A1 (en) * 2017-08-31 2019-03-07 3M Innovative Properties Company IDENTIFICATION OF MACHINE READABLE PERIODIC PATTERNS
CN109981917B (zh) 2019-01-25 2021-04-06 佛山市顺德区中山大学研究院 一种二维码图像光学加密方法及其系统、装置、存储介质

Also Published As

Publication number Publication date
ES2817926A1 (es) 2021-04-08
US20230169288A1 (en) 2023-06-01
US11868844B2 (en) 2024-01-09
CL2022000811A1 (es) 2022-11-11
WO2021064273A1 (es) 2021-04-08
EP4044065A1 (en) 2022-08-17

Similar Documents

Publication Publication Date Title
US9406010B2 (en) Producing, capturing and using visual identification tags for moving objects
US11410405B2 (en) Imaging-based sensor calibration
ES2823232T3 (es) Sistema de generación de marcador y método
US7942340B2 (en) Two-dimensional code, and method and apparatus for detecting two-dimensional code
CN101978380B (zh) 二维符号及其读取方法
JP2007317184A (ja) 二次元バーコード、その符号化方法及び復号化方法
WO2018064203A1 (en) Occlusion-resilient optical codes for machine-read articles
US20140270362A1 (en) Fast edge-based object relocalization and detection using contextual filtering
CA3092189A1 (en) Method and system for optical product authentication
US10198647B2 (en) Compact imaging module with range finder
CN105046184A (zh) 基于畸变图像校正的二维码解码方法和系统
GB2446424A (en) Two dimensional bar code with locating symbols
WO2018115542A1 (es) Método de detección y reconocimiento de marcadores visuales de largo alcance y alta densidad
BR112013011946B1 (pt) Método para identificação de um código de barras bidimensional em dados de imagem digital do código de barras, aparato configurado para identificar um código de barras bidimensional em dados de imagem digital do código de barras e meio legível por computador não transitório
CN105046183A (zh) 一种畸变qr码的解码方法和系统
US9104933B2 (en) Covert bar code pattern design and decoding
ES2817926B2 (es) Codigo visual y procedimiento para codificar y decodificar una imagen bidimensional
KR101515926B1 (ko) 객체 검출방법 및 이를 이용한 검출장치
BR112013011943B1 (pt) método para identificação de um código de barras bidimensional em dados de imagem digital do código de barras, meio legível por computador não transitório e aparato configurado para identificar um código de barras bidimensional em dados de imagem digital do código de barras
US8919649B2 (en) Method for the detection of a marker affixed to the surface of an object and system for implementing same
ES2817652B2 (es) Codigo visual, procedimiento para generar un codigo visual y procedimiento para decodificar un codigo visual
Han et al. Auto-calibration method using stop signs for urban autonomous driving applications
US11734531B2 (en) Methods and systems of harvesting data for training machine learning (ML) model
US20130306733A1 (en) Reader, reading method and computer program product
US20230196707A1 (en) Fiducial patterns

Legal Events

Date Code Title Description
BA2A Patent application published

Ref document number: 2817926

Country of ref document: ES

Kind code of ref document: A1

Effective date: 20210408

FG2A Definitive protection

Ref document number: 2817926

Country of ref document: ES

Kind code of ref document: B2

Effective date: 20211112