Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Metodat e filtrimit të sinjalit filtrimi mesatar. Filtrimi mesatar

Filtrimi mesatar është një teknikë jolineare e përpunimit të sinjalit e zhvilluar nga Tukey. Kjo metodë është e dobishme për reduktimin e zhurmës në një imazh. Filtri mesatar njëdimensional është dritare rrëshqitëse A që përfshin një numër tek elementet e imazhit. Elementi qendror zëvendësohet nga medianaja e të gjithë elementëve në dritare. Mediana e një sekuence diskrete për tek Nështë ai element për të cilin ka elemente më të vogla ose të barabarta me madhësinë e tij, dhe elementë më të mëdhenj se ose të barabartë me të në madhësi.

Lërini elementët e imazhit me nivelet 80, 90, 200, 110 dhe 120 të futen në dritare; në këtë rast, elementi qendror duhet të zëvendësohet me vlerën 110, e cila është mesatarja e sekuencës së renditur 80, 90, 110, 200. Nëse në këtë shembull vlera 200 është një pikë zhurme në një sekuencë në rritje monotonike, atëherë mesatarja filtrimi do të sigurojë një përmirësim të dukshëm. Përkundrazi, nëse një vlerë prej 200 korrespondon me një impuls të dobishëm sinjali (kur përdorni sensorë me brez të gjerë), atëherë përpunimi do të çojë në një humbje në qartësinë e imazhit të riprodhuar. Kështu, filtri mesatar në disa raste siguron shtypjen e zhurmës, në të tjera shkakton shtypje të padëshiruar të sinjalit.

Merrni parasysh efektin e filtrave mesatarë dhe mesatarë (zbutës) me një dritare me pesë elementë në shkallët, dhëmbët sharrë, impuls dhe trekëndësh sinjale diskrete(Fig. 4.23). Nga këto diagrame, mund të shihet se filtri mesatar nuk ndikon në funksionet e hapit ose të dhëmbit të sharrës, gjë që zakonisht është një veti e dëshirueshme. Megjithatë, ky filtër shtyp sinjalet impulse kohëzgjatja e të cilave

është më pak se gjysma e gjerësisë së dritares. Filtri gjithashtu rrafshon pjesën e sipërme të funksionit trekëndor.

Aftësitë e analizës së veprimit filtri mesatar kufizuar. Mund të tregohet se mesatarja e produktit të një konstante dhe të një sekuence është:

Për më tepër,

Sidoqoftë, mediana e shumës së dy sekuencave arbitrare dhe nuk është e barabartë me shumën e medianave të tyre:

Kjo pabarazi mund të verifikohet duke përdorur si shembull sekuencat 80, 90, 100, 110, 120 dhe 80, 90, 100, 90, 80.

Janë të mundshme strategji të ndryshme për aplikimin e filtrit mesatar për të shtypur zhurmën. Njëri prej tyre rekomandon fillimin me një filtër mesatar, dritarja e të cilit mbulon tre elementë imazhi. Nëse dobësimi i sinjalit është i parëndësishëm, dritarja e filtrit zgjerohet në pesë elementë. Kjo bëhet derisa filtrimi mesatar të fillojë të bëjë më shumë dëm sesa mirë.

Një mundësi tjetër është të zbatohet filtrimi i sinjalit mesatar të kaskadës duke përdorur një fikse ose gjerësi e ndryshueshme dritare. Në përgjithësi

Për shembull, ato zona që mbeten të pandryshuara pas një trajtimi të vetëm me filtër nuk ndryshojnë pas përpunimit të përsëritur. Zonat ku kohëzgjatja sinjalet e pulsitështë më pak se gjysma e gjerësisë së dritares do të jetë subjekt i ndryshimit pas çdo cikli përpunimi.

Koncepti i një filtri mesatar mund të përgjithësohet lehtësisht në dy dimensione duke aplikuar një dritare 2D të formës së dëshiruar, si p.sh. drejtkëndëshe ose afër rrethores. Është e qartë se një filtër mesatar dydimensional me një dritare të madhësisë siguron shtypje më efektive të zhurmës sesa filtrat e njëpasnjëshëm horizontal dhe vertikal mesatar njëdimensional me një dritare të madhësisë. Përpunimi 2D, megjithatë, rezulton në zbutje më të rëndësishme të sinjalit.

Prezantimi

Sinjali dixhital i filtrimit mesatar

Përpunimi dixhital i sinjalit ka gjetur aplikim të gjerë në fusha të ndryshme të veprimtarisë: televizion, radar, komunikim, meteorologji, sizmologji, mjekësi, analizë të të folurit dhe telefoni, si dhe në përpunimin e imazheve dhe fushave të natyrave të ndryshme. Në disa fusha të aktivitetit ekonomik, si ato bankare, përpunimi i flukseve financiare dixhitale ka një rëndësi thelbësore.

Zhvillimi i teknologjisë kompjuterike dhe mikroprocesoreve çon në krijimin e pajisjeve gjithnjë e më të besueshme, me shpejtësi të lartë, miniaturë, me cilësi të lartë dhe të lira. Teknologjitë dixhitale janë bërë aq masive saqë ne i përdorim ato në jetën e përditshme, pa vënë re veçanërisht: telefon celular, CD player, kompjuter etj.

Gjatë kësaj pune, është e nevojshme të merren parasysh avantazhet dhe disavantazhet e filtrimit mesatar. Njihuni me parimet e punës filtra mesatare. Duke përdorur programin MatLab712 R2011a, tregoni funksionimin e tij duke përdorur një shembull.

Pjesa teorike e DSP

filtri mesatar

Të gjitha algoritme lineare filtrimi çon në zbutjen e ndryshimeve të mprehta në shkëlqimin e imazheve që janë përpunuar. Ky disavantazh, i cili është veçanërisht i rëndësishëm nëse konsumatori i informacionit është një person, nuk mund të përjashtohet në parim brenda kornizës së përpunimit linear. Çështja është se procedurat lineare janë optimale për një shpërndarje Gaussian të sinjaleve, zhurmës dhe të dhënave të vëzhguara. Imazhet reale, në mënyrë rigoroze, nuk i binden kësaj shpërndarjeje probabiliteti. Për më tepër, një nga arsyet kryesore për këtë është prania e kufijve të ndryshëm në imazhe, ndryshimet e shkëlqimit, kalimet nga një teksturë në tjetrën, etj. Duke iu nënshtruar një përshkrimi lokal Gaussian brenda zonave të kufizuara, shumë imazhe reale në këtë drejtim janë të paraqitura dobët si globalisht objektet Gaussian . Kjo është arsyeja e transferimit të dobët të kufijve në filtrimin linear.

Tipari i dytë i filtrimit linear është optimaliteti i tij, siç u përmend sapo, me natyrën Gaussian të zhurmës. Zakonisht, ky kusht plotësohet nga ndërhyrja e zhurmës në imazhe, prandaj, kur i shtypni ato, algoritmet lineare kanë performancë të lartë. Megjithatë, shpesh duhet të përballemi me imazhe të shtrembëruara nga lloje të tjera zhurmash. Një prej tyre është zhurma e impulsit. Kur ekspozohen ndaj tij, në imazh vërehen pika të bardha dhe (dhe) të zeza, të shpërndara rastësisht rreth kornizës. Përdorimi i filtrimit linear në këtë rast është joefikas - secili prej pulseve hyrëse (në thelb një funksion delta) jep një përgjigje në formën e një përgjigjeje impulsi filtri, dhe kombinimi i tyre kontribuon në përhapjen e zhurmës në të gjithë zonën e kornizës.

Një zgjidhje e suksesshme për këto probleme është përdorimi i filtrimit median, i propozuar nga J. Tukey në 1971 për analizën e proceseve ekonomike. Studimi më gjithëpërfshirës i filtrimit mesatar siç aplikohet në përpunimin e imazhit është paraqitur në koleksion. Vini re se filtrimi mesatar është një metodë përpunimi heuristik, algoritmi i tij nuk është zgjidhje matematikore problem i formuluar rreptësisht. Prandaj, studiuesit i kushtojnë vëmendje të madhe analizës së efikasitetit të përpunimit të imazhit bazuar në të dhe krahasimit me metodat e tjera.

Kur aplikoni filtrin mesatar (MF), çdo pikë e kornizës përpunohet në mënyrë sekuenciale, duke rezultuar në një sekuencë vlerësimesh. Konceptualisht, përpunimi në pika të ndryshme është i pavarur (në këtë mënyrë, MF është i ngjashëm me një filtër maskash), por për ta përshpejtuar atë, këshillohet që në çdo hap të përdoren algoritmikisht llogaritjet e kryera më parë.

Filtrimi mesatar përdor një dritare dy-dimensionale (hapje filtri), e cila zakonisht ka simetri qendrore, me qendrën e saj të vendosur në pikën aktuale të filtrimit. Në fig. 1.1 tregon dy shembuj të opsioneve më të përdorura të dritareve në formën e një kryqi dhe në formën e një katrori. Madhësitë e aperturës janë ndër parametrat që optimizohen në procesin e analizimit të efektivitetit të algoritmit. Mostrat e imazhit që janë brenda dritares formojnë mostrën e punës të hapit aktual.

Oriz. 1.1.

Natyra dy-dimensionale e dritares lejon filtrimin në thelb dy-dimensional, pasi të dhënat nga të dyja linjë aktuale dhe kolona, ​​dhe nga ato fqinje. Shënoni kampionin e punës si një grup njëdimensional; numri i elementeve të tij është i barabartë me madhësinë e dritares, dhe rregullimi i tyre është arbitrar. Zakonisht, përdoren dritare me një numër tek pikat (kjo sigurohet automatikisht kur hapja është në qendër simetrike dhe kur vetë pika qendrore hyn në përbërjen e saj). Nëse renditni sekuencën në rend rritës, atëherë mediana e saj do të jetë elementi i mostrës që zë një pozicion qendror në këtë sekuencë të renditur. Numri i marrë në këtë mënyrë është produkti i filtrimit për pikën aktuale të kornizës. Është e qartë se rezultati i një përpunimi të tillë nuk varet vërtet nga sekuenca në të cilën elementët e imazhit janë paraqitur në mostrën e punës. Le të prezantojmë shënimin zyrtar të procedurës së përshkruar në formën:

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

Konsideroni një shembull. Supozoni se zgjedhja ka formën: Y=(136,110,99,45,250,55,158,104,75), dhe elementi 250, i vendosur në qendër të tij, korrespondon me pikën aktuale të filtrimit (i 1, i 2) (Fig. 1.1) . Rëndësi e madhe shkëlqimi në këtë pikë të kornizës mund të jetë rezultat i ndërhyrjes së impulsit (pikës). Mostra e renditur në rritje ka formën (45,55,75,99,104,110,136,158,250), prandaj, në përputhje me procedurën (1.1), marrim x * =med(y 1 , y 2 ,…, y 9)=104 . Ne shohim se ndikimi i "fqinjëve" në rezultatin e filtrimit në pikën aktuale çoi në "injorimin" e shpërthimit të impulsit të shkëlqimit, i cili duhet të konsiderohet si një efekt filtrues. Nëse zhurma e impulsit nuk është pika, por mbulon një zonë lokale, atëherë ajo gjithashtu mund të shtypet. Kjo do të ndodhë nëse madhësia e kësaj zone lokale është më pak se gjysma e madhësisë së hapjes MF. Prandaj, për të shtypur zhurmën e impulsit që prek zonat lokale të imazhit, është e nevojshme të rritet madhësia e hapjes MF.

