[go: up one dir, main page]

ES2991352T3 - Lectura de un código óptico unidimensional - Google Patents

Lectura de un código óptico unidimensional Download PDF

Info

Publication number
ES2991352T3
ES2991352T3 ES22177569T ES22177569T ES2991352T3 ES 2991352 T3 ES2991352 T3 ES 2991352T3 ES 22177569 T ES22177569 T ES 22177569T ES 22177569 T ES22177569 T ES 22177569T ES 2991352 T3 ES2991352 T3 ES 2991352T3
Authority
ES
Spain
Prior art keywords
code
sequence
gray
image data
sequences
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
ES22177569T
Other languages
English (en)
Inventor
Marcel Hampf
Dr Romain Müller
Thorsten Falk
Julian Zimmer
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.)
Sick AG
Original Assignee
Sick AG
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 Sick AG filed Critical Sick AG
Application granted granted Critical
Publication of ES2991352T3 publication Critical patent/ES2991352T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/82Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/14131D bar codes
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/1439Methods for optical code recognition including a method step for retrieval of the optical code
    • G06K7/1452Methods for optical code recognition including a method step for retrieval of the optical code detecting bar code edges
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/146Methods for optical code recognition the method including quality enhancement steps
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/146Methods for optical code recognition the method including quality enhancement steps
    • G06K7/1482Methods for optical code recognition the method including quality enhancement steps using fuzzy logic or natural solvers, such as neural networks, genetic algorithms and simulated annealing
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/44Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components
    • G06V10/443Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components by matching or filtering
    • G06V10/449Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters
    • G06V10/451Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters with interaction between the filter responses, e.g. cortical complex cells
    • G06V10/454Integrating the filters into a hierarchical structure, e.g. convolutional neural networks [CNN]

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Electromagnetism (AREA)
  • Toxicology (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Medical Informatics (AREA)
  • Mathematical Physics (AREA)
  • Multimedia (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Evolutionary Biology (AREA)
  • Automation & Control Theory (AREA)
  • Fuzzy Systems (AREA)
  • Molecular Biology (AREA)
  • Biomedical Technology (AREA)
  • Biodiversity & Conservation Biology (AREA)
  • Databases & Information Systems (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Image Analysis (AREA)
  • Facsimile Image Signal Circuits (AREA)
  • Image Processing (AREA)
  • Character Input (AREA)

Abstract

Se describe un método para leer un código óptico unidimensional (20), en el que se registran datos de imagen con el código (20) y se obtienen una pluralidad de gradientes de escala de grises (30) a partir de los datos de imagen utilizando el código, se forma un gradiente en blanco y negro a partir de los gradientes de escala de grises (30) por medio de binarización, y el contenido de código del código (20) se lee a partir del gradiente en blanco y negro. En este proceso, en primer lugar se genera un gradiente de escala de grises (34) agudizado con una resolución aumentada, bordes más nítidos y extremos más pronunciados en comparación con los datos de imagen originales a partir de la pluralidad de gradientes de escala de grises (30) en preparación para la binarización, y el gradiente de escala de grises agudizado (34) se binariza para formar el gradiente en blanco y negro. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Lectura de un código óptico unidimensional
La invención se refiere a un procedimiento para leer un código óptico unidimensional según el preámbulo de la reivindicación 1 y a un correspondiente dispositivo lector de códigos según la reivindicación 15.
Los lectores de códigos se conocen de las cajas de los supermercados, para la identificación automática de paquetes, clasificación de envíos postales, tratamiento de equipaje en aeropuertos y otras aplicaciones logísticas. En un escáner de códigos se guía un haz de lectura a través del código mediante un espejo giratorio o una rueda de espejos poligonales. Un lector de códigos basado en cámara utiliza un sensor de imagen para tomar imágenes de los objetos con los códigos situados sobre ellos y unsoftwarede evaluación de imágenes extrae la información de código de estas imágenes.
En un grupo de aplicaciones importante, los objetos portadores de código pasan por el lector de códigos. Un escáner de códigos registra a este respecto uno tras otro en cada caso los códigos que llegan a su región de lectura. Alternativamente, en un lector de códigos basado en cámara, una cámara lineal lee las imágenes de objeto con la información del código sucesivamente y línea por línea con el movimiento relativo. Se utiliza un sensor de imagen bidimensional para capturar periódicamente datos de imágenes, que se superponen más o menos en función de la frecuencia de captura y de la velocidad de transporte. Para que los objetos puedan disponerse en cualquier orientación sobre el transportador, a menudo están previstos varios lectores de códigos en un túnel de lectura para captar objetos desde varios o todos los lados.
Aunque existen numerosos tipos de códigos ópticos bidimensionales, los códigos de barras unidimensionales o códigos de barras siguen desempeñando un papel importante. Los códigos de barras constan de barras negras y espacios blancos. Por el contrario, los datos de imagen escaneados o capturados para la lectura de códigos presentan niveles de gris, por ejemplo, valores de gris de 0 a 255 con una profundidad de color de ocho bits. Con la excepción de algunos procedimientos como el emparejamiento de plantillas, los decodificadores no pueden manejar valores de gris. Por eso, el decodificador suele ir precedido de una binarización con la que los valores de gris se convierten en valores de blanco y negro o en una profundidad de color de tan solo un bit.
La binarización implica una fuerte reducción de la información. La información decisiva sobre los anchos de las barras y los huecos no debe perderse a este respecto en ningún caso. Un procedimiento de valores umbrales sencillo solo es suficiente en condiciones ideales. En la práctica, esto no es así; sino que se producen diversos efectos perturbadores como, por ejemplo, enfoque insuficiente, distorsiones ópticas, contaminación, ruidos, desenfoque de movimiento, reflejos, daños del código, exposiciones insuficientes y muchos otros.
Por lo tanto, se requieren algoritmos de binarización claramente más complejos para permitir una decodificación exitosa. En primer lugar, a este respecto cabe mencionar las optimizaciones más pequeñas como, por ejemplo, una selección inteligente o local de valores umbrales o los prefiltrados. Con un procedimiento diferencial, se deduce la secuencia de grises original, para localizar bordes y extremos. También existen numerosas optimizaciones a este respecto. Para combinar las ventajas de diferentes algoritmos de binarización, a menudo se ejecutan en paralelo y los resultados se decodifican por separado.
Con estas implementaciones convencionales de binarización se obtienen buenos resultados en muchas situaciones reales de lectura de códigos. Sin embargo, quedan demasiadas capturas de código, en las que la calidad de la binarización es insuficiente. Se trata, por ejemplo, de casos con mucho desenfoque, baja relación señal-ruido, efectos de muestreo, bajo contraste, baja resolución del código y otros. Las combinaciones de tales efectos son particularmente desfavorables. Precisamente en esta interacción, se da una complejidad de fallos, que hace que incluso su descripción sea extremadamente difícil y requiera mucho tiempo, y más aún el desarrollo de algoritmos adecuados para abordar los respectivos casos problemáticos de forma individual y específica.
El documento EP 2.003.599 A1 revela un sensor optoelectrónico para detectar códigos, que binariza datos de imagen en color o en secuencia de grises leídos durante la recepción y/o en tiempo real. Sin embargo, el documento no aborda ningún algoritmo de binarización concreto y particular.
El documento EP 2.555.160 B1 encuentra regiones de interés o candidatos de código utilizando una medida de contraste en el procesamiento previo en una FPGA. Esto se puede combinar con una binarización, pero no se explica con más detalle.
El documento EP 3.428.834 B1 utiliza un descodificador clásico, que funciona con procedimientos sin aprendizaje automático para entrenar un clasificador configurado para el aprendizaje automático o, más concretamente, una red neuronal. El descodificador clásico está diseñado preferiblemente para binarizar los datos de imagen, sin explicar cómo se desarrolla realmente esta binarización.
En el documento EP 3.916.633 A1 se describe una cámara y un procedimiento para procesar datos de imagen, en el que la segmentación se lleva a cabo utilizando una red neuronal en un procedimiento de flujo, es decir, los datos de imagen se procesan mientras se siguen leyendo otros datos de imagen. Al menos las primeras capas de la red neuronal pueden implementarse en una FPGA. En una forma de realización, existe una ruta de procesamiento adicional que, en paralelo a la red neuronal, lleva a cabo pasos de procesamiento previo tales como la generación de una imagen binaria en una copia separada de la imagen de partida de alta resolución con procedimientos clásicos o de aprendizaje. Una vez más, la binarización no se aborda con más detalle.
El documento US 8.576.446 B2 describe un procedimiento para la evaluación de imágenes. A este respecto, una imagen escaneada en secuencia de grises se somete a eliminación de desenfoque mediante deconvolución y binarización con umbrales adaptativos. El documento US 2020/0.394.376 A1 aumenta la resolución utilizando una red neuronal y, a continuación, binarización y decodificación. Esto no está adaptado en cada caso a códigos de barras, es decir, códigos unidimensionales y, en las situaciones problemáticas descritas, la calidad de la binarización puede seguir siendo insuficiente.
En un lector de códigos según el documento EP 3.812.953 A1, se incluyen algoritmos adicionales en el procedimiento de decodificación en función de la distancia medida al código. Uno de estos algoritmos adicionales puede ser la eliminación de desenfoque con la deconvolución de Richardson-Lucy. Pero esto no está asociado con la binarización.
Por lo tanto, el objetivo de la invención es mejorar la binarización para la lectura de códigos de barras.
Este objetivo se consigue mediante un procedimiento para leer un código óptico unidimensional según el preámbulo de la reivindicación 1, así como un correspondiente dispositivo lector de códigos según la reivindicación 15. En esta descripción, el término código de barras se utiliza como sinónimo de un código óptico unidimensional, a diferencia de partes de la bibliografía que a veces también denominan códigos de barras a los códigos bidimensionales. Las etapas para leer un código de barras son automáticas; es un procedimiento implementado por ordenador.
Los datos de imagen se captan con el código. Para ello, se puede utilizar una cámara matricial. También es posible realizar capturas repetidas con una cámara de líneas, en particular, con una alimentación entre el código y la cámara de líneas, y combinar las líneas de imagen captadas sucesivamente en una imagen plana. El perfil de intensidad de un escáner de códigos también se puede ver como una línea de imagen. Debido a la captura plana o la captura repetida de líneas, el código se captura varias veces y, en consecuencia, se pueden obtener varias secuencias de grises a través del código. Cada secuencia de grises representa el código; en este sentido, las múltiples secuencias de grises son redundantes. Debido a las diferencias entre las secuencias de grises, esto no es una redundancia completa y, por lo tanto, la sobredeterminación de las diversas secuencias de grises se puede utilizar para lograr resultados de lectura más sólidos. En referencia a un escáner de códigos, una secuencia de grises también se denomina escaneo, y en un sentido algo más amplio, se trata de un gradiente de intensidad o de los datos de la imagen a lo largo de una línea a lo largo del código, por ejemplo, en 256 niveles de gris con una profundidad de color o de gris de ocho bits.
Mediante la binarización, a partir de las secuencias de grises se forma ahora una secuencia en blanco y negro con solo un bit de profundidad de color o de gris y, a partir de ella, se lee el contenido de código del código. La binarización puede realizarse de cualquier manera conocida en sí, incluidos umbrales inteligentes o locales o diferenciación previa o el uso de procedimientos de aprendizaje automático, en particular, redes neuronales. También se puede utilizar cualquier decodificador clásico conocido o procedimiento de aprendizaje automático para la lectura de códigos.
La invención se basa en la idea básica de generar una secuencia de grises nítida a partir de varias secuencias de grises, aprovechando su redundancia para apoyar y preparar la binarización. La secuencia de grises nítida tiene una resolución más alta que los datos de imagen originales (muestreo ascendente, superresolución). Además, los bordes y los extremos se agudizan (desenfoque, dispersión de amplitud), están más marcados que en los datos de imagen originales. Los bordes borrosos se vuelven más nítidos y marcados, los valores de gris de las barras se vuelven más oscuros y los valores de gris de los huecos se vuelven más claros. Esto facilita mucho la posterior binarización.
En una forma de realización preferida, aumentar la resolución y la nitidez son etapas separadas. Sin embargo, también es concebible que, con mayor resolución y sin mayor nitidez, no se forme explícitamente una secuencia de grises como resultado intermedio. En particular, en implementaciones con una red neuronal, los resultados intermedios pueden permanecer ocultos en los mapas de características de las capas ocultas y la secuencia de grises acabada y nítida con ambas mejoras puede obtenerse directamente en la salida. En general, se prevén varias etapas del procedimiento según la invención, a saber, aumentar la resolución, aumentar la nitidez, binarizar y leer el código, que pueden llevarse a cabo en cada caso de forma clásica o utilizando un procedimiento de aprendizaje automático. En este caso, son posibles diferentes formas mixtas de etapas clásicas y de aprendizaje automático y, en particular, en el caso de la implementación de etapas con redes neuronales, se pueden implementar redes neuronales individuales por etapa o para varias etapas consecutivas.
La invención tiene la ventaja de que se decodifica con éxito un número particularmente grande de códigos de barras, lo que aumenta la velocidad de lectura. Las secuencias de grises capturadas borrosas, con baja resolución o con baja calidad por otros motivos también se pueden binarizar con precisión y luego se pueden leer los códigos. En particular, esto se cumple para casos críticos de tamaños de módulo pequeños, es decir, píxeles por barra más pequeña o hueco más pequeño, en particular, tamaños de módulo en el rango de uno o incluso menos. El procedimiento según la invención se puede utilizar en funcionamiento paralelo con otros procedimientos de lectura de códigos o solo cuando los otros procedimientos de lectura de códigos fallan.
Preferiblemente, en un procesamiento previo, los datos de imagen se segmentan para encontrar una región de imagen con el código. Esto limita la lectura de códigos de barras a regiones de interés, en las que de todos modos existe una alta probabilidad de que realmente se pueda encontrar un código de barras. La segmentación se realiza preferiblemente en un componente diferente al de la lectura de código posterior, en particular, con segmentación en una FPGA(Field Prngrammable Gate Array,matriz de puertas lógicas programable en campo) y lectura de código en una CPU (microprocesador). En este caso, se remite de manera complementaria al documento EP 2.555.160 B1 mencionado en la introducción. La FPGA puede procesar al menos partes del procedimiento según la invención, en particular, a través de una red neuronal con capas primitivas en la FPGA, como en el documento EP 3.916.633 A1 mencionado en la introducción.
Una orientación del código en los datos de imagen se determina preferiblemente en un procesamiento previo, en particular, en el marco de la segmentación. La dirección de lectura ideal es transversal a las barras del código de barras, mientras que, por el contrario, no es posible leer con una dirección de lectura a lo largo de las barras. Si se conoce la orientación del código, se pueden obtener secuencias de grises adecuadas. Preferiblemente, solo tiene lugar una selección entre horizontal y vertical, para poder utilizar filas o columnas de los datos de imagen directamente. Si bien la dirección de lectura ideal será generalmente perpendicular a las barras, no obstante una secuencia de grises oblicua tendrá saltos de valores de gris debido a la cuadrícula discreta de los datos de imagen. Debe lograrse un equilibrio entre estos dos criterios. Para distinguir entre horizontal y vertical, se puede formar una especie de cruz de prueba con dos líneas perpendiculares entre sí. A continuación, una de las dos líneas atraviesa un mayor número de barras y huecos o transiciones claro-oscuro, y después se determina la orientación del código.
Para la preparación de la binarización, primero se genera preferiblemente una secuencia de grises de mayor resolución a partir de varias secuencias de grises. Como ya se ha mencionado anteriormente, en esta forma de realización se llevan a cabo dos etapas separadas para aumentar la resolución y la nitidez. Las diversas secuencias de grises redundantes se utilizan para generar una secuencia de grises de mayor resolución. Se conocen correspondientes procedimientos para aumentar la resolución (superresolución); existen para ello algoritmos clásicos, como los procedimientos de aprendizaje automático, en particular, con redes neuronales.
Preferiblemente, la secuencia de grises nítida se genera a partir de la secuencia de grises de mayor resolución mediante un procedimiento de deconvolución. La deconvolución es un procedimiento clásico, es decir, no es un procedimiento de aprendizaje automático y, en particular, no es una red neuronal. La deconvolución de Richardson-Lucy es particularmente adecuada en el caso de códigos de barras.
Alternativamente, la secuencia de grises más nítida se genera a partir de la secuencia de grises de mayor resolución mediante un procedimiento de aprendizaje automático. Los enfoques clásicos como la deconvolución de Richardson-Lucy funcionan con recursos informáticos relativamente reducidos. Sin embargo, tienen la desventaja de que se han de parametrizar manualmente para obtener buenos resultados. Esto no es necesario con un procedimiento de aprendizaje automático basado en datos y, a menudo, produce resultados aún mejores.
El procedimiento de aprendizaje automático presenta preferiblemente una red neuronal, en particular, una red convolucional con un núcleo de filtro de un ancho correspondiente a un tamaño de módulo del código en la secuencia de grises de mayor resolución. Para las redes neuronales, en particular, las redes neuronales profundas con capas ocultas («aprendizaje profundo»), existe una gran cantidad de paquetes desoftwareutilizables y, si es necesario,hardwarededicado disponible. Las redes neuronales convolucionales (CNN,convolutional neural networks)son especialmente adecuadas para el procesamiento de imágenes. La binarización pretendida depende en gran medida de las relaciones vecinales locales y la mezcla a lo largo de un módulo tiene más probabilidades de perturbar que ayudar. Por lo tanto, una red convolucional con un núcleo de filtro del orden de magnitud del tamaño del módulo se adapta particularmente bien a la aplicación prevista. La invención está dirigida principalmente a capturas de códigos de baja resolución con tamaños de módulo en el rango de un píxel o menos. Después del aumento de resolución, a partir de esta se elige una anchura de módulo de unos pocos píxeles, por ejemplo, cinco píxeles y, en consecuencia, se elige preferiblemente un núcleo de filtro con una anchura correspondiente a la anchura del módulo, en el ejemplo mencionado, cinco píxeles. También es posible un núcleo de filtro ligeramente más estrecho o más ancho, pero preferiblemente no debería ser un múltiplo de la anchura del módulo. Sin embargo, no es necesario adaptar los núcleos de filtro al tamaño del módulo; la red neuronal también puede adaptarse a condiciones iniciales menos favorables mediante el aprendizaje. La anchura del núcleo del filtro se refiere a la primera capa o las primeras capas; en las capas posteriores, de todos modos el contexto local se extiende a vecindarios más grandes debido a las repetidas convoluciones.
A partir de varias secuencias de grises, se genera preferiblemente una secuencia de grises de mayor resolución o la secuencia de grises más nítida mediante un procedimiento de aprendizaje automático, en particular, una red convolucional. Para ello, se superponen preferiblemente las distintas secuencias de grises y se alimentan así en el lado de entrada como imagen 2<d>. En la primera alternativa, el procedimiento de aprendizaje automático aumenta la resolución en una etapa intermedia separada, como ya se ha mencionado como posibilidad anteriormente. En la segunda alternativa, las dos etapas de aumento de resolución y nitidez se combinan en un procedimiento de aprendizaje automático. Por tanto, queda abierto, si el procedimiento de aprendizaje automático aumenta explícitamente la resolución como etapa intermedia; por regla general, este no es el caso y, de cualquier modo, se trata de un resultado intermedio puramente interno, por ejemplo, en forma de mapas de características de capas ocultas. Sin embargo, el aumento en la resolución se representa internamente de alguna forma, porque la secuencia de grises nítida resultante mejora tanto en su resolución como en su nitidez.
El procedimiento de aprendizaje automático se entrena preferiblemente mediante aprendizaje supervisado, usando datos de entrenamiento que asocian una secuencia de grises y una secuencia en blanco y negro entre sí, en donde los datos de entrenamiento se obtienen de un contenido de código predeterminado o un código leído correctamente. El aprendizaje supervisado(supervisedlearning)permite generalizar a partir de un conjunto de datos de entrenamiento con ejemplos de una determinada valoración correcta a imágenes iniciales presentadas posteriormente en el funcionamiento. Las arquitecturas correspondientes de las redes neuronales y los algoritmos de entrenamiento y funcionamiento (inferencia) se conocen per se, de modo que se puede recurrir a soluciones que funcionen bien y aplicarse a ellas. Una dificultad habitual en este sentido es la generación de conjuntos de datos de entrenamiento. En esta forma de realización, esto se soluciona de dos maneras posibles, que pueden realizarse individualmente o en combinación. Por un lado, se puede especificar el contenido del código, a partir de él se puede construir una secuencia en blanco y negro ideal y esta se puede alienar de varias maneras para crear una secuencia de grises. Por otro lado, se pueden leer imágenes de código auténticas. La secuencia en blanco y negro es así la binarización de un intento de lectura exitoso o una secuencia en blanco y negro reconstruida a partir del contenido del código leído, y las secuencias de gris se toman de los datos de imagen de las imágenes de código. Las secuencias de grises son los ejemplos de entrenamiento, las secuencia en blanco y negro es el resultado deseado correspondiente y por entrenar (etiqueta; verdad fundamental).
Preferiblemente, la resolución de los datos de entrenamiento se reduce para obtener datos de entrenamiento con un tamaño de módulo pequeño. Los intentos de lectura exitosos de los que se obtienen datos de entrenamiento suelen tener una resolución más alta. Precisamente, la motivación de la invención es que los casos problemáticos con módulos de tamaño pequeño a menudo no se pueden leer. Para poder seguir utilizando ejemplos de entrenamiento del campo, en esta forma de realización las secuencias de grises originalmente de alta resolución de las imágenes de código reales se reducen artificialmente a una resolución baja y, por tanto, a un tamaño de módulo pequeño(downsampling).Para ello, se crea una secuencia en blanco y negro en baja resolución o se ajusta en cualquier caso mediante reducción de la resolución.
Los datos de imagen se capturan preferiblemente en el movimiento relativo de un elemento receptor de luz y un objeto portador de código, en particular, por líneas. El elemento fotorreceptor forma parte de un dispositivo de lectura de códigos y el movimiento relativo se produce preferiblemente cuando los objetos que portan códigos se transportan, por ejemplo, sobre un equipo transportador, a través del campo de lectura del dispositivo de lectura de códigos montado estacionariamente.
El dispositivo de lectura de códigos según la invención para leer un código óptico unidimensional presenta al menos un elemento receptor de luz para capturar datos de imagen con el código y una unidad de control y evaluación, que está configurada para la realización de una de las formas de realización descritas del procedimiento según la invención. El dispositivo de lectura de códigos puede ser un escáner de códigos de barras, por ejemplo, con un fotodiodo como elemento receptor de luz y los perfiles de intensidad de los escaneos son, por tanto, las distintas secuencias de grises, que se procesan directamente o, preferiblemente, se agrupan primero línea por línea en los datos de imagen. Preferiblemente, el dispositivo de lectura de códigos es un lector de códigos basado en una cámara con un sensor de imagen como elemento receptor de luz. El sensor de imagen puede ser a su vez un sensor lineal para registrar una línea de código o una imagen de código plano mediante la composición de líneas de imagen o un sensor matricial, donde también se pueden combinar las capturas de un sensor matricial para formar una imagen inicial más grande. También es concebible una red de varios lectores de códigos o cabezales de cámara. La unidad de control y evaluación puede formar parte de un escáner de códigos de barras o de un lector de códigos basado en cámara o estar conectada a él como dispositivo de control.
La invención también se explica con más detalle a continuación con respecto a otras características y ventajas a modo de ejemplo con ayuda de formas de realización y con referencia al dibujo adjunto. Las ilustraciones del dibujo muestran en:
figura 1 una representación esquemática tridimensional del ejemplo de montaje de un lector de códigos encima de una cinta transportadora, sobre la que se transportan objetos con códigos que van a leerse;
figura 2 una secuencia de grises a modo de ejemplo a través de un código de barras;
figura 3 un fragmento a modo de ejemplo de una secuencia de grises a través de un código de barras con una transición claro-oscuro difícil de reconocer;
figura 4 una ilustración esquemática de la generación de una secuencia de grises de mayor resolución a partir de varias secuencias de grises de menor resolución;
figura 5 un ejemplo de código para la arquitectura de una red neuronal para obtener una secuencia de grises más nítida;
figura 6 una representación comparativa de una secuencia de grises original, una secuencia con mayor nitidez y una secuencia en blanco y negro ideal deseada, cuando se obtiene la mayor nitidez con una red neuronal;
figura 7a un fragmento de una imagen de código con secuencias de grises originales;
figura 7b el fragmento según la figura 7a después de utilizar una red neuronal para aumentar la nitidez;
figura 7c el fragmento según la figura 7b después de la binarización en una secuencia en blanco y negro;
figura 7d una sección de comparación con una secuencia ideal en blanco y negro (verdad fundamental);
figura 8 una representación comparativa de una secuencia de grises original, una secuencia con mayor nitidez y una secuencia en blanco y negro ideal deseada, cuando se obtiene la mayor nitidez con una deconvolución Richardson-Lucy;
figura 9a un fragmento de una imagen de código con secuencias de grises originales;
figura 9b el fragmento según la figura 9a después de utilizar una deconvolución Richardson-Lucy para aumentar la nitidez;
figura 9c el fragmento según la figura 9b después de la binarización en una secuencia en blanco y negro; y
figura 9d una sección de comparación con una secuencia ideal en blanco y negro (verdad fundamental).
La figura 1 muestra un lector 10 de códigos optoelectrónico en una situación de aplicación preferida, montado encima de una cinta 12 transportadora, que transporta objetos 14, como indica la flecha 16, a través de la región 18 de registro del lector 10 de códigos. Los objetos 14 llevan regiones 20 de código en sus áreas exteriores, que se registran y evalúan mediante el lector 10 de códigos. Estas regiones 20 de código solo pueden ser reconocidas por el lector 10 de códigos si están fijadas en la parte superior o al menos son visibles desde arriba. Por lo tanto, a diferencia de la ilustración de la figura 1, se puede montar una multitud de lectores 10 de códigos desde diferentes direcciones para leer un código 22 fijado aproximadamente en los laterales o a la parte inferior, para permitir la llamada lectura omnidireccional desde todas las direcciones. En la práctica, la disposición de los distintos lectores 10 de códigos para formar un sistema de lectura se realiza normalmente como un túnel de lectura. Esta aplicación estacionaria del lector 10 de códigos sobre una cinta transportadora es muy común en la práctica. Sin embargo, la invención se refiere inicialmente al propio lector 10 de códigos o al procedimiento implementado en él para descodificar códigos, por lo que este ejemplo no debe entenderse como restrictivo.
El lector 10 de códigos registra con un sensor 24 de imágenes datos de imagen de los objetos 14 transportados y de las regiones 20 de código que se procesan posteriormente por una unidad 26 de control y evaluación usando procedimientos de evaluación y decodificación de imágenes. El procedimiento de obtención de imágenes específico no es importante para la invención, de modo que el lector 10 de códigos puede construirse según cualquier principio conocidoper se.Por ejemplo, en cada caso solo se registra una línea, ya sea mediante un sensor de imagen en forma de línea o mediante un procedimiento de escaneo, en donde en el último caso mencionado basta un receptor de luz sencillo como un fotodiodo como sensor 24 de imagen. La unidad 26 de control y evaluación evalúa las líneas capturadas o agrupa las líneas registradas durante el movimiento transportador para formar los datos de imagen. Con un sensor de imagen en forma de matriz se puede registrar una región mayor en una captura, donde también es posible en este caso la combinación de capturas tanto en la dirección de transporte como transversalmente a esta. Solo varios lectores 10 de códigos pueden cubrir juntos toda la anchura de la cinta 12 transportadora, en donde cada lector 10 de códigos solo captura una sección parcial y las secciones parciales se agrupan mediante procesamiento de imágenes(stitching).También es concebible solo una decodificación fragmentaria dentro de secciones parciales individuales y la combinación subsiguiente de los fragmentos de código.
El lector 10 de códigos genera información a través de una interfaz 28, como códigos de lectura o datos de imágenes. También es concebible que la unidad 26 de control y evaluación no esté dispuesta en el propio lector 10 de códigos, es decir, en la cámara representada en la figura 1, sino que esté conectada a uno o varios lectores 10 de códigos como dispositivo de control propio. Entonces la interfaz 28 sirve también como conexión entre el control y la evaluación internos y externos. La funcionalidad de control y evaluación se puede distribuir prácticamente de manera discrecional entre componentes internos y externos, en donde los componentes externos también se pueden conectar a través de la red o la nube. En este caso, no se hace ninguna distinción adicional y la unidad 26 de control y evaluación se considera parte del lector 10 de códigos, independientemente de la implementación específica. La unidad 26 de control y evaluación puede presentar varios componentes, como una FPGA (matriz de puertas lógicas programable en campo), un microprocesador (CPU) y similares. En particular, para etapas de evaluación, que se describirán posteriormente, con un procedimiento de aprendizaje automático, en particular, con una red neuronal, pueden utilizarse componentes dehardwareespecializados, como un procesador de IA, una NPU (unidad de procesamiento neuronal), una GPU (unidad de procesamiento gráfico) o similares.
La figura 2 muestra una secuencia de grises a modo de ejemplo a lo largo de una línea que atraviesa un código de barras. Como etapa parcial de la lectura del código, se debe binarizar la secuencia de grises para determinar a partir de la secuencia en blanco y negro resultante las distancias entre las transiciones claro-oscuro o entre las transiciones oscuro-claro y, con ello, el contenido del código. La mayoría de las barras y huecos, es decir, las áreas oscuras y claras del código de barras pueden verse como mínimos y máximos de los valores de gris. También hay puntos de silla, picos dobles y extremos menos pronunciados, en los que no es posible determinar claramente a simple vista si se trata de una transición entre barras y huecos o simplemente de una perturbación o imprecisión en la captura de los valores de gris. En estos puntos, incluso con umbrales adaptados localmente, pueden ocurrir errores de binarización y, como resultado, obtenerse un código de barras incorrecto o no leído.
La figura 3 muestra un fragmento de una secuencia de grises como en la figura 2. En el punto rodeado por un círculo, un pequeño hueco en el código de barras no se manifiesta como un máximo, ni siquiera como un punto de silla, sino únicamente como un límite de pendiente. La motivación de la invención se puede resumir de la siguiente manera: mediante el procesamiento de las secuencias grises se debe crear una situación de partida, en la que la binarización también produzca el resultado correcto en tales puntos problemáticos.
Por lo tanto, el principio básico de la invención es no someter inmediatamente la secuencia de grises original a un algoritmo de binarización, sino aplicar primero un filtro no lineal, que mejore la secuencia de grises en vista de la binarización posterior. Un filtro no lineal de este tipo puede extraer información para la binarización que no es accesible con procedimientos convencionales, especialmente en el caso de secuencias de grises de baja resolución y al mismo tiempo borrosas, como en el ejemplo de la figura 3. En una forma de realización explicada con más detalle más adelante con referencia a las figuras 5 a 7, este filtro se puede implementar mediante un procedimiento de aprendizaje automático, en particular, una red neuronal (enfoque basado en datos), que se ha entrenado para mejorar la calidad de las secuencias de grises de difícil lectura. Alternativamente, en una forma de realización explicada con más detalle con referencia a las figuras 8 y 9, se puede utilizar un procedimiento clásico. El filtro genera una secuencia de grises nítida a partir de las secuencias de grises originales, por lo que todavía hay valores de gris en los lados de entrada y salida, por ejemplo, con profundidades de color o de gris de ocho bits. A continuación, la profundidad del color se reduce a un bit mediante un algoritmo de binarización relativamente sencillo. En este caso, se puede utilizar prácticamente cualquier algoritmo de binarización conocido como, por ejemplo, un algoritmo diferencial o de umbral convencional. En principio, es concebible utilizar también un procedimiento de aprendizaje automático para la binarización, en particular, también el mismo procedimiento de aprendizaje automático del filtro, de modo que se genere una secuencia en blanco y negro como datos de salida directamente a partir de secuencias de grises originales como datos de entrada.
La figura 4 ilustra una etapa de preparación adicional, en la que varias secuencias 30 de grises originales se procesan primero en una secuencia 32 de grises de mayor resolución (superresolución). El filtro no lineal para la nitidez mencionado recibe preferiblemente como entrada la secuencia 32 de grises de mayor resolución. Las varias secuencias 30 de grises siguen preferiblemente varias líneas a través del mismo código de barras, en particular, procesando un fragmento de imagen plana del código de barras en lugar de una sola línea. El fragmento de imagen plano no tiene que tomarse directamente de la captura del código de barras; por ejemplo, secuencias 30 de grises se pueden acercar en dirección vertical desde distancias mayores o alinear entre sí en dirección horizontal. El hecho de que los datos de entrada se consideren como un fragmento de imagen plana o como varias líneas no es relevante para el procedimiento. Es una ventaja si las líneas se encuentran a lo largo de filas o columnas de imagen. En este caso, la orientación óptima para la lectura en perpendicular a las barras del código de barras por regla general solo se puede lograr de forma aproximada seleccionando las líneas de la imagen o las columnas de la imagen. Sin embargo, incluso las posibles líneas oblicuas a través de la imagen de un código de barras pueden provocar perturbadores artefactos de discretización. En la representación de la figura 4, las distintas secuencias 30 de grises originales ya están orientadas en una dirección adecuada transversalmente al código de barras. Esta etapa de preparación se puede omitir, pero el filtro no lineal tiene que hacer frente adicionalmente al grado de libertad de rotación, lo que requiere un número significativamente mayor de ejemplos de entrenamiento, en particular, cuando se utiliza un procedimiento de aprendizaje automático.
El aumento de la resolución es ventajoso porque la invención está destinada principalmente a códigos de barras capturados con baja resolución, es decir, tamaños de módulo pequeños en el rango de un píxel por módulo o menores. Las binarizaciones convencionales generalmente pueden manejar módulos de mayor tamaño sin ningún procesamiento previo especial, aunque, por supuesto, la invención también se puede utilizar para este tipo de códigos de barras. Mediante la inclusión de varias secuencias 30 de grises originales, se aprovecha ventajosamente la redundancia de información de los códigos de barras, que ya se registra varias veces espacial y/o temporalmente en aplicaciones habituales de lectura de códigos. Alternativamente, también sería concebible utilizar como entrada solo una única secuencia de grises, cuya resolución también se puede elevar por interpolación. A diferencia del procedimiento representado en la figura 4 con varias secuencias 30 de grises como entrada, la interpolación no amplía la base de información.
La secuencia 32 de grises de mayor resolución es el punto de partida para un posterior aumento de la nitidez, que se describirá a continuación, en el que se aumenta la nitidez de las transiciones entre barras y huecos, y los valores de gris de barras y huecos se vuelven más oscuros o más claros. El resultado deseado se acerca lo más posible a una secuencia binaria de claro-oscuro con bordes muy pronunciados, pero aún expresada en valores de gris. A este respecto, la secuencia 32 de grises de mayor resolución no tiene que generarse necesariamente como resultado intermedio explícito. En particular, cuando se utilizan procedimientos de aprendizaje automático, el aumento de la resolución y la nitidez se pueden realizar en una sola etapa. Pero en este caso, el aumento de la resolución es una parte implícita de este procedimiento. De manera muy similar, la binarización se puede incluir en el procedimiento de aprendizaje automático en lugar de ser una etapa independiente. En este caso, hay que sopesar en cada caso entre el entrenamiento de varias etapas parciales más sencillas o una etapa común, pero más compleja. Dado que para algunas etapas parciales, como la binarización, se dispone de procedimientos clásicos muy sencillos y conocidos, el enfoque con una red neuronal monolítica y muy compleja no es necesariamente ventajoso para todas las etapas parciales.
El filtro no lineal para aumentar la nitidez de la secuencia 32 de grises de mayor resolución se explicará ahora con más detalle en dos formas de realización. La primera forma de realización se basa en un procedimiento de aprendizaje automático, en este caso, en el ejemplo de una red neuronal y se ilustra en las figuras 5 a 7. La segunda forma de realización se basa en un procedimiento clásico, en este caso, en el ejemplo de una deconvolución de Richardson-Lucy y se ilustra en las figuras 8 y 9.
La figura 5 muestra un fragmento de un código de programa(codesnippet)para generar una red neuronal a modo de ejemplo, que se puede utilizar como un filtro no lineal para aumentar la nitidez de una secuencia de grises. Preferiblemente, en la entrada se introduce una secuencia 32 de grises de mayor resolución, por ejemplo, con 3991 valores de gris consecutivos. Para el procesamiento directo alternativo de varias secuencias 30 de grises originales, la arquitectura se adapta preferiblemente, por ejemplo, para alimentar varias líneas más cortas en lugar de una línea larga y también para abordar el primer objetivo parcial de una única línea de mayor resolución en la arquitectura.
La red neuronal de ejemplo es una red neuronal convolucional (CNN -convolutional neural network)con varias capas ocultas. Para ello, se elige que el tamaño de núcleo sea N=5. Esto corresponde a un tamaño de módulo de cinco; con este tamaño de módulo, un núcleo registra en cada caso aproximadamente un módulo. Este tamaño de módulo a modo de ejemplo se crea cuando un código de barras capturado originalmente con un tamaño de módulo <1,5 se lleva por primera vez a una resolución o un tamaño de módulo cinco veces mayor mediante el aumento de la resolución. En otras palabras, el núcleo corresponde a un píxel real de la imagen original de baja resolución del código de barras. El núcleo puede ser un poco más ancho o más estrecho. Opcionalmente, se pueden utilizar capas convolucionales 1D con un tamaño de núcleo N o capas convolucionales 2D con un tamaño de núcleo Nx1. La red de ejemplo en la figura 1 utiliza capas convolucionales 1D en las primeras capas y capas convolucionales 2D en las capas posteriores. La arquitectura puede variar en profundidad y anchura; lo importante es que, después del entrenamiento, se generen secuencias de grises nítidas con las que se pueda leer el contenido del código.
La red convolucional a modo de ejemplo funciona con un tamaño de paso de uno(strides= 1), ya que la secuencia de grises saliente de nitidez aumentada debería tener preferiblemente el mismo tamaño que la secuencia de grises entrante. Unpaddingválido y la función de activación ReLu han demostrado su eficacia en las pruebas; en este caso, son concebibles variaciones.
Para el entrenamiento supervisado (aprendizaje supervisado) de la red convolucional, se requieren ejemplos con secuencias de grises y la respectiva secuencia en blanco y negro adecuada como etiquetas o verdad fundamental. Durante el entrenamiento, las secuencias de grises se presentan en el lado de entrada y la red neuronal aprende del error entre la predicción de salida o su binarización y la secuencia en blanco y negro correcta en cada caso del conjunto de datos de entrenamiento mediante la correspondiente adaptación de los pesos. La secuencia en blanco y negro que se va a aprender es preferiblemente ideal, es decir, cambia de luz máxima a oscuridad máxima y viceversa según el contenido del código en un borde en cada caso en solo una posición. Este requisito estricto no tiene que cumplirse necesariamente, siempre que sea una secuencia en blanco y negro la que lleve a un resultado correcto de lectura en un decodificador adecuado. Dicho sea de paso, en este caso estamos hablando de una secuencia en blanco y negro, es decir, una secuencia con solo un bit de profundidad de color. Para el entrenamiento también valdría una secuencia de grises, que solo asuma los valores de gris extremos, por ejemplo, 0 y 255 u otro valor de gris muy bajo o alto. Entre las dos opciones ya no se distingue propiamente.
Para el rendimiento relacionado con la aplicación, resulta ventajoso que el entrenamiento se base en imágenes de ejemplo reales. De esta manera, la red convolucional se entrena lo mejor posible para los efectos que se producen en la práctica y, sobre todo, para las combinaciones de estos efectos. Preferiblemente, se captan códigos de barras con anchuras de módulo mayores, para garantizar que el contenido del código pueda leerse y así esté presente o pueda reconstruirse una secuencia en blanco y negro correcta a partir del contenido del código. Las secuencias de grises se reducen(downsampling)para crear artificial y posteriormente la situación de un código de barras capturado con un tamaño de módulo pequeño, por ejemplo, de 0,75 píxeles por módulo. La resolución de las respectivas secuencias en blanco y negro se reduce correspondientemente.
Para reducir los artefactos de discretización o de muestreo al reducir la resolución, es ventajoso aplicar primero un filtro previo que dependa de la resolución objetivo y luego muestrear la señal filtrada en la resolución objetivo. Alternativamente, si el factor de escalado es un número entero, basta un simple promedio. Otra posibilidad es un promedio ponderado, por ejemplo, (0.5*x1+x2+x3+x4+0.5*x5) para una vecindad respectiva x1...x5 de píxeles con un tamaño de paso de tres píxeles y un factor de escalado de tres. Esta operación genera una mayor falta de nitidez, lo que puede ser deseable para un entrenamiento que pretende cubrir situaciones tan críticas.
En lugar de ello o para aumentar la cantidad de datos de entrenamiento, también es posible utilizar secuencias de grises generadas artificialmente y secuencias en blanco y negro adecuadas. Tales secuencias se pueden generar a partir del contenido del código, en donde deben aplicarse al menos a secuencias de grises diferentes filtros de alienación para al menos acercarse a las capturas de imagen reales. Además, estos filtros de alienación también son adecuados para derivar conjuntos de datos de entrenamiento adicionales a partir de conjuntos de datos de entrenamiento existentes.
Dado que de esta manera la red convolucional está entrenada para un tamaño de módulo específico, puede tener sentido reescalar las secuencias de grises alimentadas a este tamaño de módulo entrenado antes de las inferencias durante la operación. Pero especialmente en el caso de reescalados no enteros, es importante considerar cuidadosamente si el reescalado no introduce artefactos que anulen la ventaja del tamaño de módulo apropiado.
La figura 6 muestra un resultado a modo de ejemplo de una aplicación de la red convolucional entrenada. La señal de entrada es la secuencia 32 de grises de mayor resolución. Como ya se ha explicado en relación con las figuras 2 y 3, no todos los extremos y bordes se pueden reconocer claramente, y el rango de valores de gris disponible prácticamente nunca se agota. Sin embargo, la secuencia 34 de grises más nítida que genera la red convolucional varía con bordes muy pronunciados entre el brillo mínimo y máximo. En tramos largos, la secuencia 34 de grises más nítida es idéntica a la secuencia 36 en blanco y negro ideal (verdad fundamental). Todavía se puede observar una desviación en los bordes y en algunos extremos. Se puede reconocer que se puede establecer un umbral simple en un valor de gris medio, con lo que la binarización al menos se acerca mucho a la secuencia 36 en blanco y negro ideal. El criterio en este caso no es la perfección, sino crear los requisitos previos para una lectura correcta del código.
Las figuras 7 a-d muestran el resultado en una representación alternativa. En la figura 7a, la secuencia 32 de grises de mayor resolución se muestra ahora reproducida como un fragmento de imagen. La imagen está borrosa y ofrece poco contraste. La figura 7b muestra una representación correspondiente de las secuencias 34 de grises nítidas. Solo en algunas transiciones aparecen valores de gris que no son blancos ni negros. La figura 7c muestra el resultado de binarización correspondiente, que ahora elimina estos valores, grises asignándolos a blanco o negro. La figura 7d es una representación correspondiente de la secuencia 36 en blanco y negro ideal. Si se comparan las figuras 7c y 7d, todavía hay algunas barras que son demasiado estrechas. Sin embargo, un decodificador puede hacer frente a esto, siempre que dichas diferencias de anchura de las barras y los huecos se mantengan claramente por debajo del tamaño de módulo, pero también mediante múltiples intentos, correcciones de errores y similares.
En otra forma de realización, el filtro no lineal se puede implementar como procedimiento clásico como alternativa a un procedimiento de aprendizaje automático. Esto se explica en este caso recurriendo al ejemplo de la deconvolución de Richardson-Lucy, un algoritmo iterativo cuyo objetivo es eliminar el desenfoque de una señal que se creó durante la captura(deblurring).A este respecto, se utiliza una función de dispersión de puntos como base y se supone que el desenfoque en el sistema óptico se ha producido por una convolución con esta función de dispersión de puntos. En consecuencia, la falta de nitidez puede repararse mediante la deconvolución.
Preferiblemente, primero se estima si la secuencia 32 de grises de mayor resolución entrante presenta algún desenfoque. Si este es el caso, se lleva a cabo un número preferiblemente predeterminado con anterioridad de iteraciones de Richardson-Lucy y se obtiene posteriormente la secuencia 34 de grises nítida. Como función de dispersión de puntos se adopta, por ejemplo, la función de desenfoque gaussiano. El ancho de la función de desenfoque se puede elegir en función del desenfoque estimado previamente. El número de iteraciones es una compensación entre el tiempo de cálculo disponible, la nitidez deseada y los posibles artefactos debidos a una sobrecorrección. La mencionada función de dispersión de puntos ha demostrado su eficacia empíricamente. El número y la función de dispersión de puntos adecuada pueden variar y se pueden seleccionar en función de los resultados.
La figura 8 está construida de la misma manera que la figura 6 y muestra un resultado comparativo de una secuencia 34 de grises de mayor resolución (ahora una secuencia 34 de grises con mayor nitidez mediante un procedimiento clásico en lugar del procedimiento de aprendizaje automático, concretamente en el ejemplo de deconvolución de Richardson-Lucy en lugar de una red convolucional) y una secuencia 36 en blanco y negro ideal. También en esta forma de realización se produce una mejora significativa gracias al filtro no lineal, aunque en los ejemplos mostrados la red convolucional resulta algo más potente. Sin embargo, después de la binarización, no hay caídas relevantes.
Las figuras 9a-d muestran el resultado nuevamente de manera análoga a las figuras 7a-d, con las secuencias 32 de grises de mayor resolución en la figura 9a, las secuencias 34 de grises más nítidas en la figura 9b mediante la deconvolución de Richardson-Lucy, el correspondiente resultado de binarización en la figura 9c y las secuencias 36 en blanco y negro ideales en la figura 9d.
Las dos formas de realización explicadas concretamente con ayuda de las figuras 5 a 9 se basan en la secuencia 32 de grises de mayor resolución como variable de entrada. Ya se ha mencionado que las dos etapas de aumentar la resolución y la nitidez también se pueden realizar juntas. En particular, a este respecto se entrena una red convolucional que, como variable de entrada bidimensional, obtiene una imagen, correspondientemente a la figura 4 a la izquierda, con varias secuencias 30 de grises originales, que opcionalmente se alinean entre sí en dirección de las líneas y, después, mediante convoluciones 2D, omitiendo una emisión explícita de una secuencia 32 de grises de mayor resolución, ofrece la secuencia 34 de grises más nítida. Opcionalmente, la red convolucional también puede aprender la binarización, en donde esta etapa resulta muy sencilla gracias a la preparación y, por tanto, un tratamiento clásico puede resultar más ventajoso.

Claims (12)

  1. REIVINDICACIONES
    i.Procedimiento para leer un código (20) óptico unidimensional, en el que los datos de imagen se graban con el código (20) y, a partir de los datos de imagen, se obtienen varias secuencias (30) de grises mediante el código, a partir de las secuencias (30) de grises se forma una secuencia en blanco y negro mediante binarización y, a partir de la secuencia en blanco y negro se lee el contenido de código del código (20),caracterizado
    por que, a partir de las varias secuencias (30) de grises, para la preparación de la binarización, primero se genera una secuencia (34) de grises nítida con una resolución aumentada bordes más nítidos y extremos más pronunciados en comparación con los datos de imagen originales, y por que la secuencia (34) de grises nítida se binariza para formar la secuencia en blanco y negro.
  2. 2. Procedimiento según la reivindicación 1,
    en donde, en un procesamiento previo, los datos de imagen se segmentan para encontrar una región de imagen con el código (20).
  3. 3. Procedimiento según la reivindicación 1 o 2,
    en donde, en un procesamiento previo, se determina una orientación del código (20) en los datos de imagen.
  4. 4. Procedimiento según una de las reivindicaciones anteriores,
    en donde, para la preparación de la binarización, primero se genera una secuencia (32) de grises de mayor resolución a partir de varias secuencias (30) de grises.
  5. 5. Procedimiento según la reivindicación 4,
    en donde la secuencia (34) de grises más nítida se genera a partir de la secuencia (32) de grises de mayor resolución mediante un procedimiento de deconvolución, en particular, un procedimiento de Richardson-Lucy.
  6. 6. Procedimiento según la reivindicación 4,
    en donde la secuencia (34) de grises más nítida se genera a partir de la secuencia (32) de grises de mayor resolución mediante un procedimiento de aprendizaje automático.
  7. 7. Procedimiento según la reivindicación 6,
    en donde el procedimiento de aprendizaje automático presenta una red neuronal, en particular, una red convolucional con un núcleo de filtro de un ancho correspondiente a un tamaño de módulo del código (20) en la secuencia (32) de grises de mayor resolución.
  8. 8. Procedimiento según una de las reivindicaciones 1 a 4,
    en donde, a partir de varias secuencias (30) de grises se genera una secuencia (32) de grises de mayor resolución o la secuencia (34) de grises más nítida mediante un procedimiento de aprendizaje automático, en particular, una red convolucional.
  9. 9. Procedimiento según una de las reivindicaciones 6 a 8,
    en donde el procedimiento de aprendizaje automático se entrena mediante aprendizaje supervisado usando datos de entrenamiento, que asocian una secuencia (30, 32, 34) de grises y una secuencia (36) en blanco y negro entre sí, y en donde los datos de entrenamiento se obtienen de un contenido de código predeterminado o un código (20) leído correctamente.
  10. 10. Procedimiento según la reivindicación 9,
    en donde la resolución de los datos de entrenamiento se reduce, para obtener datos de entrenamiento con un tamaño de módulo pequeño.
  11. 11. Procedimiento según una de las reivindicaciones anteriores,
    en donde los datos de imagen se capturan en el movimiento relativo de un elemento (24) receptor de luz y un objeto (14) portador de código, en particular, por líneas.
  12. 12. Dispositivo (10) de lectura de códigos para leer un código (20) óptico unidimensional con al menos un elemento (24) receptor de luz para capturar datos de imagen con el código (20) y con una unidad (26) de control y evaluación, que está configurada para realizar un procedimiento según una de las reivindicaciones precedentes.
ES22177569T 2022-06-07 2022-06-07 Lectura de un código óptico unidimensional Active ES2991352T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
EP22177569.5A EP4290403B1 (de) 2022-06-07 2022-06-07 Lesen eines eindimensionalen optischen codes

Publications (1)

Publication Number Publication Date
ES2991352T3 true ES2991352T3 (es) 2024-12-03

Family

ID=81975282

Family Applications (1)

Application Number Title Priority Date Filing Date
ES22177569T Active ES2991352T3 (es) 2022-06-07 2022-06-07 Lectura de un código óptico unidimensional

Country Status (5)

Country Link
US (1) US12307755B2 (es)
EP (1) EP4290403B1 (es)
JP (1) JP7556088B2 (es)
CN (1) CN117195925A (es)
ES (1) ES2991352T3 (es)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102023102950B3 (de) * 2023-02-07 2023-11-30 Sick Ag Codelesevorrichtung und Verfahren zum parallelen Lesen einer Vielzahl von Codes
DE102023134454A1 (de) * 2023-12-08 2025-06-12 MTU Aero Engines AG Verfahren zum Bereitstellen einer Identifikationsinformation eines Bauteils

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070164115A1 (en) * 2006-01-17 2007-07-19 Symboltechnologies, Inc. Automatic exposure system for imaging-based bar code reader
JP5028582B2 (ja) 2006-11-27 2012-09-19 国立大学法人電気通信大学 光学的情報読取装置及び光学的情報読取方法
EP2003599A1 (de) 2007-06-14 2008-12-17 Sick Ag Optoelektronischer Sensor und Verfahren zur Erfassung von Codes
EP2415015B1 (en) * 2009-03-30 2015-08-12 Telefonaktiebolaget LM Ericsson (publ) Barcode processing
US8576446B2 (en) 2009-08-21 2013-11-05 Konica Minolta Laboratory U.S.A., Inc. Deblurring and supervised adaptive thresholding for print-and-scan document image evaluation
EP2555160B1 (de) 2011-08-05 2013-10-09 Sick Ag Erzeugung eines in interessante und uninteressante Bereiche vorsegmentierten Bildes
TWI560620B (en) * 2016-01-20 2016-12-01 Qisda Corp Barcode decoding method
EP3428834B1 (de) * 2017-07-12 2019-06-12 Sick AG Optoelektronischer codeleser und verfahren zum lesen von optischen codes
CN109325491B (zh) 2018-08-16 2023-01-03 腾讯科技(深圳)有限公司 识别码识别方法、装置、计算机设备和存储介质
JP6761603B2 (ja) 2018-08-23 2020-09-30 カシオ計算機株式会社 携帯端末装置、情報記録方法、及びプログラム
DK3789906T3 (da) 2019-09-05 2021-08-23 Sick Ag Bestemmelse af modulstørrelsen for en optisk kode
EP3812953B1 (de) 2019-10-22 2021-09-29 Sick Ag Codeleser und verfahren zum lesen von optischen codes
EP3916633A1 (de) 2020-05-25 2021-12-01 Sick Ag Kamera und verfahren zum verarbeiten von bilddaten

Also Published As

Publication number Publication date
EP4290403C0 (de) 2024-07-31
JP7556088B2 (ja) 2024-09-25
CN117195925A (zh) 2023-12-08
EP4290403A1 (de) 2023-12-13
US12307755B2 (en) 2025-05-20
US20230394259A1 (en) 2023-12-07
JP2023179358A (ja) 2023-12-19
EP4290403B1 (de) 2024-07-31

Similar Documents

Publication Publication Date Title
US5446271A (en) Omnidirectional scanning method and apparatus
JP6869208B2 (ja) 光電式コードリーダ及び光学コードの読み取り方法
ES2991352T3 (es) Lectura de un código óptico unidimensional
US8091788B2 (en) Methods and systems for optical code reading using virtual scan lines
US12022056B2 (en) Methods and arrangements for configuring industrial inspection systems
US8267321B2 (en) Enhanced-density barcode
US20210368096A1 (en) Camera and method for processing image data
CN110309687A (zh) 一种二维码图像的校正方法及校正装置
BRPI1100823B1 (pt) Sistema e método automático para rastreamento e decodificação de código de barras por meio de dispositivos portáteis equipados com câmeras digitais
US20100177363A1 (en) Prioritized virtual scan line processing
EP3098757A1 (en) Region of interest location and selective image compression
KR102419540B1 (ko) 광학 코드의 모듈 크기의 결정
CN108352054A (zh) 图像处理设备
AU2006227490B2 (en) Apparatus and process for two-stage decoding of high-density optical symbols
CN117454915A (zh) 光学代码的读取
US20230370724A1 (en) Recording and brightness adjustment of an image
US10872257B2 (en) Barcode detection method and barcode detection system for increasing detection efficiency
US20110073655A1 (en) Blur Resistant Barcode
ES2985426T3 (es) Determinación del tamaño de módulo de un código óptico
CN115994548A (zh) 基于相机的读码器和用于读取光学代码的方法
EP2310896B1 (en) One dimensional barcode reader using two dimensional image sensor
Sancar Reconstructing unreadable QR codes: a deep learning based super resolution strategy
CN113033234B (zh) 条码检测方法及系统
US20230196808A1 (en) Code reader and method of reading an optical code
Burian et al. Camera barcode reader with automatic localization, detection of orientation and type classification