Hirdetés

GIMP-trükkök XII. – Saját szűrők



|

A GIMP-ben találunk egy érdekes szűrőt, a Konvolúciós mátrixot. Egy mátrixot kell megadni neki, meg néhány paramétert, amelyek hatására történik valami a képpel. De vajon mit is csinál ez a szűrő?

Hirdetés

A képfeldolgozásban elterjedt eljárás a konvolúciós szűrés. A képfeldolgozó szoftverek sok beépített szűrője ezen az elven működik anélkül, hogy a felhasználó erről bármit sejtene. Egyes programok lehetővé teszik, hogy a felhasználó saját maga adjon meg egy konvolúciós szűrőt. A GIMP-ben a Szűrők › Általános › Konvolúciós mátrix menüpont alatt találjuk ezt a lehetőséget, a Photoshopban a Custom Filter › Other › Custom menüpontnál.

 

 

gimpconvmatrix-01.jpg

A Konvolúciós mátrix szűrő panelje

 

 

A konvolúciós szűrők általában a kép pixeleinek egy kis halmazával dolgoznak egyszerre. A szűrést egy mátrix alapján végzik, ami tipikusan páratlan számú sorokból és oszlopokból áll, ez a konvolúciós kernel. A kernelt úgy használjuk a szűrés során, hogy „végigfuttatjuk” a képen. A kép minden egyes pixele egyszer a kernel közepe alá kerül. Ennek a pixelnek az új értéke saját maga, és a kernel alatti szomszédos pixelek értékeinek a kernel együtthatóival súlyozott átlaga lesz.

 

 

gimpconvmatrix-02.jpg

A kernel végighalad a képen. Minden képpontnál, ami fölött a kernel közepe áll, a kernel alá eső képrészletből számítjuk ki az új képpont értékét

 

 

A GIMP szűrőjének paneljén a középső részen lehet megadni a kernel együtthatóit. A kernel hatására a kép átlagos világossága megváltozhat. Ezt lehet ellensúlyozni az osztóval. A számítás negatív értékeket is eredményezhet, ami az Eltolással kompenzálható úgy, hogy egy alap szürkét adunk a képhez. A normalizálás opciót bekapcsolva az Osztó és az Eltolás értékét a program határozza meg automatikusan. Amikor a kernel a kép szélére ér, a szélső pixelek számításánál kilógna a képből. A Szegély beállítással lehet megadni, hogy a GIMP hogyan kezelje ezt a problémát. A Kiterjesztés nem veszi figyelembe a kernel kilógó részét, a Körbe állásban a kép szemközti szélén lévő pixelekkel pótolja a hiányzó részt. A Kivágásnál nem viszi ki a kernelt a kép széléig, így a szélső pixelek nem lesznek újraszámolva, de a végén levágja őket a képről.

 

Összefoglalva az eddigieket, a számítás képlete a következő:

gimpconvmatrix-03.png
, ahol a kernel mérete N×N pixel (N egy páratlan szám), a Ki,j a kernel elemeit jelenti, Pk,l a kép (k,l) koordinátájú pixele. O az osztó és E az eltolás értéke.

 

Az egy és a nulla

Anélkül, hogy belebonyolódnánk a konvolúció matematikájába, nézzük meg a gyakorlatban, hogy a különböző kernelek mit csinálnak. Elsőnek vegyük azt a kernelt, ami mindenhol nulla, csak a közepén árválkodik egyetlen 1-es. Ilyen értékekkel van felöltve az első képen a GIMP kernele. Világos, hogy ez a kernel nem tesz semmit, hiszen csak a középső pixel értékét veszi figyelembe változatlan értékkel. A kimeneti kép ugyanaz lesz, mint a bemeneti. A dolog hasonlít ahhoz, mint amikor egy számot 1-gyel szorzunk, hiszen akkor magát a számot kapjuk eredményként. Ezért hívják az ilyen kernellel megadott szűrőt egységoperátornak. Ha a középső szám nagyobb, mint 1, akkor világosít, ha kisebb, akkor sötétít a képen. Nyilvánvaló, hogy ha a középső egyes helyére is 0-t írunk, akkor a kimeneten is csak 0-k jelennek meg, vagyis a kimeneti kép mindenütt fekete lesz. Ez pedig olyan, mint a 0-val szorzás, ezért a neve nulloperátor.

 

