18.01.2016 yahe legacy thoughts
Bereits vor einer ganzen Weile hatte ich mal mit Licht und Farbfiltern herum experimentiert. Damals hatte ich mit Hilfe von Farbfiltern das Licht aufgespalten, das von einer RGB-LED emittiert wurde und dabei auch erwähnt, dass man auf Basis dieser Bündelung Daten übertragen könne.
Einige Zeit später war ich auf der Suche nach einer Möglichkeit, Binärdaten über ein Druckerzeugnis zu übertragen. Dabei denkt man heutzutage natürlich erst einmal an 2D-Barcodes (z.B. Aztec-Codes, Matrix-Codes oder die allseits bekannten QR-Codes). Leider reichte deren Datendichte nicht aus. In ähnlichen Fällen werden deshalb gelegentlich 3D-Barcodes (z.B. der "HCCB"-Code von Microsoft) eingesetzt. Diese funktionieren, indem zusätzlich zu den beiden Dimensionen Höhe und Breite noch die dritte Dimension der Farbe eingeführt wird. Allerdings benötigen solche 3D-Barcodes typischerweise mehrere Dinge:
In dem Moment dachte ich an das Experiment mit den Farbfiltern zurück. Wenn man es hinbekäme, die Komplexität des Barcode-Lesens und die Komplexität des gesteigerten Farbraums voneinander zu trennen, könnte man einfach reproduzierbare Barcodes erzeugen, die gleichzeitig mit vorhandenen Standardmitteln lesbar wären. Geboren war der kombinierte Farb-Barcode.
Herstellen lässt er sich recht einfach:
Gedanken machen muss man sich nun darum, wie man die Barcodes wieder getrennt bekommt. Dafür ist es wichtig, Farbe A und Farbe B richtig zu wählen. Diese beiden Farben müssen eine Beziehung zueinander haben, die sich wie folgt beschreiben lässt:
Glücklicherweise hatte ich Farbfilter zuhause, die diese beiden Bedingungen erfüllen, rote und blaue:
Wichtig für einen produktiven Einsatz ist, dass die Farbfilter und die für den Druck verwendeten Farben aufeinander abgestimmt werden. Im Haushaltsgebrauch wird man das nicht unbedingt hinbekommen, weshalb das Auslesen des Barcodes im selbstgebastelten Umfeld wohl mehr Geduld erfordert, als es im professionellen Umfeld der Fall wäre.
Um nun den Inhalt der Barcodes auslesen zu können, platziert man einen Farbfilter vor der Kamera und scannt den Code. Anschließend tauscht man den Farbfilter vor der Kamera aus und scannt den Code erneut (sogenanntes "shuttern"). Eine Alternativmöglichkeit ist, zwei Kameras gleichzeitig zu verwenden, die jeweils einen der Farbfilter fest zugeordnet bekommen. So ist es möglich, trotz doppelter Datendichte die Lesegeschwindigkeit konstant zu halten.
Wie man erkennt, geschehen beim Aufnehmen des Barcodes durch die Farbfilter nun mehrere Dinge:
Durch Einsatz der Farbfilter und dem Effekt der Kontraständerung der Gegenfarbe entstehen zwei unterschiedliche Barcode-Abbildungen auf Basis eines einzigen Farb-Barcodes. Jeder QR-Code-Leser, der einen automatischen Kontrastabgleich vornimmt, kann diese Barcodes bereits lesen. Zur Verbesserung der Barcode-Erkennung können nach dem Einsatz des Filters noch zwei Schritte unternommen werden, um das Leseergebnis zu verbessern. Im ersten Schritt kann eine Überführung in ein Graustufenbild erfolgen, um den Bias des Farbsensors abzumildern. Denn wie man in den Ausgangsbildern erkennt, ist der Kontrast im Blaufilter-Bild wesentlich schlechter erkennbar als im Rotfilter-Bild.
Im zweiten Schritt kann mit Hilfe eines Schwellwertabgleichs der tatsächlich benötigte Bildinhalt gut herausgefiltert werden. GIMP bietet hierfür beispielsweise ein einfach zu verwendendes Werkzeug, das einem eindeutig anzeigt, welche Schwellwerte von Interesse sind:
Die daraus entstehenden Barcodes sollten nun wirklich von jedem Barcode-Scanner gelesen werden können:
Um zu zeigen, dass das Auslesen auch mit Standardmitteln funktioniert, habe ich einen prototypischen Versuch unternommen und zuhause einen Farb-Barcode ausgedruckt, eine normale QR-Code-App auf meinem iPhone installiert und einen Farbfilter vor die Kamera gehalten. Den Versuch, die beiden Ebenen des 3D-Barcodes aufzunehmen habe ich als Video bei Youtube hochgeladen. Ja, es funktioniert nicht perfekt, aber weder Licht, Druckerfarbe, Farbfilter noch die verwendete App sind in irgendeiner Form aufeinander abgestimmt. Das sollte man beim Betrachten des Videos im Hinterkopf behalten.
Einsatz finden kann solch ein Verfahren in meinen Augen in zwei Situationen: