DE69433508T2 - Verfahren und Vorrichtung zur Dekodierung von Streifencodes mit unabhängiger Analyse von Streifen und Leerstellen - Google Patents

Verfahren und Vorrichtung zur Dekodierung von Streifencodes mit unabhängiger Analyse von Streifen und Leerstellen Download PDF

Info

Publication number
DE69433508T2
DE69433508T2 DE1994633508 DE69433508T DE69433508T2 DE 69433508 T2 DE69433508 T2 DE 69433508T2 DE 1994633508 DE1994633508 DE 1994633508 DE 69433508 T DE69433508 T DE 69433508T DE 69433508 T2 DE69433508 T2 DE 69433508T2
Authority
DE
Germany
Prior art keywords
pixel
unit
signal
column
bar code
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
DE1994633508
Other languages
English (en)
Other versions
DE69433508D1 (de
Inventor
E. Christopher 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
Priority claimed from EP97103130A external-priority patent/EP0785521B1/de
Application granted granted Critical
Publication of DE69433508D1 publication Critical patent/DE69433508D1/de
Publication of DE69433508T2 publication Critical patent/DE69433508T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Image Processing (AREA)

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 Laserab tastsystemen ist allgemein bekannt. Weniger bekannt sind Bild verarbeitungssysteme 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 das Speichern der Abtastliniendaten in einem Bildspeicher beschrieben. Die Abtastliniendaten werden verschoben durch sowohl tatsächliches Verschieben der Abtastliniendaten innerhalb des Bildspeichers als auch virtuelles Verschieben der Abtastlinien durch Verwendung eines Offset-Vektors, der zu dem Platz der aus dem Speicher entnommenen sequentiellen Werte hinzuzufügen ist. Aus entsprechenden Abtastpunkten von den verschiedenen Linien von 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 auch auf eine Vorrichtung, wie sie im Anspruch 5 definiert ist.
  • 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 ist ein Flussdiagramm eines schnellen Verfahrens, welches von dem Signalgemischgenerator des Systems nach 1 durchgeführt wird, um ein Signalgemisch eines Balkencodesymbols zu erzeugen;
  • 7 ist ein Bild eines Balkencodesymbols, welches Abtastlinien zeigt, die von dem Signalgemischgenerator des Systems nach 1 bei der Durchführung des schnellen Verfahrens nach 6 benutzt werden;
  • 8 ist ein Flussdiagramm des Verfahrens, welches von der Signalgemischschwellenwerteinheit des Systems nach 1 benutzt wird zur Schwellwertprüfung des Signalgemisches des einen Balkencodesymbols;
  • 9 zeigt eine binäre Darstellung eines Teils des Balkencodesymbolsignals mit einem zufälligen Balken;
  • 10 zeigt die binäre Darstellung eines Teils des Balkencodesymbolsignals mit einem zufälligen Balken oder einem zufälligen Zwischenraum;
  • 11 zeigt ein Flussdiagramm der Verarbeitung, welche von dem Signalgemischdekoder des Systems nach 1 ausgeführt wird, um die Zeichen eines Code 39 Balkencodesymbols zu dekodieren.
  • 12 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
  • 13 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 Systems 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 ei ne 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 00060001
  • 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, wo bei 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-Balkencodesymbol-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 lokali siert 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 1 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 vorzugsweise 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 Ruhezonen 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 Ruhe zone 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.
  • 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 des Suchens auf Bytegrundlage nach Balkencodesymbolen von Pixelbildern, wie sie in diesem Abschnitt der Beschreibung erläutert ist, bezieht sich auf die Verarbeitung von nur binären Pixelbildern. Es versteht sich jedoch für den Fachmann, dass alle anderen Merkmale des Systems 100, wie hier beschrieben, für die Verarbeitung entweder binärer oder Grauton-Pixelbilder dienen (können).
  • 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: Eb = |AC3 – (AD3 + BC3)| = |[(Xc – Xa)3 – (Yc – Ya)3] – [(Xb – Xa)3 – (Yb – Ya)3] – [(Xc – Xb)3 – (Yc – Yb)3]|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 berechnet 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 rechtwinklig 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.
  • Schnelles Verfahren zur Erzeugung von Signalgemischen von Balkencodesymbolen
  • 6 zeigt ein Block-Flussdiagramm eines schnellen Verfahrens, welches vom Signalgemischgenerator 900 implementiert wird. Der Signalgemischgenerator 900 ist ein Beispiel für einen Signalgemischgenerator 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.
  • 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 ge drehten 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.
  • 7 zeigt ein Bild des Balkencodesymbols 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 7 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 7 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 Verarbeitung 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 12 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 00240001
  • 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 = C0 cosθ + R0 sin θ, (2)wobei Co 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 00250001
  • 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.
  • Bei einer Ausführungsform interpoliert die Einheit 904 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 eindimen sionalen 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 00280001
  • 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 00290001
  • 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 00300001
  • Schwellwertvergleich und Filterung des eindimensionalen Signalgemisches
  • 8 zeigt ein Block-Flussdiagramm der Verarbeitung, welche die Signalgemisch-Schwellwertschaltung 108 des Systems durchführt, um ein eindimensionales Signalgemisch eines Balkencodesymbols mit einem Schwellwert zu vergleichen. Die Schwellwertschaltung 108 verarbeitet ein Signalgemisch, gleichgültig, ob es vom Generator 600 unter Anwendung des in einer gleichlaufenden Anmeldung beschriebenen langsamen Verfahrens oder vom Generator 900 unter Verwendung des im Zusammenhang mit 6 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 Balkenkodesymbol.
  • 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 9 und 10 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. 9 zeigt die Binärdarstellung eines zufälligen Balkens 1, wo ein einziger Zwischenraum vorhanden sein sollte. 10 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 mini malen 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 9 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 10 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 8, 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 Code128, den Code39 oder den verschachtelten Code 2 aus 5 dekodiert.
  • Wenn Code128-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 Code128-Prüfsummenberechnungen durch, um die Dekodierung aller drei Zeichensätze des Code128 zu unterstützen.
  • Es sei nun 11 betrachtet, welche ein Flussdiagramm des Prozesses zeigt, das der Signalgemischdekodierer 110 des Systems 100 ausführt, um die Zeichen eines Code39-Balkencodesymbols zu dekodieren. Die Code39-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 Code39-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 Code39-Zeichen. Gleichermaßen ist ein Zeichen, welches genau einen breiten Zwischenraum, aber nicht genau zwei breite Balken hat, kein gültiges Code39-Zeichen. Bei der Dekodierung von Code39-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 Code39-Zeichens analysiert der Dekodierer 110 zuerst die vier Zwischenräume des Zeichens. Die Einheit 1402 in 11 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 Code39-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 Code39-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 Code39-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 Code39-Zeichen ist.
  • Nach erfolgreicher Lokalisierung der drei breiten Balken-Zwischenräume und sechs schmalen Balken-Zwischenräume des Code39-Zeichens dekodiert die Einheit 1416 das Zeichen durch Nachsuchen in einer Code39-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 Code39-Prüfsummenanalyse durch.
  • In 11 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 Code39-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 Code39-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 Code2aus5 (12 aus 5) Balkencodesymbolen. Bei 12aus5-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 12aus5-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 12aus5-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 12aus5-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 12aus5-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 12 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 6 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 6 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. Bei einer Alternative akkumulieren die Weißungs- und Schwärzungsgradientenvektoren die Anzahl der Änderungen von Pixel zu Pixel, welche zunehmen bzw. abnehmen, im Gegensatz zur Akkumulierung der Größen dieser Änderungen.
  • 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ßungsgradientenvektor 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üngli chen 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 VII 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 00460001
  • Tabelle VIII. Verarbeitung des Schwärzungsgradieneten
    Figure 00470001
  • Nachdem die Einheit 510 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 00480001
  • 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 00480002
    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
  • 13 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 119 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 Gradientensignaldekodierer 116, welcher das Signal nach üblichen Balkencode-Dekodierverfahren dekodiert.
  • 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 (nichtgezeigten) Alternative wählt der Prozessor 114 die Spitzenwerte der beiden Gradientensignale als Stellen der Übergänge des rekonstruierten Signals aus.
  • Die Einheit 1602 der 13 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 8 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 00530001
  • 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 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 (8)

  1. Verfahren zur Verarbeitung eines Pixelbildes eines Balkencodesymbols zur Decodierung eines Zeichens, wobei das Pixelbild Reihen und Spalten von Pixeln umfasst und das Verfahren die folgenden Schritte aufweist: a) für eine 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, wird die Abtastlinie (902) ausgewählt und b) für jedes Pixel in der gewählten Abtastlinie werden auf Grundlage der Orientierung des Symbols bezüglich des Pixelbildes und auf Grundlage einer Überabtastrate eine oder mehrere gedrehte und gestreckte Spalten- oder Reihenangaben (D, E) bestimmt (904); c) für jede gedrehte oder gestreckte Spalten- oder Reihenangabe wird aus den Intensitäten der Pixel in der ausgewählten Abtastlinie ein Intensitätswert (F) erzeugt; d) für jede gedrehte und gestreckte Spalten- oder Reihenangabe (E) wird der Intensitätswert (F) zu einem entsprechenden Element eines Vektorgemisches (G) summiert (906) und ein entsprechendes Element eines Zählvektors (H) wird in Übereinstimmung mit der Anzahl von Malen, welche das entsprechende Element des Vektorgemisches summiert worden ist, erhöht; e) die Schritte a) bis d) werden für die nächste Abtastlinie der Mehrzahl von Abtastlinien wiederholt; f) für jede gedrehte und gestreckte Reihen- oder Spaltenangabe wird ein Element eines Signalgemisches (M) bestimmt (912) durch Dividieren des Elementes des Vektorgemisches (G) durch das entsprechende Element des Zählvektors (H); g) für jede gedrehte und gestreckte Reihen- oder Spaltenangabe erfolgt eine Schwellwertprüfung des entsprechenden Elementes des Signalgemisches zur Bestimmung eines Elementes eines schwellwertgeprüften Signals (N); und h) auf Grundlage der Elemente des schwellwertgeprüften Signals wird das Zeichen bestimmt.
  2. Verfahren nach Anspruch 1, bei welchem die Abtastlinien um mehr als ein Pixel voneinander getrennt sind.
  3. Verfahren nach Anspruch 1, bei welchem mindestens eine der Abtastlinien nicht das ganze Symbol durchkreuzt.
  4. Verfahren nach Anspruch 1, bei welchem Schritt b) erfolgt durch Multiplizieren der Reihen- oder Spaltenangaben der Pixel in der gewählten Abtastlinie mit einer Rotationsmatrix, wobei die Werte der Elemente der Rotationsmatrix basieren auf der Orientierung des Symbols bezüglich des Pixelbildes und auf der Überabtastrate.
  5. Vorrichtung zur Verarbeitung eines Reihen und Spalten von Pixeln umfassenden Pixelbildes eines Balkencodesymbols zur Decodierung eines Zeichens mit: a) einer Vorrichtung zum Auswählen einer Abtastlinie 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 zum Bestimmen einer oder mehrerer gedrehter und gestreckter Spalten- oder Reihenangaben (D, E) für jedes Pixel in der gewählten Abtastlinie aufgrund der Orientierung des Symbols bezüglich des Pixelbildes und aufgrund einer Überabtastrate; c) einer Vorrichtung zur Erzeugung eines Intensitätswertes (F) für jede gedrehte und gestreckte Spalten- oder Rei henangabe aus Intensitäten der Pixel in der ausgewählten Abtastlinie; d) einer Vorrichtung zum Summieren der Intensitätswerte (F) zu einem entsprechenden Element eines Vektorgemisches (G) und Erhöhen eines entsprechenden Elementes eines Zählvektors (H) entsprechend der Anzahl von Malen, welche das entsprechende Element des Vektorgemisches summiert worden ist, für jede gedrehte und gestreckte Spalten- oder Reihenangabe (E); e) einer Vorrichtung zum Wiederholen der in den Merkmalen a) bis d) beschriebenen Vorgänge für die nächste Abtastlinie der Mehrzahl von Abtastlinien; f) einer Vorrichtung zur Bestimmung eines Elementes eines Signalgemisches (M) durch Dividieren des Elementes des Vektorgemischs (G) durch das entsprechende Element des Zählvektors (H), für jede gedrehte und gestreckte Reihen- oder Spaltenangabe; g) einer Vorrichtung zum Schwellwertvergleich des entsprechenden Elementes des Signalgemisches zur Bestimmung eines Elementes eines schwellwertgeprüften Signals (N), für jede gedrehte und gestreckte Spaltenangabe; und h) einer Vorrichtung zur Bestimmung des Zeichens aufgrund der Elemente des schwellwertgeprüften Signals.
  6. Vorrichtung nach Anspruch 5, bei welcher die Abtastlinien um mehr als ein Pixel voneinander getrennt sind.
  7. Vorrichtung nach Anspruch 5, bei welcher mindestens einige der Abtastlinien nicht das gesamte Symbol durchkreuzen.
  8. Vorrichtung nach Anspruch 5, bei welcher die Vorrichtung b) die Reihen- oder Spaltenangaben der Pixel in der gewählten Abtastlinie mit einer Rotationsmatrix multipliziert, wobei die Werte der Elemente der Rotationsmatrix auf der Orientierung des Symbols bezüglich des Pixelbildes und auf der Überabtastrate basieren.
