Documente Academic
Documente Profesional
Documente Cultură
2017
Copyright © 2017 , Cosmin-Andrei Dumitru
În ultimii ani, societatea și-a indreptat mai mult atenția și a incercat din ce in ce mai mult să crească
siguranța oamenilor, atât in trafic cât și in viața de zi cu zi.
Siguranța în trafic este un aspect foarte important, în special în țările dezvoltate sau în curs de
dezvoltare. Creșterea constantă a numărului de mașini de pe străzi, atrage cu sine și creșterea
riscului de accidente de pe șosele.
Conform unei statistici a Uniunii Europene, in anul 2016 accidentele fatale in care sunt implicați
pietoni constituie 21% din totalul accidentelor, procentul scăzând cu 35% in ultimii 10 ani. Aceasta
scădere poate proveni și din echiparea mașinilor cu sisteme de frânare automată, introduse de
companii precum: Lexus, Volvo, Mercedes-Bez, BMW.
Din acest punct de vedere, posibilitatea de detecție a pietonilor duce la scăderea procentului de
pietoni implicați in accidentele rutiere.
Detecția pietonilor cu o cameră termală are avantajul de a se putea face indiferent de condițiile
meteo sau dacă este zi sau noapte.
Pe lângă posibilitatea de aplicare a detecției pietonilor în industria auto, aceasta poate fi folosită și
pentru siguranța personală, camere de supraveghere, dar și pentru aplicații militare, cum ar fi
aplicațiile pentru detecția oamenilor ce vor să traverseze ilegal granițele.
Obiectivul acestei lucrări este acela de a realiza o metodă pentru detecția pietonilor în imagini din
spectrul infraroșu. O să enumăr câteva proprietăți pe care ar trebui sa le aibă sistemul:
• Ar trebui să fie foarte fiabil în ceea ce privește detecția falsă; ar trebui să aibă o
rată mare de detecție corectă și o rată mică de erori;
• Ar trebui să fie fiabil in ceea ce privește mediul înconjurător. Sistemul trebuie să
funcționeze atât în oraș cât și în afara lui;
• Ar trebui să fie fiabil indiferent de condițiile meteo. Ar trebui sa poată sa opereze
sub diferite condiții meteo, de exemplu pe timp de ploaie sau ninsoare.
Sistemul dezvoltat, care satisface proprietățile de mai sus, este împărțit în două mari componente:
• O componentă în care se face prelucrarea imaginii de antrenare
• O componentă ce conține clasificatorul SVM.
În primul capitol al acestei lucrări sunt prezentate în ordine următoarele subiecte: spectrul
electromagnetic, radiația infraroșie și imaginile termale. Am început cu acest capitol pentru a avea
cunoștințele de bază pentru care am ales folosirea imaginilor termale și nu a celor clasice, vizuale.
În cel de-al doilea capitol am prezentat metode de analiză si prelucrare a imaginilor. Aceste metode
au fost aplicate imaginii de antrenare pentru a scoate caracteristicile acesteia, caracteristici ce vor
fi folosite de clasificator.
În cel de-al treilea capitol am prezentat metoda de clasificare și anume SVM ( mașină cu vectori
suport) .
În capitolul patru voi prezenta algoritmul după care funcționează aplicația software. Vor fi expuse
diagramele logice ale principalelor funcții.
În capitolul cinci voi prezenta implementarea software a metodei. Va fi prezentat si explicat codul
sursă al aplicației.
Capitolul șase este capitolul în care se prezintă rezultatele algoritmului. Inițial se va prezenta baza
de date cu care am lucrat, după aceea indicii de performanță, iar in final rezultatele algoritmului.
1.Imagini în spectrul înfroșu
Radiația infraroșie a fost inițial descoperită in anul 1800 de Sir Frederick William Herschel (1738-
1822), care este de asemenea faimos pentru descoperirea planetei Uranus. Radiația infraroșie este
o parte a spectrului electromagnetic și își are numele din cuvântul latin infra care înseamnă sub.
Banda de radiație infraroșie se afla sub banda de radiație vizibilă pentru roșu, având lungimea de
undă mai mare.
Banda de lungime de undă în infraroșu este largă și este de obicei împărțită în diferite benzi bazate
pe proprietățile lor: infraroșu apropiat cu abreviația NIR (Near-Infrared) si lungimea de unda
0.78–3 µm. infraroșu de unda medie cu abreviația MIR (Mid-infrared) si lungimea de unda 3–50
µm, infraroșu îndepărtat cu abreviația FIR (Far-infrared) si lungimea de unda 50–1000 µm;
Când interacționează cu materia, radiația electromagnetica este absorbita (α) , transmisă (τ) si/sau
reflectată (ρ). Legea radiației toate este: 1=α+ ρ+ τ, unde α,ρ, τ ϵ[0,1]. În plus, energia termala a
unui obiect poate fi convertită in energie electromagnetică, numită radiație termală. Toate obiectele
cu temperaturi mai mari de 0 Kelvin emit radiație termală într-o măsură diferită, depinzând de
temperatură si material.
Imaginile termale sunt afișări vizuale ale radiației termale emise, reflectate si transmise in mediu.
Când sunt prezentate unui operator, hărțile de culoare sunt des folosite ca hărți a intensității valorii
pixelilor, pentru a vizualiza detaliile mai clar. Exemple de imagini termale cu diferite hărți de
culoare se vad in imaginile următoare.
Datorită surselor multiple de radiație termală, imagistica termică poate fi destul de dificilă, in
funcție de proprietățile obiectului si de mediul înconjurător. Cantitatea de radiații emise de obiect
depinde de emisivitatea sa, așa cum este explicat în secțiunea anterioară. În plus, radiații termice
de la alte obiecte sunt reflectate pe suprafața obiectului. Prin urmare, este important să știți reflexia
obiectului. Cantitatea de radiație care ajunge la detector este afectată de atmosferă. Unele radiații
sunt transmise, unele sunt absorbite, iar altele sunt chiar emise din atmosferă. În plus, camera însăși
emite termic radiații în timpul funcționării. Pentru a măsura radiațiile termice și astfel
temperaturile cât mai exacte, toate aceste efecte trebuie luate în considerare. La distanțele scurte,
efectele atmosferice pot fi ignorate. Dar pentru distanțe mai mari este esențial să se țină cont de
efectele atmosferice.
Materialele au proprietăți diferite în spectrul termal față de cel vizibil. Unele materiale care reflectă
lumina sau sunt transparente în spectrul vizual, nu sunt în spectrul termal, un exemplu ar fi sticla.
Sticla este transparentă în spectrul vizibil în timp ce în spectrul termal este opacă. Din această
cauza, lentilele camerei termale nu sunt făcute din sticlă ci din germaniu, un material opac în
spectrul vizibil, dar transparent în spectrul termal.
Figură 1-0-5 Exemplu camera termală cu lentilă din germaniu
Camerele termale sunt răcite sau nu. Camerele care sunt răcite pot livra sute de imagini pe secundă
la rezoluție HD și au o sensivitate la temperatură de 20mK. Imaginile sunt stocate ca imagini cu
16 biți pe pixel, pentru a permite o plajă mare de temperaturi, de exemplu 0-382.2 K cu precizie
de 10mK. Camerele nerăcite au de obicei mai mult zgomot, dar sunt mai mici, mai silențioase și
mai ieftine.
1.2.3 Avantaje si limitări
Din punct de vedere al măsurării temperaturilor, imagistica termică este avantajoasă comparativ
cu metodele bazate pe puncte, deoarece temperaturile pot fi comparate pe o suprafață mare. Cu
toate acestea, nu este considerată ca fiind la fel de exactă ca metodele de contact.
În comparație cu camerele vizuale, camerele termale sunt favorabile atât timp ce există o diferență
de temperatură legată de obiectul sau fenomenul pe care doriți să îl detectați. De exemplu,
incendii, oameni, animale, temperaturile corporale crescute, sau diferențe în capacitatea de transfer
de căldură în materiale. Când vine vorba de aplicații, camerele termale sunt deosebit de avantajoase
față de camerele vizuale în aplicații în aer liber. Camerele termale pot produce o imagine fără
distorsiuni sau cu puține distorsiuni în întuneric și / sau în condiții meteorologice dificile (de
exemplu ceață / ploaie / zăpadă). Acest lucru se datorează din nou faptului că o cameră termală
este sensibilă pentru radiațiile emise, chiar și de la obiecte relativ reci, spre deosebire de o cameră
vizuală care măsoară radiația reflectată care depinde de iluminare.
Din imagistică termică nu este considerat posibil sa se facă detecție de persoane, un lucru care
poate fi atât un avantaj cât și o limitare. Înseamnă că imagistica termică poate fi folosită in aplicații
în care se păstrează intimitatea persoanelor. În cazul în care se dorește identificarea persoanelor,
camera termală ar trebui combinată cu o camera vizuală.
Există multe aplicații bazate pe analiza de imagini termale. Cum rezoluțiile imaginilor termale
cresc, iar prețul camerelor scade, in viitor vor exista si mai multe. Voi prezenta mai jos câteva
exemple de utilizare a imagisticii termale:
Agricultura: Monitorizarea animalelor domestice si sălbatice, detectarea focului în câmp deschis.
Siguranța automobilelor: Detecția si urmărirea pietonilor, a autovehiculelor, utilizând o camera
termala montată in partea din față a mașinii.
Inspecția clădirilor: Pierderile de căldură din clădiri pot fi urmărite folosind camera termală. Există
aplicații care creează o hartă 3D termală automat pentru vizualizarea pierderilor de căldură.
Industrie: Detecția diferitelor materiale, poziționarea lor și pentru testarea materialelor.
Medicină: Detecția tumorilor, inflamațiilor.
Aplicații militare: urmărirea țintelor, detecția focurilor de armă, atenționarea în cazul apropierii
rachetelor, detecția minelor antipersonal, detecția lunetiștilor.
Securitate: Căutarea persoanelor fără a ține cont de luminozitate, detecția, urmărirea si analizarea
comportamentului persoanelor suspecte.
Figură 1-0-6 Agricultură - detecție mastită Figură 1-0-7 Siguranța automobilelor. Cameră amplasată
în locomotiva unui tren
Figură 1-0-8 Inspecția clădirilor. Detecția căldurii din podea
Figură 1-0-9 Medical. Detecția temperaturii persoanelor
pentru detecția febrei
Figură 1-0-10 Militar. Detecția minelor Figură 1-0-12 Militar. Detecția oamenilor care traversează
ilegal granițe
În acest capitol voi prezenta metodele prin care se face prelucrarea imaginilor din spectrul termal.
Așa cum îi spune si numele, această metodă de filtrare respectă principiul superpoziției: Fie date
doua imagini f1(x,y) și f2(x,y), și două numere reale α și β, operatorul liniar O are următoarea
proprietate:
O [α · f1(x, y) + β · f2(x, y)] = α · O[f1(x, y)] + β · O[f2(x, y)] (2.2)
Operația de filtrare liniară calculează o valoare noua a unui pixel al imaginii in poziția (m,n) ca o
combinație liniară a unor valori din imaginea originală după formula:
𝑔(𝑚, 𝑛) = ∑𝑘,𝑙 ∑∈𝑊 𝑤𝑘𝑙 ∗ 𝑓(𝑚 − 𝑘, 𝑛 − 𝑙) (2.3)
Unde f(x,y) e imaginea originală, iar g(x,y) este imaginea filtrată, W este structura de puncte ce
definește vecinătatea pixelului (m,n), 𝑤𝑘𝑙 sunt valori constant ce reprezintă coeficienții filtrului.
Filtrul este definit de vecinătatea W ¸si de coeficienții 𝑤𝑘𝑙 . Un filtru poate fi specificat de o matrice
V , care poartă numele de mască de convoluție sau mască de filtrare, care este caracterizată de
formă, valorile coeficienților și de origine.
Operația de filtrare liniară poate fi descrisă astfel: se suprapune masca de filtrare peste fiecare pixel
al imaginii originale, astfel încât originea măștii să coincidă cu pixelul considerat, apoi se
calculează toate produsele între coeficienții măștii și valorile pixelilor peste care se suprapun acești
coeficienți, iar suma acestor produse reprezintă noua valoare a pixelului considerat. Această
tehnică poartă numele de tehnica ferestrei glisante. Operația descrisă reprezintă de fapt o
convoluție bidimensională.
2.2.1 Filtre de netezire
Filtrele de netezire sunt echivalentele bidimensionale ale filtrelor trece-jos (FTJ), ¸si la fel ca
acestea, sunt folosite în general pentru eliminarea zgomotului, care se presupune că este de bandă
largă. Informația conținută într-o imagine, în general, se regăsește în componentele de joasă
frecvență, și deci este justificată o filtrare trece-jos pentru reducerea puterii zgomotului. Zgomotul
din imagine se presupune că este aditiv și pur aleator, adică se consideră următoarele ipoteze
simplificatoare:
• g(i, j) = f(i, j) + n(i, j) (zgomotul n este aditiv), (2.4)
• n este un semnal staționar (comportamentul său statistic nu depinde de coordonatele i și j ale
pixelului),
• n = 0 (media zgomotului este zero),
• daca zgomotul are dispersia σn, atunci:
σ2 , 𝑝𝑒𝑛𝑡𝑟𝑢 𝑖1 = 𝑖2 ș𝑖 𝑗1 = 𝑗2
𝑛(𝑖1 , 𝑗1 ) ∗ 𝑛(𝑖2 , 𝑗2 ) = { 𝑛 (2.5)
0, î𝑛 𝑟𝑒𝑠𝑡
Unde 𝑤𝑘𝑙 ≥ 0
2.2.2 Filtrul de mediere
Filtrul de mediere este cel mai simplu filtru de netezire. Caracteristica acestui tip de filtru este
faptul că toți coeficienții măștii de filtrare sunt egali.
În algoritm am folosit o masca de filtrare cu valoarea 1/25
Atunci când zgomotul ce apare pe o imagine nu are distribuție normală și nu este aditiv, apare
limitarea filtrelor liniare. Dacă o a imagine afectată de un zgomot impulsiv ar fi filtrată liniar,
rezultatul ar fi o accentuare a punctelor de zgomot și coruperea punctelor cu valori corecte din
jurul acestora. Pentru a filtra o astfel de imagine, s-au introdus metode de filtrare neliniare, ce nu
respectă principul superpoziției. Una din clasele importante este cea a filtrelor bazate pe ordonare.
la capetele șirului de valori (deci într-o zonă bine definită), permițând astfel identificarea și
eliminarea acestora.
Filtrele de ordine sunt operatori locali: filtrul este definit de o fereastră (mască), care
selectează din imaginea de prelucrat un număr de vecini ai pixelului curent (se respectă
deci același model de prelucrare al ferestrei glisante, întâlnit ¸si la filtrările liniare în
domeniul spațial). Valorile selectate de fereastra de filtrare sunt apoi ordonate crescător;
dacă valorile selectate de o fereastră cu n poziții sunt {x1, x2, ..., xn}, atunci același set
de valori, ordonate crescător este {x(1), x(2), ..., x(n)}. Valorile x(i) se numesc statistici de
ordine de ordinul i și au proprietatea
x(1) ≤x(2) ≤ ... ≤ x(n) (2.8)
În mod evident statistica de ordinul 1, x(1), este valoarea minimă, iar statistica de ordinul
n, x(n), este valoarea maximă.
Ieșirea filtrului de ordine de ordin k este statistica de ordinul k, cu k ∈ [1; n]:
rankk{x1, x2, ..., xn} = x(k) (2.9)
În acest fel, ieșirea unui filtru de ordine este una dintre valorile selectate de fereastra de
filtrare, ¸si deci nu se creează la ieșire valori noi (așa cum se întâmplă la filtrarea liniară);
acesta este un avantaj atât în ceea ce prive¸ste p˘astrarea valorilor originale din imagine,
cât ¸si din punctul de vedere al simplificării calculelor (nu mai sunt necesare operații cu
numere reale, ce trebuie apoi rotunjite sau trunchiate la numere naturale).
Filtrele de ordine nu sunt liniare din cauza operației de ordonare (ce nu respectă principiul
superpoziției); în general putem scrie:
rankk{x1 + y1, x2 + y2, ..., xn + yn} ≠ rankk{x1, x2, ..., xn} + rankk{y1, y2, ..., yn} (2.10)
Din punct de vedere statistic, interesează funcțiile de distribuție ale ieșirii filtrului (funcție
de densitate de probabilitate, funcție de repartiție) atunci când funcțiile de distribuție
ale valorilor de intrare sunt presupuse cunoscute. Modelul folosit în general se bazează pe
ipoteza de independentă ¸si distribuție identica a valorilor selectate de fereastra filtrului
(ceea ce conduce, implicit, la ipoteza că valorile pixelilor imaginii sunt variabile aleatoare
independente, identic distribuite1). Dacă notăm cu f(x) ¸si F(x) funcțiile de densitate
de probabilitate ¸si respectiv repartiție a valorilor pixelilor din imaginea ce se filtrează cu
un filtru de ordine de ordin k cu fereastră de n elemente, atunci ceea ce interesează este
funcția de densitate de probabilitate a ieșirii filtrului de ordine, fk(x).
Fie t o valoare oarecare din domeniul de variație al variabilelor aleatoare: atunci probabilitatea
evenimentului ca ieșirea filtrului de ordine să se găsească în intervalul [t; t + dt]
este fk(t)dt. Evenimentul de interes este deci
adică
t ≤x(k) ≤t + dt (2.13)
Statisticile de ordine sunt obținute prin ordonarea crescătoare a valorilor xi, ordonare
crescătoare care poate fi interpretata ca o permutare oarecare a indicilor valorilor ({1, 2, ..., n}
−→ {i1, i2, ..., in}). În acest caz, evenimentul de interes exprimat de (5.6) este realizat
prin mai multe evenimente elementare de tipul:
xi1, xi2, ..., xik−1 ≤t ≤xik ≤t + dt ≤xik+1, ..., xin (2.14)
Probabilitatea evenimentului elementar din (5.7) este dată de probabilitatea ca k − 1
valori să fie mai mici decât t (deci Fk-1(t)), probabilitatea ca n − k valori să fie mai mari
ca t + dt (deci (1 − F(t))n-k ) și probabilitatea ca o valoare să fie cuprinsă în intervalul
[t; t + dt] (deci f(t)dt), adică:
𝑘−1
Numărul total de evenimente de tipul (5.7) este 𝑛𝐶𝑛−1 (n moduri de alege o valoare din
𝑘−1
cele n, la fiecare dintre aceste alegeri corespunzând 𝑛𝐶𝑛−1 moduri de a alege din cele n −1
valori rămase k − 1 valori care să fie mai mici ca t). Atunci:
𝑘−1 𝑘−1 ( )(
Pr(t x(k) ≤t + dt) = 𝑛𝐶𝑛−1 𝐹 𝑡 1 − 𝐹(𝑡))𝑛−𝑘 𝑓 (𝑡)𝑑𝑡 (2.16)
𝑘−1 𝑘−1
𝑓𝑘 (𝑥 ) = 𝑛𝐶𝑛−1 𝐹 (𝑥)(1 − 𝐹(𝑥 ))𝑛−𝑘 𝑓(𝑥) (2.17)
În [12] sunt prezentate diferite utilizări ale funcției de densitate de probabilitate a ieșirii
filtrelor de ordine, mai ales pentru determinarea comportării asimptotice (n −→ ∞) a
filtrelor.
Proprietățile deterministe ale filtrelor de ordine se referă la comportamentul acestora
în zonele tipice ale unei imagini: porțiuni netede ¸si contururi. Filtrele de ordine nu
afectează contururile (zonele de pantă abruptă) ¸si păstrează valoarea zonelor uniforme.
Aceste comportări au fost extinse la investigarea clasei mai generale de semnale rădăcină
- semnale ce nu sunt modificate prin filtrare.
Orice secvență {xi} monotonă (crescătoare sau descrescătoare) este un semnal rădăcină
pentru filtrele de ordine. În plus, filtrele de ordine comută cu orice funcție monotonă
g: rankk (g(xi)) = g(rankk(xi))
Pe lângă metodele analitice de construire a semnalelor rădăcină, în practică, semnalele
rădăcină se obțin prin filtrarea repetată a unui semnal oarecare, până la obținerea invarianței. Să
considerăm spre exemplu secvența unidimensională x = {0, 1, 1, 3, 1, 3, 2, 3, 3, 2,
1, 1} pe care o vom filtra cu o fereastră de filtrare de dimensiune 3, centrată, cu un filtru de
ordine de ordin 2. După prima filtrare se obține secvența x1 = {0, 1, 1, 1, 3, 2, 3, 3, 3, 2, 1, 1, 0},
iar după a doua filtrare se obține secvența x2 = {0, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 0}. Această
secvență este invariantă la filtrările următoare și deci este un semnal rădăcină
Filtrul median este un filtru de ordine a cărui ieșire este statistica de ordine de ordin
central a setului de valori selectate de fereastra de filtrare.
Ieșirea filtrului median este valoarea din centrul secvenței ordonate. În cazul in care ferestrele de
filtrare sunt de dimensiune pară, valoarea din centrul secvenței ordonate nu există și va fi definită
ca media aritmetică a valorilor din vecinătate.
Efectele sunt evidente pentru filtrarea zgomotului de tip impulsiv (sare și piper). Datorită faptului
ca punctele de zgomot sunt 0 respectiv 255, acestea se vor afla la începutul si sfârșitul șirului de
valori, iar acestea nu vor afecta ieșirea filtrului median.
Figură 2-0-5 Histogramă imagine inițială
Erodarea morfologică a unei mulțimi A prin elementul structurat B este definită ca mulțimea
punctelor cu care se poate translata elementul structurant astfel încât acesta să fie inclus în
mulțimea de prelucrat A:
𝐴 ⊖ 𝐵 = {x|𝐵𝑥 ⊆ 𝐴} (2.19)
Erodarea morfologica a mulțimii A este transformata Hit or Miss a mulțimii cu un element
structurant B=B1 (B2= ∅):
𝐴 ⊖ 𝐵 = {x|(𝐵1 )𝑥 ⊆ 𝐴} ∩ {x|(∅)𝑥 ⊆ 𝐴𝐶 } = {x|𝐵𝑥 ⊆ 𝐴} (2.20)
Elementul structurat poate avea orice formă. Cele mai comune forme sunt:
-element structurant disc discret V4
𝐴 ⊕ 𝐵 = {𝐵𝑥 ∩ 𝐴 ≠ ∅} (2.21)
Scopul clasificării este acela de a determina care dintre regiunile de interes oferite ca exemplu de
rutina inițială de detecție conține pietoni si care nu. Clasificarea constă in următorii pași:
1. Generarea de exemple de antrenare reprezentative si validarea exemplelor
pozitive ( ce conțin pietoni)
2. Extragerea caracteristicilor din exemplu
3. Antrenarea clasificatorului cu caracteristicile de antrenare
4. Evaluarea performanței de generalizare a clasificatorului pe exemplele de
validare
3.1 Clasificatorul
Clasificatorul este algoritmul de învățare care este învățat cum sa separe între două clase de intrări:
caracteristici din exemple pozitive si caracteristici din exemple negative. Clasificatorul efectuează
de asemenea propagări: atribuirea unei etichete de clasă ( pozitiv sau negativ) într-un exemplu
nevăzut.
În această lucrare, clasificarea este întotdeauna o problemă de două clase. Clasificatorul învață să
separe între două clase de obiecte, pietoni sau nu. Deci, rezultatul clasificării este întotdeauna
interpretat ca o valoarea binară. Pieton sau nu.
3.2 SVM
3.2.1 Ce este SVM ?
Într-o varietate de situații am dori să atribui un obiect concret in una sau mai multe categorii sau
clase în funcție de caracteristici. De exemplu, se dau caracteristicile unei pagini dintr-un document
și dorim să putem sa determinăm dintr-un set de tipuri de pagini, care tip de pagină este dintr-un
anumit tip. Această problemă se numește problemă de clasificare. SVM sau Mașină cu Vectori
Suport este o metodă supervizată de învățare si clasificare, capabilă sa analizeze date și să
recunoască forme până formarea automată a unui set de reguli pentru a clasifica date similare cu
datele întâlnite precedent.
Prin învățare supervizată ne referim la sarcina de a deduce setul de reguli mai sus menționat din
date deja etichetate. Alte tipuri de algoritmi sunt capabile sa grupeze sau sa clasifice diferite obiecte
in clase in funcție de similaritate fără a ști dinainte clasele cărora aparțin. În cazul SVM trebuie să
furnizăm date deja etichetate pentru toate clasele în care am dori sa clasificăm datele.
Dacă se presupune ca setul de puncte sunt liniar separabile, atunci putem trasa o linie sau un
hiperplan trecând prin punctele care se află cel mai aproape de hiperplanul separator, aceștia fiind
vectorii suport. Principala țintă a SVM-ului este sa maximizeze distanța dintre cele doua
hiperplane.
Fie cele două hiperplane H1 și H2. Geometric putem vedea distanța de la H1 la hiperplan este
1 2
egală cu ||𝑤|| și similar la H2, deci distanța dintre H1 și H2 este egală cu ||𝑤|| . Cum am spus mai
sus, principalul obiectiv este sa maximizeze distanța, așa că va trebui sa fie minimizată ||w||.
1
Minimizând ||w|| este echivalent cu minimizarea 2 ∙ ||𝑤||2 dar putem folosi optimizarea
programării quadratice (Quadratic Programming optimization QP).
De acolo avem:
1
min ∙ ||𝑤||2 (3.3)
(𝑤,𝑏) 2
𝑦𝑖 (𝑥𝑖 ∙ 𝑤 + 𝑏) − 1 ≥ 0 ∀ 𝑖 (3.4)
O metodă intuitivă din spatele SVM poate fi ușor explicata in figura de mai jos, unde avem trei
planuri diferite. H3 nu separă complet două seturi de puncte. H1 separa punctele, dar nu satisface
restricția de margine maximă, iar H2 separa ambele seturi de date și maximizează distanța de la
hiperplan la vectorii suport.
Când avem acest tip de date, sunt necesare linii de separare mai complexe. Metoda prin care SVM
rezolva asta este prin ajutorul nucleelor. Deseori caracteristicile neseparabile liniar devin liniar
separabile atunci când sunt mapate într-un spațiu mai mare dimensional.
Este o proprietate interesantă care ne permite sa folosim metoda de clasificare explicată mai sus
fără mare efort, singurul lucru cerut fiind sa transformăm datele într-un mod anume.
Exemplu:
Φ: ℜ2 → ℜ3
(𝑥1 , 𝑥2 ) → (𝑧1 , 𝑧2 , 𝑧3 ) = (𝑥12 , √2𝑥1 𝑥2 , 𝑥22 (3.5)
Este clar că prin maparea 3D a datelor, acestea devin separabile prin hiperplane.
Deși există mai multe tipuri de nuclee, voi exemplifica nucleul gaussian sau Radial Basis kerner
(RBF).
Expresia care definește RBF este:
||𝑥−𝑥 , ||22
𝐾 (𝑥, 𝑥 , ) = Φ(𝑥)𝑇 Φ(𝑥 , ) = exp(− ) (3.6)
2𝜎 2
Unde σ este un parametru liber, x si x’ sunt vectori caracteristici, iar ||x- x’||22 este distanta
euclidiană la pătrat.
Putem găsi formula scrisă:
𝐾 (𝑥, 𝑥 , ) = exp(−𝛾||𝑥 − 𝑥 , ||22 ) (3.7)
1
Unde 𝛾 = 2𝜎
Figură 3-0-4 Efectul parametrului de cost. În figura de mai jos, se arată efectul
parametrului C, dacă s-ar penaliza foarte
mult o instanță cu clasificare greșită, SVM o sa încerce să încadreze perfect fiecare instanță, dând
ca plan de separare hiperplanul H1 ce va avea o limită de clasificare mai slabă. Dacă, în schimb,
s-ar micșora costul pentru clasificarea greșită, am obține hiperplanul H2, care este mai rezonabil.
1
Relația dintre γ si σ este: 𝛾 = 2𝜎. Așadar, când σ e mare ( γ mic) avem că funcția de similitudine
variază ușor, invers σ mic ( γ mare) implică o variație mai pronunțată in funcția de similitudine.
Aceste lucruri pot fi văzute reprezentând forma pe care o ia funcția gaussiană când variază σ.
În acest capitol voi prezenta algoritmul pe baza căruia am făcut implementarea. Algoritmul este
împărțit în trei părți. Prima parte este partea de antrenare a clasificatorului SVM, a doua partea
este cea de clasificare a datelor, iar cea dea treia parte este partea de post procesare, parte ce
implică procesarea imaginilor pentru reducerea zgomotului.
În continuare, voi prezenta diagramele logice ale algoritmului pentru funcțiile
EXTRACTFEATURES.m, mp.m si pentru scriptul main.m.
După reformarea imaginii, se intră în partea de post procesare, acolo unde se caută petele sau
componentele conectate din noua imagine creată după clasificare, se aplică un filtru care are ca
scop reducerea zgomotului și păstrarea în imagine doar a componentelor conectate între ele cu
dimensiunea mai mare decât un prag dat.
După cum se poate vedea în imaginea de mai sus, după clasificare avem zgomot în imagine, iar
pentru a elimina zgomotul, algoritmul are o parte de post procesare.
Se afișează imaginea inițială, cea încărcată după intrarea in bucla for, iar pe aceasta se afișează
dreptunghiuri roșii în pozițiile unde sunt componentele conectate care au trecut de prag.
Figură 4-0-7 Exemplu imagine în care sunt detectați pietonii
Funcția mp.m este funcția ce aplică închiderea morfologică. În această funcție se inițiază
caracteristicile elementului structurant, adică forma și dimensiunea. După aceea se va construi
elementul structurant. Elementul structurant este folosit pentru aplicarea funcției de dilatare.
După aplicarea operației de dilatare, se face reconstrucția morfologică. Funcția va returna un
obiect ce va conține imaginea asupra căreia s-a aplicat închiderea morfologică și numărul de
iterații.
5.Implementarea software
• imread.m – este o funcție care citește o imagine dintr-un fișier specificat; tipul de
date fiind uint8.
• im2double.m – este o funcție care convertește imaginea din tipul de date uint 8 în
double.
• imfilter.m – este o funcție cu doi parametrii de intrare, care face filtrarea primului
element cu cel de-al doilea. În această lucrare este folosit ca un filtru de mediere,
imaginea fiind filtrata cu o masca 3x3 de 1/25
• svmtrain.m – funcție care antrenează clasificatorul SVM cu date luate din doua
grupuri, unul este reprezentat de o matrice a cărei linii corespund caracteristicilor,
iar rândurile corespund observațiilor. Cel de-al doilea grup este format dintr-un
vector coloană ce conține etichetele știute pentru antrenare.
Prin apelarea funcției uigerdit, se va deschide o căsuță de dialog în care utilizatorul poate naviga
pentru a găsi directorul unde se află imaginea de test. Adresa directorului se va salva ca string în
variabila ”folder”.
În următoarea secvență de cod se încarcă imaginea in variabila ”I1”, folosind imread și se va converti din
tipul de date uint8 în tipul de date double.
TRUTH = imread(strcat(folder,'\groundtruth.bmp'));
TRUTH(find(TRUTH>0))=1;image(mat2gray(TRUTH)),
TRUTH = TRUTH(:);
În această secvență de cod se încarcă imaginea ground truth in variabila ”TRUTH”. Funcția
strcat concatenează string-ul ce este salvat in variabila ”folder”. Imaginea ground truth a fost
redenumită in prealabil ca ”roundtruth.bmp”.
După încărcare, se verifică dacă încărcarea s-a făcut corect, iar după matricea inițială în care a
fost încărcată imaginea este transformată într-un vector coloană, ce conține toate punctele din
matrice.
FEATURE = EXTRACTFEATURES(I);
Se apelează funcția EXTRACTFEATURES, funcție ce returnează sub formă de matrice cu 2
coloane si un număr de rânduri egal cu numărul total de pixeli din imaginea ”I”.
perf=classperf(TRUTH);
Se calculează performanța pentru imaginea ground truth. Apelarea funcției classperf creează si
inițiază un obiect gol pentru performanța clasificării, ce va fi actualizat la apelarea funcției după
clasificarea datelor.
svmStruct = svmtrain(FEATURE,TRUTH,'ShowPlot',true);
În structura de mai sus, se apelează funcția svmtrain, funcție ce antrenează clasificatorul SVM.
Funcția este apelată cu parametrii FEATURE,TRUTH,'ShowPlot',true unde FEATURE este
matricea în care au fost încărcate caracteristicile imaginii de test, TRUTH este vectorul coloană
transformat din imaginea groud truth. 'ShowPlot',true este o valoare logică ce specifică dacă
trebuie afișată sau nu reprezentarea grafică a datelor grupate. În mod implicit acest ultim
parametru este fals, deci dacă nu este apelat, nu va fi afișată reprezentarea grafică.
svmStruct va conține informații despre clasificatorul antrenat, cum ar fi vectorii suport, ce vor fi
folosiți mai departe în funcția svmclassify pentru clasificarea datelor.
list = dir(strcat(folder,'\*.bmp'));
for L = 2:length(list)
Se creează o buclă de mărimea numarului de imagini cu extensia .bmp. Această buclă este
folosită pentru afișarea finală a fiecărei imagini, una după cealaltă.
I = imread(strcat(folder,'\',list(L).name)); I = im2double(I);
Se citește prima imagine din lista creată mai sus și se convertește din tipul de dată uint8 în tipul
de date double.
FEATURE1 = EXTRACTFEATURES(I);
newmap = svmclassify1(svmStruct,FEATURE1)
În secvența de mai sus, se apelează funcția svmclassify, funcție ce realizează clasificarea datelor
folosind vectorii suport ce sunt returnați de funcția svmtrain. Funcția se apelează cu parametrul
svmStruct, parametru ce este returnat de funcția svmtrain si care conține informații despre
vectorii suport. Funcția returnează nivelele de clasa prevăzut sub forma unui vector coloană.
newmap1 = reshape(newmap,size(I));
În secvența de mai sus, se remodelează variabila newmap, adică răspunsul funcției svmclassify,
variabila nouă newmap1 va avea aceeași dimensiune ca imaginea încărcată inițial.
cc = bwconncomp(newmap1);
stats = regionprops(cc, 'BoundingBox','Area')
idx = find([stats.Area] > 30);
În blocul de mai sus, în prima secvență se apelează funcția bwconncomp, funcție ce găsește
petele și componentele conectate din imagine, această funcție returnează numărul de obiecte din
imagine.
Funcția regionprops este apelată cu parametrii cc, 'BoundingBox','Area', cc este parametrul
returnat de bwconncomp. Funcția returnează fereastra de încadrare și aria petelor sau
componentelor conectate.
Ultima componentă a blocului prezentat mai sus, idx = find([stats.Area] > 30); încarcă
in variabila ”idx” rezultatul unei filtrări cu pragul 30, filtrare ce are ca efect înlăturarea
zgomotului și păstrarea in imagini doar a pietonilor.
BW = ismember(labelmatrix(cc), idx);
figure, imshow(I);
for lp = 1:length(idx)
hold on
rectangle('Position',[stats(idx(lp)).BoundingBox(1),stats(idx(lp)).BoundingBo
x(2),stats(idx(lp)).BoundingBox(3),stats(idx(lp)).BoundingBox(4)],
'EdgeColor','r','LineWidth',2 )
end
waitforbuttonpress;
În prima secvență de cod, este aplicat filtrul calculat în secvența prezentată mai sus, astfel
imaginea încărcată in BW ar trebui să fie o imagine fără zgomot proieminent.
Secvența figure, imshow(I); se afișează imaginea inițială. Urmează o buclă for de lungimea
numărului de componente conectate din imagine, iar secvența
rectangle('Position',[stats(idx(lp)).BoundingBox(1),stats(idx(lp)).BoundingBo
x(2),stats(idx(lp)).BoundingBox(3),stats(idx(lp)).BoundingBox(4)],
'EdgeColor','r','LineWidth',2 ) aplică asupra imaginii originale dreptunghiuri roșii acolo
unde sunt găsite componentele conectate care au trecut de filtrare, deci acolo unde sunt pietoni.
Se închide bucla for si se apelează funcția waitforbuttonpress, funcție ce oprește rularea
programului până la apăsarea unui buton al mouse-ului sau a unui buton de pe tastatură. Am
folosit această funcție pentru a putea analiza imaginile fără a fi constrâns de timpul de afișare a
imaginii.
În continuare, voi prezenta codul din funcțiile nou create, si anume EXTRACTFEATURES.m și
mp.m. Voi începe cu funcția EXTRACTFEATURES.m, funcție folosită pentru extragerea
caracteristicilor din imagini.
h = ones(3,3) / 25;
I = imfilter(I,h);
În această secvență, se inițializează o matrice h de dimensiune 3x3 cu valoarea 1/25 pentru toate
valorile. Variabila h va fi folosită ca mască pentru filtrarea de mediere.
În I = imfilter(I,h); se aplică un filtru de mediere asupra imaginii I, cu masca h inițializată
mai sus
F1 = I(:);
MPC = mp(I,10);
F2 = MPC(:,:,10);F2 = F2(:);
F3 = MPC(:,:,7) ;F3 = F3(:);
F4 = MPC(:,:,6) ;F4 = F4(:);
MF = medfilt2(MPC(:,:,10),[5 5]);
F2 = MF(:);
În secvența de mai sus se aplică filtrul median cu masca [5 5], ceea ce înseamnă că valoarea
unui pixel va fi calculată ca media celorlalte 5 puncte din vecinătate. F5 va fi încărcată cu
valoarea returnată de funcția medfilt2 dar concatenată într-un vector coloană de dimensiunea
numărului total de pixeli din imagine.
Se încarcă variabila FEATURE cu valorile celor doi vectori coloană, primul vector fiind cel în
care s-a calculat intensitatea, iar cel de-al doilea vectorul ce reiese după aplicarea închiderii
morfologice și filtrului median.
În cele din urmă voi prezenta scriptul mp.m, script ce realizează închiderea morfologică.
shape = 'disk';
se_size = 5;
Se atribuie variabilei ”shape” forma ”disk”, ceea ce reprezintă forma pe care o va avea elementul
structurant ce va fi folosit în calcularea închiderii morfologice. Variabila ”se_size” este încărcată
cu valoarea 5, valoare ce reprezintă dimensiunea elementului structurant.
se_ctr = 0;
for lp = 1:n
se_ctr = se_ctr + 1;
se = strel(shape,se_ctr * se_size);
Id = imdilate(I, se);
Icbr = imreconstruct(imcomplement(Id), imcomplement(I));
Icbr = imcomplement(Icbr);
MPC(:,:,lp) = Icbr; % Record lp'th Closing Profile
end
În secvența de cod prezentată mai sus, se inițializează variabila ”se_ctr” cu valoarea 0. Această
variabilă va fi folosită ca un element de control asupra dimensiunii elementului structurant.
În bucla for, care va avea un număr de iterații specificat de utilizator, în cazul acestei lucrări am
folosit 10, deci va avea 10 iterații, la fiecare trecere prin buclă se mărește dimensiunea
elementului structurant. Inițial aceasta are dimensiunea 5, se_ctr = 1, iterația a doua va avea
dimensiunea 10, se_ctr= 2 și așa mai departe.
Variabila ”se” va fi variabila în care se va stoca elementul structurant care este rezultatul apelării
funcției ”strel”.
Funcția imdilate este cea care calculează dilatarea asupra imaginii inițiale ”I” cu elementul
structurant ”se” rezultat din comanda de mai sus.
În variabila ”Icbr” inițial se va stoca reconstrucția imaginii. Această reconstrucție se calculează
folosind complementul imaginii dilatate ”Id” și complementul imaginii inițiale ”I”. Pentru ca
”Icbr” să aibă forma imaginii inițiale, acesta se încarcă cu complementul său, deoarece operația
de complementare a fost folosită pentru a îl afla.
În cele din urmă, MPC va fi încărcat cu valoarea Icbr (care este o imagine asupra căreia s-a
aplicat închiderea morfologică) și cu numărul iterațiilor făcute in bucla for.
6. Rezultatele experimentale
Baza de date de imagini este formată din imagini termale, capturate într-o intersecție din
campusul Universității Statului Ohio, în condiții meteo diferite.
”Detaliile senzorului cu care au fost capturate imaginile:
- senzorul termal Raytheon 300D
- lentile de 75mm
-cameră montată pe acoperișul unei clădiri de 9 etaje
Detaliile datelor:
-formatul imaginilor= tonuri de gri în 8 biți
-mărimea imaginii = 360 x 240 pixeli
-rata de eșantionare = neuniformă, mai mică de 30 Hz” [7]
Pentru a putea compara rezultatele, am rulat aplicația pentru diferite tipuri de nuclee: liniar, rbf.
Principalii indici de performanță sunt:
• Numărul de pietoni clasificați ca pietoni/numărul total de pietoni- rata de succes
(RS)
• Numărul de pietoni clasificați greșit/ numărul total de pietoni – rata de eroare
(RE)
• Timpul de rulare (TR)
• Scorul F - 2 (RS) (RE) /RS+ recall
• Numărul de pietoni clasificați corect/ numărul de pietoni clasificați corect +
numărul de obiecte clasificate greșit ca pietoni – recall
6.3 Rezultatele algoritmului
Tabel cu indici de performanță pentru cele două tipuri de nuclee pentru primul set de
33 de imagini
Tipul de sigma RS RE recall TR F
nucleu
Liniar - 0,967 0,33 0,988 57s 0,978
RFB 0.1 0,84 0,15 1 92s 0,91
RFB 0.25 0,87 0,12 0,48 91s 0,61
Așa cum reiese din tabelul de mai sus, cea mai bună metodă rezultată pentru acest algoritm este
metoda în care se folosește nucleul de tip liniar. Folosind acest tip de nucleu, am ajuns la cea mai
mare rată de succes, cel mai mic timp de rulare al algoritmului și cel mai mare scor F.
Tipul de sigma Numărul
nucleu vectorilor
de suport
Liniar - 1663
RFB 0.1 1187
RFB 0.25 1008
În tabelul de mai sus a fost prezentat numărul de vectori de suport folosiți pentru clasificarea
unei imagini cu cele doua tipuri de nuclee. Și în acest caz, cea mai bună metodă este cea în care
se folosește metoda liniară, aceasta având cel mai mare număr de vectori suport.
În figura de mai sus este prezentat un exemplu în care un pieton nu este detectat. Se poate vedea
ca pietonul poartă o umbrelă, iar haina are o temperatura scăzută. Aria în care este prelevată
temperatura corpului este foarte mică – față și mâini.
În imaginile de mai sus au fost prezentate erorile de clasificare si de detecție pe care le-am
întâlnit pe parcursul testelor făcute.
Concluzii
Această lucrare prezintă o metodă de detecție a pietonilor în imagini din spectrul infraroșu și
performantele clasificatorului SVM folosit pentru această detecție.7
În această metodă am folosit extragerea de caracteristici din imagini pentru învățare și
clasificare. Pentru extragerea caracteristicilor am folosit filtre si operații pentru prelucrarea
imaginilor.
După clasificare, are loc un proces de post procesare, proces ce are ca efect eliminarea
zgomotului din imagini.
În urma testelor făcute, procentajul de clasificare corecta a pietonilor este in jur de 96%, pentru
nucleul liniar, 84% respectiv 87% pentru rfb. Imaginile folosite prin care am ajuns la acest
rezultat sunt imagini complexe, cu un fundal complex, ce conține elemente cu temperatură
asemănătoare cu cea a persoanelor. În aceste condiții, rezultatul obținut este un rezultat bun, în
special pentru clasificarea cu nucleu liniar.
În concluzie, metoda de detecție prezentată în această lucrare este o metodă de detecție fiabilă
pentru setul de imagini din baza de date, dar și pentru alte imagini.
Anexa 1.
Main.m
clc
clear all
close all
%% Antrenare SVM
% Incarcare date de antrenare;
folder = uigetdir;
I = imread(strcat(folder,'\testimage.bmp'));I=im2double(I);
TRUTH = imread(strcat(folder,'\groundtruth.bmp'));
TRUTH(find(TRUTH>0))=1;imshow(mat2gray(TRUTH));
TRUTH = TRUTH(:);
% Extragere caracteristici
FEATURE = EXTRACTFEATURES(I);
% Antrenare SVM
%
figure;
svmStruct = svmtrain(FEATURE,TRUTH,'ShowPlot',1);
%% Testare SVM
list = dir(strcat(folder,'\*.bmp'));
for L = 2:length(list) % buclă pentru încărcare imagini
I = imread(strcat(folder,'\',list(L).name)); I =
im2double(I);
% Extragere caracteristici
FEATURE = EXTRACTFEATURES(I);
% Clasificare SVM
newmap = svmclassify1(svmStruct,FEATURE) ;
%clasificare date noi
% reformare imagine
newmap1 = reshape(newmap,size(I));
% Post procesare
% gasire doar compomente conectate/pete
cc = bwconncomp(newmap1);
stats = regionprops(cc, 'BoundingBox','Area');
idx = find([stats.Area] > 30); % filtrare cu prag, pentru eliminare zgomot
BW = ismember(labelmatrix(cc), idx); % aplicare filtru
figure, imshow(I); % afisare imagine initiala
for lp = 1:length(idx) % afisare dreptunghiuri peste pietoni
hold on
rectangle('Position',[stats(idx(lp)).BoundingBox(1),stats(idx(lp)).BoundingBo
x(2),stats(idx(lp)).BoundingBox(3),stats(idx(lp)).BoundingBox(4)],
'EdgeColor','r','LineWidth',2 )
end
waitforbuttonpress;
end
EXTRACTFEATURES.m
function FEATURE = EXTRACTFEATURES(I)
% filtru de mediere
h = ones(3,3) / 25;
I = imfilter(I,h);
% Calculare caracteristici;
F1 = I(:);
% Calculare inchidere morfologică
MPC = mp(I,10);
mp.m
function MPC = mp(I,n)
[1.] M. Bishop Pattern Recognition and Machine Learning Springer New York 2006.
[2]. C. Dai Y. Zheng and X. Li "Layered Representation for Pedestrian Detection and Tracking in
Infrared Imagery" Proc. IEEE Conf. Comp.Vision Patt. Rec. - Workshops 25-25 June 2005 San Diego
USA ISBN 0-7695- 2372-2
[3]. N. Dalal and B. Triggs "Histograms of Oriented Gradients for Human Detection" Proc.
Conf. Comp.Vision and Patt. Rec. (CPVR'05) June 20-26 2005 San Diego USA vol. 1 pp. 886-893.
[4]. J. Davis and M. Keck. "A two-stage approach to person detection in thermal imagery"
Proc. 7-th IEEE Workshops on Application of Computer Vision 2005 Volume 1 5-7 Jan. 2005 Breckenridge
CO pp. 364-369.
[5]. D.M. Gavrila "A Bayesian Exemplar-Based Approach to Hierarchical Shape Matching"
IEEE Trans. Patt. Anal. Mach. Intell. vol.29 nr. 8 Aug. 2007 pp. 1408-1421.
[6]. R. C. González and R. E. Woods Digital Image Processing (3rd Edition) Prentice Hall 2008.
[7]. Z. Li Q. Wu J. Zhang and G. Geers "SKRWM based descriptor for pedestrian detection in
thermal images" Proc. 13th IEEE Int. Workshop on Multimedia Sign. Proc. (MMSP) 17-19 Oct. 2011
pp. 1-6.
[8]. V. E. Neagoe and A. Ropot "Concurrent Self-Organizing Maps – A Powerful Artificial Neural
Tool for Biometric Technology" in Harbour Protection Through Data Fusion Technologies NATO
Science for Peace and Security Series-C: Environm. Security pp. 291- 298 Springer 2009.
[9]. V. E. Neagoe C.T. Tudoran and M. Neghinǎ "A Neural Network Approach to Pedestrian
Detection" Proc. 13th WSEAS International Conference on Computers July 23-25 2009 Rhodes
Island Greece pp. 374-379 ISBN: 978-960- 474-099- 4.
[10]. V. E. Neagoe A. Ropot and A. Mugioiu "Real Time Face Recognition Using Decision Fusion of
Neural Classifiers in the Visible and Thermal Infrared Spectrum" Proc. 2007 IEEE Int. Conf.Adv.
Video & Sign. Surveill. (AVSS 2007) 5-7 Sept. 2007 London ISBN:978-1- 4244-1696- 7.
[11]. F. Xu X. Liu and K. Fujimura "Pedestrian detection and tracking with night vision" IEEE
Trans Intell. Transp. Systems vol. 6 March 2005 pp. 63-71.
[12]. M. Yasuno S. Ryousuke N. Yasuda and M. Aoki "Pedestrian Detection and Tracking in Far
Infrared Images" Proc. IEEE Conf.Intell. Transp. Systems 13-15 Sept. 2005 Vienna pp. 182-187.
[13] A. Baumberg and D. Hogg. Learning _exible models from image sequences. In ECCV (1),
[14] H. Bay, A. Ess, T. Tuytelaars, and L. Van Gool. Speeded-up robust features (SURF).
Computer Vision and Image Understanding
[15] Serban-Vasile Carata, Victor-Emil Neagoe, "A Pulse-Coupled Neural Network approach for
image segmentation and its pattern recognition application", Communications (COMM) 2016
International Conference
[17] IEEE OTCBVS WS Series Bench; J. Davis and M. Keck, "A two-stage approach to person detection in
thermal imagery," In Proc. Workshop on Applications of Computer Vision, January 2005
[18] http://old.protectiamuncii.ro/ro/good_practice/campul-elecromagnetic.html
[20] https://en.wikipedia.org/wiki/Electromagnetic_spectrum