Nga (1.1) rrjedh se veprimi i MF konsiston në "injorimin" e vlerave ekstreme të mostrës hyrëse, si ato pozitive ashtu edhe ato negative. Ky parim i shtypjes së ndërhyrjeve mund të zbatohet gjithashtu për të reduktuar zhurmën në imazh. Megjithatë, një studim i shtypjes së zhurmës duke përdorur filtrimin mesatar tregon se efektiviteti i tij në zgjidhjen e këtij problemi është më i ulët se ai i filtrimit linear.

Rezultatet eksperimentale që ilustrojnë funksionimin e MF janë paraqitur në Fig. 1.2. Në eksperimente, është përdorur një MF, e cila ka një hapje katrore me një anë të barabartë me 3. Rreshti i majtë tregon imazhe të shtrembëruara nga zhurma dhe rreshti i djathtë tregon rezultatet e filtrimit të tyre mesatar. Në fig. 1.2 a dhe fig. 1.2.c tregon imazhin origjinal, të shtrembëruar zhurma e impulsit. Kur u mbivendos, u përdor një gjenerues numrash të rastësishëm me një ligj uniform të shpërndarjes gjatë intervalit, i cili gjeneron numra të rastësishëm të pavarur në të gjitha pikat e kornizës. Intensiteti i zhurmës u vendos nga probabiliteti p i shfaqjes së tij në çdo pikë. Nëse për numër i rastësishëm n i1i2 i formuar në pikën (i 1 , i 2), kushti n i1i2

Oriz. 1.2.

Oriz. 1.2. e tregon një imazh të shtrembëruar nga zhurma e pavarur Gaussian në një raport sinjal-zhurmë q 2 =-5 dB, dhe fig. 1.2.e - rezultati i filtrimit të tij nga filtri mesatar. Kushtet e këtij eksperimenti bëjnë të mundur krahasimin e rezultateve të tij me rezultatet e filtrimit linear të konsideruar më sipër. Tabela 1.1 ofron të dhëna për të mundësuar një krahasim të tillë. Për metoda të ndryshme filtrimi, kjo tabelë jep vlerat e gabimeve mesatare relative të katrorit q 2 dhe koeficientin e zbutjes së zhurmës r për rastin kur raporti sinjal-zhurmë në hyrjen e filtrit është -5 dB.

Tabela 1.1. Krahasimi i efikasitetit të shtypjes së zhurmës në filtrimin e imazhit, q 2 =-5 dB.

Filtri dydimensional Wiener ka efikasitetin më të lartë, duke reduktuar katrorin mesatar të gabimeve me një faktor prej 17. Filtri mesatar ka efikasitetin më të ulët midis të gjithë filtrave të konsideruar, ai korrespondon me r = 5.86. Sidoqoftë, ky numër tregon se edhe me ndihmën e tij është e mundur të zvogëlohet ndjeshëm niveli i zhurmës në imazh.

Sidoqoftë, siç u përmend më lart, dhe siç tregohet në Fig. 1.2.e, filtrimi mesatar zbut skajet e imazhit në një masë më të vogël se çdo filtrim linear. Mekanizmi i këtij fenomeni është shumë i thjeshtë dhe konsiston në sa vijon. Le të supozojmë se hapja e filtrit ndodhet afër kufirit që ndan zonat e lehta dhe të errëta të imazhit, ndërsa qendra e tij ndodhet në zonën e zonës së errët. Pastaj, ka shumë të ngjarë, kampioni i punës do të përmbajë një numër më të madh elementësh me vlera të ulëta ndriçimi, dhe, për rrjedhojë, mesatarja do të jetë ndër ato elemente të mostrës së punës që korrespondojnë me këtë zonë të figurës. Situata ndryshon nëse qendra e hapjes zhvendoset në një rajon me shkëlqim më të lartë. Por kjo do të thotë që MF është i ndjeshëm ndaj ndryshimeve në shkëlqim. Ekzistojnë një numër i madh interpretimesh të metodave të punës së MF, le të shqyrtojmë një tjetër, duke e përdorur atë si shembull gjatë përpunimit të imazheve të qelizave të gjakut - granulociteve. Përpara se të matej madhësia e një granulociti, imazhi i tij iu nënshtrua zbutjes me një filtër mesatar për të eliminuar granula që mund të ndikonin në rezultatin e matjes. Zakonisht, në procesin e filtrimit mesatar, vlerat e sinjalit në një lagje të caktuar të pikës ku llogaritet përgjigja e filtrit renditen në rend rritës ose zbritës në një seri variacionale. Përgjigja e filtrit përcaktohet si mesatare -- vlera e sinjalit të mesit (qendrës) të serisë së variacionit. Në vijim, kjo lagje do të referohet si dritarja e filtrit. Përveç kësaj, për thjeshtësi, ne do të shqyrtojmë një filtër me një dritare katrore me madhësi n×n.

