Medianos filtras

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Jump to navigation Jump to search
 Crystal Clear app logout.png  Straipsnis turėtų prasidėti aiškiu apibrėžimu.
Jei galite, apibrėžkite straipsnio dalyką, pagrindinę sąvoką.
 Broom icon.svg  Šį puslapį ar jo dalį reikia sutvarkyti pagal Vikipedijos standartus – Neologizmai
Jei galite, sutvarkykite.
 KWrite icon.svg  Šio puslapio ar jo dalies stilius neatitinka Vikipedijos kalbos standartų.
Jei galite, pakoreguokite stilių (kiek įmanoma – moksliniu stiliumi). Tik tada bus galima ištrinti šį pranešimą.
Pavyzdys: trijų skirtingo lango dydžio medianos filtrų taikymas triukšmingai nuotraukai. Įgyvendinta su Adobe Photoshop.
 Ambox banner content.svg  Šis straipsnis turi paveikslėlių su terminais kita kalba
Jei galite, išverskite arba pakeiskite lietuviškais.
Tik tada bus galima ištrinti šį pranešimą.

Medianos filtras (angl. Median Filter) – pagalbinis, netiesinis algoritmas, kuris plačiai naudojamas apdorojant signalus, norint sumažinti triukšmą atvaizduose ar duomenų signaluose.

Pažymėtina jo tokia savybė: nedaro neigiamos įtakos pačiam skaitmeniniam signalui, t. y. signalu perneštų duomenų baigtinei reikšmių aibei nedaroma įtaka, kas padeda išsaugoti kraštines taip perduotame vaizde. Tik tenka nutolti nuo medianos apibrėžimo, nes vidurinių reikšmių vidurkinimas nepageidautinas dėl anksčiau minėtos priežasties.

Toks triukšmo sumažinimas yra įprastas, siekiant po to kaip galint geriau atlikti darbą, pvz., atvaizde surasti kraštines (angl. edge detection).

Veikimo principas[redaguoti | redaguoti vikitekstą]

Tam reikia peržiūrėti visą duomenų signalą, pereinant iš eilės visus duomenis, kiekvieną iš jų pakeičiant vidurine kaimyninių duomenų reikšme. Kaip kaimynai bus atrinkti nurodoma taip vadinamu „langu“, kuris iš eilės pastumiamas nuo vieno duomens prie kito, kol peržiūrimas visas jų signalas. Vienmačiams signalams akivaizdžiu konkretaus duomens langu būtų keli prieš ir po jo einantys duomenys, tuo tarpu dvimačiams (ir esant daugiau matų) signalams, tokiems kaip vaizdai, gali būti žymiai sudėtingesni „dėžučių“ ar „kryžiukų“ pavidalo langai. Reiktų pastebėti, kad jeigu langui imamas kaimynų kartu su pačiu duomeniu nelyginis skaičius, tai visai nesunku surasti vidurinę reikšmę, tereikia duomenis išrūšiuoti jų reikšmių didėjimo tvarka ir paimti vidurinio duomens reikšmę. Lyginio skaičiaus atveju gali būti daugiau nei viena vidurinė reikšmė.

Vienmačio atvejo išnagrinėjimas[redaguoti | redaguoti vikitekstą]

Vidurinių reikšmių filtravimui paimkime langą su dviem kaimynais, kurių vienas eina iškart prieš, o kitas iš karto po konkretaus duomens. Pirminiu vienmačių duomenų signalu lai būna x = [2, 80, 6, 3].

Filtruodami x signalą gautume tokį y duomenų signalą, kurio

y[1] = vidurinReik[2, 2, 80] = 2;
y[2] = vidurinReik[2, 80, 6] = vidurinReik[2, 6, 80] = 6;
y[3] = vidurinReik[80, 6, 3] = vidurinReik[3, 6, 80] = 6;
y[4] = vidurinReik[6, 3, 3] = vidurinReik[3, 3, 6] = 3,

t. y. y = [2, 6, 6, 3].

Ribų klausimas[redaguoti | redaguoti vikitekstą]

Tikriausiai, ankstesniame pavyzdyje jau pastebėjote, kad ribiniais atvejais norint langui pateikti pakankamai duomenų, tiek pirmojo, tiek paskutiniojo duomens reikšmės imamos pakartotinai. Tai vienas iš būdų kaip, pasiekus ribą duomenų signale, suktis iš padėties, kad langui užtektų duomenų. Tačiau galima elgtis ir kitaip, kas susiklosčius tam tikroms aplinkybėms gali būti net pageidautina:

  • Ribinių vietų iš viso neperžiūrėti su vėlesniu signalo ar atvaizdo ribų pašalinimu ar be pašalinimo.
  • Pakišant reikšmes iš kitų duomenų signalo vietų, pavyzdžiui, atvaizdams imant duomenis iš tolimo gulsčio ar stačio krašto.
  • Sumažinant patį langą šalia ribų taip, kad jam užtektų duomenų.