DE1994633508 1994-08-29 1994-08-29 Verfahren und Vorrichtung zur Dekodierung von Streifencodes mit unabhängiger Analyse von Streifen und Leerstellen Expired - Lifetime DE69433508T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
EP97103130A EP0785521B1 (de) 1993-01-29 1994-08-29 Verfahren und Vorrichtung zur Dekodierung von Streifencodes mit unabhängiger Analyse von Streifen und Leerstellen

Publications (2)

Publication Number Publication Date
DE69433508D1 DE69433508D1 (de) 2004-02-26
DE69433508T2 true DE69433508T2 (de) 2004-11-18

Family

ID=30775927

Family Applications (1)

Application Number Title Priority Date Filing Date
DE1994633508 Expired - Lifetime DE69433508T2 (de) 1994-08-29 1994-08-29 Verfahren und Vorrichtung zur Dekodierung von Streifencodes mit unabhängiger Analyse von Streifen und Leerstellen

Country Status (2)

Country Link
AT (1) ATE258324T1 (de)
DE (1) DE69433508T2 (de)

Also Published As

Publication number Publication date
DE69433508D1 (de) 2004-02-26
ATE258324T1 (de) 2004-02-15

Similar Documents

Publication Publication Date Title
DE69433492T2 (de) Verfahren und Vorrichtung zum Dekodieren von Streifencodes durch unabhängige Analyse von Streifen und Zwischenräumen
DE69324079T2 (de) Verfahren und Vorrichtung zur Erfassung von Strichkoden
DE69930536T2 (de) Schräglage-verarbeitung für raster-abtast-bilder
DE69521040T2 (de) Verfahren und vorrichtung zum dekodieren von balkencodebildern mittels informationen aus vorhergehenden abtastzeilen
DE69332771T2 (de) Verfahren und Vorrichtung zum Dekodieren von strichkodierten Symbolen
DE69310049T2 (de) Verfahren und Vorrichtung zum Auffinden einer Ecke einer Struktur in zweidimensionalen Bildern
DE69716087T2 (de) System und verfahren zur bilderfassung mit hoher geschwindigkeit
DE69415048T2 (de) Verfahren und apparat zum bestimmen der genauen winkelorientierung von strichc0desymbolen in zweidimentionalen ccd-bildern
DE69728482T2 (de) Zweidimensionaler Codeleser
DE3854885T2 (de) Kombinieren von gelesenen Strichcode-Daten
DE69028899T2 (de) Verfahren und Vorrichtung zum Dekodieren von Strichkodes mit Mehrfachabtastung
DE69506238T2 (de) Verfahren und vorrichtung zum dekodieren von balkenkodebildern mittels mehrordnungenvektoren
DE69709165T2 (de) Vorrichtung und verfahren zur dekodierung von streifencode-symbolen durch quotenanalyse der modulformate
DE69027616T2 (de) Gerät und Verfahren zum Bestimmen von Konturen und Linien
DE69518098T2 (de) Verfahren und Vorrichtung zum Lesen eines optischen zweidimensionalen Kodes
DE69504069T2 (de) Verfahren und gerät zu dekodierung von zweidimensionalen zeichen im raumbereich
DE69131006T2 (de) Gerät und Verfahren zur optischen Zeichenerkennung
DE69620125T2 (de) Gerät zur Bildverarbeitung von Fingerabdrücken
DE69131216T2 (de) Lagebestimmung von Strichkodierungen
DE69022469T2 (de) Zitter-Bildverarbeitungsmethode.
DE68915950T2 (de) Verfahren zum Trennen von Zeichen.
DE69521184T2 (de) Gerät zur Bildverarbeitung gemäss einem lokal ermittelten Bildregionentyp
DE3923449A1 (de) Verfahren zum bestimmen von kanten in bildern
DE19624900A1 (de) Verfahren und Gerät zum Decodieren nicht aufgelöster Balkencode-Profile unter Verwendung eines Kantenfindungs-Schaltkreises
DE69428482T2 (de) Verfahren und Vorrichtung zur Bildverarbeitung

Legal Events

Date Code Title Description
8364 No opposition during term of opposition