2018/06/18

Custom filter

Nagy csapás az ember számára a rögeszmés működés. Bár  kiút is lehet, egy coping, az intaktság megőrzésére. Szóval nekünk ezért kell kényszeresen egyes körhintáinkon megtennünk néhány kört. Most ez a Custom filter a Photoshopban, amire a kutyának sincs szüksége, nem is értem minek tették bele. Hát hol életszerű, hogy valaki nekilát és ilyen kernel-izé szűrőket kezd fejleszteni? Essünk is hamar túl rajta, mert jobban unom írni, mint te olvasni. Elégtétellel tölt el, hogy még van rajtunk kívül néhány szerencsétlen, aki szintén kényszeresen foglalkozott a témával.

A Custom filter (máshol kernel-szűrő), egy 25-ös mátrixból áll, illetve egy Scale és egy Offset mezőből. A középső pixel kitüntetett, az a mindenkori aktuális pixelünk. A mátrix a körben elhelyezkedő pixelek súlyozását tartalmazza, a scale amennyiben a mezők összegénél kisebb szám, világosítja a pixeleket, amennyiben nagyobb szám, sötétíti (lásd később). Az offset meg egy eltolás, amivel kivédhető egy negatív vagy pozitív túlcsordulás (lásd később), mivel egy pixel értéke se negatív nem lehet sem 255-nél nagyobb. Érdekes, hogy 16 bites kép esetében is nyolc bitesen számol, ami azért gáz, mert a számításokat kerekíti, de így nem használja ki a nagyobb szám adta pontosságot. Ciki.

A Custom Filter a kép minden egyes pixelétét végiglátogatja és az 5*5-ös mátrixot minden pixelre (középre igazítva) kiszámolja, azok minden csatornájára külön-külön. Természetesen egy ideiglenes mátrixba menti az értékeket, tehát mindig az érintetlen képből olvas, a hatás így nem halmozódik pixelről pixelre. Matematikáját egy konkrét szűrő segítségével elemezzük, úgy tűnik ez hiánypótló az interneten (mi innen nyaltuk). És így lehet leginkább megérteni. Ez például egy primitív élesítő szűrő.



A pixelértékek az ábrákon olvashatóak le. A középen levő mályva (vagymiazisten) színű pixel most az éppen aktuális, R csatornájának értéke 111. A képlet meg ez:
(Középső pixel*súlyozása + az akárhány környező pixel*súlyozásukkal) / Scale + Offset
tehát az R csatornát így képezzük:
[(111*15)+(184*-2)+(112*-2)+(123*-2)+(112*-2)] / 7 + 0 = 603/7 = 86 (kerekítve) - és így tovább a G és B csatornákra is.
A környező pixeleket negatív értékkel súlyozva jól látszik az a tendencia, hogy ez a képlet azt eredményezi, hogy a sötétebb pixelek, minél világosabb pixelek veszik körül annál sötétebbek lesznek a szűrő hatására, ugyanakkor a világosabb pixelek meg annál jobban világosodnak, minél sötétebb pixelek veszik körül. Ez a sharpen alapja is, a lokális kontraszt, tehát a tónusok szegélyei mentén, ahol világos és sötét pixelek találkoznak, ott a sötétek sötétednek, a világosak pedig világosodnak, ez fogja az élesség illúzióját adni. Amennyiben az aktuális pixelnél adunk meg negatív értéket, a környezőknek meg pozitívat, ugyancsak élesítés lesz az eredmény, de egyfajta él-kihangsúlyozás is megjelenik.
Gyakorlatilag az történik, hogy az aktuális pixelünk köré kontrasztos hálót rajzol a mátrixnak megfelelően.
Piros mezőben egyetlen bordó pixelre ez az eredmény születik. Ha haránt írunk be értékeket, akkor így módosul a hatás:
Ezzel a mátrixba beírt értékek irányának hatását is szemléltettük. Haladjunk.


Ugyanez a képlet más adatokat beírva a mátrixba okozhat blúrosodást is. Itt egyfajta kiátlagolás történik, tehát a két különböző tónusú pixel tónusa közelíteni fog egymáshoz.

Persze lehet komplexebb szűrőket is építeni, de a kernel mérete sajnos limitált.

A pixel természetesen nem vehet fel akármilyen értéket (0-255), az Offset pont a túlcsordulást kezeli le. A következő szűrő az Invert. Csak az aktuális pixel értékét teszi negatívba, majd ehhez adja az eltolás értékét, jelen esetben 255-öt, ami a szín/tónus inverzét okozza. Például egy vörös pixelnek 255/0/0 az értéke, -255+offset az 0, 0+255 az 255, tehát az eredmény minden csatornán elvégezve 0/255/255 lesz, ami a piros inverze, vagyis a cián szín.


Az offsetet szokták még középszürkére is állítani. Például egy emboss filter esetén.

A mátrix értékeinek összege 0 de a scale csak 1-től felfele vehet fel értéket, emiatt a kép sötét lenne. A +128-as eltolás középszürkére normalizálja a képet. A mátrixban minél nagyobb számokat használunk, annál kontrasztosabb szegélyeket rajzol, a negatív értékű pixel pozíciója meg az árnyékeffektus irányát adja meg.

Sajnos a szűrő működésének megértése nem jelenti azt, hogy most már nagyon fenszi szűrőket is tudunk építeni (itt a kolléga egyszerűtől bonyolultig többféle szűrőt is mutat). Ugyanis egy hangszer működésének ismerete sem jelenti azt, hogy dögös arpeggiókat tudnánk ezáltal komponálni. Ha meg csak az a cél, hogy zenét hallgassunk, akkor arra ugye ott van az Adobe csapatának a szimfonikus zenekara, hogy a képzavart elmélyítsük. Tehát kell egy csöpp kreativitás ehhez az eszközhöz. Mondjuk ez volt az első lépés. Mi itt elengedtük a témát, jobban nem kívánjuk büntetni magunkat. 

Nincsenek megjegyzések:

Megjegyzés küldése