Cum se configurează smartphone-uri și PC-uri. Portal informativ

Metode de filtrare a semnalelor filtrare mediană. Filtrarea mediană

Filtrarea mediană este o tehnică de procesare a semnalului neliniară dezvoltată de Tukey. Această metodă este utilă pentru suprimarea zgomotului dintr-o imagine. Filtrul median unidimensional este fereastra glisanta care acoperă un număr impar de elemente de imagine. Elementul central este înlocuit cu mediana tuturor elementelor din fereastră. Mediana unei secvențe discrete pentru un impar N este acel element pentru care există elemente mai mici sau egale ca mărime și elemente mai mari sau egale ca mărime.

Lasă elementele imaginii cu nivelurile 80, 90, 200, 110 și 120 să cadă în fereastră; în acest caz, elementul central ar trebui înlocuit cu o valoare de 110, care este mediana secvenței ordonate 80, 90, 110, 200. Dacă, în acest exemplu, valoarea 200 este un vârf de zgomot într-o secvență crescătoare monoton , atunci filtrarea mediană va oferi o îmbunătățire semnificativă. Dimpotrivă, dacă valoarea de 200 corespunde unui impuls de semnal util (când se folosesc senzori de bandă largă), atunci procesarea va duce la o pierdere a clarității imaginii reproduse. Astfel, filtrul median în unele cazuri asigură suprimarea zgomotului, în altele determină suprimarea semnalului nedorit.

Luați în considerare efectul filtrelor mediane și de mediere (netezire) cu o fereastră cu cinci elemente pe o treaptă, dinți de ferăstrău, puls și triunghiular semnale discrete(fig. 4.23). Din aceste diagrame, se poate observa că filtrul median nu afectează funcțiile de treaptă sau rampă, ceea ce este de obicei o proprietate de dorit. Cu toate acestea, acest filtru suprimă semnalele de impuls, a căror durată

este mai mică de jumătate din lățimea ferestrei. De asemenea, filtrul aplatizează vârful funcției triunghiulare.

Capabilitati de analiza a actiunii filtru median limitat. Se poate arăta că mediana produsului dintre o constantă și o secvență este:

În plus,

Cu toate acestea, mediana sumei a două secvențe arbitrare și nu este egală cu suma medianelor lor:

Această inegalitate poate fi verificată prin exemplul secvențelor 80, 90, 100, 110, 120 și 80, 90, 100, 90, 80.

Sunt posibile diferite strategii de aplicare a filtrului median pentru a suprima zgomotul. Se recomandă să începeți cu un filtru median care se întinde pe trei elemente de imagine. Dacă atenuarea semnalului este neglijabilă, fereastra filtrului este extinsă la cinci elemente. Acest lucru se face până când filtrarea mediană face mai mult rău decât bine.

O altă posibilitate este de a efectua filtrarea mediană în cascadă a semnalului folosind un or latime variabila fereastră. În general,

unele dintre zonele care rămân neschimbate după un singur tratament cu filtru nu se modifică după tratament repetat. Domenii în care durata semnale de puls este mai mică de jumătate din lățimea ferestrei, va fi supusă modificărilor după fiecare ciclu de procesare.

Conceptul de filtru median poate fi generalizat cu ușurință la două dimensiuni prin aplicarea unei ferestre 2D de forma dorită, cum ar fi dreptunghiulară sau aproape circulară. Evident, un filtru median cu fereastră bidimensional asigură o suprimare mai bună a zgomotului decât filtrele mediane cu fereastră unidimensionale aplicate succesiv orizontale și verticale. Procesarea 2D, totuși, are ca rezultat o atenuare mai semnificativă a semnalului.

Introducere

semnal digital de filtrare mediană

Procesarea digitală a semnalului și-a găsit o largă aplicație în diverse domenii de activitate: televiziune, radar, comunicații, meteorologie, seismologie, medicină, analiza vorbirii și telefonie, precum și în prelucrarea imaginilor și a domeniilor de natură variată. În unele domenii de activitate economică, cum ar fi bancare, procesarea fluxurilor financiare digitale este de o importanță fundamentală.

Dezvoltarea tehnologiei de calcul și microprocesoare duce la crearea de echipamente din ce în ce mai fiabile, de mare viteză, miniaturale, de înaltă calitate și ieftine. Tehnologie digitala a devenit atât de răspândit încât le folosim în viața de zi cu zi, fără să observăm cu adevărat: Telefon celular, CD player, computer etc.

În cursul acestei lucrări, este necesar să se ia în considerare avantajele și dezavantajele filtrării mediane. Aflați cum funcționează filtre mediane... Folosind programul MatLab712 R2011a, arătați funcționarea acestuia prin exemplu.

Partea teoretică a DSP

Filtru median