Boxszűrő

Ha a kernelt csupa 1-essel töltjük fel, akkor az összeadja az általa lefedett pixelértékeket. Hogy a kép világossága ne változzon, ezért az eredményt osztani kell (például 3×3-as kernel esetében 9-cel). Az így kapott szűrő lényegében a pixelértékek átlagát számolja ki. Ez az egyszerű boxszűrő is használható zajszűrésre, hiszen az átlagolás csökkenti a pixelértékek varianciáját. Ha növeljük a kernel méretét (mondjuk 5×5-re) a zajcsökkentés erősebb lesz, de a kép lágyabb lesz. Az egyik hátránya ennek a szűrőnek, hogy az éleket elmossa. A másik, hogy a környezetüktől lényegesen eltérő, de nem reprezentatív pixelek (például hotpixel) eltolják az átlagot, és a környező kimeneti pixelek értékeibe is észrevehetően beleszólnak.

 

 

gimpconvmatrix-04.jpg

Egyszerű átlagoló szűrő kernel

 

 

A boxkernel hibái csökkenthetők, ha a középső pixelt nagyobb hangsúllyal vesszük figyelembe. A legelterjedtebb középhangsúlyos szűrő a Gauss-szűrő. Ennél a kernel értékeit a 2D Gauss-féle haranggörbe értékeinek mintavételezésével kapjuk. A GIMP-ben ezt külön is megtaláljuk Szűrők › Elmosás › Gauss-elmosás menüpont alatt. Ott a szűrő sugara folyamatosan állítható, tört érték is lehet, ez tulajdonképpen a haranggörbe félérték-szélességét jelenti. A Gauss-szűrő nem érzékeny az irányokra, minden élt egyformán elken. Érdekes tulajdonsága, hogy a szűrés felbontható egymás után alkalmazott soronkénti és oszloponkénti szűrésre, ami a számításigényt csökkenti.

 

 

gimpconvmatrix-05.jpg

A Gauss-elmosás a középső pixeleket nagyobb súllyal veszi figyelembe

 

 

Nulla összegű kernelek

Nulla összegűnek akkor nevezünk egy kernelt, ha a benne lévő együtthatók összege nulla. Ilyen például a mellékelt képen látható. Mit csinál ez a kernel? Ha egy homogén képterületen használjuk, ahol minden bemenő pixelérték azonos, ott az eredmény 0 lesz. Ha a kernel egy olyan részhez ér a képen, ahol a pixelek értéke hirtelen változik, ott a kimenet annál nagyobb lesz, minél nagyobb a változás. A nulla összegű kernelek élkiemelő kernelek.

 

 

gimpconvmatrix-06.jpg

A nulla összegű kernelek éldetektorok. Ez a kernel ÉNY–DK irányban keresi az éleket

 

 

Az egyszerű élkereső kernel 45 fokonként körbeforgatható az elemek átrendezésével. Mindegyik irányban más-más eredményt ad, érdemes vele kísérletezni.

 

A gyakorlatban általában nem elégedhetünk meg azzal, hogy valamely kitüntetett irányban keressük meg az éleket, hanem minden élre szükségünk van. A teljes élképet úgy lehet megkapni, ha az egyszerű differenciáló operátor kernelét körbeforgatjuk, és a merőleges irányokban kapott értékből Pitagorasz tételével számítjuk ki az eredő gradienst. Ehhez a számításhoz négyzetgyököt kell vonni, ami körülményes, számításigényes művelet, ezért helyette egyszerűbb módszerhez szokás fordulni. Egyszerűen az egyes konvolúciók által adott eredmények közül a nagyobbat vesszük. A két egymásra merőleges derivált maximumával dolgozó operátort Roberts-féle keresztoperátornak hívják.

 

