Optar by mel mit dobre opravne kody. Problem bych osobne videl se ctenim cimkoliv jinym nez skenerem (hlavne rozliseni a uhel cteni jiny nez 90 stupnu) a nalezeni okraju.
Jinak Optaru fandim. Je to snad jediny barcode (spolu s QR), ktere jsou volne k dispozici (tj. je znamy postup kodovani a dekodovani a lze je volne implementovat bez licenci).
DataMatrix by byl sobry kod, ale jeho postup zakodovani je tajny (nutno zakoupit normu).
Problem pri zpracovani toho „zkoseneho“ obrazu umisteneho v prostoru je prave nalezeni tech referencnich bodu.
Jestli je ten referencni bod ctverec („tercik“) pri normalnim zobrazeni, tak kdyz ten papir zkosite, tak jeho prumet do roviny uz je treba jen pootoceny kosoctverec, nehlede na to, ze jine shluky cernych a bilych bodu se mohou jevit jako cerne bloky podobne referencnim bodum apod.
Ted do toho pridejte realne situace, kdy plocha kodu nemusi byt rovina, ale cast zakrivene plochy, uvazujte odrazy svetla, ktere vam cerne body zmeni na sede az bile a rozeznani referencnich bodu pro vypocet transformace uz neni tak trivialni zalezitost.
Já teda nevím jak to řeší optar, ale já bych to řesil tak, že bych nejdřív našel okraje → první křivka. Pravděpodobnost, že o křivku vedle bude nějak extrémně zkřivená je dost malá, takže bych zkusil hledat referenční bod s nějakou rezervou (jinak velikost ref. bodu jde nastavit ve zdrojáku). No a tím pádem bych dostal druhou křivku a mohl bych aproximovat další křivku. Samozřejmě, že při nějakém extrémním zkroucení by to nešlo, ale to se ve skeneru zase často nestává.
> Samozřejmě, že při nějakém extrémním zkroucení by to nešlo, ale to se ve skeneru zase často nestává.
Ja mel na myslim spise situace, kdy se Optar vytiskne treba na tricko a snima se to mobilem. Tam uz je zakriveni a natoceni v prostoru slusne.
Ty „krivky“ jsou pak klidne polynomy vyssich radu.
> to už se z optaru stává obsahem informací už spíš QR kód
Ja myslel, ze to je to, na co jsi se ptal :-)
Je to 2D carovy kod stejne jako QR, tak proc ho take tak nepouzivat. Clock ho ale spise navrhoval jako archivacni kod pro snimani z rovneho media (papiru, filmu) skenerem, ktery je umisteny v normale plochy (tj. je kolmo na medium).
Optar si dela kalibraci cerneho a bileho bodu pro kazdy synchronizacni bod a mezi tim interpoluje. Dela to nejakou celkem komplikovanou iterativni analyzou histogramu.
Ted si nepamatuju jestli ty terce se hledaj globalni bilou a cernou urovni nebo jestli to tam ani neni potreba, ona ta konvoluce si necha libit ledacos.
Pokud jde o rozmazani hloubkou ostrosti skeneru ze by se pixely slily tak to se neprecte. Chtel bych videt kod ktery se precte po takovem rozmazani :)
Pokud jde o deformaci a neni velka, Optar je na to staven. Najde si 4 rohy a mezi nima pak interpoluje sit ocekavanych mist synchronizacnich tercu, ktere si nasledne konvoluci najde a presne jemne doladi na zlomky pixelu. Staci aby tam byla vetsina toho terce muze byt i poskozeny. Mezi nima pak interpoluje pixelovou sit.
Bohužel, optar je z hlediska uživatelského použití stále hodně nedodělaný.
Moc se mi líbí například nápad vytisknout na spodek papíru informační proužek se sadou čísel, která říká, jak byl obrázek zakódován. Ovšem pak jsem zjistil, že dekodér na zadanou sekvenci čísel zvysoka kašle a používá hodnoty natvrdo zadané v hlavičkovém souboru :)
Osobně totiž 200dpi obrázek jsem schopen bezchybně přečíst pouze v případě, že ho dám z tiskárny rovnou na skener. Jakékoli pomačkání, nebo snad dokonce přehnutí záznam velmi znehodnotí.
Ty cisla jsou tam jen na rucni prepsani :-), OCR to asi neda. Spis by bylo zajimavy, kdyby se ty cisla vlozily treba to toho kodu a nebo treba prave do QR pole. Pak by slo misto ty cerny listy pouzit ten prostor pro data.
Jinak ja to tisknul tak, ze pro tisk 150dpi byly na kazdy pixel optaru 3 pixely tisku. Prehnuti jsem nezkousel, ale jeste od 75DPI skenu to slo uspesne dekodovat.
Přece jsem jeden GNU GPL enkodér našel:
http://www.libdmtx.org/
Zdá se mi, že negeneruje nejmenší možný kód, ale co já o tom vím…
I kdybyste vedel, tak to neoverite, protoze nemate volny pristup k te norme (Wikipedia). Takhle musime spolehat na to, ze to ten clovek s normou naprogramoval spravne.
Tech volne dostupnych generatoru je nekolik (jina sekce stejneho clanku na Wikipedii).
Ne zreknes „videl bych problem“ tak si nejdriv zjisti, zda to tak skutecne je.
Optar je napsany tak aby cetl i v pootoceni.
Pokud snimaci zarizeni ma na kod nedostatecne rozliseni pak se nabizi reseni pouzit kod s mensi hustotou.
Optar ma celkem robustni algoritmus ktery nerozhazi ani spina ktera imituje falesne okraje, rohy atd. – podminka je ze spina nesmi obepinat kod kolem dokola bez mezery, a pod stredem obrazku musi byt kod.
Optar ma Golayovy opravne kody, vydrzi 3 vadne bity ze 24 a nahlasi 4 ze 24.
Jinak diky za fandeni! :)