Tot algoritmi liniari filtrarea are ca rezultat netezirea modificărilor bruște ale luminozității imaginilor procesate. Acest dezavantaj, care este deosebit de semnificativ dacă consumatorul de informații este o persoană, în principiu nu poate fi exclus în cadrul prelucrării liniare. Ideea este că procedurile liniare sunt optime pentru o distribuție gaussiană a semnalelor, a zgomotului și a datelor observate. Imaginile reale, strict vorbind, nu se supun acestei distribuții de probabilitate. Mai mult decât atât, unul dintre principalele motive pentru aceasta este prezența diferitelor margini, diferențe de luminozitate, tranziții de la o textură la alta etc. ... Acesta este tocmai ceea ce cauzează transmiterea slabă a limitelor cu filtrarea liniară.

A doua caracteristică a filtrării liniare este optimitatea sa, așa cum tocmai am menționat, cu natura gaussiană a zgomotului. De obicei, această condiție este îndeplinită de interferența de zgomot în imagini, prin urmare, atunci când sunt suprimate, algoritmii liniari au performanțe ridicate. Cu toate acestea, de multe ori trebuie să aveți de-a face cu imagini care sunt distorsionate de alte tipuri de zgomot. Unul dintre ele este zgomotul de impuls. Când sunt expuse la aceasta, pe imagine se observă puncte albe și/sau negre, împrăștiate haotic în tot cadrul. Utilizarea filtrării liniare în acest caz este ineficientă - fiecare dintre impulsurile de intrare (de fapt, o funcție delta) oferă un răspuns sub forma unui răspuns la impuls de filtru, iar combinația lor contribuie la propagarea interferenței pe întreaga zonă a cadrul.

O soluție de succes la aceste probleme este utilizarea filtrarii mediane, propusă de J. Tukey în 1971 pentru analiza proceselor economice. Cel mai complet studiu al filtrarii mediane în raport cu procesarea imaginilor este prezentat în colecție. Rețineți că filtrarea mediană este o metodă de procesare euristică, algoritmul său nu este solutie matematica o sarcină strict formulată. Prin urmare, cercetătorii acordă o mare atenție analizei eficienței procesării imaginilor pe baza acesteia și comparării cu alte metode.

La aplicarea filtrului median (MF), fiecare punct al cadrului este procesat secvenţial, în urma căruia se formează o secvenţă de estimări. În mod ideal, procesarea în diferite puncte este independentă (acest MF este asemănător cu un filtru de mască), dar pentru a o accelera, este recomandabil să folosiți algoritmic calculele efectuate anterior la fiecare pas.

Filtrarea mediană folosește o fereastră bidimensională (apertura filtrului), de obicei cu simetrie centrală, cu centrul ei situat în punctul de filtrare curent. În fig. 1.1 prezintă două exemple de ferestre în cruce și pătrate cele mai frecvent utilizate. Dimensiunile deschiderii se numără printre parametrii care sunt optimizați în procesul de analiză a eficienței algoritmului. Mostre ale imaginii din fereastră formează eșantionul de lucru al pasului curent.

Orez. 1.1.

Natura bidimensională a ferestrei face posibilă efectuarea de filtrare în esență bidimensională, deoarece datele de la ambele linii curente si coloana, si din cele vecine. Să desemnăm proba de lucru ca o matrice unidimensională; numărul elementelor sale este egal cu dimensiunea ferestrei, iar aranjarea lor este arbitrară. De obicei, se folosesc ferestre cu un număr impar de puncte (acest lucru este asigurat automat cu simetria centrală a deschiderii și când punctul foarte central este inclus în compoziția sa). Dacă ordonați secvența în ordine crescătoare, atunci mediana ei va fi elementul eșantion care ocupă poziția centrală în această secvență ordonată. Numărul obținut în acest fel este produsul de filtru pentru punctul curent al cadrului. Este clar că rezultatul unei astfel de prelucrări nu depinde cu adevărat de secvența în care sunt prezentate elementele imaginii în proba de lucru. Să introducem o notație formală pentru procedura descrisă sub forma:

x * = med (y 1, y 2, ..., y n) (1.1)

Să ne uităm la un exemplu. Să presupunem că proba are forma: Y = (136,110,99,45,250,55,158,104,75), iar elementul 250, situat în centrul său, corespunde punctului de filtrare curent (i 1, i 2) (Fig. 1.1). Mare importanță luminozitatea în acest punct al cadrului poate fi rezultatul zgomotului de impuls (punct). Eșantionul ordonat crescător are forma (45,55,75,99,104,110,136,158,250), prin urmare, conform procedurii (1.1), se obține x * = med (y 1, y 2, ..., y 9) = 104. Vedem că influența „vecinilor” asupra rezultatului de filtrare în punctul curent a dus la „ignorarea” emisiei de impuls de luminozitate, care ar trebui considerată ca un efect de filtrare. Dacă zgomotul de impuls nu este punctual, dar acoperă o zonă locală, atunci poate fi și suprimat. Acest lucru se va întâmpla dacă dimensiunea acestei zone locale este mai mică de jumătate din dimensiunea diafragmei MF. Prin urmare, pentru a suprima zgomotul de impuls care afectează zonele locale ale imaginii, dimensiunea diafragmei MF ar trebui mărită.

