DE69433492T2 - Verfahren und Vorrichtung zum Dekodieren von Streifencodes durch unabhängige Analyse von Streifen und Zwischenräumen - Google Patents

Verfahren und Vorrichtung zum Dekodieren von Streifencodes durch unabhängige Analyse von Streifen und Zwischenräumen Download PDF

Info

Publication number
DE69433492T2
DE69433492T2 DE69433492T DE69433492T DE69433492T2 DE 69433492 T2 DE69433492 T2 DE 69433492T2 DE 69433492 T DE69433492 T DE 69433492T DE 69433492 T DE69433492 T DE 69433492T DE 69433492 T2 DE69433492 T2 DE 69433492T2
Authority
DE
Germany
Prior art keywords
signal
gradient
pixel
whitening
gradient signal
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.)
Expired - Lifetime
Application number
DE69433492T
Other languages
English (en)
Other versions
DE69433492D1 (de
Inventor
Christopher E. Smith
Mihael Klancnik
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.)
United Parcel Service of America Inc
United Parcel Service Inc
Original Assignee
United Parcel Service of America Inc
United Parcel Service Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by United Parcel Service of America Inc, United Parcel Service Inc filed Critical United Parcel Service of America Inc
Application granted granted Critical
Publication of DE69433492D1 publication Critical patent/DE69433492D1/de
Publication of DE69433492T2 publication Critical patent/DE69433492T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

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/1439Methods for optical code recognition including a method step for retrieval of the optical code
    • G06K7/1443Methods for optical code recognition including a method step for retrieval of the optical code locating of the code in an image
    • 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/10544Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation by scanning of the records by radiation in the optical part of the electromagnetic spectrum
    • G06K7/10821Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation by scanning of the records by radiation in the optical part of the electromagnetic spectrum further details of bar or optical code scanning devices
    • G06K7/10851Circuits for pulse shaping, amplifying, eliminating noise signals, checking the function of the sensing device
    • 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
    • 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
    • G06K7/1465Methods for optical code recognition the method including quality enhancement steps using several successive scans of the optical code
    • 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
    • G06K7/1486Setting the threshold-width for bar codes to be decoded

