Régóta érdekel (az egész moiré érdeklődésünk is ide vezethető vissza), hogyan lehet úgy két (vagy több) nonfiguratív textúrát kialakítani, hogy azok egymáson tologatva két (vagy több) különböző képet adjanak ki:
Ugyanez, kevésbé látványosan, de a jobb érthetőség miatt külön színezve:
A monstein-rajzolatot Dimitri jegyzi ezen a linken. És nem találjuk a módszerének leírását. Viszont van egy olyan érzésünk, hogy valahol rokon lehet ezzel az animációs játékkal, azzal a különbséggel, hogy a scanimációs játékoknál csak két fázis van, és az elmozgatás nem a vonalakra merőlegesen történik, hanem azok mentén. Valahol itt lehet elásva a blöki. Az alábbi terminaconor animáció két kép nem használ fenszi fourier transzformációkat, mateket, meg képleteket, sima tologatós scanimáció.
Oké, tiszta sor, hogy ez csak egy egyszerű képmanipuláció és egyetlen rácsot meg egy preparált képet használ csupán. Ezt a kettőt:
Viszont találtunk egy érdekeset. Ez a program is távolról rokon ezzel a témával, ugyanakkor közel áll a steganográfiához (van olyan funkciója is).
Leegyszerűsítve, mert úgyse fogod ott elolvasni: az elkódolni kívánt kép minden egyes pixelét 4 pixelre képezi le (emiatt a bemeneti kép felbontásának kétszeresét kapjuk a kimeneti oldalon) és készít belőle két képállományt egy kulcsot, meg egy kriptált képet (ezek akár átlátszó fóliára is nyomtathatóak), amik csak pontosan egymásra illesztve adják ki az eredeti képet, egyébként teljesen randomizált pöttyöket mutatnak csak. A kódolás úgy történik, hogy az eredeti képi pixelt, amennyiben az fekete, úgy bontja fel két darab 2*2 pixelre, hogy azok egymáson feketét okozzanak, hogyha az eredeti képpont fehér, akkor meg úgy bontja 2*2 pixelre, hogy azok egymáson fehéret okozzanak (igaz, csak 2 pixelen a 4-ből, mivel olyan fólia nem létezik, amin két fekete pötty átlátszót eredményezne - bár a polarizált fény használata sejtet némi perspektívát). Így:
Leegyszerűsítve, mert úgyse fogod ott elolvasni: az elkódolni kívánt kép minden egyes pixelét 4 pixelre képezi le (emiatt a bemeneti kép felbontásának kétszeresét kapjuk a kimeneti oldalon) és készít belőle két képállományt egy kulcsot, meg egy kriptált képet (ezek akár átlátszó fóliára is nyomtathatóak), amik csak pontosan egymásra illesztve adják ki az eredeti képet, egyébként teljesen randomizált pöttyöket mutatnak csak. A kódolás úgy történik, hogy az eredeti képi pixelt, amennyiben az fekete, úgy bontja fel két darab 2*2 pixelre, hogy azok egymáson feketét okozzanak, hogyha az eredeti képpont fehér, akkor meg úgy bontja 2*2 pixelre, hogy azok egymáson fehéret okozzanak (igaz, csak 2 pixelen a 4-ből, mivel olyan fólia nem létezik, amin két fekete pötty átlátszót eredményezne - bár a polarizált fény használata sejtet némi perspektívát). Így:
Forrás |
Mind a fekete, mind a fehér pixel kódolását, mindig kétféleképpen tudja elérni, ezért minden egyes pixel esetén pénzfeldobással dönti el, melyik megoldást választja, ez biztosítja a randomizált eloszlását a pöttyöknek, vagyis minden egyes pixelnél a véletlen dönti el, hogy melyik minta kerül a kulcs-képre és melyik a kriptált-képre (gyakorlatilag bármelyiket nevezhetjük bármelyiknek) A kulccsal kikódolt kriptált kép, tehát kétszer nagyobb lesz és természetesen nem képes helyes tónusokat visszaadni, a fehér pixelek kódolása miatt jelentős kontrasztot veszítünk.
Persze a legjobban úgy lehet megérteni, hogyha kipróbáljuk saját képpel.
Persze a legjobban úgy lehet megérteni, hogyha kipróbáljuk saját képpel.
A két raszterképet, a kriptáltat piros, a kulcsot zöld színűre festettük, hogy jobban érthető legyen mi történik. Ahol mindkét képen raszterpont van, ott ezek egymásra adódnak és fekete szín jelenik meg a kompoziton. Jól megfigyelhető, hogy a kompozit ,vagyis a kulccsal kikódolt, megfejtett kép sötét tónusát úgy éri el, hogy vagy csak piros, vagy csak a zöld fólián van raszter, amit szabadon hagy az egyik, azt a másik takarja (e a fenti képen hol piros, hol zöld pixelben jelentkezik). A világos részeknél viszont egymásra rendezi a a raszterpontokat a két nyomaton (ezek a szimulációban feketeként jelennek meg), így a lehetséges pixelek fele szabadon marad és átengedi a fényt. Vagyis így a kikódolt kép fehér zónája 50% átlátszóságot mutat, a fekete zónája meg 0% átlátszóságot, emiatt van a kontrasztvesztés.
Monitoron ez igen jól néz ki, akár pixeles léptetések is leszimulálhatóak, egy pixelt oldalra lépve még sejlik valami a tartalomból, de két pixel eltolásnál már csak egyenletes zajt látunk. Lézernyomtatóval fóliára lenyomtatva viszont elég gyenge eredményt sikerült elérni. Nem érdemes nagy felbontásokkal dolgozni, mert a nyomtatók felbontása egy szűk keresztmetszet, egyetlen megfejtendő pixelhez négy pixelt kell leképezni a fóliára. Emellett a fólia meg is nyúlik a hőtől, és ez a csöpp eltérés már elég ahhoz, hogy a teljes képet egyszerre ne is lehessen felfedni, szerencsére óvatos tologatással letapogatható a teljes felület.
Persze ezt a módszer meg lehet bolondítani 3x3 pixeles kódolással, vagy még több kép kombinálásával. Így dolgozik a Stegano funkciója, amiben két képpel kódol el egy harmadikat. Sajnos ez is leginkább a kontrasztos képekkel működik, a finom tónusoknak nem barátja. Illetve nekünk csak a PNG-t fogadta el.
Az ábrán felül látszik a három bemeneti kép. A program az első kettőt csöppet megpiszkálja, amitől azok még hordozzák az eredeti látványt, ezért a gyanútlan kémek nem gondolják, hogy titok van beléjök rejtve, de ha egymásra helyezzük őket, akkor tádámm, kiadják a harmadik képet. Baloldalt a két feketefehér kép egymáson kiadja Grimpixet, jobboldalt a két képet pirosra és zöldre színeztük, hogy érthetővé váljon a dolog működése. Itt is, ami csak egyik, vagy csak másik fólián jelenik meg, az adja a végső kép feketéjét, ami meg mindkettőn, az adja a világos részeket.
Visszatérve a legelejére, ebben a dolgozatban pont erről írnak, nem kizárt, hogy a fenti program is ilyen mateket használ, de sajnos ez minket meghalad.
Nincsenek megjegyzések:
Megjegyzés küldése