Kernel (pilditöötlus)

Allikas: Vikipeedia

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.[1]

Üksikasjad[muuda | muuda lähteteksti]

Matemaatiline kuju[muuda | muuda lähteteksti]

Konvolutsiooni võib valemina lahti kirjutada järgmiselt: Rumptf (def.7)

kus on filtreeritud pilt ehk lõpptulemus, on esialgne pilt, on kernel. Kerneli elementide tähistuseks on ja .[2]

Reaalsed kasutusjuhu näited[muuda | muuda lähteteksti]

Sõltuvalt kerneli väärtustest on võimalik luua pildil laia vahemikuga effekte.[3]

Operatsioon Kernel ω Pildi tulemus g(x,y)
Identiteet
(tagastab algse väärtuse)
Serva tuvastus
Teravustamine
Hägustamine
(normaliseeritud)
Gaussi hägu 3 × 3
Gaussi hägu 5 × 5

Kerneli suurus[muuda | muuda lähteteksti]

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.[4]

Indekseerimine[muuda | muuda lähteteksti]

Pilditöötluses indekseeritakse kerneleid niimoodi, et indeksil h[0,0] oleks kerneli keskpunkt, selle tõttu on pilditöötluses kerneli negatiivsed indeksid normiks.[4]

Implementeerimine[muuda | muuda lähteteksti]

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 - vastasel juhul poleks tegemist konvolutsiooniga vaid ristkorrelatsiooniga.[5]

Kernel pildi servades[muuda | muuda lähteteksti]

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.

Laiendamine[muuda | muuda lähteteksti]

Kõige äärmiste pikslite väärtusi kopeeritakse väljapoole serva nii palju, et oleks kattuvus kerneliga.

Voltimine[muuda | muuda lähteteksti]

Pilt volditakse ning väärtused võetakse vastasäärest või -nurgast.

Peegeldus[muuda | muuda lähteteksti]

Pildi äärtes kasutatakse peegeldust. Näiteks antakse servast 3 ühiku kaugusele olevale pikslile väärtus, mis asub pildi sees kaugusel 3 ühikut servast.

Kerneli suuruse vähendamine[muuda | muuda lähteteksti]

Ühtegi kerneli pikslit, mis jääb originaalpildi servadest väljapoole, ei kasutata - kompenseerimiseks kasutatakse normaliseerimist.

Konstantne väärtus[muuda | muuda lähteteksti]

Originaalpildi mõõtmeid suurendatakse, näiteks luuakse pildi ümbrusse regioon, mille piksli väärtusteks antakse näiteks nullid.

Ülekattuvuse vältimine[muuda | muuda lähteteksti]

Kernelit libistatakse originaalpildil niimoodi, et see ei läheks kunagi üle originaalpildi servade.[3]

Kernelite tüübid[muuda | muuda lähteteksti]

Silumis (ühtlustamis) kernelid[muuda | muuda lähteteksti]

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.

Kasti tüüpi kernel (box kernel)[muuda | muuda lähteteksti]

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

Gaussi kernel[muuda | muuda lähteteksti]

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.

Teravustamise kernelid[muuda | muuda lähteteksti]

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.

1. järgu tuletise kernelid[muuda | muuda lähteteksti]

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

2. järgu tuletise kernelid[muuda | muuda lähteteksti]

Sobilikud piltide teravustamiseks. Võimendab peenemaid detaile pildil.

  • Laplaciani kernel - tulemuseks peenemad detailid. Et saada teravustatud pilti, liidetakse Laplaciani filtri tulemus originaalpildile.[5]

Viited[muuda | muuda lähteteksti]

  1. Jamie Ludwig. "Image Convolution" (PDF). Vaadatud 6. aprillil 2022.
  2. Song Ho Ahn (2005). "Example of 2D Convolution". Vaadatud 6. aprillil 2022.
  3. 3,0 3,1 "Kernel (image processing)". Vaadatud 4. mail 2022.
  4. 4,0 4,1 Steven W. Smith, Ph.D. "The Scientist and Engineer's Guide to Digital Signal Processing". Vaadatud 7. aprillil 2022.
  5. 5,0 5,1 Rafael C. Gonzalez, Richard E. Woods. "Digital Image Processing" (PDF). Lk 153-188. Originaali (PDF) arhiivikoopia seisuga 3. aprill 2022. Vaadatud 7. aprillil 2022.