A GIMP-ben ilyen nincs, és a Konvolúciós mátrixszal is csak úgy tudjuk megcsinálni, ha egy kis trükköt vetünk be. Első lépésként a [Shift]+[Ctrl]+[D] billentyűkkel kettőzzük meg a képréteget. Ezután az egyik rétegen használjuk az imént bemutatott [1, 0, –1] alakú differenciáló operátort. A másik rétegen ugyanezt, de 90 fokkal elforgatva. Mivel a GIMP negatív számokkal nem tud dolgozni, ezért +128 egységnyi eltolást kell megadni. A harmadik lépésben mindegyik rétegen egy V alakú tónusgörbével képezzük az abszolútértéket. A negyedik lépés az, hogy a felső réteg módját állítsuk Csak világosításra. Végül egyesítsük a rétegeket, és a Szintek funkcióval állítsuk be a részletek világosságát.

 

 

gimpconvmatrix-07.jpg

A Roberts-féle keresztoperátor hatása

 

A gyakorlatban elterjedtebb a Prewitt-szűrő, amelynél a kernelekben 3–3 +1-es, illetve –1-es áll egymás mellett. Ezek az operátorok tehát az élkeresés irányára merőlegesen simítanak, miközben 3 oszlopon, illetve 3 soron egyszerre haladva keresik az éleket. A Sobel-szűrőnél a középső pixelek hangsúlyosabbak azáltal, hogy ott +2-es, illetve –2 áll.

 

 

gimpconvmatrix-08.jpg

A Sobel-szűrő egyik kernele



gimpconvmatrix-09.png

A Sobel-szűrő hatása

 

 

Az élek keresésére nem csak a gradiensvektor ad lehetőséget. Ahol a pixelértékekben hirtelen változás történik, ott a második és a magasabb deriváltak is megváltoznak. A második deriváltakat használja a Laplace-operátor, de ennek lelkivilágával nem kell foglalkoznunk. Elegendő, ha ismerjük a kernelét, ami meglehetősen egyszerű, különösen alkalmas a finom részletek kiemelésére, mert nagyon érzékenyen reagál a finom változásokra. Sajnos a zajt is növeli. Érdemes megfigyelni, hogy az élek mentén mindig egy kettős sáv húzódik, ami egy világos és egy sötét részből áll össze. Ez a második deriváltak sajátossága.

 

 

gimpconvmatrix-10.jpg

Szűrés a Laplace-operátorral

 

 

A Laplace-operátor élesítésre is használható, úgy, hogy az eredeti képből kivonjuk az élképet. Ez a művelet egyetlen lépésben, egy speciális kernellel, az Egy-mínusz-Laplace operátorral is elvégezhető. Ennek kernelét úgy kapjuk, hogy a Laplace-operátor kernelét kivonjuk az egységoperátoréból. A művelet lényegét úgy is megfogalmazhatjuk, hogy a pixel értékét az eredeti érték és az ortogonálisan szomszédos pixelek átlagának különbségével helyettesíti.

 


gimpconvmatrix-11.jpg

Az Egy-mínusz-Laplace-operátor és hatása


 

A fentieknél bonyolultabb szűrőt is lehet tervezni, vagy tapasztalati úton kikísérletezni. A gyakorlati életben is számos, a konkrét feladathoz optimalizált lineáris szűrőt használnak. Most csak a legelterjedtebbek közül ragadtunk ki egy–egy példát, de reméljük, hogy ezzel is sikerült sokakban feltámasztani a kísérletező kedvet.

 

 

 

További GIMP-trükkök:


Hirdetés

Úgy tűnik, AdBlockert használsz, amivel megakadályozod a reklámok megjelenítését. Amennyiben szeretnéd támogatni a munkánkat, kérjük add hozzá az oldalt a kivételek listájához, vagy támogass minket közvetlenül! További információért kattints!

Engedélyezi, hogy a https://www.pcwplus.hu értesítéseket küldjön Önnek a kiemelt hírekről? Az értesítések bármikor kikapcsolhatók a böngésző beállításaiban.