Description

  • Die Erfindung bezieht sich auf die Bildverarbeitung und insbesondere auf ein Verfahren und eine Vorrichtung zur Verarbeitung von Abtastlinien eines Pixelbildes eines Balkencodesymbols, um die Abtastlinien zu transformieren und das Symbol zu dekodieren.
  • Einschlägiger Stand der Technik
  • Das Lesen von Balkencodesymbolen mit eindimensionalen Laserabtastsystemen ist allgemein bekannt. Weniger bekannt sind Bildverarbeitungssysteme zur Lokalisierung und Dekodierung von Balkencodesymbolen in zweidimensionalen Pixelbildern. Die Dekodierung von Balkencodesymbolen erfordert eine genaue Messung der Abstände von Kante zu Kante, wobei eine Kante einen Übergang von einem Balken zu einem Zwischenraum oder von einem Zwischenraum zu einem Balken innerhalb eines Balkencodesymbols entspricht.
  • Besonders schwierig ist das Lesen von sehr dichten Balkencodesymbolen in Bildern von Faksimilequalität, d. h. von Balkencodesymbolbildern, die durch Faksimilegeräte oder dergleichen erzeugt worden sind. Ein Balkencodeleser, der Balkencodesymbole in einem von einem Faksimilegerät erzeugten Bild lokalisieren und dekodieren kann, sollte in der Lage sein, auch Balkencodesymbole in einem Bild lesen zu können, die von einer anderen Bildquelle erzeugt worden sind, etwa von einem Scanner oder einer Kamera.
  • In der europäischen Patentveröffentlichung Nr. 0449645 A1 ist die Gewinnung von Abtastliniendaten eines Balkencodesymbols und die Speicherung der Abtastliniendaten in einem Bildspeicher beschrieben. Die Abtastliniendaten werden verschoben, indem sowohl eine tatsächliche Verschiebung von Abtastliniendaten im Bildspeicher erfolgt als auch eine virtuelle Verschiebung der Abtastliniendaten unter Verwendung eines Offset-Vektors, der zum Platz sequentieller aus dem Speicher entnommener Werte hinzuzufügen ist. Aus entsprechenden Abtastpunkten von den verschobenen Linien der Abtastliniendaten wird ein Mittelwert gebildet.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die Erfindung besteht in einem Verfahren zur Verarbeitung eines Pixelbildes eines Balkencodesymbols zur Dekodierung eines Zeichens, wie es im Anspruch 1 definiert ist. Die Erfindung bezieht sich ferner auf eine Vorrichtung gemäß Anspruch 15.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 zeigt ein Blockschaltbild eines Balkencodesymbol-Lesesystems;
  • 2 zeigt ein Flussdiagramm der Verarbeitung, welche von dem Symbollokalisierer des Systems nach 1 ausgeführt wird, um Balkencodesymbole in einem Pixelbild zu lokalisieren;
  • 3 zeigt ein Flussdiagramm der Verarbeitung, welche von dem Symbollokalisierer nach 2 durchgeführt wird, um Kandidaten-Balkencodesymbole in Binärbildern zu lokalisieren;
  • 4 zeigt ein Bild eines Balkencodesymbols, welches von dem Symbollokalisierer nach 2 lokalisiert wird;
  • 5 zeigt das Bild eines Balkencodesymbols, in welchem der Schlussbalken in zwei Segmente unterbrochen ist;
  • 6 zeigt ein Flussdiagramm eines langsamen Verfahrens, welches von einem Signalgemischgenerator des Systems nach 1 ausgeführt wird, um ein Signalgemisch eines Balkencodesymbols zu erzeugen;
  • 7 zeigt ein Bild eines Balkencodesymbols, welches ein Abtastrechteck darstellt, über welchem das Symbol durch die Generatoren für das Signalgemisch und das Gradientensignal des Systems nach 1 analysiert wird;
  • 8 ist ein Bild eines Teils des Balkencodesymbols nach 7, welches einige der Abtastlinien zeigt, die von dem Signalgemischgenerator des Systems nach 1 bei der Ausführung des langsamen Verfahrens nach 6 benutzt werden;
  • 9 ist ein Flussdiagramm eines langsamen Verfahrens, welches von dem Signalgemischgenerator des Systems nach 1 durchgeführt wird, um ein Signalgemisch eines Balkencodesymbols zu erzeugen;
  • 10 ist ein Bild des Balkencodesymbols nach 7, welches Abtastlinien zeigt, die von dem Signalgemischgenerator des Systems nach 1 bei der Durchführung des schnellen Verfahrens nach 9 benutzt werden;
  • 11 ist ein Flussdiagramm des Verfahrens, welches von der Signalgemischschwellenwerteinheit des Systems nach 1 benutzt wird zur Schwellwertprüfung des Signalgemisches des einen Balkencodesymbols;
  • 12 zeigt eine binäre Darstellung eines Teils des Balkencodesymbolsignals mit einem zufälligen Balken;
  • 13 zeigt die binäre Darstellung eines Teils des Balkencodesymbolsignals mit einem zufälligen Balken oder einem zufälligen Zwischenraum;
  • 14 zeigt ein Flussdiagramm der Verarbeitung, welche von dem Signalgemischdekoder des Systems nach 1 aus geführt wird, um die Zeichen eines Code 39 Balkencodesymbols zu dekodieren.
  • 15 ist ein Flussdiagramm der Verarbeitung, welche der Gradientensignalgenerator des Systems nach 1 ausführt, um Weißungs- und Schwärzungsgradientensignale für ein Balkencodesymbol zu erzeugen; und
  • 16 zeigt ein Flussdiagramm der Verarbeitung, welche vom Gradientensignalprozessor des Systems nach 1 durchgeführt wird, um Weißungs- und Schwärzungsgradientensignale zu verarbeiten.
  • DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
  • 1 zeigt ein Blockschaltbild eines Balkencodesymbol-Lesesystems 100, welches Balkencodesymbole unbekannter Position und Orientierung in zweidimensionalen Pixelbildern lokalisiert und dekodiert. Das System 100 kann die Balkencodesymbole entweder in Binärbildern oder Grauskalabildern ermitteln und dekodieren. Am Dateneingang 102 des Systems 100 werden Daten von einem Pixelbild zugeführt und ein Symbollokalisator 104 lokalisiert in dem Pixelbild enthaltene Balkencodesymbole. Das System 100 versucht, jedes Balkencodesymbol in dem Pixelbild mit zwei parallelen Prozessen zu dekodieren.
  • Gemäß einem Prozess erzeugt ein Signalgemischgenerator 106 ein dem Balkencodesymbol entsprechendes Signalgemisch. Eine Signalgemisch-Schwellwertschaltung 108 vergleicht dann das Signalgemisch mit einem Schwellwert und filtert es zur Erzeugung eines Binärsignals, welches dem Signalgemisch entspricht. Dann dekodiert ein Signalgemischdekoder 110 das Balkencodesymbol durch Dekodierung des binären Signals. Dekodiert der Signaldekoder 110 das Balkencodesymbol erfolgreich, dann überträgt er das dekodierte Signal zu einem Ausgangswähler 118. Andernfalls überträgt er an den Ausgangswähler 118 ein Signal, welches angibt, dass die Dekodierung nicht erfolgreich war.
  • Nach dem anderen Prozess zur Dekodierung jedes lokalisierten Balkencodesymbols erzeugt ein Gradientensignalgenerator 112 zwei Gradientensignale aus dem lokalisierten Balkencodesymbol. Ein Gradientensignalprozessor 114 verarbeitet die beiden Gradientensignale und erzeugt aus ihnen ein binäres rekonstruiertes Signal. Dann dekodiert ein Gradientensignaldekoder 116 das Balkencodesymbol durch Dekodierung des rekonstruierten Signals. Hat der Signaldekoder 116 das Balkencodesymbol erfolgreich dekodiert, dann übermittelt er das dekodierte Signal an den Ausgangswähler 118. Andernfalls überträgt er an den Signalwähler 118 ein Signal, welches anzeigt, dass die Dekodierung nicht erfolgreich war, Der Signalgemischdekoder 110 und der Gradientensignaldekoder 116 führen identische Dekodieralgorithmen mit dem Binärsignalen durch, welche sie von der Signalgemisch-Schwellwertschaltung 108 bzw. dem Gradientensignalprozessor 114 erhalten haben.
  • Der Ausgangswähler 118 erhält die dekodierten Signale von den Signaldekodern 110 und 116 und wählt den geeigneten Ausgang für die Übertragung zu einem Datenausgang 120 aus. Wenn einer oder beide Signaldekoder 110 und 116 das Balkencodesignal erfolgreich dekodieren, dann überträgt der Ausgangswähler 118 das dekodierte Signal an den Datenausgang 120. Andernfalls würde das Balkencodesignal nicht dekodiert und der Ausgangswähler überträgt ein geeignetes Signal an den Datenausgang 120.
  • Lokalisierung von Balkencodesymbolen
  • Es sei nun 2 betrachtet, die ein Flussdiagramm für die Verarbeitung zeigt, welche der Symbollokalisierer 104 des Sys tems 100 ausführt. Der Symbollokalisierer 104 lokalisiert ein Balkencodesymbol in einem Pixelbild, indem er nach einer Ruhezone des Balkencodesymbols sucht, der eine minimale Anzahl von Übergängen zwischen Symbolbalken und Zwischenräumen folgt. An jedem Ende eines Balkencodesymbols in einem Pixelbild befindet sich ein Bereich heller Pixel, welcher als Ruhezone bezeichnet wird. Das Symbol selbst besteht aus einer Folge dunkler Balken, die durch helle Zwischenräume getrennt sind.
  • Gemäß einer bevorzugten Ausführungsform wählt eine Vorrichtung 202 des Symbollokalisierers 104 eine neue Suchlinie in einem Pixelbild aus. Die Suchlinie kann entweder eine Reihe oder eine Spalte des Pixelbildes sein. Die Vorrichtung 202 kann Suchlinien unter Anwendung einer binären Suche auswählen, wie sie etwa in dem US-Patent Nr. 5,348,028 beschrieben ist, das den Titel hat "Method and Apparatus for Detecting and Decoding Bar Code Symbols" und am 30. August 1994 für die gleiche Anmelderin ausgegeben ist. Ein geeignetes System für die Auswahl von Suchlinien unter Verwendung einer Binärsuche ist im Abschnitt "Detecting and Decoding Bar Codes Symbols" dieses Patents beschrieben. Weil im allgemeinen ein Balkencodesymbol typischerweise mehrere Reihen und Spalten im Pixelbild überdeckt, wählt die Vorrichtung 202 vorzugsweise Reihen in einer Reihenfolge aus unter Verwendung eines breiten Musters, welches mit fortschreitendem Prozess feiner wird.
  • Tabelle 1 stellt eine bevorzugte Reihenfolge der Auswahl von Reihen (oder analog Spalten) in einem Pixelbild dar, welches beispielsweise 2048 Spalten und 4096 Reihen hat. Bei der bevorzugten Reihenfolge beginnt die Auswahl der Reihen als Suchlinien bei der Reihe Nr. 64 mit einer Schrittweite von 64. Nach der Auswahl von Reihen (64, 128, 192, ... 4032, 4096) kehrt die Folge zur Reihe Nr. 32 mit der gleichen Schrittgröße von 64 Reihen zurück. Die Auswahl geht weiter, wie es Tabelle 1 zeigt. Nach dem Auswählen von Reihen (4, 12, 20, ... 4084, 4092) hat die gesamte Reihenfolge jede vierte Reihe in einem Bild ausgewählt, ohne irgendeine Reihe ein zweites Mal zu wiederholen.
  • Tabelle I
    Figure 00070001
  • Eine Reihenfolge der Auswahl von Suchreihen, wie sie Tabelle I zeigt, erhöht typischerweise die Geschwindigkeit und Effizienz des Systems 100. Dem Fachmann ist es verständlich, dass eine solche Reihenfolge in Abhängigkeit von den Eigenschaften der zu verarbeitenden Pixelbildern auch abgeändert werden kann.
  • Wenn das Pixelbild eine bekannte Anzahl von Balkencodesymbolen enthält, dann wird die Suchreihenfolge beendet, nachdem die betreffende Anzahl von Balkencodesymbolen lokalisiert und dekodiert worden ist. Außerdem verfolgt das System 100 vorzugsweise die Bereiche des Bildes, welche Balkencodesymbole enthalten, die bereits lokalisiert und dekodiert worden sind. Der Symbollokalisierer 104 ignoriert diejenigen Bereiche, welche bereits verarbeitet worden sind.
  • Eine Einheit 204 beginnt entlang einer ausgewählten Suchlinie nach einem Kandidaten, also möglichen Balkencodesymbol, von einer Startkante des Pixelbildes aus zu suchen. Wenn die Balkencodesymbole, die man im Pixelbild zu finden erwartet, eine bekannte minimale Länge haben, dann sucht die Einheit 204 vorzugsweise nicht die gesamte Länge jeder gewählten Suchlinie ab. Da das System 100 nur "ganze" Balkencodesymbole dekodiert, ignoriert die Einheit 204 einen Teil jeder ausgewählten Suchlinie, welche der Stoppkante der Suchlinie benachbart ist. Der ignorierte Teil jeder Suchlinie entspricht dem Abstand zum kürzesten erwarteten Balkencodesymbol.
  • Die Einheit 204 erkennt ein Kandidaten-Balkencodesymbol als kontinuierliche Folge von N1 "hellen" Pixeln (entsprechend einer erwarteten Ruhezone), denen eine Folge von N2-Übergängen zwischen "hellen" und "dunklen" Pixeln (entsprechend Übergängen zwischen erwarteten Balken und Zwischenräumen) folgt, wobei N1 und N2 einen ersten bzw. zweiten Schwellwert darstellen.
  • Die Einheit 204 kann nach Kandidaten-Balkencodesymbolen entweder in Binärbildern oder in Grautonbildern suchen. Bei Binärbildern können helle Pixel als Wert 1 und dunkle Pixel als Wert 0 definiert werden. In Grautonbildern kann ein Pixel mit einem größeren Wert als einem Drittel des Schwellwertes als helles Pixel definiert werden, andernfalls ist es ein dunkles Pixel.
  • Die Einheit 204 arbeitet so, dass sie zunächst nach einer Ruhezone eines Kandidaten-Balkencodesymbol sucht. Sie stellt eine solche Ruhezone fest, wenn sie eine kontinuierliche Folge von N1 hellen Pixeln längs der Suchlinie findet. Hat sie eine Kandidaten-Balkencodesymbol-Ruhezone ermittelt, dann sucht sie als Nächstes längs der ausgewählten Linie nach einer Folge von N2 Hell/Dunkel-Übergängen, wobei jeder Hell/Dunkel-Übergang einer Kante eines Balkens im Kandidaten-Balkencodesymbol entspricht (also einem Übergang zwischen einem Balken und einem Zwischenraum des Symbols). Der Ausdruck "Hell/Dunkel-Übergang" bezeichnet gemeinsam sowohl Hell/Dunkel-Übergänge wie auch Dunkel/Hell-Übergänge.
  • Nach der Lokalisierung des ersten dunklen Pixels, welches einer Kandidaten-Ruhezone folgt, prüft die Einheit 204, ob das dunkle Pixel in einem Balkencodesymbol enthalten ist, welches bereits vom System 100 lokalisiert und dekodiert worden ist. Ist dies der Fall, dann wird das Kandidaten-Balkencodesymbol zurückgewiesen, weil es ja bereits bearbeitet worden ist. Beim Zählen der Anzahl von Hell/Dunkel-Übergängen prüft die Einheit 204 zusätzlich die Breite jedes Kandidaten-Balkens und -Zwischenraums. Wenn ein Kandidatenbalken/Zwischenraum zu breit ist (also einen bestimmten maximalen Balken/Zwischenraum-Schwellwert überschreitet), dann wird das Kandidatensymbol zurückgewiesen, und es wird eine neue Suche nach einer Kandidaten-Balkencodesysmbol-Ruhezone begonnen. Nach dem Lokalisieren eines Kandidaten-Balkencodesymbols längs einer ausgewählten Suchlinie (also nach dem Lokalisieren einer Kandidaten-Ruhezone, der eine minimale Anzahl von Kandidaten-Balken und Zwischenräumen folgt), verifiziert die Einheit 204 das Kandidatensymbol durch Wiederholung der Ruhezonensuche und des Balken/Zwischenraum-Übergangs-Zählens längs einer oder mehrerer Nachbarreihen/Spalten im Pixelbild.
  • Suche nach Binärbildern auf Bytebasis
  • In 3 ist ein Flussdiagramm der Verarbeitung dargestellt, welche die Einheit 204 des Symbollokalisierers 104 ausführt, um Kandidaten-Balkencodesymbole zu lokalisieren, wenn das Pixelbild ein binäres Bild ist. In einem binären Bild wird jedes Pixel durch ein einzelnes Bit dargestellt, wobei beispielsweise eine 1 einem hellen Pixel und eine 0 einem dunklen Pixel entspricht. Die Einheit 204 sucht auf Bytebasis nach Ruhezonen und zählt auf Bytebasis Balken/Zwischenraum-Übergänge, wobei acht aufeinander folgende binäre Pixel im Pixelbild als ein einziges Byte von Bilddaten behandelt werden.
  • Eine Einheit 302 sucht entlang der ausgewählten Suchlinie zu einer Zeit immer nur nach einem Byte. Bei einem Byte, welches acht Pixeln entspricht, die alle in einer Kadidaten-Ruhezone liegen, sind typischerweise alle acht Bits (d. h. Pixel) gleich 1. Wenn also die minimale Ruhezonenlänge 32 Pixeln entspricht, dann hat eine Suchlinie durch eine Suchzone mindestens drei aufeinander folgende Bytes, welche alle einzeln sind. Stellt die Einheit 302 drei aufeinander folgende Ruhezonenbytes (also alles einzeln) fest, dann ist eine Kandidatenruhezone lokalisiert worden und die Einheit 304 gibt die Verarbeitung zur Fortsetzung an eine Einheit 306 weiter. Andernfalls kehrt die Verarbeitung zur Einheit 302 zurück, um die Suche nach einer Kandidatenruhezone auf Bytebasis fortzusetzen.
  • Die Einheit 306 zählt auf Bytebasis Balken/Zwischenraum-Übergänge im Kandidaten-Balkencodesymbol. Jedes Byte, welches Balken und Zwischenräume in einem Kandidaten-Balkencodesymbol darstellt, liefert eine spezielle Information bezüglich der Anzahl von Hell/Dunkel-Übergängen in einem Teil des Symbols. Beispielsweise enthält das Byte "01100110" vier Übergänge: Zwei von dunkel nach hell (also von 0 nach 1) und zwei von hell nach dunkel (also von 1 nach 0). Wenn weiterhin das letzte Bit des vorangehenden Byte eine 1 war, dann liegt ein Hell/Dunkel-Übergang zwischen dem vorangehenden Byte und dem derzeitigen Byte vor. Ist das erste Bit im nächsten Byte eine 1, dann liegt ähnlich ein Dunkel/Hell-Übergang zwischen dem derzeitigen Byte und dem nächsten Byte.
  • Die Einheit 306 arbeitet mit zwei Nachschlagetabellen zum Zählen von Balkenzwischenraumübergängen auf Bytebasis, wobei eine Tabelle benutzt wird, wenn das vorige Pixel (also das letzte Bit im vorigen Byte) eine l ist und die andere Tabelle, wenn das vorige Pixel eine 0 ist. Jede Tabelle hat 256 Einträge, einen für jede mögliche Kombination von Pixeln in einem Byte von 8 Bit.
  • Jeder Eintrag in jeder Tabelle stellt drei Werte da: (a) die Anzahl der Anfangspixel (am weitesten links), welche die gleiche "Farbe" (d. h. schwarz oder weiß) wie das vorangegangene Pixel haben, (b) die Anzahl der Schlusspixel (am weitesten rechts) (einschließlich des letzten Pixels) welche die gleiche Farbe wie das letzte Pixel im Byte haben, und (c) die Anzahl der Übergänge innerhalb des 8-Pixel-Bytes (einschließlich jeglicher Übergänge von vorangehenden Pixeln).
  • Beispielsweise hat in der Tabelle (vorangehendes Pixel = 1) das Byte "01100110" (a) "0" als Anzahl von Anfangspixeln, welche die gleiche Farbe haben wie das vorangehende Pixel, (b) "1" als Anzahl der Schlusspixel, welche dieselbe Farbe haben wie das letzte Pixel und (c) "5" als Anzahl von Übergängen innerhalb des Bytes. In der Tabelle (voriges Pixel = 0) hat das Byte "01100110" (a) eine "1" als Anzahl der Anfangsbits, welche dieselbe Farbe wie das vorige Bit haben, (b) "1" als Anzahl der Schlusspixel, welche dieselbe Farbe wie das letzte Pixel haben und (c) "4" als Anzahl der Übergänge innerhalb des Bytes.
  • Die Einheit 306 benutzt die aus den Tabelleneinträgen entnommenen Werte zum Zählen der Anzahl von Übergängen und zur Bestimmung der Größe jedes Balkens und Zwischenraums. Die Einheit 306 hält einen laufenden Zählwert der Anzahl von Übergängen, wenn sie jede Sequenz von Bildbytes längs einer ausgewählten Suchlinie verarbeitet. Sie bestimmt auch, ob irgendein Balken oder Zwischenraum bestimmte Schwellwerte überschreitet, indem sie einen laufenden Zählwert der Größe des momentanen Balkens/Zwischenraums festhält. Die Einheit 306 führt diese Berechnungen unter Verwendung der aus den beiden Tabellen erhaltenen Information durch.
  • Beispielsweise sei angenommen, dass eine Folge von Bildbytes längs einer ausgewählten Suchlinie ("00011011", "01101101", "11001100", "00000011") sei. Ferner sei angenommen, dass das vorhergehende Pixel des ersten Bytes in der Folge (0) war. Nach dem ersten Byte ist der laufende Zählwert der Anzahl von Übergängen 3. Das zweite Byte addiert weitere 6 Übergänge zum laufenden Zählwert zu einem Gesamtwert von 9. Das dritte Byte addiert weitere 3 Übergänge, so dass der Gesamtwert 12 wird. Das vierte Byte fügt einen weiteren Übergang zu einem Gesamtwert von 13 hinzu.
  • Wenn jedes Byte verarbeitet ist, bestimmt die Einheit 308, ob irgendein Balken oder Zwischenraum zu breit ist, indem kontinuierlich ein Balken/Zwischenraum-Größenzähler inkrementiert und überwacht wird. Für irgendein gegebenes Pixel längs einer ausgewählten Suchlinie gibt dieser Größenzähler die Anzahl aufeinander folgenden Pixel wieder, welche die gleiche Farbe wie das gegebene Pixel hat und welche auch unmittelbar dem gegebenen Pixel längs der Suchlinie vorangehen. Ist die Balken/Zwischenraum-Breite größer als eine vorgegebene maximale Balken/Zwischenraum-Größe (also wenn der Größenzähler einen bestimmten Schwellwert überschreitet), dann wird das Kandidatensymbol zurückgewiesen, und die Einheit 308 lässt die Verarbeitung zur Einheit 302 zurückkehren, um die bytebasierte Suche nach einer Kandidatenruhezone neu zu starten. Andernfalls geht die Verarbeitung zur Einheit 310 über.
  • Es sei wieder die beispielhafte Folge von Bildbytes betrachtet, die zwei Absätze zuvor beschrieben wurde: Wenn die Farbe zwischen dem Ende des ersten Bytes und dem Beginn des zweiten Bytes von hell nach dunkel wechselt, dann wird der momentane Balken/Zwischenraum-Größenzählwert an diesem Punkt längs der Suchlinie auf 0 zurückgesetzt. Wenn das vierte Byte bearbeitet ist, wird die Anzahl der Schlusspixel derselben Farbe (2) vom dritten Byte um die Anzahl der Anfangspixel derselben Farbe wie das vorige Pixel (5) vergrößert wird, so dass sich eine momentane Balken/Zwischenraum-Größe von 7 Pixeln ergibt.
  • Wenn bei einer speziellen Anwendung die bestimmte maximale Balkenzwischenraumbreite größer als 5 Pixel ist, dann gilt die vorangehende Beschreibung. Wenn jedoch die bestimmte maximale Balkenzwischenraumbreite 5 Pixel beträgt oder kleiner ist, dann kann eine besondere Bearbeitung erforderlich sein. Wenn beispielsweise die maximale Balkenbreite 5 Pixel beträgt, dann würde das Byte "10000001" einem Balken von 6 Pixeln Breite entsprechen. Für den Fachmann versteht sich, dass diese Situation behandelt werden kann durch Manipulierung der Einträge in den beiden Tabellen für dieses Byte. Wenn beispielsweise die Anzahl von Anfangspixeln derselben Farbe wie das vorangehende Pixel in beiden Tabellen für das Byte "10000001" als sechs gespeichert wäre, dann würde die oben beschriebene Verarbeitung dieser besonderen Situation gerecht werden.
  • Wenn jedes Byte verarbeitet ist, bestimmt die Einheit 310, ob der laufende Zählwert der Anzahl von Übergängen einen bestimmten Schwellwert überschreitet, beispielsweise 30. Ist dies der Fall, dann wird ein Kandidaten-Balkencodesymbol erkannt und die Verarbeitung geht auf die Einheit 312 über, andernfalls wird sie zur Einheit 306 zurückgegeben, um das byteweise Zählen von Übergängen fortzusetzen.
  • Die Verarbeitung geht auf die Einheit 312 über, wenn ein Kandidaten-Balkencodesymbol erkannt wird. Die Einheit 312 verifiziert das Kandidatensymbol durch Wiederholung der byteweisen Ruhezonensuche und der Übergangszählung der Einheiten 302 bis 310 längs einer ausgewählten benachbarten Suchlinie. Die Einheit 312 wählt vorzugsweise 3 parallele benachbarte Suchlinien auf jeder Seite der ursprünglichen Suchlinie aus.
  • Wenn die ursprüngliche Suchlinie eine Bildreihe ist, dann sind die Nachbarsuchlinien vorzugsweise jede zweite oder dritte Reihe. Wenn beispielsweise die Reihe 40 die ursprüngliche Suchlinie war, dann wählt die Einheit 312 die Reihen 31, 34, 37, 43, 46 und 49 als die sechs benachbarten Suchlinien aus.
  • Die Einheit 312 arbeitet so, dass sie zuerst die Pixel längs der ursprünglichen Suchlinie identifiziert, welche dem Beginn des Kandidatensymbols entsprechen. Dieses Pixel ist das erste dunkle Pixel, welches der Kandidatruhezone folgt. Aufgrund dieses ersten dunklen Pixels wählt die Einheit 312 eine Anfangsspalte im Pixelbild für jede benachbarte Suchlinie aus. Erfolgt die Suche längs Suchlinien von links nach rechts, dann wird die Anfangsspalte links vom ersten dunklen Pixel in einem Abstand lokalisiert, welcher gleich der Länge von mindestens 2 minimalen Ruhezonen ist. Wenn beispielsweise das erste Bild längs der ursprünglichen Suchlinie bei Spalte 1000 liegt und wenn die minimale Größe einer Ruhezone 32 Pixel beträgt, dann beginnt die Einheit 312 mit der Suche bei Spalte 936 in der benachbarten Suchlinie.
  • Gleichermaßen wählt die Einheit 312 die Endspalte für jede Nachbarsuchlinie aus durch Bewegen vom ersten dunklen Pixel nach rechts um einen Abstand, welcher gleich der Länge des maximalen erwarteten Balkencodesymbols plus zwei minimale Ruhe zonen ist. Um mit dem vorigen Beispiel fortzufahren: Wenn die maximale Symbollänge 300 Pixel beträgt, dann beendet die Einheit 312 die Suche bei Spalte (1000 + 300 + 64) oder 1364 jeder Nachbarsuchlinie. Bei einer bevorzugten Ausführungsform wird ein Kandidaten-Balkencodesymbol verifiziert, falls mindestens drei der sechs Nachbarsuchlinien dasselbe Kandidatensymbol enthalten. Damit eine Nachbarsuchlinie dasselbe Kandidatensymbol enthält, muss das erste dunkle Pixel in der Nachbarsuchlinie in einer Spalte innerhalb der Hälfte einer minimalen Ruhezone von derjenigen Spalte, welche das erste schwarze Pixel längs der ursprünglichen Suchlinie enthalten hat, liegen.
  • Es versteht sich für den Fachmann, dass die Einheit 312 analoge Auswahlen trifft, wenn die Suchlinien Spalten sind. Es versteht sich ferner, dass dieser bevorzugte Prozess der Auswahl von Nachbarsuchlinien so gestaltet ist, dass Bilder mit Balkencodesymbolen zufälliger Orientierung verarbeitet werden. Auch erkennt der Fachmann, dass Ruhezonensuche und Übergangszählen auf Bytebasis in Systemen implementiert werden kann, die eine andere Anzahl als acht Bit (d. h. Pixel) pro Byte haben.
  • Wenn, wiederum in 2, ein Balkencodesymbol lokalisiert und verifiziert ist, dann lässt die Einheit 206 des Balkensymbollokalisierers 104 die Verarbeitung zum Eckenlokalisierer 208 übergehen; andernfalls kehrt die Verarbeitung zur Einheit 214 zurück.
  • Die spezielle Ausführung der byteweisen Suche nach Balkencodesymbolen in Pixelbildern, wie es in diesem Abschnitt der Beschreibung erläutert ist, betrifft die Verarbeitung von nur binären Pixelbildern. Es versteht sich jedoch für den Fachmann, dass alle anderen Merkmale des Systems 100, wie es hier beschrieben ist, für die Verarbeitung von binären oder Graustufenbildern geeignet sind.
  • Lokalisierung von Ecken eines Balkencodesymbols
  • Der Eckenlokalisierer 208 des Symbollokalisierers 104 lokalisiert die vier Ecken eines Balkencodesymbols, welches von der Einheit 204 lokalisiert worden ist. Der Eckenlokalisierer 208 erhält von der Einheit 206 die Koordinaten des ersten dunklen Pixels längs der ursprünglichen Suchlinie und führt einen Eckenfinder-Algorithmus durch. Bei einer bevorzugten Ausführungsform ist dieser vom Lokalisierer 208 durchgeführte Eckenfindungs-Algorithmus ähnlich demjenigen, wie er in dem US-Patent 5,343,028 in dem Abschnitt "Locating the Four Corners of a Barcodesymbol" und den drei darauf folgenden Absätzen beschrieben ist.
  • Es sei nun 4 betrachtet: Sie zeigt ein Balkencodesymbol 400, welches von der Einheit 204 lokalisiert worden ist, wobei das Pixel 402 das erste dunkle Pixel längs der ursprünglichen Suchlinie ist. Kurz erläutert umfasst der im US-Patent 5,343,028 beschriebene Eckenfindungs-Algorithmus die folgenden Schritte:
    • (1) Es wird ein "Kriechen" im Uhrzeigersinn längs der Außenkante 406 des Anfangsbalkens 410 des Balkencodesymbols 400 vom ersten dunklen Pixel 410 bis zum Ende des Balkens 410 festgestellt. Das Ende des Balkens wird festgestellt als eine Änderung in der Kriechrichtung, welche größer als ein vorbestimmter Schwellwert ist. Eine solche Änderung entspricht dem Kriechen um eine Ecke anstatt längs um eine Linie. Dieser Schritt lokalisiert die obere linke Ecke 408 des Symbols 400;
    • (2) Kriechen im Gegenuhrzeigersinn entlang des Anfangsbalkens 410, um die linke untere Ecke 426 des Symbols 400 zu lokalisieren;
    • (3) Projizieren einer von den Ecken 408 und 426 bestimmten senkrechten Linie 412 vom Mittelpixel 404 des Anfangsbalkens 410 über das Symbol 400;
    • (4) Suchen entlang der senkrechten Linie 412 von links nach rechts beginnend am Mittelpixel 404 nach einer Ruhezone 418 am anderen Ende des Symbols 400;
    • (5) Suchen entlang der senkrechten Linie 412 von rechts nach links beginnend in der Ruhezone 418 nach dem letzten dunklen Pixel 420 am anderen Ende des Symbols 400;
    • (6) Kriechen im Gegenuhrzeigersinn längs der Außenkante 422 des Endbalkens 416 zur Lokalisierung der oberen rechten Ecke 416 des Symbols 400; und
    • (7) Kriechen im Uhrzeigersinn längs des Endbalkens 414 zur Lokalisierung der unteren rechten Ecke 424 des Symbols 400. Außer diesen sieben Schritten des Eckenfindungs-Algorithmus nach der oben genannten US-Patentschrift, verifiziert der Eckenlokalisierer 208 die Genauigkeit der lokalisierten Ecken, indem er die folgenden zusätzlichen Schritte durchführt, die nicht in der genannten US-Patentschrift beschrieben sind:
    • (8) Verifizieren, dass das durch das erste dunkle Pixel 402 und die Ecke 408 definierte Liniensegment und das durch das erste dunkle Pixel 402 und die Ecke 426 definierte Liniensegment genügend kolinear verlaufen;
    • (9) Verifizierung, dass das durch das letzte dunkel Pixel 420 und die Ecke 416 definierte Liniensegment und das durch das letzte dunkle Pixel 420 und die Ecke 424 definierte Liniensegment genügend kolinear verlaufen; und
    • (10) Verifizieren, dass das durch die Ecken 408 und 426 definierte Liniensegment und das durch die Ecken 416 und 424 definierte Liniensegment genügend parallel zueinander verlaufen.
  • Das Kandidaten-Balkencodesymbol wird zurückgewiesen, wenn die betreffenden Liniensegmente in den Schritten 8, 9 oder 10 nicht ausreichend parallel zueinander verlaufen. Zwei Liniensegmente sind genügend parallel, wenn die Differenz zwischen ihren Steigungen innerhalb eines bestimmten Schwellwertes liegt. Da die relevanten Liniensysteme der Schritte 8 und 9 einen gemeinsamen Punkt haben (d. h. das erste dunkle Pixel 402 bzw. das letzte dunkle Pixel 420), ist der Parallelitätstest äquivalent zu dem Kolinearitätstest. Der Eckenlokalisierer 208 bestimmt die (Reihe, Spalte) Koordinaten im Pixelbild der vier lokalisierten Ecken 408, 426, 416 und 424 des Balkencodesymbols 400.
  • "Neunziggradwinkel"-Bildung des lokalisierten Symbols
  • Nachdem der Eckenlokalisator 208 die vier Ecken für das Balkenkodesymbol lokalisiert hat, korrigiert die Einheit 210 die Lokalisierung mindestens einer der vier Ecken. Die vier vom Eckenlokalisator 208 ausgewählten Ecken definieren ein Viereck. Idealerweise ist jedoch ein Balkencodesymbol durch ein Rechteck, ein spezieller Vierecktyp, definiert. Aus einem oder mehreren Gründen kann das durch die vier Ecken definierte Viereck, welches vom Eckenlokalisator 208 identifiziert worden ist, kein Rechteck sein.
  • Wenn beispielsweise der Anfangs- und Endbalken in zwei oder mehrere Segmente im Bild unterbrochen ist, kann eine Seite des lokalisierten Vierecks kürzer als die gegenüberliegende Seite sein. Zeilenrauschen bei der Übertragung eines „run-length"-codierten Faksimiles kann zu solchen Unterbrechungen der Balken führen. Solches Zeilenrauschen kann auch zu Balkenverlängerungen führen. In beiden Fällen kann die Eckenlokalisierung ungenau sein. Andererseits kann auch das tatsächliche Etikett, welches das abgebildete Balkencodesymbol enthält, physisch beschädigt sein, so dass die Balken nicht vollständig sind.
  • Es sei nun 5 betrachtet, die ein Bild eines Balkencodesymbols zeigt, bei welchem der Endbalken in zwei Segmente unterbrochen ist. Der Eckenlokalisator 208 lokalisiert Ecken A, B, C und D, mit den Koordinaten (xa, ya), (xb, yb), (xc, yc), bzw. ((xd, yd). Die Einheit 210 korrigiert die Lage mindestens einer der lokalisierten Ecken durch Konstruieren des "besten" Rechtecks aufgrund von mindestens zwei der anderen vier lokalisieren Ecken.
  • Für jede der vier Ecken berechnet die Einheit 210 einen Fehlerwert E. Beispielsweise wird für die Ecke B der Fehlerwert Eb bestimmt durch:
    Figure 00190001
    wobei AC der Abstand zwischen den Ecken A und C, AB der Abstand zwischen den Ecken A und B, BC der Abstand zwischen den Ecken B und C ist. Je größer die Abweichung von einem rechten Winkel (90°) an der Ecke B ist, desto größer ist der Fehlerwert Eb. Unter Verwendung ähnlicher Gleichungen berech net die Einheit 210 auch Fehlerwerte Ea, Ec und Ed für die Ecken A, C bzw. D.
  • Die Einheit 210 wählt die Ecke mit dem größten Fehler als zu korrigierende Ecke aus. Für das Symbol nach 5 ist der Fehlerwert Eb der größte der vier Fehlerwerte, und die Einheit 210 wählt die Ecke B zur Korrektur aus. Die korrigierte Lage der Ecke B wird durch diejenigen Koordinaten (Xb', Yb') definiert, für welche der Fehlerwert der Gleichung (1) Null ist. Typischerweise gibt es zwei eindeutige Lösungen der Gleichung (1). Die Einheit 210 wählt die der ursprünglich lokalisierten Ecke am Nächsten liegende Lösung aus. Es versteht sich für den Fachmann, dass die Einheit 210 auch zur Korrektur der Lage von mindestens zwei Ecken benutzt werden kann. Wenn wie im folgenden Beispiel die Einheit 210 die Ecken A und C zur Korrektur der Lage der Ecke B benutzt, dann kann sie auch die Ecken A und C zur Korrektur der Lage der Ecke D heranziehen, wenn dies gewünscht ist, wobei eine der Gleichung (1) analoge Gleichung benutzt wird. Generell kann die Einheit 210 irgendeine von zwei diagonal gegenüberliegenden Ecken unter Verwendung der beiden anderen Ecken korrigieren.
  • Es versteht sich für den Fachmann, dass es auch alternative Methoden zur Korrektur der Lage von einer oder mehreren Ecken gibt. Diese alternativen Methoden können auf einer oder mehreren der folgenden Eigenschaften von Rechtecken (also der idealen Form von Balkencodesymbolen) beruhen:
    • – Gegenüberliegende Seiten eines Rechtecks sind parallel;
    • – Gegenüberliegende Seiten haben gleiche Länge;
    • – Diagonalen haben gleiche Länge;
    • – Eckenwinkel betragen 90°; und
    • – Diagonalen und ihre entsprechenden Seiten erfüllen das Pythagoreische Theorem.
  • Außerdem führt die Einheit 210 Geometrietests durch, um zu verifizieren, dass Größe und Form des rechtwinklig gemachten Balkencodesymbols innerhalb vorbestimmter Schwellwerte liegen. Diese Geometrieteste beruhen auf den relativen Lagen der vier Symbolecken.
  • Nachdem die Einheit 210 die Ecken des Symbols rechwinklig gemacht hat, überträgt die Einheit 212 die (Reihe, Spalte) Koordinaten der vier Ecken des "korrigierten" Symbols an den Signalgemischgenerator 106 und den Generator 112 des gradienten-basierten Signals aus 1. Die Verarbeitung des Symbollokalisierers 104 wird dann mit der Einheit 214 fortgeführt, um zu bestimmen, ob das Ende der momentanen Suchlinie erreicht worden ist. Ist dies der Fall, dann kehrt die Verarbeitung zurück zur Einheit 202, um eine neue Suchlinie auszuwählen. Andernfalls kehrt die Verarbeitung zurück zur Einheit 204, um die Suche längs der derzeitigen Suchlinie fortzusetzen. Der Symbollokalisierer 104 fährt fort zu versuchen, Balkencodesymbole zu lokalisieren, bis die spezielle Suchlinienfolge zu Ende ist oder irgendein anderer Stoppzustand erfüllt ist.
  • Langsames Verfahren zur Erzeugung von Signalgemischen von Balkencodesymbolen
  • 6 zeigt ein Flussdiagramm eines langsamen Verfahrens, welches vom Signalgemischgenerator 600 durchgeführt wird. Der Generator 600 ist ein Beispiel für einen Signalgemischgenerator 106 des Systems 100 nach 1, wo der Generator 600 das langsame Verfahren zur Erzeugung eines Signalgemischs für ein Balkencodesymbol ausführt. Das Balkencodesymbol wird längs mehrerer Abtastlinien abgetastet.
  • Die Abtastlinien werden durch die Symbolecken bestimmt, welche vom Symbollokalisierer 104 ermittelt werden. Bei dem langsamen Verfahren zur Erzeugung von Signalgemischen verläuft jede Abtastlinie parallel zu den Balken und Zwischenräumen des Symbols. Ferner sind aufeinander folgende Abtastlinien voneinander durch einen Abstand von weniger als 1 Pixelbreite getrennt. Ist ein Balkencodesymbol nicht mit den Reihen und Spalten des Pixelbildes ausgerichtet, dann entsprechen die Abtastlinien nicht den Bildreihen oder -spalten. Damit unterscheiden sich die Abtastlinien bei dem langsamen Verfahren zur Erzeugung von Signalgemischen generell von den "Suchlinien", welche der Symbollokalisierer 104 benutzt, die immer entweder einer Reihe oder Spalte des Pixelbildes entsprechen.
  • Für jede Abtastlinie bildet der Generator 600 Mittelwerte der Pixelintensitäten entlang der Abtastlinie zur Erzeugung eines Pixels in einem eindimensionalen Signalgemisch. Weil die Distanz zwischen aufeinander folgenden Abtastlinien kleiner als ein Pixel gewählt wird, oversampled der Generator 600 das Pixelbild bei der Erzeugung des Signalgemisches.
  • In 7 ist ein Bild eines Balkencodesymbols 700 gezeigt, das von dem Signalgemischgenerator 600 verarbeitet worden ist. Der Generator 600 bekommt die Koordinaten der Ecken 702, 704, 706 und 708 vom Symbollokalisierer 104. Um Abtastfehler gewöhnlich an den Enden der Symbolbalken zu vermeiden, identifiziert der Generator 600 ein durch Ecken 712, 714, 716 und 718 definiertes Abtastrechteck 710. Das Abtastrechteck 710 ist so definiert, dass es etwas, z. B. 3% niedriger als die Oberseite des Symbols 700, etwas (z. B. 3%) höher als die Unterseite des Symbols 700 und etwas länger als das Symbol 700 ist (z. B. um eine bestimmte Distanz in jede Ruhezone hinein). Die Längen jeder Abtastlinie sind dann durch die Begrenzungen des Abtast rechtecks 710 definiert, und damit beginnt jede Abtastlinie (welche definitionsgemäß parallel zu den Balken und Zwischenräumen des Symbols 700 verläuft) oberhalb der Unterseite und unterhalb der Oberseite des Symbols 700.
  • Es sei wiederum 6 betrachtet, bei welcher die Einheit 602 des Signalgemischgenerators 600 eine Folge paralleler Abtastlinien aufgrund des Abtastrechteckes 710 auswählt. Die Einheit 602 beginnt mit derjenigen Abtastlinie, welche durch die Ecken 712 und 718 an einem Ende des Abtastrechtecks 710 definiert ist und wählt jede neue Abtastlinie durch Verschieben der vorigen Abtastlinie in Richtung des anderen Endes des Abtastrechtecks 710 um eine bestimmte Distanz aus, welche kleiner als die Breite eines Pixels ist.
  • Es sei wiederum 8 betrachtet, welche einen Teil eines Balkencodesymbols 700 mit mehreren darauf überlagerten Abtastlinien 802 zeigt. Für jede Abtastlinie 802 tastet die Einheit 604 das Symbolbild entlang der momentan ausgewählten Abtastlinie ab, und die Einheit 606 erzeugt den mittleren Pixelintensitätswert der Pixel, welche auf dieser Abtastlinie liegen. Die Einheit 608 speichert den Mittelwert als Pixel in einem eindimensionalen Signalgemisch. Die Einheit 610 bestimmt, ob die momentane Abtastlinie die letzte Abtastlinie ist, d. h. ob das gegenüberliegende Ende des durch die Ecken 714 und 716 definierten Abtastrechtecks 710 erreicht worden ist. Ist dies nicht der Fall, dann kehrt die Verarbeitung zur Einheit 602 zurück, um die nächste Abtastlinie auszuwählen. Andernfalls überträgt die Einheit 612 das gesamte Signalgemisch zu der Signalgemisch-Schwellwertschaltung 108 des Systems 100 zur weiteren Verarbeitung. Die Verarbeitung der Schwellwertschaltung 108 wird später im Zusammenhang mit 11 noch beschrieben.
  • Schnelles Verfahren zur Erzeugung von Signalgemischen von Balkencodesymbolen
  • 9 zeigt ein Block-Flussdiagramm eines schnellen Verfahrens, welches vom Signalgemischgenerator 900 implementiert wird. Der Signalgemischgenerator 900 ist ein Beispiel eines Signalgemischgenerators 106 des Systems 100 nach 1, wobei der Generator 900 so gebaut ist, dass er das schnelle Verfahren zur Erzeugung von Signalgemischen von Balkencodesymbolen implementiert. Das schnelle Verfahren ist eine Alternative zu dem langsamen Verfahren, was hier bereits im Zusammenhang mit den 6, 7 und 8 beschrieben worden ist.
  • Nach dem schnellen Verfahren wählt der Generator 900 einen Satz von Abtastlinien aus den Reihen/Spalten im Pixelbild, welche das Balkencodesymbol durchqueren. Es sei bemerkt, dass bei dem schnellen Verfahren die Abtastlinien immer entweder einer Reihe oder einer Spalte des Pixelbildes entsprechen. Wie bereits im Zusammenhang mit 6 für das langsame Verfahren beschrieben worden ist, müssen die Abtastlinien nicht mit einer Reihe oder Spalte des Pixelbildes zusammenfallen und tun dies im Allgemeinen auch nicht.
  • Für jede Abtastlinie dreht und streckt der Generator 900 die Abtastliniendaten. Unter Verwendung der gestreckten und gedrehten Daten aktualisiert der Generator 900 ein eindimensionales Vektorgemisch und einen eindimensionalen Zählvektor. Nachdem alle ausgewählten Abtastlinien verarbeitet worden sind, "normiert" der Generator 900 den eindimensionalen Vektor, so dass man ein eindimensionales Signalgemisch für das Balkencodesymbol erhält.
  • 10 zeigt ein Bild des Balkencodesymbols nach 7 mit den Abtastlinien 16, welche vom Signalgemischgenerator 900 benutzt werden zur Implementierung des schnellen Verfahrens der Erzeugung eines darauf überlagerten Signalgemisches. Die Einheit 902 wählt eine Folge von Abtastlinien aus. Wie 10 zeigt, kreuzt jede Abtastlinie das Balkencodesymbol und ist ein Teil einer Reihe (oder Spalte) des Pixelbildes. Die Einheit 902 braucht nicht jede Reihe (oder Spalte), welche das Balkencodesymbol durchkreuzt, zu wählen. Somit können aufeinander folgende Abtastlinien um mehr als ein Pixel voneinander getrennt sein. Außerdem braucht eine Abtastlinie nicht das gesamte Balkencodesymbol zu kreuzen. Beispielsweise kreuzen in 10 nur die Abtastlinien 3 und 4 das gesamte Symbol.
  • Die Einheit 904 dreht und streckt die Daten von jeder momentanen Abtastlinie. Der Winkel, um welchen die Einheit 904 die Abtastliniendaten verdreht, bestimmt sich durch die Orientierung des Balkencodesymbols, wie von den vier Symbolecken angegeben, die vom Symbollokalisierer 104 identifiziert worden sind. Der Fachmann versteht, dass dieses Verdrehen die Balken des Balkencodesymbols mit den Spalten (oder Reihen) des gedrehten Bildes effektiv ausrichtet.
  • Das Ausmaß, um welches die Einheit 904 die Abtastliniendaten streckt, bestimmt sich durch die Oversamplingrate, einen speziellen Parameterwert von beispielsweise 3. Das Strecken der Daten bei dem schnellen Verfahren ist ähnlich der Auswahl der Abtastlinien bei dem langsamen Verfahren, welche durch Unterpixel-Abstände voneinander getrennt sind. Sowohl das schnelle als auch das langsame Verfahren sind so ausgelegt, dass die ursprünglichen Pixelbilddaten oversampled werden.
  • Die Tabellen II bis IV zeigen ein Beispiel der Verarbeitung durch den Signalgemischgenerator 900. Die Erläuterung dieser Tabellen soll die vom Generator 900 implementierte Verarbei tung zeigen und muss nicht notwendigerweise eine realistische Situation beschreiben. Die Listen (I), (J), (K) und (L) der Tabellen III, IV und V werden später im Zusammenhang mit 15 und dem Gradientensignalgenerator 112 erläutert.
  • Tabelle II zeigt die ursprünglichen Pixelintensitätsdaten für drei Abtastlinien eines Grauton-Pixelbildes, wobei die Abtastlinie #1 der Reihe 0 des Bildes entspricht, die Abtastlinie #2 der Reihe 2 und die Abtastlinie #3 der Reihe 4. Bei diesem Beispiel ist der Pixelintensitätswert umso höher, je heller das Pixel ist. Jede Abtastlinie der Tabelle II beginnt bei der Spalte 0 und endet bei Spalte 9 des Pixelbildes. Damit ist z. B. die Intensität des Pixels bei (Reihe = 2) und (Spalte = 5) = 3. Bei diesem Beispiel ist aufgrund der vier vom Symbollokalisierer 104 lokalisierten Ecken bestimmt worden, dass das Balkencodesymbol unter einem Winkel von 45° im Gegenuhrzeigersinn zu den Bildreihen orientiert ist.
  • Tabelle II Originalbilddaten
    Figure 00260001
  • Tabelle III zeigt die Ergebnisse der Verarbeitung der Abtastlinie #1 (Reihe 0) durch den Generator 900. Die Liste (A) der Tabelle III enthält die ursprüngliche Spaltennummer für jedes Pixel im Pixelbild längs der Abtastlinie #1. Liste (B) enthält die Intensität jedes ursprünglichen Pixels. Liste (C) enthält die Nummer der gedrehten Spalte (ein realer Wert), nachdem die Einheit 904 jedes Originalpixel um θ Grad gedreht hat, wobei in diesem Fall θ = 45° ist. Die Nummer Cr der gedrehten Spalte bestimmt sich aus: C2 = C0cosθ + R0sinθ, (2)wobei C0 die ursprüngliche Spaltennummer und R0 die ursprüngliche Reihennummer für das Pixel im Pixelbild ist.
  • Tabelle III. Verarbeitung der Abtastlinie #1 (Reihe 0)
    Figure 00280001
  • Liste (D) der Tabelle III enthält die Nummer der gestreckten Spalte (ein realer Wert), nachdem die Einheit 904 jedes gedrehte Pixel um die Oversamplerate gestreckt hat. Dieser Wert beruht auf einer Oversamplingrate von 3. Liste (D) ist das Ergebnis der Liste (C) und der Oversamplingrate (in diesem Fall 3). Liste (E) enthält die gerundeten Spaltennummern (ganze Werte) für die gestreckten und gedrehten Daten, wie sie von der Einheit 904 erzeugt sind. Beispielsweise wird die gestreckte Spalte 8.49 von Liste (D) zur gerundeten Spalte 8 in Liste (E) gerundet. Entsprechend wird die gestreckte Spalte 10,61 von Liste (D) zur gerundeten Spalte 11 in Liste (E) gerundet. Liste (E) enthält auch die Spaltennummern, die zwischen die gerundeten Spalten fallen. So fällt Spalte 7 zwischen die gerundeten Spalten 6 und 8, während die Spalten 9 und 10 zwischen die gerundeten Spalten 8 und 11 fallen. Für die nachfolgende Diskussion werden alle Elemente der Liste (E) kollektiv als gerundete Spalten bezeichnet.
  • Liste (F) enthält einen Intensitätswert für jede gerundete Spalte in Liste (E). Für jede gerundete Spalte der Liste (E) wiederholt die Einheit 904 den entsprechenden Intensitätswert aus der ursprünglichen Spalte der Liste (A). Beispielsweise entsprechen die gerundeten Spalten 6 und 7 der Liste (E) der Spalte 3 aus Liste (A), und damit sind die entsprechenden Intensitäten der Liste (F) für diese gerundeten Spalten 21.
  • Die Einheit 904 interpoliert zwischen gerundeten Spalten zur Bestimmung der Intensitätswerte in Liste (F). Die Intensität in Liste (F), die der gerundeten Spalte 7 in Liste (E) entspricht, wäre 21,5, der Mittelwert der Intensitäten entsprechend den gerundeten Spalten 6 und 8 der Liste (E).
  • Der Fachmann versteht, dass das von der Einheit 904 durchgeführte Drehen und Strecken in einer einzigen Berechnung aufgrund einer Matrixmultiplikation erfolgen kann, wobei die Drehmatrix modifiziert wird, um die Oversamplingrate zu enthalten.
  • Da die Einheit 904 die Daten für jede Abtastlinie dreht und streckt, aktualisiert die Einheit 906 ein eindimensionales Vektorgemisch und die Einheit 908 aktualisiert einen eindimensionalen Zählvektor aufgrund der gestreckten, gedrehten Daten.
  • Das Vektorgemisch stellt die "Summe" aller zuvor gestreckten und gedrehten Abtastlinien dar. Der Zählvektor hält fest, wie oft jedes Element des Vektorgemisches aktualisiert worden ist. Bei dem Beispiel der Tabelle III stellt die Liste (G) das Vektorgemisch und die Liste (H) den Zählvektor nach Verarbeitung der Abtastlinie #1 dar.
  • Nachdem die Einheit 908 den Zählvektor aktualisiert hat, bestimmt die Einheit 910, ob die momentane Abtastlinie die letzte zu verarbeitende Abtastlinie ist. Ist dies der Fall, dann geht die Verarbeitung weiter bei der Einheit 912, andernfalls kehrt sie zur Einheit 902 zurück, um die nächste Abtastlinie auszuwählen. Da bei dem Beispiel der Tabelle II die Reihe 0 (also die Abtastlinie #1) nicht die letzte Abtastlinie ist, lässt die Einheit 910 die Verarbeitung wieder zur Einheit 902 zurückkehren, um die Reihe 2 als neue Abtastlinie auszuwählen.
  • Die Tabelle IV zeigt die Ergebnisse der Verarbeitung der Abtastlinie #2 (Reihe 2) der Tabelle II durch den Generator 900. Listen (A) bis (H) der Tabelle IV sind analog denjenigen der Tabelle III. Die Einheit 906 bildet ein aktualisiertes Vektorgemisch (Liste (G) von Tabelle IV) durch Summierung der Pixelwerte von dem vorigen Vektorgemisch (Liste (G) der Tabelle III) mit entsprechenden Intensitätswerten von Liste (F) der Tabelle IV. Einheit 908 aktualisiert den Zählvektor der Liste (H) durch Inkrementieren derjenigen Elemente, welche den Elementen des Vektorgemischs der Liste (G) entsprechen, die aktualisiert worden waren.
  • Tabelle IV. Verarbeitung der Abtastlinie #2 (Reihe 2)
    Figure 00310001
  • Es sei bemerkt, dass keine der gestreckten, gedrehten Daten von der Abtastlinie #2 mit den gerundeten Spalten 0 bis 3 zusammenfallen, dass jedoch einige der Daten mit den neuen gerundeten Spalten 21 bis 24 zusammenfallen. Als Ergebnis sind einige Elemente des Vektorgemischs nicht aktualisiert. Der Zählvektor wird benutzt, um festzuhalten, wie oft jedes Element des Vektorgemisches aktualisiert worden ist. Der Fachmann versteht, dass dieses ungleichmäßige Aktualisieren von Vektorgemisch und Zählvektor auch auftritt, wenn die Verarbeitungslinien nicht das gesamte Balkencodesymbol kreuzen, beispielsweise die Abtastlinie 1 in 10.
  • Nach der Verarbeitung der Abtastlinie #2 lässt die Einheit 910 die Verarbeitung zur Einheit 902 zurückkehren, um die Abtastlinie #3 (Reihe 4) zu wählen, die letzte Abtastlinie der Ta belle 2. Tabelle V zeigt das Ergebnis der Verarbeitung der Abtastlinie #3 (Reihe 4) der Tabelle II durch die Generator 900. Wiederum sind die Listen (A) bis (H) der Tabelle V analog zu denjenigen der Tabellen III bis V.
  • Tabelle V. Verarbeitung der Abtastlinie #3 (Reihe 4)
    Figure 00320001
  • Nach der Verarbeitung der Abtastlinie #3 lässt die Einheit 910 die Verarbeitung zur Weiterführung zur Einheit 912 gelangen, welche das Vektorgemisch "normiert" um durch Dividieren jedes Elementes des Signalgemisches durch das entsprechende Element im Zählvektor ein eindimensionales Signalgemisch zu erzeugen. Die Einheit 914 überträgt dann dieses Signalgemisch zur Signalgemisch-Schwellwertschaltung 108 des Systems 100.
  • Tabelle VI zeigt das von der Einheit 912 erzeugte eindimensionale Signalgemisch. Die Listen (E), (G) und (H) sind identisch mit diesen Listen der Tabelle V. Liste (M) zeigt das Signalgemisch, welches von der Einheit 912 erzeugt wurde durch Dividieren der Elemente des Vektorgemisches der Liste (G) durch die entsprechenden Elemente des Zählvektors der Liste (H). Die Einheit 914 lässt das Signalgemisch der Liste (M) zur Schwellwertschaltung 108 gelangen.
  • Tabelle VI. Verarbeitung des Signalgemisches
    Figure 00330001
  • Schwellwertvergleich und Filterung des eindimensionalen Signalgemisches
  • 11 zeigt ein Block-Flussdiagramm der Verarbeitung, welche die Signalgemisch-Schwellwertschaltung 108 des Systems durchführt, um ein eindimensionales Signalgemisch eines Balkencode-Symbols mit einem Schwellwert zu vergleichen. Die Schwellwertschaltung 108 verarbeitet ein Signalgemisch, gleichgültig, ob es vom Generator 600 unter Anwendung des bereits im Zusammenhang mit 6 beschriebenen langsamen Verfahrens oder vom Generator 900 unter Verwendung des im Zusammenhang mit 9 beschriebenen schnellen Verfahrens erzeugt worden ist. Die Schwellwertschaltung 108 teilt das Signalgemisch anhand des Schwellwertes in binäre schwarze ("0") und weiße ("1") Segmente auf, welche den Balken und Zwischenräumen des Balkenkodesymbols entsprechen. Die Schwellwertschaltung 108 filtert dann das schwellwertverglichene Signal zur Eliminierung zufälliger Balken und Zwischenräume. Dann überträgt sie das gefilterte Signal an den Signalgemischdekoder 110, welcher mit üblichen Balkencodesymboldekodierverfahren arbeitet, um das gefilterte Signal zu dekodieren.
  • Die Einheit 1102 der Schwellwertschaltung 108 unterzieht das vom Generator 106 erhaltene Signalgemisch einer Schwellwertprüfung. Hierzu benutzt sie eine adaptive Schwellwertbildung, oder sie kann auch einen üblichen Schwellwertalgorithmus mit einem Schwellwertvergleich gegenüber einem festen Schwellwert benutzen.
  • Es sei wieder Tabelle VI betrachtet, in welcher die Liste (N) das Binärsignal darstellt, dass von der Einheit 1102 durch Schwellwertvergleich des Signalgemisches der Liste (M) mit einem festen Schwellwert von 12 erzeugt wurde. Wenn ein Element des Signalgemisches größer als 12 ist, dann ist das entspre chende binäre Element 1 (weiß); andernfalls ist das entsprechende binäre Element 0 (schwarz). Bei den Beispielen der Tabellen II bis VI ergibt das schnelle Verfahren zur Signalgemischerzeugung einen Hell/Dunkel-Übergang zwischen den gerundeten Spalten 12 und 13, einen Dunkel/Hell-Übergang zwischen den gerundeten Spalten 18 und 19 und einen weiteren Hell/Dunkel-Übergang zwischen den gerundeten Spalten 27 und 28. Diese Übergänge entsprechen den Balkenkanten im Balkencodesymbol.
  • Die Einheit 1102 arbeitet mit einem adaptiven Schwellwertalgorithmus zur Lokalisierung von Übergängen im Signalgemisch. Bei einem adaptiven Schwellwertalgorithmus benutzt die Einheit 1102 die lokalen Minimum- und Maximumintensitätswerte im Signalgemisch zur Bestimmung des Schwellwertes, der zur Lokalisierung des Übergangs zwischen diesen lokalen Minima und Maxima herangezogen wird.
  • Es sei wiederum Tabelle VI betrachtet, in welcher der erste lokale maximale Intensitätswert 23,0 ist entsprechend den gerundeten Spalten 2 und 3, und der erste lokale Minimumintensitätswert 3,7 ist entsprechend den gerundeten Spalten 15 und 16. Bei diesem Beispiel wählt die Einheit 1102 die Hälfte der Summe von lokalem Maximum und Minimum (0,5 × (23,0 – 3,7)) oder 13,4 als der zwischen der gerundeten Spalte 2 und der gerundeten Spalte 16 anzuwendende Schwellwert. Unter Benutzung dieses Schwellwertes lokalisiert die Einheit 1102 den Hell/Dunkel-Übergang zwischen den gerundeten Spalten 12 und 13. Wenn in einem speziellen Fall zwei oder mehr aufeinander folgende Elemente im Signalgemisch gleich dem Schwellwert sind, dann wird das mittlere Element dieser Serie aufeinander folgenden Elemente als Dunkel/Hell-Übergang ausgewählt.
  • Um Rauscheffekte minimal zu halten, werden lokale Maxima und Minima als spezifische Signifikanzwerte definiert. Wenn die Differenz zwischen einem lokalen Maximum und dem nächsten lokalen Minimum nicht größer als der spezielle Signifikanzwert ist, dann weist die Einheit 1102 ihn zurück und sucht weiter nach lokalen Minimum- und Maximumpixeln im Signalgemisch.
  • Es sei beispielsweise angenommen, dass das Signalgemisch Intensitätswerte (5, 3, 6, 25, 22, 26, 10, 4, 7) hat. Weiterhin sei angenommen, dass der Signifikanzwert als 5 festgelegt wird. Die Einheit 1102 tastet von links nach rechts ab, um ein lokales Minimum bei 3 zu finden. Sie fährt mit der Abtastung fort, um ein lokales Maximum von 25 zu finden. Da die Differenz zwischen dem lokalen Maximum (25) und dem lokalen Minimum (3) größer als der Signifikanzwert (5) ist, hält die Einheit 1102 diese Werte fest. Die Einheit 1102 tastet dann nach dem nächsten lokalen Minimum bei 22 ab.
  • Da die Differenz zwischen dem lokalen Maximum (25) und dem lokalen Minimum (22) nicht größer als der Signifikanzwert (5) ist, fährt die Einrichtung 1102 fort, nach einem richtigen lokalen Minimum zu suchen, und während sie dies tut, aktualisiert sie, falls notwendig, das lokale Maximum. Da die Einheit 1102 abtastet, um das nächste lokale Minimum bei 4 zu finden, aktualisiert sie somit das lokale Maximum auf 26. Weil die Differenz zwischen dem aktualisierten und lokalen Maximum (26) und dem neuen lokalen Minimum (4) größer als der Signifikanzwert (5) ist, wählt die Einheit 1102 diese Pixel als richtiges lokales Maximum und Minimum aus. Aus diesem lokalen Minimum und Maximum werden dann Mittelwerte gebildet, um den Schwellwert zu berechnen, der benutzt wird, um das Pixel zu finden, welches den Übergang zwischen dem lokalen Maximum und Minimum entspricht. Falls der Signifikanzwert 2 anstatt 5 gewesen wä re, dann wären 25 und 26 beide als lokales Maximum zu betrachten.
  • Der ausgewählte Signifikanzwert bestimmt die Rauschfestigkeit der Einheit 1102. Hohe Signifikanzwerte ergeben eine nennenswerte Rauschfestigkeit, können jedoch auch zu einem Verlust echter Hell-/Dunkelübergänge im Signalgemisch führen. Niedrige Signifikanzwerte können andererseits zur zufälligen Erkennung von Übergängen in verrauschten Bereichen führen. Bevorzugt benutzt man eher zu niedrige als zu hohe Signifikanzwerte, weil die nachfolgende Filterung zufällige Übergänge eliminieren kann, jedoch ist es nicht möglich, verloren gegangene echte Übergänge wieder zu gewinnen. Der Signifikanzwert basiert auf einem Bruchteil (beispielsweise 1/8) des Dynamikbereichs des Signalgemisches, wie er durch die Gesamtheit der Minimal- und Maximalwerte des Signalgemisches definiert ist.
  • Es seien nun die 12 und 13 betrachtet, welche zwei gemeinsame Beispiele zufälliger Hell-/Dunkelübergänge zeigen, die von der Benutzung relativ niedriger Signifikanzwerte bei der Schwellwertbildung eines verrauschten Signalgemisches herrühren können. 12 zeigt die Binärdarstellung eines zufälligen Balkens 1, wo ein einziger Zwischenraum vorhanden sein sollte. 13 zeigt die Binärdarstellung entweder eines zufälligen Balkens 1 oder eines zufälligen Zwischenraums 2, wo nur ein Zwischenraum und ein Balken vorhanden sein sollten.
  • Die Einheit 1104 filtert das schwellwertverarbeitete Signalgemisch zur Entfernung zufälliger Balken und Zwischenräume. Ein zufälliger Balken/Zwischenraum ist ein solcher, der zu schmal ist, um nach den bekannten Eigenschaften der zu dekodierenden Balkencodesymbologie gültig zu sein. Es können Schwellwerte aufgrund bestimmter Bruchteile (beispielsweise 1/2) der minimalen Balken- und Zwischenraumbreiten bei einer bestimmten zu dekodierenden Symbologie eingestellt werden. Wenn ein Balken oder Zwischenraum schmaler als der bestimmte Schwellwert ist, dann wird der Balken/Zwischenraum entfernt. In 12 entfernt die Einheit 1104 den zufälligen Balken 1, um einen einzelnen Zwischenraum zu bilden, weil der Balken 1 zu schmal ist, um gültig zu sein.
  • In 13 seien der Balken 1 und der Zwischenraum 2 beide schmaler als die anwendbaren Schwellen. In diesem Fall eliminiert die Einheit 1104 den kleineren der beiden durch Verschmelzen der beiden benachbarten Balken/Zwischenräume. Ist der Balken 1 schmaler als der Zwischenraum 2, dann entfernt die Einheit 1104 somit den Balken 1, und es ergibt sich ein einziger Zwischenraum, der am Punkt 4 aufhört. Ist jedoch der Balken 1 nicht schmaler als der Zwischenraum 2, dann entfernt die Einheit 1104 den Zwischenraum 2, so dass ein einziger Zwischenraum entsteht, der am Punkt 3 endet.
  • Betrachtet man wiederum 11, dann schickt die Einheit 1106, nachdem die Einheit 1104 das schwellwertverarbeitete Signal gefiltert hat, das gefilterte Signal an den Signalgemischdekoder 110, welcher das gefilterte Signal nach üblichem Balkencodesymboldekodiermethoden dekodiert.
  • Signalgemischdekodierung
  • Der Signalgemischdekodierer 110 dekodiert das gefilterte Signalgemisch, welches die Schwellwertschaltung 108 geliefert hat, unter Verwendung üblicher Balkencodesymbol-Dekodierverfahren. Der Dekodierer 110 kann so ausgelegt werden, dass er irgendeine Symbologie, wie etwa den Code 128, den Code 39 oder den verschachtelten Code 2 aus 5 dekodiert.
  • Wenn Code 128-Balkencodesymbole dekodiert werden, dann führt der Dekodierer 110 übliche Messungen von gleicher Kante zu gleicher Kante durch, wie es in der bereits verwendeten US-Patentschrift 5,343,028 im Abschnitt "Determining Character Choices from Subpixel Interpolation Results" beschrieben ist. Der Dekodierer 110 berechnet die Standardwerte t1, t2, t3 und t4, tastet eine Abbildungstabelle ab, und führt Code 128-Prüfsummenberechnungen durch, um die Dekodierung aller drei Zeichensätze des Code 128 zu unterstützen.
  • Es sei nun 14 betrachtet, welche ein Flussdiagramm des Prozesses zeigt, das der Signalgemischdekodierer 110 des Systems 100 ausführt, um die Zeichen eines Code 39-Balkencodesymbols zu dekodieren. Die Code 39-Symbologie basiert auf Zeichen mit 5 Balken und 4 Zwischenräumen. Beim Code 39 müssen drei der Balken/Zwischenräume breit und die anderen 6 Balken/Zwischenräume schmal sein. Außerdem muss ein Code 39-Zeichen entweder zwei breite Balken und einen breiten Zwischenraum oder drei breite Zwischenräume haben. Ein Zeichen mit exakt null, zwei oder vier breiten Zwischenräumen ist kein gültiges Code 39-Zeichen. Gleichermaßen ist ein Zeichen, welches genau einen breiten Zwischenraum, aber nicht genau zwei breite Balken hat, kein gültiges Code 39-Zeichen. Bei der Dekodierung von Code 39-Balkencodesymbolen überprüft der Dekodierer 110 fünf Balken und vier Zwischenräume des Balkencodesymbols zu einer Zeit, klassifiziert sie als breit oder schmal und dekodiert das Zeichen anhand einer Nachschlagetabelle.
  • Zur Dekodierung eines Code 39-Zeichens analysiert der Dekodierer 110 zuerst die vier Zwischenräume des Zeichens. Die Einheit 1402 in 14 berechnet einen Schwellwert für die Zwischenraumbreite des Zeichens, wobei dieser Zwischenraumbreiten-Schwellwert das Mittel der Breite des breitesten Zwischen raums und der Breite des schmalsten Zwischenraums im Zeichen ist.
  • Die Einheit 1404 klassifiziert dann jeden der vier Zwischenräume als entweder breit oder schmal durch Vergleich zur Breite jedes Zwischenraums mit dem Zwischenraumbreiten-Schwellwert. Die Einheit 1404 klassifiziert einen Zwischenraum als breit, wenn seine Breite größer als der Zwischenraum-Breiten-Schwellwert ist, andernfalls ist der Zwischenraum schmal.
  • Wenn die Einheit 1404 drei Zwischenräume als breit und einen als schmal klassifiziert, dann lässt die Einheit 1406 die Verarbeitung zur Einheit 1416 zur Dekodierung des Zeichens übergehen; andernfalls geht die Verarbeitung zur Einheit 1408 über. Bestimmt der Dekodierer 110, dass drei breite Zwischenräume und ein schmaler Zwischenraum vorliegen, dann nimmt der Dekodierer 110 an, dass alle fünf Balken schmal sind und dass das Zeichen ein gültiges Code 39-Zeichen ist.
  • Klassifiziert die Einheit 1404 einen der Zwischenräume als breit und drei als schmal, dann führt die Einheit 1408 die Verarbeitung über zur Einheit 1410; andernfalls kann das Zeichen nicht dekodiert werden. Bestimmt der Dekodierer 110, dass nicht exakt ein oder drei breite Streifen vorhanden sind, dann ist das Zeichen kein gültiges Code 39-Zeichen und kann nicht als solches dekodiert werden.
  • Bestimmt der Dekodierer 110, dass drei schmale Zwischenräume und ein breiter Zwischenraum vorliegen, dann analysiert der Dekodierer 110 die fünf Balken des Zeichens. Die Einheit 1410 berechnet einen Balkenbreiten-Schwellwert für das Zeichen, wobei der Balkenbreiten-Schwellwert der Mittelwert der Breite des breitesten Balkens und der Breite des schmalsten Balkens im Zeichen ist.
  • Die Einheit 1412 klassifiziert dann jeden der fünf Balken als entweder breit oder schmal durch Vergleich der Breite jedes Balkens mit dem Balkenbreiten-Schwellwert. Die Einheit 1412 klassifiziert einen Balken als breit, wenn seine Breite größer als der Balkenbreiten-Schwellwert ist, andernfalls ist der Balken schmal.
  • Wenn die Einheit 1412 zwei der Balken als breit und drei als schmal klassifiziert, dann führt die Einheit 1414 die Verarbeitung zur Dekodierung des Zeichens auf die Einheit 1416 über; andernfalls ist das Zeichen kein gültiges Code 39-Zeichen und kann nicht als solches dekodiert werden. Wenn der Dekodierer 110 nach der Bestimmung, dass exakt ein breiter Zwischenraum vorhanden ist, bestimmt, dass zwei breite Balken und drei schmale Balken vorhanden sind, dann nimmt der Dekodierer 110 an, dass das Zeichen ein gültiges Code 39-Zeichen ist.
  • Nach erfolgreicher Lokalisierung der drei breiten Balken-Zwischenräume und sechs schmalen Balken-Zwischenräume des Code 39-Zeichens dekodiert die Einheit 1416 das Zeichen durch Nachsuchen in einer Code 39-Nachschlagetabelle nach dem entsprechenden alphanumerischen Zeichen, zu welchem die Folge breiter und schmaler Balken und Zwischenräume gehört, die von den Einheiten 1404 und 1412 identifiziert worden sind. Der Dekodierer 110 führt auch eine Code 39-Prüfsummenanalyse durch.
  • In 14 analysiert der Dekodierer 110 die Breiten der Balken und Zwischenräume unabhängig durch Berechnung zweier unterschiedlichen Breiten-Schwellwerte, einen für die Klassifizierung von Zwischenräumen und einen für die Klassifizierung von Balken. Der Dekodierer 110 benutzt diese verschiedenen Breiten-Schwellwerte für Zwischenräume und Balken zur Verringerung von Dekodierfehlern, die durch Farbsäume des Pixelbildes entstehen können.
  • Wenn die Pixelbilder unter Verwendung üblicher Bildgebungssysteme erzeugt worden sind, dann neigen dunkle Bereiche der Bilder häufig dazu, in die hellen Bereiche auszulaufen. Durch dieses Auslaufen können die Balken in abgebildeten Balkencodesymbolen breiter und die Zwischenräume schmaler als im wirklichen Balkencodesymbol erscheinen. Manchmal können schmale Balken (d. h. ein Balken, der schmaler als im echten Balkencodesymbol ist) sogar im Pixelbild breiter erscheinen als die echte Zwischenraumbreite. Diese scheinbaren Änderungen der Breiten von Balken und Zwischenräumen können zu Fehlern beim Dekodieren des Balkencodesymbols führen. Werden beispielsweise Code 39-Symbole dekodiert, dann klassifiziert der Dekodierer 110 vorzugsweise Balken und Zwischenräume unabhängig unter Verwendung unterschiedlicher Breiten-Schwellwerte, um Dekodierfehler zu verringern, die durch solche Pixelbildsäume entstehen.
  • Der Fachmann versteht, dass diese unabhängige Klassifizierung von Balken und Zwischenräumen in Balkencodesymbolen zur Korrektur von Auslaufeffekten auch für die Dekodierung anderer Symbole als solche der Code 39-Symbologie angewandt werden können.
  • Beispielsweise benutzt der Dekodierer 110 vorzugsweise eine unabhängige Klassifizierung von Balken und Zwischenräumen für die Dekodierung verschachtelter Code 2 aus 5 (12 aus 5) Balkencodesymbolen. Bei 12 aus 5-Zeichen kodieren fünf Balken und fünf Zwischenräume zwei Dezimaldigits. Die Balken kodieren die ersten Digits, während die Zwischenräume die zweiten Digits deko dieren. Jedes Digit wird durch zwei breite Balken (oder Zwischenräume) und drei schmale Balken (oder Zwischenräume) dargestellt. Der Dekodierer 110 nimmt 13 Balken und Zwischenräume eines 12 aus 5-Symbols gleichzeitig und klassifiziert sie als breit oder schmal durch unabhängige Klassifizierung der Balken und Zwischenräume, ähnlich dem Schema unabhängiger Klassifizierung, welches der Dekodierer 110 für Code-39-Symbole ausführt. Das Ergebnis ist ein 13 Bit Wert, bei dem jedes Bit die Breite eines entsprechenden Balkens/Zwischenraums darstellt.
  • Der Dekodierer 110 sucht dann eine 12 aus 5-Nachschlagetabelle zweimal ab, einmal für die Balken und einmal für die Zwischenräume. Er benutzt nur die ersten 10 Balken/Zwischenräume (obersten 10 Bits) während der Tabellendurchsuchung. Die anderen 3 Bits können dem 12 aus 5-Stoppmustern entsprechen. Wenn die letzten 3 Bits ein gültiges Stoppmuster bilden (breiter Balken, schmaler Zwischenraum breiter Balken), dann hört die Dekodierung auf. Andernfalls werden weitere 13 Balken und Zwischenräume analysiert, wobei die ersten drei Balken und Zwischenräume die letzten drei Balken und Zwischenräume von der vorangehenden Liste sind. Der Dekodierer 110 führt auch eine 12-aus-5-Prüfsummenanalyse durch.
  • Nach der Dekodierung des schwellwertverarbeiteten Signals, gibt der Dekodierer 110 das dekodierte Signal an den Ausgangswähler 118 des Systems 100 weiter.
  • Erzeugung von Gradientensignalen für ein Balkencodesymbol
  • In 15 ist ein Flussdiagramm der Verarbeitung gezeigt, welche der Gradientensignalgenerator 112 des Systems 100 ausführt, um Weißungs- und Schwärzungsgradientensignale für ein Balkencodesymbol zu erzeugen, welches vom Symbollokalisierer 104 lokalisiert worden ist. Die Gradientensignale werden benutzt, um Übergänge zwischen Balken und Zwischenräumen (also Vorder- und Rückkanten der Balken) im Balkencodesymbol zu finden.
  • Der Generator 112 wählt Abtastlinien aus dem Satz von Reihen und Spalten im Pixelbild aus, welche das Balkencodesymbol durchkreuzen. Diese Abtastlinien sind vorzugsweise dieselben wie diejenigen, die bei dem schnellen Verfahren zur Signal-Erzeugung ausgewählt worden sind, das im Zusammenhang mit 9 erläutert worden war.
  • Für jede Abtastlinie dreht und streckt der Generator 112 die Abtastliniendaten und aktualisiert zwei eindimensionale Gradientenvektoren – einen Weißungsgradientenvektor und einen Schwärzungsgradientenvektor – und einen eindimensionalen Zählvektor, aufgrund der gestreckten und gedrehten Daten. Nachdem alle ausgewählten Abtastlinien verarbeitet worden sind, normiert der Generator die beiden Gradientenvektoren zur Erzeugung von Weißungs- und Schwärzungsgradientensignalen, glättet die Gradientensignale und überträgt die geglätteten Gradientensignale an den Gradientensignalprozessor 114 zur weiteren Verarbeitung.
  • Die Einheit 1502 wählt eine Folge von Abtastlinien aus. Sie wählt vorzugsweise dieselbe Folge von Abtastlinien, welche von der Einheit 902 des Signalgemischgenerators 900 in 9 ausgewählt worden ist. Die Einheit 1504 dreht und streckt die Daten von der derzeit ausgewählten Abtastlinie; sie führt vorzugsweise dieselbe Drehungs- und Streckungsfunktion aus, wie sie die Einheit 904 des Generators 900 ausgeführt hat. Bei einer bevorzugten Ausführungsform werden Operationen, welche beim Signalgemischgenerator 900 und beim Gradientensignalgene rator 112 gemeinsam sind (also Auswählen, Drehen und Strecken der Abtastlinien) kombiniert, um Doppelarbeit zu vermeiden.
  • Es sei wieder das Beispiel der Tabelle II betrachtet, bei welchem die Verarbeitung für jede der Abtastlinien durch die Einheit 1504 identisch mit denjenigen ist, welche die Einheit 1504, wie bereits in Zusammenhang mit 9 beschrieben, durchführt. Somit können die Listen (A) bis (F) der Tabellen III, IV und V ebenfalls benutzt werden, um den Betrieb des Gradientensignalgenerators 112 zu beschreiben.
  • Nachdem die Einheit 1504 die erste Abtastlinie gedreht und gestreckt hat, aktualisiert die Einheit 1506 den Weißungs- und Schwärzungsgradientenvektor unter Verwendung der gedrehten und gestreckten Daten. Der Weißungsgradientenvektor ist ein eindimensionaler Vektor, welcher die Größen aller Änderungen von Pixel zu Pixel, bei welchem der Pixelintensitätswert zunimmt, akkumuliert. Analog ist der Schwärzungsgradientenvektor ein eindimensionaler Vektor, welcher die Größen aller Änderungen von Pixel zu Pixel, bei denen der Pixelintensitätswert abnimmt, akkumuliert. Für jeden Gradientenvektor wird die Größe der Differenz zwischen benachbarten Bildpixeln akkumuliert und nicht die absoluten Pixelwerte selbst.
  • Die Weißungs- und Schwärzungsgradienten können in Form der ersten Ableitung der Abtastliniendaten definiert werden. Die Weißungsgradienten entsprechen denjenigen ersten Ableitungen, welche größer als Null sind, während die Schwärzungsgradienten den Größen der ersten Ableitungen, welche kleiner als Null sind, entsprechen.
  • Gemäß Tabelle III stellt Liste (1) die Weißungsgradienten für die Abtastlinie Nr. 1 und die Liste (J) den Weißungsgradien tenvektor nach Verarbeitung der Abtastlinie 1 durch die Einheit 1506 dar. Generell stellt der Weißungsgradientenvektor die Summe der entsprechenden Weißungsgradienten für alle Abtastlinien, die verarbeitet worden sind, dar. Da die Abtastlinie Nr. 1 die erste in diesem Beispiel zu verarbeitende Abtastlinie ist, sind die Weißungsgradienten der Liste (I) identisch mit dem Weißungsgradientenvektor der Liste (J).
  • Da die Intensität vom Pixel (0,0) zum Pixel (0,1) in den ursprünglichen Daten von 21 auf 23 ansteigt, sind die entsprechenden Weißungsgradienten in Liste (i) für die gerundeten Spalten 2 und 3 2. Wenn die Änderung vom vorigen Pixel zum derzeitigen Pixel im Originalbild nicht positiv ist, dann gibt es keinen Weißungsgradierenden für das derzeitige Pixel. Da beispielsweise die Intensität vom Pixel (0,1) zum Pixel (0,2) in den ursprünglichen Daten von 23 auf 22 abnimmt, sind die entsprechenden Weißungsgradienten in Liste (i) für die abgerundeten Spalten 4 und 5 Null.
  • Ähnlich stellt Liste (k) in Tabelle III die Schwärzungsgradienten für die Abtastlinie Nr. 1 dar. Dabei beispielsweise die Intensität von Pixel (0,4) zu Pixel (0,5) in den ursprünglichen Daten von 22 auf 18 abnimmt, sind die entsprechenden Schwärzungsgradienten für die abgerundeten Spalten 11 und 12 4. Wenn die Änderung vom vorigen Pixel zum derzeitigen Pixel im Originalbild nicht negativ ist, dann gibt es keinen Schwärzungsgradienten für das momentane Pixel. Da beispielsweise die Intensität vom Pixel (0,7) zum Pixel (0,8) in den ursprünglichen Daten von 4 auf 5 anwächst, sind die entsprechenden Schwärzungsgradienten für die gerundeten Spalten 17 und 18 0. Liste (L) in Tabelle III stellt den Schwärzungsgradientenvektor (also die akkumulierten Schwärzungsvektoren) nach Verarbeitung der Abtastlinie Nr. 1 durch die Einheit 1506 dar.
  • Die Einheit 1506 aktualisiert auch einen eindimensionalen Zählvektor, der identisch ist mit dem von der Einheit 908 des Signalgemischgenerators 900 erzeugten Zählvektor, wie bereits im Zusammenhang mit 9 beschrieben. Damit gilt die Liste (H) der Tabellen III, IV und V auch. für die Beschreibung des gradierenden Signalgenerators 112.
  • Nachdem die Einheit 1506 sowohl die gradierenden Vektoren wie auch den Zählvektor für die derzeitige Abtastlinie aktualisiert haben, bestimmt die Einheit 1508, ob die derzeitige Abtastlinie die letzte für das Balkencodesymbol ist. Ist dies nicht der Fall, dann kehrt die Verarbeitung zur Einheit 1502 zurück, um die nächste Abtastlinie auszuwählen. Andernfalls geht die Verarbeitung 1510 über.
  • Im Beispiel der Tabelle II kehrt die Verarbeitung, nachdem die Abtastlinie Nr. 1 verarbeitet ist, zur Einheit 1502 zurück, um die Abtastlinie Nr. 2 als neue Abtastlinie auszuwählen. Die Tabelle IV stellt die Ergebnisse der Verarbeitung der Abtastlinie Nr. 2 dar. Die Listen (I) und (K) der Tabelle IV stellen die Weißungs- bzw. Schwärzungsgradienten für die Abtastlinie Nr. 2 dar. Die Listen (J) und (L) stellen die aktualisierten Gradientenvektoren dar. Die Einheit 1506 aktualisiert die Gradientenvektoren durch "addieren" der Gradientenvektoren für die Abtastlinie Nr. 2 zu den Gradientenvektoren der Tabelle III. Ähnlich stellt die Tabelle V die Ergebnisse der Verarbeitung der Abtastlinie Nr. 3 dar.
  • Nach der Verarbeitung der letzten Abtastlinie lässt die Einheit 1508 die Verarbeitung auf die Einheit 1510 übergehen, welche die Weißungs- und Schwärzungsgradientenvektoren normiert, indem sie die Elemente jedes Gradientenvektors durch die entsprechenden Elemente des Zählvektors dividiert.
  • Die Tabellen VII und VIII stellen die Ergebnisse der Verarbeitung der Weißungs- bzw. Schwärzungsgradientenvektoren dar. Die Listen (E), (H) und (J) der Tabelle VII und die Listen (E), (H) und (L) der Tabelle VIII sind identisch mit den entsprechenden Listen der Tabelle 5. Die Liste (O) der Tabelle 7 stellt den Weißungsgradientenvektor dar, welcher das Ergebnis der Normierung des Weißungsgradientenvektors der Liste (J) durch die Einheit 510 ist. Die Einheit 510 bestimmt jedes Element in der Liste (O) durch dividieren des entsprechenden Elementes der Liste (J) durch das entsprechende Element (H). Gleichermaßen stellt die Liste (T) der Tabelle VIII das Schwärzungsgradientensignal dar, welches sich durch die Normierung des Schwärzungsgradientenvektors der Liste (L) durch die Einheit 1510 ergibt.
  • Tabelle VII. Verarbeitung des Weißungsgradienten
    Figure 00490001
  • Tabelle VIII. Verarbeitung des Schwärzungsgradienten
    Figure 00500001
  • Nachdem die Einheit 1510 die Gradientenvektoren normiert hat, glättet die Einheit 1512 die resultierenden Weißungs- und Schwärzungsgradientensignale. Das von der Einheit 1512 verwendete Glättungsfilter hängt vorzugsweise von der Oversamplingrate ab, die zum Strecken der Abtastliniendaten verwendet worden ist. Tabelle IX zeigt die bevorzugten Filterparameter für verschiedene Oversamplingraten.
  • Tabelle IX
    Figure 00510001
  • Die Liste (P) der Tabelle VII stellt das Ergebnis der Glättung des Weißungsgradientensignals (O) auf Grundlage einer Oversamplingrate von 3 da. Für eine Oversamplingrate von 3 wird jedes Element S1 im geglätteten Weißungsgradientensignal der Liste (P) berechnet unter Verwendung
    Figure 00510002
    wobei Wi das Element im Weißungsgradientensignal der Liste (U) ist, welches dem Element Si entspricht, Wi–1 das vorangehende Element in der Liste (O) und Wi+1 das nächste Element in der Liste (O). Ähnlich stellt die Liste (U) in Tabelle VIII die Ergebnisse der Glättung des Schwärzungsgradientensignals der Liste (T) bei einer Oversamplingrate von 3 dar.
  • Nachdem die Einheit 512 die beiden Gradientensignale geglättet hat, überträgt die Einheit 514 die geglätteten Gradientensignale zum Gradientensignalprozessor 114 des Systems 100. Der Fachmann versteht, dass die Glättung durch die Schaltung 1512 ein optionaler Verarbeitungsschritt ist.
  • Verarbeitung und Dekodierung der geglätteten Gradientensignale
  • 16 zeigt ein Flussdiagramm der Verarbeitung, welche der Gradientensignalprozessor 114 des Systems 100 ausführt, um die vom Generator 112 erzeugten Weißungs- und Schwärzungsgradientensignale zu glätten. Die Weißungs- und Schwärzungsgradientensignale stellen die Orte der Schwarzweiß- bzw. Weißschwarzübergänge im Balkencodesymbol dar, d. h. die Vorder- bzw. Rückkanten der Balken. Der Prozessor 114 lokalisiert die Helldunkelübergänge in den Gradientensignalen und erzeugt aus diesen Übergangsstellen ein einziges eindimensionales rekonstruiertes Signal. Er überträgt dieses rekonstruierte Signal zum Gradientensignaldecodierer 116, welcher das Signal nach üblichen Balkencode-Dekodierverfahren decodiert.
  • Der Prozessor 114 segmentiert die beiden Gradientensignale, lokalisiert die Zentroide dieser Signalsegmente und rekonstruiert ein einziges binäres Signal aus den Lagen der Zentroide. Bei einer (nicht gezeigten) Alternative wählt der Prozessor 114 die Spitzenwerte der beiden Gradientensignale als Stellen der Übergänge des rekonstruierten Signals aus.
  • Die Einheit 1602 der 16 erhält die geglätteten Weißungs- und Schwärzungsgradientensignale vom Generator 112 und segmentiert sie in individuelle Segmente. Jedes Segment beginnt mit einem lokalen Minimum im Gradientensignal und endet mit dem nächsten lokalen Minimum. Jedes Segment enthält daher ein einziges lokales Maximum. In Tabelle VII identifiziert die Liste (O) die Segmente im geglätteten Weißungsgradientensignal der Liste (P). Ähnlich identifiziert die Liste (V) in Tabelle VIII die Segmente im geglätteten Schwärzungsgradientensignal der Liste (U).
  • Um irrtümliche Segmentierungen minimal zu halten, benutzt die Einheit 1602 vorzugsweise einen Signifikanzwerttest, um die lokalen Minima zu bestimmen, welche die Segmente in den Gradientensignalen definieren, wobei der Signifikanzwerttest ähnlich dem bereits im Zusammenhang mit 11 beschriebenen ist.
  • Nachdem die Einheit 1602 die geglätteten Gradientensignale segmentiert hat, bestimmt die Einheit 1604 die Masse jedes Segments als Summe der geglätteten Gradientenwerte für dieses Segment. Die Liste (R) der Tabelle VII stellt die Massen der Weißungsgradientensignale dar, welche in Liste (O) identifiziert sind. Ähnlich stellt die Liste (W) der Tabelle VIII die Massen der Schwärzungsgradientensegmente dar, die in Liste (V) identifiziert sind. So hat beispielsweise das Segment Nr. 3 in Tabelle VII eine Masse von (0,1 + 0,2 + 0,2 + 0,1) der 0,6.
  • Nachdem die Einheit 1604 die Masse jedes Segments bestimmt hat, lokalisiert die Einheit 1606 die gewichteten Zentroide derjenigen Segmente, welche genügend Masse haben. Die Einheit 1606 ignoriert diejenigen Segmente, deren Masse unter einem bestimmten Massenschwellwert liegen und zeigt damit an, dass sie eine ungenügende Masse haben, Der Massenschwellwert wird vorzugsweise so angegeben, dass er einen Bruchteil von Beispielen, dass er einen Bruchteilen von beispielsweise einem Achtel des Produktes der Oversamplingrate mit der erwarteten Masse eines schmalen Balkens oder Zwischenraums im ursprünglichen Pixelbild equivalent ist.
  • Rauschen im Pixelbild kann zu zufälligen Segmenten in den Gradientensignalen führen. Wenn das Bildrauschen nicht zu groß ist, haben die zufälligen Segmente Massen, die typischerweise unter den Massen der wirklichen Segmente liegen (d. h. derjenigen, welche den wahren Hell/Dunkel-Übergängen entsprechen). In diesem Fall kann die Einheit 1606 benutzt werden, um die zufälligen Segmente "herauszufiltern".
  • In Tabelle VII sind die Segmente Nr. 1, 2, 3 und 5 zurückgewiesen, weil sie Massen haben, die kleiner als der angegebene Massenschwellwert von 20 ist. Die Segmente Nr. 1 und 3 in Tabelle VIII werden ebenfalls zurückgewiesen, weil sie gleichermaßen Massen unterhalb des Massenschwellwertes haben.
  • Nach dem Eliminieren der Elemente mit geringer Masse lokalisiert die Einheit 1606 die gewichteten Zentroide der verbleibenden Segmente. Das gewichtete Zentroid eines Segmentes ist die Stelle innerhalb des Segmentes, welche einem bestimmten Prozentsatz der Masse entspricht. Beispielsweise entspricht ein gewichtetes Zentroid auf Basis von 50% dem Zentrum der Masse jedes Segmentes. Ein gewichtetes Zentroid auf Basis von 40% entspricht der Stelle innerhalb des Segmentes, bei der sich 40% der Masse links und 60% der Masse rechts befinden.
  • In Tabelle VII identifiziert "1" in Liste (S) den Ort des gewichteten Zentroids des Segments Nr. 4, wobei 50% der ausgewählte Prozentsatz des gewichteten Zentroids ist. Ähnlich identifiziert Liste (X) in Tabelle VIII die Stellen der gewichteten Zentroide der Segmente Nr. 1 und 4.
  • Bei einer (nicht gezeigten) Alternative werden unterschiedliche Prozentsätze gewichteter Zentroide benutzt, um die Zentroide in den Weißungs- und Schwärzungsgradientensegmenten zu lokalisieren. Da schwarze Balken dazu neigen, in weiße Zwischenräume in den Balkencodesignalbildern "auszulaufen", neigen in den Bildern die Balken dazu, breiter zu erscheinen und die Zwischenräume schmaler. Verwendet man einen Weißungszentroidprozentsatz, der kleiner ist als. der Schwärzungszentroidprozentsatz, dann lassen sich diese Auslaufeffekte korrigieren. Die genauen Prozentsätze gewichteter Zentroide können impirisch auf Grundlage von Tests gewählt werden, die mit den Bildern bekannter Balkencodesymbole durchgeführt worden sind.
  • Nachdem die Einheit 1606 die Weißungs- und Schwärzungssegment-Zentroide lokalisiert hat, rekonstruiert die Einheit 1608 ein einziges eindimensionales Signal durch Verschachtelung der Zentroidenorte von den beiden Gradientensignalen. Das Zentroid jedes Segmentes vom geglätteten Schwärzungsgradientensignal entspricht der Vorderkante eines Balkens im Balkencodesymbol. Ähnlich entspricht das Zentroid in jedem Segment vom geglätteten Weißungsgradientensignal der Rückkante eines Balkens im Balkencodesymbol.
  • Die Tabelle X zeigt die Ergebnisse der Verschachtelung der Weißungs- und Schwärzungssegment-Zentroide der Tabellen VII und VIII durch die Einheit 1608. Die Listen (E), (S) und (X) in Tabelle X sind identisch mit den entsprechenden Listen in den Tabellen VII und VIII. Die Liste (Y) der Tabelle X entspricht dem eindimensionalen rekonstruierten Signal, welches die Einheit 1608 erzeugt hat. Das rekonstruierte Signal der Liste (Y) der Tabelle X ist identisch mit dem Schwellwertsignal der Liste (M) der Tabelle VI und zeigt an, dass die Verarbeitung des Gradientensignals vom Generator 112 und Prozessor 114 des Systems dasselbe Ergebnis bringt wie die Verarbeitung des Signalgemischs vom Generator 900 und der Schwellwertschaltung 108 des Systems 100.
  • Tabelle X. Rekonstruktion segmentierter Signale
    Figure 00560001
  • Hat das rekonstruierte Signal zwei aufeinander folgende Vorderbalkenkanten, dann ist entweder eine Rückbalkenkante verloren gegangen, oder eine extra Vorderbalkenkante wurde eingefügt. Wenn ähnlich das rekonstruierte Signal zwei aufeinander folgende Rückbalkenkanten hat, dann ist entweder eine Balkenvorderkante verloren gegangen, oder eine Extrabalkenrückkante eingefügt worden. Wenn die wahren Balkenkanten fehlen, dann sollte das von der Einheit 1602 durchgeführte Segmentierungsverfahren empfindlicher für kleinere Gradienten gemacht werden. Sind zufällige Balkenkanten eingefügt worden, dann sollte das Segmentierungsverfahren weniger empfindlich gemacht werden, um größeren Änderungen im Gradientensignal angepasst zu werden, ohne fälschlicherweise ein Segment in zwei aufzuspalten. Die Empfindlichkeit des Segmentierungsverfahrens lässt sich steuern durch Veränderung des angegebenen Massenschwellwertes, den die Einheit 1606 zur Bestimmung benutzt, ob die Segmente genug Masse haben.
  • Nachdem die Einheit 1608 ein rekonstruiertes Signal erzeugt hat, überträgt die Einheit 1610 das rekonstruierte Signal zum Gradientensignaldekodierers 116. Bei einer bevorzugten Ausführungsform ist die Verarbeitung durch den Dekodierer 116 identisch mit derjenigen des Signalgemischdekoders 110, der bereits in dem Abschnitt Signalgemischdekodierung beschrieben worden ist. Nach dem Dekodieren des Balkencodesymbols überträgt der Dekodierer 116 das dekodierte Signal zum Ausgangswähler 118.
  • Wie bereits im Zusammenhang mit dem Beispiel der Tabelle II beschrieben, werden bei einer bevorzugten Ausführungsform der Erfindung die ursprünglichen Pixelintensitätswerte wiederholt, um die Zwischenräume zwischen den gerundeten Spalten aufzufüllen, welche aus dem Drehen, Strecken und Runden der ursprüng lichen Spalten entstanden sind. Bei einer alternativen (nicht dargestellten) bevorzugten Ausführungsform werden die ursprünglichen Pixelintensitätswerte entsprechend der Oversamplingrate wiederholt.
  • Beispielsweise würde gemäß Tabelle III bei einer Oversamplingrate von 3 das System 100 das ursprüngliche Pixel (0.0) so drehen und strecken, dass sein Intensitätswert dreimal benutzt werden würde, um die Elemente des Vektorgemischs entsprechend den gerundeten Spalten 0,1 und 0,2 zu aktualisieren. Ähnlich würde das System 100 das ursprüngliche Pixel (0,1) so drehen und strecken, dass sein Intensitätswert dreimal benutzt werden würde, um die Elemente des Vektorgemischs entsprechend den gerundeten Spalten 2,3 und 4 zu aktualisieren.
  • Die Intensitätswerte der beiden ursprünglichen Pixel (0,0) und (0,1) der Abtastlinienummer 1 werden zum aktualisieren der Elemente des Vektorgemischs entsprechend der gerundeten Spalte 2 benutzt. Anstelle die Zwischenräume zwischen den gerundeten Spalten auszufüllen, werden bei dieser Ausführungsform die ursprünglichen Pixelwerte entsprechend der Oversamplingrate wiederholt und es können "Überlappungen" auftreten. In diesem Beispiel wird das Element des Zählvektors, entsprechend der gerundeten Spalte 2, zweimal aktualisiert, um diesen Überlappungseffekt wiederzugeben.
  • Das System 100 kann als Hardware, Software oder eine Kombination von Hardware und Software implementiert werden. Bei einer bevorzugten Ausführungsform wird das System 100 als Software realisiert, die auf üblichen Prozessoren läuft, wie etwa aus der Intelfamilie 80X86 oder der Motorola 680X0.
  • Der Fachmann versteht, dass die bevorzugten Ausführungsformen des Systems 100 so ausgelegt werden können, dass sie Balkencodesymbole in binär und/oder Grauwertbildern lokalisieren und dekodieren. Der Fachmann versteht weiterhin, dass das System 100 vorzugsweise als parametergesteuert ausgelegt wird, wo die Werte der verschiedenen Parameter je nach der speziellen Anwendung geändert werden können. Es versteht sich ferner, dass die Auswahl bestimmter Parameterwerte aufgrund empirischer Analyse aus der Verarbeitung bekannter Abtastbilder erfolgen kann. Weiterhin versteht es sich, dass Änderungen von Details, Materialien und Anordnungen, welche beschrieben und dargestellt wurden, um die Natur dieser Erfindung zu erläutern, vom Fachmann verändert werden können, ohne dass er von Prinzip und Umfang der Erfindung abweicht, wie sie in den folgenden Ansprüchen zum Ausdruck kommt.

Claims (28)

  1. Verfahren zur Verarbeitung eines Reihen und Spalten von Pixeln enthaltenden Bildes eines Balkencodesymbols zur Decodierung eines Zeichens mit den Schritten: a) für eine Mehrzahl von Abtastlinien (1, 2, 3, 4, 5, 6) von Pixeln des Pixelbildes, wobei jedes Pixel durch eine Angabe gekennzeichnet ist, zu welcher Reihe und Spalte im Pixelbild das Pixel gehört, wird die Abtastlinie gewählt (1502); b) für jedes Pixel in der gewählten Abtastlinie werden ein oder mehrere gedrehte und gestreckte Spalten- und Reihenangaben (D, E) für das Pixel aufgrund der Orientierung des Symbols bezüglich des Pixelbildes und aufgrund einer Überabtastrate bestimmt (1504); c) für jede der gedrehten und gestreckten Spalten- oder Reihenangaben (E) wird ein Element eines Weißungsgradienten (I) oder ein Element eines Schwärzungsgradienten (K) aufgrund der Größe des Intensitätsunterschiedes zwischen benachbarten Pixeln in der Abtastlinie erzeugt, wobei das Weißungsgradientenelement dann erzeugt wird, wenn der Unterschied wächst, und das Schwärzungsgradientenelement erzeugt wird, wenn der Unterschied abnimmt; d) jedes Element des Weißungsgradienten (I) wird zu einem entsprechenden Element eines Weißungsgradientenvektors (J) summiert (1506), und jedes Element des Schwärzungsgradienten (K) wird zu einem entsprechenden Element eines Schwärzungsgradientenvektors (L) summiert, und ein entsprechendes Element eines Zählvektors (H) wird in Übereinstimmung mit der Anzahl von Malen, die ein entsprechendes Element des Weißungs- oder Schwärzungsgradientenvektors summiert worden ist, erhöht; e) die Schritte a) bis d) werden für die nächste Abtastlinie der Mehrzahl von Abtastlinien wiederholt (1508); f) für jede gedrehte und gestreckte Reihen- oder Spaltenangabe wird ein Element eines Weißungsgradientensignals (O) und ein Element eines Schwärzungsgradientensignals (T) bestimmt durch Dividieren der entsprechenden Elemente des Weißungsgradientenvektors (J) bzw. des Schwärzungsgradientenvektors (L) durch das entsprechende Element des Zählvektors (H); g) das Weißungsgradientensignal (O) und das Schwärzungsgradientensignal (T) werden verarbeitet zur Erzeugung eines 1-dimensionalen rekonstruierten Signals (Y) aufgrund von Dunkel/Hell- und Hell/Dunkel-Übergangsstellen, welche durch das Weißungsgradientensignal (O) und das Schwärzungsgradientensignal (T) dargestellt werden; und h) aufgrund des 1-dimensionalen rekonstruierten Signals wird das Zeichen bestimmt.
  2. Verfahren nach Anspruch 1, bei welchem Schritt f) ein Glätten (1512) des Weißungsgradientensignals und des Schwärzungsgradientensignals enthält.
  3. Verfahren nach Anspruch 2, bei welchem die Glättung zumindest teilweise auf der Überabtastrate basiert.
  4. Verfahren nach Anspruch 1, bei welchem die Abtastlinien um mehr als ein Pixel voneinander getrennt sind.
  5. Verfahren nach Anspruch 1, bei welchem mindestens eine der Abtastlinien nicht das gesamte Symbol durchkreuzt.
  6. Verfahren nach Anspruch 1, bei welchem Schritt g) umfasst: g1) Segmentieren (1602) des Weißungsgradientensignals (O) und des Schwärzungsgradientensignals (T) in individuelle Segmente; g2) Bestimmung (1604) der Masse (R, W) jedes Segmentes durch Lokalisieren des gewichteten Flächenschwerpunktes jedes Segmentes, dessen Masse nicht kleiner als ein spezifizierter Massenschwellwert ist; g3) wobei die Hell/Dunkel- und Dunkel/Hell-Übergänge, aus denen das 1-dimensionale rekonstruierte Signal erzeugt wird, durch die gewichteten Flächenschwerpunkte definiert sind.
  7. Verfahren nach Anspruch 6, bei welchem der Segmentierungsschritt für jedes Gradientensignal die Bestimmung lokaler Minima in dem Gradientensignal und die derartige Segmentierung jedes Gradientensignals enthält, dass jedes Segment an einem bestimmten lokalen Minimum beginnt und endet.
  8. Verfahren nach Anspruch 7, bei welchem der Schritt der Bestimmung der lokalen Minima die Benutzung eines Signifikanzwerttestes enthält.
  9. Verfahren nach Anspruch 6, bei welchem der spezifizierte Massenschwellwert ein Produkt der Überabtastrate mit der erwarteten Masse eines schmalen Balkens oder Abstands im Pixelbild ist.
  10. Verfahren nach Anspruch 9, bei welchem der Schritt der Lokalisierung des gewichteten Flächenschwerpunkts jedes Segments die Lokalisierung der Stelle innerhalb des Segments, welche einem spezifizierten Prozentsatz der Masse des Segments entspricht, enthält.
  11. Verfahren nach Anspruch 10, bei welchem der spezifizierte Prozentsatz, der benutzt wird zur Lokalisierung der gewichteten Flächenschwerpunkte der Segmente des Weißungsgradientensignals, geringer als der spezifizierte Prozentsatz ist, der zur Lokalisierung der gewichteten Flächenschwerpunkte der Segmente des Schwärzungsgradientensignals benutzt wird.
  12. Verfahren nach Anspruch 6, bei welchem der Schritt der Erzeugung des 1-dimensionalen rekonstruierten Signals das Verschachteln der gewichteten Flächenschwerpunkte der Segmente des Weißungsgradientensignals mit den gewichteten Flächenschwerpunkten der Segmente des Schwärzungsgradientensignals enthält.
  13. Verfahren nach Anspruch 6, weiterhin enthaltend: Bestimmung, ob in dem 1-dimensionalen rekonstruierten Signal Fehler auftreten; und falls bestimmt wird, dass Fehler in dem 1-dimensionalen rekonstruierten Signal auftreten, Wiederholung der Schritte g2) und g3) mit unterschiedlichen spezifizierten Massenschwellwerten.
  14. Verfahren nach Anspruch 1, bei welchem Schritt g) umfasst: Lokalisieren der Spitzenwerte im Weißungsgradientensignal und im Schwärzungsgradientensignal, wobei die Hell/Dunkel- und Dunkel/Hell-Übergänge, aus denen das 1-dimensionale rekonstruierte Signal erzeugt wird, durch die festgestellten Spitzenwerte im Weißungsgradientensignal bzw. im Schwärzungsgradientensignal definiert werden.
  15. Vorrichtung zur Verarbeitung eines Reihen und Spalten von Pixeln aufweisenden Pixelbildes eines Balkencodesignals zum Decodieren eines Zeichens mit a) einer Vorrichtung zum Auswählen der Abtastzeile aus einer Mehrzahl von Abtastlinien (1, 2, 3, 4, 5, 6) von Pixeln des Pixelbildes, wobei jedes Pixel gekennzeichnet ist durch eine Angabe, zu welcher Reihe und Spalte im Pixelbild das Pixel gehört, b) einer Vorrichtung, für jedes Pixel in der ausgewählten Abtastzeile, zur Bestimmung einer oder mehrerer gedrehter und gestreckter Spalten- oder Reihenangaben (D, E) für das Pixel aufgrund der Orientierung des Symbols bezüglich des Pixelbildes und aufgrund einer Überabtastrate; c) einer Vorrichtung, für jede der gedrehten und gestreckten Spalten- und Reihenangaben (E), zur Erzeugung eines Elementes eines Weißungsgradienten (I) oder eines Elementes eines Schwärzungsgradienten (K) aufgrund der Größe des Intensitätsunterschiedes zwischen zwei benachbarten Pixeln der ausgewählten Abtastlinien, wobei das Weißungsgradientenelement erzeugt wird, wenn der Unterschied sich vergrößert, und das Schwärzungsgradientenelement erzeugt wird, wenn der Unterschied sich verringert; d) einer Vorrichtung zum Summieren jedes Elementes des Weißungsgradienten (I) zu einem entsprechenden Element eines Weißungsgradientenvektors (J) und Summieren jedes Elementes des Schwärzungsgradienten (K) zu einem entsprechenden Element eines Schwärzungsgradientenvektors (L) und zur Erhöhung eines entsprechenden Elementes eines Zählvektors (H) in Übereinstimmung mit der Anzahl von Malen, um welche das betreffende Element des Weißungs- oder Schwärzungsgradientenvektors summiert worden ist; e) einer Vorrichtung zur Wiederholung der in den Merkmalen a) bis d) angegebenen Operationen für die nächste Abtastzeile der Mehrzahl von Abtastzeilen; f) einer Vorrichtung, für jede gedrehte und gestreckte Reihen- oder Spaltenangabe, zur Bestimmung eines Elementes eines Weißungsgradientensignals (O) und eines Elementes eines Schwärzungsgradientensignals durch Dividieren des entsprechenden Elementes des Weißungsgradientenvektors (J) bzw. des Schwärzungsgradientenvektors (L) durch das entsprechende Element des Zählvektors; g) einer Vorrichtung zur Verarbeitung des Weißungsgradientensignals (O) und des Schwärzungsgradientensignals (T) zur Erzeugung eines 1-dimensionalen rekonstruierten Signals (Y) aufgrund der Dunkel/Hell- und Hell/Dunkel-Übergangsstellen, welche durch das Weißungsgradientensignal (O) und das Schwärzungsgradientensignal (T) dargestellt werden; und h) einer Vorrichtung zur Bestimmung des Zeichens aufgrund des 1-dimensionalen rekonstruierten Signals.
  16. Vorrichtung nach Anspruch 15, bei welcher die Vorrichtung (F) eine Glättungseinrichtung für das Weißungsgradientensignal und das Schwärzungsgradientensignal enthält.
  17. Vorrichtung nach Anspruch 16, bei welchem die Glättungseinrichtung zumindest teilweise auf Grundlage der Überabtastrate arbeitet.
  18. Vorrichtung nach Anspruch 15, bei welcher die Abtastlinien um mehr als ein Pixel voneinander getrennt sind.
  19. Vorrichtung nach Anspruch 15, bei welcher mindestens einige der Abtastlinien nicht das gesamte Symbol durchkreuzen.
  20. Vorrichtung nach Anspruch 15, bei welcher die Vorrichtung (g) enthält: g1) eine Segmentierungsvorrichtung für das Weißungsgradientensignal und das Schwärzungsgradientensignal in individuelle Segmente; g2) eine Vorrichtung zur Bestimmung der Masse jedes Segments durch Lokalisieren des gewichteten Flächenschwerpunktes jedes Segments, dessen Masse nicht kleiner als ein spezifizierter Massenschwellwert ist; g3) wobei die Hell/Dunkel- und Dunkel/Hell-Übergänge, aus welchen das 1-dimensionale rekonstruierte Signal erzeugt wird, durch die gewichteten Flächenschwerpunkte definiert ist.
  21. Vorrichtung nach Anspruch 20, bei welcher die Segmentierungsvorrichtung eine Einrichtung zur Bestimmung lokaler Minima im Gradientensignal und zur derartigen Segmentierung jedes Gradientensignals enthält, dass jedes Segment mit einem bestimmten lokalen Minimum beginnt und endet.
  22. Vorrichtung nach Anspruch 21, bei welcher die Einrichtung zur Bestimmung der lokalen Minima mit einem Signifikanzwerttest arbeitet.
  23. Vorrichtung nach Anspruch 20, bei welcher der spezifizierte Massenschwellwert ein Produkt der Überabtastrate mit der erwarteten Masse eines schmalen Balkens oder Zwischenraums im Pixelbild ist.
  24. Vorrichtung nach Anspruch 23, bei welcher die Einrichtung zur Lokalisierung des gewichteten Massenschwerpunkts jedes Segments eine Einrichtung zur Lokalisierung der Stelle innerhalb des Segments, welche einem vorbestimmten Prozentsatz der Masse des Segments entspricht, enthält.
  25. Vorrichtung nach Anspruch 24, bei welcher der spezifizierte Prozentsatz, der zur Lokalisierung der gewichteten Massenschwerpunkte der Segmente des Weißungsgradientensignals benutzt wird, kleiner ist als der spezifizierte Prozentsatz, der zur Lokalisierung der gewichteten Flächenschwerpunkte der Segmente des Schwärzungsgradientensignals benutzt ist.
  26. Vorrichtung nach Anspruch 20, bei welcher die Einrichtung zur Erzeugung des 1-dimensionalen rekonstruierten Signals eine Einrichtung zur Verschachtelung der gewichteten Flächenschwerpunkte der Segmente des Weißungsgradientensignals mit den gewichteten Flächenschwerpunkten der Segmente des Schwärzungsgradientensignals enthält.
  27. Vorrichtung nach Anspruch 20, weiterhin enthaltend: eine Einrichtung zur Bestimmung, ob in dem 1-dimensionalen rekonstruierten Signal Fehler vorliegen; und eine Vorrichtung zum Betreiben der Vorrichtungen g2) und g3) mit einem anderen spezifizierten Massenschwellwert, wenn festgestellt wird, dass in dem 1-dimensionalen rekonstruierten Signal Fehler vorliegen.
  28. Vorrichtung nach Anspruch 15, bei welchem die Einrichtung g) eine Einrichtung zum Lokalisieren der Spitzenwerte im Weißungsgradientensignal und im Schwärzungsgradientensignal umfasst, wobei die Hell/Dunkel- und Dunkel/Hell-Übergänge, aus denen das 1-dimensionale rekonstruierte Signal erzeugt wird, definiert sind durch die lokalisierten Spitzen im Weißungsgradientensignal bzw. im Schwärzungsgradientensignal.
