Filtru mediu - Median filter
Filtrul median este un non-linear filtrarea digitală tehnică, adesea utilizat pentru a elimina zgomotul dintr - o imagine sau un semnal. O astfel de reducere a zgomotului este o etapă tipică de pre-procesare pentru a îmbunătăți rezultatele procesării ulterioare (de exemplu, detectarea muchiilor pe o imagine). Filtrarea mediană este foarte utilizată în prelucrarea digitală a imaginilor deoarece, în anumite condiții, păstrează muchiile în timp ce elimină zgomotul (dar vezi discuția de mai jos), având și aplicații în procesarea semnalului .
Descrierea algoritmului
Ideea principală a filtrului median este de a rula prin intrarea semnalului cu intrare, înlocuind fiecare intrare cu mediana intrărilor vecine. Modelul vecinilor se numește „fereastră”, care alunecă, intrare cu intrare, pe întregul semnal. Pentru semnalele unidimensionale, fereastra cea mai evidentă este doar primele intrări precedente și următoare, în timp ce pentru datele bidimensionale (sau cu dimensiuni superioare) fereastra trebuie să includă toate intrările într-o rază dată sau într-o regiune elipsoidală (adică filtrul median) nu este un filtru separabil ).
Exemplu unidimensional lucrat
Pentru a demonstra, folosind o dimensiune a ferestrei de trei cu o intrare imediat precedentă și următoare fiecărei intrări, un filtru median va fi aplicat următorului semnal unidimensional simplu:
- x = (2, 3, 80, 6, 2, 3).
Deci, semnalul de ieșire filtrat median y va fi:
- y 1 = med (2, 3, 80) = 3, (deja 2, 3 și 80 sunt în ordine crescătoare, deci nu este nevoie să le aranjați)
- y 2 = med (3, 80, 6) = med (3, 6, 80) = 6, (3, 80 și 6 sunt rearanjate pentru a găsi mediana)
- y 3 = med (80, 6, 2) = med (2, 6, 80) = 6,
- y 4 = med (6, 2, 3) = med (2, 3, 6) = 3,
adică y = (3, 6, 6, 3).
Probleme de graniță
În exemplul de mai sus, deoarece nu există nicio intrare care precede prima valoare, prima valoare se repetă, ca și în cazul ultimei valori, pentru a obține suficiente intrări pentru a umple fereastra. Acesta este un mod de a gestiona intrările de ferestre lipsă la limitele semnalului, dar există și alte scheme care au proprietăți diferite care ar putea fi preferate în circumstanțe particulare:
- Evitați procesarea limitelor, cu sau fără decuparea semnalului sau a limitei imaginii după aceea,
- Preluarea intrărilor din alte locuri din semnal. De exemplu, cu imagini, pot fi selectate intrări din limita orizontală sau verticală îndepărtată,
- Micșorarea ferestrei lângă limite, astfel încât fiecare fereastră să fie plină.
Pseudo cod filtru median bidimensional
Codul pentru un algoritm simplu de filtrare mediană bidimensională ar putea arăta astfel:
1. allocate outputPixelValue[image width][image height] 2. allocate window[window width × window height] 3. edgex := (window width / 2) rounded down 4. edgey := (window height / 2) rounded down for x from edgex to image width - edgex do for y from edgey to image height - edgey do i = 0 for fx from 0 to window width do for fy from 0 to window height do window[i] := inputPixelValue[x + fx - edgex][y + fy - edgey] i := i + 1 sort entries in window[] outputPixelValue[x][y] := window[window width * window height / 2]
Acest algoritm:
- Procesează un singur canal de culoare,
- Adoptă abordarea „neprocesarea limitelor” (a se vedea mai sus discuția despre problemele limită).
Probleme de implementare a algoritmului
De obicei, de cele mai multe ori efortul de calcul și timpul sunt cheltuiți pentru calcularea medianei fiecărei ferestre. Deoarece filtrul trebuie să proceseze fiecare intrare în semnal, pentru semnale mari precum imaginile, eficiența acestui calcul median este un factor critic în determinarea cât de repede poate rula algoritmul. Implementarea naivă descrisă mai sus sortează fiecare intrare din fereastră pentru a găsi mediana; totuși, deoarece este necesară doar valoarea de mijloc dintr-o listă de numere, algoritmii de selecție pot fi mult mai eficienți. În plus, unele tipuri de semnale (foarte des în cazul imaginilor) folosesc reprezentări de număr întreg: în aceste cazuri, medianele histogramei pot fi mult mai eficiente, deoarece este simplu să actualizați histograma de la fereastră la fereastră și să găsiți mediana unei histograme. nu este deosebit de oneros.
Proprietăți de conservare a marginilor
Filtrarea mediană este un fel de tehnică de netezire, la fel ca filtrarea liniară Gaussiană . Toate tehnicile de netezire sunt eficiente pentru eliminarea zgomotului în patch-uri netede sau regiuni netede ale unui semnal, dar afectează negativ marginile. Adesea, totuși, în același timp cu reducerea zgomotului într-un semnal, este important să se păstreze marginile. Marginile au o importanță critică pentru aspectul vizual al imaginilor, de exemplu. Pentru niveluri mici până la moderate de zgomot gaussian, filtrul median este în mod demonstrabil mai bun decât neclaritatea gaussiană la eliminarea zgomotului, păstrând în același timp marginile pentru o anumită dimensiune fixă a ferestrei. Cu toate acestea, performanțele sale nu sunt mult mai bune decât neclaritatea Gaussiană pentru niveluri ridicate de zgomot, în timp ce, pentru zgomotul petalat și zgomotul de sare și piper (zgomot impulsiv), este deosebit de eficient. Din această cauză, filtrarea mediană este foarte utilizată în procesarea digitală a imaginilor .
Vezi si
- Filtrare de conservare a muchiilor
- Zgomotul imaginii
- Mediană ponderată
- filtru pseudo-median
- Netezirea Lulu
- Filtru bilateral
- Media cu validitate limitată a datelor
- Netezire
Referințe
- ^ Huang, Thomas S .; Yang, George J .; Tang, Gregory Y. (februarie 1979). „Un algoritm rapid de filtrare mediană bidimensională” (PDF) . Tranzacții IEEE privind acustica, vorbirea și procesarea semnalului . 27 (1): 13-18. doi : 10.1109 / TASSP.1979.1163188 .
- ^ Arias-Castro, Ery; Donoho, David L. (iunie 2009). "Filtrarea mediană păstrează cu adevărat marginile mai bine decât filtrarea liniară?" . Analele Statisticii . 37 (3): 1172-2009. arXiv : math / 0612422 . Cod Bib : 2006math ..... 12422A . doi : 10.1214 / 08-AOS604 . MR 2509071 . Zbl 1160.62086 .
- ^ Arce, Gonzalo R. (2005). Prelucrarea neliniară a semnalului: o abordare statistică . New Jersey, SUA: Wiley. ISBN 0-471-67624-1.
linkuri externe
- Implementare rapidă a filtrului median MATLAB unidimensional
- Funcția Mathematica MedianFilter
- Filtru mediu
- Filtru median bidimensional rapid
- Implementarea filtrului median bidimensional în timp constant (licență GPL) - timpul de rulare pe pixel al acestui algoritm este proporțional cu numărul de elemente dintr-o histogramă (de obicei acesta este , unde n este numărul de biți pe canal), chiar deși la rândul său, aceasta este o constantă.
- Implementare scrisă în diferite limbaje de programare (pe Codul Rosetta )
- Articolul Dr Dobbs
- Filtru median ponderat de peste 100 de ori
- Filtru cerc mediu Filtru mediu pentru date cu valoare de cerc, cum ar fi imagini de fază sau orientare (C ++ / Matlab)