Skąd się wzięło · jak działa · co kryje pod powierzchnią

NIEBLOG

Historie zwyczajnych przedmiotów

Kod QR: po co trzy duże kwadraty w rogach

Trzy duże kwadraty w rogach kodu QR to wzorce lokalizacyjne. Pozwalają kamerze znaleźć symbol, ustalić jego położenie i obrót, zanim zacznie czytać dane. Czwarty róg wygląda inaczej celowo.

Diagram kodu QR z oznaczonymi elementami funkcyjnymi, w tym trzema wzorcami lokalizacyjnymi w rogach
Schemat struktury kodu QR. Trzy duże kwadraty w rogach to wzorce lokalizacyjne; pozostałe kolory oznaczają timing, format i dane.

Czarny kwadrat w kwadracie w kwadracie. Potem drugi, potem trzeci. Zanim kamer telefonu „przeczyta” link albo numer faktury, najpierw szuka tych trzech rogów. Bez nich kod QR byłby tylko szachownicą pikseli.

Pytanie jest proste: po co trzy duże kwadraty i dlaczego nie ma czwartego takiego samego?

Co właściwie widać w rogu

Każdy z trzech dużych kwadratów to nie ozdoba. To wzorzec lokalizacyjny: koncentryczny układ o wymiarze 7×7 modułów. W środku siedzi ciemny kwadrat 3×3, wokół niego jasna ramka, a na zewnątrz ciemna ramka. Stosunek szerokości ciemnych i jasnych pasów przy przecięciu linii przez środek daje charakterystyczną sekwencję, którą algorytm rozpoznaje nawet wtedy, gdy obraz jest zniekształcony.[1][2]

Moduł to najmniejsza „kratka” kodu: czarna albo biała komórka siatki. Cały symbol to siatka takich komórek. Wersja 1 ma 21×21 modułów. Kolejne wersje rosną, aż do dużych kodów z setkami modułów na bok. Niezależnie od rozmiaru trzy wzorce lokalizacyjne zostają w tych samych trzech narożnikach: lewy górny, prawy górny i lewy dolny.[1]

Czwarty narożnik (prawy dolny) wygląda inaczej. W większych wersjach pojawia się tam wzorzec wyrównania (alignment pattern): mniejszy „celownik”, który pomaga skorygować zniekształcenie perspektywy. Nie jest kopią dużego findera. Gdyby wszystkie cztery rogi były identyczne, skaner nie wiedziałby, którą stroną do góry jest kod.[1][2]

Po co lokalizacja przed odczytem

Kamera nie dostaje gotowej tablicy bitów. Dostaje zdjęcie: przechylone, często w ruchu, czasem w odbiciu albo przy nierównym świetle. Pierwsze zadanie nie brzmi „odszyfruj URL”. Brzmi: znajdź symbol, wyznacz jego narożniki, wyprostuj siatkę.

Wzorce lokalizacyjne są do tego zaprojektowane. Ich geometria pojawia się rzadko w zwykłym otoczeniu. Algorytm może szybko przeskanować obraz w poszukiwaniu charakterystycznego stosunku ciemnych i jasnych odcinków, a potem potwierdzić, że znalazł trzy rogi tworzące prostokątny układ. Dopiero potem czyta linie timingowe, informacje o formacie i właściwe dane.[1][2]

Bez tych kotwic kod trzeba byłoby trzymać idealnie prosto przed skanerem, jak stare kody kreskowe w kasie. QR miał działać szybciej i pod kątem. Stąd nazwa: Quick Response.

Skąd wziął się Quick Response

Kod QR powstał w Japonii w firmie Denso Wave. Prace prowadził zespół Masahiro Hary. Publiczna prezentacja datuje się na 1994 rok. Pierwotnym celem nie były menu restauracji ani bilety. Chodziło o śledzenie części w produkcji samochodowej: więcej informacji na małej etykiecie, odczyt w ruchu, odporność na zabrudzenia.[3][4]

Klasyczny kod kreskowy 1D mieści mało danych i wymaga względnie prostego ustawienia. QR jest dwuwymiarowy: dane rozłożone są w płaszczyźnie. Trzy wzorce lokalizacyjne były częścią kontraktu z rzeczywistością fabryki: kamera ma znaleźć symbol nawet wtedy, gdy etykieta jest obrócona albo lekko zniekształcona.[3]

Denso Wave nie zamknęło formatu w ścisłym monopolu licencyjnym na użycie. Firma zachowała patenty, ale umożliwiła szerokie stosowanie standardu. Później QR wszedł do ISO/IEC 18004. To przyspieszyło migrację z hali produkcyjnej do biletów, opakowań, plakatów i płatności.[1][4]

Timing, quiet zone i reszta „nie-danych”

Trzy kwadraty nie pracują same.

Między wzorcami lokalizacyjnymi biegną wzorce czasowe (timing patterns): naprzemienne ciemne i jasne moduły. Dają skanerowi miarę siatki: gdzie zaczyna się kolejna kolumna i wiersz. W większych kodach dochodzą wzorce wyrównania. Obok wzorców lokalizacyjnych leży też informacja o formacie: poziom korekcji błędów i wzór maski.[1][2]

Dookoła całego symbolu powinna zostać cicha strefa (quiet zone): jasny margines o szerokości kilku modułów. Bez niej skaner łatwiej myli granice kodu z tłem. Dlatego QR „przyklejony” do krawędzi zdjęcia albo nadrukowany bez białego obramowania bywa kapryśny, nawet jeśli trzy kwadraty są wyraźne.[1]