DE69433492T 1993-01-29 1994-08-29 Verfahren und Vorrichtung zum Dekodieren von Streifencodes durch unabhängige Analyse von Streifen und Zwischenräumen Expired - Lifetime DE69433492T2 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US08/011,458 US5352878A (en) 1993-01-29 1993-01-29 Method and apparatus for decoding bar code symbols using independent bar and space analysis
EP94929112A EP0783739A1 (de) 1993-01-29 1994-08-29 Verfahren und vorrichtung zum dekodieren von balkencode-symbolen durch unabhängige balken- und abstandsanalyse
EP98111652A EP0877334B1 (de) 1993-01-29 1994-08-29 Verfahren und Vorrichtung zum Dekodieren von Streifencodes durch unabhängige Analyse von Streifen und Zwischenräumen
PCT/US1994/009704 WO1996007155A1 (en) 1993-01-29 1994-08-29 Method and apparatus for decoding bar code symbols using independent bar and space analysis

Publications (2)

Publication Number Publication Date
DE69433492D1 DE69433492D1 (de) 2004-02-19
DE69433492T2 true DE69433492T2 (de) 2004-10-28

Family

ID=41110784

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69433492T Expired - Lifetime DE69433492T2 (de) 1993-01-29 1994-08-29 Verfahren und Vorrichtung zum Dekodieren von Streifencodes durch unabhängige Analyse von Streifen und Zwischenräumen

Country Status (9)

Country Link
US (1) US5352878A (de)
EP (4) EP0785521B1 (de)
JP (1) JP2832645B2 (de)
AT (2) ATE257962T1 (de)
AU (1) AU7828794A (de)
CA (1) CA2191433C (de)
DE (1) DE69433492T2 (de)
ES (2) ES2214662T3 (de)
WO (1) WO1996007155A1 (de)

Families Citing this family (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5412196A (en) * 1994-04-01 1995-05-02 United Parcel Service Of America, Inc. Method and apparatus for decoding bar code images using multi-order feature vectors
US6543691B1 (en) * 1995-01-03 2003-04-08 Jerome H. Lemelson Method and apparatus for encoding and decoding bar codes with primary and secondary information and method of using such bar codes
US5777309A (en) * 1995-10-30 1998-07-07 Intermec Corporation Method and apparatus for locating and decoding machine-readable symbols
US5804802A (en) * 1996-02-14 1998-09-08 United Parcel Service Of America, Inc. Two-way data communication manager
US5963660A (en) * 1996-09-26 1999-10-05 The Boeing Company Method and apparatus for detecting and measuring laps and gaps in composite materials
US5767497A (en) * 1996-12-04 1998-06-16 United Parcel Service Of America, Inc. Method and apparatus for decoding bar code symbols using ratio analysis of module size
US6366696B1 (en) * 1996-12-20 2002-04-02 Ncr Corporation Visual bar code recognition method
DE19724711B4 (de) * 1997-06-11 2004-09-16 Sick Ag Verfahren und Vorrichtung zum Erkennen und Lesen eines an einem Objekt vorgesehenen Strichcodes
US5984078A (en) 1997-08-04 1999-11-16 United Parcel Service Of America, Inc. Automated shuttle sorter for conveyors
US6758391B1 (en) 1997-11-18 2004-07-06 The Code Corporation Internet access of goods and services using graphical codes
DE69705054T2 (de) * 1997-12-24 2002-01-24 Datalogic Spa Verfahren zur Erkennung eines Strichkodes auf einer Abtastzeile und Vorrichtung zur Erkennung und Dekodierung eines Strichkodes
US5969326A (en) * 1998-01-14 1999-10-19 Intermec Ip Corp. Method and apparatus of autodiscriminating in symbol reader employing prioritized and updated table of symbologies
US6102295A (en) * 1998-01-14 2000-08-15 Intermec Ip Corp. Method and apparatus for decoding symbols by declaring erasures of element characteristics
US7147161B2 (en) 1998-06-12 2006-12-12 Symbol Technologies, Inc. Digitizing bar code symbol data
US6328213B1 (en) * 1998-06-12 2001-12-11 Symbol Technologies, Inc. Method of processing an analog electrical signal containing information representative of reflected light from coded indicia, wherein the electrical signal contains edge transitions
US6494376B1 (en) 1998-09-14 2002-12-17 Psc Scanning, Inc. Compensation for scan line variations in a bar code scanner system
US6585157B2 (en) 1998-09-14 2003-07-01 Psc Scanning, Inc. Symbology determination to aid decoding in a bar code scanning system
EP1114390B1 (de) 1998-09-14 2015-08-26 Datalogic ADC, Inc. System und verfahren zur rekonstruktion strichkodierter etiketten
US6513714B1 (en) 1998-09-14 2003-02-04 Psc Scanning, Inc. Character reconstruction and element level processing in bar code scanning system
US6454168B1 (en) 1998-09-14 2002-09-24 Psc Scanning, Inc. Correlation and stitching techniques in a bar code scanning system
ATE203343T1 (de) 1998-10-23 2001-08-15 Datalogic Spa Verfahren zur detektion von coden in zweidimensionalen bildern
US6189702B1 (en) 1998-11-25 2001-02-20 United Parcel Service Of America, Inc. Overhead mounted sorter for conveyors
US6565003B1 (en) 1998-12-16 2003-05-20 Matsushita Electric Industrial Co., Ltd. Method for locating and reading a two-dimensional barcode
US6082619A (en) * 1998-12-16 2000-07-04 Matsushita Electric Industrial Co., Ltd. Method for locating and reading a two-dimensional barcode
US6371373B1 (en) 1999-05-25 2002-04-16 Matsushita Electric Industrial Co., Ltd. Method for reading a two-dimensional barcode
US6359247B1 (en) 1999-07-06 2002-03-19 Quantum Conveyor Systems, Llc Multi-fire and variable fire diverter conveyor system and method
US6666377B1 (en) 2000-07-18 2003-12-23 Scott C. Harris Bar code data entry device
US6761314B2 (en) * 2000-10-03 2004-07-13 Symbol Technologies, Inc. Bar code symbology for consumer scanning applications
US8682077B1 (en) 2000-11-28 2014-03-25 Hand Held Products, Inc. Method for omnidirectional processing of 2D images including recognizable characters
US7072974B2 (en) 2001-03-27 2006-07-04 The Code Corporation Extensible application interface using machine-readable graphical codes
US20020143814A1 (en) * 2001-03-27 2002-10-03 The Code Corporation Systems and methods for automatic insertion of machine-readable graphical codes into printable documents
WO2002084879A2 (en) * 2001-04-13 2002-10-24 The Code Coproration System and method for encoding and decoding data and references to data in machine-readable graphical codes
US6978038B2 (en) * 2001-04-13 2005-12-20 The Code Corporation Systems and methods for pixel gain compensation in machine-readable graphical codes
US7185824B2 (en) * 2001-04-13 2007-03-06 The Code Corporation System and method for associating pre-printed machine-readable graphical codes with electronically-accessible data
KR100339691B1 (ko) * 2001-11-03 2002-06-07 한탁돈 코드인식을 위한 장치 및 그 방법
US20030163396A1 (en) * 2002-02-27 2003-08-28 John Blankevoort Systems and methods for tracking products as they move through a supply chain
US20030163800A1 (en) * 2002-02-27 2003-08-28 Weiyang Zhou System and method for generating graphical codes containing a plurality of data fields
US7070091B2 (en) * 2002-07-29 2006-07-04 The Code Corporation Systems and methods for interfacing object identifier readers to multiple types of applications
US7621453B2 (en) * 2002-07-29 2009-11-24 The Code Corporation System and method for controlling the distribution of data translation components to portable data collection devices
US7097099B2 (en) * 2002-07-29 2006-08-29 The Code Corporation Data collection device with integrated data translation
US7392933B2 (en) * 2002-07-29 2008-07-01 The Code Corporation Systems and methods for interfacing multiple types of object identifiers and object identifier readers to multiple types of applications
US7706624B2 (en) * 2003-08-04 2010-04-27 Thomson Licensing Apparatus and method for reducing noise in an image
US6942152B1 (en) 2004-01-21 2005-09-13 The Code Corporation Versatile graphical code reader that is configured for efficient decoding
US7519239B2 (en) * 2004-02-11 2009-04-14 The Code Corporation Systems and methods for concurrent image capture and decoding of graphical codes
US7204417B2 (en) * 2004-11-03 2007-04-17 The Code Corporation Graphical code reader that is configured for efficient decoder management
KR101158005B1 (ko) * 2007-03-06 2012-06-25 삼성전자주식회사 인쇄품질 평가지표 산출 방법 및 장치
US8267322B2 (en) * 2010-03-08 2012-09-18 Seiko Epson Corporation Method and apparatus for correcting decoding errors in machine-readable symbols
JP5683891B2 (ja) * 2010-10-07 2015-03-11 日本電産サンキョー株式会社 スタック型バーコード読取装置およびスタック型バーコード読取方法
JP5657987B2 (ja) * 2010-10-07 2015-01-21 日本電産サンキョー株式会社 スタック型バーコード読取装置およびスタック型バーコード読取方法
KR101748877B1 (ko) 2010-12-16 2017-06-19 엘지이노텍 주식회사 바코드 인식 장치 및 방법
JP6330388B2 (ja) * 2014-03-14 2018-05-30 オムロン株式会社 画像処理方法、画像処理装置、並びに、当該方法を実行するプログラム、及び、当該プログラムを記録する記録媒体
US9361503B2 (en) 2014-10-30 2016-06-07 Datalogic IP Tech Srl Systems, methods and articles for reading highly blurred machine-readable symbols

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3688955A (en) * 1969-11-24 1972-09-05 Automatisme Cie Gle Character-reading apparatus incorporating electronic scanning circuitry
US4323772A (en) * 1980-03-06 1982-04-06 R. J. Reynolds Tobacco Company Bar code reader system
US4411016A (en) * 1981-06-01 1983-10-18 Recognition Equipment Incorporated Barcode width measurement system
JPS61101880A (ja) * 1984-10-24 1986-05-20 Sato :Kk バ−コ−ド読取方法および装置
US4680457A (en) * 1985-03-07 1987-07-14 Telesis Controls Corporation Code reader
JPS62197877A (ja) * 1986-02-26 1987-09-01 Hitachi Ltd バ−コ−ド読取方式
US4740675A (en) * 1986-04-10 1988-04-26 Hewlett-Packard Company Digital bar code slot reader with threshold comparison of the differentiated bar code signal
US4958054A (en) * 1986-10-29 1990-09-18 Fritto-Lay Inc. Dielectric drying of hot plastic food extrudate
US4749879A (en) * 1987-06-18 1988-06-07 Spectra-Physics, Inc. Signal transition detection method and system
EP0310921B1 (de) * 1987-09-28 1996-01-10 Sumitomo Electric Industries Limited Kombinieren von gelesenen Strichcode-Daten
FR2622992B1 (fr) * 1987-11-06 1990-02-09 Thomson Semiconducteurs Procede de lecture de codes a barres
FR2631476B1 (fr) * 1988-05-10 1992-01-03 Bertin & Cie Procede et dispositif de lecture d'un code barres sur un support sensiblement immobile
JPH07101437B2 (ja) * 1988-06-21 1995-11-01 アルプス電気株式会社 符号読取装置
US4988852A (en) * 1988-07-05 1991-01-29 Teknekron Transportation Systems, Inc. Bar code reader
US4873426A (en) * 1988-08-03 1989-10-10 Image Business Systems Corporation Technique for reading bar codes
US5036183A (en) * 1988-08-25 1991-07-30 Alps Electric Co., Ltd. Code reading device
JPH02141889A (ja) * 1988-11-22 1990-05-31 Eastman Kodatsuku Japan Kk バーコード読取方法
US4958064A (en) * 1989-01-30 1990-09-18 Image Recognition Equipment Corporation Bar code locator for video scanner/reader system
US5073954A (en) * 1989-02-28 1991-12-17 Electrocom Automation, Inc. Bar code location and recognition processing system
US5081689A (en) * 1989-03-27 1992-01-14 Hughes Aircraft Company Apparatus and method for extracting edges and lines
US5155343A (en) * 1990-03-28 1992-10-13 Chandler Donald G Omnidirectional bar code reader with method and apparatus for detecting and scanning a bar code symbol
US4992650A (en) * 1990-03-29 1991-02-12 International Business Machines Corporation Method and apparatus for barcode recognition in a digital image
US5120940A (en) * 1990-08-10 1992-06-09 The Boeing Company Detection of barcodes in binary images with arbitrary orientation
CA2048824A1 (en) * 1990-09-28 1992-03-29 William A. Blitz System for decoding bar codes on job programming separators for electronic reprographic/printing machines
US5124537A (en) * 1990-10-29 1992-06-23 Omniplanar, Inc. Omnidirectional bar code reader using virtual scan of video raster scan memory
US5142592A (en) * 1990-12-17 1992-08-25 Moler Keith E Method and apparatus for detection of parallel edges in image processing
CA2053460A1 (en) * 1991-09-13 1993-03-14 Eugene Bernard Joseph Analog waveform decoder
US5276315A (en) * 1992-05-14 1994-01-04 United Parcel Service Of America, Inc. Method and apparatus for processing low resolution images of degraded bar code symbols
US5343028A (en) * 1992-08-10 1994-08-30 United Parcel Service Of America, Inc. Method and apparatus for detecting and decoding bar code symbols using two-dimensional digital pixel images
EP0584559A3 (en) * 1992-08-21 1994-06-22 United Parcel Service Inc Method and apparatus for finding areas of interest in images

Also Published As

Publication number Publication date
ES2214563T3 (es) 2004-09-16
EP0795836B1 (de) 2003-05-21
AU7828794A (en) 1996-03-22
US5352878A (en) 1994-10-04
EP0795836B8 (de) 2003-08-13
EP0785521A3 (de) 2001-05-16
EP0785521A2 (de) 1997-07-23
CA2191433A1 (en) 1996-03-07
EP0877334A3 (de) 2000-12-06
WO1996007155A1 (en) 1996-03-07
EP0795836A2 (de) 1997-09-17
JP2832645B2 (ja) 1998-12-09
ES2214662T3 (es) 2004-09-16
ATE257962T1 (de) 2004-01-15
EP0877334A2 (de) 1998-11-11
EP0795836A3 (de) 1999-12-08
CA2191433C (en) 2000-07-11
EP0785521B1 (de) 2004-01-21
EP0877334B1 (de) 2004-01-14
JPH09512936A (ja) 1997-12-22
EP0783739A1 (de) 1997-07-16
ATE241180T1 (de) 2003-06-15
DE69433492D1 (de) 2004-02-19

Similar Documents

Publication Publication Date Title
DE69433492T2 (de) Verfahren und Vorrichtung zum Dekodieren von Streifencodes durch unabhängige Analyse von Streifen und Zwischenräumen
DE69332771T2 (de) Verfahren und Vorrichtung zum Dekodieren von strichkodierten Symbolen
DE69728482T2 (de) Zweidimensionaler Codeleser
DE69930536T2 (de) Schräglage-verarbeitung für raster-abtast-bilder
DE3633743C2 (de)
DE69625583T2 (de) Datenformleser
DE19814075B4 (de) Verfahren zum Abtasten und Erkennen mehrerer Fotografien und zum Beseitigen von Randfehlern
DE3716787C2 (de)
DE3406618C2 (de) Verfahren und Vorrichtung zur automatischen Bestimmung der Grenzen von Objekten
DE3722444C2 (de) Verfahren und Vorrichtung zum Erzeugen von Entwurfsmusterdaten
DE69629930T2 (de) Verfahren zum Festlegen eines auf einem Objekt angebrachten optischen Codes
DE3923449A1 (de) Verfahren zum bestimmen von kanten in bildern
DE2943749C2 (de)
DE69434131T2 (de) Vorrichtung zur Segmentierung von aus Texturen bestehenden Bildern
DE19722439A1 (de) Verfahren und Vorrichtung zur Auffindung und Dekodierung maschinenlesbarer Symbole einschließlich Datenmatrixsymbolen
DE2757456C2 (de)
DE102004004528A1 (de) Verfahren, Vorrichtung und Programm zur Verarbeitung eines Stereobildes
DE19924144C2 (de) Schiefekorrekturapparat und -verfahren
DE2616753A1 (de) Verfahren und vorrichtung zum einlesen von strichkodierten informationen
DE3110222A1 (de) Verfahren zur partielle glaettenden retusche bei der elektronischen farbbildreproduktion
EP1037166A1 (de) Verfahren zur Detektion von Konturen in einem Röntgenbild
DE3718620C2 (de)
DE60300476T2 (de) System zum Erkennen eines Barcodes
DE10230112A1 (de) Verfahren und Vorrichtung zum Verbessern von Bildern unter Verwendung einer Kantenausrichtung
DE69813931T2 (de) Filterverfahren zur Fokussierung von Bildern

Legal Events

Date Code Title Description
8364 No opposition during term of opposition