Kernel (pilditöötlus)

Pilditöötluses nimetatakse kernelit ehk konvolutsioonimaatriksit väikesemõõduliseks maatriksiks, mida kasutatakse erinevateks pilditöötlusvõteteks nagu udustamine, teravustamine, serva leidmine jpm. Soovitud tulemuse saavutamiseks konvoleeritakse omavahel pilti ja kernelit. Konvolutsiooni võib valemina lahti kirjutada järgmiselt: Rumptf (def.7) g ( x , y ) = ω ∗ f ( x , y ) = ∑ d x = − a a ∑ d y = − b b ω ( d x , d y ) f ( x − d x , y − d y ) , {\displaystyle g(x,y)=\omega *f(x,y)=\sum _{dx=-a}^{a}{\sum _{dy=-b}^{b}{\omega (dx,dy)f(x-dx,y-dy)}},} kus g ( x , y ) {\displaystyle g(x,y)} on filtreeritud pilt ehk lõpptulemus, f ( x , y ) {\displaystyle f(x,y)} on esialgne pilt, ω {\displaystyle \omega } on kernel. Kerneli elementide tähistuseks on − a ≤ d x ≤ a {\displaystyle -a\leq dx\leq a} ja − b ≤ d y ≤ b {\displaystyle -b\leq dy\leq b} . Sõltuvalt kerneli väärtustest on võimalik luua pildil laia vahemikuga efekte. Konvolutsiooniga kaasneb üks suur probleem – vajaminevate arvutustehete hulk, mis kasvab koos sisendi suuruse kasvuga. Näiteks kui tahta konvoleerida 512x512 piksli suurust pilti 64x64 piksli suuruse kerneliga, siis kuluks selleks rohkem kui miljard korrutus- ja liitmistehet. Liiga pikk täitmisaeg võib muuta arvutustehnika kasutuks. Selle tõttu on väga laialt levinud väikesed 3x3 piksli suurused kernelid, mida libistatakse üle originaalpildi. Sellise suurusega kernel võimaldab tegelikult üllatavalt häid tulemusi, sest ta on samas piisavalt suurte mõõtmetega, et mõjutada pildi servasid. Pilditöötluses indekseeritakse kerneleid niimoodi, et indeksil h[0,0] oleks kerneli keskpunkt, selle tõttu on pilditöötluses kerneli negatiivsed indeksid normiks. Rakendades kernelit pildil viiakse läbi korrutiste summeerimise operatsioon originaalpildi ja kerneli peal. Kernel on massiiv, mille suurus määrab ära operatsiooni toimimise piirkonna ning kerneli elementide osakaalud määravad, kuidas mõjutab kernel väljundpilti. Kõigepealt keeratakse kernelit 180 kraadi ning seejärel üle originaalpildi libistades korrutatakse kõik originaalpildi väärtused läbi kohakuti oleva kerneli väärtustega ning summeeritakse maatriks, saades efektiivselt kerneli keskpunktiga kohakuti olnud iga originaalpildi punkti kohta väljundis vastava filtreeritud väärtuse. Tuleb tähele panna, et kerneli keskpunkt on protsessi käigus kohakuti originaalpildi piksliga, kuna enamustes pilditöötluse rakendustes tahame, et kernel mõjutaks pikslit sümmeetriliselt tema ümbruskonnas. Sümmeetrilise kerneli puhul ei muuda 180 kraadi keeramine tegelikult tulemust, kuid ebasümmeetrilise kerneli puhul on see vajalik – muidu poleks tegemist konvolutsiooniga, vaid ristkorrelatsiooniga. Kuna kerneli keskpunkt on alati kohakuti originaalpildi punktiga, siis on vaja, et ka originaalpildi piiridest väljaspool olevatel pikslitel oleks väärtused. Selleks on olemas mitmeid meetodeid. Kõige äärmiste pikslite väärtusi kopeeritakse väljapoole serva nii palju, et oleks kattuvus kerneliga. Pilt volditakse ning väärtused võetakse vastasäärest või -nurgast. Pildi äärtes kasutatakse peegeldust. Näiteks antakse servast 3 ühiku kaugusele olevale pikslile väärtus, mis asub pildi sees kaugusel 3 ühikut servast. Ühtegi kerneli pikslit, mis jääb originaalpildi servadest väljapoole, ei kasutata – kompenseerimiseks kasutatakse normaliseerimist. Originaalpildi mõõtmeid suurendatakse, näiteks luuakse pildi ümbrusse regioon, mille piksli väärtusteks antakse näiteks nullid. Kernelit libistatakse originaalpildil niimoodi, et see ei läheks kunagi üle originaalpildi servade. Kasutatakse, et vähendada järske üleminekuid intensiivsuses. Kuna juhuslik müra koosneb enamasti järskudest üleminekutest intensiivsuses, siis oleks mürasummutus loogiline lahendus ühtlustamiseks. Konvoleerides ühtlustamiskernelit pildiga, saame tulemuseks udustatud pildi, mille udustamise ulatus sõltub kerneli suurusest ja tema kaaludest. Nimetatakse ka madalpääsufiltriteks. Kõige lihtsam udustamise kernel – tema kaalud on kõik tüüpiliselt võrdsed ühega. m x n mõõtudega kernel on maatriks ühtedest, mille ees kasutatakse korrutisena normaliseerimise konstanti. Normaliseerimist tehakse kõigi madalpääsu kernelite puhul kahel põhjusel: et pildiala konstantse intensiivsuse keskväärtus võrduks filtreeritava pildi intensiivsusega et pikslite summa jääks samaks nii originaalpildis kui filtreeritud pildis Isotroopiline kernel – filtreerimise väljund ei sõltu originaalpildi orientatsioonist. Gaussi kernelitega on hea teha konvolutsiooni, samuti nagu kastkernelitega, kuid omavad veel lisaks ka muid häid omadusi. Näiteks kahe Gaussi kerneli konvolutsiooni ning korrutise tulemusena saame samuti Gaussi kerneli. Gaussi kerneli keskväärtus on null ning standardhälve üks. Nimetatakse ka kõrgpääsufiltriteks. Teravustamine võimendab muutusi intensiivsuses ning saavutatakse ruumilise diferentseerimise teel. Pildi diferentseerimine võimendab servi ja suurendab müra ning võtab ära rõhku pildi aladelt, kus toimub intensiivsuse madal muutus. Kuna tegemist on digitaalse filtriga (digitaalsetel hulkadel lõplikud väärtused), siis on maksimaalne võimalik intensiivsuse muutus lõplik ehk lõpmatuseni pole võimalik teravustada. Sobilikud servade tuvastamiseks, kuna servad piltidel on tihtipeale hästi järsud muutused kõrvuti asuvate pikslite intensiivsuses. Sobeli kernel – leiab veergude ja ridade kaupa järsud muutused intensiivsuses Sobilikud piltide teravustamiseks. Võimendab peenemaid detaile pildil. Laplaciani kernel – tulemuseks peenemad detailid. Et saada teravustatud pilti, liidetakse Laplaciani filtri tulemus originaalpildile. Jamie Ludwig. "Image Convolution" (PDF). Vaadatud 6. aprillil 2022. Song Ho Ahn (2005). "Example of 2D Convolution". Vaadatud 6. aprillil 2022. "Kernel (image processing)". Vaadatud 4. mail 2022. Steven W. Smith, Ph.D. "The Scientist and Engineer's Guide to Digital Signal Processing". Vaadatud 7. aprillil 2022. Rafael C. Gonzalez, Richard E. Woods. "Digital Image Processing" (PDF). Lk 153-188. Originaali (PDF) arhiivikoopia seisuga 3. aprill 2022. Vaadatud 7. aprillil 2022.