Din (1.1) rezultă că acțiunea MF este de a „ignora” valorile extreme ale eșantionului de intrare - atât valori aberante pozitive, cât și negative. Acest principiu de anulare a interferențelor poate fi aplicat pentru a atenua zgomotul imaginii. Cu toate acestea, studiul suprimării zgomotului folosind filtrarea mediană arată că eficiența sa în rezolvarea acestei probleme este mai mică decât cea a filtrării liniare.

Rezultatele experimentale care ilustrează funcționarea MF sunt prezentate în Fig. 1.2. În experimente, am folosit un MF având o deschidere pătrată cu latura egală cu 3. Rândul din stânga arată imagini distorsionate de zgomot, iar rândul din dreapta arată rezultatele filtrării lor mediane. În fig. 1.2 a și fig. 1.2.c arată imaginea originală distorsionată zgomot de impuls... Când a fost suprapus, a fost folosit un generator de numere aleatoare cu o lege de distribuție uniformă pe interval, care generează numere aleatoare independente în toate punctele cadrului. Intensitatea interferenței a fost stabilită de probabilitatea p de apariție a acesteia în fiecare punct. Dacă pentru Număr aleatoriu n i1i2 s-a format în punctul (i 1, i 2), condiția n i1i2

Orez. 1.2.

Orez. 1.2. e arată o imagine distorsionată de zgomotul gaussian independent la un raport semnal-zgomot q 2 = -5 dB, iar Fig. 1.2.f - rezultatul filtrării acestuia de către filtrul median. Condițiile acestui experiment fac posibilă compararea rezultatelor acestuia cu rezultatele filtrării liniare considerate mai sus. Tabelul 1.1 oferă date care fac posibilă o astfel de comparație. Pentru diferite metode de filtrare, acest tabel oferă valorile pătratului mediu relativ al erorilor q 2 și coeficientul de atenuare a zgomotului r pentru cazul în care raportul semnal-zgomot la intrarea filtrului este -5 dB.

Tabelul 1.1. Comparația eficienței suprimării zgomotului la filtrarea imaginilor, q 2 = -5 dB.

Cel mai eficient este filtrul Wiener bidimensional, care reduce pătratul mediu al erorilor de 17 ori. Filtrul median are cea mai scăzută eficiență dintre toate filtrele considerate; acesta corespunde cu r = 5,86. Cu toate acestea, acest număr indică faptul că, cu ajutorul său, este posibil să se reducă semnificativ nivelul de zgomot din imagine.

În același timp, așa cum sa menționat mai sus și așa cum se arată în Fig. 1.2.e, filtrarea mediană netezește marginile imaginii într-o măsură mai mică decât orice filtrare liniară. Mecanismul acestui fenomen este foarte simplu și este următorul. Să presupunem că deschiderea filtrului este situată în apropierea graniței care separă zonele luminoase și întunecate ale imaginii, în timp ce centrul său este situat în zona zonei întunecate. Apoi, cel mai probabil, eșantionul de lucru va conține un număr mai mare de elemente cu valori scăzute de luminozitate și, prin urmare, mediana se va număra printre acele elemente ale selecției de lucru care corespund acestei zone a imaginii. Situația se inversează dacă centrul diafragmei este deplasat într-o regiune de luminozitate mai mare. Dar asta înseamnă și că MF este sensibil la schimbările de luminozitate. Există multe interpretări ale metodelor de lucru MF, să luăm în considerare alta, de exemplu, utilizarea sa în procesarea imaginilor celulelor sanguine - granulocite. Înainte de a măsura dimensiunea unui granulocite, imaginea acestuia a fost netezită cu un filtru median pentru a elimina granulele care ar putea afecta rezultatul măsurării. De obicei, în procesul de filtrare mediană, valorile semnalului dintr-o anumită vecinătate a punctului în care este calculat răspunsul filtrului sunt sortate în ordine crescătoare sau descrescătoare într-o serie de variații. Răspunsul filtrului este definit ca mediana - valoarea semnalului din mijlocul (centrul) seriei de variații. În cele ce urmează, acest cartier va fi numit fereastra de filtrare. În plus, pentru simplitate, vom lua în considerare un filtru cu o fereastră pătrată de dimensiune n × n.