Maskowanie (mask pattern) miesza dane według jednego z kilku wzorów, żeby uniknąć dużych plam jednolitego koloru albo przypadkowych imitacji wzorca lokalizacyjnego w obszarze danych. To kolejny powód, dla którego środek kodu wygląda „losowo”, a rogi są powtarzalne i surowe.[1][2]

Dzieci skanują telefonami kody QR na ekspozycji muzealnej
Kod QR w muzeum. Telefon najpierw lokalizuje trzy rogi, potem odczytuje dane. Bez wyraźnych wzorców lokalizacyjnych i marginesu skanowanie bywa zawodne.

Korekcja błędów: brud nie musi zabijać kodu

QR używa korekcji błędów Reeda-Solomona. Część pojemności symbolu idzie nie na treść, tylko na nadmiar pozwalający odtworzyć uszkodzone moduły. Poziomy L, M, Q i H oznaczają coraz większą odporność i coraz mniejszą przestrzeń na dane.[1]

Dlatego kod z plamą, zadrapaniem albo logo w środku czasem nadal działa. Logo nie „magicznie omija” trzy kwadraty. Projektant zostawia nienaruszone elementy funkcyjne (zwłaszcza findery i timing) i korzysta z korekcji błędów w obszarze danych. Jeśli uszkodzisz wzorzec lokalizacyjny, skaner może w ogóle nie znaleźć symbolu, choć dane w środku byłyby poprawne.[1][2]

Co internet zwykle upraszcza

„Czwarty kwadrat też jest taki sam”

Nie jest. Brak czwartego identycznego findera jest cechą, nie niedopatrzeniem. Dzięki asymetrii skaner wie, jak obrócić siatkę.[1]

„Trzy kwadraty to logo firmy”

Nie. To część standardu. Logo marki, jeśli w ogóle jest, siedzi zwykle w środku obszaru danych i działa tylko dzięki korekcji błędów oraz ostrożnemu projektowi.

„Im gęstszy kod, tym lepiej”

Większa wersja mieści więcej danych, ale wymaga ostrzejszego obrazu i stabilniejszego kadru. Na plakacie oglądanym z daleka prostszy kod z wyraźnymi finderami bywa pewniejszy.

„QR zawsze prowadzi do strony”

Może nieść tekst, vCard, Wi-Fi, dane płatności albo identyfikator części. Link HTTP to tylko jeden z popularnych ładunków.[1][3]

Dlaczego właśnie trzy

Dwa punkty wyznaczają odcinek, ale nie orientację prostokąta w płaszczyźnie zdjęcia tak wygodnie jak trzy narożniki. Trzy wzorce lokalizacyjne dają skanerowi szybko trzy kotwice o znanej geometrii. Z nich wynika skala, obrót i perspektywiczne „wyprostowanie” siatki. Czwarty róg można potem wyliczyć albo doprecyzować mniejszym wzorcem wyrównania, bez powielania dużego bullseye.[1][2]

To kompromis inżynieryjny z lat dziewięćdziesiątych, który przetrwał erę smartfonów. Telefon w muzeum, bramka na lotnisku i skaner w magazynie nadal zaczynają od tego samego gestu: znaleźć trzy duże kwadraty, zanim cokolwiek „przeczytają”.

Następnym razem, gdy zobaczysz kod QR, warto najpierw popatrzeć w rogi. Dane są w środku. Orientacja zaczyna się od trzech kwadratów.

Źródła i dalsza lektura

  1. ISO/IEC 18004, Information technology - Automatic identification and data capture techniques - QR Code bar code symbology specification. Norma opisująca strukturę symbolu, wzorce lokalizacyjne, timing, format i poziomy korekcji błędów.
  2. Thonky, QR Code Tutorial. Praktyczne omówienie budowy symbolu, finder patterns i maskowania.
  3. Denso Wave, History of QR Code. Oficjalna historia powstania kodu QR w Denso Wave i kontekstu przemysłowego.
  4. Denso Wave, About QR Code. Opis cech formatu, pojemności i polityki udostępnienia.

Autor: Krystian Welcel

Piszę o przedmiotach, miejscach i zjawiskach, które skłaniają mnie do sprawdzenia, skąd się wzięły i jak naprawdę działają. Nieblog jest niezależnym projektem redakcyjnym. Więcej o autorze.

Znalazłeś błąd? Napisz na: .

  • Po co w banknocie nitka i znak wodny?

    Znak wodny powstaje w papierze jako różnica grubości włókien. Nitka jest osobną warstwą wtopioną w podłoże albo widoczną w „okienkach”. Obie rzeczy służą do sprawdzania banknotu pod światło i utrudniają zwykłe kopiowanie farby na zwykłym papierze.

  • Po co linijce puste miejsce przed zerem?

    Szkolna linijka zostawia kawałek plastiku przed kreską zera. Ten pasek bywa nazywany strefą ochronną albo ofiarną: krawędź ma prawo się zużyć, zero nie.

  • Fotofon Bella: telefon, który mówił wiązką światła

    Jak działał fotofon Alexandra Grahama Bella i Charlesa Sumnera Taintera z 1880 roku: lustro, selen, pierwsze bezprzewodowe rozmowy głosowe oraz droga od patentu do światłowodów.