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.

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]

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
- 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.
- Thonky, QR Code Tutorial. Praktyczne omówienie budowy symbolu, finder patterns i maskowania.
- Denso Wave, History of QR Code. Oficjalna historia powstania kodu QR w Denso Wave i kontekstu przemysłowego.
- Denso Wave, About QR Code. Opis cech formatu, pojemności i polityki udostępnienia.
Powiązane artykuły
- 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.