Prin urmare, atunci când se calculează mediana în fereastra de filtrare, numărul de operațiuni de date, de exemplu, numărul de operațiuni de sortare, este egal cu n 2. La procesarea unei imagini de dimensiunea M × N puncte (pixeli), numărul de operațiuni de date va fi mare și se va ridica la M × N × n 2. Operațiuni diferite necesită timpi de execuție diferiți. Scanând imaginea în secvență, pot fi reduse operațiunile de sortare cele mai consumatoare de timp. Deci, la trecerea de la punctul o1 cu fereastra w1 la punctul o2 cu fereastra w2 din Fig. 1.3. este posibilă excluderea punctelor coloanei 1 din seria de variații a ferestrei w1, sortarea punctelor coloanei 6 și combinarea celor două serii de variații obținute într-una singură. Acest algoritm funcționează mai rapid în comparație cu sortarea independentă în fiecare fereastră, dar numărul total de manipulări de date (deși mai puțin laborioase), de exemplu, cel puțin enumerarea datelor, rămâne același, adică destul de mare. Prin urmare, cu filtrarea mediană a imaginilor, acestea sunt de obicei limitate la ferestre de 3 × 3 sau 5 × 5 și rareori mai mult, ceea ce este suficient, de exemplu, pentru a elimina zgomotul de impuls.

Orez. 1.3. Scanarea unei imagini cu fereastra de filtru mediană

Aceleași restricții sunt acceptate forțat pentru diferite operații neliniare de prelucrare morfologică, efectuate în spațiul geometric al imaginii și care, spre deosebire de operațiile liniare, nu pot fi efectuate în spațiul Fourier. În același timp, există o serie de probleme de procesare a imaginii care ar putea fi rezolvate eficient folosind filtrul median, dar necesită o fereastră mare. Una dintre aceste sarcini va fi discutată mai jos. Prin urmare, o posibilă creștere a vitezei medii de filtrare este foarte promițătoare în sarcinile de procesare a imaginii.

Metodele de filtrare mediană sunt destul de diverse. Ele pot fi îmbunătățite. O astfel de actualizare se numește filtrare mediană adaptivă.

Filtrarea mediană are și dezavantajele sale. În special, s-a stabilit experimental că această metodă are o eficiență relativ slabă în filtrarea așa-numitului zgomot de fluctuație. În plus, pe măsură ce dimensiunea măștii crește, marginile imaginii sunt neclare și, în consecință, claritatea imaginii este redusă. Aceste dezavantaje ale metodei pot fi minimizate prin utilizarea filtrarii mediane cu o dimensiune dinamică a măștii (filtrare mediană adaptivă). Principiul calculării referinței centrale în procesarea locală a imaginii printr-o fereastră glisantă rămâne același. Această mediană este dintr-un set de mostre ordonate care cad în fereastră (mască), iar dimensiunea ferestrei glisante (mască) este dinamică și depinde de luminozitatea pixelilor vecini.

Să introducem coeficientul de prag al abaterii luminozității S prag =. Valorile abaterii luminozității pixelilor vecini A (r, n, m), care se încadrează într-o fereastră de dimensiune n × m, în raport cu luminozitatea referinței centrale A (r), vor fi scrise în forma (1.2):

Apoi, criteriul conform căruia este necesară creșterea dimensiunii măștii cu referința centrală r va avea forma:

Pe baza algoritmului descris, a fost dezvoltat un program de calculator care a confirmat în practică avantajele filtrarii mediane adaptive.

Dacă mediul dvs. de inginerie este similar cu al meu, atunci probabil că știți multe despre diferitele tipuri de filtre de linie, a căror sarcină principală este să transmiteți un semnal într-un interval de frecvență și să întârzieți semnalele în intervalele rămase. Aceste filtre sunt desigur indispensabile pentru multe tipuri de zgomot. Cu toate acestea, în lumea reală a sistemelor încorporate, este nevoie de puțin timp pentru a realiza că filtrele clasice de linie sunt inutile împotriva zgomotului de explozie (zgomot de popcorn).

Zgomotul de impuls apare de obicei din evenimente pseudoaleatoare. De exemplu, un radio cu două sensuri poate fi pornit lângă dispozitivul dvs. sau poate apărea un fel de electricitate statică. Ori de câte ori se întâmplă acest lucru, semnalul de intrare poate fi distorsionat temporar.

De exemplu, ca rezultat al conversiei analog-digital, obținem următorul interval de valori: 385, 389, 912, 388, 387. Valoarea 912 este probabil anormală și ar trebui respinsă. Dacă încercați un filtru de linie clasic, veți observa că valoarea 912 va avea un impact semnificativ asupra ieșirii. Cea mai bună soluție în acest caz ar fi folosirea unui filtru median.

În ciuda faptului că această abordare este evidentă, din experiența mea, filtrele mediane sunt surprinzător de rar utilizate în sistemele încorporate. Poate că acest lucru se datorează lipsei de cunoștințe despre existența lor și dificultății de implementare. Sper că postarea mea va elimina aceste obstacole într-o oarecare măsură.