Prandaj, kur llogaritet mediana në dritaren e filtrit, numri i operacioneve të të dhënave, si numri i operacioneve të renditjes, është n 2 . Kur përpunohet një imazh me madhësi M?N pika (pikselë), numri i operacioneve të të dhënave do të jetë i madh dhe do të jetë M?N?n 2 . Operacione të ndryshme kërkojnë kohë të ndryshme ekzekutimi. Duke skanuar në mënyrë sekuenciale një imazh, mund të reduktohen operacionet e renditjes që kërkojnë më shumë kohë. Kështu, gjatë kalimit nga pika o1 me dritaren w1 në pikën o2 me dritaren w2 në Fig. 1.3. është e mundur të përjashtohen pikat e kolonës 1 nga rreshti i variacionit të dritares w1, të renditen pikat e kolonës 6 dhe të bashkohen dy rreshtat e variacionit që rezultojnë në një. Një algoritëm i tillë funksionon më shpejt se renditja e pavarur në secilën dritare, por numri i përgjithshëm i manipulimeve të të dhënave (megjithëse më pak i mundimshëm), për shembull, të paktën renditja përmes të dhënave, mbetet i njëjtë, d.m.th., mjaft i madh. Prandaj, në filtrimin mesatar, imazhet zakonisht kufizohen në dritare 3×3 ose 5×5 dhe rrallë më të mëdha, gjë që është mjaft e mjaftueshme, për shembull, për të eliminuar zhurmën e impulsit.

Oriz. 1.3. Skanimi i një imazhi me një dritare të filtrit mesatar

Të njëjtat kufizime pranohen me forcë për operacione të ndryshme jolineare të përpunimit morfologjik që kryhen në hapësirën gjeometrike të figurës dhe që, ndryshe nga veprimet lineare, nuk mund të kryhen në hapësirën Fourier. Megjithatë, ka një sërë problemesh të përpunimit të imazhit që mund të zgjidhen në mënyrë efikase duke përdorur një filtër mesatar, por ato kërkojnë një dritare të madhe. Një nga këto detyra do të diskutohet më poshtë. Prandaj, një rritje e mundshme në shpejtësinë e filtrimit mesatar premton perspektiva të mëdha në problemet e përpunimit të imazhit.

Metodat mesatare të filtrimit janë mjaft të ndryshme. Ato mund të përmirësohen. Një përmirësim i tillë quhet filtrim mesatar adaptiv.

Filtrimi mesatar ka gjithashtu të metat e veta. Në veçanti, është vërtetuar eksperimentalisht se kjo metodë ka një efikasitet relativisht të ulët në filtrimin e të ashtuquajturës zhurmë luhatëse. Përveç kësaj, kur madhësia e maskës rritet, konturet e imazhit mjegullohen dhe, si rezultat, qartësia e imazhit zvogëlohet. Këto disavantazhe të metodës mund të reduktohen në minimum duke përdorur filtrimin mesatar me një madhësi maske dinamike (filtrim mesatar adaptiv). Parimi i llogaritjes së referencës qendrore për përpunimin lokal të imazhit nga një dritare rrëshqitëse mbetet i njëjtë. Kjo mesatare është nga një grup mostrash të renditura që bien në dritare (maskë), dhe madhësia e dritares rrëshqitëse (maskë) është dinamike dhe varet nga shkëlqimi i pikselëve fqinjë.

Le të prezantojmë koeficientin e pragut të devijimit të shkëlqimit S pragu = . Në forma (1.2):

Atëherë kriteri sipas të cilit është e nevojshme të rritet madhësia e maskës me një lexim qendror r do të duket kështu:

Bazuar në algoritmin e përshkruar, u zhvillua një program kompjuterik që konfirmoi në praktikë avantazhet e filtrimit mesatar adaptiv.

Nëse sfondi juaj inxhinierik është i ngjashëm me timin, atëherë me siguri dini shumë për llojet e ndryshme të filtrave linearë, detyra kryesore e të cilave është kalimi i një sinjali në një gamë frekuencash dhe vonesa e sinjaleve në intervale të tjera. Këta filtra, natyrisht, janë të domosdoshëm për shumë lloje zhurmash. Megjithatë, në botën reale të sistemeve të integruara, duhet pak kohë për të kuptuar se filtrat klasikë linearë janë të padobishëm kundër zhurmës së impulsit (zhurma e shpërthimit, zhurma e kokoshkave).

Zhurma e impulsit zakonisht lind nga pseudo ngjarje të rastësishme. Për shembull, një radio me dy drejtime mund të kalojë pranë pajisjes tuaj ose mund të ndodhë ndonjë shkarkim statik. Sa herë që ndodh kjo, sinjali i hyrjes mund të shtrembërohet përkohësisht.

Për shembull, si rezultat i konvertimit nga analog në dixhital, marrim seritë e mëposhtme të vlerave: 385, 389, 912, 388, 387. Vlera 912 supozohet se është anormale dhe duhet të refuzohet. Nëse përpiqeni të përdorni një filtër klasik linear, do të vini re se vlera 912 do të ketë një efekt të rëndësishëm në dalje. Zgjidhja më e mirë në këtë rast do të ishte përdorimi i një filtri mesatar.

Pavarësisht qartësisë së kësaj qasjeje, përvoja ime është se filtrat mesatarë janë jashtëzakonisht të rrallë në sistemet e integruara. Ndoshta kjo është për shkak të mungesës së njohurive për ekzistencën e tyre dhe vështirësisë me zbatimin. Shpresoj që postimi im t'i largojë deri diku këto pengesa.

