-
Die
vorliegende Erfindung bezieht sich auf ein Verzerrungskorrekturverfahren
beim Lesen von optischen Codes.
-
Der
Ausdruck „optischer
Code" bezeichnet im
folgenden eine beliebige graphische Darstellung, welche die Funktion
hat, codierte Informationen zu speichern. Spezifische Beispiele
für optische
Codes sind lineare oder zweidimensionale Codes, bei denen eine Codierung
von Informationen mittels geeigneter Kombination von Elementen mit
vorbestimmter Form, d. h. Quadrat, Rechteck oder Sechseck, in dunklen
Farben (für
gewöhnlich
Schwarz), die durch helle Elemente (Zwischenräume, für gewöhnlich Weiß) getrennt sind, erfolgt,
beispielsweise bei Strichcodes (Bar Codes), Stapelcodes (Stacked
Codes) (einschließlich
PDF417), Maxicodes, Datamatrixcodes, QR-Codes oder Farbcodes etc.
Allgemeiner gesagt umfaßt
der Ausdruck „optischer
Code" andere graphische
Formen mit Informationscodierungsfunktion, einschließlich nicht
codierter Zeichen (Buchstaben, Zahlen etc.) und bestimmter Muster (wie
Stempel, Logos, Unterschriften etc.). Die Informationen können auch
mit mehr als zwei Farben, beispielsweise Grautönen, codiert werden.
-
Bekanntermaßen sind
für die
Codierung von Informationen zur optischen Identifikation beispielsweise
von Objekten Strichcodes sehr verbreitet, die aufgrund ihrer Kompaktheit,
Widerstandsfähigkeit gegenüber Umgebungsbedingungen
(aufgrund dessen sie selbst bei vorhandenen Störungen automatisch decodiert
werden können)
und Möglichkeit
zum automatischen Lesen und Interpretieren auch in einer zunehmenden
Anzahl unterschiedlicher Anwendungen verwendet werden. Sie ermöglichen
jedoch nur die Speicherung relativ weniger Informationen; um diese
Einschränkung
zu überwinden,
wurden in jüngster
Zeit zweidimensionale Codes, wie Datamatrixcodes, Maxicodes, QR-Codes
und Stapelcodes (z. B. PDF417) vorgeschlagen, die beispielhaft in
den 1a, 1b, 1c bzw. 1d gezeigt
sind.
-
Zweidimensionale
Codes können
dadurch gelesen werden, daß zweidimensionale
Bilder in einem Bereich erhalten werden, in dem das Vorhandensein
eines Codes erwartet wird, und der Code zur nachfolgenden Decodierung
innerhalb des Bildes lokalisiert wird. Die Codelokalisierung umfaßt allgemein
eine Reihe von Schritten, um zunächst
innerhalb des in einem Computerspeicher gespeicherten Bildes die
Region oder Regionen, in denen ein oder mehrere Codes vorhanden
sind, von Bereichen zu unterscheiden, in denen andere Objekte oder
Zahlen vorhanden sind; danach werden bestimmte Erkennungsmuster
lokalisiert, die für
jeden Code typisch sind, Informationen über den Codetyp erfaßt und schließlich der
Code genau abge grenzt. Das abgegrenzte Bild des Codes wird dann
verarbeitet, um zur Decodierung erforderliche Charakteristika zu
extrahieren, und schließlich
wird der Code decodiert.
-
Aufgrund
geometrischer Verzerrungen, die durch mangelnde Parallelität zwischen
der Ebene, die den Code enthält
(dessen Bild erfaßt
wird), und der Aufnahmeebene verursacht werden, hat das Viereck,
das den Code in dem gespeicherten Bild einbeschreibt, jedoch im
allgemeinen keine regelmäßige geometrische
Form. Insbesondere können
aufgrund von Drehungen um drei räumliche
Achsen (Vorhandensein von Nick-, Versatz- und Neigungswinkel) perspektivische
Deformierungen auftreten. Diese Deformierungen, die manchmal nicht
vernachlässigt
werden dürfen,
transformieren den Code (mit rechteckiger oder quadratischer Form)
in unregelmäßige Vierecke.
-
Ein
typisches Deformierungsbeispiel ist in 2 veranschaulicht,
die einen Datamatrixcode zeigt, der um 50° gegenüber der Leserebene geneigt ist.
-
Um
perspektivische Deformierungen zu beseitigen oder zu kompensieren,
wird derzeit das erfaßte
Bild reskaliert, indem Dreh-Translationalgorithmen (roto-translation
algorithms) auf alle Pixel des erfaßten Bildes (oder auf den Bildabschnitt,
in dem der Code lokalisiert und abgegrenzt wurde) angewendet wird,
um ein neues Bild zu erhalten, bei dem der Code die anfängliche
reguläre
Form annimmt.
-
Dazu
müssen
bestimmte Informationen des Codes, der gelesen wird, bekannt sein:
in dem Fall des Maxicodes beispielsweise, kann das Zentrum (bull's eye) oder die Zielscheibenmitte
(Ziel, das aus einer Reihe konzentrischer Kreise in der Codemitte besteht)
analysiert werden, und wenn es elliptisch ist, werden Drehverschiebung-Korrekturparameter
abgeleitet und eine Drehverschiebung mit den abgeleiteten Parametern
durchgeführt.
-
Die
bekannten Systeme erfordern jedoch viele komplexe Rechenoperationen
(Matrizen werden verwendet und alle Punkte des Bildes werden transformiert);
folglich sind viele Rechenressourcen, die nicht allen Lesern zur
Verfügung
stehen, und eine erhebliche Rechenzeit erforderlich, so daß der Lesevorgang
langsam erfolgt.
-
Die
Veröffentlichung „A robust
and fast skew detection algorithm for generic documents" von Bin Yu et al.,
Ausg. 29, 10. Oktober 1996, Seite 1599-1629, XP000633789, offenbart
einen Versatzerfassungsalgorithmus, der auf einer hierarchischen
Hough-Transformation basiert und in der Lage ist, den Versatzwinkel
für verschiedene
Dokumentenbilder zu erfassen. Der Algorithmus besteht aus zwei Schritten.
Im ersten Schritt werden die Mittelpunkte verbundener Komponenten
mittels einer Graphdatenstruktur extrahiert. Dann wird eine hierar chische Hough-Transformation
auf die ausgewählten
Mittelpunkte angewendet. Der Versatzwinkel entspricht der Position
der höchsten
Spitze in dem Hough-Raum.
-
Es
ist das Ziel der vorliegenden Erfindung, ein Verzerrungskorrekturverfahren
anzugeben, das eine geringere Anzahl an Arbeitsvorgängen und
weniger Rechenzeit als bekannte Verfahren benötigt.
-
Die
vorliegende Erfindung liefert eine Verzerrungskorrektur nach Anspruch
1.
-
Die
ausgewählten
charakteristischen Punkte sind vorzugsweise die zentralen Pixel
jedes Elements des optischen Codes. Auf diese Weise wird nur der
signifikanteste Punkt jedes Elements, der nicht durch den Randeffekt
beeinflußt
wird, der durch angrenzende Codeelemente unterschiedlicher Farbe verursacht
wird, zur Decodierung verwendet; zudem wird die Anzahl an Arbeitsvorgängen, die
zur Beseitigung der Verzerrung erforderlich sind, drastisch verringert.
-
Vorteilhafterweise
wird zunächst
die Struktur des Codes, der gelesen wird, bestimmt, um die Anzahl
an Zeilen und Spalten in dem Code zu bestimmen. Dann wird der Gittererzeugungsschritt
ausgeführt;
dies umfaßt
die Schritte Erzeugen eines rechteckigen Gitters, das aus Linien
gebildet ist, die eindeutig die Koordinaten wahrnehmbarer Punkte
definieren, die dem zentralen Punkt jedes Codeelements zugeordnet
sind; Bestimmen der geometrischen Transformation, die Referenzpunkte
einer bekannten Position in dem deformierten Bild mit entsprechenden
Punkte in dem deformierten Bild verbindet; und Berechnen der Koordinaten
charakteristischer Punkte, die den wahrnehmbaren Punkten aufgrund
der geometrischen Transformation zugeordnet werden.
-
Weitere
Merkmale der Erfindung werden aus der Beschreibung einer bevorzugten
Ausführung deutlich,
die rein beispielhaft und nicht einschränkend ist und in den beigefügten Zeichnungen
gezeigt ist, in denen:
-
1a, 1b, 1c und 1d Beispiele
von zweidimensionalen Codes bekannter Art zeigen;
-
2 ein
Beispiel eines von einem Codeleser erfaßten Bildes vor der Verarbeitung
zeigt;
-
3 ein
Flußdiagramm
für das
Lesen eines optischen Codes aus zweidimensionalen Bildern zeigt;
-
4 ein
Flußdiagramm
für die
Verzerrungskorrektur eines Bildes gemäß der vorliegenden Erfindung
zeigt;
-
5 ein
Beispiel eines zweidimensionalen Codes einer ersten Art während eines
Schritts des Verzerrungskorrekturverfahrens gemäß der Erfindung zeigt;
-
6 ein
Beispiel eines zweidimensionalen Codes einer zweiten Art während des
Schritts von 5 zeigt;
-
7 die
graphische Darstellung des Signals zeigt, das in einem nachfolgenden
Schritt des vorliegenden Verfahrens erhalten wird;
-
8 ein
Beispiel eines Gitters zeigt, das gemäß dem vorliegenden Verfahren
erzeugt wird;
-
9 ein
weiteres Beispiel eines Gitters zeigt, das gemäß dem vorliegenden Verfahren
erzeugt wird;
-
10 das
Bild eines zweidimensionalen Codes zeigt, der von einem Lesegerät erfaßt wird und
dem ein Gitter gemäß der vorliegenden
Erfindung überlagert
ist;
-
11 die
Beziehung zwischen einem rechteckigen Gitter und dem zugehörigen transformierten Gitter
zeigt; und
-
12 ein
Beispiel eines Codes und den zugehörigen Ausgangspunkten zum Erzeugen
des Gitters gemäß einer
Variante des vorliegenden Verfahrens zeigt.
-
Gemäß dem Flußdiagramm
von 3 wird zum Lesen eines Codes aus einem zweidimensionalen
Bild zunächst
das Bild eines Raumabschnitts, in dem zumindest ein Datencode gesucht
wird, erfaßt und
gespeichert (Block 10). Genauer gesagt kann das Bild mit
jeglicher Art von Videokamera oder Fotogerät aufgenommen werden, die bzw.
das ein digitalisiertes Bild in Grautönen ausgeben kann, das aus mehreren
Pixeln gebildet ist, die jeweils die Helligkeit des Bildes in dem
betrachteten Punkt darstellen und vorzugsweise mit mindestens 8
Bit (mindestens 256 Graustufen) codiert sind. Das digitalisierte
Bild wird dann zur nachfolgenden Verarbeitung in einem geeigneten
Speicher (nicht gezeigt) gespeichert.
-
Dann
werden Regionen von Interesse, die möglicherweise einen optischen
Code enthalten, innerhalb des gespeicherten Bildes gesucht (Block 11). Zu
diesem Zweck werden beispielsweise die Regionen mit höherem Kontrast
gesucht, da Codes aus einer Matrix von Elementen gebildet sind (wobei
Element die kleinste Komponente des Codes bezeichnet), die durch
min destens zwei unterschiedliche Reflexionsgrade (typischerweise
schwarz und weiß)
gekennzeichnet sind, wobei deren spezifische Alternation die Informationen
codiert.
-
Dann
wird für
jede dieser Regionen von Interesse der Code exakt lokalisiert und
sogenannte Erkennungsmuster werden bestimmt, Block 12.
Der Lokalisierungsschritt 12 an sich erfordert je nach
Codetyp unterschiedliche Verfahren. Bei Datamatrixcodes (1a)
beispielsweise können
die Koordinaten der L-Form (die an die linke und untere Seite des
Codes in 1a angrenzt) mittels eines Eckenerkennungsalgorithmus,
der beispielsweise in D. Montgomery, G.C. Runger: „Applied
Statistics and Probability for Engineers", Wiley, 1994, in R. Jain, R. Kasturi,
B.G. Shunek: „Machine
vision", McGraw
Hill, 1995, beschrieben ist, oder mittels des Standardverfahrens bestimmt
werden, das in den AIM-Vorgaben (AIM-Vorgaben für Datamatrixcodes) vorgeschlagen wird
und darauf basiert, daß zwei
Segmente mit minimaler Größe (ihre
Größe ist aus
den Anwendungsvorgaben bekannt) durchsucht werden, welche die beiden
Seiten der L-Form sind.
-
Was
Maxicodes betrifft (1b), so umfaßt der Lokalisierungsschritt 12 das
Bestimmen der Koordinaten der Codemitte oder der Zielscheibenmitte (bull's eye) beispielsweise
mittels des Standardverfahrens, das in der AIM-Vorgabe (AIM-Vorgabe
für Maxicodes)
beschrieben ist und darauf basiert, daß die Vorlage (template) durchsucht
wird, die aus abwechselnd schwarzen und weißen Pixeln gebildet ist, die
charakteristisch für
die Codemitte sind.
-
Bei
QR-Codes werden die Koordinaten der Scheitel von drei Quadraten,
die in drei der vier Ecken des Codes (1c) positioniert
sind, mittels des Standardverfahrens bestimmt, das beispielsweise
in den AIM-Vorgaben für
QR-Codes vorgeschlagen wird.
-
Im
Fall von linearen Codes (Strichcodes) oder Stapelcodes (PDF417, 1d)
werden wenigstens drei Striche des Codes mittels bekannter Segmenterkennungsalgorithmen
bestimmt (siehe beispielsweise den oben erwähnten Text von D. Montgomery,
G.C. Runger, oder R. Jain, R. Kasturi, B.G. Shunek).
-
In
dem Lokalisierungsschritt 12 werden zudem Informationen über die
geometrische Struktur und die Abmessungen des Codes extrahiert und nachfolgend
verwendet. Bei Maxicodes beispielsweise werden die Abmessungen des
Sechsecks, aus dem sei gebildet sind, geschätzt.
-
Dann
wird ein Segmentierungsschritt (Block 13) durchgeführt, der
das Trennen des den einzigen Code enthaltenden Bereichs von dem
restlichen Teil des digitalisierten Bildes umfaßt. Der Zweck dieses Schritts
besteht darin, die Koordinaten der vier Scheitel des Vierecks, das
den Code einbeschreibt, zu bestimmen. Die Segmentierung kann mit
einem in der Literatur bekannten Mechanismus zum schrittweisen Pixelhinzufügen (Regionenwachstum)
(der bei spielsweise die „Konvexe-Hülle"-Algorithmen verwendet, die
in „Algorithms" von R. Sedgewick,
Herausgeber Addison Weseley beschrieben sind) unter Verwendung der
eben erhaltenen Positionsinformationen und unter Verwendung des
Vorhandenseins von Ruhezonen um den Code herum durchgeführt werden. Bei
einem Maxicode ist es beispielsweise möglich, ein Regionenwachstum
von dem äußeren Kreis
der Codemitte anzuwenden, wenn man einen Schätzwert der Abmessungen der
einzelnen Sechsecke und des Gesamtbereichs, der von dem Code eingenommen
wird, hat. Am Ende des Segmentierungsschritts 13 erhält man daher
ein nachstehend angegebenes Bild als segmentiertes Bild.
-
Dann
wird ein Schritt zur Verzerrungskorrektur und Decodierungscharakteristikberechnung durchgeführt, Block 14.
Bei diesem Schritt, der nachfolgend detaillierter mit Bezug auf 4 beschrieben wird,
wird, ausgehend von dem segmentierten Bild, das deformiert ist und
dessen Punkte Grautönen
zugeordnet sind, für
jedes den Code bildende Element die perspektivische Verzerrung korrigiert,
die Grauwerte extrahiert und der binarisierte Wert (weiß oder schwarz,
der die Decodierungscharakteristika oder -Merkmale definiert) bestimmt,
der für
den Decodierungsalgoritmus erforderlich ist, wobei ein transformiertes
und digitalisiertes Bild erhalten wird, das auch Decodierungsbild
genannt wird. Zu diesem Zweck wird, wie es unten detaillierter beschrieben wird,
ein Codegitter erzeugt, wodurch die Anzahl an zu verarbeitenden
Pixeln drastisch reduziert wird und der Code schneller gelesen wird.
-
Schließlich wird
unter Verwendung der Decodierungsmerkmale, die gemäß einer
vorbestimmten Sequenz zugeführt
werden, die Decodierung auf bekannte Weise durchgeführt (Block 15),
wodurch die codierten Informationen extrahiert werden.
-
Zur
Korrektur der perspektivischen Fehler wird angenommen, daß der abgebildete
Code physisch auf einer Ebene angeordnet ist. Wie es oben erwähnt ist,
stehen zudem zu Beginn des Decodierungsmerkmal-Extraktionsschritts 14 die
folgenden Informationen zur Verfügung:
- 1. Codetyp: Diese Information ist nützlich,
um die Gittererzeugungsschritte je nach Codetyp zu unterscheiden;
- 2. Codeausrichtung: Die Mehrheit der Codes hat keine symmetrische
Struktur, so daß es
notwendig ist, die genaue Codeausrichtung in dem Bild zu kennen.
Diese Information kann durch die Position des Erkennungsmusters
ausgedrückt
werden (z. B. das L des Datamatrixcodes).
- 3. Koordinaten der vier Scheitel V1, V2, V3, V4 des Vierecks,
das den Code einbeschreibt (11).
-
Mit
Bezug auf 4 umfaßt der Schritt der Verzerrungskorrektur
und Decodierungsmerkmalextraktion 14 zunächst den
Schritt des Berechnens eines später
benötigten
Binarisierungs-Schwellenwerts,
Block 20. Hierzu wird das kumulative Histogramm der Graustufen
jedes Pixels erzeugt, das zu einem Bildabschnitt gehört, der
den lokalisierten Code, vorzugsweise den Mittelteil des Codes, enthält. Dieser
Abschnitt muß so
groß sein,
daß er
eine Anzahl an Pixeln enthält,
die ausreichend hoch ist, um statistisch relevant zu sein. Typischerweise
müssen wenigstens
tausend Pixel zur Verfügung
stehen; es kommen beispielsweise Gruppen von 50 × 50 oder 60 × 60 in
Betracht. Das Histogramm wird dann analysiert und ein mittlerer
Grauwert, der einen Grauschwellenwert definiert, wird berechnet.
Das zur Bestimmung des Schwellenwerts verwendete Verfahren kann
ein Verfahren sein, das in der Literatur bekannt ist (siehe beispielsweise
den Text von R. Gonzales, R.E. Woods, „Digital Image Processing", Addison Wesley,
1992, oder den Text von D. Montgomery, G.C. Runger, der oben genannt
ist).
-
Dann
wird die Struktur des Codes erfaßt, die durch die Codeausrichtung
(bereits bekannt, wie es oben angegeben ist) und die Anzahl an Elementen bestimmt
wird, die in jeder Zeile und Spalte vorhanden sind. Bei Codes festgelegter
Größe, beispielsweise
Maxicodes, ist die Anzahl an Elementen in jeder Zeile sowie die
Anzahl an Zeilen a priori bekannt. Bei anderen Codes sind sie jedoch
nicht a priori bekannt, sondern müssen aus dem spezifischen gelesenen
Code bestimmt werden.
-
Folglich
prüft das
Verfahren, ob das durch den Segmentierungsschritt 13 erhaltene
segmentierte Bild zu einem Maxicode gehört, Block 21; falls nicht,
Ausgabe NEIN, werden spezifische Scans des segmentierten Bildes
ausgeführt,
Block 22; die Anzahl an Elementen in jeder Zeile und jeder
Spalte wird berechnet, Block 23, und der Schritt des Erzeugens
eines Bildgitters wird durchgeführt
(Blöcke 24-26);
falls doch (Ausgabe JA von Block 21), wird der Schritt
des Erzeugens eines Bildgitters (Blöcke 24-26)
direkt durchgeführt.
-
Wenn
spezifische Scans ausgeführt
werden, Block 22, ist das Verfahren je nach Codetyp unterschiedlich.
Bei Datamatrixcodes werden die Taktdaten, die auf den von dem Erkennungsmuster (L-Form,
die an die linke und untere Seite des Codes in 1a angrenzt),
abgewandten Seiten liegen, bestimmt; jede dieser Seiten hat in der
Tat eine regelmäßige Struktur,
die aus einzelnen, abwechselnd schwarzen und weißen Elementen besteht, welche die
Anzahl an Elementen pro Zeile und Spalte des Codes festlegen. Dadurch,
daß die
Koordinaten der Scheitel V1-V4 des Codes und insbesondere der drei Scheitel
V1-V3, welche die beiden von dem Identifikationsmuster abgewandten
Seiten begrenzen, genau bekannt sind (siehe 5, die ein
Beispiel eines Datamatrixcodes zeigt), werden die Pixel, die entlang der
beiden oben erwähnten
abgewandten Seiten angeordnet sind (siehe die beiden Scanlinien 40 und 41 in 5),
aus dem segmentierten Bild erfaßt.
-
Im
Gegensatz dazu gibt es bei einem QR-Code (siehe 6)
zwei Linien, welche die Seiten der drei charakteristischen Quadrate
verbinden, die denselben Zweck haben (Linien 44, 45).
Hier sind die Koordinaten der drei Scheitel, die den drei Quadraten
(Punkte A, B und C) ge genüberliegen,
aus dem Lokalisierungsschritt 12 bekannt; folglich, analog
zu dem vorhergehenden, wird der Wert der Pixel, die in den Segmenten
der Linien 44, 45 angeordnet sind, welche die
Scheitel A-C verbinden, aus dem segmentierten Bild erfaßt.
-
In
der Praxis wird in beiden Fällen
zumindest ein Scan an jedem charakteristischen Bereich des Codes
ausgeführt.
Auf diese Weise wird eine Wellenform (in 7 gezeigt)
erhalten, welche den Verlauf der Helligkeit L in einer allgemeinen
Scanrichtung x darstellt. Diese Wellenform wird dann verwendet,
um die Anzahl an Elementen in jeder Zeile und die Anzahl an Zeilen
des Codes zu berechnen, Schritt 23. Da die Wellenform insbesondere
derjenigen ähnlich ist,
die durch Scannen eines Strichcodes mit einem Laserstrahl erhalten
wird (mit dem Vorteil, daß die Struktur
des gelesenen Musters a priori bekannt ist), ist es möglich, ein
bekanntes Verfahren zum Decodieren von Strichcodes zu verwenden.
Es ist beispielsweise möglich,
zunächst
den Mittelwert der erhaltenen Helligkeit L (Linie 46 von 7)
zu berechnen und die Anzahl an Malen aufzuzeichnen, die das Helligkeitssignal
die Mittelwertlinie 46 überquert.
Am Ende wird die Anzahl N1 von Elementen in jeder Zeile (Anzahl
von Spalten) und die Anzahl N2 von Zeilen des Codes erhalten, der
gelesen wird.
-
Der
Gittererzeugungsvorgang umfaßt
einen ersten Unterschritt 24, bei dem ein ideales rechteckiges
Gitter aus einem Array von wahrnehmbaren Punkten erzeugt wird, einen
zweiten Unterschritt 25, bei dem die Homographie ermittelt
wird, die das rechteckige Gitter in das deformierte Gitter transformiert,
das dem segmentierten Bild entspricht, indem eine Reihe von Punkten
verwendet wird, deren Position innerhalb des Codes (Referenzpunkte)
bekannt ist, und einen dritten Unterschritt 26, bei dem
ein deformiertes Gitter, das dem idealen Gitter entspricht, unter
Verwendung der eben ermittelten Homographie erzeugt wird.
-
Die
Erzeugung des rechteckigen Gitters erfolgt derart, daß die Koordinaten
seiner Punkte (wahrnehmbare Punkte genannt) der Mitte der Elemente
entsprechen, die den zu lesenden Code bilden, wobei ein Gitter verwendet
wird, das aus vertikalen und horizontalen Linien gebildet ist, die,
wie es oben beschrieben ist, eindeutig mit den wahrnehmbaren Punkten
korreliert sind, wobei die mögliche perspektivische
Verzerrung und die Art des zu lesenden Codes berücksichtigt werden.
-
In
der Praxis ist für
alle Codearten ein rechteckiges Gitter mit einer Rasterung definiert,
die optional für
jede Richtung unterschiedlich, aber konstant ist, wobei die Anzahl
an Zeilen und Spalten der in dem Code entspricht.
-
Insbesondere
wird bei Datamatrix- und QR-Codes das Gitter so erzeugt, daß die Schnittpunkte
der Gitterzeilen und -Spalten die Mitte jedes Codeelements darstellen.
Hierzu werden die Umrisse des gewünschten Decodierungsbildes,
d. h. des Bildes, das die Decodierungsmerk male enthält, frei festgelegt.
Beispielsweise werden die Koordinaten für die vier Scheitel V1', V2', V3', V4' (11)
des Decodierungsbildes frei festgelegt, z. B. (0, 0), (0, 1), (1, 1),
(1, 0), um ein Decodierungsbild zu erhalten, das Seiten mit einheitlicher
Länge und
einer Rasterung hat, die optional in die horizontale und vertikale
Richtung unterschiedlich ist, oder (0, 0), (0, N1), (N2, N1), (N2,
0), wobei N1 und N2 die oben definierte Bedeutung haben, um ein
Decodierungsbild zu erhalten, das Seiten mit optional unterschiedlicher
Länge (falls N1 ≠ N2) und einer
gleichgroßen
Rasterung in die horizontale und vertikale Richtung hat.
-
Sobald
die Länge
der horizontalen und vertikalen Seite des Decodierungsbildes basierend
auf der Anzahl von Zeilen und Spalten des Decodierungsbildes (die,
wie oben erwähnt,
gleich der Anzahl von Zeilen und Spalten des zu lesenden Codes ist) festgelegt
wurde, werden die Koordinaten der einzelnen Zeilen und Spalten,
deren Schnittpunkte die Punkte des Decodierungsbildes darstellen,
denen nachfolgend die entsprechenden binarisierten Helligkeitswerte
zugeordnet werden, automatisch von diesen abgeleitet. 8 zeigt
beispielsweise das rechteckige Gitter, das in dem rein beispielhaften
Fall von N1 = N2 = 5 erhalten wird, sobald die Koordinaten der vier
Scheitel V1', V2', V3', V4' des Decodierungsbildes
festgelegt wurden. Die Kreuze in 8 zeigen die
Schnittpunkte der Zeilen und Spalten des Decodierungsbildes, deren
Koordinaten sofort erhalten werden können, sobald die Länge der
Seiten des Decodierungsbildes festgelegt wurde. Falls die Länge der
Seiten beispielsweise auf 1 = 5 festgesetzt wird, lauten die erhaltenen
Koordinaten (0,5, 0,5), (0,5, 1,5), ..., (1,5, 0,5), (1,5, 1,5)
etc.
-
Im
Gegensatz dazu wird bei Maxicodes (die aus sechseckigen Elementen
gebildet sind, die wie eine Bienenwabe angeordnet sind) das rechteckige Gitter
so erzeugt, daß die
Schnittpunkte der horizontalen und vertikalen Linien (konzeptionell
den Zeilen und Spalten des Datamatrixcodes und des QR-Codes ähnlich)
die Mitte der Sechsecke der ungeraden Zeilen darstellen, während die
Mittelpunkte zwischen zwei aufeinanderfolgenden Schnittpunkten die
Mitte der Sechsecke der geraden Zeilen darstellen. Durch Erzeugen
einer rechteckigen Matrix mit konstanter, aber unterschiedlicher
Rasterung (beispielsweise H in horizontaler Richtung und V in vertikaler
Richtung, siehe 9) in den beiden Richtungen
und Analysieren derselben Zeile für Zeile, befinden sich die
wahrnehmbaren Punkte (wieder durch Kreuze in 9 angegeben)
abwechselnd in den Schnittpunkten des rechteckigen Gitters und in
den dazwischenliegenden Punkten der Schnittpunkte. Es ist wichtig
zu betonen, daß bei
diesem Schritt alle Koordinaten der Mitten der Codeelemente, die
zur Decodierung erforderlich sind, (und daher der Wert der Teilung
H und V neben der präzisen
Ausrichtung bei einer vorausgesetzten Unsicherheit von 90°), sowie
die (festgelegte) Anzahl an Zeilen und Spalten bekannt ist, so daß die Erzeugung
des rechteckigen Gitters besonders einfach ist.
-
Sobald
der Schritt des Bestimmens der Koordinaten aller wahrnehmbaren Punkte
abgeschlossen ist, ist es erforderlich, das rechteckige Gitter auf
das reale segmentierte Bild „abzubilden", indem die Koordinaten
der Punkte (Pixel) auf dem segmentierten Bild berechnet werden,
die den wahrnehmbaren Punkten des rechteckigen Gitters entsprechen.
Das Problem wird durch die geometrische Deformierung des Codes verkompliziert.
Dieses Problem wird dadurch gelöst,
daß auf
Transformationen zurückgegriffen
wird, die aus der traditionellen Geometrie bekannt sind, beispielsweise
Homographie. Wenn die Koordinaten der vier Scheitel V1, V2, V3,
V4 des Vierecks, das den Code in dem gespeicherten Bild einbeschreibt,
(oder den vier Scheiteln des segmentierten Bildes) bekannt sind
und die Koordinaten der vier entsprechenden Scheitel V1', V2', V3', V4' des Decodierungsbildes
so festgelegt werden, daß die
Codegeometrie (ursprüngliches
rechteckiges Gitter) berücksichtigt
wird, wird die Homographie, welche die Koordinaten der Scheitel
V1', V2', V3', V4' in der Ebene des
Decodierungsbildes in die Koordinaten der entsprechenden Scheitel
V1, V2, V3, V4 in der Ebene transformiert, die das segmentierte
Bild enthält,
eindeutig identifiziert (Homographieermittlungsschritt 25).
In der Praxis werden Koeffizienten einer Matrix C bestimmt, welche
die Koordinaten (T, X, Y) der entsprechenden Scheitel V1, V2, V3,
V4 in dem segmentierten Bild liefert, wenn sie mit den Koordinaten (1,
x, y) der Scheitel V1',
V2', V3', V4' multipliziert werden.
Zudem ermöglicht
diese Homographie bekanntermaßen,
daß alle
Punkte in der Ebene des Decodierungsbildes in entsprechende Punkte
in der Ebene umgewandelt werden können, die das segmentierte
Bild enthält.
-
Insbesondere
bei Maxicodes wird auch die invertierte Transformation (Matrix C–1)
berechnet, die notwendig ist, um das ideale Gitter bezüglich des
Codes korrekt auszurichten (da hier die aus dem Erkennungsmuster
resultierende Ausrichtung mit einer Abweichung von ± 90° bekannt
ist, wie es oben erwähnt ist).
-
Sobald
die Homographie bekannt ist, wird sie auf alle wahrnehmbaren Punkte
des rechteckigen Gitters (das in dem Gittererzeugungsschritt 24 erhalten
wird) angewendet. In der Praxis werden die Koordinaten der Punkte
des segmentierten Bildes berechnet, im folgenden charakteristische
Punkte genannt, die den wahrnehmbaren Punkten des rechteckigen Gitters
entsprechen, wobei eine Matrix erhalten wird (Schritt 26 zur
Berechnung des transformierten Gitters). An diesem Punkt wird Bezug
auf 10 und 11 genommen,
die das transformierte Gitter, das (aufgrund der Homographie) dem
rechteckigen Gitter entspricht, das dem Code von 2 überlagert
ist, bzw. die Beziehung zwischen einem rechteckigen Gitter und einem
transformierten Gitter zeigen. Zudem zeigt 10 Scanlinienpaare 40, 41 und
ein Rechteck 50, das in dem Schwellenwertberechnungsschritt 20 verwendet
wird.
-
Nachfolgend
wird für
alle charakteristischen Punkte, die eben identifiziert wurden und
im Idealfall der Mitte jedes Codeelements entsprechen, der Helligkeitswert,
der mit diesen in dem segmentierten Bild assoziiert ist, erfaßt und binarisiert,
wobei der Schwellenwert verwendet wird, der in dem Schwellewertberechnungsschritt 20 (Wertbinarisierungsschritt 27) berechnet
wurde. Der soeben erhaltene binarisierte Wert wird dann dem entsprechenden
wahrnehmbaren Punkt an dem rechteckigen Gitter zugeordnet, und es
wird Punkt für
Punkt eine Matrix von Punkten erzeugt, welche die Decodierungsmerkmale darstellen
(Decodierungsbild-Rekonstruktionsschritt 28).
-
In
der obigen Beschreibung wurde insbesondere Bezug auf Datamatrixcodes,
Maxicodes und QR-Codes genommen. Tatsächlich wird die Decodierungsmerkmalextraktion
für lineare
Codes und Stapelcodes einfacher auf andere Weise durchgeführt. Das
vorliegende Verfahren ist jedoch auch auf diese Codes anwendbar
und wird auch vorteilhaft in dem Fall von Codes eingesetzt, die
fehlerhaft sind oder denen Teile fehlen.
-
Insbesondere
ist es bei linearen Codes möglich,
das Gittererzeugungsverfahren anzuwenden und die für mehrere
Zeilen erhaltenen Daten zu mitteln, wobei der oben beschriebene
Gittererzeugungsvorgang eingesetzt wird, um ein Gitter mit einer
minimalen Anzahl vorausgewählter
Zeilen zu verwenden.
-
Bei
Stapelcodes ist es notwendig, den Gittererzeugungsschritt anzupassen
und die Anzahl an Zeilen auszuwählen,
um stets wenigstens eine Transformation für jede nützliche Zeile des Stapelcodes
sicherzustellen.
-
Die
Vorteile des beschriebenen Verfahrens sind wie folgt.
-
Zunächst ist
es höchst
widerstandsfähig
gegenüber
geometrischen Deformierungen und ermöglicht die Decodierung von
Codes, die mit Versatz- und/oder Nickwinkeln von bis zu 50° erfaßt wurden. Es
ist insbesondere für
manuelle Lesegeräte
vorteilhaft.
-
Desweiteren
ist das vorliegende Verfahren höchst
zuverlässig,
da es für
jedes Element des Codes nur den mittleren Punkt oder das mittlere
Pixel, oder den Punkt sucht, der weniger durch Randeffekte beeinflußt wird.
In der Tat sind die Pixel, die am Rand der Codeelemente angeordnet
sind, die an Codeelemente unterschiedlicher Farbe angrenzen, häufig unscharf,
was sowohl auf Druck- als auch Bilderfassungsvorgänge zurückzuführen ist;
folglich bewirkt ein separates oder kumulatives Verarbeiten der
Helligkeitspegel der Randpixel eine Verschlechterung der erhältlichen
Daten. Das vorliegende Verfahren verhindert somit diese Verschlechterung,
indem es ausschließlich
an theoretisch weniger empfindlichen Pixeln arbeitet.
-
Das
Verfahren ist im Vergleich zu standardmäßigen AIM-Verfahren schnell.
In der Tat arbeitet das Standardverfahren bei der Extrahierung der
Decodierungsmerkmale bei Maxicodes in dem Frequenzraum und erfordert
eine zweidimensionale FFT des gesamten Bildes und dann eine invertierte
FFT. Im Gegensatz dazu findet gemäß der vorliegenden Erfindung
keine Ope ration im Frequenzbereich statt, und die Transformationen
in dem Raum (Homographie) werden nur an wenigen Pixeln des Bildes durchgeführt.
-
Das
vorliegende Verfahren ist zudem unabhängig von Codeabmessungen und
-Ausrichtung. In der Tat kann es Codes mit vielen unterschiedlichen Abmessungen
decodieren. Dieser Vorteil ist besonders wichtig in dem Fall von
Datamatrixcodes, QR-Codes und PDF-codes, da deren Abmessungen extrem
variieren.
-
Wie
es oben erwähnt
ist, ermöglicht
das vorliegende Verfahren innerhalb bestimmter Grenzen das Lesen
und Decodieren von Codes, die fehlerhaft sind oder denen Teile fehlen,
z. B. die entlang der Zeilen und Spalten angeordnet sind, welche
die Taktdaten enthalten. In der Tat ermöglicht es die Berechnung der
Länge (Modul)
jedes Elements und die Erfassung fehlerhafter Elemente, die beispielsweise Längen gleich
einem Vielfachen (oder einem Bruchteil) der meisten Taktleitungselemente
haben, und somit die Korrektur der erfaßten Anzahl an Zeilen und Spalten
basierend auf den erhaltenen Modulinformationen.
-
Schließlich ist
ersichtlich, daß zahlreiche
Modifikationen und Variationen an dem hier beschriebenen und dargestellten
Verfahren vorgenommen werden können,
die alle im Bereich der Erfindung liegen, wie er durch die beiliegenden
Ansprüche
definiert ist. Insbesondere wird betont, daß, obwohl das beschriebene
Korrekturverfahren perspektivische Deformierungen korrigieren kann,
die nur mit einem fehlenden Parallelismus zwischen der Ebene des
Codes und der Aufnahmeebene zusammenhängen, wie es oben erwähnt ist,
es optional mit anderen Algorithmen zum Kompensieren anderer Deformierungen
verbunden sein kann, die beispielsweise aufgrund einer Krümmung der
Oberfläche
des Etiketts auftreten.
-
Zudem
können
die erwähnten
Merkmale und die beschriebene Schrittfolge durch andere technisch äquivalente
ersetzt werden.
-
Es
wird beispielsweise betont, daß die
Homographie aus einer beliebigen Gruppe von vier Referenzpunkten
des deformierten Bilds erhalten werden kann, das eine bekannte Position
in dem Code (in dem ursprünglichen
Rechteck) hat. Es ist insbesondere bei QR-Codes möglich, die
vier Punkte zu verwenden, die in 12 mit
einem Kreuz markiert sind, d. h. die Endpunkte der Scans, die während Schritt 22 ausgeführt werden.
-
Desweiteren
kann der Binarisierungsschwellenwert-Berechnungsschritt 20 nach
dem Gittererzeugungsschritt direkt vor dem Binarisierungsschritt 27 durchgeführt werden. Ähnlich kann
der Homographieermittlungsschritt 25 vor dem Gittererzeugungsschritt 24 und
den Schritten Erzeugen des transformierten Gitters 26,
Binarisierung 27 durchgeführt werden und die Erzeugung 28 des
decodierten Bildes kann Punkt für
Punkt anstelle jedes einzelnen für
die Gruppe von wahrnehmbaren Punkten durchgeführt werden; sobald die Koordinaten
für einen
ersten wahrnehmbaren Punkt ermittelt wurden, kann beispielsweise
der entsprechende transformierte Punkt in dem segmentierten Bild
bestimmt und der mit diesem verbundene Helligkeitswert binarisiert
werden; das Verfahren fährt
dann für
jeden identifizierten wahrnehmbaren Punkt iterativ auf die gleiche
Weise fort.
-
Schließlich kann
der Gittererzeugungsschritt durchgeführt werden, um anstelle nur
der alleinigen Mitte jedes Codeelements eine kleine Untergruppe von
Pixeln zu bestimmen, die nahe der Mitte angeordnet sind, und dann
den Mittelwert der Helligkeit des Pixeluntergruppe zu berechnen,
was für
die Schnelligkeit und Einfachheit der Vorgänge zum Extrahieren des Decodierungsmerkmals
nachteilig ist.