Ideea din spatele filtrului median este simplă. Selectează media dintr-un grup de valori de intrare și o trimite la ieșire. Mai mult, de obicei grupul are un număr impar de valori, deci nu există nicio problemă cu alegerea.

Până de curând, am distins trei clase de filtre mediane care diferă prin numărul de valori utilizate:

Filtrați folosind 3 valori (cel mai mic filtru posibil),
- filtrați folosind 5, 7 sau 9 valori (cele mai utilizate),
- filtrați folosind 11 sau mai multe valori.

În acest moment mă țin de o clasificare mai simplă:

Filtrați folosind 3 valori,
- filtrați folosind mai mult de 3 valori.

Filtru median de 3

Acesta este cel mai mic filtru posibil. Este ușor de implementat cu câțiva operatori și, prin urmare, are cod mic și rapid.


uint16_t middle_of_3 (uint16_t a, uint16_t b, uint16_t c)
{
uint16_t mijloc;

În cazul în care un<= b) && (a <= c)){
mijloc = (b<= c) ? b: c;
}
altfel (
dacă ((b<= a) && (b <= c)){
mijloc = (a<= c) ? a: c;
}
altfel (
mijloc = (a<= b) ? a: b;
}
}

întoarcere la mijloc;
}

Filtru median> 3

Pentru un filtru mai mare de 3, vă sugerez să utilizați algoritmul descris de Phil Ekstrom în numărul din noiembrie 2000 al revistei Embedded Systems Programming. Extrom folosește o listă legată. Lucrul bun despre această abordare este că, atunci când matricea este sortată, eliminarea vechii valori și adăugarea uneia noi nu distruge în mod semnificativ matricea. Prin urmare, această abordare funcționează bine cu filtru de dimensiuni mari.

Rețineți că au existat unele erori în codul publicat inițial pe care Extrom le-a remediat ulterior. Având în vedere că acum este dificil să găsești ceva pe embedded.com, am decis să public implementarea codului său. Codul a fost scris inițial în Dynamic C, dar pentru această postare a fost portat la C standard. Se presupune că codul funcționează, dar depinde de tine să-l verifici complet.


#define NULL 0
#define STOPPER 0 / * Mai mic decât orice datum * /
#define MEDIAN_FILTER_SIZE 5

uint16_t MedianFilter (datum uint16_t)
{

pereche de structuri (
struct pair * punct; / * Indicatori care formează o listă legată în ordine sortată * /
valoarea uint16_t; / * Valori de sortat * /
};

/ * Buffer de perechi nwidth * /
buffer de perechi de structuri statice = (0);
/ * Indicator în buffer circular de date * /
pereche de structuri statice * datpoint = buffer;
/ * Opritor de lanț * /
pereche de structuri statice small = (NULL, STOPPER);
/ * Indicator la capul (cel mai mare) al listei conectate. * /
pereche de structuri statice mare = (& mic, 0);

/ * Indicator către succesorul elementului de date înlocuit * /
struct pair * succesor;
/ * Indicatorul folosit pentru a scana în jos lista sortată * /
struct pair * scanare;
/ * Valoarea anterioară a scanării * /
struct pair * scanold;
/ * Indicator către mediană * /
struct pair * mediană;
uint16_t i;

dacă (datum == OPRITOR) (
datum = STOPPER + 1; / * Nu sunt permise opritoare. * /
}

Dacă ((++ datpoint - buffer)> = MEDIAN_FILTER_SIZE) (
datpoint = buffer; / * Incrementează și împachetează datele în pointer. * /
}

Datpoint-> value = datum; / * Copiați într-un nou datum * /
succesor = datpoint-> point; / * Salvați indicatorul la succesorul vechii valori * /
mediană = / * Mediană inițial până la primul din lanț * /
scanold = NULL; / * Scanold inițial nul. * /
scanare = / * Indică indicatorul către primul (cel mai mare) datum din lanț * /

/ * Gestionați înlănțuirea primului articol din lanț ca caz special * /
dacă (scanare-> punct == punct dat) (
scan-> punct = succesor;
}


scanare = scanare-> punct; / * coborârea lanțului * /

/ * Buclă prin lanț, ieșire normală a buclei prin pauză. * /
pentru (i = 0; i< MEDIAN_FILTER_SIZE; ++i){
/ * Manipulați articole cu numere impare în lanț * /
dacă (scanare-> punct == punct dat) (
scan-> punct = succesor; / * Înlănțuiește vechiul datum. * /
}

Dacă (scanare-> valoare< datum){ /* If datum is larger than scanned value,*/
datpoint-> point = scanold-> punct; / * Înlănțuiește-l aici. * /
scanold-> point = datpoint; / * Marcați-l înlănțuit. * /
datum = STOPPER;
};

/ * Treceți indicatorul median în jos în lanț după ce faceți un element impar * /
median = median-> punct; / * Indicator median al pasului. * /
dacă (scanați == și mic) (
pauză; / * Rupere la capătul lanțului * /
}
scanold = scanare; / * Salvați acest indicator și * /
scanare = scanare-> punct; / * coborârea lanțului * /

/ * Manipulați articolele cu număr par în lanț. * /
dacă (scanare-> punct == punct dat) (
scan-> punct = succesor;
}

Dacă (scanare-> valoare< datum){
datpoint-> point = scanold-> punct;
scanold-> point = datpoint;
datum = STOPPER;
}

Dacă (scanați == și mic) (
pauză;
}

Scanold = scanare;
scanare = scanare-> punct;
}

returnează mediana-> valoare;
}