Ideja pas filtrit mesatar është e thjeshtë. Ai zgjedh një mesatare nga një grup vlerash hyrëse dhe e nxjerr atë. Dhe zakonisht grupi ka një numër tek vlerash, kështu që nuk ka asnjë problem me zgjedhjen

Deri kohët e fundit, unë dallova tre klasa të filtrave mesatarë, të ndryshëm në numrin e vlerave të përdorura:

Filtro duke përdorur 3 vlera (filtri më i vogël i mundshëm),
- filtri duke përdorur 5, 7 ose 9 vlera (më të përdorurat),
- filtro duke përdorur 11 ose më shumë vlera.

Tani i përmbahem një klasifikimi më të thjeshtë:

Filtro duke përdorur 3 vlera,
- filtri duke përdorur më shumë se 3 vlera.

Filtri mesatar me 3

Ky është filtri më i vogël i mundshëm. Zbatohet lehtësisht me pak deklarata dhe për këtë arsye ka kod të vogël dhe të shpejtë.


uint16_t mes_of_3(uint16_t a, uint16_t b, uint16_t c)
{
uint16_t mes;

Nese nje<= b) && (a <= c)){
mes = (b<= c) ? b: c;
}
tjeter(
nëse (b<= a) && (b <= c)){
mes = (a<= c) ? a: c;
}
tjeter(
mes = (a<= b) ? a: b;
}
}

kthim në mes;
}

Filtri mesatar > 3

Për një madhësi filtri më të madhe se 3, ju sugjeroj të përdorni algoritmin e përshkruar nga Phil Ekstrom në botimin e Nëntorit 2000 të Programimit të Sistemeve të Embedded. Extrom përdor një listë të lidhur. E mira e kësaj qasjeje është se kur grupi është i renditur, heqja e vlerës së vjetër dhe shtimi i një të reje nuk e bën grupin të rrëmujshëm ndjeshëm. Prandaj, kjo qasje funksionon mirë me filtra të mëdhenj.

Mbani në mend, kishte disa gabime në kodin origjinal të publikuar, të cilat Ekstrom i rregulloi më vonë. Duke pasur parasysh se është e vështirë të gjesh diçka në embedded.com tani, vendosa të publikoj zbatimin tim të kodit të tij. Kodi u shkrua fillimisht në Dynamic C, por është transferuar në standardin C për këtë postim. Kodi supozohet se funksionon, por ju takon juve ta provoni plotësisht.


#define NULL 0
#define STOPPER 0 /* Më e vogël se çdo bazë */
#define MEDIAN_FILTER_SIZE 5

uint16_t MedianFilter (uint16_t e dhëna)
{

çift ​​strukture (
struct çift *pika; /* Treguesit që formojnë listën e lidhur sipas renditjes */
uint16_tvalue; /* Vlerat për të renditur */
};

/* Buferi i çifteve të ngjerësisë */
tampon çift strukture statike = (0);
/* Tregoni në buferin rrethor të të dhënave */
palë strukture statike *pika e të dhënave = buffer;
/* tapë zinxhiri */
palë struktura statike e vogël = (NULL, STOPPER);
/* Treguesi në kokë (më i madhi) i listës së lidhur.*/
çift ​​strukture statike i madh = (&small, 0);

/* Treguesi për pasardhësin e artikullit të të dhënave të zëvendësuar */
struct pair *pasardhës;
/* Treguesi përdoret për të skanuar listën e renditur */
struct pair *scan;
/* Vlera e mëparshme e skanimit */
struct pair *scanold;
/* Treguesi në mesatare */
çifti i strukturës *mediane;
uint16_t i;

nëse (datum == STOPPER)(
data = STOPPER + 1; /* Nuk lejohen ndalesa. */
}

Nëse ((++ pika e të dhënave - buffer) >= MEDIAN_FILTER_SIZE)(
pika e të dhënave = buffer; /* Rritja dhe mbështjellja e të dhënave në tregues.*/
}

pika e të dhënave->vlera = e dhëna; /* Kopjo në të dhënat e reja */
pasardhës = datapoint->point; /* Ruaje treguesin në pasardhësin e vlerës së vjetër */
mediana = /* Mesatarja fillimisht tek e para në zinxhir */
scanold = NULL; /* Scanold fillimisht null. */
skanim = /* Pikat drejt treguesit te data e parë (më e madhe) në zinxhir */

/* Trajto zinxhirin e artikullit të parë në zinxhir si rast i veçantë */
nëse (skanoni->pika == pika e të dhënave)(
scan->point = pasardhës;
}


scan = scan->point ; /* zinxhiri zvogëlohet */

/* Lak përmes zinxhirit, dalja normale e lakut përmes thyerjes. */
për (i = 0; i< MEDIAN_FILTER_SIZE; ++i){
/* Trajto artikullin me numër tek në zinxhir */
nëse (skanoni->pika == pika e të dhënave)(
scan->point = pasardhës; /* Zinxhironi të dhënat e vjetra.*/
}

Nëse (scan->value< datum){ /* If datum is larger than scanned value,*/
datapoint->point = scanold->point; /* Lidheni me zinxhir këtu. */
scanold->point = datapoint; /* Shënoje të lidhur me zinxhirë. */
data = STOPPER;
};

/* Hap treguesin mesatar të zinxhirit poshtë pas kryerjes së elementit me numër tek */
mediane = mediane->pikë; /* Treguesi mesatar i hapit. */
nëse (skanoni == &i vogël)(
pushim; /* Thyeje në fund të zinxhirit */
}
scanold=skanim; /* Ruaje këtë tregues dhe */
scan = scan->point; /* zinxhiri zvogëlohet */

/* Trajto artikullin me numër çift në zinxhir. */
nëse (skanoni->pika == pika e të dhënave)(
scan->point = pasardhës;
}

Nëse (scan->value< datum){
datapoint->point = scanold->point;
scanold->point = datapoint;
data = STOPPER;
}

Nëse (skanoni == &i vogël)(
pushim;
}

scanold=skanim;
scan = scan->point;
}

kthye median->vlera;
}

