V17 Proiect De Diploma Draghici Ciprian [628560]
UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ
PROIECT DE DIPLOMĂ
Conduc ător științific : Asist. dr. i ng. Cătălina NEGHINĂ
Îndrumător : Asist. dr. i ng. Cătălina NEGHINĂ
Absolvent: [anonimizat] : Ingineria Sistemelor Multimedia
– Sibiu, 2016 –
UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ
Monitorizarea traficului rutier
Conducător științific : Asist. dr. ing. Cătălina NEGHINĂ
Îndrumător : Asist. dr. ing. Cătălina NEGHINĂ
Absolvent: [anonimizat] : Ingineria Sistemelor Multimedia
Cuprins
Introducere ………………………….. ………………………….. ………………………….. ………………………….. . 3
Capitolul 1 ………………………….. ………………………….. ………………………….. ………………………….. .. 6
Spații de culoare în p rocesarea imaginilor ………………………….. ………………………….. …………….. 6
1.1 Spațiul RGB ………………………….. ………………………….. ………………………….. …………….. 7
1.2 Conversia unei imagini color într -o imagine grayscale ………………………….. …………… 8
1.3 Spațiul HSV ………………………….. ………………………….. ………………………….. …………….. 9
Capitolul 2 ………………………….. ………………………….. ………………………….. ………………………….. 10
Segmentarea imaginilor, extragerea contururilor și operații morfologice …………………………. 10
2.1 Metode de segmentare ………………………….. ………………………….. …………………………. 10
2.1.1 Thresholding sau determinarea praguril or de segmentare (Prăguire) ……………. 11
2.1.2 Metoda de segmentare Otsu ………………………….. ………………………….. ………….. 13
2.2. Extragerea contururilor ………………………….. ………………………….. ………………………….. . 18
2.3 Operații morfologice ………………………….. ………………………….. ………………………….. .. 19
2.3.1 Erodarea ………………………….. ………………………….. ………………………….. …………. 20
2.3.2 Dilatarea ………………………….. ………………………….. ………………………….. …………. 21
2.3.3 Deschidere a imaginilor ………………………….. ………………………….. …………………. 22
2.3.4 Închiderea imaginilor ………………………….. ………………………….. ……………………. 24
Capitolul 3 ………………………….. ………………………….. ………………………….. ………………………….. 26
Captarea unei secven țe video ………………………….. ………………………….. ………………………….. … 26
3.1 Conectarea la cameră ………………………….. ………………………….. ………………………….. . 26
3.2 Extragerea și prelucrarea frame -urilor ………………………….. ………………………….. . 27
3.3 Vizualizarea și salvarea frame -urilor ………………………….. ………………………….. …. 28
Capitolul 4 ………………………….. ………………………….. ………………………….. ………………………….. 29
Prelucrarea frame -urilor dintr -o secvență video ………………………….. ………………………….. ……. 29
4.1 Extragerea background -ului ………………………….. ………………………….. …………………. 29
4.2 Extragerea foreground -ului ………………………….. ………………………….. …………………… 31
4.3 Extragerea contururilor dintr -o imagine binarizată ………………………….. ………………. 32
4.3 Urmărirea contururilor în vederea cuantificării autovehiculelor și a calcului vitezei
de deplasare ………………………….. ………………………….. ………………………….. …………………….. 33
Capitolul 5 ………………………….. ………………………….. ………………………….. …………………………. 37
Aplicarea conceptelor teoretice în dezvoltarea aplicației de monitorizare a
traficului ………………………….. ………………………….. ………………………….. ………………………….. .. 37
5.1 Scurtă descriere a aplicației ………………………….. ………………………….. ………………….. 37
5.2 Usecase general al aplicației ………………………….. ………………………….. …………………. 38
5.3 Descriere detaliată usecase -uri ………………………….. ………………………….. ……………… 39
5.3.1 Usercase -ul general ………………………….. ………………………….. ………………………….. . 39
5.3.3 Captarea frame -urilor ………………………….. ………………………….. ……………………. 41
5.3.4 Extragere background ………………………….. ………………………….. …………………… 42
5.3.4 Extragere foreground ………………………….. ………………………….. …………………….. 43
5.3.5 Tracking ………………………….. ………………………….. ………………………….. …………. 47
5.3.6 Stocare date ………………………….. ………………………….. ………………………….. ……. 53
5.4 Pașii algoritmului ………………………….. ………………………….. ………………………….. ….. 55
5.5 Schema bloc a algoritmului ………………………….. ………………………….. ……………….. 59
5.6 Istorie în dezvoltare aplicației de monitorizare a traficului ………………………….. 60
5.7 Probleme întâmpinate și soluții de rezolvare ………………………….. …………………… 61
5.8 Cazuri excepționale ………………………….. ………………………….. ………………………….. … 63
Capitolu l 6 ………………………….. ………………………….. ………………………….. ………………………….. 64
Rezultate și concluzii ………………………….. ………………………….. ………………………….. …………… 64
6.1 Testarea aplicației pe un drum cu sens unic ………………………….. ……………………. 64
6.2 Testarea aplicației pe drum cu dublu sens ………………………….. ………………………. 65
6.3 Validarea rezultatelor obținute în urma procesării secvenței video ………………………… 71
6.4 Concluzii ………………………….. ………………………….. ………………………….. ……………….. 74
Bibliografie ………………………….. ………………………….. ………………………….. …………………………. 76
3
Introducere
Majoritatea persoanelor cu vârsta de peste 18 ani au permis de conducere. Cel mai
probabil, cei care dețin permis de conducere, au ș i un autovehicul cu care se deplasează. Nu
de puține ori s -au întâmplat accidente din diverse cauze : neatenție, viteza exce sivă, conducere
sub influenț a băuturilor alcoolice sau a stupefiantelor, etc.
Un studiu al Comisiei Europene arată că în țara noastră viteza ucide 91 de oameni la
fiecare milion de locuitori, aproape dublu față de media europeană . Din acest motiv, a cum
câțiva ani a fost implementat un sistem prin care traficul era monitorizat cu ajut orul camerelor
video amplasate î n anumite locuri fixe cu scopul de a sancționa șoferii gră biți sau pe cei care
nu respectă legea in general.
S-a introdus un sistem omologat de BRML(B iroul Roman de Metrologie Legală ), care folosește așa
numitele bucle inductive. Principiul de funcționare al buclelor inductive, conform specificațiilor
producăt orului cu care colaborează Poliția Română, este următorul: în faț a une i camere video sunt
implantate în asfalt, pe fiecare bandă de mers și la o anumită distanță unul de celă lalt, câte două
perechi de conductori electrici ce acționează ca niște senzori.
Aceștia sunt poziționați ap roximativ la 5 -7 metri de cameră pe banda unu, la 1 -2 metri pe banda doi ș i
la încă 1 -2 metr i pe banda trei. De fiecare dată când prin zona trece un autovehicul, fiecare senzor îi
creează o semnătură magnetică unică, iar dacă semn ătura corespunde la ambii co nductori, se măsoară
defazarea în timp ș i astfel se stabilește viteza. Dacă aceasta depășește limita legală , un semnal este
transmis la camera video, care fotografiază imedia t numărul din spate al mașinii în cauză . Siste mul
este omologat de Biroul Român de Metrologie Legală , conform certificatelor de omologare ce au fost
puse la dispoziție. [1i]
„Radarele fixe nu mai funcționează. Poliția nu mai are bani să le întrețină ” [2i]
Această sintagmă spune multe despre managementul resurselor financiare alocate
siguranței cetățenilor, dar scopul nostru nu este d e a arunca vina pe cineva, ci să încercăm să
descoperim problemele cu care ne confruntă m cu to ții în fiecare zi, probleme pe ca re cu
siguranță le dorim a fi câ t mai departe de noi și de apropiații noștri, dar c u siguranță probleme
care există și cu greu le putem face față fără un ajutor corespunzător venit din partea
autorităților, iar la ce mă refer aici este strict legat de siguranța noastră c a cetățeni, at ât din
perspectiva pietonilor, cât și din cea a șoferi lor.
Cu toții ne dorim să fim î n siguranță, deși mulți dintre noi efectuă m mici ilegalități
prin depășirea vitezei legale, depășirea pe linie continuă, trecerea pe culoarea galbenă a
semaforului chiar dacă am fi putut frâna din timp, etc. ; iar toate a ceste lucruri le facem de cele
4
mai multe ori instinctiv. Acesta a fost ș i unul din tre motivele finanțării proiectelor legate de
implementarea unor sisteme fixe de monitorizare a traficului rutier.
Aceste proiecte au fost costisitoare încă de la bun început. Pe lângă sistemul software
în sine și suportul hardware, de asemenea , vine cu o importanță deosebită și implantarea unor
senzori în asfalt, nec esari identificării prezenț ei autovehicul ului și calculul vitezei de
deplasare a acestuia. De acord, aceste sisteme de monitorizare a traficului sunt utile din
punctul de vedere al nostru ca cetățeni pentru că șoferii, știind că sunt „văzuți” de cineva, cu
siguranță sunt mai disciplinați, dar pol iția trebuie să suporte niște costuri î n acest sens, iar
pentru aceasta au nevoie de susținere financiară . După cum am spus, pe lângă cele 2
componente importante : hardware și software, vine ș i partea de implement are a acestui
sistem în trafic și nevoia de oprire temporară a circulației autovehiculelor pentru a putea
implanta acei senzori în asfalt, apoi alte costuri pent ru a acoperi găurile rezultate și tot așa
până la finalizarea implementării întregului sistem. Ce rezultă de aici ? Mult timp pierdut, su nt
necesare fonduri consistente, iar pe lângă faptul că se oprește circulația temporar, vor apărea
alte costuri legate de acoperirea zonelor sparte din asfalt, discuțiile cu a dministratorul
drumului, avize ș i alte lucruri necesare efectuării acestei implem entări. Aceste lucruri duc la
întârzieri, după cu m spune un reprezentant la Poliției Româ ne: „ Între obiectivele Poliției
Rutiere se află și punerea în funcțiune a astfel de sisteme de monitorizare, dar nu se poate
anticipa dacă acest lucru va fi posibil pâ nă la sfârșitul anului 2016 ”. Dacă sunt greu de pus î n
funcțiune și c ostisitoare, întrebarea firească este următoarea: De ce le mai folosiți? I ar
răspunsul vine pe măsură: Pentru că este nevoie de aceste sisteme pentru siguranța cetățenilor.
Pentru aceasta m -am gândit cum aș putea face un sistem de monitorizare simplu,
eficient, ieftin și ușor de instalat pe orice tronson de drum ? De aici a venit ideea mea de a
implementa un sistem de monitorizare a traficului rutier, pe anumite tronsoane de drum, cu
ajutorul unei simple camere fixe, legate la o rețea; camera mult mai puțin costisitoare decât
sistemul anterior, iar modul de instalare se realizează s implu, prin calibrarea camerei în zona
fixă de monitorizare, după care t ot ceea ce trebuie făcut este să o conectezi la o sursa de
tensiune pentru a funcționa și atât. Aplicația dezvoltată de mine este orientată mai mult p e
fluidizarea traficului rutier, nicidecum pe sancționarea șoferilor grăbiți sau neatenți.
Bineînțeles că aplicația poate fi dezvoltată î n diverse zone de interes, dar pentr u a putea
realiza ceva practic și î n timp util am pus la punct bazele unei aplicații simple, necosti sitoare
și ușor de implementat în orice zona rutieră dorită .
Acum, fiind „era dronelor”, orice organ abilitat poate mane vra o dronă care are alipită
o cameră și cu care poate monitoriza traficul prin fixarea dronei asupra unui tronson de drum
5
dorit, deci, am pus bazele unui sistem cu ajutorul căruia pute m genera informații legate de
câte autovehicule trec prin zona noastră de interes, cu ce viteza medie trec , se deplasează ș i în
ce intervale orare circulația pe an umite tronsoane de drum necesită intervenția autorităților
sau organelor abilitate.
Sistemul propus are o rată de detecție corectă a autovehiculelor de 90% ș i poate
detecta cazuri excepțio nale precum accidente, blocaje î n trafic,etc.
Lucrarea este structurată astfel: în primul capitol sunt prezentate spațiile de culoare
utile algoritmului implementat , în Capitolul 2 sunt prezentate la nivel teoretic metodele de
segmentare utilizate , în Capitolul 3 detaliem modul în care putem capta o secvența video în
vederea procesării acesteia în timp real. Capitolul 4 va detalia etapele de procesare a frame –
urilor din secvența video, iar ultimul capitol, Capitolul 5, reprezi ntă partea practică a lucrării,
cuprinzând algoritmi i de prelucrare a imaginilor ce au fost proiectați utilizând ca tehnologii
limbajul C++ împreună cu librăria OpenCV 3.0.
Până la momentul de față au fost dezvoltate câteva softuri similare cu cel propus de
mine și anume :
1. Video -based vehicle tracking for smart traffic analysi s, dezvoltat de grupul
Augmented Vision la compania DFKI GmbH (Soluții inteligente pentru societatea
cunoașterii), care etich etează autovehiculele care intră într-un sen s giratoriu, utilizând
metode de tracking pe contururi. [19i],[20 i]
2. Traffic counting based OpenCV, dezvoltat de un utilizator al site -ului YouTube.com,
excellentSK , care utilizează o bară de -a latul părții carosabile pentru cuantificarea
autovehiculelor pe categorii de gabarit . [21i]
3. Vehicle Detection, Tracking and Counting, unde Andrews Sobral , Ph.D . Candidate at
ULR on Computer Vision and Machine Learning. Université de La Rochelle (ULR),
aduce mai multe exemple de detec ție a autovehiculelor, tracking și num ărare a
acestora. [22i]
Niciunul dintre softurile enumerate nu aduce noutăți precum calculul vitezei de deplasare
și cuantificarea au tovehiculelor utilizând o cameră fixă, orientată perpendicular pe suprafața
carosabilă și stocarea informațiilor în vederea procesării ulterioare a acestora cu scopul
fluidizării traficului rutier, în principal. De a ici vine autenticitatea aplicației de monitorizare a
traficului rutier. De altfel, metodele utilizate de acești dezvoltatori nu pot fi găsite în anumite
articole, de aceea singurele detalii(foarte puține) sunt cele din videoclipurile din referințe.
6
Capito lul 1
Spaț ii de culoare în procesarea imaginilor
Ce este culoarea ?
Culoarea reprezintă calitatea percepției determinată de compoziția spectrală a luminii
(radiației electromagnetice) primite de ochi.
Lumina vizibilă e compusă dintr -o bandă relativ îngustă a spectrului electromagnetic.
Spectrul vizibil este în domeniul lungimilor de undă: 360nm -830nm.
Formatul ochiului uman:
Fig. 1 – Structura ochiului uman [23i]
Imaginea se formează în ochiul uman pe baza luminii focalizate pe retină de lentila
oculară. Senzația de culoare este dată de conuri.
Conurile sunt senzori din retină responsabili pentru senzația de culoare; conțin
pigmenți fotosensibili cu absorbții spec trale diferite.
Există trei tipuri de conu ri, sensibile la lungimi de undă mici, medii și lungi :
– aproximativ 65% din conuri sunt sensibile la lumina roșie ;
– aproximativ 33% din conuri sunt sensibile la lumina verde ;
– aproximativ 2% din conuri sunt se nsibile la lumi na albastră; [23i]
7
1.1 Spaț iul RGB
Datorită caracteristicilor conurilor din ochiul uman, culorile sunt văzute ca diferite
combinații ale culorilor primare: roșu, verde și albastru. [23i]
Culoarea fiecărui pixel se obține prin combinația a 3 culori: ROȘ U (R – Red) , Verde
(G – green), Albastru(B – blue).
Fig. 1.1 – Reprezentarea combinării aditive a culorilor.
Acolo unde culorile primare (RGB) se suprapun se observă apariția culorilor
secundare (CMY) . Acolo unde toate trei culorile se suprapun se observă apariția culorii
albe. [3i]
Imaginea color se obține prin combinarea la nivel de pixel a celor trei culori primare după
cum este și relatat în Figura 1.2, deci prin combinarea celor 3 canale – Roșu, Verde și
Albastru.
Fig. 1.2 – Obținerea imaginii color
Fiecare pixel din i magine este caracterizat prin câ te o valoare pentru fiecare din cele 3
componente de culoare primare . Culoarea reprezintă un punct î n spațiul 3D al modelului de
culoare RGB (fig. 1.3) Î n acest cub al culorilor, originea axelor R, G, B corespunde culorii
8
negre (0,0,0). Vârful opus cubului corespunde culorii albe (255, 255, 255). Diagonala cubului,
între negru și alb, corespunde nuanțelor de gri (grayscale ), caz în care R=G=B . Tre i dintre
vârfuri corespund culorilor prim are roșu, verde ș i albastru. Celelalte 3 vârfuri corespund
culoril or complementare: turcoaz, mov ș i galb en (Cyan, Magenta, Yellow). Dacă translatăm
originea sistemului de coordonate în punctul “alb” și redenumim cele 3 axe de coordo nate ale
sistemului C, M, Y obținem spațiul de culoare complementar CMY. [2].[3]
Fig. 1.3 – Modelul de culoare RGB mapat pe un cub [3i]
În acest exemplu (fig.1.3) fiecare culoare este reprezentată pe câte 8 biți (256 de niveluri .
Numărul total de culori este [3i]
1.2 Conversia unei imagini color într -o imagine grayscale
Pentru a converti o imagine color î ntr-o imagine grayscale, cele 3 componente ale culorii
fiecărui pixel trebuie egalizate. Cea mai des fo losita metodă este medierea celor 3
componente [3 i]:
Ec. 1.1
Practic se face media RGB a fiecărui pixel, iar valoarea rezultată se va asigna fiecărui
canal al fiecărui pixel din imaginea destinație.
Chiar dacă de multe ori se folosește medierea, nu aceasta este formula clasic ă utilizată î n
majoritatea mediilor de dezvoltar e. Formula utilizată de OpenCV și î n majoritatea framework –
urilor este:
[4i] Ec. 1.2
(Vezi figura 2.3)
9
1.3 Spațiul HSV
Formatul de culoare RGB poate reprezenta orice culoare standard sau luminozitate
folosind o combinație de componente roșu, verde și albastru. Pentru eficiență, acest lucru este
stocat în mod obișnuit ca un număr de 24 de biți, folosind 8 -biți pentru fiecare componentă de
culoare (0 la 255), astf el încât, de exemplu, alb este format din R = 255, G = 255 ș i B = 255.
Acest format se află prezent aproape în toate ecranele de calculator, folosit timp de zeci de
ani, și de aceea este formatul de culoare standard utilizat în software -ul de calculator. Din
păcate, atunci când este vorba de vedere artificială (Computer Vision) , valorile RGB vor varia
foarte mult în funcție de condițiile de iluminare puternică sau slabă și umbre, etc. În
comparație, HSV st ă mult mai bine la manipularea diferențele de ilumi nat, și oferă o valoare
de culoare ușor de utilizat.
HSV vine de la Hue -Saturation -Value, unde Hue este culoarea. Și, din moment ce
culoare nu este un lucru ușor de separat sau comparat, Hue este adesea reprezentat ca un
unghi circular (între 0.0 la 1.0 at unci când este depozitat ca flotant). Fiind o valoare circulară
înseamnă că 1.0 este aceeași ca și 0.0. De exemplu, o nuanță de 0.0 este de culoare roșie, o
nuanță de 0,25 ar fi verde, o culoare de 0,5 este de culoare albastră, o nuanță de 0,75 este roz,
și o nuanță de 1,0 ar fi la fel ca și o nuanță de 0.0, care este de culoare roșie ( din nou).
Saturația este cenușiul, astfel încât o valoare de saturație aproape de 0 înseamnă că este
monoton sau gri, în timp ce o valoare a saturației de 0,8 ar putea fi o culoare foarte puternică
(de exemplu: roșu dacă Hue este 0). Valoarea este luminozitatea pixelilor, deci 0.1 este negru
și 0,9 este de culoare albă. Din păcate, există modalități diferite de a reprezenta culorile HSV,
precum luminozitatea V,de 1.0, ar treb ui să fie de culoare albă strălucitoare sau o culoare
strălucitoare. Cele mai multe software -uri aleg luminozitatea V maximă care înseamnă alb, în
timp ce OpenCV alege strălucirea maximă V pentru a înțelege o culoare strălucitoare. [2],[3] ,
[5i]
Fig. 1.4. Cilindrul HSV [24i]
10
Capitolul 2
Segmentarea imaginilor, extragerea
contururilor și operații morfologice
În acest capitol vor fi analizate metodele de segmentare utilizate în aplicația propusă
de monitorizare a traficului (algoritmul de thresholding și segmentarea cu prag adaptiv
dezvoltată după metoda propusă de Otsu), metoda de extragere a contururilor dintr -o imagine
binară folosind operatorul Prewitt și operații morfologice aplicate imaginilor binare (erodare,
dilatare, închidere și deschidere).
2.1 Metode de segmentare
Segmentarea presupune împărțirea unei imagini în mai multe zone de interes, în
funcție de anumite criterii definite. Zonele care intră în componența unei imagini se numesc
segmente. Algoritmii de segmentarea a imaginilor au la baz ă două criterii majore:
discontinuitate și similaritate [1]: în prima categorie se dorește segmentarea imaginii pornind
de la schimbările de intensitate din imagine, cum ar fi contururile; în a doua categorie se
dorește împărțirea imaginii în regiuni simil are, în funcție de un set predefinit de parametri,
cum ar fi culoarea, luminozitatea etc. În acest subcapitol vor fi analizați doi algoritmi de
segmentare care pornesc de la premisa că valorile intensităților diferă în funcție de regiune iar
în cadrul fiec ărei regiuni, care reprezintă obiectul corespunzător într -o scenă, valorile
intensităților sunt similare
Cele două metode de segmentare analizate sunt: algorimul de segmentare cu prăguire
(en. Thresholding) și segmentarea cu prag adaptiv (metoda Otsu). Pen tru a putea aplica
algoritmul de prăguire, avem nevoie să construim mai întăi histograma imaginii.
Histograma unei imagini
Histograma unei imagini redă distribuția nivelurilor de gri din imagine. Este funcția care
asociază fiecărui nivel de gri frecvența de apariție în imagine. Dacă se consideră o imagine
inițială cu o rezoluție de 8 biți/pixel, pe axa abscisei graficului hist ogramei se regăsesc cele
256 niveluri de gri posibile, iar pe axa ordonatei sunt redate frecvențele de apariție ale fiecărui
nivel de gri de pe axa abscisei. Practic, în urma realizării histogramei se obține un vector h cu
256 de poziții (h(1) reprezintă n umărul de pixeli care au valoarea intensității egală cu 0, h(2)
11
reprezintă numărul de pixeli care au valoarea intensității egală cu 1, …, h(256) reprezintă
numărul de pixeli care au valoarea intensității egală cu 255). Suma elementelor din h
reprezintă n umărul de pixeli din imagine. [4 ]
a
b
c
Fig. 2.1. Histograma unei imagini. © Imagine [5]
a. Imagine originală ; b. Imagine grayscale; c.histograma
2.1.1 Thresholding sau determinarea pragurilor de segmentare (Prăguire)
Thresholding -ul este folosit cu scopul de a extrage obiectele din background prin
atribuirea unei valori de intensitate fiecărui pixel, astfel încât fiecare pixel este clasificat ca
fiind un punct dintr -un obiect sau un punct din background.
Separarea modurilor histogra mei, și deci identificarea obiectelor din imagine, se face
prin alegerea unor niveluri de gri, numite praguri de segmentare. De obicei aceste praguri se
aleg ca fiind corespunzătoare minimelor locale ale histogramei. [6i]
Cazul ideal îl reprezintă o histo gramă bimodală ( care conține două moduri dominante) ,
situație în care alegerea pragului se realizează simplu: punctul de minim dintre cele două
maxime, ce reprezintă obiectul și fundalul.
De cele mai multe ori, histograma nu este bimodală și este nevoie de alte tehnici
pentru a rezolva problema segmentării prin fixarea pragurilor de binarizare.
Fig. 2.2 – Histograma: (a) bimodală; (b) cu trei moduri dominante
12
Binarizarea prin fixarea pragului
Alegerea corectă a pragului este crucială pentru segmentar ea cu succes a imaginilor.
Binarizarea prin fixarea pragului este o operație puțin costisitoare din punct de vedere al
calculelor, ea fiind una dintre cele mai vechi metode de segmentare și încă pe larg utilizată.
Binarizarea imaginii este operația de transformare a unei imagini de intrare “ f” într -o
imagine de ieșire binară “ g” (segmentată) după cum urmează:
g(i, j) =
, unde T = prag, T (2.1)
Cu alte cuvinte:
g(i, j) = 1 pentru elementele imaginii ce aparțin obiectelor
g(i, j) = 0 pentru elementele ce aparțin fundalului (sau invers)
a
b
c
Fig.2.3. Binarizarea unei imagini
b. Imagine originală; b. Imagine grayscale; c.Imagine binarizată cu T = 75
Binarizarea are mai multe derivații. O posibilitate este aceea de a segmenta o imagine astfel
încât toți pixelii ce au nivelurile de gri într -un interval dat D, să fie considerați ca făcând parte
din regiune.
g(i, j) =
(2.2)
a
b c
Fig.2. 4. Binarizarea unei imagini
c. Imagine originală; b. Imagine grayscale; c.Imagine binarizată cu D = [70, 150]
13
2.1.2 Metoda de segmentare Otsu
În Computer Vision și în Procesarea de imagini , metoda de segmentare Otsu, numită
după Nobuyuki Otsu [ 4i], este folosită pentru segmentarea cu prag adaptiv a imaginii.
Algoritmul presupune că imaginea conține două clase (histogramă bimodală); pixelii din
primplan – foregrou nd și pixeli de fundal – background . Ideea de bază a algoritmului este de
a calcula pr agul optim care separă cele două clase, astfel încât varianța intra -clasă este
minimă , iar varianța dintre -clase este maximă .
Definirea problemei
1. Există două grupuri de pixeli, care se întind pe domenii de intensități diferite (ex: obiecte și
fundal). Problema selecției unui prag este complicată de faptul că aceste domenii de
intensitate uneori se suprapun parțial. Se dorește minimizarea erorilor de clasificare a unui
pixel obiect ca fundal , și vice -versa.
2. Pentru realizarea acestui deziderat, încercăm să minimizăm aria de sub histograma unei
regiuni. Vom considera aceste două regiuni ca două grupuri.
3. Pragul va fi ales astfel încât cele două grupuri să fie cât mai “strânse”, minimizând astfel
suprapunerea.
4. O măsură a omogenității grupului este varianța. Un grup cu omogenitate mare are o
varianță mică, un grup cu omogenitate mică are varianță mare .
Fig. 2. 5 – Alegerea pragului optim [7i]
14
Scopul metodei Otsu este de a găsi un prag de segmentare T care să minimizeze varianța
ponderată intra -clasă [7i].
Varianța ponderată intra -clasă pentru cele două clase ( foreground și background ) se
calculează conform relației:
(2.3)
Unde:
Wb(T) reprezintă probabilitatea ca pentru pragul de segmentare T, pixelii să facă parte
din clasa background
ă
ă (2.4)
Wf(T) reprezintă probabilitatea ca pentru pragul de segmentare T, pixelii să facă parte
din clasa foreground
ă
ă (2.5)
reprezintă dispersia punctelor din clasa background
(2.6)
Unde N reprezintă numărul de pixeli din background , xi este intensitatea pixelului din clasa
background , iar reprezintă media pixelilor din clasa background.
reprezintă dispersia punctelor din clasa foreground
(2.7)
Unde M reprezintă numărul de pixeli din foreground , yi este intensitatea pixelului din clasa
foreground , iar reprezintă media pixelilor din clasa foreground.
Observații:
Indiferent de pragul ales T, M + N = numărul pixelilor din imagine
Indiferent de pragul ales T,
În acest moment sunt disponibile toate ecuațiile necesare pentru a măsura varianța ponderată
intra -clasă .
Pentru fiecare prag potențial T:
Se separă pixelii în două clase, pe baza pragului T
Se calculează media celor două clase
Se calculează varianța dintre clase, conform ecuației Ec. 2. 3
Se reține pragul T care minimizează această varianță.
15
Exemplu de funcționare a algoritmului Otsu
Algoritmul va fi demonstrat și explicat folosind o imagine grayscale de dimensiune 6×6 pixeli
(Figura 2. 6) [15i]. Pentru a simplifica explicația, sunt utilizate doar 6 niveluri de gri.
Fig. 2. 6. Imagine folosită pentru a exemplifica modul de funcționare al metodei Otsu
Histograma imaginii din Figura 2.6 este reprezentată în Figura 2.7 .
Fig. 2. 7. Histograma imaginii din Figura 2. 6
Calculele pentru găsir ea varianțelor foreground -ului ș i background -ului (măsura de
răspândire) pentru un s ingur prag sunt cele ce urmează:
8 pixeli 7 p ixeli 2 pixeli
Fig. 2. 8. Histogramă background
16
Pondere : Wb
Medie : b
Varianța: b
6 pixeli 9 pixeli 4 pixeli
Fig. 2. 9. Histogramă foreground
Pondere : Wf
Medie : f
Varianța: f
Următorul pas este acela de a calcula varianța "intra -clasă". Acest lucru este pur și
simplu suma celor două varianțe înmulțită cu ponderile asociate acestora.
Varianța "intra -clasă":
w Wb b + W f f
Această valoare finală este "suma varianțelor ponderate" pentru valoarea de prag 3.
Același calcul trebuie să fie efectuat pentru toate posibilele valori de prag de la 1 la 5. În urma
calculelor ( Tabel 2.1 ) a rezultat că pentru pragul T = 3, după cum a fost utilizat și în exemplu,
se obține cea mai mică sumă a varianțelor ponderate. Prin urmare, acesta este pragul final
selectat. Toți pixelii cu un nivel mai mic de 3 sunt pixeli de background, toți cei cu un nivel
egal sa u mai mare de 3 sunt pixeli de foreground. După cum arată imaginile din tabel, acest
prag funcționează bine.
17
Fig. 2.10 . Rezultatul segmentării folosind metoda Otsu [15i]
Această abordare pentru calcularea adaptivă a pragului este utilă pentru a explica
conceptual modul de aplicare a algoritmului, dar necesită foarte mult timp de calcul. O
variantă mai rapidă de implementare constă în calcularea varianței ” dintre -clase ”, care este
mult mai rapid de calculat. De această dată se va alege pragul pentru care se obține maximul
varianței ” dintre -clase ”. Din fericire, pragul pentru care se obține maximul varianței ” dintre –
clase ” coincide cu pragul pentru care se obține minimul varianței ” intra -clasă ”.
Varianța "dintre -clase" este definită ca varianța totală a intensităților pixelilor din
imagine minus varianța " intra -clasă ": B – W
Deoarece varianța totală este constantă, problema minimizării varianței intra -clasă
este astfel echivalentă cu problema maximizării varianței dintre clase .
Tabel 2 .1. Dependența dintre varianța “ intra -clasa ”, varianța “ dintre -clase ” și prag [ 15i]
Prag T=0 T=1 T=2 T = 3 T=4 T=5
Varianța
"intra -clasă "
W σ2
W =
3.1196 σ2
W =
1.5268 σ2
W =
0.5561 σ2
W =
0.4909 σ2
W =
0.9779 σ2
W =
2.2491
Varianța
"dintre -clase "
B σ2
B =
0 σ2
B =
1.5928 σ2
B =
2.5635 σ2
B =
2.6287 σ2
B =
2.1417 σ2
B =
0.8705
În continuare este prezentat rezultatul obținut în urma segmentării folosind metoda Otsu,
pentru o imagine d e test.
A
b
c
Fig.2.11 . Binarizarea unei imagini folosind metoda Otsu
a) Imagine grayscale; b) histograma ; c) imaginea binarizată; prag găsit: T = 89
18
2.2. Extragerea contururilor
Pentru aplicația propusă se folosește ca input , pentru extragerea contururilor , imaginea deja
binarizată , ceea ce simplifică puțin problema extragerii contururilor, putând utiliza o metodă
simplă prin folosirea operatorului Prewitt.
Operatorul Prewitt folosește 2 matric i (măști de convoluție) pentru identificarea
muchiilor pe orizontală, respectiv pe vertica lă. Mai exact, acesta intensifică (evidențiază)
valorile pixelilor care reprezintă contururi.
Masca utilizată la identificarea muchiilor pe orizontală este :
Masca utilizată la identificarea muchiilor pe verticală este :
Pentru a identifica toate muchi ile se utilizează următoarea formulă:
(2. 8)
În urma convoluției fiecăreia dintre cele 2 măști și imagine, rezultă câte o nouă imagine.
Utilizând cele 2 imagini rezultate (după convoluția cu P și Q), se aplică formula (2.8) pentru
obținerea imaginii finale în care au fost detectate toate contururile.
Imagine originală (binară) Determinarea contururilor
Figura 2.1 2. Extragerea contururilor
19
2.3 Operații morfologice
Cuvântul morfologie provine din latină unde morphos înseamnă formă, iar logos știință.
Așadar, morfologia este o știință a formelor, adică o abordare a prelucrării imaginilor bazată
pe noțiunea de formă. Din punct de vedere matematic, domeniul morfologiei presupune
operarea cu mulțimi de puncte cu rolul de a caracteriza forma obiec telor de interes. În general,
operațiile morfologice au doi factori: primul corespunde mulțimii de transformat, iar al doilea
factor corespunde mulțimii cu ajutorul și în funcție de care va fi transformată prima mulțime.
În cazul abordării bazate pe morfo logie matematică, ideea de bază este în a considera
imaginea ca un ansamblu. Asupra acestui ansamblu se aplică transformări prin comparația cu
mulțimi mai simple, numite elemente structurante. Scopul acestor transformări este de a
obține forme mai simple r ezultate din formele inițiale ale imaginii [4 ]
Elementul structurant constă într -o mulțime geometrică, arbitrară, cunoscută și
impusă. Forma și dimensiunea elementului structurant determină proprietățile testate asupra
formei obiectului pe care dorim să îl modificăm.
Elementul structurant este definit de trei elemente caracteristice:
dimensiunea matricei: care specifică dimensiunea elementului structurant;
șablonul format din elementele 1 sau 0: care redă forma elementului structurant;
originea: care poate fi în interiorul elementului structurant sau în afara acestuia
Fig.2.1 3. Exemple de elemente structurante
Prelucrarea morfologică a imaginii binare va consta astfel în modificarea formelor obiectelor
(valorilor de 1) din mulțimea imagine. Ca o abordare abstractă: prelucrarea morfologică este
similară procesului de sculptare al unei figuri de lut, unde seturile de unelte sunt diversele
elemente structurante [3],[11i].
Tipuri de operații morfologice:
operații de bază: erodare , dilatare
operații compuse: hit or miss , deschidere , închidere , skeleton , gradient morfologic ,
etc…
20
2.3.1 Erodarea
Erodarea morfologică (simbol Θ) a mulțimii A prin elementul structurant B se definește ca
fiind mulțimea punctelor din imagine în care elementul structurant translatat este inclus în
mulțimea A. Transformarea de erodare este dată de relația:
AΘB = {x | B x ⊂ A}, unde 2.9
A este mulțimea imagine (pixelii obiect)
B este mulțimea elementului structurant,
x reprezintă un punct/vector oarecare
Bx reprezintă mulțimea elementului structurant translatată cu originea în x
Exemplu didactic de realizare a erodării unei imagini binare
V4
V8
a) imagine originală b) element
structurant c) imaginea rezultată în
urma erodării
Fig.2.1 4. Exemplu de erodare
În continuare sunt prezentate rezultatele erodării cu diverse elemente structurante.
Imagine originală
Imagine binară
Imagine erodată cu elementul structurant
Imagine erodată cu elementul structurant
Fig. 2.1 5. Exemplu de erodare
21
Observații referitoare la erodarea morfologică [3]
1. Frontierele obiectelor sunt oarecum netezite de mici fluctuații
2. Obiectele sunt micșorate
3. Obiectele mici sunt eliminate
4. Golurile se măresc
5. Forma elementului structurant influențează rezultatele
2.3.2 Dilatarea
Dilatarea morfologică (simbol ⊕) a mulțimii A prin elementul structurant B se definește ca
fiind mulțimea punctelor din imagine în care elementul structurant translatat are cel puțin un
punct comun cu mulțimea A.
Transformarea de dilatare este descrisă de relația:
A⊕ B = {x | B x ∩ A ≠ ∅} 2.10
Unde:
A este mulțimea imagine (pixelii obiect),
B este mulțimea elementului structurant,
x reprezintă un punct/vector oarecare
Bx reprezintă mulțimea elementului structurant translatată cu originea în x
Exemplu didactic de realizare a dilatării unei imagini binare
V4
V8
a) imagine originală b) element
structurant c) imaginea rezultată în
urma dilatării
Fig.2.16. Exemplu de dilatare
22
În continuare sunt prezentate rezultatele deschiderii cu diverse elemente structurante.
Imagine originală
Imagine binară
Imagine dilatată cu elementul structurant
Imagine dilatată cu elementul structurant
Fig. 2.17. Exemplu de dilatare
Observații referitoare la dilatarea morfologică:
1. Obiectele sunt mărite
2. Obiectele mici sunt accentuate
3. Golurile mici sunt umplute
4. Forma elementului structurant influențează direcția de dilatare
2.3.3 Deschiderea imaginilor
Deschiderea morfologică a mulțimii A prin elementul structurant B, se definește ca fiind
operația de erodare a lui A cu eleme ntul structurant B urmată de o dilatare cu elementul
structurant simetric .
Transformarea de deschidere morfologică:
⊕ 2.11
A este mulțimea imagine (pixelii obiect)
B este mulțimea elementului structurant,
Θ este operația de erodare,
⊕ este operația de dilatare
reprezintă mulțimea elementului structurant simetrizată
23
Exemplu didactic de realizare a deschiderii unei imagini binare
V4
V8
a) imagine originală b) element
structurant c) imaginea rezultată în
urma deschiderii
Fig.2.18. Exemplu de deschidere
În continuare sunt prezentate rezultatele deschiderii cu diverse elemente structurante.
Imagine originală
Imagine binară
Imagine deschisă cu elementul structurant
Imagine deschisă cu elementul structurant
Fig.2.19 . Exemplu de deschidere morfologică
24
Observații referitoare la deschiderea morfologică [3]:
Componentele conexe ale mulțimii A mai mici decât elementul structurant sunt
eliminate.
Convexitățile foarte accentuat e ale contururilor sunt teșite ș i „istmurile” sunt
îndepărtate
Efect de netezire al frontiere lor
2.3.4 Închiderea imaginilor
Închiderea morfologică a mulțimii A prin elementul structurant B se definește ca fiind
operația de dilatare a lui A cu elementul structurant B urmată de o erodare cu elementul
structurant simetrizat . Transformarea de închidere morfologică:
⊕ 2.12
Unde:
A este mulțimea imagine (pixelii obiect) ;
B este mulțimea elementului structurant ;
Θ este operația de erodare;
⊕ este operația de dilatare ;
reprezintă mulțimea elementului structurant simetrizată
Exemplu didactic de realizare a închiderii unei imagini binare
V4
V8
a) imagine originală b) element
structurant c) imaginea rezultată în
urma închiderii
Fig.2.20. Exemplu de închidere
25
În continuare sunt prezentate rezultatele închiderii cu diverse elemente structurante.
Imagine originală
Imagine binară
Imagine închi să cu elementul structurant
Imagine închisă cu elementul structurant
Fig.2.21 . Exemplu de închidere morfologică
Observații referitoare la închiderea morfologică :
1. Golurile din obiecte, mai mici decât elementul structurant sunt umplute ;
2. Concavitățile accentuate ale contururilor sunt umplute ș i obiectele apropiate sunt unite ;
3. Efect de netezire al frontierelor ;
26
Capitolul 3
Captarea unei secvențe video
Captarea unei secvenț e video este primul ș i cel mai important pas î n dezvoltarea unei
aplicații de procesare video de timp real. Pentru a fi mai ușor de înțeles, se va discuta despre
procesare video din p erspectiva bine -cunoscutei libră rii, OpenCV.
Elementele esențiale în dezvoltarea aplicațiilor de pre lucrare video de timp real sunt
următoarele:
1. Conectarea la cameră
2. Extragerea și prelucrarea frame -urilor
3. Vizualizarea sau salvarea frame -urilor prelucrate
3.1 Conectarea la cameră
Conectarea la camer ă în OpenCV se realizează simplu utilizând următoarele linii de
cod:
VideoCapture cap( 0); // deschide camera implicită
if(!cap.isOpened()) // verifică dacă s -a reușit conectare a
return -1;
1. Crearea unui obiect de tipul VideoCapture care are ca parametr u pe constructor
tipul de cameră folosită . Dacă i se dă parame trul 0 va deschide camera setată
implicit pe sistemul de calcul pe care se rulează aplicația (de ex. la laptop va
deschide camera încorporat ă). Parametrul de intrare pentru obiectul VideoCapture
poate fi și un string, o cale către un fișier video din stocarea intern ă a sistemului de
calcul. Acest mod de lucru este foarte util în dezvoltare pentru a putea face
depanare și pentru a putea testa aplicația înainte de a o pune în producție.
2. Se verific ă dacă s-a reușit conexiunea. Dac ă da, se merge mai departe. Dac ă nu, se
va ieși din program.
27
Fig. 3.1 . Schema logică pentru conectarea la o cameră video fixă
3.2 Extragerea și prelucrarea frame -urilor
Următorul pas în dezvoltare, după conectarea la o camera fixă, constă în
extragerea frame -urile în vederea prelucrării lor.
Acest lucru îl putem face utilizând următoarea secvență de program:
while(1){
Mat frame;
cap >> frame;
// Aici va fi adaugat codul de procesare a frame -ului
switch(waitKey(10)) {
case 27: return 0; //’ESC’ key pressed, exit program.
}
}
Secvența anterioară poate fi descrisă astfel:
1. Crearea unei bucle infinite
2. Declararea unui frame la fiecare iterație
3. Citirea informației de la camera și stocarea ei în variabila definit ă/declarat ă
anterio r.
4. Dacă este apăsată tasta „ESC” se va ieși din program
28
Fig. 3.2 . Schema logică pentru extragerea și prelucrarea frame -urilor
3.3 Vizualizarea și salvarea frame -urilor
Această etap ă are o utilitate semnificativă în vederea afișării rezultatelor bazate pe
prelucrări precedente .
Vizualizarea și salvarea frame -urilor poate fi realizată folosind:
imshow("nume_fereastra" , frame); // crearea si afisarea unei ferestre
imwrite( "../../images /myImage.jpg" , frame ); // stocarea unui frame
Fig. 3.3 . – Crearea unei ferestre și afișarea frame -ului dorit
29
Capitolul 4
Prelucrarea frame -urilor dintr -o secvență
video
Aplicația propusă spre dezvoltare presupune prelucrarea frame -urilor dintr -o secvență
video. Pentru dezvoltarea acestei aplicații , trebuie urmați câțiva pași esențiali în vederea
obținerii rezultatelor așteptate.
Pașii de urmat sunt:
1. Extragere background
2. Extragere foreground
3. Extragerea contururilor
4. Tracking (util pentru identificarea unică a autovehiculelor, în acest caz )
5. Logare informații(stocarea datelor relevante în loguri, care vor fi mai apoi folosite
în vederea stocării informațiilor într -o baza de date)
4.1 Extragerea background -ului
Există mai multe soluții de extragere a background -ului (Preluarea primului cadru,
Preluarea primului cadru în momentul în care nu se mai identifică mișcare, Adaptarea
background -ului la fiecare n cadre cu una din metodele anterioare, metoda cu logica
majoritară pe baza histogramei).
Metoda de extragere a background -ului utilizează mai multe metode pentru o mai bună
funcționare a algoritmului. Astfel că, în primul rând extrage background -ul din primele 60 de
frame -uri (urmează explicațiile metodei bazată pe logica majoritară) , după care actualizează
background -ul în momentul în care nu identifică mișcare semnificativă in secvența video.
Funcționalitatea metodei bazate pe logica majoritară :
1. Se ia o secvență de 60 de frame -uri (se poate lua un număr mai mare sau mai mic de
frame -uri)
2. Se face câte o histogramă pentru fiecare pixel de la coordonatele (x,y) din toate cele 60 de
frame -uri.
3. Cu logica majoritară, se alege intensitatea pixelului cu valoar ea cea mai mare ș i se setează
în imaginea de background (inițial goală) la coordonatele corespunzătoare.
30
Pentru a ex emplifica acești pași am ales să folosesc o succesiune de 3 cadre de 3×3 pixeli:
10 12 11
8 6 7
15 14 3
Cadru 1 10 8 11
5 4 7
11 15 3
Cadru 2 9 12 15
8 6 2
15 14 3
Cadru 3
Histogramele de la fiecare din coordonate, pentru cele 3 cadre sunt următoarele:
Histograma pentru x = 0 și y = 0 Histograma pentru x = 0 și y = 1 Histograma pentru x = 0 și y = 2
Histograma pentru x = 1 și y = 0 Histograma pentru x = 1 și y = 1 Histograma pentru x = 1 și y = 2
Histograma pentru x = 2 și y = 0 Histograma pentru x = 2 și y = 1 Histograma pentru x = 2 și y = 2
Fig.4. Histogramele intensităților pixelilor pentru fiecare vector de trei elemente obținut
pentru x , y
0 0,5 1 1,5 2 2,5
1 3 5 7 9 11 13 15 0 0,5 1 1,5 2 2,5
1 3 5 7 9 11 13 15 0 0,5 1 1,5 2 2,5
1 3 5 7 9 11 13 15
0 0,5 1 1,5 2 2,5
1 3 5 7 9 11 13 15 0 0,5 1 1,5 2 2,5
1 3 5 7 9 11 13 15 0 0,5 1 1,5 2 2,5
1 3 5 7 9 11 13 15
0 0,5 1 1,5 2 2,5
1 3 5 7 9 11 13 15 0 0,5 1 1,5 2 2,5
1 3 5 7 9 11 13 15 0 1 2 3 4
1 3 5 7 9 11 13 15
31
Aplicând logica majoritară pe fiecare din histogramele de mai sus =>
10 12 11
8 6 7
15 14 3
În momentul acesta avem background -ul, care este o imagine statică și pe care îl vom
folosi în cele ce urmează în identificarea obiectelor aflate în mișcare.
Această metodă de extragere a background -ului nu este deloc eficientă și cu siguranță
nu va funcționa într-o procesare de timp real, de aceea se apelează la această metodă doar
atunci când există flux continuu de mișcare pentru actualizarea background -ului, după care se
revine la metoda de bază, aceea în care background -ul se actualizează în momentul în c are nu
există mișcare sau mișcarea nu este semnificativă. În aplicație, pentru procesarea în timp real,
am folosit o metoda adaptivă de extragere a background -ului ș i anume:
BackgroundSubtractor , care are o implementare foarte efici entă în librăria OpenCV. Această
metodă va fi explicată ulterior în capitolul 5.
4.2 Extragerea foreground -ului
Extrage rea foreground -ului este o etapă simplă, după ce am reușit extragerea
background -ului. Acest lucru se poate realiza, după cum se poate vedea in Figura 4.1, prin
simpla scădere dintre frame -ul curent ș i background(pixel cu pixel). Desigur, dacă dorim să
segmentăm imaginea, aplicăm și un threshold(prag) pentru a putea identifica ulterior obiectele
(contururile) din imagine.
Fig. 4.1. Extragere a foreground -ului
Segmentarea foreground -ului poate fi realizată utilizând metoda adaptivă de binarizare
a imaginii, numită metoda OTSU, prezentată în secțiunea 2.1.2.
Pragul pentru segmentare îl putem stabili noi, de altfel, în urma testelor statistice pe
parcursul rulării programului, dar am ales s ă folosesc o metodă adaptivă din simplul motivul
că pe parcursul unei zile, iluminarea unui tronson de drum diferă în funcție de intervalul orar,
Background
32
iar acest lucru poate duce la erori de identificare a autovehiculelor aflate în miș care,
necesitând contribuția administratorului pentru reconfigurarea pragului din când în când.
Astfel, folosind metoda OTSU am eliminat aceasta probabilitate de eroare și am automatizat
tot procesul, nemaifiind nevoie de intervenția omului.
Aplicarea aces tei metode de extragere a foreground -ului și de segmentare a lui,
utilizând librăria OpenCV, va fi prezentată pe îndelete în cele ce urmează în capitolul 5.
4.3 Extragerea contururilor dintr -o imagine binarizată
Având imaginea deja binarizată , extragerea contururilor nu va fi un proces anevoios, ci
din contră, este relativ simplă realizarea acest ui lucru având în vedere că pixelii de culoare
albă reprezintă contururi:
1. Se creează o structură de date :
class Contour {
tl : Point;
tr: Point;
bl: Point;
br: Point;
centroid: Point
} class Point {
x: int;
y: int;
}
2. Se parcurge imaginea pixel cu pixel de la stânga la dreapta și de sus în jos.
3. Când se identifică un pixel de culoare albă se stochează valoarea lui în tl (stânga
sus)
4. Se parcurge de la tl imaginea spre dreapta pe linie până se dă de un pixel negru
5. Se stochează coordonatele ultimului pixel alb din parcurgerea de la punctul 4 în tr
(dreapta sus)
6. Apoi de la tl se parcurge imaginea în jos până se dă de un pixel negru.
7. Se st ochează coordonatele ultimului pixel alb după parcurgerea anterioară în bl
8. Se parcurge imaginea de la bl la dreapta până se dă de unde pixel negru.
9. Se stochează coordonatele ultimului pixel alb după parcurgerea de mai sus, în br.
10. Se observă că am identific at toate cele 4 colțuri ale unui posibil contur și anume :
stânga sus, dreapta sus, stânga jos, dreapta jos.
11. Cunoscând aceste coordonate, este relativ simplu să calculăm centroidul
conturului.
33
Pentru a face acest lucru este nevoie să încadrăm conturul înt r-un boundingRect în
funcție de punctele găsite d e noi, rezultându -ne o structură care co nține
coordonatele box -ului (x ș i y) plus lungimea și lățimea box -ului. Avem
următoarele formule de calcul pentru coordonatele centroidului:
a. x = roi.x + roi.width / 2;
b. y = roi.y + roi.height / 2,
unde roi este obiectul rezultat în urma aplicării metodei bondingRect din
librăria OpenCV.
Rect roi = boundingRect(contours[i]);
int x = roi.x + roi.width / 2;
int y = roi.y + roi.height / 2;
12. Inițial avem un array ce conține elemente de tipul Contour, iar fiecare contur
identificat este stocat în acel array.
Exemplu concret de identificare a contururilor și de aplicare boundingRect:
Fig. 4.2 – Identificarea și încadrarea contururilor
a. Imaginea de input; b. Rezultatul identificării contururilor
Se poate observa că obiectele sunt perfect încadrate într -un pătrat, iar centroidul poate
fi sesizat ca un punct negru în mijlocul fiecărui contur încadrat.
4.3 Urmărirea contururilor în vederea cuantificării autovehiculelor și a
calcului vitezei de deplasare
Când spunem tracking cu toții ne gândim la un singur lucru : urmărire, după cum poate
fi tradus și acest cuvânt.
Tracking nu înseamnă numai atât. Prin tracking trebuie înț eles că este nevoi e de
identificarea unică a unui anumit contur într -o secvența video unde este prezentă mișcarea, nu
doar încadrarea acelor contururi, dând iluzia de tracking.
Pentru ce avem nevoie de tracking ?
34
În special, tracking -ul este folosit pentru a identifica faptul că un contur este același cu
cel din frame -ul anterior, iar pe baza acestor detalii să se poată calcula câte autovehicule trec
pe un sens de circulație într -o anumită direcție, cât și calculul vitezei medii de depla sare a
autovehiculelor într -o unitate de timp.
1. Pentru cuantificarea numărului de autovehicule se trasează o bara verticală de -a lungul
benzii/benzilor de circulație pe fiecare sens de mers și se contorizează fiecare contur care
trece peste bara respectivă ;
2. Pentru calculul vitezei se folosește aceeași bară verticală și se calculează viteza de
deplasare a autovehiculului de când atinge bar a până când a trecut de aceasta.
Problemele ce pot apărea aici țin de tronsonul de drum monitorizat și anume, atunci când
există mai multe benzi pe sens. Exemplul următor relatează situațiile posibile pe un tronson de
drum cu 2 benzi pe sensul de circulație:
1. Două autovehicule trec în același timp peste bara verticală
Fig.4.3 . Atingerea barei verticale de c ătre 2 autovehic ule(contururile albe)
35
Fig.4.4 . Trecerea peste bara ver ticală a 2 autovehicule
2. Două autovehicule ating în acelaș i timp bara verticală , dar unul dintre ele trece mai
repede peste bar ă
Fig.4. 5. Atingerea barei verticale de către 2 autovehicule(contururile albe)
Fig.4. 6. Trecerea unui autovehicul mai rapid peste bara verticală decât altul
Detaliere probleme:
1. Dacă două autovehicule de mărimi diferite trec în același timp peste bara verticală,
problema ce poate apărea este de confuzie a contururilor și deci este foarte probabil ca
de la un frame la alt ul să identificăm contururile într -o altă ordine.
Rezolvarea acestei p robleme vine din faptul că atunci când se extrag
contururile , acestea se extrag ținând cont de poziționarea spațială a acestora în frame,
frame -ul fiind parsat de sus în jos și de la stânga la dreapta. A stfel, tot timpul,
indiferent că avem 2 autovehicule unul lângă celălalt și amândouă trec în același timp
peste bara verticală, ordinea contururilor extrase este aceeași, putând identifica unic
36
fiecare dintre cele 2 contururi. Informațiile legate de numărul de autovehicule și de
viteza de deplasare, sunt ext rase pentru fiecare contur în parte.
2. Dacă două autovehicule ating în același timp bara verticală, dar unul dintre ele trece
mai repede peste bară, atunci poate apărea confuzia ca cel car e a trecut mai repede să
fie considerat că este cel care trece mai gre u.
Rezolvarea a cestei probleme vine la fel ca ș i cea anterioară, din extragerea contururilor
ținând cont de organizarea spațială a acestora în frame.
Pentru a întări ideea de tracking și deci, pentru a înlătura orice posibilă confuzie între
contururi sau ordinea acestora, o metodă simplă ar fi:
– asignarea fiecărui contur unei clase ;
– calculul distanț ei dintre centrul fiecă rui contur din frame -ul curent și toate celelalte
centre ale contururi lor din frame -ul anterior ;
– asignarea conturului curent la clasa d in care face parte conturul din frame -ul anterior,
cel mai apropiat de acesta.
Clasa asignată poate fi spre exemplu un flag sau o culoare a contururilor sau orice altceva
prin care să se poată identifica în mod unic un contur.
Detaliile de implementare vor fi prezentate în capitolul ce urmează, capitolul 5.
37
Capitolul 5
Aplicarea conceptelor teoretice î n
dezvoltarea aplicației de monitorizare a
traficului
Pentru a vedea cum putem aplica tot ceea ce am învățat în capitolele anterioare, în cele ce
urmează se ilustrează pașii practici pentru fiecare concept în parte și modul cum s -au aplicat
anumite concepte în anumite situații.
5.1 Scurtă descriere a aplicației
Aplicația, după cum sug erează și numel e, este orientată pe extragerea anumitor informații
de pe anumite tronsoane de drum, în anumite intervale orare, cu scopul de a aduce un ajutor
autorităților competente în vederea îmbunătățirii circulației rutiere pe acele tronsoane de
drum, prin monitoriz area traficului cu ajutorul unei camere fixe.
Informaț iile furnizate de soft se referă la:
1. Cuantificarea numărului de autovehicule pe fiecare sens de circulație (indiferent de
numărul benzilor pe fiecare sens)
2. Calculul vitezei medii de deplasare (im plicit, calculul vitezei de deplasare a fiecărui
autovehicul)
Aplicaț ia are un comportament automat, nu are nevoie de intervenția omului, decât în faza
de instalare, iar informațiile furnizate se sto chează în memoria internă a dispozitivului
(sistemului de calcul) care comunică direct cu camera, informații care ulterior vor fi stocate și
prelucrate de organe le competente (de exemplu, Poliț ia Rutieră).
Fig. 5.1. Sistemul general al aplicației
38
5.2 Usecase general al aplicației
Sche ma următoare ilustrează o schemă generală de proiectare a aplicației
într-un mod ușor de înțeles prin imagini. Scopul acestei scheme este acela de a înțelege ușor și
rapid funcționalitatea aplicației, prec um ș i a fiecărui modul in parte.
Fig. 5.2. Schemă usecase general
Pentru o mai bună înțelegere a sch emei am făcut următoarea legendă pentru fiecare
element important:
1. – reprezintă sistemul de calcul pe care rulează softul;
2. – reprezintă camera fixă care preia informația de pe teren
3. – reprezintă organele competente care folosesc informațiile furniz ate de
aplicație (exemplu: Poliția Rutieră )
4. – reprezintă ieșirea din aplicație
5. – reprezintă un usecase. Acestea vor fi detaliate fiecare în parte.
39
5.3 Descriere detaliată usecase -uri
5.3.1 Usercase -ul general
Usecase : Calcul viteză deplasare obiecte
Overview : Un utilizator folosește o aplicație pentru monito rizarea deplasării unui
obiect î ntr-un plan. Acest lucru este posibi l utilizând o cameră fixă .
Actori : Sistem, Camera, Utilizator
Precondiții : 1. Camera trebuie să aibă un frame rate de minim 30 frame -uri/s
2. Camera trebuie să fie fixă .
3. Dimensiunile planului trebuie inițializate.
Scenariul principal:
1. Introducere setări pentru planul de vizualizare
2. Setările planului d e vizualizare se pot adăuga direct de către utilizator sau
pot fi obținute dintr -un fișier de configurare
3. Calibrează camera pe baza setărilor planului
4. Pornește camera
4.1 Ve rifică dacă s-a putut realiza conexiunea la camera
4.2 Dacă se realizează conexiunea cu succes
5. Camera începe să preia frame cu frame (minim 30 frame/s)
6. Se extrage background -ul
7. Se face diferența între background și frame -ul curent
8. Se pune rezultatul într -o imagine
9. Se segmentează această imagine
10. Se identifică obiectul aflat în mișcare
11. Încadrează obiectul într -un rectangle (pătrat)
12. Afișează obiectul încadrat pe ecran
13. Se cuantifică autovehiculele care trec peste barele ce d elimitează cele 2
sensuri de mers
14. Afișează numărul de autovehicule pe ecran
15. Se calculează viteza de deplasare a fiecărui autovehicul pe baza diferenței
dintre frame -uri atunci când atinge bara și când trece de aceasta.
16. Afișează viteza de deplas are a fiecărui autovehicul.
17. Logează informațiile în memoria principală a sistemului de calcul pe care
rulează aplicația. Stocarea informațiilor se face într -un fișier cu extensia .mtr.
40
Postcondiții :
Utilizarea numărului de autovehicule și a vitezei de deplasare medii, obținute într -o
perioadă de timp, în scopul dorit (de exemplu pentru determinarea anumitor statistici în
scopul limitării vitezei auto într -o anumită zonă într -un interval orar sau statistici legate de
blocaje în trafic, statistici legate de cât de aglomerate sunt anumite tronsoane de drumuri în
anumite intervale orare, etc.)
Formatul fișierului cu extensia .mtr este următoarea:
(timestamp, nr_autovehicule_la_ stânga, viteza_medie_autovehicule_la_st ânga,
nr_autovehicule_la_dreapta, viteza_m edie_autovehicule_la_dreapta)
Se va adăuga câ te un astfel de token la fiecare interval de timp, presetat.
4.3: @4. Dacă nu se realizează conexiunea la cameră cu succes afișează un mesaj și se
dă abord(abandonare) procesului.
5.3.2 Conectarea la o cameră fixă
Usecase: Conectarea la o cameră fixă
Overview : Realizarea conexiunii cu o cameră fixă î n vederea extragerii informației
de pe teren
Actori : Sistem, Camera
Precondiț ii: Camera utilizată trebuie să poată capta minim 30 frame/s.
Scenariul principal :
1. Instalare cameră într-un punct fix
2. Orientare cameră în plan vertical, poziția acesteia fiind în partea de sus a planului.
3. Calibrare cameră pentru a capta întregul plan dorit
4. Realizarea conexiunii dintre sistemul de calcul și camera
5. Conectare a softului la hardware -ul camerei în vederea extragerii informației din
planul dorit (preluarea frame cu frame spre procesare)
6. Ieșirea din aplicație daca nu se reușește conectarea camerei la softul care rulează pe
sistemul de calcul.
Postconditii :
1. Ieșire din aplicație dacă nu se reușește conectarea camerei la softul care rulează pe
sistemul de calcul.
2. Frame -urile captate cu ajutorul camerei sunt transmise sistemului pentru a putea fi
prelucrare în vederea extragerii informației necesare din acestea.
41
3. Fram e-urile vor fi procesate 1 câ te 1, exact în ordinea în care sunt preluate de
camera video.
Fig. 5.3. Schema de conectare la o cameră fixă
5.3.3 Captarea frame -urilor
Usecase: Extragere frame -uri
Overview : Extragerea frame -urilor captate de c amera video în urma instalării ș i
calibrării corespunzătoare a acesteia.
Actori : Sistem, Camera
Precondiț ii: 1. Camera trebuie instalată ș i calibrată.
2. Camera trebuie să capteze frame -urile pe plan vertical.
3. Trebuie realizată conex iunea între softul care rulează pe
sistemul de calcul și hardware -ul camerei propriu -zise
Scenariul principal :
1. Se realizează conexiunea la cameră
2. Extragerea frame cu frame
3. Stocarea fiecărui frame într -o structură de date corespunzătoare
Postcondiț ii:
42
Fig. 5. 4. Schema de captare a frame -urilor
Fiecare frame va fi procesat imediat după ce a fost captat și stocat într -o structură de
date corespunzătoare.
5.3.4 Extragere background
Usecase: Extragere background
Overview : Extragerea background -ului cu scopul de a identifica contururile
autovehiculelor (obiectele aflate î n mișcare)
Actori : Sistem, Camera
Precondi ții: Captarea primului frame și considerarea lui ca fiind background
Scenariul principal :
1. Se captează primul frame și se consider ă a fi background
2. Se captează restul frame -urilor, frame cu frame
3. Se face diferența între frame -ul curent și background
4. Dacă nu se identifică mișcare prin diferență, se adaptează background -ul vechi cu
frame -ul curent și îl con sideră pe acesta ca fiind noul background.
Postcondi ții:
Se păstreaz ă background -ul într -o structură de date corespunzătoare cu scopul
utilizării lui ulterioare în extragerea contururilor și detecția mișcării din cadrul video
43
Fig. 5.5 – Schema de e xtragere a background -ului
5.3.4 Extragere foreground
Usecase : Extragere foreground
Overview : Extragerea foreground -ului cu scopul de a identifica obiectele aflate în
mișcare
Actori : Sistem, Camera
Preconditii : Captare frame cu frame
Scenariul principal :
1. Se captează frame cu frame (maxim n frame -uri/sec, în funcție de cameră)
2. Se elimină pixelii irelevanți, care reprezi ntă umbra obiectelor, în cazul în
care există :
a) Pentr u eliminarea umbrelor trebuie să efectuam câțiva pași
esențiali:
I. Se trece frame -ul curent în spaț iul HSV
II. Se trece background î n HSV
Mai departe se folosește doar componenta V.
III. Pentru fiecare pixel din cele d ouă imagini, calculez
raportul I = V imagine/Vbackground , deci I este imaginea
rezultată care conține valorile raportului anterior
evidențiat.
44
IV. Se segmentează imaginea I folosind Otsu; ce este mai
mic decât pragul scos cu Otsu este umbra
V. Pe imaginea binară se aplică apoi o deschidere
b) Se utilizează în co ntinuare imaginea rezultată fără umbre
3. Se face diferența între frame -ul curent(fără umbre) și background și rezultă o
imagine care conține doar foreground -ul
Postcondiții :
Se păstrează imaginea rezultată într -o structură de date corespunzătoare cu
scopul utilizării ei ulterioare în extragerea contururilor și detecția mișcării din cadrul
video prin tehnici de segmentare
– Se segmentează foreground -ul cu metoda de segmentare OTSU
– Se realizează extragerea contururilor din imaginea binarizat ă
Fig. 5.6 – Schema de extragere a foreground -ului
Exemplu care evidențiază detecția umbrei într -un frame în vederea eliminării
ulterioare a acesteia:
45
Fig. 5.6.1. Background
Fig. 5.6. 2. Frame -ul curent
46
Fig. 5.6.3. Detec ție umbră
Fig. 5.6.4. Încadrarea foreground -ului
Zona hașurată cu roșu va fi eliminată din frame -ul curent pentru o mai bună
segmentare a acestuia și pentru a extrage cat mai corect contururile.
47
5.3.5 Tracking
Usecase : Tracking
Overview : Cuantificarea și calculul vitezei de deplasare a autovehiculelor
Actori : Sistem, Camera
Precondiț ii: Eliminare umbre, segmen tare imagine, extragerea corectă a contururilor
Scenariul principal :
1. Definirea a 2 bare verticale de -a latul părții carosabile pe ntru fiecare sens de
mers
2. Încadrarea fiecărui contur într -un pătrat
3. Identificarea atingerii unei bare de către conturul încadrat
4. Identificarea trecerii de bară , a conturului încadrat
5. Cuantificarea numărului de autovehicule
6. Calculul vitezei d e deplasare a autovehiculelor pe baza vitezei de trecere
peste bara verticală.
Postcondi ții:
Se stochează local aceste date esențiale în vederea punerii lor sub forma necesară
stocării în fișierul cu extensia .mtr
Fig. 5.7. Continuare schemă. Tracking
Exemplu concret de cuantificare a numărului de autovehicule și de calcul a vitezei de
deplasare:
48
Fig. 5.7.1. Autovehicul care trece peste bara verticală
Fig. 5.7.2. Autovehicul care trece peste bara verticală – imagine binară
49
Fig. 5.7.3. Autovehicul care trece de bara verticală
Fig. 5.7.4 . Autovehicul trece de bara verticală – imagine binară
Se observă că în momentul trecerii a utovehiculului de bara verticală , numai atunci se
incrementează numărul de autovehicule care au trecut peste acea bară și numai atunci se poate
realiza și calculul vitezei de deplasare.
50
Pentru cuantificarea autovehiculelor, în procesarea în timp real , am utilizat următoarea
tehnică de calcul:
1. Definirea a 4 variabile în afara buclei infinite de captare a frame -urilor. 2 dintre
acestea stochează numă rul de autovehicule, iar 2 pă strează ultimul nr de intersecții
al conturului cu bara, deoarece la fiecare frame, conturul trece pixel cu pixel peste
bara verticală și va fi nevoie de un hack pentru a putea cuantifica corect numărul de
autovehicule.
// Stocheaza numarul total de autovehicule
int noOfCarsToLeft = 0;
int noOfCarsToRight = 0;
// Stocheaza ultimele valori ale intersectiilor dintre
// contur si bara
int lastRightIntersections = 0;
int lastLeftIntersections = 0;
2. Definirea a 2 variabile locale în blocul buclei infinite de captare a frame -urilor, care
se reinițializează cu 0 la fiecare iterație:
int rightIntersections = 0;
int leftIntersections = 0;
3. Calculul efectiv al numărului de autovehicule:
noOfCarsToLeft += leftIntersections < lastLeftIntersections ?
abs(leftIntersections – lastLeftIntersections) : 0;
lastLeftIntersections = leftIntersections;
noOfCarsToRight += rightIntersections < lastRightIntersections ?
abs(rightIntersections – lastRightIntersections) : 0;
lastRightIntersections = rightIntersections;
Pentru calculul vitezei de deplasare s -a utilizat aproximativ același hack, cu
specificația că prelucrarea ș i furnizarea anumitor informații a fost realizată cu scopul de a
pregăti datele necesare formulei de calcul a vitezei:
, unde v reprezintă viteza de deplasare, d reprezintă distanța parcursă,
iar t reprezintă unitatea de timp
Deci viteza ( v) reprezintă distanța ( d) parcursă de autovehicul în unitatea de timp ( t).
51
Pentru a putea explica metoda dezvoltată pentru a calcula viteza de deplasare au fost
alese câteva valori concrete pentru pregătirea datelor în vederea obținerii rezultatului dorit.
1. Camera captează 60 de frame/s
2. Dimensiunea frame -ului : 800×600 (800 pixeli pe lățime și 600 pixeli pe lungime)
3. Distanța orizontală(lățimea) planului real : 50m
4. Lățimea unui autovehicul în pixeli : 60px;
5. Numărul de frame -uri care trec de când autovehiculul atinge bara până când acesta
trece de bară : 15frame -uri
În primul rând este nevoie să se știe cât reprezintă 1 m în pixeli. Pentru aceasta se
poate calc ula simplu cu regula de 3 simplă :
800px ……………………………… 50m
X px ……………………………….. 1m
De aici rezultă că :
, de unde poate fi dedus că:
1m = 16px Ec. 5.1
Dacă lățimea unui autovehicul în pixeli = 60 pixeli și conform Ec. 5.3.5 – 1 , rezultă că
distanța în metri a autovehiculului este:
m Ec. 5.2
În acest moment avem distanța autovehiculului, distanța care va fi folosi tă în formul ă
deoarece, dup ă cum este explicat mai sus, ne intereseaz ă distan ța pe care o parcurge
autovehiculul din momentul c ând atinge bara p ână în momentul c ând a trecut de ea și deci
aceasta distan ță este exact lungimea autovehiculului.
Pentru calculul timpului poate fi aplica tă din nou regula de 3 simpl ă, astfel:
60frame -uri …………………….. 1 sec
15 frame -uri …………………….. x sec
De aici se poate deduce ușor că timpul pe care îl parcurge autovehiculul de la
momentul în care atinge bara și până în momentul în care trece de aceasta este :
Ec. 5.3
52
În acest moment sunt disponibile toate datele pregătite pentru a putea aplica formula
vitezei și anume se dispune de distanța ( d) și timpul ( t). Astfel aplicând formula vitezei,
rezultă:
Ec. 5.4
Dacă se dorește vizualizarea vitezei sub altă formă, de exemplu în km/h, atunci se pot
face conversiile de rigoare (înmulțind valoarea din metri / sec cu valoarea 3.6), astfel
rezultând :
64.8
Ec. 5.5
Bineînțeles că pentru a obține niște valori cat mai aproape de adevăr și cât mai corecte
trebuie ca partea de segmentare și de extragere a contururilor să fie cât mai corectă și exactă.
Partea aceea este cea mai importantă deoarece erori în calculele de ma i sus nu există, singura
problemă pentru ca ac este calcule să greșească sau să furnizeze rezultate eronate, este să nu
primească niște valori de input corecte, valori primite în urma segmentării și implicit ale
extragerii contururilor.
Un exemplu care poate duce la erori de calcul a vitezei este acela de a nu elimina
umbrele înainte de segmentare. Problema aici apare datorită faptului că este foarte probabil ca
2 sau mai multe autovehicule să fie foarte apropiate, iar umbra să unească contururile
acestora. Atunci cu siguranță vor apărea erori de calcul a vitezei din cauza faptului că cele 3
autovehicule vor fi văzute ca un singur contur, dimensiunea acestuia în pixeli fiind mult mai
mare decât a unui autovehicul normal și implicit Ec. 5 .2 și Ec. 5.3 vor furniza valori eronate.
Pentru a evidenția acest exemplu se poate apela la ilustrarea unui exemplu concret
din aplicație, un exemplu care a fost o problemă într -una din etapele de dezvoltare.
Alte exemple vor fi evidențiate mai târziu când va veni discuția despre probleme ce
pot apărea la partea de segmentare deoarece pot scăpa foarte simplu detalii care pot afecta
funcționalitatea aplicației și implicit să furnizeze informații eronate.
De a ceea focusul principal a fost pe furnizarea unor date corecte din toate punctele
de vedere, în timp real, ș i mai puțin pe diverse funcționalități care pot fi aduse ca îmbunătățiri
ulterioare.
În exemplul următor veți vedea încadrarea contururilor aflate într -un pătrat cu verde
și încadrarea efectivă a contururilor, păstrând forma acestora, cu roșu. Zonele încadrate
53
evidențiază problema adusă de umbre și anume c ă unește două contururi diferite, rezultând
unul singur.
5.3.6 Stocare date
Usecase : Stocare date
Overview : Stocarea informațiilor relevante legate de numărul de autovehicule și
viteza medie de deplasare a acestora într -un interval orar, pe un anumit tronson de
drum
Actori : Sistem, Camera
Precondiții : Furnizarea numă rului de autov ehicule , a vitezei medii de deplasare ș i
id-ul camerei.
Scenariul principal :
1. Aducerea datelor esențiale(id -ul camerei, numărul de autovehicule, viteza medie
de deplasare) la o formă ușor de folosit pentru stocare
2. Crearea unu i fișier cu numele care respectă următorul pattern:
[idCamera_ data:LL.ZZ.AAAA_ora:HH.MM.SS]
3. Creare unui token ce conține datel e esențiale. Token -ul trebuie să respecte
urmă torul pattern :
(timestamp , nr_autovehicule _la_stanga , viteza_medie _autovehicule_la_stanga ,
nr_autovehicule_la_dreapta, viteza_medie_autovehicule_la_dreapta )
4. Utilizarea unui timer pentru a stabili când se realizează stocarea
5. Stocarea acestui token în fișier
Postcondiții : Crearea unui fișier de stocare tokeni la începutul fiecărei zile.
Exemplu fișier:
Fig. 5.8. Numele fișierului cu extensia .mtr
Fig. 5.9. Conținut fișierului cu extensia .mtr
54
Etapa de stocare a datelor, printre altele, este o etapă importantă mai ales din
perspectiva informațiilor pe care le furnizează, cât și din perspectiva faptului că fără această
etapă, aplicația rămâne, de fapt, fără utilitate.
Stocarea datelor se realizează prin logarea acestora într -un fișier text cu extensia .mtr ,
format propriu pentru această aplicație, format care oferă posibilitatea stocării informațiilor
într-un mod unic, util, eficient și ușor din perspectiva parsării lui în vederea extragerii
informațiilor și stocării acestora în alte medii precum baze de da te, etc.
Formatul este bazat pe salvarea de token -uri ce respectă următorul pattern :
(timestamp, nr_autovehicule_la_stanga, viteza_medie_autovehicule_la_stanga,
nr_autovehicule_la_dreapta, viteza_medie_autovehicule_la_dreapta)
Fiecare token, în momentul câ nd este stocat, este unic și se salvează pe un rând diferit
din fișier. Unicitatea lui vine din utilizarea timestamp -ului care este perioada de timp din
momentul stocării.
Acest timestamp nu poate fi duplicat, la fiecare 24 de ore generându -se un alt fiși er cu
extensia .mtr unde se stochează datele pe ziua corespunzătoare.
Fig. 5.10. Continuare schemă. Stocare date
55
După cum se poate observa, aceasta este și ultima etapă a aplicației, schema fiind
identică cu cea inițială, schema usecase -ului general.
S-a descris fiecare etapă pentru a vedea pas cu pas cum se poate construi o aplicație de
la 0 în scopul dorit. La fiecare pas s -au evidențiat subetapele de dezvoltare astfel încât, într -un
final să se obțină un produs fini t care să satisfacă nevoile utilizatorilor sau beneficiarilor,
direct sau indirect; în acest caz, obținerea anumitor informații utile autorităților în vederea
fluidizării traficului rutier și a îmbunătățirii condițiilor de circulație într -un mod eficient.
5.4 Pașii algoritmului
Pentru a înțelege mult mai bine usecase -urile detaliate, se prezintă în cele ce urmează,
pașii algoritmului de monitorizare a traficului, bazat explicit pe usecase -urile deja definite.
Pașii următori sunt bazați pe utilizarea libră riei OpenCV în dezvoltarea algoritmului:
1. Crearea unui obiect VideoCapture cap(0); // default camera care primește ca
parametru id -ul camerei la care se conectează;
2. Verificare dacă s -a realizat cu succes conexiunea
if(!cap.isOpened ()) // check if we succeeded
return -1;
3. Crearea unei bucle infinite cu posibilitatea ieșirii din ea la apăsarea tastei ESC;
while(1)
{
//algoritm
if(waitKey(10) == 27)
return 0 ;
}
4. Citirea cadru cu cadru din obiectul capture care a realizat conexiunea la cameră;
while(1)
{
Mat frame;
cap >> frame;
//prelucrare frame -uri
imshow("frames", frame);
if(waitKey(10) == 27)
return 0 ;
}
5. Definirea unor bare verticale, de -a latul părții carosabile, pentru fiecare sens de
circulație din imaginea captată;
56
line(frame, Point(p1->x, p1->y), Point(p2->x, p2->y), Scalar(0, 255, 255), 5, 8);
unde p1 reprezintă primul punct pentru bara de pe primul sens de circulație, iar p2
reprezintă capătul celalalt al segmentului care creează bara. Pr in unirea celor 2 puncte
rezultă o linie(bară) de -a latul sensului de circulație. La fel se face și pentru celălalt
sens.
6. Afișarea pe ecran a vitezei inițiale (0km/h) pentru fiecare sen s de mers;
putText(frame, "Speed = " + intToString(LeftSpeed) + " km/h", Point(p1LeftLine ->x
– 40, p1LeftLine ->y – 10), FONT_HERSHEY_PLAIN , 1.2, Scalar(255, 255, 255), 1, 8);
unde LeftSpeed reprezintă viteza de deplasare a autovehiculelor care se deplasează pe
sensul de mers orientat la stânga în funcție de planul de captare a camerei, iar p1
LeftLine reprezintă punctul de sub bara corespunzătoare sensului de mers.
7. Crearea unui obiect de ti pul BackgroundSubtractorMOG2 care poate avea anumite setări
pentru detecția umbrelor și asignarea unui prag de segmentare implicit.
Ptr<BackgroundSubtractorMOG2 > = createBackgroundSubtractorMOG2(500, 50, true);
bg->setDetectShadows( true);
bg->setShadowValue(0);
bg->setShadowThreshold(0);
8. Extragerea background -ului
Mat kernel = getStructuringElement( MORPH_RECT , Size(5, 5));
Mat1b fmask;
// Background subtraction
bg->apply(frame, fmask, -1);
// Get background
Mat background = getBackground( bg);
// Clean foreground from noise
morphologyEx(fmask, fmask, MORPH_OPEN , kernel);
Obiectul background este folosit de metoda apply pentru a realiza următorii subpași:
a. Diferența dintre background și frame -ul curent din care rezultă o imagine (Matrice)
b. Segmentarea acestei imagini utilizează pragul setat la pasul 7. Implicit pragul este 0.
Dacă pragul setat este 0, atunci segme ntarea realizată de metoda apply va folosi cea mai
bună metodă de segmentare, printre care ș i OTSU, pentru a scoat e ca output o im agine
segmentată corect, o imagine binară, care conține contururile corect despărțite.
57
c. Imaginii rezultate i se va aplica o metodă de curățare a zgomotului, acest lucru
realizându -l metoda morphologyEx care aplică o deschidere a imaginii cu elementul
struct urant de tip pătrat de dimensiune 5×5 pixeli, creat în variabila kernel .
9. Dilatarea imaginii rezultate în urma extragerii background -ului
// Image enclosing
Mat dilateElement = getStructuringElement( MORPH_RECT , Size(10, 10));
dilate(fmask, fmask, dilateEl ement);
Aplicarea dilatării, cu elementul structurant de tip pătrat cu dimensiunea de 10×10
pixeli, după metoda de deschidere a imagini se realizează cu scopul de a uni eventualele
regiuni foarte apropiate care fac parte din același contur în vederea încad rării cât mai
corecte a contururilor într -un boundingRectangle (pătrat).
10. Găsirea contururilor
Capitolul 4.3 definește metoda de extragere a contururilor. Această metodă este utilizată
în OpenCV prin intermediul unei funcții denumite findContours .
vector<vector<Point>> contours;
findContours(fmask.clone(), contours, CV_RETR_TREE , CV_CHAIN_APPROX_SIMPLE );
În acest moment, structura de date contours conține, în fiecare element din vector, câte
un contur care nu este altceva decât un vector de puncte din imag ine.
11. Încadrarea contururilor într -un boundingRect (pătrat)
for (size_t i = 0; i < contours.size(); i++) {
Rect roi = boundingRect(contours [i]);
rectangle(frame, roi, colors [i]);
}
Se parcurge vectorul de contururi, după care se încadrează fiecare contur într -un
boundingRect și apoi se desenează pe ecran pătratul.
12. Identificarea centroidului pentru fiecare contur:
for (size_t i = 0; i < contours.size(); i++) {
Rect roi = boundingRect(contours [i]);
rectangle(frame, roi, colors [i]);
// Coordonatele centroidului
int x = roi.x + roi.width / 2;
int y = roi.y + roi.height / 2;
}
13. Definirea funcțiilor de intersecție a contururilor cu barele anterior definite:
58
bool isLeftBarIntersected( Rect roi, Point* p1, Point* p2) {
return ((p1->x >= roi.tl().x) && ( p2->x <= roi.br().x)) && (( roi.y >= p1->y)
&& (roi.y <= p2->y));
}
bool isRightBarIntersected( Rect roi, Point* q1, Point* q2) {
return ((roi.tl().x <= q1->x) && (q1->x <= roi.br().x)) && (( roi.y >= q1->y)
&& (roi.y <= q2->y)); }
Metoda isLeftBarIntersected este definită pentru a identifica dacă un contur a trecut
peste bara din stânga. Această metodă ajută la calculul numărului de autovehicule care
trec peste bara din stânga și calculul vitezei lor de deplasare.
Metoda isRightBarIntersected este definită pentru a identifica dacă un contur a trecut
peste bara din dreapta. Această metoda ajută la calcul ul numărului de autovehicule care
trec peste bara din dreapta și calculul vitezei lor de deplasare.
14. Cuantificarea numărului de autovehicule și calculul vitezei de deplasare
for (size_t i = 0; i < contours.size(); i++) {
// …
// Identificarea numarului d e autovehicule la stanga
if (isLeftBarIntersected(roi,p1LeftLine, p2LeftLine)) {
leftIntersections++;
// calcul viteza de deplasare -> vezi anexa
}
// Identificarea numarului de autovehicule la dreapta
if (isRightBarIntersected(roi, p1RightLine, p2RightLine)) {
rigthIntersections++;
// calcul viteza de deplasare -> vezi anexa
}
}
Acest exemplu este folosit doar pentru a relata cum se poate calcula numărul de
autovehicule care circulă într -un anumit sens și viteza de deplasare a acestora. Pentru a
folosi această metodă, care, în realitate are nevoie de anumite hack -uri pentru a
funcționa și este mult mai stufoasă, poate fi consultată anexa în secțiunea ce cuprinde
codul sursă, iar pentru informații teoretice legat de acest subiect poate fi consultat
capitolul 4.4 – Tracking
15. Stocare date sau logarea informațiilor
În această etapă se c reează un fișier cu extensia .mtr la începutul fiecărei zile, unde se
stochează datele esențiale (vezi capitolul 4.5)
59
5.5 Schema bloc a algoritmului
Fig. 5.10.a. Schema bloc a algoritmului
60
5.6 Istorie în dezvoltare aplicației de monitorizare a traficului
Ca orice altă idee de dezvoltare a unei aplicații, ideea aplicației de monitorizare a
traficului rutier a trecut prin mai multe faze încă de la început, până s -a aju ns la o idee stabilă,
la o formă închegată, un produs finit, cu tot ceea ce are nevoie pentru a satisface nevoile
principale ale utilizatorilor/beneficiarilor și anume, fluidizarea traficului rutier.
Fazele de dezvoltare, cele mai importante, prin care a trecut aplicația sunt:
1. Identificarea autovehiculelor în mișcare folosind o secvență de 2 fram e-uri consecutive
2. Identificarea autovehiculelor în mișcare într-o secvența video
3. Tracking
a. Cuantificarea numărului de autovehicule
b. Calculul vitezei medii de deplasare
Faza 1 :
Pentru a putea identifica un contur în mișcare într -o secvență de mai multe
frame -uri, foarte utilă a fost prelucrarea a 2 frame -uri consecutive care conțin o secvența
de mișcare a unui obiect și obținerea informațiilor dorite de aici.
Inițial prelucrarea a constat în identificarea contururilor din cele 2 frame -uri pri n
segmentar e și calculul distanț ei euclediene dintre centrele celor 2 contururi. Dacă
distanța era mai mare decât 0, atunci cu siguranță obiectul respectiv se află în mișcare.
Un alt element esențial a fost filtrarea contururilor pentru eliminarea celor
neesențial e, adică a cont ururilor cu o suprafață mai mică decât un prag stabilit.
Faza 2 :
Odată realizată faza 1, a fost necesară testarea algoritmului pe o secvență video
pentru a valida corectitudinea rezultatelor.
În această fază, problemele apărute au fost d e natură costisitoare din punct de
vedere al timpului de execuție. Aici a fost necesar aplicarea anumitor tehnici de
extragere a background -ului, extragere a foreground -ului, segmentare (în acest caz
OTSU) și de extragere a contururilor, metode explicate a nterior în capitolul 5.5 dar și în
capitolul 4 din punct de vedere teoretic.
Îmbunătățirea acestor metode au adus o contribuție semnificativă asupra
timpului de execuție a programului și implicit în procesarea în timp real a unei secvențe
video.
61
Faza 3:
Primele 2 faze au avut ca scop pregătirea cadrelor în vederea extragerii informațiilor din
acestea și implicit stocarea lor(logarea informațiilor) spre a fi procesate ulterior de autoritățile
competente, pentru a aduce un semnificativ ajutor în fluidiz area traficului rutier.
Tracking -ul a fost necesar pentru a identifica unic un contur (autovehicul) de la un cadru
la altul cu scopul de a calcula cât mai precis numărul de autovehicule care trec într -un anumit
sens, implicit și viteza lor de deplasare, î ntr-un anumit interval orar prestabilit.
Odată extrase aceste informații, un sigur pas a mai fost de făcut și anume: stocarea
acestora.
5.7 Probleme întâmpinate și soluții de rezolvare
Probleme:
1. Identificarea unui prag optim de segmentare
2. Unirea contururilor prin umbre
3. Cuantificarea autovehiculelor și calculul vitezei de deplasare când există mai mult de 1
banda pe sens și trec 2 sau mai multe autovehicule în același timp peste bara marcată
de-a latul părții carosabile.
Soluții:
1. Utilizarea metodei de segmentare OTSU (vezi secțiunea 2.1.2)
2. Eliminarea umbrelor utilizând spațiul culorilor HSV (vezi capitolul 1 – Transformări
RGB -HSV și capitolul 5.3.4)
3. Tracking pentru identificarea unică a autovehiculelor. În momentul în care un cont ur
trece peste bara definită la stânga sau la dreapta, atunci se realizează cuantificarea
autovehiculului respectiv și calculul vitezei lui de deplasare, indiferent de câte
autovehicule trec în același timp peste bară, acestea fiind contururi distincte. (v ezi
capitolul 4.4 si capitolul 5.3.5)
62
Exemplu care poate furniza probleme în cazul în care nu eliminăm
umbrele:
Fig. 5.11. Contururi diferite alipite de umbră
Fig. 5.12. Contururi diferite alipite de umbră – imaginea binară
63
5.8 Cazuri excepționale
De-a lungul perioadei de dezvoltare a aplicației de monitorizare a traficului
rutier au fost întâmpinate anumite dificultăți, pe lângă cele prezentate anterior la
punctual 5.7, precum dificultatea identificării autovehiculelor care au o culoar e a
caroseriei foarte apropiată de cea a asfaltului.
În etapa de segmentare este foarte dificil de identificat obiectele cu aceeași
culoare sau cu culoarea apropiată de cea a background -ului. În acest sens s -a încercat
realizarea unei amplificări a fiecăr ui cadru (nu și a background -ului) cu o anumită
valoare presetată pentru a crește intensitatea de culoare și astfel să poată fi o diferență
de culoare semnificativă între background și cadru. Acest lucru poate fi util doar în
anumite cazuri în care se observă o mică diferență de culoare între cele 2 imagini, dar
în cazul în care intensitățile sunt foarte apropiate, chiar identice, atunci nu se poate
face nimic în acest sens, iar acel contur nu este identificat după segmentare și deci este
ignorat.
64
Capitolul 6
Rezultate și concluzii
Pentru realizarea acest ei aplicații s -a utilizat o bază de date cu 5 filmulețe : 3 utilizând
o cameră fixă pe un tronson de drum cu 2 sensuri și cu 2 benzi pe sensul de circulație,
orientată perpendicular pe drum și la o distanță relativ mare, de aproximativ 20 m, iar cele lalte
2 filmuleț e, utilizând o cameră fixă pe un tronson de drum c u sens unic și cu 2 benzi pe sensul
de circulație , camera fiind fixată la o distanță de aproximativ 4m de asfalt.
Filmulețele au fost făcute în 2 zone diferite și la intervale orare diferite.
6.1 Testarea aplicației pe un drum cu sens unic
Pentru testarea ap licației pe drumul cu sens unic, s -a utilizat filmulețul corespunzător,
deci cel care conține o secvență video de pe un tronson de drum cu sens unic, la care
captarea c adrelor s -a realizat cu o cameră fixă mai apropiată de asfalt, ca în următorul
exemplu:
Fig. 6.1 . Autoturismul atinge bara de cuantificare și calcul a vitezei de deplasare
65
Fig. 6.2. Autoturismul trece peste bara de cuantificare și calcul a vitezei de deplasare
6.2 Testarea aplicației pe drum cu dublu sens
În urma procesării secvențelor video utilizate pentru testare, s -a obținut următorul
rezultat, bazat pe pașii principali ai algoritmului implementat. Cazurile , mai greu de
identificat, prezentate în secțiunea 5.8 au fost întâmpinate pe parcursul testării aplicației pe un
drum cu dublu sens de circulație .
1. Conectarea la camera fixă se realizează conform secțiunii 5.3.2.
2. Inițializare background (Extragerea background -ului dintr -o secvență de 60 de cadre)
Fig. 6. 3. Backgroundul inițial
66
3. Captarea frame -urilor(se realizează captarea frame cu frame cu viteza de captare
corespunzătoare camerei: 30fps, 60fps, etc…)
Fig. 6. 4. Captarea frame -urilor consecutive
4. Actualizare a background -ului (Extrag erea unui nou background când nu se detectează
mișcar e semnificativă în secvența video)
5. Eliminarea umbrelor din frame -ul curent (Vezi secțiunea 5.3.4)
Fig. 6.5. Frame -ul curent
Fig. 6. 6. Detecția umbrelor în frame -ul curent
67
Fig. 6.7 . Eliminarea umbrei din frame -ul curent
6. Extragerea foreground -ului
a. Realizarea diferenței absolute dintre frame -ul curent și background
Fig. 6. 8. Frameul curent
Fig. 6. 9 – Background -ul
68
Fig. 6.10 – Diferența absolută dintre background și frame -ul curent
b. Segmentarea rezultatului obținut în urma diferenței absolute
Segmentarea se realizează în urma pasului anterior, utilizând metoda
OTSU pentru a identifica pragul optim de segmentare . Astfel, ut ilizând pragul
returnat de metoda OTSU, urmată de o dilatare (pentru unirea tuturor
regiunilor foarte apropiate), se obține următorul rezultat:
Fig. 6.1 1. Conturul rezultat în urma segmentării
69
c. Extragerea contururilor autovehiculelor aflate în mișcare
Fig. 6.12 . Încadrarea autovehiculului (conturului) înaintea eliminării umbrei
Fig. 6.13. Încadrarea autovehiculului (conturului) după eliminare a umbrei
70
7. Cuantificarea și calculul vitezei de deplasare a autovehiculelor
Fig. 6.14. Autoturismul atinge bara, moment în care se începe procedura de cuantificare și de calcul a vitezei de
deplasare
Fig. 6.1 5. Autoturismul trece de bară, moment în care se incrementează numărul de autovehicule și se afișează
viteza de deplasare
8. Calculul vitezei medii de deplasare pentru fiecare sens de circulație și salvarea token –
ului corespunzător într -un fișier cu extensia .mtr.
71
6.3 Validarea rezultatelor obținute în urma procesării secvenței video
Pentru interpretarea rezultatelor furnizate de aplicație , s-a realizat un experiment în
vederea identificării frecv enței de apariție a autovehiculelor .
Experimentul a fost realizat cu ajutorul a 5 filmulețe, relevante, prin înregistrări ale
traficului rutier în diferite intervale orare, iar unele c hiar în zone diferite.
Nr.
Crt. Nume
video Durata
video Sens
circulație Autovehicule
realitate Autovehicule
identificate Scor de
identificare
corectă (%)
1 V1_test 1min Dublu 10 9 90%
2 V2_test 1min Dublu 13 11 84.6%
3 V3_test 1min Unic 4 4 100%
4 V4_test 1min Unic 6 6 100%
5 V5_test 1min Dublu 34 28 82.35%
Total 67 58 86.56 %
Tabel 6 .1. Table informativ – cuantificare autovehicule
Grafic 6 .1. Grafic care ilustrează diferențele dintre autovehiculele prezente în video și cele identificate corect de
către soft
Din acest experiment reiese un sc or de identificare corectă de 86.56 %, ceea ce este
destul de bine având în vedere cazuri excepționale pr ezentate, și de altfel foarte greu de
depistat. De menționat faptul că în niciunul dintre filmulețe nu se de tectează fals -pozitive
(adică nu se detecte ază mașini atunci când nu este cazul) , care să ducă le eronarea
numărului de mașini sau al vitezei medii.
Pentru a valida și rezultatele legate de viteza de deplasare a autovehiculelor și astfel, să
obținem gradul de încredere al softului, s -a realizat un experiment practic, care constă în
realizarea unei secvențe video care să cuprindă printre cadrele ei și o persoană ce conduce un
autoturism pe un tronson de drum. Autoturismul este condus cu o viteză cunoscută. 0 5 10 15 20 25 30 35 40
V1_test V2_test V3_test V4_test V5_test Autovehicule realitate
Autovehicule identificate
corect
72
Experimentul constă în filmarea bordului autoturismului, atașat lângă acesta și un
smartphone ce rulează o aplicație de calcul a vitezei reale de deplasare, pe lângă fil marea
autoturismului cu o cameră fixă, poziționată vertical.
După cum bine se știe, bordul autoturismelor nu indică foarte precis viteza de deplasare.
Majoritatea vitezometrelor au o eroare tolerată de 10% . Aici intră uzura pneurilor,
temperatura ambientală, încărcarea automobilului. Există, de asemenea, acorduri
internaționale care au stabilit că viteza indicată de vitezometru nu trebuie să fie niciodată mai
mică decât viteza actuală. În același timp, acel eași acorduri spun că viteza indicată nu trebuie
să fie mai mare decât 110% plus 4 km/h . De exemplu, la 80 km/h reali, viteza indicată nu
trebuie să depășească 92 km/h.
Regulile Uniunii Europene impun fabricanților de vitezometre teste efectuate la 40, 80 și 120
km/h. Pentru alte categorii de vehiculele, regulile sunt ceva mai relaxate. Camioanele și
autobuzele trebuie să aibă vitezometre ce indică 110% plus 6 km/h, iar scuterele sau alte
vehicule pe două sau trei roți ce au o viteză maximă de 50 km/h trebu ie să indice 110% plus 8
km/h. [17i]
Acesta este motivul pentru care s -a ales folosirea unei soluții paralele de calcul a vitezei
de deplasare.
Aplicația utilizată este o aplicație free(fără costuri financiare), descărcată de pe
magazinul oficial al celo r de la Google, Play Store, și se numește GPS Test. Se știe foarte clar
că rezultatele legate de viteza de deplasare, calculate cu ajutorul GPS -ului nu sunt 100% reale,
ele fiind aproximate.
Vitezometrul măsoară viteza prin aproximare. Adică, el știe că roata se învârte de 500 de ori
pe minut. O anvelopă de 205/55/16 are circumferința (16*2.54+2*55)*3.14 = 162.14 cm.
Asta înseamnă, că mașina parcurge 500*1.62 = 810m într -un minut, adică 48.6 k m într -o oră.
Principala problemă e că circumferința roții nu e niciodată aceea fiindc ă anvelopa e ste totuși
elastic ă, iar circumferin ța depinde de presiune, temperatur a de afar ă, umiditate, etc. GPS -ul
funcționeaz ă altfel. El m ăsoară cu ajutorul satelitul ui, distan ța parcursă de ma șină. Chiar
dacă precizia lui e de 5 -10m (pentru modelele comerciale) aceasta reprezint ă precizia pentru
coordonatele geografice. Distan țele le m ăsoară mult mai precis (cu precizii de cm). În cazul
de sus, ma șina parcurge 13.5m într-o secund ă. O eroare de 5 cm în plus înseamn ă 48.78 km/h
față de 48.6km/h. În cazul ro ții, o dilatare de 1cm se traduce într-o vitez ă reală de 49.58km/h
(cea indicat ă fiind 48.6km/h). [18i]
Următorul pas al experimentului constă în utilizarea filmulețului, rezultat în urma
înregistrării cu cameră fixă, ca input la soft -ul realizat, procesarea acestuia și extragerea
informației legate de viteza de deplasare a autovehiculelor din cadrele lui.
73
Ultimul pas se referă la realizarea unui studiu comparativ între viteza de deplasare citită de
pe bordul autovehiculului, viteza de deplasare citită de pe aplicația GPS Test și viteza de
deplasare calculată de soft -ul de monitorizare a traficului rutier , la același moment de timp .
Deși, după cum s -a înțeles că ar exista erori de calcul î n fiecare dintre aceste variante, viteza
de deplasare ar trebui totuși să conțină valori destul de apropiate.
Fig. 6.16 . Afișarea vitezei de la bordul autovehiculului și viteza calculată cu aplicația de android
Fig. 6.1 7. Afișarea vitezei calculate de aplicația curentă, Monitorizarea traficului rutier
74
Următorul grafic evidențiază diferențele dintre cele 3 surse de calcul a vitezei de deplasare
a autovehiculelor:
Grafic 6 .2. Viteza autovehiculelor, calculată cu ajutorul a 3 medii de calcul diferite
Pe baza graficului 6.2 se poate observa că aplicația de monitorizare a traficului
rutier are o abatere procentuală de -2,5% față de viteza autovehiculului (pe baza informațiilor
citite din bord), iar față de viteza indicată de aplicația android cu GPS, are o abatere
procentuală de 8,33%.
Abaterea procentuală a fost calculată astfel:
6.4 Concluzii
Pe baza testelor realizate, rezultatele softului de monitorizare a traficului variază în
cea mai mare măsură din cauze generate de mediu, luminozitate, distanța de captare a
secvenței video, elemente ce pot furniza erori în efectuarea unei segmentări cât mai bune.
Rezultatele calculului vitezei de deplasare și de cuantificare a numărului de autovehicule sunt
influențate de elementele precizate mai sus, dar aducând anumite îmbu nătățiri segmentării și
implicit, eliminarea problemelor apărute la segmentare din cauza acestor elemente, pot aduce
un aport important în furnizarea unor rezultate cât mai corecte.
Varia ția rezultatelor legate de cuantificarea numărului de autovehicule, d upă cum a
fost explicată și în subcapitolul 5.9, poate produce ușoare rezultate eronate, precizia acesteia 34 35 36 37 38 39 40 41
Viteză Vitezometru bord
Aplicatie GPS Test
Soft Monitorizare Trafic
Rutier
75
fiind de aproximativ 90 %(86.56% mai exact) în cazurile cele mai defavorabile(fixarea
camerei la o dista nța foarte mare, iluminare slabă sau abundent ă, etc.). În cazurile cele mai
favorabile (camera fix ă foarte aproape de autovehicule), identificarea autovehiculelor are o
rată de succes de 100%.
Varia ția rezultatelor legate de calculul vitezei de deplasare a autovehiculelor, după
cum a fost explicată și în subcapitolul 5.9, furnizează deseori rezultate variabile, rezultate care
variază până la o eroare de 10% , față de rezultatele furnizate de celelalte două medii de calcul
și anume, vitezometrul de la bordul autovehiculului și aplicația de android n umită GPS Test.
În cazul prezentat în graficul 5.2 se observă foarte ușor că diferențele furnizate de cele
3 medii sunt destul de apropiate, dar acolo este prezentat doar un caz. Experimentul a fost
realizat pe baza unei secvențe video ce conține mai multe dintre variații le vitezei calculate de
către soft față de cele calculate de vitezometrul de la bordul autovehiculului și de aplicația de
pe android(smartphone). Oricum, scopul aplicației este să furnizeze informații legate de
viteza medie și deci, viteza medie urmează a fi stocată în vederea prelucrării ulterioare a
acesteia; așa că prin calculul mediei se vor compensa valorile vitezei prea ridicate cu cele prea
scăzute. Astfel, în u rma testelor, se poate afirma că rezultatele sunt satisfăcătoare în acest
context.
Se poate concluziona, de ci, că aceste rezultate furnizat e de aplicație ar putea fi utilizate
cu succes de către autoritățile competente în vederea fluidizării traficului rutier, oferind o
soluție ieftină, sigură, cu grad ridicat de încredere în rezultatele furnizate, care să ofere
autorităților informațiile neces are luării unor decizii rapide ș i eficiente pentru fluidizarea
traficului rutier, rezolvâ nd astfel, atât problemele noastre ca cetățeni care utilizăm mijloacele
de transport în comun, cât și problema șoferilor sau a conducătorilor auto , de a nu mai pierde
timp util la cozi interminabile sau în blocaje nedorite. De altfel, se pot aduce noi îmbu nătățiri
sau noi caracteristici de dezvoltat în vederea rezolvării și a altor probleme, pe lângă cele
prezentate, aplicația fiind dezvoltată astfel încât să permită acest lucru.
76
Bibliografie
1. Rafael C. Gonzalez, Richard E. Woods, “ Digital Image Processing ”, 2002 by
Prentice -Hall, ISBN 0 -201-18075 -8
2. David A. Forsyth , Jean Ponce, Computer Vision: A Modern Approach , Prentice -Hall
2003, ISBN 0 -13-085198 -1
3. William K. Pratt, Digital Image Processing , SBN: 0471221325 (Electronic)
0471374075 (Print) , Copyrigh t © 2001 John Wiley & Sons, Inc
4. C. Neghină, A. Sultana, M. Neghină, “ MATLAB. Un prim pas spre cercetare ”, Editura
Universității “Lucian Blaga”, ISBN: ISBN 978 -606-12-1213 -2, Sibiu, 2016
5. http://depositphotos.com/stock -footage/car.html
6. N. Otsu, “ A Threshold Selection Method from Gray -Level Histograms ”, IEEE
Transactions on Systems, Man, and Cybernetics, Vol. 9, No. 1, pp. 62 -66, 19 79
7. M. Ivanovici, „Prelucrarea Imaginilor", notite de curs, 2000 -2001.
8. C-tin. Vertan, „Prelucrarea si Analiza Imaginilor", slide -uri curs, 2007 -2008.
9. M. Ivanovici, „Prelucrarea Imaginilor", slide -uri curs, 2008 -2009.
10. C-tin. Vertan, „Prelucrarea si Analiza Imaginilor", 1999.
Internet :
1i. http://www.livetraffic.ro/utile/amplasare -radare -camere -dn1.php
2i. http://www.promotor.ro/masini -noi/news/cand -vor-functiona -radarele -fixe-de-pe-dn-
1-raspunsul -politiei -romane -14977688
3i. R.Brehar, ”Procesarea imaginilor – Laborator 2”,
http://users.utcluj.ro/~raluca/ip_2014/PI -L2r.pdf
4i. A. Gellert, R. Brad, ” Procesarea Imaginilor – Aplicații”,
http://webspace.ulbsibiu.ro/arpad.gellert/html/PI.pdf
5i. http://www.shervinemami.info/colorConversion.html
6i. http://www.miv.ro/ro/docu mentatie/pi/PIlab10.pdf [7],[8 ],[9],[10]
7i. http://www.math.tau.ac.il/~turkel/notes/otsu.pdf
8i. https://www.youtube.com/watch?v=OXFZwIwhEgw
77
9i. R. Gabriel Danescu , ”Procesarea imaginilor – Curs 6: Procesarea imaginilor de
intensitate.Prelucrări bazate pe
histogramă”, http://users.utcluj.ro/~rdanescu/pi_c06.pdf
10i. http://alpha.imag.pub.ro/ro/cursuri/archive/ai_curs7.pdf
11i. http://alpha.imag.pub.ro/~bionescu/index_files/TAPAI_BIonescu_M7.pdf
12i. http://docs.opencv.org/3.0 –
beta/modules/videoio/doc/reading_and_writing_video.html
13i. http://docs.opencv.org/master/db/d64/tutorial_load_save_image.html#gsc.tab=0
14i. http://docs.opencv.org/3.1.0/d1/dc5/tutorial_background_subtraction.html#gsc.tab=0
15i. http://www.labbookpages.co.uk/software/imgProc/otsuThreshold.html
16i. http://andrei.clubcisco.ro/cursuri/f/f -sym/5master/analiza -extragerea –
continutului/6_Algoritmi%20generali%20de%20binarizare.%20P –
tile%20thresholding.%20Optimal%20thresholding.pdf
17i. http://www.automarket.ro/stiri/feature -de-ce-te-pacale ste-vitezometrul -40791.html
18i. http://www.zoso.ro/viteza -de-pe-gps-e-cea-reala/
19i. https://www.youtube.com/watch?v=FM22gwXvFCw
20i. https://www.dfki.de/web
21i. https://www.youtube.com/watch?v=z1Cvn3_4yGo
22i. https://www.behance.net/gallery/Vehicle -Detection -Tracking -and-Counting/4057777
23i. C. VERTAN, „Laboratorul de analiza și prelucrarea imaginilor” –
http://imag.pub.ro/ro/cursuri/archive/color.pdf
24i. https://en.wikipedia.org/wiki/HSL_and_HSV
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: V17 Proiect De Diploma Draghici Ciprian [628560] (ID: 628560)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