Pentru a utiliza acest filtru, apelați pur și simplu funcția de fiecare dată când primiți o nouă valoare de intrare. Funcția va returna media ultimelor valori acceptate, al căror număr este determinat de constanta MEDIAN_FILTER_SIZE.

Acest algoritm poate folosi o cantitate suficientă de RAM (desigur, depinde de dimensiunea filtrului), deoarece stochează valorile de intrare și pointerii către structuri. Cu toate acestea, dacă aceasta nu este o problemă, atunci algoritmul este foarte bun de utilizat, deoarece este semnificativ mai rapid decât algoritmii bazați pe sortare.

Filtrare mediană bazată pe sortare

În versiunea veche a acestui articol, pentru filtrele mediane de dimensiunea 5, 7 sau 9, am susținut o abordare bazată pe algoritm de sortare. Acum m-am răzgândit. Cu toate acestea, dacă doriți să le utilizați, vă ofer codul de bază:


dacă (ADC_Buffer_Full) (

Uint_fast16_t adc_copy;
uint_fast16_t filtered_cnts;

/ * Copiați datele * /
memcpy (adc_copy, ADC_Counts, sizeof (adc_copy));

/ * Sortați-l * /
shell_sort (adc_copy, MEDIAN_FILTER_SIZE);

/ * Luați valoarea de mijloc * /
filtered_cnts = adc_copy [(MEDIAN_FILTER_SIZE - 1U) / 2U];

/ * Convertiți în unități de inginerie * /
...

Concluzie

Utilizarea filtrelor mediane este asociată cu anumite costuri. Evident, filtrele mediane adaugă o întârziere la valorile în trepte. De asemenea, filtrele mediane pot șterge complet informațiile de frecvență din semnal. Desigur, dacă sunteți interesat doar de valorile constante, atunci aceasta nu este o problemă.

Având în vedere aceste avertismente, vă recomand în continuare să utilizați filtre medii în design-ul dvs.

Filtrul median implementează o procedură de reducere a zgomotului neliniar. Filtrul median este o fereastră W care alunecă peste câmpul de imagine, acoperind un număr impar de mostre. Numărarea centrului este înlocuită cu mediana tuturor elementelor de imagine care cad în fereastră. Mediana unei secvențe discrete x1, x2, ..., xL pentru un L impar este un element pentru care există (L? 1) / 2 elemente care sunt mai mici sau egale cu acesta ca mărime și (L? 1) / 2 elemente care au dimensiuni mai mari sau egale. Cu alte cuvinte, mediana este media în ordinea membrului seriei obținută prin ordonarea secvenței inițiale.

De exemplu, med (20, 10, 3, 7, 7) = 7.

Un filtru median bidimensional cu o fereastră W este definit după cum urmează:

Filtrul median este folosit pentru a suprima zgomotul aditiv și de impuls din imagine. O trăsătură caracteristică a filtrului median este păstrarea diferențelor de luminozitate (contururi). Filtrul median este deosebit de eficient în cazul zgomotului impulsiv. Este prezentat efectul filtrelor anti-aliasing și median cu o fereastră cu trei elemente asupra diferenței de luminanță zgomotoasă cu zgomot aditiv pentru un semnal unidimensional.

În ceea ce privește zgomotul de impuls, un filtru median de fereastră 3 x 3 suprimă complet vârfurile unice pe un fundal uniform, precum și grupurile de două, trei și patru vârfuri de impuls. În general, pentru a suprima un grup de zgomot de impuls, dimensiunea ferestrei ar trebui să fie de cel puțin două ori dimensiunea grupului de interferență.

Dintre filtrele mediane cu o fereastră 3x3, următoarele sunt cele mai comune:

Coordonatele măștilor prezentate indică de câte ori pixelul corespunzător este inclus în secvența ordonată descrisă mai sus.

Una dintre cele mai eficiente moduri de a elimina zgomotul de impuls dintr-o imagine este utilizarea unui filtru median.

Pentru fiecare pixel din unele din împrejurimile sale (fereastră), valoarea mediană este căutată și atribuită acestui pixel. Determinarea valorii mediane: dacă o matrice de pixeli este sortată după valoarea lor, mediana va fi elementul de mijloc al acelei matrice. În consecință, dimensiunea ferestrei trebuie să fie ciudată pentru ca acest element de mijloc să existe.

Mediana poate fi determinată și prin formula:

unde W este setul de pixeli, printre care se caută mediana, iar fi sunt valorile luminozității acestor pixeli.

Pentru imagini color, se folosește filtrul median vectorial (VMF):

unde Fi este valorile pixelilor din spațiul de culoare 3D și d este o metrică arbitrară (de exemplu, euclidiană).

Cu toate acestea, în forma sa pură, filtrul median estompează detaliile mici, a căror dimensiune este mai mică decât dimensiunea ferestrei pentru găsirea mediei și, prin urmare, practic nu este utilizat în practică.

Toți algoritmii de filtrare liniară netezesc schimbările bruște ale luminozității imaginilor procesate. Acest dezavantaj, care este deosebit de semnificativ dacă consumatorul de informații este o persoană, în principiu nu poate fi exclus în cadrul prelucrării liniare. Ideea este că procedurile liniare sunt optime pentru o distribuție gaussiană a semnalelor, a zgomotului și a datelor observate. Imaginile reale, strict vorbind, nu se supun acestei distribuții de probabilitate. Mai mult decât atât, unul dintre principalele motive pentru aceasta este prezența diferitelor margini, diferențe de luminozitate, tranziții de la o textură la alta etc. ... Acesta este tocmai ceea ce cauzează transmiterea slabă a limitelor cu filtrarea liniară.

A doua caracteristică a filtrării liniare este optimitatea sa, așa cum tocmai am menționat, cu natura gaussiană a zgomotului. De obicei, această condiție este îndeplinită de interferența de zgomot în imagini, prin urmare, atunci când sunt suprimate, algoritmii liniari au performanțe ridicate. Cu toate acestea, de multe ori trebuie să aveți de-a face cu imagini care sunt distorsionate de alte tipuri de zgomot. Unul dintre ele este zgomotul de impuls. Când sunt expuse la aceasta, pe imagine se observă puncte albe și/sau negre, împrăștiate haotic în tot cadrul. Utilizarea filtrării liniare în acest caz este ineficientă - fiecare dintre impulsurile de intrare (de fapt, o funcție delta) oferă un răspuns sub forma unui răspuns la impuls de filtru, iar combinația lor contribuie la propagarea interferenței pe întreaga zonă a cadrul.

O soluție de succes la aceste probleme este utilizarea filtrarii mediane, propusă de J. Tukey în 1971 pentru analiza proceselor economice. Cel mai complet studiu al filtrarii mediane în raport cu procesarea imaginilor este prezentat în colecție. Rețineți că filtrarea mediană este o metodă de procesare euristică; algoritmul său nu este o soluție matematică pentru o problemă strict formulată. Prin urmare, cercetătorii acordă o mare atenție analizei eficienței procesării imaginilor pe baza acesteia și comparării cu alte metode.

La aplicarea filtrului median (MF), fiecare punct al cadrului este procesat secvenţial, în urma căruia se formează o secvenţă de estimări. În mod ideal, procesarea în diferite puncte este independentă (acest MF este asemănător cu un filtru de mască), dar pentru a o accelera, este recomandabil să folosiți algoritmic calculele efectuate anterior la fiecare pas.

Filtrarea mediană folosește o fereastră bidimensională (apertura filtrului), de obicei cu simetrie centrală, cu centrul ei situat în punctul de filtrare curent. În fig. Figura 3.10 prezintă două exemple de ferestre în cruce și pătrate cele mai frecvent utilizate. Dimensiunile deschiderii se numără printre parametrii care sunt optimizați în procesul de analiză a eficienței algoritmului. Mostre ale imaginii din fereastră formează eșantionul de lucru al pasului curent.

Orez. 3.10. Exemple de ferestre cu filtrare mediană

Natura bidimensională a ferestrei permite efectuarea de filtrare în esență bidimensională, deoarece datele atât din rândul și coloana curente, cât și din cele adiacente sunt folosite pentru a forma o estimare. Să desemnăm proba de lucru ca o matrice unidimensională ; numărul elementelor sale este egal cu dimensiunea ferestrei, iar aranjarea lor este arbitrară. De obicei, se folosesc ferestre cu un număr impar de puncte (acest lucru este asigurat automat cu simetria centrală a deschiderii și când punctul foarte central este inclus în compoziția sa). Dacă ordonați secvența în ordine crescătoare, atunci mediana ei va fi elementul eșantion care ocupă poziția centrală în această secvență ordonată. Numărul obținut în acest fel este produsul de filtru pentru punctul curent al cadrului. Este clar că rezultatul unei astfel de prelucrări nu depinde cu adevărat de secvența în care sunt prezentate elementele imaginii în proba de lucru. Să introducem o notație formală pentru procedura descrisă sub forma:

. (3.48)

Să ne uităm la un exemplu. Să presupunem că selecția are forma:, iar elementul 250, situat în centrul său, corespunde punctului de filtrare curent (Fig. 3.10). O valoare mare a luminozității în acest punct al cadrului poate fi rezultatul interferenței de impuls (punct). În acest caz, eșantionul sortat crescător are forma (45,55,75,99,104,110,136,158,250), prin urmare, în conformitate cu procedura (3.48), obținem. Vedem că influența „vecinilor” asupra rezultatului de filtrare în punctul curent a dus la „ignorarea” emisiei de impuls de luminozitate, care ar trebui considerată ca un efect de filtrare. Dacă zgomotul de impuls nu este punctual, dar acoperă o zonă locală, atunci poate fi și suprimat. Acest lucru se va întâmpla dacă dimensiunea acestei zone locale este mai mică de jumătate din dimensiunea diafragmei MF. Prin urmare, pentru a suprima zgomotul de impuls care afectează zonele locale ale imaginii, dimensiunea diafragmei MF ar trebui mărită.

Din (3.48) rezultă că acțiunea MF este de a „ignora” valorile extreme ale eșantionului de intrare - atât valori aberante pozitive, cât și negative. Acest principiu de anulare a interferențelor poate fi aplicat pentru a atenua zgomotul imaginii. Cu toate acestea, studiul suprimării zgomotului folosind filtrarea mediană arată că eficiența sa în rezolvarea acestei probleme este mai mică decât cea a filtrării liniare.

Rezultatele experimentale care ilustrează funcționarea MF sunt prezentate în Fig. 3.11. În experimente, am folosit un MF având o deschidere pătrată cu

latura egală cu 3. Rândul din stânga arată imagini distorsionate de zgomot, iar rândul din dreapta arată rezultatele filtrării lor mediane. În fig. 3.11.a și fig. 3.11.c arată imaginea originală, distorsionată de zgomotul de impuls. Când a fost suprapus, a fost folosit un generator de numere aleatoare cu o lege de distribuție uniformă pe interval, care generează numere aleatoare independente în toate punctele cadrului. Intensitatea interferenței a fost stabilită de probabilitatea apariției acesteia în fiecare punct. Dacă condiția a fost îndeplinită pentru un număr aleator generat într-un punct, atunci luminozitatea imaginii în acest punct a fost înlocuită cu numărul 255, care corespunde luminozității maxime (nivel de alb). În fig. 3.11.Și efectul zgomotului de impuls a fost distorsionat cu 5% (= 0,05), iar în fig. 3.11.c - 10% din elementele imaginii. Rezultatele procesării indică o suprimare aproape completă a interferenței în primul caz și o atenuare semnificativă a acesteia în al doilea.

Orez. 3.11. Exemple de filtrare mediană

Orez. 3.11.d arată o imagine distorsionată de zgomotul gaussian independent la un raport semnal-zgomot dB, iar Fig. 3.11.f - rezultatul filtrării acestuia cu un filtru median. Condițiile acestui experiment fac posibilă compararea rezultatelor acestuia cu rezultatele filtrării liniare considerate mai sus. Tabelul 3.1 prezintă date care fac posibilă o astfel de comparație. Pentru diferite metode de filtrare, acest tabel oferă valorile erorii pătrate medii relative și ale factorului de atenuare a zgomotului pentru cazul în care raportul semnal-zgomot la intrarea filtrului este -5 dB.

Tabelul 3.1. Comparație între eficiența suprimării zgomotului la filtrarea imaginilor, dB

masca filtru cu optim. LA LOR

masca filtru cu uniforma LA LOR

recurent bidimensional filtru

filtru Wiener bidimensional

Cel mai eficient este filtrul Wiener bidimensional, care reduce pătratul mediu al erorilor de 17 ori. Filtrul median are cea mai scăzută eficiență dintre toate filtrele considerate; corespunde = 5,86. Cu toate acestea, acest număr indică faptul că, cu ajutorul său, este posibil să se reducă semnificativ nivelul de zgomot din imagine.

În același timp, așa cum sa menționat mai sus și așa cum se arată în Fig. 3.11.e, filtrarea mediană netezește marginile imaginii într-o măsură mai mică decât orice filtrare liniară. Mecanismul acestui fenomen este foarte simplu și este următorul. Să presupunem că deschiderea filtrului este situată în apropierea graniței care separă zonele luminoase și întunecate ale imaginii, în timp ce centrul său este situat în zona zonei întunecate. Apoi, cel mai probabil, eșantionul de lucru va conține un număr mai mare de elemente cu valori scăzute de luminozitate și, prin urmare, mediana se va număra printre acele elemente ale selecției de lucru care corespund acestei zone a imaginii. Situația se inversează dacă centrul diafragmei este deplasat într-o regiune de luminozitate mai mare. Dar asta înseamnă și că MF este sensibil la schimbările de luminozitate.

Top articole similare