Për të përdorur këtë filtër, thjesht telefononi funksionin sa herë që merrni një vlerë të re hyrëse. Funksioni do të kthejë vlerën mesatare të vlerave të fundit të pranuara, numri i të cilave përcaktohet nga konstanta MEDIAN_FILTER_SIZE.

Ky algoritëm mund të përdorë një sasi të mjaftueshme RAM (në varësi të madhësisë së filtrit, natyrisht) sepse ruan vlerat e hyrjes dhe treguesit e strukturës. Megjithatë, nëse ky nuk është problem, atëherë algoritmi është vërtet i mirë për t'u përdorur sepse është dukshëm më i shpejtë se algoritmet e bazuara në renditje.

Filtrimi mesatar i bazuar në renditje

Në një version më të vjetër të këtij artikulli, për filtrat mesatarë të madhësisë 5, 7 ose 9, unë mbështeta qasjen e algoritmit të renditjes. Tani kam ndryshuar mendje. Sidoqoftë, nëse dëshironi t'i përdorni ato, unë ju jap kodin bazë:


nëse (ADC_Buffer_Full)(

Uint_fast16_t adc_copy;
uint_fast16_t filtruar_cnts;

/* Kopjoni të dhënat */
memcpy(adc_copy, ADC_Counts, sizeof(adc_copy));

/* Rendit atë */
shell_sort (adc_copy, MEDIAN_FILTER_SIZE);

/* Merrni vlerën e mesme */
filtruar_cnts = adc_kopje[(MEDIAN_FILTER_SIZE - 1U) / 2U];

/* Konvertoni në njësi inxhinierike */
...

konkluzioni

Përdorimi i filtrave mesatarë ka një kosto. Është e qartë se filtrat mesatarë shtojnë një vonesë në ndryshimin e vlerave hap pas hapi. Gjithashtu, filtrat mesatarë mund të mbishkruajnë plotësisht informacionin e frekuencës në sinjal. Sigurisht, nëse jeni të interesuar vetëm për vlera konstante, atëherë ky nuk është problem.

Me këto rezerva në mendje, unë ende rekomandoj fuqimisht që të përdorni filtra mesatarë në dizajnet tuaja.

Filtri mesatar zbaton një procedurë jolineare të reduktimit të zhurmës. Filtri mesatar është një dritare W që rrëshqet përgjatë fushës së imazhit, duke mbuluar një numër tek të mostrave. Numri qendror zëvendësohet nga medianaja e të gjithë elementëve të imazhit që bien brenda dritares. Medianaja e një sekuence diskrete x1, x2, ..., xL për L tek është elementi i tij i tillë që të ketë (L ? 1)/2 elementë më pak ose të barabartë me të dhe (L ? 1)/2 elementë më të mëdhenj se ose të barabartë në madhësi. Me fjalë të tjera, mediana është anëtari mesatar i serisë që rezulton nga renditja e sekuencës origjinale.

Për shembull, med(20, 10, 3, 7, 7) = 7.

Një filtër mesatar dydimensional me një dritare W përcaktohet si më poshtë:

Filtri mesatar përdoret për të shtypur zhurmën shtesë dhe impuls në imazh. Një tipar karakteristik i filtrit mesatar është ruajtja e dallimeve të ndriçimit (kontureve). Filtri mesatar është veçanërisht efektiv në rastin e zhurmës së impulsit. Efekti i filtrave zbutës dhe mesatarë me një dritare me tre elementë në gradientin e ndriçimit të zhurmshëm me zhurmë shtesë për një sinjal njëdimensional është paraqitur në Fig.

Sa i përket zhurmës së impulsit, filtri mesatar me një dritare 3 x 3 shtyp plotësisht thumbat e vetme në një sfond uniform, si dhe grupet me dy, tre dhe katër thumba impulse. Në përgjithësi, për të shtypur një grup zhurmash impulse, madhësia e dritares duhet të jetë të paktën dyfishi i madhësisë së grupit të zhurmës.

Ndër filtrat mesatarë me një dritare 3x3, më të zakonshmet janë këto:

Koordinatat e maskave të paraqitura nënkuptojnë sa herë pikselin përkatës përfshihet në sekuencën e renditur të përshkruar më sipër.

Një nga mënyrat efektive për të eliminuar zhurmën e impulsit në një imazh është përdorimi i një filtri mesatar.

Për çdo piksel në një mjedis (dritare) të tij, kërkohet vlera mesatare dhe i caktohet këtij piksel. Përkufizimi i vlerës mesatare: nëse një grup pikselësh renditet sipas vlerës së tyre, mediana do të jetë elementi i mesëm i këtij grupi. Për këtë arsye, madhësia e dritares duhet të jetë e çuditshme që të ekzistojë ky element i mesëm.

Mesatarja mund të përcaktohet gjithashtu me formulën:

ku W është grupi i pikselëve midis të cilëve kërkohet mesatarja dhe fi janë vlerat e shkëlqimit të këtyre pikselave.

Për imazhet me ngjyra, përdoret një filtër mesatar vektorial (VMF):

ku Fi janë vlerat e pikselit në hapësirën e ngjyrave 3D dhe d është një metrikë arbitrare (p.sh. Euklidiane).

Sidoqoftë, në formën e tij të pastër, filtri mesatar turbullon detaje të vogla, vlera e të cilave është më e vogël se madhësia e dritares për kërkimin e mesatares, kështu që praktikisht nuk përdoret në praktikë.

Të gjitha algoritmet lineare të filtrimit çojnë në zbutjen e ndryshimeve të mprehta në shkëlqimin e imazheve që janë përpunuar. Ky disavantazh, i cili është veçanërisht i rëndësishëm nëse konsumatori i informacionit është një person, nuk mund të përjashtohet në parim brenda kornizës së përpunimit linear. Çështja është se procedurat lineare janë optimale për një shpërndarje Gaussian të sinjaleve, zhurmës dhe të dhënave të vëzhguara. Imazhet reale, në mënyrë rigoroze, nuk i binden kësaj shpërndarjeje probabiliteti. Për më tepër, një nga arsyet kryesore për këtë është prania e kufijve të ndryshëm në imazhe, ndryshimet e shkëlqimit, kalimet nga një teksturë në tjetrën, etj. Duke iu nënshtruar një përshkrimi lokal Gaussian brenda zonave të kufizuara, shumë imazhe reale në këtë drejtim janë të paraqitura dobët si globalisht objektet Gaussian . Kjo është arsyeja e transferimit të dobët të kufijve në filtrimin linear.

Tipari i dytë i filtrimit linear është optimaliteti i tij, siç u përmend sapo, me natyrën Gaussian të zhurmës. Zakonisht, ky kusht plotësohet nga ndërhyrja e zhurmës në imazhe, prandaj, kur i shtypni ato, algoritmet lineare kanë performancë të lartë. Megjithatë, shpesh duhet të përballemi me imazhe të shtrembëruara nga lloje të tjera zhurmash. Një prej tyre është zhurma e impulsit. Kur ekspozohen ndaj tij, në imazh vërehen pika të bardha dhe (dhe) të zeza, të shpërndara rastësisht rreth kornizës. Përdorimi i filtrimit linear në këtë rast është joefikas - secili prej pulseve hyrëse (në thelb një funksion delta) jep një përgjigje në formën e një përgjigjeje impulsi filtri, dhe kombinimi i tyre kontribuon në përhapjen e zhurmës në të gjithë zonën e kornizës.

Një zgjidhje e suksesshme për këto probleme është përdorimi i filtrimit median, i propozuar nga J. Tukey në 1971 për analizën e proceseve ekonomike. Studimi më gjithëpërfshirës i filtrimit mesatar siç aplikohet në përpunimin e imazhit është paraqitur në koleksion. Vini re se filtrimi mesatar është një metodë përpunimi heuristik; algoritmi i tij nuk është një zgjidhje matematikore e një problemi të formuluar në mënyrë strikte. Prandaj, studiuesit i kushtojnë vëmendje të madhe analizës së efikasitetit të përpunimit të imazhit bazuar në të dhe krahasimit me metodat e tjera.

Kur aplikoni filtrin mesatar (MF), çdo pikë e kornizës përpunohet në mënyrë sekuenciale, duke rezultuar në një sekuencë vlerësimesh. Konceptualisht, përpunimi në pika të ndryshme është i pavarur (në këtë mënyrë, MF është i ngjashëm me një filtër maskash), por për ta përshpejtuar atë, këshillohet që në çdo hap të përdoren algoritmikisht llogaritjet e kryera më parë.

Filtrimi mesatar përdor një dritare dy-dimensionale (hapje filtri), e cila zakonisht ka simetri qendrore, me qendrën e saj të vendosur në pikën aktuale të filtrimit. Në fig. 3.10 tregon dy shembuj të opsioneve më të përdorura të dritareve në formën e një kryqi dhe në formën e një katrori. Madhësitë e aperturës janë ndër parametrat që optimizohen në procesin e analizimit të efektivitetit të algoritmit. Mostrat e imazhit që janë brenda dritares formojnë mostrën e punës të hapit aktual.

Oriz. 3.10. Shembuj të dritareve për filtrim mesatar

Natyra dy-dimensionale e dritares lejon filtrimin në thelb dy-dimensional, pasi të dhënat nga rreshti dhe kolona aktuale, si dhe nga ato fqinje, përdoren për të formuar një vlerësim. Shënoni kampionin e punës si një grup njëdimensional ; numri i elementeve të tij është i barabartë me madhësinë e dritares, dhe rregullimi i tyre është arbitrar. Zakonisht, përdoren dritare me një numër tek pikat (kjo sigurohet automatikisht kur hapja është në qendër simetrike dhe kur vetë pika qendrore hyn në përbërjen e saj). Nëse renditni sekuencën në rend rritës, atëherë mediana e saj do të jetë elementi i mostrës që zë një pozicion qendror në këtë sekuencë të renditur. Numri i marrë në këtë mënyrë është produkti i filtrimit për pikën aktuale të kornizës. Është e qartë se rezultati i një përpunimi të tillë nuk varet vërtet nga sekuenca në të cilën elementët e imazhit janë paraqitur në mostrën e punës. Le të prezantojmë shënimin zyrtar të procedurës së përshkruar në formën:

. (3.48)

Konsideroni një shembull. Le të supozojmë se përzgjedhja ka formën: , dhe elementi 250, i vendosur në qendër të tij, i përgjigjet pikës aktuale të filtrimit (Fig. 3.10). Një vlerë e madhe ndriçimi në këtë pikë të kornizës mund të jetë rezultat i ndërhyrjes së impulsit (pikës). Në këtë rast, mostra e renditur në rritje ka formën (45,55,75,99,104,110,136,158,250), prandaj, në përputhje me procedurën (3.48), marrim . Ne shohim se ndikimi i "fqinjëve" në rezultatin e filtrimit në pikën aktuale çoi në "injorimin" e shpërthimit të impulsit të shkëlqimit, i cili duhet të konsiderohet si një efekt filtrues. Nëse zhurma e impulsit nuk është pika, por mbulon një zonë lokale, atëherë ajo gjithashtu mund të shtypet. Kjo do të ndodhë nëse madhësia e kësaj zone lokale është më pak se gjysma e madhësisë së hapjes MF. Prandaj, për të shtypur zhurmën e impulsit që prek zonat lokale të imazhit, është e nevojshme të rritet madhësia e hapjes MF.

Nga (3.48) rrjedh se veprimi i MF konsiston në "injorimin" e vlerave ekstreme të mostrës hyrëse - si ato pozitive ashtu edhe ato negative. Ky parim i shtypjes së ndërhyrjeve mund të zbatohet gjithashtu për të reduktuar zhurmën në imazh. Megjithatë, një studim i shtypjes së zhurmës duke përdorur filtrimin mesatar tregon se efektiviteti i tij në zgjidhjen e këtij problemi është më i ulët se ai i filtrimit linear.

Rezultatet eksperimentale që ilustrojnë funksionimin e MF janë paraqitur në Fig. 3.11. Në eksperimente u përdor një MF, i cili ka një hapje katrore me

ana e barabartë me 3. Rreshti i majtë tregon imazhet e shtrembëruara nga zhurma, rreshti i djathtë tregon rezultatet e filtrimit mesatar të tyre. Në fig. 3.11.a dhe fig. 3.11.c tregon imazhin origjinal të shtrembëruar nga zhurma e impulsit. Kur u mbivendos, u përdor një gjenerues numrash të rastësishëm me një ligj uniform të shpërndarjes gjatë intervalit, i cili gjeneron numra të rastësishëm të pavarur në të gjitha pikat e kornizës. Intensiteti i zhurmës u vendos nga probabiliteti i shfaqjes së tij në çdo pikë. Nëse plotësohej kushti për numrin e rastësishëm të formuar në pikën , atëherë shkëlqimi i figurës në këtë pikë zëvendësohej me numrin 255 që korrespondon me shkëlqimin maksimal (niveli i bardhë). Në fig. 3.11.a veprimi i zhurmës së impulsit të shtrembëruar 5% (=0.05), dhe në fig. 3.11.c - 10% e elementeve të imazhit. Rezultatet e përpunimit tregojnë shtypjen pothuajse të plotë të ndërhyrjes në rastin e parë dhe zbutjen e saj të konsiderueshme në rastin e dytë.

Oriz. 3.11. Shembuj të filtrimit mesatar

Oriz. 3.11.d tregon një imazh të shtrembëruar nga zhurma e pavarur Gaussian në një raport sinjal-zhurmë prej dB, dhe fig. 3.11.e - rezultati i filtrimit të tij nga filtri mesatar. Kushtet e këtij eksperimenti bëjnë të mundur krahasimin e rezultateve të tij me rezultatet e filtrimit linear të konsideruar më sipër. Tabela 3.1 ofron të dhëna për të mundësuar një krahasim të tillë. Për metoda të ndryshme filtrimi, kjo tabelë jep vlerat e gabimeve mesatare relative të katrorit dhe faktorin e reduktimit të zhurmës për rastin kur raporti sinjal-zhurmë në hyrjen e filtrit është -5 dB.

Tabela 3.1. Krahasimi i efikasitetit të shtypjes së zhurmës në filtrimin e imazhit, dB

filtër maskë me optimale TE TYRE

maskë filtër me uniformë TE TYRE

dydimensionale të përsëritura filtër

Filtri 2D Wiener

Filtri dydimensional Wiener ka efikasitetin më të lartë, duke reduktuar katrorin mesatar të gabimeve me një faktor prej 17. Filtri mesatar ka efikasitetin më të ulët midis të gjithë filtrave të konsideruar, ai korrespondon me =5.86. Sidoqoftë, ky numër tregon se edhe me ndihmën e tij është e mundur të zvogëlohet ndjeshëm niveli i zhurmës në imazh.

Sidoqoftë, siç u përmend më lart, dhe siç tregohet në Fig. 3.11.e, filtrimi mesatar zbut skajet e imazhit në një masë më të vogël se çdo filtrim linear. Mekanizmi i këtij fenomeni është shumë i thjeshtë dhe konsiston në sa vijon. Le të supozojmë se hapja e filtrit ndodhet afër kufirit që ndan zonat e lehta dhe të errëta të imazhit, ndërsa qendra e tij ndodhet në zonën e zonës së errët. Pastaj, ka shumë të ngjarë, kampioni i punës do të përmbajë një numër më të madh elementësh me vlera të ulëta ndriçimi, dhe, për rrjedhojë, mesatarja do të jetë ndër ato elemente të mostrës së punës që korrespondojnë me këtë zonë të figurës. Situata ndryshon nëse qendra e hapjes zhvendoset në një rajon me shkëlqim më të lartë. Por kjo do të thotë që MF është i ndjeshëm ndaj ndryshimeve në shkëlqim.

Artikujt kryesorë të lidhur