Dvimačio atvejo apdorojimo programa[redaguoti | redaguoti vikitekstą]

Paprasto dvimačio medianos filtro programa galėtų atrodyti taip:

Išskirti atminties dvimačiui masyvui apdirbtasSrautas[atvaizdo plotis][atvaizdo aukštis]
Išskirti atminties vienmačiui masyvui langas[lango plotis * lango aukštis]

xKrastas := (lango plotis / 2) suapvalinus mažėjimo kryptimi
yKrastas := (lango aukštis / 2) suapvalinus mažėjimo kryptimi
// Peržiūrėsime visus duomenis, kuriems užteks duomenų langui
for x from xKrastas to (atvaizdo plotis – xKrastas)
	for y from yKrastas to (atvaizdo aukštis – yKrastas) {
		//konkrečiam duomeniui užpildom langą
		i := 0
		for fx from 0 to lango plotis
			for fy from 0 to lango aukštis {
				langas[i] := pirminisSrautas[x + fx – xKrastas][y + fy – yKrastas]
				i := i + 1
				}
		surūšiuoti vienmatį masyvą langas[]
		apdirbtasSrautas[x][y] := langas[lango plotis * lango ilgis / 2]
		}

Pastabos:

  • taip vienu metu filtruojama tik vienos spalvos plokštuma (angl. channel);
  • jame praleidžiamos ribinės vietos, kurioms trūksta duomenų lango užpildymui.
Medianos filtro panaudojimas stipriai apgadinto vaizdo atstatymui.

Dvimačio medianos filtro įgyvendinimo klausimai[redaguoti | redaguoti vikitekstą]

Kaip paprastai, daugiausiai pastangų ir laiko užima kiekvieno lango vidurinės reikšmės ieškojimas. Kadangi filtrui reikia peržiūrėti langus daugumai signalo duomenų, dideliems signalams, tokiems kaip atvaizdai, vidurinės reikšmės ieškojimo veiksmingumas labai svarbus rodiklis, nusakantis, kaip ilgai bus atliekamas darbas. Paprastas, kaip vaniliniai ledai, anksčiau aprašytas įgyvendinimas kiekvienam langui surūšiuoja visus duomenis, kad būtų galima atrasti jame vidurinę reikšmę, tačiau, kai reikia tik vidurinės reikšmės iš visų likusių, galima pasinaudoti daug veiksmingesniais jos išrinkimo būdais.

Be to, kai kuriuose duomenų signaluose tėra reikšmės iš sveikų skaičių aibės, tai labai dažna atvaizdams. Tokiais atvejais histogramų vidurinių reikšmių ieškojimas gali būti žymiai greitesnis, nes labai paprasta atnaujinti histogramas pereinant tarp gretimų langų, o vidurinės reikšmės išrinkimui histogramoje daug pastangų nereikia.[1]

Savybė išsaugoti kraštines[redaguoti | redaguoti vikitekstą]

Medianos filtras yra vienas iš glodinimo būdų, tokių kaip Gausinis suliejimas (angl. Gaussian blur). Visi išlyginimo būdai veiksmingi šalinant triukšmą iš signalo jo tolygiuose ploteliuose ar dalyse, tačiau skirtingai paveikia kraštines. Labai dažnai mažinant triukšmą duomenų signale, tuo pat metu labai svarbu yra išsaugoti kraštines. Pavyzdžiui, kraštinės labai svarbios tam, kaip atvaizdas atrodys žvelgiant žmogaus akimis. Kai (Gausinio) triukšmo lygis yra nedidelis ar nuosaikus, šalinant triukšmą bei išsaugant kraštus su nekintamo dydžio langu, akivaizdžiai tinkamesnis už Gausinį suliejimą yra medianos filtras.[2] Tačiau kai (Gausinio) triukšmo lygis aukštas, medianos filtras ne toks jau geras palyginus su Gausiniu suliejimu. Tuo tarpu medianos filtras ypatingai veiksmingas taškiniam triukšmui (angl. speckle noise) bei druskiniam ir pipiriniam (didelių trumpų pokyčių) triukšmui (angl. salt and pepper noise). Štai kodėl medianos filtras plačiai naudojamas skaitmeniniame atvaizdų apdirbime.[3]

Šaltiniai[redaguoti | redaguoti vikitekstą]

  1. T. Huang, G. Yang, and G. Tang, „A fast two-dimensional median filtering algorithm“, IEEE Trans. Acoust., Speech, Signal Processing, vol. 27, no. 1, pp. 13–18, 1979.
  2. E. Arias-Castro and D.L. Donoho, "Does median filtering truly preserve edges better than linear filtering? ", Annals of Statistics, vol. 37, no. 3, pp. 1172–2009.
  3. G.R. Arce, „Nonlinear Signal Processing: A Statistical Approach“, Wiley:New Jersey, USA, 2005.

Nuorodos[redaguoti | redaguoti vikitekstą]