
Such-, Ausrichtungs- und Taktmuster im QR-Code
Drehen Sie einen QR-Code auf den Kopf, und er scannt weiter. Fotografieren Sie ihn im spitzen Winkel, wickeln Sie ihn um eine Flasche, fangen Sie ihn in einer Schaufensterspiegelung ein, und ein Decoder findet ihn trotzdem, richtet ihn gerade und liest ihn. Diese Toleranz ist keine clevere Software, die ein schwaches Bild ausgleicht. Sie steckt im Bild selbst, und jede ihrer Strukturen hat einen Namen, der Ihnen später in einem Prüfprotokoll aus der Druckerei wieder begegnet.
Die meisten Module in einem QR-Code tragen Daten. Eine Minderheit trägt Struktur, und genau die macht den Rest lesbar.
Die drei Eckquadrate
Die Suchmuster sind das Erste, was jedem auffällt: drei ineinanderliegende Quadrate in drei Ecken. Jedes ist 7x7 Module groß, aus einem dunklen 7x7-Außenring, einem hellen 5x5-Ring darin und einem massiven dunklen 3x3-Kern.
Auf die Proportionen kommt es an. Ziehen Sie eine beliebige Gerade durch die Mitte eines Suchmusters, und Sie kreuzen dunkel, hell, dunkel, hell, dunkel im Breitenverhältnis 1:1:3:1:1. Waagerecht, senkrecht und über die Diagonale gilt das Verhältnis. Ein Decoder zieht Linien über das Bild und sucht genau nach dieser Fünferfolge, was billig zu prüfen ist und in jedem Maßstab funktioniert, denn ein Verhältnis kümmert sich nicht darum, ob der Code 15 mm auf einer Visitenkarte oder zwei Meter an einer Wand misst.
Drei Treffer ergeben drei Punkte, und drei Punkte definieren eine Ebene. Daraus leitet der Decoder Position, Maßstab und Drehung ab, bevor er ein einziges Bit gelesen hat. Jedes Suchmuster sitzt zudem in einem ein Modul breiten hellen Trennstreifen an seinen Innenkanten, der verhindert, dass Datenmodule das Muster berühren und das Verhältnis verfälschen.
Warum die vierte Ecke leer bleibt
Drei Quadrate, nicht vier, und das Weglassen ist Absicht. Drei Punkte in den Ecken eines rechtwinkligen Dreiecks haben genau einen rechtwinkligen Scheitel, und dieser Scheitel markiert oben links im Symbol. Die Drehung ist sofort geklärt.
Setzen Sie ein viertes Suchmuster in die verbleibende Ecke, und Sie hätten eine Figur mit vierzähliger Symmetrie und keine Möglichkeit zu sagen, wo oben ist. Jeder Scan brächte vier Kandidatenlagen mit, und der Decoder müsste sie nacheinander durchprobieren. Die leere Ecke leistet echte Arbeit, indem sie nicht da ist.
Ausrichtungsmuster und gewölbte Flächen
Ausrichtungsmuster sind die kleineren Quadrate, verteilt über größere Codes: 5x5 Module, ein dunkler Außenring, ein heller Innenring, ein dunkles Modul in der Mitte.
Version 1 hat keine, denn ein Raster von 21x21 ist klein genug, dass die drei Suchmuster es festnageln. Ab Version 2 erscheint ein einzelnes Ausrichtungsmuster in Richtung unten rechts. Die Zahl steigt mit der Version bis auf sechsundvierzig in den größten Größen, mit Mittelpunkten auf einem quadratischen Raster, wobei die drei Rasterplätze, die mit Suchmustern kollidieren würden, schlicht weggelassen werden.
Was sie beheben, ist Verzerrung, die nicht gleichmäßig ist. Die drei Suchmuster lassen einen Decoder ein flaches Rechteck abbilden, aber ein echtes Foto ist selten ein flaches Rechteck: die Kamera steht schräg, das Etikett wölbt sich um eine Dose, das Papier hat einen Knick, die Linse verbiegt die Ränder des Bildes. Ausrichtungsmuster geben dem Decoder bekannte Bezugspunkte im Inneren, sodass er das Raster örtlich korrigieren kann, statt eine einzige globale Transformation anzunehmen. Ohne sie liefe ein großes, schräg gelesenes Symbol zur fernen Ecke hin aus dem Register, und jedes Modul jenseits dieses Punktes würde an der falschen Stelle abgetastet. Wie die Anzahl mit der Version wächst und was das für die physische Modulgröße bedeutet, lohnt sich zusammen zu lesen.
Taktmuster setzen den Maßstab
Zwischen den Suchmustern verlaufen eine Reihe und eine Spalte aus abwechselnd dunklen und hellen Modulen, ein Modul breit, in festem Abstand zur oberen linken Ecke. Das ist das Taktmuster, und es ist das am wenigsten dekorative Element im Symbol.
Seine Aufgabe ist, den Modulabstand festzulegen. Zu wissen, wo der Code sitzt, reicht nicht; der Decoder muss auch wissen, wie breit ein Modul ist und wo jede Grenze fällt. Die abwechselnde Folge gibt ihm ein Lineal mit Strichen an jedem Modul, sodass er Positionen über das Symbol hinweg zählen und im Takt bleiben kann, selbst wenn der Maßstab durch die Perspektive über das Bild leicht driftet.
Hier steckt ein kleines Stück gestalterische Eleganz. Wo in größeren Versionen ein Ausrichtungsmuster zufällig auf der Taktreihe oder -spalte liegt, fügt sich die eigene abwechselnde Struktur des Ausrichtungsmusters in den Takt ein, statt ihn zu unterbrechen.
Format- und Versionsinformation
Zwei weitere reservierte Bereiche tragen Metadaten statt Nutzlast.
Die Formatinformation legt sich um die Suchmuster: fünfzehn Bit, die die Fehlerkorrekturstufe festhalten und welches der acht Maskenmuster angewendet wurde. Sie erscheint in jeder Version und wird an zwei getrennten Stellen doppelt gespeichert, mit eigener Fehlererkennung, denn ein Decoder, der die Formatbits nicht lesen kann, kann überhaupt nichts lesen. Welche Korrekturstufe dort landet, hat echte Folgen für Schadenstoleranz und Kapazität, und sie ist die Einstellung, die entscheidet, wie viel Grafik ein Code mit Logo übersteht.
Die Versionsinformation ist das Paar von 6x3-Blöcken nahe den Suchmustern oben rechts und unten links, und es existiert erst ab Version 7. Kleinere Symbole brauchen es nicht, denn die Modulanzahl allein bestimmt die Version.
Ein einzelnes Modul neben dem unteren linken Formatbereich ist immer dunkel, in jedem je hergestellten Symbol. Es trägt keine Botschaft; es ist ein fester Bezugspunkt.
Maskierung, und warum gleiche Daten verschieden aussehen können
Der Datenbereich wird nicht roh beschrieben. Eines von acht Maskenmustern wird per Exklusiv-Oder darübergelegt und kippt eine regelmäßige Teilmenge der Module. Der Encoder erzeugt Kandidaten, bewertet jeden nach Strafregeln und behält den besten.
Die Regeln bestrafen lange Folgen einer Farbe, große geschlossene Flächen und ein unausgewogenes Verhältnis von Dunkel zu Hell. Eine Regel wiegt schwerer als die anderen: Jede Folge in den Daten, die das Verhältnis 1:1:3:1:1 der Suchmuster nachahmt, wird hart bestraft, denn ein falsches Suchmuster mitten im Datenbereich würde den Decoder auf die Jagd nach einem Symbol schicken, das es nicht gibt.
Deshalb kann derselbe Inhalt bei verschiedenen Korrekturstufen sichtbar verschiedene Codes ergeben, und deshalb ist die optische Textur eines Codes nichts, was Sie direkt einstellen. Unter der Maske werden die Daten in die verbleibenden Module geschrieben, in einem zwei Module breiten Zickzack, der unten rechts beginnt und sich hinauf, dann hinunter, dann hinauf arbeitet und dabei jeden oben beschriebenen reservierten Bereich überspringt.
Wie diese Strukturen in einem Prüfprotokoll auftauchen
Die Spezifikation, aus der die hier beschriebenen Muster stammen, erscheint in Deutschland als DIN-Fassung der internationalen Norm, und für die Druckqualität gedruckter zweidimensionaler Symbole gibt es eine eigene Norm mit einer Bewertung von A bis F. Deren Messgrößen sind fast eins zu eins die Strukturen aus diesem Text. Fixed Pattern Damage bewertet Schäden an Such-, Ausrichtungs- und Taktmustern einschließlich der Ruhezone. Axial und Grid Nonuniformity messen, wie weit das gedruckte Modulraster vom Soll abweicht, also genau die Verzerrung, gegen die Taktmuster und Ausrichtungsblöcke arbeiten. Und Unused Error Correction zeigt, wie viel Reparaturreserve der Druck bereits verbraucht hat, bevor der Code überhaupt an der Wand hängt.
Das ist der praktische Nutzen dieses Wissens: Fordern Sie bei einer Auflage das Prüfprotokoll Ihrer Druckerei oder Ihres Verpackungslieferanten an und lesen Sie diese drei Werte. Eine schlechte Note bei Fixed Pattern Damage erklärt, warum ein Entwurf scheitert, der die Ruhezone beschnitten oder die Eckquadrate dekoriert hat, obwohl er auf dem Schreibtisch einwandfrei decodiert. Und weil hier fast alles in der DIN-Reihe gedruckt wird, lässt sich die Ruhezone gut als Millimetermaß vereinbaren: vier Module Rand, umgerechnet auf die Modulkantenlänge des jeweiligen Formats, ist eine Angabe, die eine Druckerei ins Datenblatt schreiben und ein Einkauf in eine Ausschreibung aufnehmen kann.
Die Ruhezone gehört zum Symbol
Vier Module freier Rand auf allen vier Seiten, ohne Inhalt. Diese Zone ist keine Polsterung, die jemand mit Sinn für Weißraum ergänzt hat, sondern festgelegte Struktur: Ein Decoder bestimmt mit ihr, wo das Symbol endet und der Hintergrund beginnt.
Drängen Sie Text, eine Rahmenlinie oder ein unruhiges Foto heran, und die Suche nach dem Verhältnis 1:1:3:1:1 kann umgebende Grafik als Teil des Musters auffassen. Codes, die so scheitern, sehen für Menschen oft völlig in Ordnung aus, weshalb die Ursache so lange braucht, bis sie auffällt. Sie steht dauerhaft auf jeder Liste von Gründen, warum ein Code nicht scannt, und ist der am leichtesten zu behebende davon.
Probieren Sie das an etwas, das Sie bereits gemacht haben: Zoomen Sie hinein, bis einzelne Module sichtbar sind, legen Sie ein Lineal quer über ein Eckquadrat, und prüfen Sie, ob die dunklen und hellen Bänder tatsächlich 1:1:3:1:1 ergeben. Tun sie es nicht, wurde die Grafik ungleichmäßig gedehnt, und keine Fehlerkorrektur der Welt rettet sie. Die Lesefolge beginnt und endet mit diesem Verhältnis.


