DE102019217980A1 - Verfahren und vorrichtung zum dekodieren von unter-aufgelösten symbolen - Google Patents

Verfahren und vorrichtung zum dekodieren von unter-aufgelösten symbolen Download PDF

Info

Publication number
DE102019217980A1
DE102019217980A1 DE102019217980.0A DE102019217980A DE102019217980A1 DE 102019217980 A1 DE102019217980 A1 DE 102019217980A1 DE 102019217980 A DE102019217980 A DE 102019217980A DE 102019217980 A1 DE102019217980 A1 DE 102019217980A1
Authority
DE
Germany
Prior art keywords
module
scan
grid
modules
pixel
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.)
Pending
Application number
DE102019217980.0A
Other languages
English (en)
Inventor
Ivan Bachelder
James A. Negro
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.)
Cognex Corp
Original Assignee
Cognex Corp
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
Priority claimed from US16/198,203 external-priority patent/US10599902B2/en
Application filed by Cognex Corp filed Critical Cognex Corp
Publication of DE102019217980A1 publication Critical patent/DE102019217980A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/146Methods for optical code recognition the method including quality enhancement steps
    • 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
    • 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/14131D bar codes
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Toxicology (AREA)
  • Health & Medical Sciences (AREA)
  • Electromagnetism (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Image Processing (AREA)
  • Error Detection And Correction (AREA)

Abstract

Die hierin beschriebenen Techniken beziehen sich auf Verfahren, Vorrichtungen und computerlesbare Medien, die konfiguriert sind, um ein Symbol in einem digitalen Bild zu dekodieren. Ein digitales Bild eines Teils eines Symbols wird empfangen, das ein Pixelgitter umfasst und das Symbol umfasst ein Modulgitter. Eine räumliche Zuordnung zwischen einer zusammenhängenden Teilmenge von Modulen im Modulgitter zum Pixelgitter wird bestimmt. Kausalzusammenhänge werden unter Verwendung der räumlichen Zuordnung zwischen jedem Modul und dem Pixelgitter bestimmt. Ein Satz von gültigen Wertekombinationen von benachbarten Modulen in der zusammenhängenden Teilmenge von Modulen wird gegen das Pixelgitter unter Verwendung der Kausalzusammenhänge getestet. Ein Wert von mindestens einem Modul der zwei oder mehr benachbarten Module wird basierend auf dem getesteten Satz von gültigen Kombinationen bestimmt. Das Symbol wird basierend auf dem bestimmten Wert des mindestens einen Moduls dekodiert.

Description

  • VERWANDTE ANMELDUNGEN
  • Diese Anmeldung ist eine Continuation-in-part, die unter 35 U.S.C. § 120 den Nutzen der US-Patentanmeldung mit der Seriennummer 16/043,029 mit dem Titel „DECODING BARCODES“, eingereicht am 23. Juli 2018 beansprucht, die eine Continuation ist, die unter 35 U.S.C. § 120 den Nutzen von 15/470,470 mit dem Titel „DECODING BARCODES“, eingereicht am 27. März 2017 (jetzt erteilt als US-Patent Nr. 10,032,058 ) beansprucht, die eine Continuation ist, die unter 35 U.S.C. § 120 den Nutzen der US-Patentanmeldung Nr. 14/510,710 mit dem Titel „DECODING BARCODES“, eingereicht am 9. Oktober 2014 (jetzt erteilt als US-Patent Nr. 9,607,200 ) beansprucht, auf die hiermit in vollem Umfang Bezug genommen wird.
  • TECHNISCHES GEBIET
  • Die hierin beschriebenen Techniken betreffen im Allgemeinen das Dekodieren von unter-aufgelösten zweidimensionalen Symbolen, wie etwa von zweidimensionalen Strichcodes.
  • HINTERGRUND
  • Verschiedene Typen von Symbolen können verwendet werden, um Informationen für verschiedene Zwecke zu kodieren, wie etwa automatisierte Identifizierung von Teilen. Ein Strichcode ist ein Typ von Symbol, der Informationen unter Verwendung eines binären räumlichen Musters kodiert, das typischerweise rechteckig ist. Ein eindimensionaler Strichcode kodiert die Informationen mit einer oder mehreren räumlich zusammenhängende Sequenzen von abwechselnden parallelen Strichen und Abständen (z.B. Elementen) mit variabler Breite. Für bestimmte Typen von eindimensionalen Strichcodes (z.B. oft Mehr-Breiten-Strichcodes genannt) ist die Breite jedes Elements ein ganzzahliges Vielfaches von Modulen. Ein zweidimensionaler Strichcode kodiert typischerweise Informationen als einheitliches Gitter von Modul-Elementen, von denen jedes schwarz oder weiß sein kann.
  • Typischerweise werden Strichcodes durch Drucken (z.B. mit Tinte) oder Markieren (z.B. durch Ätzen) von Strich- oder Modul-Elementen auf einem Substrat mit gleichförmiger Reflexion (z.B. Papier oder Metall) erzeugt. Die Striche oder dunklen Module haben typischerweise eine niedrigere Reflexion als das Substrat und erscheinen daher dunkler als die Abstände zwischen ihnen (z.B. wie wenn ein Strichcode mit schwarzer Tinte auf weißes Papier gedruckt wird). Aber Strichcodes können auf jede Weise gedruckt werden, wie etwa wenn ein Strichcode mit weißer Farbe auf ein schwarzes Objekt gedruckt wird. Um einen Strichcode einfacher vom Hintergrund zu differenzieren, wird das Symbol typischerweise relativ weit entfernt von anderen Druck- oder sichtbaren Strukturen platziert. Eine solche Entfernung erzeugt einen Raum, oft als die Ruhezone bezeichnet, sowohl vor dem ersten Strich als auch nach dem letzten Strich (z.B. im Fall eines eindimensionalen Strichcodes) oder um das Gitter von Modul-Elementen (z.B. im Fall eines zweidimensionalen Strichcodes). Alternativ können die Abstände und Ruhezonen gedruckt oder markiert sein, und die Striche werden implizit durch das Substrat gebildet.
  • Jedoch haben Lesegeräte oft Schwierigkeiten, Strichcodes zu dekodieren, die unter-aufgelöst sind, wie etwa Strichcodes die unter-abgetastet (z.B. auf Grund niedriger Abtastraten oder Sensoren niedriger Auflösung) und/oder verschwommen (z.B. auf Grund von schlechter Fokussierung des Lesegeräts oder der Effekte von Bewegung) sind.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • In Übereinstimmung mit dem offenbarten Gegenstand werden Vorrichtungen, Systeme und Verfahren zum Dekodieren von unter-aufgelösten Symbolen, wie etwa eindimensionalen (1D) Mehr-Breiten-Symbolen und zweidimensionalen (2D) Symbolen bereitgestellt. Die Erfinder haben festgestellt, dass vorhandene Techniken zur Dekodierung von 2D-Symbolen unter-aufgelöste 2D-Symbole nicht ausreichend dekodieren können. Zusätzlich haben die Erfinder festgestellt, dass vorhandene Techniken, die zur Dekodierung von unter-aufgelösten 1D-Symbolen verwendet werden, nicht einfach erweitert werden können, um unter-aufgelöste 2D-Symbole zu dekodieren (z.B. wegen der exponentiell größeren möglichen Lösungssätze für ein 2D-Symbol im Vergleich zu einem Bereich wie etwa einem Charakter eines 1D-Symbols) oder um große Bereiche von Mehr-Breiten-1D-Symbolen ohne Aufspaltung in einzelne Charaktere zu dekodieren. Die Erfinder haben alternative Techniken entwickelt, die einen initialen Satz von Modulen eines Mehr-Breiten-1D- oder 2D-Symbols bestimmen, basierend auf bekannten Aspekten des Symbols und/oder einer mathematischen Beziehung, die zwischen den Modulen des Modulgitters und den Pixels im Pixelgitter des Bilds bestimmt wurde. Der initial bestimmte Satz von Modulen wird ausgenutzt, um eine ausreichende Anzahl von verbleibenden Modulwerten zu bestimmen, sodass das System das Symbol dekodieren kann. In einigen Ausführungsformen umfassen die Techniken zuerst Ausnutzen von bekannten Aspekten von Symbolen, um einen ersten Satz von Modulen des Symbols zu bestimmen, dann Bestimmen (z.B. auf iterative Weise) eines zweiten Satzes von Modulen des Symbols, basierend auf dem ersten Satz von Modulen und/oder der mathematischen Beziehung zwischen Pixeln auf dem Bild und den Modulen für das Symbol, und dann Ausprobieren gültiger Kombinationen nur für die verbleibende Teilmenge von Modulen, die noch nicht hergeleitet worden sind (z.B. Ausnutzen vorher bestimmter Modulwerte), um einen dritten Satz von Modulen für das Modulgitter zu bestimmen. Solche Techniken dekodieren eine ausreichende Anzahl von Modulen für das Symbol, um dem System zu erlauben, das volle Symbol zu dekodieren.
  • Einige Aspekte beziehen sich auf ein computergestütztes Verfahren zum Dekodieren eines Symbols in einem digitalen Bild. Das Verfahren umfasst: Empfangen eines digitalen Bildes eines Teils eines Symbols, wobei das digitale Bild ein Pixelgitter umfasst und das Symbol ein Modulgitter umfasst; Bestimmen einer räumlichen Zuordnung zwischen einer zusammenhängenden Teilmenge von Modulen im Modulgitter zum Pixelgitter; Bestimmen von Kausalzusammenhängen zwischen jedem Modul in der zusammenhängenden Teilmenge von Modulen und dem Pixelgitter unter Verwendung der räumlichen Zuordnung, wobei jeder Kausalzusammenhang den Einflussgrad darstellt, den der Wert eines Moduls auf jeden der Werte einer Teilmenge von Pixeln im Pixelgitter hat; Testen eines Satzes gültiger Wertekombinationen von zwei oder mehr benachbarten Modulen in der zusammenhängenden Teilmenge von Modulen gegen das Pixelgitter unter Verwendung der Kausalzusammenhänge; Bestimmen eines Wertes von mindestens einem Modul der zwei oder mehr benachbarten Module, basierend auf dem getesteten Satz gültiger Kombinationen; und Dekodieren des Symbols, basierend auf dem bestimmten Wert des mindestens einen Moduls.
  • In einigen Beispielen umfassen die zwei oder mehr benachbarten Module in der zusammenhängenden Teilmenge von Modulen in dem Modulgitter ein Drei-mal-Drei-Teilgitter des Modulgitters. Mindestens ein Modul der zwei oder mehr Module kann ein zentrales Modul des Drei-mal-Drei-Teilgitters sein.
  • In einigen Beispielen umfasst die zusammenhängende Teilmenge von Modulen mindestens ein vorher bestimmtes Modul mit einem bekannten Wert und wobei die Menge der gültigen Wertekombinationen der zwei oder mehr benachbarten Module nur die Kombinationen mit dem bekannten Wert für das mindestens eine vorher bestimmte Modul umfasst. Das vorher bestimmte Modul kann ein Modul innerhalb eines Finder- oder eines Zeitmusters des Symbols sein. Der bekannte Wert für das vorher bestimmte Modul kann allein basierend auf dem Wert eines einzelnen Pixels in dem Pixelgitter abgeleitet werden, aufgrund dessen, dass das einzelne Pixel einen dominanten Kausalzusammenhang mit dem vorher bestimmten Modul hat, verglichen mit den Kausalzusammenhängen zwischen den anderen Pixeln in der Teilmenge von Pixeln und dem vorher bestimmten Modul. Vorher bestimmte Module können jedes Modul mit einem zuvor bestimmten Wert umfassen.
  • In einigen Beispielen umfasst das Bestimmen der Kausalzusammenhänge das Identifizieren eines Grades, zu dem jedes Modul in der zusammenhängenden Teilmenge von Modulen mit jedem Pixel im Pixelgitter überlappt, um einen Satz von Überlappungsgraden zu erzeugen, unter Verwendung der räumlichen Beziehung. Der Grad, zu dem jedes Modul in der zusammenhängenden Teilmenge von Modulen mit jedem Pixel im Pixelgitter überlappt, kann durch einen Satz von Abtastkoeffizienten, und als Teil einer Abtastmatrix dargestellt werden.
  • In einigen Beispielen sind das Pixelgitter und das Modulgitter beide zweidimensional.
  • In einigen Beispielen ist das Pixelgitter ein eindimensionales Gitter von Abtastungen von einem eindimensionalen Scan durch ein zweidimensionales Bild, und das Modulgitter ist ein eindimensionales Modulgitter.
  • In einigen Beispielen ist das Symbol aus der Gruppe ausgewählt, die aus einem eindimensionalen (1D) Strichcode und einem zweidimensionalen (2D) Strichcode besteht.
  • Einige Aspekte beziehen sich auf eine Vorrichtung zum Dekodieren eines Symbols in einem digitalen Bild. Die Vorrichtung umfasst einen Prozessor, der mit dem Speicher in Verbindung steht. Der Prozessor ist so konfiguriert, dass er in dem Speicher gespeicherte Anweisungen auszuführt, die den Prozessor zu Folgendem veranlassen: Empfangen eines digitalen Bildes eines Teils eines Symbols, wobei das digitale Bild ein Pixelgitter umfasst und das Symbol ein Modulgitter umfasst; Bestimmen einer räumlichen Zuordnung zwischen einer zusammenhängenden Teilmenge von Modulen im Modulgitter zum Pixelgitter; Bestimmen von Kausalzusammenhängen zwischen jedem Modul in der zusammenhängenden Teilmenge von Modulen und dem Pixelgitter unter Verwendung der räumlichen Zuordnung, wobei jeder Kausalzusammenhang den Einflussgrad darstellt, den der Wert eines Moduls auf jeden der Werte einer Teilmenge von Pixeln im Pixelgitter hat; Testen eines Satzes gültiger Wertekombinationen von zwei oder mehr benachbarten Modulen in der zusammenhängenden Teilmenge von Modulen gegen das Pixelgitter unter Verwendung der Kausalzusammenhänge; Bestimmen eines Wertes von mindestens einem Modul der zwei oder mehr benachbarten Module. basierend auf dem getesteten Satz von gültigen Kombinationen; und Dekodieren des Symbols basierend auf dem bestimmten Wert des mindestens einen Moduls.
  • In einigen Beispielen umfassen die zwei oder mehr benachbarten Module in der zusammenhängenden Teilmenge von Modulen in dem Modulgitter ein Drei-mal-Drei-Teilgitter des Modulgitters.
  • In einigen Beispielen umfasst die zusammenhängende Teilmenge von Modulen mindestens ein vorher bestimmtes Modul mit einem bekannten Wert, und wobei der Satz von gültigen Wertekombinationen der zwei oder mehr benachbarten Module nur die Kombinationen mit dem bekannten Wert für das mindestens eine vorher bestimmte Modul umfasst.
  • In einigen Beispielen umfasst das Bestimmen der Kausalzusammenhänge das Identifizieren eines Grades, zu dem jedes Modul in der zusammenhängenden Teilmenge von Modulen mit jedem Pixel in dem Pixelgitter überlappt, um einen Satz von Überlappungsgraden zu erzeugen, unter Verwendung der räumlichen Beziehung.
  • In einigen Beispielen sind das Pixelgitter und das Modulgitter beide zweidimensional.
  • In einigen Beispielen ist das Pixelgitter ein eindimensionales Gitter von Abtastungen von einem eindimensionalen Scan durch ein zweidimensionales Bild, und das Modulgitter ist ein eindimensionales Modulgitter.
  • In einigen Beispielen ist das Symbol aus der Gruppe ausgewählt, die aus einem eindimensionalen (1D) Strichcode und einem zweidimensionalen (2D) Strichcode besteht.
  • Einige Ausführungsformen betreffen mindestens ein nichtflüchtiges computerlesbares Speichermedium. Das nichtflüchtige computerlesbare Medium speichert Prozessor-ausführbare Anweisungen, die, wenn sie von mindestens einem Computerhardware-Prozessor ausgeführt werden, den mindestens einen Computerhardware-Prozessor veranlassen, die folgenden Schritte auszuführen: Empfangen eines digitalen Bildes eines Teils eines Symbols, wobei das digitale Bild ein Pixelgitter umfasst und das Symbol ein Modulgitter umfasst; Bestimmen einer räumlichen Zuordnung zwischen einer zusammenhängenden Teilmenge von Modulen im Modulgitter zum Pixelgitter; Bestimmen von Kausalzusammenhängen zwischen jedem Modul in der zusammenhängenden Teilmenge von Modulen und dem Pixelgitter unter Verwendung der räumlichen Zuordnung, wobei jeder Kausalzusammenhang den Einflussgrad darstellt, den der Wert eines Moduls auf jeden der Werte einer Teilmenge von Pixeln im Pixelgitter hat; Testen eines Satzes gültiger Wertekombinationen von zwei oder mehr benachbarten Modulen in der zusammenhängenden Teilmenge von Modulen gegen das Pixelgitter unter Verwendung der Kausalzusammenhänge; Bestimmen eines Wertes von mindestens einem Modul der zwei oder mehr benachbarten Module, basierend auf dem getesteten Satz von gültigen Kombinationen; und Dekodieren des Symbols basierend auf dem bestimmten Wert des mindestens einen Moduls.
  • So wurden die Merkmale des offenbarten Gegenstands ziemlich grob umrissen, damit die folgende ausführliche Beschreibung davon besser verstanden werden kann und damit der vorliegende Beitrag zum Stand der Technik besser gewürdigt werden kann. Es gibt natürlich zusätzliche Merkmale des offenbarten Gegenstands, die nachfolgend beschrieben werden und den Gegenstand der beigefügten Ansprüche bilden. Es versteht sich, dass die hierin verwendete Ausdrucksweise und Terminologie nur dem Zweck der Beschreibung dient und nicht als beschränkend angesehen werden sollte.
  • Figurenliste
  • In den Zeichnungen ist jede identische oder nahezu identische Komponente, die in verschiedenen Figuren dargestellt ist, durch ein gleiches Bezugszeichen dargestellt. Aus Gründen der Übersichtlichkeit ist möglicherweise nicht jede Komponente in jeder Zeichnung gekennzeichnet. Die Zeichnungen sind nicht notwendigerweise maßstabsgetreu dargestellt, der Schwerpunkt liegt stattdessen auf der Veranschaulichung verschiedener Aspekte der hier beschriebenen Techniken und Vorrichtungen.
    • 1A veranschaulicht einen Strichcode, der unter Verwendung einer Zwei-Breiten-Symbologie erzeugt wurde;
    • 1B veranschaulicht die Dimensionen der Zwei-Breiten-Symbologie;
    • 2 veranschaulicht einen Strichcode, der unter Verwendung einer Mehr-Breiten-Symbologie erzeugt wurde;
    • 3 veranschaulicht ein beispielhaftes Scansignal;
    • 4 veranschaulicht eine beispielhafte Scanlinie Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 1 SPM und 0 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 5 veranschaulicht eine beispielhafte Scanlinie Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 1 SPM und 0 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 6 veranschaulicht eine beispielhafte Scanlinie Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 1 SPM und 0,5 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 7 veranschaulicht eine beispielhafte Scanlinie Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 1 SPM und -0,25 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 8 veranschaulicht eine beispielhafte Scanlinie Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 1,33 SPM und 0,33 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 9 veranschaulicht eine beispielhafte Scanlinie Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 0,75 SPM und -0,25 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 10 veranschaulicht eine beispielhafte Scanlinie Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 0,84 SPM, 2,1 Breite (W) und -0,16 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 11 veranschaulicht ein beispielhaftes computergestütztes Verfahren zum Erzeugen eines bildbasierten Dekodierungsalgorithmus zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 12 veranschaulicht ein beispielhaftes computergestütztes Verfahren eines Laserscanner-Dekodieralgorithmus zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 13A-B veranschaulichen ein beispielhaftes computergestütztes Verfahren zum Dekodieren eines Strichcodes aus einem Scansignal, in Übereinstimmung mit manchen Ausführungsformen;
    • 14A-C veranschaulichen ein beispielhaftes computergestütztes Verfahren zum Orten und Dekodieren eines ersten Begrenzungscharakters zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 15 veranschaulicht ein beispielhaftes computergestütztes Verfahren zum Bestimmen eines Einheitsabtastkoeffizienten zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Aus führungs formen;
    • 16 veranschaulicht ein beispielhaftes computergestütztes Verfahren zum Bewerten eines Charakters aus einem Scansignal zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen;
    • 17 veranschaulicht ein beispielhaftes computergestütztes Verfahren zum Dekodieren eines Charakters aus einem Scansignal eines Mehr-Breiten-Strichcodes zum Dekodieren des Strichcodes, in Übereinstimmung mit manchen Ausführungsformen; und
    • 18 veranschaulicht ein beispielhaftes computergestütztes Verfahren zum Dekodieren eines Charakters aus einem Scansignal eines Zwei-Breiten- oder Mehr-Breiten-Strichcodes zum Dekodieren des Strichcodes, in Übereinstimmung mit manchen Ausführungsformen.
    • 19A zeigt ein beispielhaftes DataMatrix-2D-Symbol, gemäß einigen Beispielen.
    • 19B zeigt ein beispielhaftes QR-Code-Symbol, gemäß einigen Beispielen.
    • 20 zeigt ein beispielhaftes computergestütztes Verfahren zum Dekodieren eines unter-aufgelösten 2D-Symbols, gemäß einigen Ausführungsformen.
    • 21 zeigt ein beispielhaftes Bild eines 2D-Symbols, gemäß einigen Ausführungsformen.
    • 22A zeigt ein beispielhaftes Modulgitter für ein 2D-Symbol, das über dem Bild von 21 liegt, gemäß einigen Ausführungsformen.
    • 22B zeigt ein Beispiel eines Bereich der Abtastmatrix, der den Prozentsatz angibt, mit dem Pixel in dem Pixelgitter ein beispielhaftes Modul des Modulgitters überlappen, gemäß einigen Ausführungsformen.
    • 23 zeigt das beispielhafte Modulgitter in 22A, bestückt mit bekannten Strukturwerten des 2D-Symbols, gemäß einigen Ausführungsformen.
    • 24 zeigt Module des beispielhaften Modulgitters, die basierend auf Beziehungen zwischen den Modulen und den Pixeln hergeleitet wurden, gemäß einigen Ausführungsformen.
    • 25A zeigt neue weiße und schwarze Modulwerte, die basierend auf bekannten Modulen bestimmt wurden, gemäß einigen Ausführungsformen.
    • 25B zeigt zusätzliche Modulwerte, die inklusive basierend auf den in 25A bestimmten neuen Modulen bestimmt wurden, gemäß einigen Ausführungsformen.
    • 26 zeigt ein beispielhaftes Bild eines Mehr-Breiten-1D-Symbols, gemäß einigen Ausführungsformen.
    • 27 zeigt ein beispielhaftes Modulgitter für ein Mehr-Breiten-1D-Symbol, das über dem Bild von 26 liegt, gemäß einigen Ausführungsformen.
    • 28 ist eine beispielhafte Darstellung des Überlappungsgrades zwischen Modulen des Modulgitters und Pixeln des Bildes, gemäß einigen Ausführungsformen.
    • 29 zeigt ein Beispiel zum Herleiten von Modulen des Modulgitters für beliebige Modulmuster, gemäß einigen Ausführungsformen.
    • 30A zeigt Module des beispielhaften Modulgitters, die basierend auf Beziehungen zwischen den Modulen und den Pixeln hergeleitet wurden, gemäß einigen Ausführungsformen.
    • 30B zeigt Module des beispielhaften Modulgitters, die basierend auf Beziehungen zwischen den Modulen und den Pixeln hergeleitet wurden, gemäß einigen Ausführungsformen.
    • 31 zeigt zusätzliche Module in dem Modulgitter, die basierend auf bekannten Modulen bestimmt wurden, gemäß einigen Ausführungsformen.
    • 32 zeigt ein Beispiel eines ungerichteten Beschränkungsgraphen, gemäß einigen Ausführungsformen.
  • AUSFÜHRLICHE BESCHREIBUNG DER ERFINDUNG
  • Die hier diskutierten Techniken können verwendet werden, um unter-aufgelöste Symbole (z.B. unter-abgetastete und/oder verschwommene Symbole) zu dekodieren. Die Erfinder haben erkannt, dass 1D- und 2D-Symboldekodiertechniken häufig bestimmte Bildauflösungen erfordern, um die Symbole zu dekodieren, beispielsweise eine Bildauflösung von mindestens 2 Pixeln pro Modul (z.B., wenn ein Modul ein einzelnes schwarzes oder weißes Element des Symbolgitters ist). Die Erfinder haben Techniken entwickelt, wie sie hierin weiter diskutiert werden, die die Symboldekodierungstechnologie verbessern, um Symbole unter Verwendung von Bildern mit niedrigerer Auflösung zu dekodieren. Beispielsweise können die Techniken verwendet werden, um 1D-Symbole (z.B. Mehr-Breiten-1D-Symbole) und/oder 2D-Symbole zu dekodieren, die mit Auflösungen unter einem Pixel pro Modul, wie z.B. 0,8 Pixel pro Modul, und niedrigeren Auflösungen, erfasst wurden.
  • In der folgenden Beschreibung werden zahlreiche spezifische Details in Bezug auf die Systeme und Verfahren des offenbarten Gegenstands und der Umgebung, in der solche Systeme und Verfahren arbeiten können, usw., dargelegt, um ein gründliches Verständnis des offenbarten Gegenstands zu bieten. Darüber hinaus versteht es sich, dass die nachstehenden Beispiele beispielhaft sind und dass es in Betracht gezogen wird, dass es andere Systeme und Verfahren gibt, die innerhalb des Umfangs des offenbarten Gegenstands liegen.
  • Jegliches einer Anzahl von Strichcodedesigns, genannt Symbologien, können für einen Strichcode verwendet werden. Jede Symbologie kann Dimensionsbeschränkungen für Strich, Abstand und Ruhezone angeben, sowie wie genau Informationen kodiert werden. Beispiele für Strichcode-Symbologien umfassen Code 128, Code 93, Code 39, Codabar, I2of5, MSI, Code 2 of 5, und UPC-EAN. Strichcodes können traditionelle „lineare“ Symbologien (z.B. Code 128 und Code 39) umfassen, wo die gesamte Information entlang einer Dimension kodiert wird. Strichcodes können auch einzelne Reihen von „gestapelten“ 2D-Symbolen umfassen (z.B. DataBar, PDF417, MicroPDF und die 2D-Komponenten von manchen zusammengesetzten Symbolen), von denen alle im Wesentlichen erlauben, Strichcodes aufeinanderzustapeln, um mehr Information zu kodieren.
  • Viele Strichcode-Symbologien fallen in zwei Kategorien: Zwei-Breiten- und Mehr-Breiten-Symbologien. Beispiele für Zwei-Breiten-Symbologien umfassen zum Beispiel Code 39, Interleaved 2 of 5, Codabar, MSI, Code 2 of 5, und Pharmacode. Jedes Element einer Zwei-Breiten-Symbologie ist entweder schmal oder breit. Ein schmales Element hat eine Breite gleich der minimalen Merkmalgröße, X. Ein breites Element hat eine Breite gleich der Breitelementgröße, W. Die Breitelementgröße W ist typischerweise ein festes reales Vielfaches der minimalen Merkmalgröße. Zwei-Ebenen-Symbologien erlauben dabei jedem Element, einen von zwei möglichen Werten darzustellen, X oder W.
  • Mehr-Breiten-Symbologien umfassen zum Beispiel Code 128, Code 93, UPC-EAN, PDF417, MicroPDF und DataBar. Jedes Element einer Mehr-Breiten-Symbologie ist ein ganzes Vielfaches, n, der minimalen Merkmalgröße (z.B. wo n eine ganze Zahl ist zwischen 1 und der maximalen Breite eines Elements, die von der Symbologie abhängen kann). Der Ausdruck Modul wird oft verwendet, um die minimale Merkmalgröße eines Mehr-Ebenen-Strichcodes zu bezeichnen, so dass jedes Element eines Mehr-Ebenen-Strichcodes aus einer ganzzahligen Anzahl von Modulen gebildet wird. Für viele Mehr-Breiten-Symbologien (z.B. wie etwa Code 128, Code 93 und UPC-EAN) liegt n im Bereich zwischen 1 und 4, kann aber viel größer sein (z.B. wie bei DataBar, wo n im Bereich zwischen 1 und 9 liegen kann).
  • Die Daten für jegliche Elementsequenz in einem Zwei- oder Mehr-Breiten-Strichcode werden durch eine entsprechende Sequenz von quantisierten Elementbreiten kodiert. Die Sequenz von Elementbreiten wird oft als das Elementbreitenmuster einer Elementsequenz bezeichnet. Das Elementbreitenmuster einer Zwei-Breiten-Elementsequenz ist ein binäres Muster, das aus schmalen (,X‘) und breiten (,W‘) Elementen besteht. Zum Beispiel wird das Elementmuster für einen Strich (W), Abstand (X), Strich (X), Abstand (X), Strich (X), Abstand (W), Strich (X), Abstand (X) und Strich (W), wo X die minimale Merkmalgröße und W die Breitelementgröße ist, als WXXXXWXXW dargestellt. Das Elementbreitenmuster einer Mehr-Breiten-Elementsequenz ist ein Muster von ganzen Zahlen, die die Breite in Modulen für jedes entsprechende Element in der Sequenz angeben. Zum Beispiel wird das Elementbreitenmuster für einen Strich (n=1), Abstand (n=1), Strich (n=1), Abstand (n=3), Strich (n=2), Abstand (n=3) als 111323 dargestellt.
  • Strichcodeelemente werden oft zu aufeinanderfolgenden Charakteren (z.B. Buchstaben und Zahlen) gruppiert, die aus ihren jeweiligen Elementen in alphanumerische Werte dekodiert werden können. In manchen Ausführungsformen werden die Daten direkt aus der gesamten Sequenz von Elementbreiten (z.B. Pharmacode-Strichcodes) bestimmt. Die möglichen Charaktere, die für jede bestimmte Symbologie kodiert werden können, werden als ihr Charaktersatz bezeichnet. Abhängig von der Symbologie gibt es mehrere verschiedene Typen von Charakteren in einem Charaktersatz, einschließlich Begrenzer und Datencharaktere. Typischerweise gibt es nur wenige verschiedene mögliche Begrenzungscharaktermuster, aber eine große Anzahl möglicher Datencharakterelement-Breitenmustern. Es ist der Strang von Datencharakterwerten, dargestellt von einem Ende des Strichcodes zum anderen, die größtenteils den kodierten Strang für den gesamten Strichcode definieren.
  • Begrenzungscharaktere, manchmal Wächtermuster genannt, kommen oft am Anfang und Ende des Strichcodes vor. Begrenzungscharaktere können verwendet werden, um es Lesegeräten zu erlauben, zum Beispiel das Symbol zu detektieren, zu bestimmen, wo zu lesen begonnen und aufgehört werden soll, und/oder den Symbologietyp zu bestimmen. Am Anfang und Ende eines Strichcodes platzierte Begrenzungscharaktere werden oft Start- bzw. Stoppcharaktere genannt. Manche Symbologien (z.B. UPC-A und DataBar) haben auch Begrenzungscharaktere innerhalb des Symbols, die Abschnitte von Datencharakteren markieren. Schließlich haben manche Symbologien (z.B. Code 128) verschiedene Startbegrenzer, die bestimmen, wie die Datencharaktere interpretiert werden.
  • Datencharaktere sind die Charaktere, die die eigentliche Information in dem Strichcode kodieren. Das Elementbreitenmuster für einen Datencharakter ist mit einem alphanumerischen Wert assoziiert. Ein spezieller Datencharakter, Prüfsummencharakter genannt, ist oft auch spezifiziert. Der Wert dieses Charakters ist im Wesentlichen eine Summe der Werte aller anderen Datencharaktere, was es einem Lesegerät erlaubt, einen falsch ausgelesenen Strang zu entdecken. Die Sequenz von alphanumerischen Werten für alle Datencharaktere bildet einen Rohstrang, der dann, manchmal unter Verwendung spezieller Formatierungsregeln, in den eigentlichen kodierten Satz von Elementen für den Strichcode umgewandelt wird.
  • Unabhängig vom Typ ist jeder Charakterwert eines Charaktersatzes mit einem einzigartigen Elementbreitenmuster assoziiert. Zum Beispiel sind die Elementbreitenmuster für ein ,A‘ und ,B‘ im Code 39-Charaktersatz WXXXXWXXW bzw. XXWXXWXXW. Wie oben erklärt, ist das Elementbreitenmuster WXXXXWXXW für ,A‘ daher ein Strich (W), Abstand (X), Strich (X), Abstand (X), Strich (X), Abstand (W), Strich (X), Abstand (X) und Strich (W), wo X die minimale Merkmalgröße und W die Breitelementgröße ist. Die Elementbreitenmuster für ,A‘ und ,B‘ im Code 128-Charaktersatz sind 111323 bzw. 131123.
  • Es ist wichtig anzumerken, dass für die meisten Symbologien alle Charaktere eines bestimmten Typs dieselbe physische Breite im Strichcode haben. Zum Beispiel haben Charaktere von Zwei-Breiten-Symbologien gewöhnlich eine konstante Anzahl von schmalen Strichen, schmalen Abständen, breiten Strichen und breiten Abständen, und beginnen typischerweise mit einem Strichelement. Charaktere von bestimmten Zwei-Breiten-Symbologien (z.B. Code 39) enden auch mit einem Strich und trennen einzelne Charaktere mittels eines speziellen Abstands namens Zwischencharakterlücke von konsistenter aber willkürlicher Breite. Solche Symbologien mit Zwischencharakterlücken zwischen Charakteren werden im Allgemeinen als diskrete Symbologien bezeichnet, während Symbologien ohne solche Lücken als kontinuierliche Symbologien bezeichnet werden. Im Gegensatz dazu haben Charaktere von Mehr-Breiten-Symbologien oft eine feste Anzahl von Gesamtmodulen, die jedes genau ein Modul breit sind, haben eine feste Anzahl von Strichen und Abständen und beginnen typischerweise mit einem Strich und enden mit einem Abstand (und haben daher keine Zwischencharakterlücke).
  • 1A veranschaulicht einen Strichcode 100, erzeugt mittels der Zwei-Breiten-Symbologie Code 39. Strichcode 100 enthält einen Satz von Elementsequenzen 102A, 102B, 102C bis 102N (kollektiv hierin als Elementsequenz 102 bezeichnet). Der Satz von Elementsequenzen kodiert den Strang PATENT 104. Jeder Buchstabe im Strang PATENT 104 wird mittels eines Datencharakters kodiert, wie etwa Elementsequenz 102B, die den Datencharakter P kodiert, und Elementsequenz 102C, die den Datencharakter A kodiert. Elementsequenzen 102A und 102N kodieren den Begrenzungscharakter, angedeutet mit *. Daher markieren Elementsequenzen 102A und 102N den Anfang und das Ende des Strichcodes 100. Wie in 1A gezeigt, hat jede Elementsequenz 102 im Strichcode 100 dieselbe physische Breite.
  • 1B ist eine vergrößerte Ansicht von Elementsequenz 102A. Elementsequenz 102A umfasst Element 154, welches ein Abstand mit der minimalen Merkmalbreite X ist. Elementsequenz 102A umfasst Element 152, welches ein Abstand mit der Breitelementgröße W ist. Elementsequenz 102A umfasst Element 156, welches ein Strich mit der minimalen Merkmalbreite X ist. Elementsequenz 102A umfasst Element 158, welches ein Strich mit der Breitelementgröße W ist.
  • 2 veranschaulicht Strichcode 200, erzeugt mittels Mehr-Breiten-Symbologie Code 128. Strichcode 200 enthält einen Satz von Elementsequenzen 202A, 202B, 202C, 202D bis 202E (kollektiv hierin als Elementsequenz 202 bezeichnet). Der Satz von Elementsequenzen kodiert den Strang PATENT 204. Wie in 1A wird jeder Buchstabe im Strang PATENT 204 mittels eines Datencharakters kodiert, wie etwa Elementsequenz 202B, die den Datencharakter P kodiert, und Elementsequenz 202C, die den Datencharakter A kodiert. Elementsequenz 202A kodiert die Startbegrenzungssequenz für den Strichcode 200. Elementsequenz 202E kodiert die Stoppbegrenzungssequenz für den Strichcode 200. Daher markieren Begrenzungselementsequenzen 202A und 202E den Anfang und das Ende des Strichcodes 200.
  • Wie in 2 gezeigt, hat jede Elementsequenz 202A-E im Strichcode 200 dieselbe physische Breite. 2 zeigt das Elementbreitenmuster für Charaktersequenz 202. Das Elementbreitenmuster für die Startbegrenzungscharakter-Elementsequenz 202A ist 11010010000. Das Elementbreitenmuster für die Elementsequenz 202B des Datencharakters P ist 11101110110. Das Elementbreitenmuster für die Elementsequenz 202C des Datencharakters A ist 10100011000. Das Elementbreitenmuster für die Elementsequenz 202D des Datencharakters T ist 11011100010. Das Elementbreitenmuster für die Stoppbegrenzungscharakter-Elementsequenz 202E ist 1100011101011.
  • Strichcodelesegeräte, die Vorrichtungen zum automatischen Dekodieren von Strichcodes sind, fallen im Allgemeinen in zwei Kategorien: Laserscanner oder bildbasierte Lesegeräte. In beiden Typen von Lesegerät wird Dekodieren typischerweise durch Messen der eindimensionalen (1D) Positionen der Kanten der Strichcodeelemente entlang eines oder mehr Scans durchgeführt, die entweder den physischen Strichcode oder ein diskretes Bild des Strichcodes von einem Ende zum anderen passieren. Jeder Scan ist typischerweise ein Liniensegment, kann aber jede kontinuierliche lineare Kontur sein.
  • Für jeden Strichcodelesegerätscan eines Strichcodes wird zuerst ein diskretes Signal (z.B. oft als ein Scansignal bezeichnet) extrahiert. Ein Scansignal besteht typischerweise aus nacheinander aufgenommenen Intensitätsmessungen entlang des Scans, hierin Scanabtastungen genannt. Jede Scanabtastung kann die gemessene Reflexion (relative Dunkelheit oder Helligkeit, gemessen durch reflektiertes Licht) über ein kleines Gebiet, oder Scanabtastgebiet, des Strichcodes darstellen, zentriert an der entsprechenden Position entlang des Scans. Das Muster von Scanabtastpositionen entlang des Scans wird hier als Scanabtastgitter bezeichnet. Das Gitter ist oft beinahe gleichförmig, was bedeutet, dass die Entfernung oder Scanabtastabstand zwischen Abtastpositionen entlang des Scans effektiv konstant ist. Der Scanabtastabstand bestimmt im Wesentlichen die Scanabtastauflösung des aufgenommenen Signals, typischerweise gemessen als die Zahl von Scanabtastungen pro Modul (wo ein Modul wie hier verwendet mit der minimalen Merkmalgröße für Zwei-Breiten-Symbologien synonym ist). Jedoch ist es möglich, dass der effektive Scanabtastabstand sich tatsächlich wesentlich aber kontinuierlich von einem Ende des Scans zum anderen Ende ändert, auf Grund von Perspektiveffekten, die dadurch verursacht werden, dass der Strichcode unter einem Winkel betrachtet wird oder um ein Objekt gewickelt ist, das nicht flach ist (z.B. eine Flasche).
  • Die Breite des Scanabtastgebiets für jede Aufnahme, relativ zum Scanabtastabstand, kann das Maß an Überlappung zwischen den Aufnahmen entlang des Scans bestimmen. Eine Erhöhung der Überlappung unter Aufnahmen kann die Unschärfe des Signals erhöhen. Eine Verringerung der Überlappung unter Aufnahmen kann die Wahrscheinlichkeit erhöhen, dass wichtige Merkmale des Signals nicht gemessen werden. Die Höhe jedes Scanabtastgebiets bestimmt, wieviel Information senkrecht zum Scan integriert wird. Eine größere Höhe einer Scanabtastung kann zu schärferen Elementkanten im Signal führen, wenn der Scan senkrecht zu den Strichen ist (z.B. so dass der Scan die redundante Information in den Strichen in der senkrechten Richtung ausnutzen kann). Jedoch können mit Zunahme des Scanwinkels relativ zum Strich, so dass er nicht mehr senkrecht zum Strich ist, diese Kanten umso unschärfer werden.
  • Für Laserscanner wird ein Scansignal extrahiert, indem die reflektierte Intensität des Lasers über die Zeit aufgenommen wird, während er entlang der Scankontur durch den physischen Strichcode schwenkt (z.B. während der Laser entlang einer Linie durch den Strichcode schwenkt). Jedes Abtastgebiet ist im Wesentlichen der Laser-„Spot“ zu einem Zeitpunkt. Die Form des Laserspots ist typischerweise elliptisch, mit einer großen Achse, die senkrecht zum Scan orientiert ist, was den vorher erwähnten Ausgleich in der Breite und Höhe des Abtastgebiets ermöglichen kann. Da das aufgenommene Signal analog ist, kann die Abtastrate über die Zeit die Auflösung oder den Abtastabstand beeinflussen. Die Abtastrate über die Zeit kann für einen Laser zum Beispiel durch das Auflösungsvermögen des Lasers (z.B. wie gut ein kleiner Spot des Lasers fokussiert werden kann), die maximale temporale Abtastrate und/oder die Druckqualität des Strichcodes beschränkt sein.
  • Für bildbasierte Lesegeräte wird ein diskretes Bild des Strichcodes aufgenommen, wie etwa mittels Kameraoptiken und einem Bildsensor (z.B. einem CCD-Array). Das resultierende Bild kann eine 2D-Aufnahme des gesamten Strichcodes sein. Jede Bildaufnahme, oder Pixel, jenes Bildes ist selbst eine Messung der durchschnittlichen Reflexion eines kleinen Gebiets des Strichcodes, zentriert am entsprechenden Punkt in einem Bildabtastgitter. Dieses Gitter ist oft gleichförmig oder fast gleichförmig, was bedeutet, dass die Entfernung zwischen Bildabtastpositionen, oder der Bildabtastabstand, konstant ist. Dieser Abtastabstand bestimmt im Wesentlichen die Bildauflösung, typischerweise gemessen als die Anzahl von Pixeln pro Modul („PPM“). Jedoch ist es wie beim Laserscannen möglich, dass der effektive Bildabtastabstand sich tatsächlich wesentlich aber kontinuierlich von einem Ende des Strichcodes zum anderen auf Grund von Perspektiveffekten ändert.
  • Ein Scansignal kann dann für jeden Scan über ein Bild des Strichcodes durch Subabtasten des Bildes (z.B. Abtasten des bereits abgetasteten Signals) entlang des Scans aufgenommen werden. Der Scanabtastabstand wird durch die Abtastrate über den Raum (z.B. nicht Zeit, wie bei Laserscannern) bestimmt. Ein Fachmann kann einschätzen, dass es viele Wege gibt, diese Subabtastoperation durchzuführen. Zum Beispiel kann die Bildverarbeitungstechnik Projektion für ein Scanliniensegment genutzt werden. Bei der Projektion bestimmt die Höhe der Projektion im Wesentlichen die Höhe des Scanabtastgebiets für jede Abtastung, wodurch Information senkrecht zum Scan integriert wird. Als ein anders Beispiel kann die in U.S.-Patentanmeldung Nr. 13/336,275 mit dem Titel „Methods and Apparatus for One-Dimensional Signal Extraction“, eingereicht am 23. Dezember 2011, beschriebene Technik verwendet werden, die hiermit in ihrer Gänze hierin eingegliedert ist. Zum Beispiel kann das effektive Scanabtastgebiet für jede Scanabtastung elliptisch sein, analog zum elliptischen Spot, der in Laserscannern verwendet wird.
  • 3 veranschaulicht ein beispielhaftes Scansignal für eine Elementsequenz 302, die aus Strichcodeelementen 302A-302K, kollektiv Strichcodeelemente, besteht. Der Scan 304 ist senkrecht zu den Strichcodeelementen 302. 3 zeigt das Scansignal 306, abgeleitet vom Scan 304. Das Scansignal 306 umfasst Scanabtastungen 308A, 308B bis 308N, kollektiv hierin als Scanabtastungen 308 bezeichnet. Jede Scanabtastung 308 stellt die gemessene Reflexion über einem entsprechenden elliptischen Scanabtastgebiet s0 311A bis sn 311N dar, innerhalb eines 1D-Bereichs entlang der Scanlinie 304 entsprechend den Scanabtastkästen s0 310A bis sn 310N. Zum Beispiel stellt Scanabtastung 308A die gemessene Reflexion über ein Scanabtastgebiet 311A dar, entsprechend Scanabtastkasten 310A, Scanabtastung 308B stellt die gemessene Reflexion über ein Scanabtastgebiet 311B dar, entsprechend Scanabtastkasten 310B, und Scanabtastung 308N stellt die gemessene Reflexion über ein Scanabtastgebiet 311N dar, entsprechend Scanabtastkasten 310N. Die Scanabtastung 308A hat eine hohe Reflexion, angegeben als „h“, weil die Aufnahme 310A durch Scanabtastgebiet 311A extrahiert wird, das ganz innerhalb Abstandselement 302A liegt. Die Scanabtastung 308B hat eine niedrigere Reflexion, weil das Abtastgebiet 308B nicht ganz innerhalb eines Abstandselements 302A liegt und auch Information aus Strichelement 302B integriert.
  • Ein wichtiger Unterschied zu Laserscannern ist jedoch, dass die Abtastauflösung eines Scansignals, das mittels eines bildbasierten Lesegeräts extrahiert wurde, inhärent durch die zu Grunde liegende Aufnahmeauflösung des aufgenommenen Bildes (z.B. die Pixel) beschränkt ist. Das heißt, es gibt keine Möglichkeit, dass das subabgetastete Scansignal irgendwelche zusätzlichen feineren Details erlangt, außer jenen, die in jedem Pixel enthalten sind. Wie in U.S.-Patentanmeldung Nr. 13/336,275 beschrieben, ist diese Beschränkung oft am schlimmsten, wenn der 1D-Scan ein Liniensegment ist, das am Pixelgitter ausgerichtet ist (z.B. perfekt horizontal oder vertikal zum Pixelgitter des aufgenommenen Bildes). Im Gegensatz dazu kann der bestmögliche Scanabtastabstand gleich dem zu Grunde liegenden Bildabtastabstand sein. Diese Beschränkung kann sich daher mit einem größeren Scanlinienwinkel abseits der Achse verbessern. In manchen Ausführungsformen kann der bestmögliche Scanabtastabstand von (1 /sqrt(2)) mal der Bildabtastabstand erreicht werden, wenn der Scan ein Liniensegment ist, das in 45 Grad zum Pixelgitter orientiert ist und die größere Information reflektiert, die oft gefunden wird, wenn Strichcodes diagonal orientiert sind. Daher kann ein allgemeiner Nachteil dieser Auflösungsbeschränkung oft durch die Möglichkeit, ein viel größeres Gebiet abzudecken und zu analysieren, als dies mit einem Laserscanner möglich wäre, aufgewogen werden. Eine solche Auflösungsbeschränkung muss dennoch oft angegangen werden.
  • Sowohl bildbasierte Lesegeräte als auch Laserscanner müssen sich oft mit Problemen auseinandersetzen, wenn ein scharfes Signal (z.B. eines, das nicht unscharf ist), nicht aufgenommen werden kann. Sowohl bildbasierte Lesegeräte als auch Laserscanner haben oft eine beschränkte Tiefenschärfe, was im Wesentlichen der Bereich des Abstands vom Lesegerät ist, über den das aufgenommene Bild oder Laserscan fokussiert sein wird. Zusätzlich zu Tiefenschärfebeschränkungen können bildbasierte Lesegeräte unscharf sein. Unschärfe bezieht sich auf das Ausmaß, zu dem ein 1D-Signal auf Grund fehlender Fokussierung oder anderer Effekte verschmiert ist. Zum Beispiel kann ein 1 D-Scansignal auf Grund des Prozesses unscharf sein, mit dem es aus einem Bild niedriger Auflösung extrahiert wird. Als ein anderes Beispiel kann Unschärfe durch Bewegung verursacht sein abhängig von der Geschwindigkeit des Objekts, an dem die Strichcodes befestigt sind, relativ zur Belichtungszeit, die nötig ist, Bilder mit vernünftigem Kontrast unter den verfügbaren Beleuchtungsbedingungen zu erhalten.
  • Unabhängig von Lesegerättyp oder Scansignalextraktionsverfahren ist ein typischer Weg, einen Strichcode zu dekodieren, die 1D-Positionen aller Elementkanten (auch als Grenzen bezeichnet) entlang einem oder mehr dieser Scansignale zu detektieren und zu messen. Die Position jeder detektierten Kante entlang eines Scans ist ein Produkt ihrer fraktionalen Position innerhalb des Scansignals und des Scanabtastabstands. Solche Kanten können verwendet werden, um direkt die Breite der Strichcodeelemente abzuleiten, die dann weiter in ihre diskreten Elementgrößen klassifiziert werden können (z.B. schmal, breit, 1X, 2X, usw., abhängig vom Typ der verwendeten Symbologie). Für Mehr-Breiten-Symbologien typischer werden jedoch die aufeinanderfolgenden Entfernungen zwischen benachbarten Kanten derselben Polarität (hell-zu-dunkel- oder dunkel-zu-hell-Übergänge) berechnet und klassifiziert (z.B. in 1X, 2X, usw.), und dann verwendet, um den Charakter aus seinem „Kante-zu-ähnliche-Kante“-Muster abzuleiten, wie im Stand der Technik bekannt. Diese indirekte Berechnung kann durchgeführt werden, um Fehlklassifizierungen oder Fehlauslesungen) auf Grund von ausgeprägtem Druckwachstum zu vermeiden, was das Ausmaß ist, zu dem auf Grund des Druckverfahrens Striche breiter und Abstände schmaler erscheinen, oder umgekehrt, typischerweise wegen Tintenausbreitung. Für Zwei-Breiten-Symbologien kann Druckwachstum durch getrenntes Klassifizieren der Striche und Abstände vermieden werden.
  • Elementkanten können mittels einer Anzahl verschiedener im Stand der Technik bekannter Techniken detektiert werden, einschließlich zum Beispiel diskrete Verfahren zum Orten der Positionen der maximalen ersten Ableitung, oder Nullstellen in der zweiten Ableitung und/oder Wellenformungstechniken zum Orten der Grenzen von aufgelösten Elementen.
  • Jedoch kann das Detektieren von Kanten durch Bildaufnahmerauschen und Druckdefekte kompliziert werden. Bildaufnahmerauschen und/oder Druckdefekte können zum Detektieren falscher Kanten führen wie auch Probleme mit niedrigem Kontrast (z.B. wegen schlechter Beleuchtung, Laserintensität usw.) oder Unschärfe (z.B. wegen Bewegung oder schlechter Fokussierung) verursachen, die dazu führen, dass manche Kanten gar nicht detektiert werden.
  • Verschiedene Verfahren zur Vorfilterung (z.B. Glättung) oder Verbesserung (z.B. Entschmierung oder Schärfung) des Signals, Herausfiltern von falschen Kanten oder Gipfeln und Tälern und so weiter sind in einem Versuch ersonnen worden, die Messempfindlichkeit für echte Kanten zu erhöhen. Jedoch wird es selbst bei Einsatz solcher Verfahren mit abfallender Signalauflösung schwieriger, den Bedarf nach größerer Messempfindlichkeit gegen das wachsende Problem der Unterscheidung von falschen Kanten von echten abzuwägen, wie auch, die Positionen von solchen Kanten mit der erforderlichen Genauigkeit zu messen.
  • Hinzufügen der Möglichkeit, dekodierte Charakter- oder Kanteninformation aus multiplen Scans über denselben Strichcode zu kombinieren oder zu integrieren, kann helfen (z.B. wenn es lokalen Schaden am Strichcode gibt). Jedoch tendieren selbst mit solcher Integrierung bildbasierte Dekodierer, die kantenbasierte Techniken verwenden, oft dazu, zwischen 1,3 und 1,5 Pixeln pro Modul (PPM) für die Scanlinie zu versagen zu beginnen, abhängig von Bildqualität, Fokussierung und Orientierung des Strichcodes relativ zum Pixelgitter.
  • Im Wesentlichen wird es mit abnehmender effektiver Auflösung des Scansignals, sowohl mit Scanabtastauflösung und Unschärfe, schwieriger, individuelle Elemente des Strichcodes aufzulösen. Schmale Elemente sind besonders schwer aufzulösen, und bei einer gewissen Auflösung verschmelzen solche schmalen Elemente schließlich in dem Maße miteinander, dass die Übergänge zwischen ihnen vollständig unsichtbar sind. Schwierigkeiten bei der Auflösung sind besonders problematisch für ein unter-abgetastetes Signal. Während sich zum Beispiel der Übergang zwischen zwei Elementen (z.B. zwischen einem Strich und einem Abstand) zur Mitte einer Scanabtastung bewegt (z.B. exakt ½ Abtastung außer Phase), führt die Scanabtastung effektiv zu einem Abtastwert, der die durchschnittliche Reflexion der beiden Elemente statt einem Maß für die Reflexion der hohen oder niedrigen Reflexion der individuellen Striche und Abstände ist. Als ein beispielhafter problematischer Fall ist die Auflösung beinahe eine Abtastung pro Modul und multiple schmale Elemente reihen sich mit aufeinanderfolgenden Abtastungen mit einer halben Phase Verschiebung auf, so dass das Scansignal einen gleichförmigen Reflexionswert hat, völlig ohne sichtbare Kanten.
  • Zusätzlich zu den Problemen beim Detektieren von Kanten und Unterscheiden von Rauschen kann auch die Genauigkeit, mit der die Scanpositionen von solchen Übergängen gemessen werden können, auch mit der Scanauflösung (z.B. auf Grund der Tatsache, dass jeder Kantenübergang weniger Abtastungen hat, über die der Ort, wo der Übergang stattfindet, zu interpolieren ist) und/oder Unschärfe (z.B. weil der graduelle Übergang entlang einer unscharfen Kante in der Gegenwart von Rauschen schwieriger zu messen wird) abnehmen. Dies kann dazu führen, dass es unmöglich wird, zum Beispiel den Unterschied zwischen einem schmalen und breiten Strich aus den Kanten zu bestimmen. Techniken sind ersonnen worden, um zu versuchen, mit der Ungenauigkeit auf Grund von Unschärfe umzugehen, wie etwa durch Konzentrieren auf die Verwendung der Positionen von Kantenpaaren, um die Mitten jedes Elements zu bestimmen, die wenigstens gegenüber den Effekten der Unschärfe stabiler sind, und Verwendung der relativen Positionen zwischen diesen Mittenpositionen, statt der Entfernungen zwischen den Kanten, um das Symbol zu dekodieren. Jedoch sind die Mitten von gemessenen Elementkantengrenzen typischerweise nur stabiler, wenn die scheinbaren Kantenpositionen Fehler in entgegengesetzte Richtungen haben. Zum Beispiel können scheinbaren Kantenpositionen Fehler in entgegengesetzte Richtungen haben bei unscharfen Elementen mit ausreichend Auflösung (z.B. sagen wir mehr als 1,5 PPM), aber nicht notwendiger Weise, wenn das Signal unter-abgetastet ist, wo Kantenfehler auf Grund von Quantisierungseffekten oft dominanter eine Funktion der lokalen Phase (relative Position) des Scanabtastgitters relativ zum Pixelgitter und den Elementgrenzen sind.
  • Im Bemühen, die Auflösungsbeschränkungen zu verringern, sind mehrere Verfahren ersonnen worden, um zu versuchen, die Positionen der fehlenden schmalen Elemente nach Bestimmung der Mitten und Breiten der breiten Elemente abzuleiten. Diese Verfahren können Beschränkungen für die Anzahl von schmalen Elementen zwischen breiten Elementen verwenden, die für Zwei-Breiten- und Mehr-Breiten-Strichcodes verschieden aber allgemein sind. Verfahren sind auch ersonnen worden, um zu versuchen, Charaktere aus Kanten zu erkennen, aber undetektierte Kanten zuzulassen. Zum Beispiel können probabilistische Techniken verwendet werden, um Charaktere durch Abgleichen von kantenbasierten (geometrischen) deformierbaren Vorlagen zu dekodieren. Jedoch werden solche Verfahren typischerweise für unscharfe Strichcodes mit ausreichender Abtastauflösung entwickelt, nicht für unter-abgetastete Strichcodes. Tatsächlich können solche Techniken spezifizieren, dass die kantenbasierten Standard-Dekodierungstechniken verwendet werden sollen, wenn das Signal als im Fokus liegend erachtet wird. Orten und Messen der Breiten selbst der breiten Elemente, was weiterhin von der Bestimmung der Kanten (Grenzen) abhängt, wird schwierig, wenn die SPM abnimmt, wie etwa unter 1,1 Abtastungen pro Modul. Des Weiteren können manche der Algorithmen nicht effizient genug für praktische Verwendung auf industriellen Lesegeräten implementiert werden.
  • Weiter erschwert werden diese Probleme durch Trends zur Annahme von bildbasierten Lesegräten an Stelle von Laserscannern (z.B. wegen der Vorteile der breiten Abdeckung) und zur Verringerung der Kosten von bildbasierten Lesesystemen durch Kleinhalten der Größen und Minimieren der Anzahl von Lesegeräten. Zum Beispiel ist dies der Fall in Logistikanwendungen, wo Strichcodes gelesen werden müssen, die an oft zufällig orientierten Schachteln oder Taschen auf breiten Förderbändern befestigt sind. Minimieren der Anzahl von Lesegräten erfordert Maximieren der Menge an Volumen (z.B. Gebiet und Tiefe), die jedes Lesegerät abdecken muss, was wiederum sowohl die relative Bildauflösung (PPM) verringert als auch Unschärfe erhöht (wegen Tiefenschärfebeschränkungen), was beides die effektive Bildabtastauflösung verringert.
  • Es gibt einen Bedarf, die unter-aufgelösten Dekodierfähigkeiten von Strichcodelesegeräten jenseits von einfach unscharfen Strichcodes zu verbessern (z.B. insbesondere für bildbasierte Lesegeräte). Auf Grund der Schwierigkeiten mit kantenbasierten Verfahren bei niedrigen Auflösungen (z.B. unter 1,1 PPM) gibt es zusätzlich einen Bedarf für Verfahren, die Strichcodes durch direktes Analysieren der Scansignalwerte dekodieren können. Eine Technik, die versucht hat, diese Beschränkungen zu überwinden, ist, Musterabgleichungstechniken zu verwenden. Manche Musterabgleichungstechniken versuchen einen Strichcode durch Modellieren jedes Charakters in einem Strichcode als eine 1D-deformierbare Vorlage zu dekodieren. Der 1D-deformierbaren Vorlage ist es erlaubt, in der horizontalen Dimension zu skalieren (z.B. um einer unbekannten Modulgröße Rechnung zu tragen), in der horizontalen Richtung zu translatieren (z.B. um einer unsicheren Position entlang der Scanlinie Rechnung zu tragen), sich in der vertikalen Dimension auszudehnen (z.B. um unbekanntem Kontrast Rechnung zu tragen) und in der vertikalen Richtung zu translatieren (z.B. um einer unbekannten Hintergrundbeleuchtungsintensität Rechnung zu tragen). Jedoch können solche Musterabgleichungstechniken den Quantisierungseffekten von dramatischem Unter-Abtasten des Strichcodes nicht Rechnung tragen, wie etwa bei 1,0 PPM oder darunter. Zum Beispiel kann Unter-Abtasten dazu führen, dass Muster sich relativ zur Vorlage unerkennbar verformen.
  • Strichcodes können als aus einer Sequenz von Strichcodeeinheiten zusammengesetzt betrachtet werden, wobei jede Einheit eine assoziierte Breite und einen binären Kodierwert hat. Zum Beispiel kann bei Zwei-Breiten-Strichcodes die Strichcodeeinheit eine von zwei Breiten haben: schmal, ,X‘ oder breit, ,W‘. Als ein weiteres Beispiel kann bei einem Mehr-Breiten-Strichcode die Strichcodeeinheit eine Breite haben, die irgendein Vielfaches, n, von X ist. Der binäre Kodierwert kann angeben, ob die Strichcodeeinheit Teil eines Strichs oder Abstands ist. Zum Beispiel kann B verwendet werden, um anzugeben, dass die Strichcodeeinheit für einen Strich ist, und S für einen Abstand. In manchen Ausführungsformen können numerische Werte verwendet werden, z.B. B = 0 und S = 1, oder B = -1 und S = 1. Daher kann jedes Elementbreitenmuster mit einem Einheitsbreitenmuster und einem Einheitskodiermuster assoziiert werden.
  • In manchen Beispielen können die Strichcodeeinheiten Elemente sein, in welchem Fall ein Einheitsbreitenmuster das Elementbreitenmuster ist und das assoziierte Einheitskodiermuster ein abwechselndes Muster von Strich- und Abstandswerten ist (z.B. BSBSBSBSB) mit dem passenden Startwert für entweder einen Strich oder einen Abstand (z.B. da die Elemente sich immer zwischen Strichen und Abständen abwechseln, außer über eine Zwischencharakterlücke hinweg).
  • In manchen Beispielen wird jede Strichcodeeinheit ausgewählt, um das Einheitsbreitenmuster gleichförmig zu machen. Für Zwei-Breiten-Strichcodes zum Beispiel können die Strichcodeeinheiten nicht kleiner als ein Element gemacht werden, da ein breites Element im Allgemeinen nicht weiter auf eine ganzzahlige Anzahl von schmalen Elementen reduziert werden kann. Für Mehr-Breiten-Strichcodes zum Beispiel kann eine Einheit so klein wie ein Modul sein, da jede Elementbreite als eine ganzzahlige Anzahl von Modulbreiten bezeichnet wird. Das Verwenden von Moduleinheiten kann zu einem gleichförmigen Einheitsbreitenmuster von schmalen Breiten führen. In manchen Ausführungsformen besteht ein bestimmtes Mehr-Breiten- Einheitsbreitenmuster aus irgendeiner Sequenz von gleichförmigen Modulen und das assoziierte Einheitskodiermuster besteht aus Strich- und Abstandswerten, die zusammen die kodierten Daten für jene Sequenz darstellen. Zum Beispiel ist XXXXXXXXXXX das Einheitsbreitenmuster für alle Einheitsbreitenmuster von der Länge von elf Modulen, aber das Einheitskodiermuster wird für jedes Elementbreitenmuster variieren. Zum Beispiel ist BSBSSSBBSSS das einzigartige Einheitskodiermuster für das 11X-Elementbreitenmuster 111323.
  • In manchen Ausführungsformen ist für Zwei-Breiten-Symbologien die Information im Elementbreitenmuster direkt durch das Einheitsbreitenmuster kodiert, während das Einheitskodiermuster alterniert. Zum Beispiel ist wie vorher beschrieben das Einheitskodiermuster ein abwechselndes Muster von Strich- und Abstandswerten (z.B. BSBSBSBSB). In manchen Ausführungsformen ist für Mehr-Breiten-Symbologien die Information im Elementbreitenmuster indirekt durch das Einheitskodiermuster kodiert, während das Elementbreitenmuster aus gleichförmigen Minimalmerkmalen besteht. Zum Beispiel ist XXXXXXXXXXX das Einheitsbreitenmuster für alle Einheitsbreitenmuster von der Länge von elf Modulen, also kodiert es indirekt das Elementbreitenmuster, weil ohne weitere Information das Elementbreitenmuster nicht abgeleitet werden kann. Aber das Einheitsbreitenmuster (z.B. BSBSSSBBSSS für das 11X-Elementbreitenmuster 111323) wird elf Merkmale umfassen (z.B. elf Bs und Ss).
  • Vorteilhafterweise kann bei der Analyse einer Zwei-Breiten-Symbologie oder einer Mehr-Breiten-Symbologie mittels Elementeinheiten jeder einzigartige Datencharakter in der Symbologie mit einer einzigartigen Einheits- (z.B. Element-) Sequenz assoziiert sein. Das Einheitskodiermuster kann ein abwechselndes binäres Muster sein, das für alle Charaktere dieselbe Größe hat. Bei der Analyse einer Mehr-Breiten-Symbologie mittels Moduleinheiten kann jeder einzigartige Datencharakter in der Symbologie mit einem einzigartigen Einheits- (z.B. Modul-) Muster assoziiert sein, und die Einheits-(z.B. Modul-) Sequenz kann für alle Charaktere dieselbe sein.
  • Zum Beispiel ist bei der Verwendung von Moduleinheiten für die Zwei-Breiten-Symbologie Code39 das einzigartige Einheitsbreitenmuster für ,A‘ sein Elementbreitenmuster WXXXXWXXW, und das einzigartige Einheitsbreitenmuster für ,B‘ ist sein Elementbreitenmuster XXWXXWXXW. Aber alle Code39-Datencharaktere sind mit demselben binären Einheitskodiermuster der Länge neun assoziiert, BSBSBSBSB. Ähnlich ist für Code128, wenn Elementeinheiten verwendet werden, das einzigartige Einheitsbreitenmuster für ,A‘ sein Elementbreitenmuster 111323, und das Einheitsbreitenmuster für ,B‘ ist sein Elementbreitenmuster 131123. Aber alle Code128-Charaktere sind mit demselben binären Einheitskodiermuster der Länge 6 assoziiert, BSBSBS.
  • Als ein weiteres Beispiel ist bei Verwendung von Moduleinheiten für die Mehr-Breiten-Symbologie Code128 das Einheitsbreitenmuster für alle Charaktere dieselbe gleichförmige Sequenz der Länge elf, XXXXXXXXXXX, aber das einzigartige Einheitskodiermuster für ein ,A‘ ist BSBSSSBBSSS (z.B. entsprechend dem Elementbreitenmuster 111323), und das einzigartige Einheitskodiermuster für ein ,B‘ ist BSSSBWBBSSS (z.B. entsprechend dem Elementbreitenmuster 131123).
  • Durch die Darstellung von Strichcodes und Strichcodeelementen als aus Einheiten zusammengesetzt können Abtastquantisierungseffekte mathematisch modelliert werden. Zum Beispiel kann das Modell erzeugt werden basierend auf:
    • (1) (a) einer zusammenhängenden Sequenz von Strichcodeelementen (z.B. ohne jegliche Zwischencharakterlücken) und (b) assoziierten quantisierten Breiten für jedes der Strichcodeelemente, ausgedrückt als ein Elementbreitenmuster;
    • (2) der Startposition des ersten Elements der Strichcodeelementsequenz, in Abtastkoordinaten (z.B. in Bruchzahlen von Abtastabständen, wobei der gebrochene Teil im Wesentlichen die anfängliche „Phase“ relativ zum Abtastgitter ist); und
    • (3) der minimalen Merkmalgröße (X) und Breitelementgröße (W), falls vorhanden (oder, äquivalent, dem Breit-zu-schmal-Verhältnis), gemessen in Bruchzahlen von Abtastungen.
  • Mittels solcher Informationen kann die Beziehung zwischen jenen Strichcodeelementen und dem Rohsignal mittels einer einzigen Matrixgleichung ausgedrückt werden, A * b = s
    Figure DE102019217980A1_0001
    Wobei:
    • • A eine Einheitsabtastkoeffizientenmatrix ist, eine dünnbesetzte Matrix von Abtastkoeffizienten, die von einem Einheitsgitter abhängt, das die Positionen von Einheitengrenzen entlang des Scans definiert, bestehend aus:
      • ◯ Der Einheit-Untersequenz, die sich über die Strichcodeelementsequenz erstreckt;
      • ◯ Der minimalen Merkmalgröße, X;
      • ◯ Der Breitelementgröße, W (falls vorhanden);
      • ◯ Der Startposition des ersten Strichcodeelements in der Sequenz;
    • • b das binäre Einheitskodiermuster von Strich- und Abstandswerten ist; und
    • • s der Vektor ist, der normalisierte Scanabtastungen repräsentiert.
  • Jede Zeile der Abtastkoeffizientenmatrix A kann einer Abtastung entsprechen, und jede Spalte kann einer Einheit entsprechen (z.B. Modul für Mehr-Breiten-Strichcodes oder Element für Zwei-Breiten-Strichcodes). Die Werte in jeder Zeile können ausgewählt sein, um sich zu 1,0 aufzusummieren, und die Werte jeder Spalte können ausgewählt sein, um sich zur jeweiligen Einheits- (Modul- oder Element-) Breite (z.B. X oder W) aufzusummieren.
  • Die i-te normalisierte Abtastung für den Vektor s, s(i), kann durch die folgende Gleichung angegeben werden: s ( i ) = B + [ ( r ( i ) l ( i ) ) × ( S B ) ] / ( h ( i ) l ( i ) )
    Figure DE102019217980A1_0002
    Wobei:
    • • r der Vektor ist, der einen zusammenhängenden Teil des Scansignals über die Abtastkästen repräsentiert; und
    • • h und 1 Vektoren von Werten sind, die die diskrete Annäherung an die Signalhülle von r repräsentieren, so dass:
      • ◯ h(i) die Abschätzung der Reflexion eines Abstands bei Abtastung i ist; und
      • ◯ 1(i) die Abschätzung der Reflexion eines Strichs bei Abtastung i ist.
  • Vom Vektor r kann angenommen werden, dass er den Bereich von Positionen für die gesamte Einheits-Untersequenz abdeckt. In manchen Ausführungsformen können die Werte für r die gemessenen Reflexionswerte sein. Jede Zeile i von A kann ein Vektor der jeweiligen Proportionen der Strichcodeeinheiten im Einheitsbreitenmuster sein, die kastenweise für Abtastung i integriert werden, um ein Maß der Reflexion für jene Scanabtastung zu erhalten. In manchen Ausführungsformen hängen die Einheitskoeffizienten vom Einheitsgitter ab, das die Positionen der Übergänge zwischen den Einheiten darstellen kann. Das Einheitsgitter kann durch die Phase (z.B. Startpunkt), die minimale Merkmalgröße, das Druckwachstum, das Breit-zu-schmal-Verhältnis (falls vorhanden) und/oder dergleichen beeinflusst sein.
  • 4 veranschaulicht eine beispielhafte Scanlinie Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 1 Abtastung pro Modul („SPM“) und 0 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. 4 zeigt die A-Datencharaktermodule 400, welches aus Strichcodemodulen b1 402B, b2 402C, b3 402D, b4 402E, b5 402F, b6 402G, b7 402H, b8 402I, b9 402J, b10 402K und b11 402L besteht. Die Charaktereinheiten 402 umfassen diese Module sowie das letzte Modul des vorhergehenden Charakters b0 402A (einen Abstand) und das erste Modul des vorhergehenden Charakters b12 402M (einen Strich).
  • 4 zeigt das Scansignal 406, abgeleitet vom Scan 404. Das Scansignal 406 umfasst Scanabtastungen 408A, 408B bis 408N, kollektiv hierin als Scanabtastungen 408 bezeichnet. Die Scanabtastungen 408 repräsentieren Abtastungen für einen entsprechende Scanabtastkästen s0 410A, s1 410B bis s12 410N, kollektiv hierein als Scanabtastkästen 410 bezeichnet. Zum Beispiel repräsentiert Scanabtastung 408A die Scanabtastung für Scanabtastkasten s0 410A. Weil jeder Scanabtastkasten 410 am Beginn der Charaktereinheiten 402 ausgerichtet ist, haben Scanabtastkästen 410 null (0) Phase relativ zu den Charaktereinheiten 402. 4 zeigt auch die Einheitsabtastkoeffizientenmatrix 420. Jede Zeile der Einheitsabtastkoeffizientenmatrix 420 s1 412A bis s11 412N (kollektiv hierin als Zeilen 412 bezeichnet) entspricht einer Abtastung und ist ein Vektor der Abtastkoeffizienten für Charaktereinheiten im Einheitsbreitenmuster. Jede Spalte 422A bis 422N (kollektiv Spalten 422) der Einheitsabtastkoeffizientenmatrix 420 entspricht einer Einheit (z.B. einem Modul). Wie in 4 gezeigt entspricht die Breite jedes Scanabtastkastens 410 der Breite eines Moduls des Strichcodecharakters 400, weil der Abtastabstand genau die Modulbreite ist. Die Einheitsabtastkoeffizientenmatrix 420 umfasst Nullen an allen Positionen außer an denen, von denen gezeigt wird, dass sie eine Eins umfassen (der Einfachheit halber sind nicht alle Nullen gezeigt). Zeile s1 412A umfasst eine Eins in Spalte zwei 422B, weil Scanabtastkasten s1 410B mit dem gesamten Modul b1 402B zusammenfällt, Zeile s2 412B umfasst eine Eins in Spalte drei 422C, weil Scanabtastkasten s2 410B mit dem gesamten Modul b2 402C zusammenfällt, und so weiter.
  • 5 veranschaulicht eine beispielhafte Scanlinie Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 1 SPM und 0 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. 5 zeigt die B-Datencharakter-Elementsequenz 500, welches aus Strichcodemodulen b1 502B, b2 502C, b3 502D, b4 502E, b5 502F, b6 502G, b7 502H, b8 502I, b9 502J, b10 502K und b11 502L besteht. Die Charaktereinheiten 502 umfassen diese Module sowie das letzte Modul des vorhergehenden Charakters b0 502A (einen Abstand) und das erste Modul des vorhergehenden Charakters b12 502M (einen Strich).
  • 5 zeigt das Scansignal 506, abgeleitet vom Scan 504. Das Scansignal 506 umfasst Scanabtastungen 508A, 508B bis 508N, kollektiv hierin als Scanabtastungen 508 bezeichnet. Die Scanabtastungen 508 repräsentieren Abtastungen für einen entsprechenden Scanabtastkasten s0 510A, s1 510B bis s12 510N. Zum Beispiel repräsentiert Scanabtastung 508A die Scanabtastung für Scanabtastkasten s0 510A. 5 zeigt auch die Einheitsabtastkoeffizientenmatrix 520. Weil jede Scanabtastung 510 am Start der Strichcodemodule 502 ausgerichtet ist, haben die Einheiten null (0) Phase relativ zu den Scanabtastkästen 510. Jede Zeile der Einheitsabtastkoeffizientenmatrix 520 s1 512A bis s11 512N (kollektiv hierin als Zeilen 512 bezeichnet) entspricht einer Abtastung und ist ein Vektor der Abtastkoeffizienten für Charaktereinheiten im Einheitsbreitenmuster. Jede Spalte 522A bis 522N (kollektiv Spalten 522) der Einheitsabtastkoeffizientenmatrix 520 entspricht einer Einheit (z.B. einem Modul). Wie in 4 entspricht die Breite jedes Scanabtastkastens 510 der Breite eines Moduls des Strichcodecharakters 500. Die Einheitsabtastkoeffizientenmatrix 520 umfasst Nullen an allen Positionen außer an denen, von denen gezeigt wird, dass sie eine Eins umfassen (der Einfachheit halber sind nicht alle Nullen gezeigt). Zeile s1 512A umfasst eine Eins in der zweiten Spalte 522B, weil Scanabtastkasten s1 510B mit dem gesamten Modul b1 502B zusammenfällt, Zeile s2 512B umfasst eine Eins in der dritten Spalte 522C, weil Scanabtastkasten s2 510B mit dem gesamten Modul b2 502C zusammenfällt, und so weiter. Beachte, dass die resultierende Einheitsabtastkoeffizientenmatrix 520 dieselbe ist wie Einheitsabtastkoeffizientenmatrix 420 in 4, weil, wie in 4, die Einheiten 502 bei null Phase relativ zu den Scanabtastkästen 510 liegen und die Modulgröße genau gleich der Modulgröße ist.
  • 6 veranschaulicht eine beispielhafte Scanlinien Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 1 SPM und 0,5 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. 6 zeigt die A-Datencharakter-Modulsequenz 400 aus 4. 6 zeigt das Scansignal 606, abgeleitet vom Scan 604. Das Scansignal 606 umfasst Scanabtastungen 608A, 608B bis 608N, kollektiv hierin als Scanabtastungen 608 bezeichnet. Die Scanabtastungen 608 repräsentieren Abtastungen für ein entsprechende Scanabtastkästen s0 610A, s1 610B bis s12 610N. Zum Beispiel repräsentiert Scanabtastung 608A die Scanabtastung für Scanabtastkasten s0 610A, die zwischen hoch und niedrig ist, weil die Hälfte ihrer Fläche von b0 bedeckt ist und die Hälfte ihrer Fläche von b1 bedeckt ist. Weil jede Einheit 402 gegenüber dem Beginn jedes Scanabtastkastens 610 um die Hälfte der Breite eines Scanabtastabstandkastens versetzt ist, und weil der Scanabtastabstand genau gleich der Modulgröße ist, sind die Einheiten 402 bei (0,5) Phase relativ zu den Scanabtastkästen 610.
  • 6 zeigt auch die Einheitsabtastkoeffizientenmatrix 620. Jede Zeile der Einheitsabtastkoeffizientenmatrix 620 s0 612A bis s11 612N (kollektiv hierin als Zeilen 612 bezeichnet) entspricht einer Abtastung und ist ein Vektor der Abtastkoeffizienten für Charaktereinheiten im Einheitsbreitenmuster. Jede Spalte 622A bis 622N (kollektiv Spalten 622) der Einheitsabtastkoeffizientenmatrix 620 entspricht einer Einheit (z.B. einem Modul). Während die Breite jedes Scanabtastkastens 610 gleich der Breite jedes Strichcodemoduls ist, ist jeder Scanabtastkasten 610 halb von jedem von zwei aufeinanderfolgenden Strichcodeelementen 402 bedeckt. Die Einheitsabtastkoeffizientenmatrix 620 umfasst Nullen an allen Positionen außer an denen, von denen gezeigt wird, dass sie ein Halb (1/2) umfassen (der Einfachheit halber sind nicht alle Nullen gezeigt). Zeile s0 612A umfasst eine 0,5 in Spalte eins 622A, weil Scanabtastkasten s0 610A halb von Strich b0 402A bedeckt ist, und umfasst eine 0,5 in Spalte zwei 622B, weil Scanabtastkasten s0 610A halb von Strich b1 402B bedeckt ist. Zeile s1 612B umfasst eine 0,5 in Spalte zwei 622B, weil Scanabtastkasten s1 610B halb von Strich b1 402B bedeckt ist, und umfasst eine 0,5 in Spalte drei 622C, weil Scanabtastkasten s1 610B halb von Strich b2 402C bedeckt ist.
  • 7 veranschaulicht eine beispielhafte Scanlinien Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 1 SPM und -0,25 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. 7 zeigt die A-Datencharaktermodulsequenz 400 aus 4. 7 zeigt das Scansignal 706, abgeleitet vom Scan 704. Das Scansignal 706 umfasst Scanabtastungen 708A, 708B bis 708N, kollektiv hierin als Scanabtastungen 708 bezeichnet. Die Scanabtastungen 708 repräsentieren Abtastungen für ein entsprechende Scanabtastkästen s0 710A, s1 710B bis s12 710N. Zum Beispiel repräsentiert Scanabtastung 708A die Scanabtastung für Scanabtastkasten s0 710A, die drei Viertel in Richtung hoch von niedrig ist, weil Scanabtastkasten s0 zu 0,75% von Modul b0 mit Reflexion h bedeckt ist und zu 0,25% von Modul b1 mit Reflexion 1 bedeckt ist. Weil jede Einheit 402 gegenüber dem Beginn jedes Scanabtastkastens 410 um ein Viertel der Breite eines Moduls versetzt ist, sind die Einheiten 402 bei (-0,25) Phase relativ zu den Scanabtastkästen 710.
  • 7 zeigt auch die Einheitsabtastkoeffizientenmatrix 720. Jede Zeile der Einheitsabtastkoeffizientenmatrix 720 s0 712A bis s11 712N (kollektiv hierin als Zeilen 712 bezeichnet) entspricht einer Abtastung und ist ein Vektor der Abtastkoeffizienten für Charaktereinheiten im Einheitsbreitenmuster. Jede Spalte 722A bis 722N (kollektiv Spalten 722) der Einheitsabtastkoeffizientenmatrix 720 entspricht einer Einheit (z.B. einem Modul). Während die Breite jedes Scanabtastkastens 710 gleich der Breite jedes Strichcodemoduls ist, ist jeder Scanabtastkasten 710 zu 0,75% bzw. 0,25% von zwei aufeinanderfolgenden Strichcodeelementen 402 bedeckt, auf Grund der Phase -0,25. Die Einheitsabtastkoeffizientenmatrix 720 umfasst Nullen an allen Positionen außer an denen, von denen gezeigt wird, dass sie Werte ungleich null umfassen (der Einfachheit halber sind nicht alle Nullen gezeigt). Zeile s0 712A umfasst eine 0,75 in der ersten Spalte 722A, weil Scanabtastkasten s0 710A zu ¾ von Modul b0 402A bedeckt ist, und umfasst eine 0,25 in der zweiten Spalte 722B, weil Scanabtastkasten s0 710A zu ¼ von Modul b1 402B bedeckt ist. Zeile s1 712B umfasst eine 0,75 in der zweiten Spalte 722B, weil Scanabtastkasten s1 710B zu ¾ von Modul b1 402B bedeckt ist, und umfasst eine 0,25 in der dritten Spalte 722C, weil Scanabtastkasten s1 710B zu ¼ von Modul b2 402C bedeckt ist.
  • 8 veranschaulicht eine beispielhafte Scanlinien Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 1,33 SPM und 1/3 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. 8 zeigt die A-Datencharaktermodulsequenz 400 aus 4. 8 zeigt das Scansignal 806, abgeleitet vom Scan 804. Das Scansignal 806 umfasst Scanabtastungen 808A, 808B bis 808N, kollektiv hierin als Scanabtastungen 808 bezeichnet. Die Scanabtastungen 808 repräsentieren Abtastungen für ein entsprechende Scanabtastkästen s0 810A, s1 810B bis s12 810N. Zum Beispiel repräsentiert Scanabtastung 808A die Scanabtastung für Scanabtastkasten s0 810A, welche ein hoher Wert ist, weil Scanabtastkasten s0 ganz von b0 bedeckt ist. Als ein weiteres Beispiel repräsentiert Scanabtastung 808B die Scanabtastung für Scanabtastkasten s1 810B, die 2/3 in Richtung niedrig von hoch ist, weil Scanabtastkasten s1 zu 1/3 von Reflexion b0 und zu 2/3 von Reflexion b1 bedeckt ist. Weil Einheit 402B (der Anfang der Charaktermodule) rechts von s1 810B beginnt, sind die Einheiten 402 bei ein Drittel (1/3) Phase relativ zu den Scanabtastkästen 810.
  • 8 zeigt auch die Einheitsabtastkoeffizientenmatrix 820. Jede Zeile der Einheitsabtastkoeffizientenmatrix 820 s0 812A bis s16 812N (kollektiv hierin als Zeilen 812 bezeichnet) entspricht einer Abtastung und ist ein Vektor der Abtastkoeffizienten für Charaktereinheiten im Einheitsbreitenmuster. Jede Spalte 822A bis 822N (kollektiv Spalten 822) der Einheitsabtastkoeffizientenmatrix 820 entspricht einer Einheit (z.B. einem Modul). Die Breite jedes Scanabtastkastens 810 ist gleich 2/3 eines Strichcodemoduls wegen der SPM 1,33. Die Einheitsabtastkoeffizientenmatrix 820 umfasst Nullen an allen Positionen außer an denen, von denen gezeigt wird, dass sie Werte ungleich null umfassen (der Einfachheit halber sind nicht alle Nullen gezeigt). Zum Beispiel umfasst Zeile s0 812A eine 1,0 in der ersten Spalte 822A, weil Scanabtastkasten s0 810A ganz von Modul b0 402A bedeckt ist (und keinem Teil irgendeines anderen Moduls). Zeile s1 812B umfasst eine 0,33 in der ersten Spalte 822A, weil Scanabtastkasten s1 810B zu einem Drittel von Einheit b1 402B bedeckt ist, und umfasst eine 0,66 in der zweiten Spalte 822B, weil Scanabtastkasten s1 810B zu 2/3 von Modul b2 402C bedeckt ist.
  • 9 veranschaulicht eine beispielhafte Scanlinien Unterabtast- und Abtastkoeffizienten für einen Mehr-Breiten-Strichcode bei 0,75 SPM und -0,25 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. 9 zeigt die A-Datencharaktermodulsequenz 400 aus 4. 9 zeigt das Scansignal 906, abgeleitet vom Scan 904. Das Scansignal 906 umfasst Scanabtastungen 908A, 908B bis 908N, kollektiv hierin als Scanabtastungen 908 bezeichnet. Die Scanabtastungen 908 repräsentieren Abtastungen für ein entsprechende Scanabtastkästen s0 910A, s1 910B bis s12 910N. Zum Beispiel repräsentiert Scanabtastung 908A die Scanabtastung für Scanabtastkasten s0 910A, welches ein Wert entsprechend des 0,75 der Reflexion von b0 402A und des 0,25 der Reflexion von b1 402B ist. Als ein weiteres Beispiel repräsentiert Scanabtastung 908B die Scanabtastung für Scanabtastkasten s1 910B, welcher halb von Modul b0 bedeckt ist und halb von Modul b1 bedeckt ist. Weil Einheit 402B (das erste der Charaktermodule) um 0,25 des Abtastabstands links von s1 910B beginnt, sind die Einheiten 402 bei minus einem Viertel (-1/4) Phase relativ zu den Scanabtastkästen 910.
  • 9 zeigt auch die Einheitsabtastkoeffizientenmatrix 920. Jede Zeile der Einheitsabtastkoeffizientenmatrix 920 s0 912A bis s9 912N (kollektiv hierin als Zeilen 912 bezeichnet) entspricht einer Abtastung und ist ein Vektor der Abtastkoeffizienten für Charaktereinheiten im Einheitsbreitenmuster. Jede Spalte 922A bis 922N (kollektiv Spalten 922) der Einheitsabtastkoeffizientenmatrix 920 entspricht einer Einheit (z.B. einem Modul). Die Breite jedes Scanabtastkastens 910 ist gleich 1 und 1/3 eines Strichcodemoduls wegen der SPM 0,75. Die Einheitsabtastkoeffizientenmatrix 920 umfasst Nullen an allen Positionen außer an denen, von denen gezeigt wird, dass sie Werte ungleich null umfassen (der Einfachheit halber sind nicht alle Nullen gezeigt). Zum Beispiel umfasst Zeile s0 912A eine 0,75 in der ersten Spalte 922A, weil Scanabtastkasten s0 910A zu ¾ von Einheit b0 402A bedeckt ist und umfasst eine 0,25 in der zweiten Spalte 922B, weil Scanabtastkasten s0 910A zu ¼ von Einheit b1 402B bedeckt ist. Zeile s1 912B umfasst eine 0,5 in der ersten Spalte 822A, weil Scanabtastkasten s1 810B zu ½ von Einheit b1 402B bedeckt ist, und umfasst eine 0,5 in der zweiten Spalte 922B, weil Scanabtastkasten s1 910B zu ½ von Einheit b2 402C bedeckt ist.
  • 10 veranschaulicht eine beispielhafte Scanlinien Unterabtast- und Abtastkoeffizienten für einen Zwei-Breiten-Strichcode bei 0,84 SPM, einer Breite (W) von 2,1 und -0,16 Phase zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. 10 zeigt die A-Datencharakterelementsequenz 1000, welche aus Strichcodeelementen b0 1002A, b1 1002B, b2 1002c, b3 1002D, b4 1002E, b5 1002F, b6 1002G, b7 1002H, b8 1002I, b9 1002J und b10 1002K besteht, kollektiv als Strichcodeeinheiten (Elemente) 1002 bezeichnet.
  • 10 zeigt das Scansignal 1006, abgeleitet vom Scan 1004. Das Scansignal 1006 umfasst Scanabtastungen 1008A, 1008B bis 1008N, kollektiv hierin als Scanabtastungen 1008 bezeichnet. Die Scanabtastungen 1008 repräsentieren Abtastungen für ein entsprechende Scanabtastkästen s0 1010A, s1 1010B bis s9 1010N. Zum Beispiel repräsentiert Scanabtastung 1008A die Scanabtastung für Scanabtastkasten s0 1010A, welches ein Wert entsprechend des 0,84 der Reflexion von b0 1002A des 0,16 der Reflexion von Einheit b1 1002B ist. Als ein weiteres Beispiel repräsentiert Scanabtastung 1008B die Scanabtastung für Scanabtastkasten s1 1010B, welcher ganz von Einheit b1 1002B bedeckt ist. Weil Einheit 1002B (das erste Element des Charakters) links von Scanabtastkasten s1 1010B beginnt, sind die Einheiten 1002 bei -0,16 Phase relativ zu den Scanabtastkästen 1010.
  • 10 zeigt auch die Einheitsabtastkoeffizientenmatrix 1020. Jede Zeile der Einheitsabtastkoeffizientenmatrix 1020 s0 1012A bis s11 1012N (kollektiv hierin als Zeilen 1012 bezeichnet) entspricht einer Abtastung und ist ein Vektor der Abtastkoeffizienten für Charaktereinheiten im Einheitsbreitenmuster. Jede Spalte 1022A bis 1022N (kollektiv Spalten 1022) der Einheitsabtastkoeffizientenmatrix 1020 entspricht einer Einheit (z.B. einem Element). Die Einheitsabtastkoeffizientenmatrix 1020 umfasst Nullen an allen Positionen außer an denen, von denen gezeigt wird, dass sie Werte ungleich null umfassen (der Einfachheit halber sind nicht alle Nullen gezeigt). Zum Beispiel umfasst Zeile s0 1012A eine 0,84 in der ersten Spalte 1022A, weil 84% von Scanabtastkasten s0 1010A von Einheit b0 1002A bedeckt ist und umfasst eine 0,16 in der zweiten Spalte 1022B, weil 16% von Scanabtastkasten s0 1010A von Einheit b1 1002B bedeckt ist. Zeile s1 1012B umfasst eine 1,0 in der zweiten Spalte 1022B, weil Scanabtastkasten s1 910B ganz von Einheit b1 1002B bedeckt ist.
  • In manchen Ausführungsformen verwenden Mehr-Breiten-Symbologien Moduleinheiten, wie in 4-9 abgebildet. Da das Eiheitsbreitenmuster (z.B. und daher Einheitsgitter) für alle möglichen Elementbreitenmuster dasselbe sein kann, kann es eine Einheitsabtastkoeffizientenmatrix für jeden bestimmten Abschnitt des Symbols geben, über die die scheinbare Modulgröße konstant bleibt (z.B. ein Charakter, mehrere Charaktere oder sogar der ganze Strichcode). Dekodieren eines solchen Abschnitts des Strichcodes kann zum Beispiel durch Lösen eines linearen Gleichungssystems für das tatsächliche Einheitskodiermuster (z.B. Modulwerte) und dann dessen Konvertieren zum Elementbreitenmuster und letztendlich zu seinem assoziierten alphanumerischen Wert durchgeführt werden. In manchen Ausführungsformen kann Dekodieren mittels Elementen für Mehr-Breiten-Symbologien durchgeführt werden, wie unten näher beschrieben.
  • 11 veranschaulicht ein beispielhaftes computergestütztes Verfahren 1100 eines allgemeinen bildbasierten Dekodierungsalgorithmus zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. Bei Schritt 1102 ortet das Lesegerät Strichcode-Kandidatenregionen in einem aufgenommenen Bild (z.B. von einem Strichcode auf einem Gegenstand auf einem Förderband). Bei Schritt 1104 wählt das Lesegerät eine nächste Strichcode-Kandidatenregion aus. Zum Beispiel ist die nächste Strichcode-Kandidatenregion eine, die die meisten strichartigen Merkmale in sich hat. Das Lesegerät kann den integrierten Strang für diesen Kandidaten initialisieren. Bei Schritt 1106 wählt das Lesegerät einen nächsten Scan aus einem Satz von Scans durch die Kandidatenregion aus (z.B. Scan 404 aus 4). Scans können zum Beispiel Liniensegmente sein, die grob parallel zu anderen Scans sind und sich von einem Ende des Strichcodekandidaten zum anderen erstrecken. Das Lesegerät kann einen Scan mittels verschiedener Befehle auswählen. Zum Beispiel kann das Lesegerät einen nächsten Scan in der Reihenfolge von oben nach unten, von der Mitte nach außen und dergleichen auswählen.
  • Bei Schritt 1108 nimmt das Lesegerät ein Scansignal auf (z.B. Scansignal 406), wie etwa mittels Projektion. Bei Schritt 1110 dekodiert das Lesegerät den Strichcode aus dem Scansignal. Der Dekodierungsprozess wird weiter in Verbindung mit 13 beschrieben. Bei Schritt 1112 integriert das Lesegerät den Scanstrang. Zum Beispiel kann das Lesegerät den dekodierten Strang aus dem Scan (einschließlich Charakterbewertungen) mit dem für diesen Scankandidaten soweit integrierten Strang kombinieren. Bei Schritt 1114 bestimmt das Strichcodelesegerät, ob Strichcode zuverlässig dekodiert ist (z.B. basierend auf einer Konfidenzschwelle). Falls das Lesegerät bestimmt, dass der Strichcode nicht zuverlässig dekodiert ist, fährt das Lesegerät zu Schritt 1106 zurück und führt Schritte 1108 bis 1112 auf dem nächsten ausgewählten Scan durch (falls welche verbleiben). Falls zusätzliche Kandidatenregionen verbleiben, fährt das Verfahren 1100 zu Schritt 1104 zurück. Falls vollständig, berichtet Verfahren 1100 den Strichcodestrang. Der Strichcodestrang kann nicht zuverlässig dekodierte Strichcodes, teilweise dekodierte Strichcodes und/oder dergleichen umfassen.
  • 12 veranschaulicht ein beispielhaftes computergestütztes Verfahren 1200 eines Laserscanner-Dekodierungsalgorithmus zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. Bei Schritt 1202 nimmt der Laserscanner ein analoges Reflexionssignal auf. Das analoge Reflexionssignal ist die Reflexion eines Strichcodes entlang Linearscan über den Strichcode, wie durch Laser und Detektor gemessen. Bei Schritt 1204 tastet der Laserscanner das Reflexionssignal ab (z.B. durch Extrahieren eines diskreten digitalen Scansignals durch zeitliches Abtasten). Bei Schritt 1206 dekodiert der Laserscanner den Strichcode aus dem Scansignal. Der Dekodierungsprozess wird weiter in Verbindung mit 13 beschrieben. Bei Schritt 1208 integriert der Laserscanner den Scanstrang. Bei Schritt 1210 bestimmt der Laserscanner, ob Strichcode zuverlässig dekodiert ist. Falls der Laserscanner bestimmt, dass der Strichcode nicht zuverlässig dekodiert ist, fährt der Laserscanner zu Schritt 1202 zurück und nimmt ein neues analoges Reflexionssignal auf. Ansonsten fährt Verfahren 1200 zu Schritt 1212 fort und berichtet die integrierten Stränge.
  • 13A-B veranschaulichen ein beispielhaftes computergestütztes Verfahren zum Dekodieren eines Strichcodes aus einem Scansignal, in Übereinstimmung mit manchen Ausführungsformen. Bei Schritt 1302 detektiert das Lesegerät Kanten (z.B. 1D-Positionen von Übergängen zwischen Elementen) im Scansignal. Ein Fachmann kann einschätzen, dass verschiedene Techniken verwendet werden können, um Kanten zu detektieren, wie etwa mittels Ableitungsgipfel, Nullstellen der zweiten Ableitung, Gipfel/Tal-Übergänge (ANSI-Kanten) und/oder anderer Kantendetektionsverfahren. Bei Schritt 1304 filtert das Lesegerät die Kanten. Zum Beispiel kann das Lesegerät falsche Kanten herausfiltern (z.B. auf Grund von Kontrast) und/oder fehlende Kanten hinzufügen, wenn eine minimale Merkmalgröße bekannt ist. Bei Schritt 1306 ortet und dekodiert das Lesegerät den ersten Begrenzungscharakter. In manchen Ausführungsformen kann das Lesegerät den Begrenzungscharakter in der umgekehrten Richtung entlang des Scans orten und dekodieren (z.B. durch Umkehren des Scansignals).
  • Bei Schritt 1308 rückt das Lesegerät zur nächsten Charakterposition vor. Zum Beispiel kann das Lesegerät die gemessene Charakterlänge des gegenwärtigen Charakters (z.B. welches bei Beginn von Schritt 1306 der Begrenzungscharakter sein wird) plus jegliche gemessene Zwischencharakterlücke addieren, um die Startposition des gegenwärtigen Charakters zu bestimmen. Falls der gegenwärtige Charakter nicht ordentlich dekodiert wurde (z.B. nicht innerhalb der Konfidenzbereiche), kann das Lesegerät Schätzungen der Charaktergröße verwenden. Bei Schritt 1310 schätzt das Lesegerät das Charaktereinheitsgitter ab. In manchen Ausführungsformen umfasst das Charaktereinheitsgitter die Startposition (z.B. Phase), die minimale Merkmalgröße (z.B. X), das Breit/Schmal-Verhältnis (falls vorhanden) und die Zwischencharakterlücke. In manchen Ausführungsformen kann das Lesegerät konfiguriert sein, die letzte gemessene Statistik des vorhergehenden dekodierten Charakters zu verwenden und dabei der Anzahl von Charakteren, die danach nicht dekodiert werden konnten, Rechnung zu tragen. In manchen Ausführungsformen kann die Zwischencharakterlücke für den ersten Charakter jenseits des Begrenzers mittels der ersten Kantendistanz gemessen werden.
  • Bei Schritt 1312 dekodiert das Lesegerät den Charakter unter Verwendung von Kanten. Ein Fachmann kann abschätzen, dass dies mittels im Stand der Technik bekannter Techniken durchgeführt werden kann, wie etwa Messen von Kante-zu-ähnlicher-Kante-Entfernungen, Klassifizieren der Kante-zu-ähnlicher-Kante-Entfernungen (z.B. einschließlich Runden jeder Kantendistanz auf das nächste ganzzahlige Vielfache von X oder W), Nachschlagen des Charakterwertes und Aktualisieren des Charaktergitters (z.B. einschließlich der Position, minimalen Merkmalgröße und Elementbreite) und der Bewertung (z.B. um zu aktualisieren, wie gut die Kanten passten, wie etwa mittels der fraktionalen Differenzen zu den nächsten ganzzahligen Vielfachen von X). Bei Schritt 1314 bestimmt das Lesegerät, ob der letzte Begrenzungscharakter dekodiert wurde, oder ob die maximale Anzahl von Charakteren für die Symbologie überschritten wurde. Falls nicht, fährt das Verfahren zu Schritt 1308 zurück. Ansonsten fährt das Verfahren zu Schritt 1320 in 13B fort. Zum Beispiel kann das Lesegerät konfiguriert sein, Fehlauslesungen zu vermeiden. Das Lesegerät kann mit einer hohen Konfidenzschwelle eingestellt sein, um potentielle Fehlauslesungen zu detektieren (z.B. damit solche Charaktere als nicht dekodiert markiert werden). Zum Beispiel können solche Charaktere jene Charaktere vor nicht dekodierten Charakteren (z.B. wegen Fehlern in Charaktereinheitsgitterabschätzungen und/oder fehlenden und/oder Extrakanten) umfassen.
  • Bei Schritt 1326 rückt das Lesegerät zum nächsten nicht dekodierten Charakter vor. Zum Beispiel kann das Lesegerät am Anfang des Charakterstrangs beginnen und vorwärts zum nächsten nicht dekodierten Charakter vorrücken. Bei Schritt 1328 schätzt das Lesegerät das Charaktereinheitsgitter ab. Bei Schritt 1330 dekodiert das Lesegerät den Charakter aus dem Scansignal. Falls der Charakter nicht dekodiert wurde, fährt das Verfahren zu Schritt 1326 zurück. Falls der Charakter dekodiert wurde, fährt das Verfahren zu Schritt 1334 fort und verfeinert das Charaktereinheitsgitter. In manchen Ausführungsformen ist Schritt 1334 optional. Das Lesegerät kann kleine Störungen in jeder der Charaktereinheitsgittermessungen durchsuchen und bewerten, wie die Bewertung sich für den dekodierten Charakter ändert. Das Lesegerät kann das Charaktereinheitsgitter auswählen, das die beste Bewertung ergibt, und dadurch eine modifizierte Startposition, Zwischencharakterlücke (falls vorhanden), minimale Merkmalgröße und/oder Breit-zu-schmal-Verhältnis (falls vorhanden) bestimmen. Falls es verbleibende nicht dekodierte Charaktere gibt, fährt das Verfahren zu Schritt 1326 fort. Ansonsten fährt das Verfahren zu Schritt 1322 fort und berichtet die integrierten Stränge.
  • Mit Bezug auf Schritt 1330 kann Dekodieren verschiedener Charaktere zum Beispiel einen variierenden Scanabtastabstand als Funktion der Position entlang des Scans zulassen, wie etwa den durch die optischen Perspektiveffekte und/oder nicht-lineare Krümmung des Symbols um gewölbte Objekte verursachten. Daher kann ein Strichcodelesegerät konfiguriert sein, einen konstanten Scanabtastabstand über den relativ kleinen örtlichen Bereich eines Charakters zu verwenden. Eine einzige minimale Merkmalgröße und eine Breitstrichbreite (falls vorhanden), z.B. gemessen in Scanabtastabstandeinheiten, können verwendet werden, um das Einheitsgitter für einen Charakter zu beschreiben. Vorteilhafterweise kann Verwenden von Charakteren einem Strichcodelesegerät auch ermöglichen, für jeden Charakter Einheitskodiermuster zu lösen durch Untersuchen aller möglichen Kombinationen von Einheitskodiermustern (z.B. 103 Kombinationen für Mehr-Breiten-Code128) und Auswählen des Einheitskodiermusters, das zu einem erwarteten (z.B. vorhergesagten) normalisierten Scanabtastungen führt, Ab, die die nächste Übereinstimmung für den Teil der gemessenen normalisierten Scanabtastungen s ist.
  • In manchen Ausführungsformen kann ein Strichcodelesegerät konfiguriert sein, direkt nach dem Einheitskodiermuster aufzulösen, unter Verwendung linearer Algebratechniken (z.B. Verwendung der Formulierung der kleinsten Quadrate b = (ATA)-1s, was die euklidische Länge von Ab - s minimieren würde). A kann numerisch instabil werden, wenn sich die Modulgröße 1,0 nähert, und unter 1,0 wird a singulär. Daher können Techniken verwendet werden, die Lösung zu stabilisieren. Zum Beispiel kann Beschränkungsminimierung (z.B. mittels Langrange-Multiplikatoren, um manch andere lineare Beschränkungen einzubeziehen) verwendet werden, um die Lösung zu stabilisieren. Als ein anderes Beispiel kann die Pseudoinverse (z.B. b = A+s) verwendet werden, um die Lösung zu stabilisieren. Die Lösung kann auf jede einer Anzahl von Weisen beschränkt werden, zum Beispiel durch mathematische Einschränkung, dass die Lösung ein binärer Vektor ist. Jedoch können manche Beschränkungen weniger nützlich sein als andere, da sie zu einem nichtlinearen Satz von Gleichungen führen können, die nicht leicht oder effizient zu lösen sind.
  • Eine Charakter-für-Charakter-Technik kann verwendet werden, um Zwei-Breiten-Strichcodes zu dekodieren und/oder Mehr-Breiten-Charaktere zu dekodieren (z.B. bei Verwendung von Einheitselementen). Ein Lesegerät kann daher konfiguriert sein, einen Strichcodecharakter durch Identifizieren der Einheitsabtastkoeffizientenmatrix (z.B. und assoziiertem Elementbreitenmuster und Charakterwert) zu dekodieren, die zur besten Bewertung führt (z.B. derjenigen, die im Wesentlichen mit dem Abtastscan am besten übereinstimmt), wenn sie mit einem binären Einheitskodiermustervektor multipliziert wird, der abwechselnde Striche und Abstände (gleich für alle möglichen Charaktere) darstellt.
  • In manchen Ausführungsformen bestimmt das Strichcodelesegerät die Scansignal-Hüllvektoren I und H vor und/oder während des Prozesses der Auffindung des Charakters mit bester Übereinstimmung (z.B. so dass die gemessenen und vorhergesagten (erwarteten) Scansignalwerte direkt verglichen werden können). In manchen Ausführungsformen ist das Strichcodelesegerät konfiguriert, anzunehmen, dass die Scansignalhülle über einen einzelnen Charakter konstant ist (z.B. um Berechnungen einfacher zu machen). Zum Beispiel kann ein Strichcodelesegerät ein einzelnes Paar von Hüllwerten, 1 und h, statt einem Vektor verwenden. Zum Beispiel kann eine solche Konfiguration verwendet werden, um im Wesentlichen anzunehmen, dass die zu Grunde liegende Belichtung des Strichcodes sich über den Verlauf eines Charakters nicht viel ändert.
  • In manchen Ausführungsformen kann das Strichcodelesegerät konfiguriert sein, anzunehmen, dass die Signalhülle von der des vorher dekodierten Charakters nicht sehr verschieden ist. Nach Dekodierung kann das Strichcodelesegerät die Hülle durch Messung der minimalen und maximalen Signalwerte innerhalb der breiteren Striche des dekodierten Charakters verfeinern. In manchen Ausführungsformen kann das Strichcodelesegerät die Hüllparameter 1 und h direkt für jeden möglichen Charakter als Teil des Abgleichprozesses bestimmen. Zum Beispiel kann das Strichcodelesegerät konfiguriert sein, das erwartete Ab direkt mit dem tatsächlich gemessenen Rohsignal r abzugleichen (z.B. durch Erlauben einer willkürlichen gleichförmigen Größe und einer einzigen Verschiebung). In manchen Ausführungsformen kann das Strichcodelesegerät konfiguriert sein, den Wert der Skalare a und c auszuwählen, die sumi(a r(i) + c - s(i))2 (z.B. die Summe über alle n Werte von i, wobei n die Länge des Teils des Scansignals ist) minimieren. Die Verhältnisse a = (S-B)/(h-l) und c = B - al können dann verwendet werden, um h und 1 zu bestimmen, was ergibt: l = ( DB v c ) v a h = 1 + D ( S B ) v a
    Figure DE102019217980A1_0003
    wobei:
    • • va = m2 y2 - n y1
    • • vc = m2 y1 - m2 y2
    • • D = m2 2 - n m1
    • • m1 = sum(r(i)2)
    • • m2 = sum(r(i))
    • • y1 = sum(s(i)r(i))
    • • y2 = sum(s(i))
  • In manchen Ausführungsformen kann das Strichcodelesegerät konfiguriert sein, berechnetes 1 und h gegen erwartete Bereiche für diese Zahlen zu verifizieren (z.B. basierend auf benachbarten Charakteren), so dass das Strichcodelesegerät bestimmen kann, ob der b entsprechende Charakter weiter betrachtet werden sollte.
  • 14A-C veranschaulichen ein beispielhaftes computergestütztes Verfahren 1400 zum Orten und Dekodieren eines ersten Begrenzungscharakters zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. Bei Schritt 1402 identifiziert das Lesegerät mögliche Begrenzerstartpunkte. Zum Beispiel kann das Lesegerät jede Kante als eine mögliche Startposition betrachten, wo die Polarität der Kante (hell-zu-dunkel oder dunkel-zu-hell) die Polarität des Strichcodes (hell-zu-dunkel oder dunkel-zu-hell) bestimmt. Als ein anderes Beispiel kann das Lesegerät nur Kanten mit vernünftigen Ruhezonen betrachten (z.B. ohne signifikante Merkmale (z.B. Kanten) im Scansignal eine Distanz vorher relativ zu der nachfolgenden Kantendistanz).
  • Bei Schritt 1404 wählt das Lesegerät den nächsten möglichen Begrenzerstartpunkt aus den verbleibenden identifizierten möglichen Begrenzerstartpunkten aus. Bei Schritt 1406 dekodiert das Lesegerät die Charaktere mittels Kanten. Bei Schritt 1408 bestimmt das Verfahren 1400, ob der Begrenzungscharakter dekodiert wurde. Falls ja, fährt das Verfahren zu Schritt 1446 in 14C fort. Bei Schritt 1410 identifiziert das Lesegerät mögliche Begrenzungscharaktere. Zum Beispiel haben manche Symbologien mehr als ein Start- oder Stoppmuster. In manchen Ausführungsformen können wie oben beschrieben Stoppmuster in der umgekehrten Richtung entlang des Scansignals detektiert werden, da die Dekodierungsoperation in der umgekehrten Richtung stattfinden kann. Bei Schritt 1412 wählt das Lesegerät den nächsten möglichen Begrenzungscharakter aus.
  • Bei Schritt 1414 schätzt das Lesegerät mögliche grobe Charaktereinheitsgitter ab. Zum Beispiel kann das Lesegerät die möglichen minimalen Merkmalgrößen und das Breit/Schmal-Verhältnis (falls vorhanden) aus einem Teil des Signals am Ende des Strichcodes abschätzen. Zum Beispiel kann das Lesegerät abschätzen, dass das Druckwachstum grob 0 ist und dass die Zwischencharakterlücke (falls vorhanden) 1X ist. Andere Schätzungen können zum Beispiel durch Identifizieren möglicher Entsprechungen von gemessenen Kanten zu Startmusterkanten, Annehmen, dass manche Kanten wegen der Tatsache, dass das Signal nicht aufgelöst ist, fehlen können, und Durchführen einer Kleinste-Quadrate-Anpassung gemacht werden. Die Entsprechungen mit der besten Übereinstimmung (z.B. über einer Fehlerschwelle) werden ausgewählt und mit einem Charaktergitter bester Übereinstimmung assoziiert. In manchen Ausführungsformen für Zwei-Breiten-Symbologien kann eine Abschätzung alternativ ohne Kanten durch Orten der Mitten der breiten Elemente und Durchführen einer ähnlichen Entsprechungsoperation erlangt werden.
  • Bei Schritt 1416 wählt das Lesegerät ein nächstes grobes Charaktereinheitsgitter aus und das Verfahren fährt zu Schritt 1420 fort. Bei Schritt 1420 wählt das Lesegerät die nächste Charaktereinheitsgitterstörung aus. Zum Beispiel kann das Lesegerät das Charaktereinheitsgitter auswählen, das von der Schätzung abweicht, aber innerhalb des geschätzten maximalen Fehlers ist. In manchen Ausführungsformen kann das Lesegerät einen Parameter (z.B. wie etwa die minimale Merkmalgröße) in kleinen Schritten variieren. Bei Schritt 1422 berechnet das Lesegerät die Einheitsabtastkoeffizientenmatrix, was weiter in 15 beschrieben wird. Bei Schritt 1424 bewertet das Lesegerät den Charakter aus der Einheitsabtastkoeffizientenmatrix, was weiter in 16 beschrieben wird. Falls das Lesegerät bestimmt, dass die Bewertung ausreichend ist (z.B. besser als eine vorgegebene Schwelle), kann das Lesegerät die Bewertung für jenen Charakter und das assoziierte Charaktereinheitsgitter aufzeichnen.
  • Bei Schritt 1426 bestimmt das Lesegerät, ob es irgendwelche verbleibenden Gitterstörungen gibt. Falls es verbleibende Gitterstörungen gibt, fährt das Lesegerät zu Schritt 1420 fort. Falls nicht, fährt das Verfahren zu Schritt 1428 fort und bestimmt, ob es irgendwelche verbleibenden groben Charaktergitter gibt. Falls Charaktergitter verbleiben, fährt das Verfahren zu Schritt 1416 in 14A fort. Falls keine Charaktergitter verbleiben, fährt das Verfahren zu Schritt 1430 fort und bestimmt, ob es verbleibende mögliche Begrenzungscharaktere gibt. Falls es verbleibende mögliche Begrenzungscharaktere gibt, fährt das Verfahren zu Schritt 1412 von 14A fort.
  • Falls es keine verbleibenden möglichen Begrenzungscharaktere gibt, fährt das Verfahren zu Schritt 1440 von 14C fort. Bei Schritt 1440 bewertet das Lesegerät den am besten passenden Charakter. Zum Beispiel kann das Lesegerät die Charakter/Gitter-Kombination mit der besten Bewertung auswählen. Bei Schritt 1442 bestimmt das Lesegerät, ob die beste Charakterbewertung ausreichend ist. Zum Beispiel kann das Lesegerät, falls die bestpassende Charakterbewertung nicht gut genug ist, oder nicht um eine Konfidenzschwelle besser ist als die nächstbeste mögliche Charakterbewertung, bestimmen, dass es keinen Begrenzungscharakter gefunden hat. Falls die beste Charakterbewertung ausreichend ist, fährt das Lesegerät zu Schritt 1444 fort und bestimmt, ob es verbleibende mögliche Begrenzerstartpositionen gibt. Falls es verbleibende mögliche Begrenzerstartpositionen gibt, fährt das Verfahren zu Schritt 1404 in 14A fort. Falls es keine verbleibenden möglichen Begrenzerstartpositionen gibt, fährt das Verfahren zu Schritt 1446 fort und verfeinert (optional) das Charaktergitter. Zum Beispiel kann das Lesegerät kleine Störungen in jeder der Charaktergittermessungen durchsuchen und ermessen, wie sich die Bewertung für den dekodierten Charakter ändert. In manchen Ausführungsformen wählt das Lesegerät das Charaktergitter, das die beste Bewertung liefert, und bestimmt dadurch eine modifizierte Startposition, Zwischencharakterlücke (falls vorhanden), minimale Merkmalgröße und/oder Breit-zu-schmal-Verhältnis (falls vorhanden).
  • 15 veranschaulicht ein beispielhaftes computergestütztes Verfahren 1500 zum Bestimmen eines Einheitsabtastkoeffizienten zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. Bei Schritt 1502 initialisiert das Lesegerät die Einheitsabtastkoeffizienten. Die Einheitsabtastkoeffizientenmatrix hat die Größe n x m, wobei n die Anzahl der tatsächlichen 1D-Signalwerte ist und m entweder die Anzahl der Module (z.B. für ein Mehr-Breiten-Symbol) oder Elemente (z.B. für ein Zwei-Breiten-Symbol oder Mehr-Breiten-Symbol mit Elementeinheiten) in einem Charakter plus 2 (z.B. die Elemente oder Zwischencharakterlücken vor und nach dem Charakter darstellend) ist. Das Lesegerät initialisiert alle Werte als 0. In einer bevorzugten Ausführungsform wird die Koeffizientenmatrix mittels einer dünnbesetzten Matrixdarstellung dargestellt.
  • Bei Schritt 1504 bestimmt das Lesegerät den Abtastbereich. Zum Beispiel kann das Lesegerät die ersten und letzten Abtastungen mit Mitten, die innerhalb des Charakters liegen (z.B. Mitten innerhalb eines der Charaktermodule oder -elemente, und nicht des vorherigen oder folgenden Elements oder Zwischencharakterlücke). Bei Schritt 1506 rückt das Lesegerät zur nächsten Scanabtastung im Bereich vor. Zum Beispiel ist dies die erste Abtastung im Bereich, falls noch keine betrachtet wurde. Die Abtastung ist typischerweise mit einem Kasten assoziiert, welcher ein Positionsbereich der Scanlinie ist, über die angenommen wird, dass er Information integriert. Ein Abtastkasten kann um die Abtastposition zentriert sein und kann eine Breite gleich dem Abtastabstand haben.
  • Bei Schritt 1508 bestimmt das Lesegerät die Charaktereinheitsüberlappung. Zum Beispiel berechnet das Lesegerät mittels eines Charaktereinheitsgitters den Prozentsatz der Abtastung, der von jeder Charaktereinheit überlappt wird (z.B. durch in Rechnung Stellen von Druckwachstum g). Für Mehr-Breiten-Symbole kann das Lesegerät Einheiten gleich Modulen verwenden. Für Zwei-Breiten-Symbole kann das Lesegerät Einheiten gleich Elementen verwenden. Das Lesegerät kann diese Werte geordnet über die Zeile der mit der Abtastung assoziierten Koeffizientenmatrix aufzeichnen. In manchen Ausführungsformen, wenn das X - g > 0,5 Abtastabständen, gibt es wahrscheinlich höchstens drei Prozentsätze pro Zeile, die nicht null sind, und Überlappung kann bestimmt werden durch Orten des nächsten Moduls i zur Abtastung j und Besetzen der Koeffizientenmatrix A gemäß den Gleichungen: g ( i ) = ( w ( i ) 1 ) / 2 A ( j , i 1 ) = max ( + d ( i , j ) q ( i ) + g / 2,0 ) A ( j , i + 1 ) = max ( d ( i , j ) q ( i ) + g / 2,0 ) A ( j , i ) = 1 A ( j , i 1 ) A ( j , i + 1 )
    Figure DE102019217980A1_0004
    Wobei:
    • w(i) die Breite von Element i ist (was z.B. X für schmale Elemente oder Module oder W für breite Elemente ist); und
    • d(i,j) die signierte Differenz zwischen der Mitte von Einheit i und der Mitte von Abtastung j ist (z.B. wobei alle Positionen reale Werte in Abtastkoordinaten sind).
  • Bei Schritt 1510 bestimmt das Lesegerät, ob es irgendwelche verbleibenden Scanabtastungen im Bereich gibt. Falls es verbleibende Scanabtastungen im Bereich gibt, fährt das Verfahren zu Schritt 1506 fort. Falls es keine verbleibenden Scanabtastungen im Bereich gibt, fährt das Verfahren zu Schritt 1512 fort und endet.
  • In manchen Ausführungsformen ist das Strichcodelesegerät konfiguriert, die Bewertung für einen Charakter mittels einer Funktion der Fehler, e = s - Ab, zu bestimmen. Beispiele dieser Funktion umfassen die Summe der quadrierten Fehler, die Summe der absoluten Fehler, den maximalen Fehler und/oder dergleichen. In manchen Ausführungsformen werden die Fehler durch die Koeffizientenmatrix „rückwärts fortgepflanzt“, um Fehler in den ursprünglichen Charaktereinheiten (Modulen oder Elementen) zu bestimmen. Rückwärtsfortpflanzung kann durch Berechnen eines Einheitsfehlervektors e(b) gemäß der folgenden Gleichung erreicht werden: e ( b ) = A T e '
    Figure DE102019217980A1_0005
    wobei:
    • • e(b) der Einheitsfehlervektor ist; und
    • • e' der Vektor der absoluten Signalfehler ist, definiert durch e'(i) = | e(i) |.
  • Der Gesamtfehler für das Muster b kann zum Beispiel unter Verwendung der Summe der quadrierten Einheitsfehler, der Summe der Einheitsfehler, des maximalen Einheitsfehlers und/oder dergleichen berechnet werden. In manchen Ausführungsformen wird die Summe der quadrierten Einheitsfehler für Datencharaktere verwendet (z.B. da die Fehlwertung auch nur einer einzigen Einheit zu einer teuren Fehlauslesung führen kann). In manchen Ausführungsformen wird die Summe der Einheitsfehler für Begrenzer verwendet (z.B. wo Fehlauslesungen nicht so schädlich sind, aber Versäumen eines Begrenzers dazu führen kann, dass ein Symbol nicht einmal zu dekodieren versucht wird).
  • 16 veranschaulicht ein beispielhaftes computergestütztes Verfahren 1600 zum Bewerten eines Charakters aus einem Scansignal zum Dekodieren von Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. Bei Schritt 1602 konstruiert das Lesegerät ein Charaktereinheitsmuster. Zum Beispiel identifiziert in manchen Ausführungsformen das Lesegerät das mit dem Charakter assoziierte binäre Einheitskodiermuster. Zum Beispiel ist für Mehr-Breiten-Charaktere das Einheitskodiermuster das Muster der Module, die Teil von Strichen oder Abständen sein können, abgeleitet aus dem Charakterelementbreitenmuster. Für Zwei-Breiten-Charaktere ist das Einheitskodiermuster zum Beispiel das Muster von Elementwerten, das immer eine abwechselnde Sequenz von Strich- und Abstandswerten ist, beginnend mit dem geeigneten Wert (Strich oder Abstand).
  • Bei Schritt 1604 führt das Lesegerät Einheitsabtastkoeffizientenmultiplikation durch. Zum Beispiel kann das Lesegerät die Einheitsabtastkoeffizientenmatrix mit dem Einheitskodiermuster multiplizieren, um den vorhergesagten (oder erwarteten) Signalvektor zu erhalten. Bei Schritt 1606 kann das Lesegerät die vorhergesagten und gemessenen Signale vergleichen. In manchen Ausführungsformen kann das Lesegerät so konfiguriert sein, dass der Vergleich eine oder mehr Charakterbewertungen erzeugen sollte, die angeben, wie gut das vorhergesagte Signal mit dem gemessenen Signal übereinstimmt. Dies kann auf eine Vielzahl von Arten erreicht werden, wie vorher beschrieben. In manchen Ausführungsformen kann das Lesegerät die zwei Werte subtrahieren nach Normalisierung des tatsächlichen Signals durch die lokale Signalhülle (z.B. der minimale und maximale Signalbereich entsprechend der scheinbaren Reflexion der Striche und Abstände im Signal).
  • 17 veranschaulicht ein beispielhaftes computergestütztes Verfahren 1700 zum Dekodieren eines Charakters aus einem Scansignal eines Mehr-Ebenen-Strichcodes zum Dekodieren des Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. Mit Bezug auf Schritt 1702 bestimmt das Lesegerät die Einheitsabtastkoeffizienten, z.B. wie in 16 erklärt. Bei Schritt 1704 identifiziert das Lesegerät alle möglichen Datencharaktere. Zum Beispiel könnten bei manchen Codes wie Code128 alle Datencharaktere möglich sein. Bei anderen Codes wie UPC-EAN könnten nur Charaktere aus den passenden Untergruppen (A, B oder C) möglich sein. Bei Schritt 1706 wählt das Lesegerät den nächsten möglichen Datencharakter aus. Bei Schritt 1708 bewertet das Lesegerät den Charakter mittels der Einheitsabtastkoeffizienten.
  • Bei Schritt 1710 bestimmt das Lesegerät, ob die Bewertung hoch genug ist. Falls die Bewertung nicht hoch genug ist, fährt das Verfahren zu Schritt 1706 fort. Falls die Bewertung hoch genug ist, fährt das Verfahren zu Schritt 1712 fort und zeichnet den Charakter und die Bewertung auf. Bei Schritt 1714 bestimmt das Lesegerät, ob es verbleibende mögliche Datencharaktere gibt. Falls es verbleibende mögliche Datencharaktere gibt, fährt das Lesegerät zu Schritt 1706 fort. Falls es keine verbleibenden möglichen Datencharaktere gibt, fährt das Lesegerät zu Schritt 1716 fort und das Lesegerät bestimmt, ob die beste Bewertung um mindestens die Konfidenzschwelle besser ist als die zweitbeste Bewertung (falls vorhanden). Falls das Lesegerät zuversichtlich ist, dass es den besten Charakter identifiziert hat, fährt das Lesegerät zu Schritt 1720 fort und zeichnet den besten Charakter und die Bewertung auf. Falls das Lesegerät nicht zuversichtlich ist, dann wird der Charakter nicht dekodiert.
  • 18 veranschaulicht ein beispielhaftes computergestütztes Verfahren 1800 zum Dekodieren eines Charakters aus einem Scansignal eines Zwei-Ebenen- oder Mehr-Ebenen-Strichcodes zum Dekodieren des Strichcodes, in Übereinstimmung mit manchen Ausführungsformen. Bei Schritt 1802 identifiziert das Verfahren mögliche Datencharaktere. Zum Beispiel könnten bei manchen Codes wie Code39 alle Datencharaktere möglich sein. Bei anderen Codes wie Codebar könnten nur Charaktere der passenden Länge möglich sein. Bei Schritt 1804 wählt das Lesegerät den nächsten möglichen Datencharakter aus. Bei Schritt 1806 bestimmt das Verfahren die Einheitsabtastkoeffizienten (z.B. wie in Verbindung mit 15 beschrieben). Bei Schritt 1808 bewertet das Verfahren den Charakter mittels der Einheitsabtastkoeffizienten (z.B. wie in Verbindung mit 16 beschrieben).
  • Bei Schritt 1810 bestimmt das Lesegerät, ob die Bewertung über einer vorgegebenen Schwelle ist. Falls die Bewertung nicht über einer vorgegebenen Schwelle ist, fährt das Verfahren zu Schritt 1804 zurück. Falls die Bewertung über einer vorgegebenen Schwelle ist, fährt das Verfahren zu Schritt 1812 fort und zeichnet den Charakter und die Bewertung auf. Bei Schritt 1814 bestimmt das Verfahren, ob es verbleibende mögliche Datencharaktere gibt. Falls es verbleibende mögliche Datencharaktere gibt, fährt das Verfahren zu Schritt 1804 fort. Falls es keine verbleibenden möglichen Datencharaktere gibt, fährt das Verfahren zu Schritt 1816 fort. Bei Schritt 1816 bestimmt das Lesegerät, ob die beste Bewertung um mindestens die Konfidenzschwelle besser ist als die zweitbeste Bewertung (falls vorhanden). Falls das Lesegerät zuversichtlich ist, dass es den besten Charakter identifiziert hat, fährt das Lesegerät zu Schritt 1820 fort und zeichnet den besten Charakter und die Bewertung auf. Falls das Lesegerät nicht zuversichtlich ist, dann wird der Charakter nicht dekodiert und das Verfahren endet bei Schritt 1818.
  • Verschiedene 2D-Symbologien können zum Kodieren von Informationen verwendet werden, z.B. DataMatrix, QR-Code, Aztec-Code, MaxiCode, Vericode und andere 2D-Symbole, wie oben erläutert. 19A zeigt ein beispielhaftes DataMatrix 2D-Symbol 1900 gemäß einigen Beispielen. Die äußerste linke Spalte 1902 und die unterste Zeile 1904 bilden das DataMatrix „L“, das für alle DataMatrix-Symbole vorhanden ist und zum Lokalisieren und Bestimmen der Ausrichtung von DataMatrix-Symbolen in einem Bild verwendet wird. Das DataMatrix-Symbol 1900 besteht aus einem Satz von Modulen (z.B. den Schwarz-Weiß-Modulen, wie dem schwarzen Modul 1906 und dem weißen Modul 1908), die zum Kodieren von Informationen für das Symbol verwendet werden.
  • 19B zeigt ein beispielhaftes QR-Code-Symbol 1950 gemäß einigen Beispielen. Anstelle eines „L“ -Musters wie im DataMatrix-Symbol 1900 umfasst das QR-Code-Symbol 1950 drei Bullseyes 1952, 1954 und 1956, die verwendet werden, um die Ausrichtung des QR-Code-Symbols 1950 in einem Bild zu lokalisieren und zu bestimmen. Wie das DataMatrix-Symbol 1900 umfasst das QR-Code-Symbol 1950 einen Satz von Modulen, die zum Kodieren von Informationen für das Symbol verwendet werden, beispielsweise das schwarze Modul 1958 und das weiße Modul 1960.
  • Verschiedene 1D-Symbologien mit mehreren Breiten können zum Kodieren von Informationen verwendet werden, z.B. Code 128, Code 93, UPC-EAN, PDF417, MicroPDF, DataBar und andere Symbologien. Wie oben erläutert zeigt 2 einen beispielhaften Strichcode 200, der unter Verwendung des Mehr-Breiten-Symbologiecodes 128 mit einem Satz von Modulen 202A-202E erzeugt wurde.
  • Wie oben erwähnt, kann es eine Reihe von Gründen geben, warum eine Bildgebungsanwendung unter-aufgelöste Symbole erfassen kann, wie z.B. Unter-Abtastung und/oder Unschärfe. Beispielsweise verwenden manche Bildgebungsanwendungen montierte Sensoren, um Objekte abzubilden, die sich entlang eines Förderbands bewegen. Solche Sensoren können in ausreichendem Abstand vom Förderband (und damit von Objekten, die vom Förderband getragen werden) angebracht werden, um ein größeres Sichtfeld (FOV) zu erzielen. Um jedoch ein größeres FOV zu erzielen, ist der Kompromiss eine verringerte Auflösung der Objekte und/oder Symbole auf den Objekten, was zu unter-aufgelösten Bildern der Objekte und Symbole führen kann. Als anderes Beispiel können die Symbole in Richtung der Unterseite eines Objekts angeordnet sein, so dass die Codes weiter von den Sensoren entfernt sind, usw., was auch zu unter-aufgelösten Bildern des Symbols führen kann. Es kann daher wünschenswert sein, Techniken zu verwenden, um unter-aufgelöste 1D- und 2D-Symbole zu dekodieren.
  • Es gibt Techniken, um unter-aufgelöste 1D-Symbole zu dekodieren. Bei 1D-Symbolen können die Techniken Charakteraspekte des Symbols nutzen. Da es deutlich weniger Wertemöglichkeiten für einen 1D-Symbolcharakter im Vergleich zu einem 2D-Symbol gibt, können 1D-Techniken auch alle möglichen gültigen Wertekombinationen weitgehend ausprobieren, um das Symbol zu dekodieren. Zum Beispiel gibt es für 128 Code-Strichcodes 103 reguläre Charaktermuster, daher probieren angesichts dieses begrenzten Satzes von Mustern manche 1D-Techniken im Wesentlichen einfach alle Charaktermuster aus. Zum Beispiel bieten die hier beschriebenen Techniken das Dekodieren von unter-aufgelösten 1D-Symbolen.
  • Anders als bei 1D-Symbolen ist es häufig nicht möglich, unbekannte Modulwerte zu bestimmen, indem einfach alle möglichen Kombinationen von Modulwerten ausprobiert werden. Beispielsweise ist das Auflisten und Bewerten aller möglichen binären 2D-Muster für ein 2D-Symbol (2n, wobei n die Anzahl der Module im Symbol ist) häufig unpraktisch und kann in einem realistischen Zeitrahmen kein Ergebnis liefern. Das Ausprobieren aller möglichen binären 2D-Muster in einer Brute-Force-Methode kann auch weniger sensitiv für Modulfehler sein, da ein Modul einen sehr kleinen Prozentsatz des gesamten Musters ausmacht und daher einen geringen Effekt auf den Gesamtfehler im Vergleich zu anderen Fehlern hat, wie etwa denen, die auf Ungenauigkeiten bei dem gefundenen Ort des Symbols beruhen. Als weiteres Beispiel ist das Auflisten und Bewerten aller möglichen Mehr-Breiten-Muster für ein 1D-Symbol ähnlich unpraktisch, ohne einzelne Charaktere unabhängig zu betrachten.
  • Die hier beschriebenen Techniken bieten das Dekodieren unter-aufgelöster Bilder von Symbolen, wie beispielsweise den in 19A und 19B gezeigten 2D-Strichcodes und dem in 2 gezeigten Mehr-Breiten-1D-Strichcode. Wie hierin weiter diskutiert, können die Techniken das Entwickeln einer mathematischen Beziehung zwischen den bekannten Pixelwerten in dem Bild des Symbols und den unbekannten Modulwerten (schwarz oder weiß) umfassen. Zum Beispiel kann in einigen nichteinschränkenden Ausführungsformen ein unterbeschränkter Satz von linearen Gleichungen als eine dünnbesetzte Abtastmatrix dargestellt werden. Jedes Koeffizientenelement (i, j) der Abtastmatrix kann eine Schätzung der prozentualen Überlappung zwischen dem i-ten Pixel im Bild und dem j-ten Modul im Symbol sein. Die Techniken können das Analysieren der Koeffizienten und Werte für die Pixel, die Module überlappen, das logische Ableiten von Modulmöglichkeiten und/oder das iterative Ausfüllen von Modulwerten umfassen. Durch iteratives Betrachten von 2D-Symbolmodulen kann die Anzahl der Gesamtmöglichkeiten schnell verringert werden (z.B. viel weniger als 2n), wodurch die Bestimmung unbekannter 2D-Modulwerte möglich wird.
  • 20 zeigt ein beispielhaftes computergestütztes Verfahren 2000 zum Dekodieren eines unter-aufgelösten Symbols gemäß einigen Ausführungsformen. In Schritt 2002 empfängt eine Bildverarbeitungsvorrichtung ein digitales Bild eines Teils eines Symbols. Die Bildverarbeitungsvorrichtung kann ein Strichcodeleser, ein mit dem Strichcodeleser gekoppeltes externes Computergerät und/oder irgendein anderes Computergerät sein, das konfiguriert ist, um die hierin diskutierten Techniken auszuführen. In Schritt 2004 bestimmt die Bildverarbeitungsvorrichtung eine räumliche Zuordnung zwischen einer zusammenhängenden Teilmenge von Modulen in dem Modulgitter zu dem Pixelgitter. In Schritt 2006 bestimmt die Bildverarbeitungsvorrichtung unter Verwendung der räumlichen Zuordnung die Kausalzusammenhänge zwischen jedem Modul in der zusammenhängenden Teilmenge von Modulen und dem Pixelgitter. Jeder Kausalzusammenhang kann den Grad des Einflusses darstellen, den der Wert eines Moduls auf jeden der Werte einer Teilmenge von Pixeln im Pixelgitter hat. In Schritt 2008 testet die Bildverarbeitungsvorrichtung einen Satz gültiger Wertekombinationen von zwei oder mehr benachbarten Modulen in der zusammenhängenden Teilmenge von Modulen gegen das Pixelgitter unter Verwendung der Kausalzusammenhänge. In Schritt 2010 bestimmt die Bildverarbeitungsvorrichtung einen Wert von mindestens einem Modul der zwei oder mehr benachbarten Module basierend auf dem getesteten Satz von gültigen Kombinationen. In Schritt 2012 dekodiert die Bildverarbeitungsvorrichtung das Symbol basierend auf dem bestimmten Wert des mindestens einen Moduls.
  • Mit Bezug auf Schritt 2002 sind Symbolleser, wie beispielsweise Strichcodeleser, Vorrichtungen zum automatischen Dekodieren von Symbolen. Symbolleser umfassen bildbasierte Symbolleser, die ein diskretes Bild des Strichcodes erfassen, beispielsweise unter Verwendung einer Kameraoptik und eines Bildsensors (z.B. eines CCD-Arrays). Das resultierende Bild kann eine 1D- oder 2D-Abtastung des gesamten Strichcodes sein. Jede Bildabtastung, oder Pixel, dieses Bildes ist selbst ein Maß für das durchschnittliche Reflexionsvermögen eines kleinen Bereichs des Strichcodes.
  • 21-25B werden als veranschaulichende Beispiele der Anwendung der hier offenbarten Techniken zum Dekodieren eines 2D-Strichcodes verwendet. 21 zeigt ein beispielhaftes Bild 2100 eines 2D-Symbols gemäß einigen Ausführungsformen. Das Bild 2100 umfasst einen Satz von Pixeln (z.B. Pixel 2102 und 2104) mit zugeordneten Pixelwerten, die die Dunkelheit jedes Pixels anzeigen. Jedes Bild kann einen Satz von Pixelwerten haben, die einen Wert innerhalb eines vorbestimmten Helligkeitsbereichs haben können, beispielsweise von 0 bis 255 für 8-Bit-Werte. In einigen Beispielen, z.B. für Graustufenbilder, kann 0 Schwarz und 255 Weiß darstellen. In der Praxis erreicht das Bildgebungssystem jedoch möglicherweise nicht den gesamten Farbbereich, so dass der Bereich möglicherweise eingeschränkter ist als die Werte, die ansonsten für Pixel im Bild erlaubt sind.
  • In einigen Ausführungsformen verwenden die Techniken die Hüllkurve des Bildsignals, um Symbole zu dekodieren. Die Hüllkurve umfasst die maximalen und minimalen Pixelwerte des Signals über das Bild hinweg, wobei der maximale Wert der Hüllkurve Weiß für das Bild anzeigt (z.B. aber nicht unbedingt dem theoretischen Maximalwert entspricht, der für das Bild erlaubt ist), und der minimale Wert Schwarz für das Bild anzeigt (z.B. aber nicht unbedingt dem theoretischen Minimalwert entspricht, der für das Bild erlaubt ist). Somit können die Pixelwerte zwischen dem lokalen Vordergrund (dunkel) und dem lokalen Hintergrund (hell) abgebildet werden, was einen Pixelwert ergibt, der zwischen 0 und 1 liegt. Somit kann die spezifische Hüllkurve für das Bild dem System ermöglichen, die Signalwerte zu normalisieren, um einen Maßstab dafür zu bestimmen, wie „schwarz“ oder „weiß“ ein Pixel für die jeweilige Anwendung ist. Beispielsweise kann ein Symbol in einem Bild aufgrund des Beleuchtungswinkels einen Gradienten aufweisen, bei dem das Symbol auf einer Seite einheitlich grau ist, auf der anderen Seite jedoch schwarz ist. Das Bestimmen einer Signalhüllkurve kann beispielsweise Beleuchtungsunterschiede zwischen verschiedenen Teilen eines Bildes, Schatten und/oder dergleichen normalisieren. Die Signalhüllkurve kann zum Beispiel auf ähnliche Weise wie hier beschrieben bestimmt werden, jedoch unter Verwendung von 2D- anstelle von 1D-Verarbeitung. Als anderes Beispiel kann die Signalhüllkurve bestimmt werden, indem die Schwänze des Histogramms in einem lokalen Bereich um jedes Pixel berechnet werden.
  • Bezugnehmend auf Schritt 2004 zeigt 22A zeigt ein beispielhaftes Modulgitter 2200 für ein 2D-Symbol, das über dem Bild 2100 aus 21 überlagert ist, gemäß einigen Ausführungsformen. In diesem speziellen Beispiel ist der Abstand des Modulgitters (z.B. die Modulgröße) ungefähr der gleiche wie der Pixelgitterabstand, was bedeutet, dass die Auflösung ungefähr ein Pixel pro Modul beträgt. Dies ist jedoch nicht immer der Fall. Bilder mit extrem niedriger Auflösung können dazu führen, dass der Modulabstand erheblich größer als der Pixelgitterabstand ist, während Bilder mit hoher Auflösung dazu führen können, dass der Modulgitterabstand viel kleiner als der Bildgitterabstand ist. Die Techniken können zuerst das Lokalisieren des Modulgitters des Symbols in Bezug auf das Pixelgitter des Bildes umfassen. Im Fall von 2D-Symbolen kann das Gitter beispielsweise unter Verwendung von Findermustern auf dem Symbol (z.B. dem „L“ -Muster eines DataMatrix-Symbols oder den Bullseye-Mustern eines QR-Codes) lokalisiert werden.
  • Die Bildverarbeitungsvorrichtung kann ein oder mehrere Modulgitter für 2D-Symbole speichern, die das zweidimensionale Layout von Modulen für das Symbol darstellen. Die Bildverarbeitungsvorrichtung kann das Modulgitter 2200 in Bezug auf das Bild 2100 lokalisieren, um eine räumliche Zuordnung zwischen den Modulen in dem Modulgitter und dem Pixelgitter in dem Bild zu bestimmen. Die Beziehung zwischen dem Modulgitter 2200 und dem Pixelgitter in dem Bild 2100 kann zum Beispiel widerspiegeln, wie sehr jedes Modul Pixel in dem Bild 2100 überlappt. 22A zeigt eine solche Beziehung auf hohem Niveau, indem das 2D-Modulgitter 2200 überlagert auf dem Pixelgitter gezeigt ist. Die Beziehung zwischen dem Modulgitter 2200 und dem Pixelgitter des Bildes 2100 kann daher widerspiegeln, wie sehr jedes Modul jedes der Pixel beeinflusst. Die meisten Einflüsse werden Null sein (z.B. für die Mehrheit der Pixel in dem Bild, die ein bestimmtes Modul nicht überlappen).
  • 22B zeigt ein Beispiel eines Bereichs der Abtastmatrix 2270, der den Prozentsatz angibt, mit dem jedes der Pixel in dem Pixelgitter 2250 von einem beispielhaften Modul 2262 des Modulgitters 2260 überlappt wird, gemäß einigen Ausführungsformen. In einigen Ausführungsformen können sich die Prozentsätze für ein bestimmtes Modul zu einem großen Teil zur Modulgröße summieren. In diesem Beispiel beträgt die Modulgröße ungefähr 1 oder angenäherter 0,9. In einigen Ausführungsformen können sich die Prozentsätze über alle Module hinweg für ein bestimmtes Pixel zu ungefähr 100% addieren. Wie gezeigt überlappt das Modul 2262 mit vier Pixeln in dem Pixelgitter 2250, den Pixeln 2252, 2254, 2256 und 2258. Der Bereich der Abtastmatrix 2270 zeigt die Überlappungsprozentsätze, nämlich 15%, 20%, 25% und 30%, die den Betrag angeben, mit dem das Modul 2262 die Pixel 2252, 2254, 2256 bzw. 2258 überlappt (d.h. den Anteil jedes dieser Pixel, der vom Modul 2262 abgedeckt wird). Die verbleibenden Werte in dem Abtastmatrixabschnitt 2270 betragen 0%, da das Modul 2262 keines der anderen Pixel in dem Pixelgitter 2250 überlappt. 22B zeigt der Übersichtlichkeit wegen nur einen Bereich des Pixelgitters 2250 und der Abtastmatrix 2270, wie durch die gepunkteten Pfeile angegeben. In einigen Ausführungsformen werden kleinere Abtastmatrizen verwendet, anders als diejenigen, die das gesamte Bild darstellen, wie beispielsweise nur eine 3×3-Abtastmatrix und/oder eine 1×9-Abtastmatrix, wie hierin weiter erläutert. Solche kleineren Abtastmatrizen können als solche gespeichert und/oder von einer größeren Abtastmatrix abgeleitet werden.
  • In einigen Ausführungsformen kann die Beziehung zwischen dem Modulgitter und dem Pixelgitter unter Verwendung einer oder mehrerer Lokalisierungstechniken bestimmt werden. Die Techniken können zum Beispiel basierend auf der Anzahl von Pixeln pro Modul (PPM) bestimmt werden. Beispielsweise können bestimmte Techniken für bestimmte PPM-Werte oder Bereiche verwendet werden und die Techniken können ausgeführt werden (z.B. einzeln, nacheinander und/oder dergleichen), bis eine Technik bestimmte Charakteristika des Symbols in dem Bild identifizieren kann. In einigen Ausführungsformen ist die PPM möglicherweise nicht bekannt. In einem solchen Fall können eine oder mehrere Techniken, wie die hier weiter diskutierten, ausgeführt werden, um das Modulgitter zu lokalisieren, um die PPM zu bestimmen. Beispielsweise können zuerst Techniken ausprobiert werden, die für Bilder mit der höchsten PPM verwendet werden, dann Techniken für die nächstniedrigere PPM usw., bis die Symbolposition und -orientierung im Bild bestimmt ist.
  • Das folgende Beispiel beschreibt verschiedene Techniken, die für verschiedene PPM-Bereiche verwendet werden. Dieses Beispiel soll nur veranschaulichend sein, da verschiedene Bereiche, Anzahlen von Bereichen, Werten und/oder dergleichen verwendet werden können, ohne vom Geist der hier diskutierten Techniken abzuweichen. Gemäß diesem nicht einschränkenden Beispiel kann bis zu einer bestimmten PPM (z.B. 2 PPM) die Modulgitterbeziehung bestimmt werden, indem bekannte Muster in dem Symbol lokalisiert werden. Beispielsweise können die Techniken für ein DataMatrix-Symbol das „L“ -Muster auf zwei der Seiten des Symbols lokalisieren. Sobald das „L“ - Muster lokalisiert ist, können die Techniken das Zeitmuster auf jeder der beiden anderen Seiten finden, indem sie Kanten entlang eines 1D-Scans erfassen, der durch sie hindurchgeht. Ein Beispiel für eine solche Technik ist der Referenzdekodierungsalgorithmus, der in der ISO/IEC 16022-Spezifikation für die DataMatrix-Symbologie beschrieben ist, auf die hiermit in vollem Umfang Bezug genommen wird. Während dieses Beispiel für eine DataMatrix-Symbologie ist, sollte beachtet werden, dass das Dekodieren anderer Symbologien auf ähnliche Weise erfolgen kann, indem bekannte Merkmale in dem Symbol lokalisiert werden. Zum Beispiel kann ein QR-Code auf ähnliche Weise bestimmt werden, indem die Bullseye-Bereiche lokalisiert werden, wie im Abschnitt „Reference decode algorithm for QR Code 2005“ der ISO/IEC 18004-Spezifikation für die QR-Code-Symbologie angegeben, auf die hiermit in vollem Umfang Bezug genommen wird. Die Gittergröße kann auch auf die im Referenzdekodierungsalgorithmus beschriebene Weise bestimmt werden.
  • Bei niedrigeren Auflösungen (z.B. von 2 PPM bis 1,2 PPM) können die Techniken möglicherweise bekannte Symbolmuster (z.B. das „L“-Muster für die DataMatrix-Symbologie) nicht lokalisieren. Beispielsweise ist das System möglicherweise nicht in der Lage, bekannte Symbolmuster zu lokalisieren, da Aspekte des Symbols, wie beispielsweise die Symbolkanten, unter-abgetastet sind. Die Techniken können zuerst Pixelverarbeitung durchführen, um die Symbolmerkmale zu verbessern, wie beispielsweise das Hochrechnen des Bildes, um die Sichtbarkeit von Merkmalen des Symbols zu erhöhen. Das Hochrechnen kann beispielsweise das nichtlineare Interpolieren von Werten zwischen Pixeln umfassen. Beispielsweise könnte man eine Polynominterpolation verwenden.
  • Für noch niedrigere Auflösungen (z.B. unter 1,2 PPM) kann das Bild so verschlechtert (aliasiert) sein, dass z.B. selbst mit Pixelverarbeitung bestimmte Symbolmerkmale möglicherweise fast unmöglich zu erfassen sind. Beispielsweise ist das System möglicherweise nicht in der Lage, bekannte Merkmale und/oder Zeitmuster zu erfassen. Wenn die mit höheren PPMs verbundenen Techniken fehlschlagen, können die Techniken so konfiguriert werden, dass sie das äußere Rechteck des Symbols lokalisieren (z.B. mit Subpixel-Genauigkeit) und die Gittergröße unter Verwendung einer digitalen Graustufen-Wellenform bestimmen, anstatt nach Kanten zu suchen. Beispielsweise kann eine Bildverarbeitungstechnik wie Blob-Analyse, verallgemeinerte Hough-Transformation und/oder dergleichen verwendet werden, um die Grenze des 2D-Symbols zu lokalisieren (z.B. ein Rechteck, wie in den 19A und 19B gezeigt). In einigen Ausführungsformen können die verwendeten Techniken von den Beleuchtungsbedingungen des bestimmten Bildverarbeitungssystems abhängen. Beispielsweise können robustere Verfahren verwendet werden. In einigen Ausführungsformen kann das System beispielsweise konfiguriert sein, um Kanten zu erkennen, die Kanten in Konturen zu gruppieren, die Anzahl von Scheitelpunkten in den resultierenden Polylinien zu reduzieren (z.B. unter Verwendung einer Technik wie des Ramer-Douglas-Peucker-Algorithmus) und die resultierenden Bildformen zu analysieren, um Viereckpolygone mit einem Winkel von ca. 90 Grad zu erkennen. Die Subpixelposition der vier Seiten des Rechtecks könnte dann durch Anpassen einer Linie an jede der Gruppen von Subpixelkanten entlang der vier Seiten des Rechtecks bestimmt werden.
  • In einigen Ausführungsformen ist die Gittergröße des Symbols bekannt, bevor das Symbol dekodiert wird. Zum Beispiel kann die Gittergröße festgelegt werden und/oder die Gittergröße kann an früheren Bildern trainiert werden. Zum Beispiel kann das System mit hochauflösenden Bildern (z.B. Bildern mit einer hohen PPM) trainiert werden. Selbst wenn das System während der Laufzeit bei einem Bild mit sehr niedriger Auflösung nicht leicht feststellen kann, wie viele Zeilen sich im Gitter befinden, kann das System davon ausgehen, dass das Symbol dieselbe Gittergröße hat, mit der es trainiert wurde.
  • Wenn die Gittergröße nicht bekannt ist, kann das System so konfiguriert werden, dass die Gittergröße entlang jeder Dimension automatisch bestimmt wird. Zum Beispiel kann die Gittergröße durch Scannen von zwei gegenüberliegenden Seiten des Rechtecks (z.B. von der Außengrenze des Rechtecks nach innen) durch Ausführen einer 1D-Projektion bestimmt werden. In einigen Ausführungsformen kann das Scannen beispielsweise auf praktisch die gleiche Weise durchgeführt werden, wie ein 1D-Strichcode gescannt wird. Zum Beispiel wurden oben Techniken zum Scannen eines 1D-Strichcodes erörtert. Sobald das System bestimmt, wo das Zeitmuster beginnt und endet, kann das System einfach alle Zeitmuster ausprobieren, die jeder der praktischen ganzen Zahlen von Modulen dazwischen entsprechen. Diese Technik kann nur in bestimmten Situationen verwendet werden, z.B. für einen bestimmten PPM-Bereich. Beispielsweise kann die Technik für Codes mit einer PPM unterhalb einer oberen PPM-Grenze (z.B. 1,2, was andernfalls durch die oben beschriebenen Wiederholungsversuche behandelt werden würde) und einer praktischen unteren PPM-Grenze (z.B. 0,8), die dekodiert werden kann, verwendet werden. Die minimale Anzahl von Modulen kann basierend auf der ganzen Zahl bestimmt werden, die der Länge des Zeitmusters, dividiert durch die obere PPM-Grenze, am nächsten liegt (z.B. 1,2, um das obige Beispiel fortzusetzen), während das Maximum durch die Länge, dividiert durch die untere Grenze, gegeben ist (z.B. wieder 0,8). Durch die Verwendung solcher Einschränkungen kann beispielsweise die Anzahl der möglichen Muster, die ausprobiert werden sollen, auf ein Minimum beschränkt werden.
  • Um zu bestimmen, welches der möglichen Modulgrößenmuster am besten ist, kann das System in einigen Ausführungsformen dazu konfiguriert sein, für jedes Zeitmuster eine Abtastkoeffizientenmatrix zu bestimmen und die Abtastkoeffizientenmatrix zu verwenden, um eine Bewertung zu bestimmen. Das Muster mit der höchsten Bewertung kann so festgelegt werden, dass es der richtigen Modulgröße für diese Dimension des Symbols entspricht. Eine solche Technik wird oben zum Dekodieren von Charakteren eines 1D-Strichcode-Symbols erörtert.
  • Sobald das System die Modulgitterbeziehung bestimmt, kann das System Modulwerte festlegen, die bekannten Strukturen im Symbol entsprechen. 23 zeigt das beispielhafte Modulgitter 2200 in 22A, bestückt mit bekannten Strukturwerten des 2D-Symbols, gemäß einigen Ausführungsformen. In diesem Beispiel ist die äußerste linke Spalte 2302 des Modulgitters 2200 mit dem oberen Teil des „L“ der DataMatrix-Symbologie bestückt, die äußerste untere Zeile 2304 ist mit dem unteren Teil des „L“ bestückt, und die äußerste rechte Spalte 2306 und die äußerste obere Spalte 2308 sind mit dem Zeitmuster bestückt. Während diese Ausführungsform bekannte Strukturen für eine DataMatrix-Symbologie bestückt, sollte beachtet werden, dass bekannte Strukturen für andere zu dekodierende Symbologien bestückt werden könnten, wie beispielsweise die Bullseye-Muster für eine QR-Code-Symbologie und/oder dergleichen.
  • Die bekannten Strukturen können anhand der Ausrichtung des Symbols in das Modulgitter eingefügt werden. In einigen Ausführungsformen kann das System die Ausrichtung des Gitters lernen, z.B. um zu bestimmen, ob sich das „L“ auf der linken/unteren Seite befindet, wie in 23 gezeigt, oder ob es eine andere Position hat, z.B. entlang der oberen/rechten Seite des Symbols und/oder dergleichen. In einigen Ausführungsformen kann die Orientierung während des Trainings bestimmt werden. In einigen Ausführungsformen können andere Techniken verwendet werden, um zu bestimmen, wo bekannte Merkmale in dem Bild lokalisiert sind (z.B. ob sich das „L“ links/unten vom Symbol befindet). Wenn das System beispielsweise die Gittergröße bereits kennt, aber die Ausrichtung des Symbols nicht kennt, kann das System so konfiguriert werden, dass es Techniken zum Identifizieren der Ausrichtung verwendet, sobald das System das Gitter identifiziert. In einigen Ausführungsformen kann das System die Pixel unter der Gitterposition entlang der oberen, unteren, linken und rechten Seite mitteln und die Mittelwerte mit dem niedrigsten Grauwert als dem L-Muster entsprechend annehmen. Es können auch andere Techniken verwendet werden, um bekannte Merkmale des Symbols zu identifizieren, um die Orientierung zu bestimmen.
  • In einigen Ausführungsformen können einige der bekannten Strukturen Datenmodule des Symbols sein, die mit hoher Zuverlässigkeit in einem früheren Bild bestimmt wurden, das von demselben physikalischen Symbol erfasst wurde. Diese Module können in Bildern mit höherer Auflösung (z.B. weil sich das Symbol mit der Zeit von der Kamera wegbewegt) oder in Bildern mit niedrigerer Auflösung (z.B. unter Verwendung einer oder mehrerer der hier beschriebenen Techniken) bestimmt worden sein. Bei Bildern mit niedrigerer Auflösung ist es häufig so, dass das Symbol irgendwie nicht erfolgreich dekodiert wurde, dass jedoch bestimmte Module mit hoher Sicherheit abgeleitet wurden und dass diese Module, die mit hoher Sicherheit abgeleitet wurden, diejenigen sind, die im aktuell erfassten Bild schwer abzuleiten sind, aufgrund einer deutlichen Verschiebung des Modulgitters gegenüber dem Pixelgitter.
  • Bezugnehmend auf Schritt 2006 kann die Bildverarbeitungsvorrichtung die zwischen den Modulen in dem Modulgitter und den Pixeln in dem Bild bestimmten Kausalzusammenhänge verwenden, um einen ersten Satz von Modulen abzuleiten (z.B. Module, die einen hohen Grad an Überlappung mit zugeordneten Pixeln aufweisen). 24 zeigt Module des beispielhaften Modulgitters 2200, die basierend auf Beziehungen zwischen den Modulen und den Pixeln abgeleitet wurden, gemäß einigen Ausführungsformen. Die Ableitungen in 24 umfassen abgeleitete weiße Module, wie etwa die Module 2402, und abgeleitete schwarze Module, wie etwa die Module 2404. Beispielsweise kann die Bildverarbeitungsvorrichtung jedes Modul bestücken, das zu einem sehr hohen Grad überlappt, wie beispielsweise Module, bei denen die Abtastkoeffizienten über einem Überlappungsschwellenwert liegen. Beispielsweise kann ein Überlappungsschwellenwert von 90% (oder ein anderer Prozentsatz) festgelegt werden, um das System so zu konfigurieren, dass Modul(e) festgelegt werden, wenn 90% des Bereichs des Moduls einen Satz von einem oder mehreren Pixeln überlappen, die alle Werte innerhalb von 90% voneinander aufweisen. Der Schwellenwert kann viel kleiner als 90% sein. Beispielsweise kann es sein, dass Module mit einem Prozentsatz der Überlappung (z.B. dem Prozentsatz des vom Modul überlappten Pixels) von nur 30% ausreichen, um den Modulwert zu bestimmen. Beispielsweise kann abhängig von der Genauigkeit des Gitters ein niedrigerer Schwellenwert verwendet werden. Im Allgemeinen können die Techniken Logik verwenden, um die Tatsache auszunutzen, dass es unwahrscheinlich ist, dass das Modul einen Wert aufweist und das Pixel, das es im Wesentlichen überlappt, einen Wert aufweist, der dem entgegengesetzten Extrem entspricht. Beispielsweise sollte ein schwarzes Modul, das ein Pixel signifikant überlappt, zu einem grauen oder schwarzen (aber nicht weißen) Pixelwert führen und ein weißes Modul, das ein Pixel signifikant überlappt, sollte zu einem grauen oder weißen (aber nicht schwarzen) Pixelwert führen. Daher können Module, die ein Vordergrund- (dunkelstes) Pixel bis zu einem bestimmten Grad überlappen, auf Schwarz gesetzt werden und Module, die ein Hintergrund- (hellstes) Pixel bis zu einem bestimmten Grad überlappen, können auf Weiß gesetzt werden.
  • Die in diesem Schritt abgeleiteten Module können Pixeln zugeordnet werden, die nahe am Vordergrund und/oder nahe am Hintergrund sind. Daher können in einigen Ausführungsformen die in Schritt 2006 bestückten Pixel Module sein, die einheitlichen schwarzen oder weißen Bereichen des Bildes zugeordnet sind. Wie oben diskutiert, kann, wenn auf ein Pixel als entweder „weiß“ oder „schwarz“ Bezug genommen wird, der Maßstab, ob ein Pixel schwarz oder weiß ist, bezogen auf die Signalhüllkurve des Bildes bestimmt werden. Somit werden in einigen Ausführungsformen alle dunkelsten Module, die den dunkelsten Pixeln für die Signalhüllkurve zugeordnet sind, ebenso wie alle hellen Module, die den hellsten Pixeln der Signalhüllkurve zugeordnet sind, abgeleitet. Die Signalhüllkurve des Bildes kann daher verwendet werden, um den Bereich von weißen und schwarzen Pixeln zu normalisieren, um den Bereich eines bestimmten Pixels für die Signalhüllkurve zu bestimmen.
  • Weiter bezugnehmend auf Schritt 2006 kann die Bildverarbeitungsvorrichtung andere unbekannte Module bestimmen, indem bekannte Module genutzt werden. 25A und 25B zeigen Beispiele zusätzlicher Module des beispielhaften Modulgitters, die basierend auf bekannten Modulen bestimmt wurden, gemäß einigen Ausführungsformen. 25A zeigt neue weiße Modulwerte, die bestimmt wurden (einschließlich z.B. Modulwerte 2502), und neue bestimmte Schwarzmodulwerte, die basierend auf bekannten Modulen bestimmt wurden (einschließlich z.B. Modulwerte 2504), einschließlich Modulen, die in Schritt 2004 bestimmt wurden. Ebenso zeigt 25B zusätzliche Modulwerte, die bestimmt werden, einschließlich neuer weißer Modulwerte (einschließlich z.B. Modulwerte 2552) und neuer schwarzer Modulwerte (einschließlich z.B. Modulwerte 2554), die basierend auf den in 25A bestimmten neuen Modulen bestimmt werden können. Die Bildverarbeitungsvorrichtung kann Pixel mit Grauwerten in der Mitte des Bereichs (z.B. zwischen Vordergrund und Hintergrund der Signalhüllkurve) untersuchen. Beispielsweise kann die Bildverarbeitungsvorrichtung zusätzliche Module ableiten, indem Pixel bestimmt werden, die einer bestimmten Anzahl von Modulen zugeordnet sind. Für jedes solcher Pixel, die (a) nur von zwei Modulen stark überlappt werden, wobei (b) einer der Modulwerte bereits bestimmt wurde, kann die Bildverarbeitungseinrichtung das andere dieser beiden Module auf den Wert setzen, der zum bekannten gegenteilig ist.
  • Die neuen Modulwerte können basierend auf bekannten Modulwerten basierend auf der PPM bestimmt werden. Beispielsweise können für Codes mit PPM> 0,5 bis zu 9 Module vorhanden sein, die jedes gegebene Pixel überlappen. Die Bildverarbeitungsvorrichtung kann jedes der nächsten 9 Module in dem lokalisierten Gitter nach prozentualer Überlappung ordnen; das heißt, wie stark das Pixel von jedem Modul überlappt wird. Die Bildverarbeitungsvorrichtung kann die oberen zwei Prozentsätze (die Module mit der größten Überlappung) addieren, um zu bestimmen, ob die Summe über einem Schwellenwert liegt (z.B. einem Schwellenwert von 90%). Wenn der Schwellenwert erreicht ist und der Wert nur eines dieser beiden Module bereits bestimmt wurde, kann der Wert des anderen dieser beiden Module auf das Gegenteil gesetzt werden. Wenn beispielsweise der Wert eines Moduls, das ein graues Modul signifikant überlappt, weiß ist, wird der Wert des anderen Moduls als schwarz bestimmt (andernfalls hätten wir ein helles Pixel, kein graues Pixel). Die Ableitungstechnik kann Variationen des zuvor diskutierten Beispiels umfassen. Beispielsweise kann ein Schwellenwert stattdessen mit den drei Modulen mit der größten Überlappung verglichen werden. Wenn zwei davon bekannt sind und denselben Wert haben, muss das andere den gegenteiligen Wert haben. Daher können die Techniken die bekannten Module verwenden, gekoppelt mit Überlappungsgraden zwischen den Modulen und Pixeln, um Werte für neue Module abzuleiten.
  • Als ein veranschaulichendes Beispiel, wenn eine Abtastmatrix verwendet wird, wie z.B. in 22B gezeigt, können die Koeffizienten der Abtastmatrix Prozentsätze sein, die den Grad angeben, in dem jedes Pixel von einem zugeordneten Modul überlappt wird (z.B. der prozentuale Anteil jedes Pixels, der von dem zugeordneten Modul abgedeckt wird). Die Überlappungsprozentsätze können verwendet werden, um bereits abgeleitete Modulwerte (z.B. diejenigen, die bekannten Merkmalen des Symbols zugeordnet sind) zu nutzen, um andere benachbarte Module herauszufinden, die sich um das bekannte Modul befinden. Beispielsweise hat für eine Abtastmatrix mit neun Koeffizienten ein Pixel, das nur von zwei Modulen weitgehend überlappt wird, zwei Koeffizienten, die ungefähr gleich (z.B. jeweils ungefähr 0,5) und viel größer sind als die anderen 7 Koeffizienten (die z.B. für den Rest ungefähr 0 betragen).
  • Wenn neue Module bestimmt werden, kann die Bildverarbeitungsvorrichtung den zusätzlichen Satz unbekannter Module iterativ bestimmen. Die Techniken können die bereits bekannten Modulwerte nutzen, um zusätzliche Werte basierend auf der Pixel/Modul-Überlappung, wie hierin diskutiert, herauszufinden. Anfangs kann es viele Gruppen von benachbarten Modulen geben, die unbekannt sind, aber durch iteratives Suchen nach Pixeln/Modulen, die eine gewisse Überlappung aufweisen, wenn Modulwerte bestimmt werden, können diese zusätzlichen bestimmten Werte verwendet werden, um weitere Modulwerte zu bestücken.
  • Bezugnehmend auf die Schritte 2008 und 2010 kann die Bildverarbeitungsvorrichtung, sobald keine weiteren Modulwerte abgeleitet werden können (z.B. wie oben in Verbindung mit den Schritten 2004 und 2006 diskutiert), einen Satz gültiger Wertekombinationen testen, um weitere unbekannte Module zu bestimmen. In einigen Ausführungsformen wurde nun, da ein aktueller Satz von Pixeln bestimmt wurde, der Suchraum für die verbleibenden Module reduziert. Die Bildverarbeitungsvorrichtung kann den jetzt kleineren Satz verbleibender unbekannter Module bestimmen (z.B. iterativ).
  • In einigen Ausführungsformen kann die Bildverarbeitungsvorrichtung für jedes Modul verbleibende gültige Kombinationen von Modulmustern (z.B. 2×2, 3×3 und/oder dergleichen) ausprobieren, die ein oder mehrere bestimmte Pixel umfassen. Beispielsweise kann die Bildverarbeitungsvorrichtung 3×3-Modulmuster mit dem unbekannten Modul als Zentrum versuchen, bis keine weiteren solchen Ableitungen mehr möglich sind. Am Beispiel eines 3x3-Musters hätte jedes Modul 29 = 512 Möglichkeiten. In vielen Fällen wird es jedoch weit weniger als die maximale Kombination geben. Beispielsweise können die bereits bestimmten Modulwerte des 3x3-Musters die Anzahl der Möglichkeiten reduzieren. Als weiteres Beispiel können einige Koeffizienten für bestimmte Module des 3×3 ausreichend klein sein, sodass der Modulwert für die Berechnung kaum einen Unterschied macht. In einigen Ausführungsformen könnten die möglichen Modulmuster ausgeführt werden wie oben für Mehr-Breiten-1D-Symbologien beschrieben.
  • Selbst wenn viele der Module in vorherigen Schritten bestimmt wurden, kann das rekursive Testen aller Möglichkeiten dennoch sehr zeitaufwändig sein. Das Testen aller Kombinationen funktioniert möglicherweise auch nicht gut, z.B. weil die Fehler zwischen dem richtigen Muster und einigen der falschen Muster möglicherweise schwer zu unterscheiden sind. In einigen Ausführungsformen kann eine Abtastmatrix verwendet werden, um zusätzliche Module zu bestimmen. Beispielsweise kann für jedes Pixel, das von einem Modul überlappt wird, das noch nicht bestimmt wurde, eine 1x9-Abtastmatrix verwendet werden, um den Modulwert zu bestimmen. Das System kann die 1x9-Abtastmatrix mit einem unbekannten Vektor der 9 nächsten binären (0 oder 1) Modulwerte (die ein 3x3-Modulmuster darstellen) multiplizieren, um den Modulwert zu bestimmen.
  • Die Pixelabtastmatrix kann ein Abschnitt einer Reihe einer größeren dünnbesetzten Matrix sein, die jedes Pixel innerhalb des Bildes mit jedem Modul des Gitters in Beziehung setzt, wobei jedes Element (i, j) in der Matrix den Prozentsatz darstellt, mit dem das Pixel, das der Zeile i der Matrix entspricht, von dem Modul, das der Spalte j der Matrix entspricht, überlappt oder abgedeckt wird. Für jede mögliche Kombination von Binärwerten für die neun Module des 3x3-Modulmusters (bis zu 512, jedoch im Allgemeinen weniger, wenn die bereits bestimmten Modulwerte berücksichtigt werden) kann ein Fehler zwischen dem tatsächlichen Pixelwert und dem, der sich beim Multiplizieren durch die Abtastkoeffizienten ergibt, berechnet werden. Jede der Kombinationen, die zu einem Pixelwertfehler führen, der innerhalb einer akzeptablen Fehlerschwelle liegt, kann als mögliche Lösungen angesehen werden, während diejenigen, die zu Fehlern über der Fehlerschwelle führen, nicht berücksichtigt werden. Wenn nur eine Kombination unterhalb der Fehlerschwelle liegt, können die unbekannten Modulwerte des entsprechenden 3x3-Modulmusters entsprechend festgesetzt werden. Wenn mehrere Muster vorhanden sind, wird jede der Kombinationen, die zu einem Fehler unterhalb der Fehlerschwelle führen, für dieses Pixel als eine 9-Bit-Ganzzahl aufgezeichnet.
  • In einigen Ausführungsformen kann das System so konfiguriert sein, dass es bestimmte Pixel zuerst verarbeitet (z.B. um zu einer höheren Wahrscheinlichkeit zu gelangen, Modulwerte zu dekodieren). Beispielsweise kann das System so konfiguriert werden, dass zunächst Pixel verarbeitet werden, bei denen bereits eine große Anzahl überlappender Module bestimmt wurde. Beispielsweise kann das System so konfiguriert sein, dass es sich zuerst auf das Verarbeiten von Pixeln außerhalb des Symbols konzentriert (z.B. in der Nähe der Zeitmuster und des L-Finder-Musters, für die die Module bestimmt wurden). Unter Verwendung einer solchen Technik werden mit jeder Iteration die Werte für die Module näher und näher zum Inneren des Symbols und/oder nach innen zu ansonsten großen Bereichen unbekannter Module bestimmt.
  • Nachdem alle Pixel innerhalb des Bereichs des Gitters betrachtet und deren Neun-Bit-Ganzzahlen aufgezeichnet wurden, können zusätzliche Module durch Eliminierungsverfahren bestimmt werden. Beispielsweise kann das System die Konsistenz der verbleibenden möglichen Kombinationen jedes Pixels mit den verbleibenden möglichen Kombinationen jedes der dem Modul zugeordneten Nachbarn untersuchen. Beispielsweise kann das System die Konsistenz der 8 Nachbarn für ein bestimmtes Modul untersuchen und dabei die Tatsache ausnutzen, dass die 3×3-Modulmuster für ein Pixel im Wesentlichen mit denen seiner 8 Nachbarn überlappen. Tatsächlich kann das System die Tatsache nutzen, dass jede mögliche Kombination für ein bestimmtes Pixel nur mit bestimmten Kombinationen für die benachbarten Pixel kompatibel ist, um die richtige Kombination zu bestimmen.
  • In einigen Ausführungsformen kann ein solcher Vergleich eines Moduls mit seinen benachbarten Modulen verwendet werden, um einen ungerichteten Beschränkungsgraphen zu erzeugen. Die Neun-Bit-Ganzzahlen, die die gespeicherten Kombinationen von Binärwerten für die neun Module des 3×3-Modulmusters für jedes Modul darstellen, können die Knoten des Graphen ausfüllen und die Verknüpfungen zu jeder der konsistenten Neun-Bit-Ganzzahlen für Nachbarn können die Kanten im Graph sein. Zwei Knoten gelten als konsistent, wenn der Überlappungsbereich zwischen ihren jeweiligen 3x3-Modulmustern im Modulgitter dieselbe Kombination von Binärwerten aufweist.
  • Das Bestimmen der verbleibenden Module kann daher das Bestimmen eines konsistenten und eindeutigen Satzes von Kanten zwischen jedem Pixel und seinen 8 benachbarten Pixeln umfassen, so dass nur ein einzelner Knoten an jedem Pixel verbunden ist, wobei die anderen Knoten und ihre Kanten entfernt wurden. Das System kann den ausgewählten Knoten für ein Pixel verwenden, um die richtige Kombination überlappender Modulwerte zu bestimmen. Das System ist möglicherweise in der Lage, bestimmte Knoten im Graph sowie die zugehörigen Kanten zu entfernen. Beispielsweise kann das System Knoten entfernen, die nicht durch mindestens eine Kante mit mindestens einem Knoten jedes benachbarten Pixels verbunden sind. Das Entfernen solcher Knoten kann eine Anzahl von Knoten in dem Graphen entfernen, insbesondere Knoten für Pixel, die an ein anderes Pixel mit nur einem einzelnen Knoten angrenzen. Eine solche Knotenentfernung kann iterativ durchgeführt werden, bis im Graph keine solchen Knoten mehr vorhanden sind. Selbst wenn bestimmte Knoten, wie oben beschrieben, entfernt werden, können immer noch mehrere Knoten (Kombinationen) an bestimmten Pixeln verbleiben. In einigen Ausführungsformen kann das so System konfiguriert sein, dass es das Entfernen bestimmter Auswahlmöglichkeiten testet. Zum Beispiel kann das System so konfiguriert werden, dass es einen Knoten für eines der Pixel auswählt (z.B. eins, das nur zwei Möglichkeiten hat), beispielsweise durch zufällige Auswahl. Das System kann die anderen Knoten für dieses Pixel entfernen und den zuvor diskutierten Knotenentfernungsprozess wiederholen. Das Durchführen einer solchen Auswahl und Entfernung kann zum Bestimmen der anderen Pixel führen oder es kann zum Entfernen aller Knoten für andere Pixel führen. Im letzteren Fall kann das System bestimmen, dass der ausgewählte Knoten entfernt werden sollte. Andernfalls kann das System so konfiguriert werden, dass es versucht, das Modul zu dekodieren, indem die Modulwerte für alle möglichen Auswahlen berechnet werden, die für dieses eine Pixel (und/oder auch für andere Pixel) gespeichert sind, um zu bestimmen, ob dies eine erfolgreiche Dekodierung ergibt. Das System kann sich auf die integrierte Fehlerkorrektur verlassen, um zu verhindern, dass das System das Symbol falsch liest. Wenn das Symbol nicht dekodiert wird, weiß das System erneut, dass der ausgewählte Knoten falsch war, und daher sollte der Knoten entfernt werden.
  • Im Folgenden ist ein Beispiel zum Bestimmen eines Beschränkungsgraphen angegeben. G sei die (n + 2) × (m + 2) Matrix von Modulwerten, die bisher für ein 2D-Symbol abgeleitet wurden, wobei n die Anzahl der Zeilen des Symbols und m die Anzahl der Spalten ist. In einigen Ausführungsformen können zusätzliche Zeilen und/oder Spalten (z.B. zwei zusätzliche Zeilen und zwei zusätzliche Spalten) in der Matrix vorhanden sein, die an der Seite (den Seiten) des Symbols verwendet werden können, um einen modulweiten Bereich der Ruhezone zu codieren.
  • Jedes Element von G kann mit g (k, 1) bezeichnet werden, wobei k von 0 bis n + 1 reicht und 1 von 0 bis m + 1 reicht und g (k, l) = 0 (dunkel), 1 (hell) ), oder ? (Unbekannt). Für jedes Modul (k, l) sei S (k, 1) die 3x3-Untermatrix von G, die auf Modul k, l zentriert ist. Jedes Element von S (k, 1) wird mit s (k, l, i, j) bezeichnet, wobei i der Zeilenindex ist und von -1 bis 1 reicht, und j der Spaltenindex ist und von -1 bis 1 reicht. Man beachte auch, dass s (k, l, i, j) = m (k + i, l + j) für alle i und j ist.
  • Für jede gegebene Untermatrix S (k, 1) gibt es 2u mögliche Kombinationen möglicher Muster, wobei u (k, 1) die Anzahl von Elementen von S (k, l) ist, die unbekannt sind (Anzahl von i, j-Koordinaten für welche s (k, l, i, j) =?). Jedes mögliche Muster sei durch die 3×3-Matrix M (k, l, z) bezeichnet, wobei z im Bereich von 1 bis u (k, 1) liegt. Jedes Element von M (k, l, z) wird mit m (k, 1, z, i, j) = 0 oder 1 bezeichnet. Man beachte, dass m (k, l, z, i, j) = s (k, l, z, i, j), wenn s (k, l, z, i, j) 0 oder 1 ist (bekannt) (z.B. so, dass nur die unbekannten Werte variieren können).
  • Das System kann jedes der Matrixmuster M (k, l, z) gegen die Bildpixel testen, um festzustellen, ob es unter der Fehlerschwelle liegt, gemäß der Abtastmatrix, die jedes Element m (k, l, z, i, j) mit dem Pixelgitter verknüpft.
  • Die acht (8) Richtungen von jedem Modul (k, 1) seien gegeben durch einen Zeilenversatz dr im Bereich von -1 bis 1 und einen Spaltenversatz dc im Bereich von -1 bis 1 (dr und dc können nicht beide 0 sein, sonst wäre dies keine Richtung aus dem Modul (k, 1)). Mit anderen Worten sind die acht Richtungen (dr, dc) = (0,1), (0,-1), (1,0), (-1,0), (1,1), (1,-1), (-1,1) und (-1,-1).
  • Für jedes Muster M (k, l, z), das unterhalb der Fehlerschwelle liegt, legen wir einen Knoten N (k, l, z) fest. Wir können dann Kanten in einem ungerichteten Graphen festlegen, die Knoten miteinander verknüpfen. Für jedes Knotenpaar N(k, l, z1) und N(k+dr, l+dc, z2), wobei (k+dr, l+dc) ein benachbartes Modul in einer von 8 möglichen Richtungen vom Modul (k, 1) ist; z, im Berich von 1 bis u(k, 1) liegt; und z2 im Bereich von 1 bis u(k+dr, l+dc) liegt, wird dann ein eine Verknüpfung L(k, 1, z1, k+dr, l+dc, z2) festgelegt, nur wenn die überlappenden Untermuster gleich sind. Das heißt, wo für alle i = imin bis imax und alle j = jmin bis jmax, m(k, 1, z1, i, j) = m(k+dr, l+dc, z2, i-dr, j-dc), wobei imin, imax, jmin, jmax basierend auf der Richtung bestimmt werden:
    imin = -1 wenn dr <= 0, und ansonsten 0
    imax = 1 wenn dr >= 0, und ansonsten 0
    jmin = -1 wenn dc <= 0, und ansonsten 0
    jmax = 1 wenn dc >= 0, und ansonsten 0
  • Für dr = 0 ist der Überlappungsbereich 3x2, für dc = 0 ist der Überlappungsbereich 2x3 und für diagonale Richtungen ist der Überlappungsbereich 2x2.
  • Jeder Knoten, der keine Verknüpfung zu mindestens einem anderen Knoten in jeder der acht Richtungen herstellt, wird nicht mehr weiter in Betracht gezogen. Wenn Knoten entfernt werden, werden auch ihre jeweiligen Verknüpfungen entfernt, wodurch wiederum mehr Knoten ohne Verknüpfungen zu jeder der acht Richtungen entfernt werden, und so weiter. Dieser Entfernungsprozess kann dazu führen, dass für jedes Modul (1, k) nur noch ein einziger Knoten übrigbleibt, zu diesem Zeitpunkt sind daher alle Modulwerte bekannt. Selbst wenn an einem oder mehreren Modulen noch ein Knoten übrig ist, kann es sein, dass an jedem Modul nur eine einzige Auswahlmöglichkeit vorhanden ist, die zu 8 verbundenen Nachbarn bei jedem Modul führt. Unter solchen Umständen kann eine zusätzliche Suche durchgeführt werden, um solche Knoten zu bestimmen (z.B. über eine Brute-Force-Suche durch alle verbleibenden Kombinationen).
  • 32 zeigt ein Beispiel eines ungerichteten Beschränkungsgraphen gemäß einigen Ausführungsformen. Der Bereich des Modulgitter 3200 umfasst eine Anzahl von abgeleiteten Modulen und drei Module, die noch abzuleiten sind, gezeigt als Module 3202, 3204 und 3206. Die Box 3208 hebt die zentral umgebenden Module in dem Bereich des Modulgitters 3200 hervor und die Box 3210 hebt die südöstlich benachbarten Module im Bereich des Modulgitters 3200 hervor. Da die zentral umgebenden Module drei unbekannte Module aufweisen, gibt es acht mögliche verbleibende Kombinationen. Insbesondere sind die möglichen Kombinationen für die zentral lokalisierten Module gezeigt als mögliche Kombination 3212 (alle drei unbekannten Module sind weiße Module), mögliche Kombination 3214 (unbekanntes Modul 3204 ist schwarz, während unbekannte Module 3202 und 3206 weiß sind), mögliche Kombination 3216 (unbekanntes Modul 3202 ist schwarz und unbekannte Module 3204 und 3206 sind weiß), mögliche Kombination 3218 (unbekannte Module 3202 und 3204 sind schwarz und unbekanntes Modul 3206 ist weiß), mögliche Kombination 3220 (unbekannte Module 3202 und 3204 sind weiß und unbekanntes Modul 3206 ist schwarz), mögliche Kombination 3222 (unbekanntes Modul 3202 ist weiß und unbekannte Module 3204 und 3206 sind schwarz), mögliche Kombination 3224 (unbekannte Module 3202 und 3206 sind schwarz und unbekanntes Modul 3204 ist weiß) und mögliche Kombination 3226 (alle drei unbekannten Module sind schwarz). Da die südöstlichen Module nur zwei unbekannte Module haben, gibt es vier mögliche verbleibende Kombinationen. Die möglichen Kombinationen für die südöstlich lokalisierten Module sind gezeigt als mögliche Kombination 3230 (beide Module weiß), mögliche Kombination 3232 (unbekanntes Modul 3204 schwarz, unbekanntes Modul 3206 weiß), mögliche Kombination 3234 (unbekanntes Modul 3204 weiß, unbekanntes Modul 3206 schwarz) und mögliche Kombination 3236 (beide unbekannten Module schwarz).
  • In diesem Beispiel führt die Bildverarbeitungsvorrichtung eine Fehlerprüfung für die verbleibenden Kombinationen für jeden Satz von Modulen durch, wodurch mögliche Kombinationen 3212, 3216, 3218, 3224 und 3234 entfernt werden. Da die mögliche Kombination 3220 keine mögliche Übereinstimmung mit den verbleibenden Kombinationen für die südöstlichen Module (zu möglichen Kombinationen 3232 oder 3236) aufweist, entfernt die Bildverarbeitungsvorrichtung die mögliche Kombination 3220 aus der Betrachtung. Nach einer solchen Verarbeitung besteht eine erste mögliche Übereinstimmung 3240 zwischen der möglichen Kombination 3214 und der möglichen Kombination 3232, eine zweite mögliche Übereinstimmung 3242 besteht zwischen der möglichen Kombination 3222 und der möglichen Kombination 3236 und eine dritte mögliche Übereinstimmung 3244 besteht zwischen der möglichen Kombination 3226 und der möglichen Kombination 3236.
  • In Schritt 2012 dekodiert die Bildverarbeitungsvorrichtung das Symbol auf der Grundlage der bestimmten Modulwerte, einschließlich der in den Schritten 2004-2010 bestimmten. Zu diesem Zeitpunkt ist es möglich, dass alle Module bestimmt wurden, aber es ist auch wahrscheinlich (z.B. in Bildern mit niedriger Auflösung), dass einige Modulwerte noch unbekannt sind. Zum Beispiel können die unbestimmten Module Pixeln in gleichmäßigen grauen Bereichen zugeordnet sein, beispielsweise dort, wo Pixel, die Module überspannen, zwischen schwarzen und weißen Werten hin- und herwechseln. Die Bildverarbeitungsvorrichtung kann das Symbol jedoch wahrscheinlich immer noch dekodieren, selbst wenn nicht alle Module vollständig sind. Beispielsweise werden die meisten 2D-Symbole mit einem gewissen Grad an Redundanz codiert, beispielsweise unter Verwendung einer Reed-Solomon-Fehlerkorrektur und/oder einer anderen Fehlerkorrektur. Als anderes Beispiel wird unbekannten Modulen häufig eine höhere Fehlerrate (z.B. die doppelte Fehlerrate) als falsch bestimmten Modulen zugestanden. Daher kann in Schritt 2012 die Bildverarbeitungsvorrichtung eine ausreichende Anzahl von dekodierten Modulen haben, um das Symbol zu dekodieren, selbst wenn dies nicht alle Module sind.
  • 26-31 werden als veranschaulichende Beispiele zum Anwenden der hier diskutierten Techniken zum Dekodieren eines Mehr-Breiten-1D-Strichcodes (z.B. des in 2 gezeigten 1D-Strichcodes) verwendet. 26 zeigt ein beispielhaftes 1D-Bild 2600 eines Mehr-Breiten-1D-Symbols, gemäß einigen Ausführungsformen. Das 1D-Bild 2600 kann auf ähnliche Weise wie oben beschrieben erfasst werden, indem entlang einer Scanlinie durch ein 2D-Bild abgetastet wird, das wie oben für das Bild 2100 in 21 beschrieben aufgenommen wurde. Wie das Bild 2100 umfasst das Bild 2600 einen Satz Pixel (z.B. Pixel 2602, 2604) mit zugeordneten Pixelwerten, die die Dunkelheit jedes Pixels anzeigen. Während die Pixel 2602, 2604 als Pixel bezeichnet werden (z.B. unter Verwendung eines Laserscanners extrahiert), kann in einigen Ausführungsformen jedes Pixel eine Abtastung sein, wie oben diskutiert. In solchen Ausführungsformen wird das Bild 2600 verarbeitet, um die Abtastungen zu berechnen. Wie auch hierin und weiter unten diskutiert, kann die Hüllkurve des Bildsignals verwendet werden, um 1D-Strichcodes zu dekodieren.
  • Das in 20 beschriebene Verfahren 2000 kann verwendet werden, um ein Mehr-Breiten-1D-Symbol zu dekodieren. 27 zeigt ein beispielhaftes Modulgitter 2700 für ein Mehr-Breiten-1D-Symbol, das über dem Bild 2600 aus 26 liegt, gemäß einigen Ausführungsformen. Mit Bezug auf Schritt 2004 bestimmt das System ähnlich wie bei einem 2D-Strichcode eine räumliche Zuordnung zwischen den Modulen in dem Modulgitter 2700 zu den Pixeln des Bildes 2600. Beispielsweise muss das Modulgitter 2700 möglicherweise verschoben und/oder skaliert werden, um zu den Pixeln des Bildes 2700 zugeordnet zu werden. Die Beziehung zwischen dem Modulgitter 2700 und dem Pixelgitter des Bildes 2600 kann widerspiegeln, wie jedes Modul jedes der Pixel beeinflusst. 28 ist eine beispielhafte Darstellung des Überlappungsgrades zwischen Modulen des Modulgitters 2700 und Pixeln des Bildes 2600, gemäß einigen Ausführungsformen. Ein dickerer durchgezogener Pfeil (z.B. Pfeile 2802, 2804 und 2806) zeigt einen großen Überlappungsgrad an, während ein dünnerer gepunkteter Pfeil (z.B. Pfeile 2808, 2810) einen geringen Überlappungsgrad anzeigt. Wie hierin diskutiert, bietet die obige Beschreibung eine Technik zum Lokalisieren eines 1D-Gitters (z.B. des eindimensionalen Pixelgitters 2700) relativ zu einem 1D-Signal von Abtastungen (z.B. ein eindimensionales Bild (oder eine einzelne Zeile) von Pixeln in einem Bild 2600).
  • Die Techniken können umfassen, zuerst das Modulgitter des Symbols in Bezug auf das Pixelgitter des Bildes zu lokalisieren. Wie oben diskutiert, kann ein beliebiges Modulmuster abgeleitet werden, ohne dass einzelne Charaktere separat untersucht werden müssen. Im Fall von 1D-Symbolen kann das Gitter beispielsweise unter Verwendung von beliebigen Modulmustern lokalisiert werden, wie den Begrenzungscharakteren (z.B. den Charakteren ganz links und ganz rechts des 1D-Symbols) und/oder bekannten Aspekten von Charakteren (z.B. End- und/oder Anfangsstriche oder Abstände von Charakteren). 29 zeigt ein Beispiel der Ableitung von Modulen des Modulgitters 2700 für beliebige Modulmuster, gemäß einigen Ausführungsformen. Die Module 2902 und 2906 werden als Abstände (weiße Module) und die Module 2904 und 2908 als Striche (schwarze Module) abgeleitet. Bei einem Code128-Symbol beginnt der Charakter beispielsweise mit einem Strich (z.B. Strich 2904) und endet mit einem Abstand (z.B. Abstand 2906), und der vorherige Charakter endet mit einem Abstand (z.B. Abstand 2902) und der nächste Charakter beginnt mit einem Strich (z.B. Strich 2908).
  • 30A und 30B zeigen Module des beispielhaften Modulgitters 2700, die basierend auf Beziehungen zwischen den Modulen und den Pixeln abgeleitet wurden, gemäß einigen Ausführungsformen. Unter Bezug auf Schritt 2006 in 20 kann die Bildverarbeitungsvorrichtung die zwischen den Modulen im Modulgitter und den Pixeln im Bild bestimmten Kausalzusammenhänge verwenden, um einen ersten Satz von Modulen abzuleiten (z.B. Module, die einen hohen Grad an Überlappung mit zugeordneten Pixeln aufweisen), ähnlich wie dieser Schritt für 2D-Strichcodes durchgeführt wird. Die Ableitungen in 30A umfassen zusätzliche abgeleitete weiße Module 3002, 3004 und 3006 (z.B. zusätzlich zu dem oder den beliebigen Modulmuster(n), die in Verbindung mit Schritt 2004 abgeleitet wurden), und 30B umfasst zusätzliche abgeleitete schwarze Module 3008 und 3010. Beispielsweise kann, wie in Verbindung mit 2D-Strichcodes diskutiert, die Bildverarbeitungsvorrichtung jedes Modul bestücken, das in einem sehr hohen Grad (z.B. 90%, 30% usw.) überlappt, beispielsweise Module, bei denen die Abtastkoeffizienten über einer Überlappungsschwelle liegen. 30A zeigt als Beispiel die Überlappung mit den Pfeilen 3050, 3052 und 3054 an. Wie oben erwähnt, können die Techniken Logik verwenden, um die Tatsache auszunutzen, dass es unwahrscheinlich ist, dass das Modul einen Wert aufweist und das Pixel, das es im Wesentlichen überlappt, einen Wert aufweist, der dem entgegengesetzten Extrem entspricht.
  • Daher können Module, die ein Vordergrund- (dunkelstes) Pixel bis zu einem bestimmten Grad überlappen, auf Schwarz gesetzt werden (z.B. Module 3008, 3010), und Module, die ein Hintergrund- (hellstes) Pixel bis zu einem bestimmten Grad überlappen, können auf Weiß gesetzt werden (z.B. Module 3002, 3004 und 3006). Wie oben diskutiert, kann, wenn auf ein Pixel als entweder „weiß“ oder „schwarz“ Bezug genommen wird, der Maßstab, ob ein Pixel schwarz oder weiß ist, bezogen auf die Signalhüllkurve des Bildes bestimmt werden (z.B. so, dass die Signalhüllkurve des Bildes verwendet werden kann, um den Bereich von weißen und schwarzen Pixeln zu normalisieren, um den Bereich eines bestimmten Pixels für die Signalhüllkurve zu bestimmen.
  • 31 zeigt zusätzliche Module in dem Modulgitter 2700, die basierend auf bekannten Modulen bestimmt wurden, gemäß einigen Ausführungsformen. Die Techniken können einen zweiten Satz von Modulen unter Verwendung des ersten Satzes von Modulen dekodieren, die im vorherigen Schritt dekodiert wurden. Unter Bezug auf die Schritte 2008 und 2010 in 20 kann, sobald keine weiteren Modulwerte abgeleitet werden können (z.B. wie oben in Verbindung mit den Schritten 2004 und 2006 diskutiert), die Bildverarbeitungsvorrichtung einen Satz gültiger Wertekombinationen testen, um weitere unbekannte Module zu bestimmen. In einigen Ausführungsformen wurde nun, da ein aktueller Satz von Pixeln bestimmt wurde, der Suchraum für die verbleibenden Module reduziert. Die Bildverarbeitungsvorrichtung kann den jetzt kleineren Satz verbleibender unbekannter Module bestimmen (z.B. iterativ). Wie in 31 gezeigt, werden die Module 3102, 3104, 3106 in diesem Schritt abgeleitet. In diesem Beispiel und wie weiter unten allgemein diskutiert, kann Logik verwendet werden, um die verbleibenden Module zu bestimmen. Beispielsweise wechseln sich die Module 3102, 3104 und 3106 in diesem Beispiel ab, um die einheitlichen Grauwerte der zugeordneten Pixel 3150 und 3152 zu erzeugen. Das Modul 3106 ist weiß (ein Abstand), um zusammen mit dem benachbarten schwarzen Modul 3008 den zugeordneten einheitlichen grauen Pixelwert 3154 zu erzeugen. Das Modul 3108 ist ein Abstand, um den zugehörigen hellgrauen Pixelwert 3156 zu erzeugen.
  • In einigen Ausführungsformen kann die Bildverarbeitungsvorrichtung für jedes Modul verbleibende gültige Kombinationen von Modulmustern (z.B. 1×2, 1×3 und/oder dergleichen) ausprobieren, die ein oder mehrere bestimmte Pixel umfassen. Beispielsweise kann die Bildverarbeitungsvorrichtung 1 x3-Modulmuster mit dem unbekannten Modul als Zentrum ausprobieren, bis keine weiteren Ableitungen mehr möglich sind. Am Beispiel eines 1×3-Musters hätte jedes Modul 23 = 8 Möglichkeiten. Zusätzlich kann die Anzahl der Möglichkeiten reduziert werden, da bekannte Module die Anzahl der Möglichkeiten reduzieren, wie oben für 2D-Strichcodes erörtert.
  • Wie oben erwähnt, kann das rekursive Testen aller Möglichkeiten auch dann sehr zeitaufwändig sein und/oder möglicherweise nicht gut funktionieren, wenn viele der Module in vorherigen Schritten bestimmt wurden. In einigen Ausführungsformen kann eine Abtastmatrix verwendet werden, um zusätzliche Module zu bestimmen. Beispielsweise kann für jedes Pixel, das von einem Modul überlappt wird, das noch nicht bestimmt wurde, eine 1x3-Abtastmatrix verwendet werden, um den Modulwert zu bestimmen. Das System kann die 1×3-Abtastmatrix mit einem unbekannten Vektor der 3 nächsten binären (0 oder 1) Modulwerte multiplizieren, um den Modulwert zu bestimmen. Wie oben erläutert, kann für jede mögliche Kombination von Binärwerten ein Fehler zwischen dem tatsächlichen Pixelwert und dem, der sich beim Multiplizieren durch die Abtastkoeffizienten ergibt, berechnet werden. Jede der Kombinationen, die zu einem Pixelwertfehler führen, der innerhalb einer akzeptablen Fehlerschwelle liegt, kann als mögliche Lösung angesehen werden, während diejenigen, die zu Fehlern über der Fehlerschwelle führen, von der Betrachtung ausgeschlossen werden. Wenn nur ein Muster unterhalb der Fehlerschwelle liegt, können die unbekannten Modulwerte der Kombination entsprechend festgesetzt werden. Ansonsten können mögliche Lösungen als Drei-Bit-Ganzzahlen aufgezeichnet werden.
  • Wie oben diskutiert, kann in einigen Ausführungsformen das System so konfiguriert sein, dass es bestimmte Pixel zuerst verarbeitet (z.B. um zu einer höheren Wahrscheinlichkeit zu gelangen, Modulwerte zu dekodieren). Beispielsweise kann das System so konfiguriert werden, dass zuerst Pixel verarbeitet werden, bei denen bereits eine große Anzahl überlappender Module bestimmt wurde. Beispielsweise kann das System so konfiguriert sein, dass es sich zuerst auf das Verarbeiten von Pixeln außerhalb des Symbols konzentriert (z.B. in der Nähe der Begrenzungscharakter und/oder Anfangs-/Endmodule von Charakteren, für die die Module wie oben erläutert bestimmt wurden). Unter Verwendung einer solchen Technik werden mit jeder Iteration die Werte für die Module näher und näher zum Inneren des Symbols und/oder nach innen zu ansonsten großen Bereichen unbekannter Module bestimmt.
  • Nachdem alle Pixel innerhalb des Bereichs des Gitters betrachtet und ihre Drei-Bit-Ganzzahlen aufgezeichnet wurden, können zusätzliche Module durch Eliminierungsverfahren bestimmt werden. Beispielsweise kann das System die Konsistenz der verbleibenden möglichen Kombinationen jedes Pixels mit den verbleibenden möglichen Kombinationen jedes der dem Modul zugeordneten Nachbarn untersuchen. Beispielsweise kann das System die Konsistenz der 2 Nachbarn für ein bestimmtes Modul untersuchen und dabei die Tatsache ausnutzen, dass sich die 1×3-Modulmuster für ein Pixel im Wesentlichen mit denen seiner 2 Nachbarn überlappen. Tatsächlich kann das System die Tatsache nutzen, dass jede mögliche Kombination für ein bestimmtes Pixel nur mit bestimmten Kombinationen für die benachbarten Pixel kompatibel ist, um die richtige Kombination zu bestimmen.
  • Wie oben im 2D-Kontext diskutiert, kann in einigen Ausführungsformen ein Vergleich eines Moduls mit seinen benachbarten Modulen verwendet werden, um einen ungerichteten Beschränkungsgraphen zu erzeugen. Die Drei-Bit-Ganzzahlen, die die gespeicherten Kombinationen von Binärwerten für die drei Module des 1x3-Modulmusters für jedes Modul darstellen, können die Knoten des Graphen ausfüllen und die Verknüpfungen zu jeder der konsistenten Drei-Bit-Ganzzahlen für Nachbarn können die Kanten im Graphen sein. Zwei Knoten gelten als konsistent, wenn der Überlappungsbereich zwischen ihren jeweiligen 1x3-Modulmustern im Modulgitter dieselbe Kombination von Binärwerten aufweist. Das Bestimmen der verbleibenden Module kann daher das Bestimmen eines konsistenten und eindeutigen Satzes von Kanten zwischen jedem Pixel und seinen zwei benachbarten Pixeln umfassen, so dass nur ein einzelner Knoten an jedem Pixel verbunden ist, wobei die anderen Knoten und ihre Kanten entfernt wurden. Das System kann den ausgewählten Knoten für ein Pixel verwenden, um die richtige Kombination überlappender Modulwerte zu bestimmen. Das System ist möglicherweise in der Lage, bestimmte Knoten im Graphen sowie die zugehörigen Kanten zu entfernen, wie oben erläutert.
  • Techniken, die gemäß den hier beschriebenen Prinzipien arbeiten, können auf jede geeignete Weise implementiert werden. Die Verarbeitungs- und Entscheidungsblöcke der obigen Flussdiagramme stellen Schritte und Handlungen dar, die in Algorithmen enthalten sein können, die diese verschiedenen Prozesse ausführen. Aus diesen Prozessen abgeleitete Algorithmen können als Software implementiert werden, die in einen oder mehrere Einzel- oder Mehrzweckprozessoren integriert ist und deren Betrieb steuert, können als funktional äquivalente Schaltungen wie eine digitale Signalverarbeitungsschaltung (DSP) oder eine anwendungsspezifische integrierte Schaltung (ASIC) implementiert werden oder können auf irgendeine andere geeignete Weise implementiert werden. Es versteht sich, dass die hierin enthaltenen Flussdiagramme nicht die Syntax oder den Betrieb einer bestimmten Schaltung oder eine bestimmte Programmiersprache oder einen bestimmten Typ von Programmiersprache darstellen. Vielmehr veranschaulichen die Flussdiagramme die funktionale Information, die jemand technisch Bewandertes verwenden kann, um Schaltungen herzustellen oder Computersoftwarealgorithmen zu implementieren, um die Verarbeitung einer bestimmten Vorrichtung durchzuführen, die die hier beschriebenen Arten von Techniken ausführt. Es versteht sich auch, dass, sofern hierin nicht anders angegeben, die bestimmte Abfolge von Schritten und/oder Handlungen, die in irgendeinem Flussdiagramm beschrieben ist, lediglich die Algorithmen veranschaulicht, die implementiert werden können, und in Implementierungen und Ausführungsformen der hierin beschriebenen Prinzipien variiert werden kann.
  • Dementsprechend können in einigen Ausführungsformen die hierin beschriebenen Techniken in computerausführbaren Anweisungen verkörpert sein, die als Software implementiert sind, einschließlich als Anwendungssoftware, Systemsoftware, Firmware, Middleware, eingebettetem Code oder einem anderen geeigneten Typ von Computercode. Solche computerausführbaren Anweisungen können unter Verwendung einer Reihe geeigneter Programmiersprachen und/oder Programmier- oder Skript-Tools geschrieben werden und können auch als ausführbarer Maschinensprachencode oder Zwischencode kompiliert werden, der auf einem Framework oder einer virtuellen Maschine ausgeführt wird.
  • Wenn hierin beschriebene Techniken als computerausführbare Anweisungen ausgeführt werden, können diese computerausführbaren Anweisungen auf jede geeignete Weise implementiert werden, einschließlich als Anzahl von funktionellen Einrichtungen, die jeweils eine oder mehrere Operationen bereitstellen, um die Ausführung von Algorithmen abzuschließen, die gemäß diesen Techniken arbeiten. Eine „funktionelle Einrichtung“, wie auch immer sie instanziiert sein mag, ist eine strukturelle Komponente eines Computersystems, die, wenn sie in einen oder mehrere Computer integriert ist und von diesen ausgeführt wird, bewirkt, dass der eine oder die mehreren Computer eine bestimmte operative Rolle ausüben. Eine funktionelle Einrichtung kann ein Teil eines oder ein gesamtes Softwareelement sein. Beispielsweise kann eine funktionelle Einrichtung als Funktion eines Prozesses oder als ein diskreter Prozess oder als irgendeine andere geeignete Verarbeitungseinheit implementiert werden. Wenn hier beschriebene Techniken als mehrfache funktionelle Einrichtungen implementiert werden, kann jede funktionelle Einrichtung auf ihre eigene Weise implementiert werden; es müssen nicht alle auf die gleiche Weise implementiert werden. Zusätzlich können diese funktionellen Einrichtungen je nach Bedarf parallel und/oder seriell ausgeführt werden und Informationen unter Verwendung eines gemeinsam genutzten Speichers auf den Computer(n), auf denen sie ausgeführt werden, unter Verwendung eines Nachrichtenweitergabeprotokolls oder auf irgendeine andere geeignete Weise untereinander weitergeben.
  • Im Allgemeinen umfassen funktionelle Einrichtungen Routinen, Programme, Objekte, Komponenten, Datenstrukturen usw., die bestimmte Aufgaben ausführen oder bestimmte abstrakte Datentypen implementieren. Typischerweise kann die Funktionalität der funktionellen Einrichtungen in den Systemen, in denen sie arbeiten, wie gewünscht kombiniert oder verteilt werden. In einigen Implementierungen können eine oder mehrere funktionelle Einrichtungen, die Techniken hierin ausführen, zusammen ein vollständiges Softwarepaket bilden. Diese funktionellen Einrichtungen können in alternativen Ausführungsformen angepasst sein, um mit anderen, nicht verwandten funktionellen Einrichtungen und/oder Prozessen zu interagieren, um eine Softwareprogrammanwendung zu implementieren.
  • Einige beispielhafte funktionelle Einrichtungen wurden hierin zum Ausführen einer oder mehrerer Aufgaben beschrieben. Es versteht sich jedoch, dass die beschriebenen funktionellen Einrichtungen und die Aufteilung der Aufgaben lediglich veranschaulichend für die Art der funktionellen Einrichtungen sind, die die hierin beschriebenen beispielhaften Techniken implementieren können, und dass Ausführungsformen nicht darauf beschränkt sind, in einer bestimmten Anzahl, Aufteilung oder Art der funktionellen Einrichtungen implementiert zu werden. In einigen Implementierungen kann die gesamte Funktionalität in einer einzigen funktionellen Einrichtung implementiert werden. Es versteht sich auch, dass in einigen Implementierungen einige der hier beschriebenen funktionellen Einrichtungen zusammen mit oder getrennt von anderen implementiert werden können (d.h. als einzelne Einheit oder separate Einheiten) oder dass einige dieser funktionellen Einrichtungen nicht implementiert werden können.
  • Computerausführbare Anweisungen, die die hier beschriebenen Techniken implementieren (wenn sie als eine oder mehrere funktionelle Einrichtungen oder auf irgendeine andere Weise implementiert werden), können in einigen Ausführungsformen auf einem oder mehreren computerlesbaren Medien codiert sein, um die Medien mit Funktionalität auszustatten. Computerlesbare Medien umfassen magnetische Medien wie ein Festplattenlaufwerk, optische Medien wie eine Compact Disk (CD) oder eine Digital Versatile Disk (DVD), einen dauerhaften oder nicht dauerhaften Festkörperspeicher (z.B. Flash-Speicher, Magnetic RAM usw.) oder ein anderes geeignetes Speichermedium. Ein solches computerlesbares Medium kann auf jede geeignete Weise implementiert werden. Wie hierin verwendet, bezieht sich „computerlesbare Medien“ (auch als „computerlesbare Speichermedien“ bezeichnet) auf materielle Speichermedien. Materielle Speichermedien sind nichtflüchtig und weisen mindestens eine physikalische, strukturelle Komponente auf. In einem „computerlesbaren Medium“, wie es hier verwendet wird, weist mindestens eine physikalische Strukturkomponente mindestens eine physikalische Eigenschaft auf, die auf bestimmte Weise während eines Prozesses des Erzeugens des Mediums mit eingebetteter Information, eines Prozesses des Aufzeichnens von Information darauf oder irgendeines anderen Vorgangs zum Codieren des Mediums mit Informationen geändert werden kann. Beispielsweise kann ein Magnetisierungszustand eines Teils einer physikalischen Struktur eines computerlesbaren Mediums während eines Aufzeichnungsprozesses geändert werden.
  • Außerdem umfassen einige der oben beschriebenen Techniken Vorgänge zum Speichern von Informationen (z.B. Daten und/oder Anweisungen) auf bestimmte Arten zur Verwendung durch diese Techniken. In einigen Implementierungen dieser Techniken - wie Implementierungen, in denen die Techniken als computerausführbare Anweisungen implementiert sind - können die Informationen auf einem computerlesbaren Speichermedium codiert sein. Wo hierin spezifische Strukturen als vorteilhafte Formate zum Speichern dieser Informationen beschrieben werden, können diese Strukturen verwendet werden, um eine physikalische Organisation der Informationen zu vermitteln, wenn sie auf dem Speichermedium codiert sind. Diese vorteilhaften Strukturen können dann dem Speichermedium Funktionalität verleihen, indem sie Operationen eines oder mehrerer Prozessoren beeinflussen, die mit den Informationen interagieren; zum Beispiel durch Erhöhen der Effizienz von Computeroperationen, die von dem oder den Prozessoren ausgeführt werden.
  • In einigen, aber nicht allen Implementierungen, in denen die Techniken als computerausführbare Anweisungen ausgeführt werden können, können diese Anweisungen auf einem oder mehreren geeigneten Computergeräten ausgeführt werden, die in irgendeinem geeigneten Computersystem arbeiten, oder ein oder mehrere Computergeräte (oder ein oder mehrere Prozessoren von einem oder mehreren Computergeräten) können programmiert sein, um die computerausführbaren Anweisungen auszuführen. Ein Computergerät oder Prozessor kann so programmiert sein, dass es/er Anweisungen ausführt, wenn die Anweisungen auf eine Weise gespeichert sind, auf die das Computergerät oder der Prozessor zugreifen kann, beispielsweise in einem Datenspeicher (z.B. einem On-Chip-Cache oder Befehlsregister, einem computerlesbaren Speichermedium, auf das über einen Bus zugegriffen werden kann, einem computerlesbaren Speichermedium, auf das über ein oder mehrere Netzwerke zugegriffen werden kann und auf das das Gerät/der Prozessor zugreifen kann, usw.). Funktionelle Einrichtungen, die diese computerausführbaren Anweisungen umfassen, können integriert sein in und den Betrieb steuern von: einem einzelnen programmierbaren Mehrzweck-Digitalcomputergerät, einem koordinierten System aus zwei oder mehr Mehrzweck-Computergeräten, die die Verarbeitungsleistung gemeinsam nutzen und die hierin beschriebenen Techniken gemeinsam ausführen, einem einzelnen Computergerät oder einem koordinierten System von Computergerät (am selben Ort oder geografisch verteilt), das für die Ausführung der hier beschriebenen Techniken vorgesehen ist, einem oder mehreren Field-Programmable Gate Arrays (FPGAs) zum Ausführen der hier beschriebenen Techniken oder irgendeinem anderen geeigneten System.
  • Ein Computergerät kann mindestens einen Prozessor, einen Netzwerkadapter und computerlesbare Speichermedien umfassen. Ein Computergerät kann beispielsweise ein Desktop- oder Laptop-Personalcomputer, ein Personal Digital Assistant (PDA), ein Smartphone, ein Server oder ein anderes geeignetes Computergerät sein. Ein Netzwerkadapter kann eine beliebige geeignete Hardware und/oder Software sein, die es dem Computergerät ermöglicht, drahtgebunden und/oder drahtlos mit einem beliebigen anderen geeigneten Computergerät über ein beliebiges geeignetes Computernetzwerk zu kommunizieren. Das Computernetzwerk kann drahtlose Zugangspunkte, Switches, Router, Gateways und/oder andere Netzwerkgeräte sowie jedes beliebige geeignete drahtgebundene und/oder drahtlose Kommunikationsmedium oder Medien zum Datenaustausch zwischen zwei oder mehr Computern umfassen, einschließlich des Internets. Computerlesbare Medien können angepasst sein, um zu verarbeitende Daten und/oder vom Prozessor auszuführende Anweisungen zu speichern. Der Prozessor ermöglicht die Verarbeitung von Daten und die Ausführung von Anweisungen. Die Daten und Anweisungen können auf dem computerlesbaren Speichermedium gespeichert sein.
  • Ein Computergerät kann zusätzlich eine oder mehrere Komponenten und Peripheriegeräte aufweisen, einschließlich Eingabe- und Ausgabegeräte. Diese Geräte können unter anderem genutzt werden, um eine Benutzeroberfläche darzustellen. Beispiele für Ausgabegeräte, die zur Bereitstellung einer Benutzeroberfläche verwendet werden können, umfassen Drucker oder Anzeigebildschirme zur visuellen Darstellung der Ausgabe und Lautsprecher oder andere Tonerzeugungsgeräte zur akustischen Darstellung der Ausgabe. Beispiele für Eingabegeräte, die für eine Benutzeroberfläche verwendet werden können, umfassen Tastaturen und Zeigegeräte wie Mäuse, Touchpads und Digitalisiertabletts. Als anderes Beispiel kann ein Computergerät Eingabeinformationen durch Spracherkennung oder in einem anderen hörbaren Format empfangen.
  • Es wurden Ausführungsformen beschrieben, bei denen die Techniken in Schaltkreisen und/oder computerausführbaren Anweisungen implementiert sind. Es versteht sich, dass einige Ausführungsformen in Form eines Verfahrens vorliegen können, für das mindestens ein Beispiel geliefert wurde. Die im Rahmen des Verfahrens durchgeführten Handlungen können auf jede geeignete Weise angeordnet werden. Dementsprechend können Ausführungsformen konstruiert werden, in denen Handlungen in einer anderen als der dargestellten Reihenfolge ausgeführt werden, was das gleichzeitige Ausführen einiger Handlungen umfassen kann, obwohl sie in veranschaulichenden Ausführungsformen als sequentielle Handlungen dargestellt sind.
  • Verschiedene Aspekte der vorstehend beschriebenen Ausführungsformen können allein, in Kombination oder in einer Vielzahl von Anordnungen verwendet werden, die in den vorstehend beschriebenen Ausführungsformen nicht speziell erörtert wurden, und sind daher in ihrer Anwendung nicht auf die Einzelheiten und die Anordnung von Komponenten beschränkt, die in der vorstehenden Beschreibung beschrieben sind oder in den Zeichnungen dargestellt sind. Beispielsweise können Aspekte, die in einer Ausführungsform beschrieben sind, auf irgendeine Weise mit Aspekten kombiniert werden, die in anderen Ausführungsformen beschrieben sind.
  • Die Verwendung von ordinalen Begriffen wie „erster“, „zweiter“, „dritter“ usw. in den Ansprüchen zur Änderung eines Anspruchselements bedeutet für sich genommen keine Priorität, Rangfolge oder Reihenfolge eines Anspruchselements gegenüber einem anderen oder zeitliche Reihenfolge, in der Handlungen eines Verfahrens ausgeführt werden, sondern werden lediglich als Bezeichnungen verwendet, um ein Anspruchselement mit einem bestimmten Namen von einem anderen Element mit demselben Namen zu unterscheiden (statt als Verwendung als ordinaler Begriff), um die Anspruchselemente zu unterscheiden.
  • Auch die hier verwendete Ausdrucksweise und Terminologie dient dem Zweck der Beschreibung und sollte nicht als einschränkend angesehen werden. Die Verwendung von „einschließlich“, „umfassend“, „mit“, „enthaltend“, „involvierend“ und Variationen davon soll die nachfolgend aufgelisteten Gegenstände und Äquivalente davon sowie zusätzliche Gegenstände umfassen.
  • Das Wort „beispielhaft“ wird hier verwendet, um als Beispiel, Instanz oder Illustration zu dienen. Jede hierin als beispielhaft beschriebene Ausführungsform, Implementierung, Prozess, Merkmal usw. sollte daher als veranschaulichendes Beispiel verstanden werden und sollte nicht als bevorzugtes oder vorteilhaftes Beispiel verstanden werden, sofern nicht anders angegeben.
  • Nachdem so mehrere Aspekte von mindestens einer Ausführungsform beschrieben wurden, versteht es sich, dass jemandem technisch Bewanderten verschiedene Änderungen, Modifikationen und Verbesserungen leicht einfallen werden. Solche Änderungen, Modifikationen und Verbesserungen sollen Teil dieser Offenbarung sein und sollen innerhalb des Geistes und Umfangs der hierin beschriebenen Prinzipien liegen. Dementsprechend sind die vorstehende Beschreibung und die Zeichnungen nur beispielhaft.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 10032058 [0001]
    • US 14510710 [0001]
    • US 9607200 [0001]
    • US 13336275 [0044, 0046]

Claims (20)

  1. Ein computergestütztes Verfahren zum Dekodieren eines Symbols in einem digitalen Bild, das Verfahren umfassend: Empfangen eines digitalen Bildes eines Teils eines Symbols, wobei das digitale Bild ein Pixelgitter umfasst und das Symbol ein Modulgitter umfasst; Bestimmen einer räumlichen Zuordnung zwischen einer zusammenhängenden Teilmenge von Modulen im Modulgitter zum Pixelgitter; Bestimmen, unter Verwendung der räumlichen Zuordnung, von Kausalzusammenhängen zwischen jedem Modul in der zusammenhängenden Teilmenge von Modulen und dem Pixelgitter, wobei jeder Kausalzusammenhang den Einflussgrad darstellt, den der Wert eines Moduls auf jeden der Werte einer Teilmenge von Pixeln im Pixelgitter hat; Testen eines Satzes von gültigen Wertekombinationen von zwei oder mehr benachbarten Modulen in der zusammenhängenden Teilmenge von Modulen gegen das Pixelgitter unter Verwendung der Kausalzusammenhänge; Bestimmen eines Wertes von mindestens einem Modul der zwei oder mehr benachbarten Module, basierend auf dem getesteten Satz von gültigen Kombinationen; und Dekodieren des Symbols, basierend auf dem bestimmten Wert des mindestens einen Moduls.
  2. Das Verfahren von Anspruch 1, wobei die zwei oder mehr benachbarten Module in der zusammenhängenden Teilmenge von Modulen im Modulgitter ein Drei-mal-Drei-Teilgitter des Modulgitters umfassen.
  3. Das Verfahren von Anspruch 2, wobei mindestens ein Modul der zwei oder mehr Module ein zentrales Modul des Drei-mal-Drei-Teilgitters ist.
  4. Das Verfahren von Anspruch 1, wobei die zusammenhängende Teilmenge von Modulen mindestens ein vorher bestimmtes Modul mit einem bekannten Wert umfasst und wobei der Satz von gültigen Wertekombinationen der zwei oder mehr benachbarten Module nur diejenigen Kombinationen mit dem bekannten Wert für das mindestens eine vorher bestimmte Modul umfasst.
  5. Das Verfahren von Anspruch 4, wobei das vorher bestimmte Modul ein Modul innerhalb eines Finder- oder Zeitmusters des Symbols ist.
  6. Das Verfahren von Anspruch 4, wobei der bekannte Wert für das vorher bestimmte Modul basierend nur auf dem Wert eines einzelnen Pixels im Pixelgitter abgeleitet ist, aufgrund dessen, dass das einzelne Pixel einen dominanten Kausalzusammenhang mit dem vorher bestimmten Modul hat, verglichen mit den Kausalzusammenhängen zwischen den anderen Pixeln in der Teilmenge von Pixeln und dem vorher bestimmten Modul.
  7. Das Verfahren von Anspruch 4, wobei vorher bestimmte Module jedes Modul mit einem zuvor bestimmten Wert umfassen.
  8. Das Verfahren von Anspruch 1, wobei das Bestimmen der Kausalzusammenhänge das Identifizieren, unter Verwendung der räumlichen Beziehung, eines Grades umfasst, zu dem jedes Modul in der zusammenhängenden Teilmenge von Modulen mit jedem Pixel im Pixelgitter überlappt, um einen Satz von Überlappungsgraden zu erzeugen.
  9. Das Verfahren von Anspruch 8, wobei der Grad, zu dem jedes Modul in der zusammenhängenden Teilmenge von Modulen mit jedem Pixel im Pixelgitter überlappt, durch einen Satz von Abtastkoeffizienten dargestellt wird, und als Teil einer Abtastmatrix.
  10. Das Verfahren von Anspruch 1, wobei das Pixelgitter und das Modulgitter beide zweidimensional sind.
  11. Das Verfahren von Anspruch 1, wobei das Pixelgitter ein eindimensionales Gitter von Abtastungen von einem eindimensionalen Scan durch ein zweidimensionales Bild ist und das Modulgitter ein eindimensionales Modulgitter ist.
  12. Das Verfahren von Anspruch 1, wobei das Symbol ausgewählt ist aus der Gruppe bestehend aus einem eindimensionalen (1D) Strichcode und einem zweidimensionalen (2D) Strichcode.
  13. Eine Vorrichtung zum Dekodieren eines Symbols in einem digitalen Bild, wobei die Vorrichtung einen Prozessor in Verbindung mit einem Speicher umfasst, wobei der Prozessor konfiguriert ist, um Anweisungen auszuführen, die im Speicher gespeichert sind und die den Prozessor zum Folgenden veranlassen: Empfangen eines digitalen Bildes eines Teils eines Symbols, wobei das digitale Bild ein Pixelgitter umfasst und das Symbol ein Modulgitter umfasst; Bestimmen einer räumlichen Zuordnung zwischen einer zusammenhängenden Teilmenge von Modulen im Modulgitter zum Pixelgitter; Bestimmen, unter Verwendung der räumlichen Zuordnung, von Kausalzusammenhängen zwischen jedem Modul in der zusammenhängenden Teilmenge von Modulen und dem Pixelgitter, wobei jeder Kausalzusammenhang den Einflussgrad darstellt, den der Wert eines Moduls auf jeden der Werte einer Teilmenge von Pixeln im Pixelgitter hat; Testen eines Satzes von gültigen Wertekombinationen von zwei oder mehr benachbarten Modulen in der zusammenhängenden Teilmenge von Modulen gegen das Pixelgitter unter Verwendung der Kausalzusammenhänge; Bestimmen eines Wertes von mindestens einem Modul der zwei oder mehr benachbarten Module, basierend auf dem getesteten Satz von gültigen Kombinationen; und Dekodieren des Symbols, basierend auf dem bestimmten Wert des mindestens einen Moduls.
  14. Die Vorrichtung von Anspruch 13, wobei die zwei oder mehr benachbarten Module in der zusammenhängenden Teilmenge von Modulen im Modulgitter ein Drei-mal-Drei-Teilgitter des Modulgitters umfassen.
  15. Die Vorrichtung von Anspruch 13, wobei die zusammenhängende Teilmenge von Modulen mindestens ein vorher bestimmtes Modul mit einem bekannten Wert umfasst und wobei der Satz von gültigen Wertekombinationen der zwei oder mehr benachbarten Module nur diejenigen Kombinationen mit dem bekannten Wert für das mindestens eine vorher bestimmte Modul umfasst.
  16. Die Vorrichtung von Anspruch 13, wobei das Bestimmen der Kausalzusammenhänge das Identifizieren, unter Verwendung der räumlichen Beziehung, eines Grades umfasst, zu dem jedes Modul in der zusammenhängenden Teilmenge von Modulen mit jedem Pixel im Pixelgitter überlappt, um einen Satz von Überlappungsgraden zu erzeugen.
  17. Die Vorrichtung von Anspruch 13, wobei das Pixelgitter und das Modulgitter beide zweidimensional sind.
  18. Die Vorrichtung von Anspruch 13, wobei das Pixelgitter ein eindimensionales Gitter von Abtastungen von einem eindimensionalen Scan durch ein zweidimensionales Bild ist und das Modulgitter ein eindimensionales Modulgitter ist.
  19. Die Vorrichtung von Anspruch 13, wobei das Symbol ausgewählt ist aus der Gruppe bestehend aus einem eindimensionalen (1D) Strichcode und einem zweidimensionalen (2D) Strichcode.
  20. Mindestens ein nichtflüchtiges computerlesbares Speichermedium, das Prozessorausführbare Anweisungen speichert, die, wenn sie von mindestens einem Computerhardware-Prozessor ausgeführt werden, den mindestens einen Computerhardware-Prozessor veranlassen, die folgenden Handlungen durchzuführen: Empfangen eines digitalen Bildes eines Teils eines Symbols, wobei das digitale Bild ein Pixelgitter umfasst und das Symbol ein Modulgitter umfasst; Bestimmen einer räumlichen Zuordnung zwischen einer zusammenhängenden Teilmenge von Modulen im Modulgitter zum Pixelgitter; Bestimmen, unter Verwendung der räumlichen Zuordnung, von Kausalzusammenhängen zwischen jedem Modul in der zusammenhängenden Teilmenge von Modulen und dem Pixelgitter, wobei jeder Kausalzusammenhang den Einflussgrad darstellt, den der Wert eines Moduls auf jeden der Werte einer Teilmenge von Pixeln im Pixelgitter hat; Testen eines Satzes von gültigen Wertekombinationen von zwei oder mehr benachbarten Modulen in der zusammenhängenden Teilmenge von Modulen gegen das Pixelgitter unter Verwendung der Kausalzusammenhänge; Bestimmen eines Wertes von mindestens einem Modul der zwei oder mehr benachbarten Module, basierend auf dem getesteten Satz von gültigen Kombinationen; und Dekodieren des Symbols, basierend auf dem bestimmten Wert des mindestens einen Moduls.
DE102019217980.0A 2018-11-21 2019-11-21 Verfahren und vorrichtung zum dekodieren von unter-aufgelösten symbolen Pending DE102019217980A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/198,203 US10599902B2 (en) 2014-10-09 2018-11-21 Methods and apparatus for decoding under-resolved symbols
US16/198,203 2018-11-21

Publications (1)

Publication Number Publication Date
DE102019217980A1 true DE102019217980A1 (de) 2020-05-28

Family

ID=70546020

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019217980.0A Pending DE102019217980A1 (de) 2018-11-21 2019-11-21 Verfahren und vorrichtung zum dekodieren von unter-aufgelösten symbolen

Country Status (2)

Country Link
JP (2) JP7427427B2 (de)
DE (1) DE102019217980A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4390758A1 (de) * 2022-12-21 2024-06-26 Leuze electronic GmbH + Co. KG Optischer sensor

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9607200B2 (en) 2014-10-09 2017-03-28 Cognex Corporation Decoding barcodes

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0921492B1 (de) 1997-12-05 2001-07-25 DATALOGIC S.p.A. Verfahren zur Kompensation der Flankenposition durch Abtastung eines Strichcodes generierten Signals
US6938824B2 (en) 2001-09-26 2005-09-06 Symbol Technologies, Inc. Decoding algorithm for laser scanning bar code readers
US7237721B2 (en) 2005-05-24 2007-07-03 Nokia Corporation Image processing for pattern detection

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9607200B2 (en) 2014-10-09 2017-03-28 Cognex Corporation Decoding barcodes
US10032058B2 (en) 2014-10-09 2018-07-24 Cognex Corporation Decoding barcodes

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4390758A1 (de) * 2022-12-21 2024-06-26 Leuze electronic GmbH + Co. KG Optischer sensor

Also Published As

Publication number Publication date
JP7427427B2 (ja) 2024-02-05
JP2023024994A (ja) 2023-02-21
JP2020107325A (ja) 2020-07-09

Similar Documents

Publication Publication Date Title
DE102015219541A1 (de) Dekodieren von strichcodes
DE69332771T2 (de) Verfahren und Vorrichtung zum Dekodieren von strichkodierten Symbolen
US11151346B2 (en) Methods and apparatus for decoding under-resolved symbols
DE69930536T2 (de) Schräglage-verarbeitung für raster-abtast-bilder
DE102009059264B4 (de) Verfahren zum schnellen Lokalisieren eines entschlüsselbaren Musters
EP2417561B1 (de) Zweidimensionaler symbolcode und verfahren zum lesen des symbolcodes
DE69835358T2 (de) Verfahren zur Korrektur der Verzerrung beim Abtasten eines optischen Codes
DE68925059T2 (de) Verfahren und Gerät zur polygonalen Datendekodierung
EP1469420B1 (de) Verfahren, System und Programm zur Rekonstruktion eines Bar Codes
JPH07200712A (ja) バーコード読み取りの方法および装置
EP2555160B1 (de) Erzeugung eines in interessante und uninteressante Bereiche vorsegmentierten Bildes
US20160086071A1 (en) High capacity 2d color barcode and method for decoding the same
US20160379031A1 (en) High capacity 2d color barcode design and processing method for camera based applications
CN109214229B (zh) 一种条码扫描方法、装置及电子设备
DE60300476T2 (de) System zum Erkennen eines Barcodes
CH708993B1 (de) Verfahren und Vorrichtung zum Identifizieren eines zweidimensionalen Punktcodes.
CN111783495A (zh) 一种条形码识别方法、装置、电子设备及存储介质
DE112018005068T5 (de) Verfahren und system zum lesen von barcodes, die auf mehreren bildern aufgenommen sind
CN111311497A (zh) 一种条形码图像角度校正方法和装置
DE102019217980A1 (de) Verfahren und vorrichtung zum dekodieren von unter-aufgelösten symbolen
EP2677492A1 (de) Codeleser und Verfahren zur Online-Verifikation eines Codes
CN110543798B (zh) 二维码的识别方法及装置
CN112907495B (zh) 高光谱图像的空间分辨率增强方法、装置及电子设备
CN116245848B (zh) 一种产品缺陷检测方法及相关设备
EP4287066B1 (de) Bestimmen der modulgrösse eines optischen codes

Legal Events

Date Code Title Description
R012 Request for examination validly filed