článek je zajímavý, především popis postupu při zpětné rekonstrukci dat. Zatím jsem to moc nestudoval, přecejen se chci zeptat:
- je nějak řešeno nelineární zkreslení, které nastane například otočením papíru ve skeneru nebo změnou vlhkosti (papír se "zkroutí" ve své rovině)? Protože hledání křížků pomocí korelace je celkem fajn (to opravdu na takto výrazné obrazce funguje skoro stoprocentně), ale potom je asi zapotřebí zjistit zkreslení vzniklé mřížky křížků oproti mřížce ideální a provést nad částmi obrazu (mezi čtyřmi křížky) nějakou transformaci.
Samozřejmě, že při tisku klasického textu si člověk celkem ničeho nevšimne, ale v tomto případě může "zkroucený" mikrořádek asi nadělat pěknou paseku. Protože i hledání hran (přechodů mezi bity/pixely) se snadno dělá v pravidelné osově natočené mřížce, ale obecně je to dosti humus.
Třeba Datamatrix to řeší tak, že má dlaždice velikosti 10x10 až 144x144, které mají vlevo a dole "čáry" z jedniček, a vpravo a nahoře "čerchovanou čáru" 1/0. V rámci dostatečně malé dlaždice pak zkreslení nebývá tak velké.
Jasně, ale já mám spíš na mysli to, že pokud bude papír třeba jen natočený (tiskárna ho vytiskne nakřivo nebo se špatně vloží do skeneru), tak nejde tak o problém nalezení hranic větších oblastí (postačí vyhledat několik bodů na hraně, proložit je přímkou, vyhodit největší extrémy a znovu proložit nebo nalézt ony křížky), ale spíš dosti citlivého algoritmu na zpětné natočení, resp. na hledání pixelů v natočené bitmapě, což je složitější než u osově natočené bitmapy.
U 1D barcodů to řešení je docela jednoduché, taky si můžete všimnout, že se v obchodech pokladní s nějakým přesným nasměrováním paprsku nijak nemazlí - +-30 stupňů není žádná míra. Ale 2D a ještě k tomu dovedené do docela extrémních (myslím malých) rozměrů je IMHO složitější.
Copak 1D barcody typu 2/5I... Ty se dají plynule zvětšovat, takže dokud paprsek sejme celý barcode, je to úplně jedno. Navíc novější čtečky paprsek rozkmitávají po úsečce, které s časem mění směr.
Nejsem si jistý, jestli čtečky 2D BC umí číst natočený obraz, nebo jestli prostě dostanou obraz rovný (viz výše s 1D BC).
Čtení datamatrix (my jim tak říkáme, abychom je odlišili od BC) je celkem primitivní, vymyslíte ho sám. Důležité je, že je třeba vše provádět opakovaně. Vedení úseček a odečítání na nich musíte zkoušet s malým rozptylem několikrát, až dostanete "nejčistší obdélníky" (v pomyslném signálu) u té čerchované, a "nejlepší plnou" u té plné (případně za nejlepší výchozí body ty uprosřed oblasti parametrů, které dávají nejlepší výsledek). Každý řádek dat nejspíš umožňuje validaci, tedy zkuste opakovaně číst s malým rozptylem počátečních bodů úseček, a vyberte data "nejlépe platná". Všimněte si také, že datamatrix má synchronizační linie, takže je celý rozdělený na dlaždice velikosti 8x8 až 144x144 squares. Čím menší dlaždice, tím lépe se srovnáte řekněme se zmačkaným papírem. Přece jen aby vám utekl celý square při odečtu na 8-násobku jeho velikosti, to by chtělo dost smůly. U 144-násobku je to větší problém.
Celé čtení se také provádí na všech kandidátech na stránce (dost jich pak selže při čtení, protože to nejsou datamatrix, ale třeba fotky z ČB novin).
No kdyz mame ty krizky, tak se mezi nima natahne sit pixelu. Ted je to nastaveny tak ze mezi 2 krizky je roztec 24 pixelu. Tak masivne se ten papir asi nezkrouti, aby to v ramci jednoho ctverecku 24x24 nejak vyrazne vykolejilo z pixelu.
Sice máte poněkud švihlé názory (viz patenty jinde), a zde předvedené "zálohování na papír" je v praxi k ničemu, ale hračka je to krásná. Občas mě mrzí, že už nemám tolik času si hrát, jako vy. No, každá věc má svoje..