Vous êtes sur la page 1sur 5

Interesul in crestere pentru dezvoltarea de sisteme de supraveghere video automate a reinnoit

nevoia de algoritmi de incredere si rapizi pentru detectarea miscarii. Astfel de algoritmi trebuie sa
partitioneze pixelii din fiecare cadru al secventei de imagini in doua categorii (clase): fundalul,
corespunzator pixelilor care apartin scenei statice, si prim-planul, corespunzator pixelilor care apartin
unui obiect in miscare.
Un algoritm pentru detectarea miscarii trebuie sa diferentieze obiectele in miscare de fundal cat mai
exact posibil, fara sa fie prea sensibili la marimea sau viteza obiectului ori la schimbarile fundalului.
Pentru o mai mare autonomie, sistemul nu trebuie sa consume prea mult din resursele de calcul
(energie si circuite). Deoarece implica o cantitate mare de date, ca orice alt modul de procesare a
imaginii, detectarea miscarii este, cu siguranta, cel mai mare consumator de resurse al unui sistem
video de supraveghere.
Tehnicile de sustragere a fundalului au fost foarte atent studiate timp de multi ani. Recent, s-au
propus metode noi de sustragere a fundalului bazate pe estimarea . Aceste metode sunt foarte
atractive din punctul de vedere al calculului deoarece folosesc doar comparatia, incrementarea si
diferenta absoluta, in timp ce alte metode mai robuste precum estimarea Gaussiana folosesc mai
multa putere de calcul.

Substractia (sustragerea) fundalului cu ajutorul modulatiei


(Modulatie Sigma-Delta) este un DSP (proces de manipulare matematica a informatiei unui
semnal pentru a il modifica sau imbunatati) care codifica semnalele analogice in semnale digitale. De
asemenea, este utilizata pentru a transfera semnale digitale cu rezolutie mare in semnale digitale cu
rezolutie mai mica, ca parte a procesului de convertire a semnalului digital in analog.
Principiul de baza al algoritmului este estimarea parametrilor fundalului utilizand modulatia , un
instrument foarte comun in transformarea semnalelor din analog in digital.
Avand in vedere un semnal variabil in timp ft (continuu sau discret), putem estima un semnal discret
dt prin cuantificarea indicilor de timp {ti}, iN si prin efectuarea urmatoarelor actualizari pentru
fiecare indice de timp, i:
Daca dti1 < fti
atunci dti = dti1
daca nu, dti = dti1 + ,
unde este pasul de discretizare(cel mai putin semnificativ bit) al lui dt
In acest algoritm, semnalul de intrare este valoarea fiecarui pixel la un moment dat, It, moment de la
care vom calcula prima estimare a fundalului, notata Mt. Apoi, diferentele absolute |It Mt| sunt
folosite pentru a calcula a doua estimare a fundalului, notata Vt, care este un parametru al
dispersiei.

1. Algoritmul de baza pentru


1 foreach pixel x do [step #1: Mt estimation]
2
if Mt1(x) < It(x) then Mt(x) Mt1(x) + 1
3
if Mt1(x) > It(x) then Mt(x) Mt1(x) 1
4
otherwise Mt(x) Mt1(x)
5 foreach pixel x do [step #2: Ot computation]
6
Ot(x) = |Mt(x) It(x)|
7 foreach pixel x do [step #3: Vt update]
8
if Vt1(x) < N Ot(x) then Vt(x) Vt1(x) + 1
9
if Vt1(x) > N Ot(x) then Vt(x) Vt1(x) 1
10
otherwise Vt(x) Vt1(x)
11
Vt(x) max(min(Vt(x), Vmax), Vmin)
12 foreach pixel x do [step #4: Et estimation]
13
if Ot(x) < Vt(x) then Et(x) 0 else Et(x) 1
In algoritmul de baza pentru , fundalul Mt si variatia Vt sunt actualizate in fiecare cadru in functie
de comparatia dintre Imaginea curenta It si diferenta absoluta curenta Ot. N este un factor de
amplificare pentru Vt, ce permite calcularea etichetei de miscare, E, prin simpla comparare a lui Ot si
Vt. Valorile tipice ale lui N variaza intre 1 si 4. Vmax si Vmin sunt 2 parametri utilizati pentru a controla
overflow-ul lui Vt, care s-ar putea intampla daca unii pixeli sunt saturati. Valorile acestora sunt 2,
respectiv, 2m-1, unde m este numarul de biti al reprezentarii.
2. Algoritmul imbunatatit: conditional
1 foreach pixel x with do *step #1: conditional Mt update]
2
if Et1(x) = 0 then
3
if Mt1(x) < It(x) then Mt(x) Mt1(x) + 1
4
if Mt1(x) > It(x) then Mt(x) Mt1(x) 1
5
otherwise Mt(x) Mt1(x)
6
else
7
Mt(x) Mt1(x)
8 foreach pixel x do [step #2: Ot computation]
9
Ot(x) = |Mt(x) It(x)|
10 foreach pixel x do [step #3: Vt update]
11
if Vt1(x) < N Ot(x) then Vt(x) Vt1(x) + 1
12
if Vt1(x) > N Ot(x) then Vt(x) Vt1(x) 1
13
otherwise Vt(x) Vt1(x)
14
Vt(x) max(min(Vt(x), Vmax), Vmin)
15 foreach pixel x do [step #4: Et estimation]
16
if Ot(x) < Vt(x) then Et(x) 0 else Et(x) 1
Versiunea conditionata a algoritmului utilizeaza feedback-ul relevant dat de pozitia estimata a
obiectelor in miscare in cadrul anterior, dat de Et1. Consta in actualizarea lui Mt si/sau Vt doar pentru
pixelii x, pixeli considerati ca facand parte din fundal. Acest algoritm previne integrarea obiectelor
aflate in miscare in fundal si/sau modificarea variatiei zgomotului.

Fig. 1. conditional
3. Estimarea Zipfian
Versiunea Zipfian este bazat pe relatia dintre estimarea si estimarea statistica, folosind o
distributie Zipf-Mandelbrot, din care reiese ca frecventa actualizata a fundalului ar trebui sa fie
proportionala cu dispersia distributiei (variantei). In aceasta varianta a algoritmului, mai intai trebuie
calculat un prag care variaza conform indexului de cadru, t: este valoarea indexului modulo 2m, (m
este numarul de biti al reprezentarii). este valorea a celei mai mari puteri a lui 2 care imparte . Iar
pragul , este egal cu 2m impartit la . Rezultatul este ca pixelii x, pentru care Vt(x)>2m-k vor fi
actualizati la fiecare 2k-1 cadre, pentru k {1, m}. Pentru a evita auto-referinta, varianta Vt este
actualizata folosind o constanta periodica TV (o putere a lui 2, intre 1 si 64). TV, ca si parametrul
amplificarii, N, poate fi modificat automat folosind o metoda simpla de estimare a zgomotului, care
consista in numararea pixelilor izolati in etichetele E.
1 [step #0: Variance threshold computation]
2 find the greatest 2p that divides (t mod 2m)
3 set = 2m/2p
4 foreach pixel x do [step #1: conditional Mt estimation]
5
if Vt1(x) > then
6
if Mt1(x) < It(x) then Mt(x) Mt1(x) + 1
7
if Mt1(x) > It(x) then Mt(x) Mt1(x) 1
8
otherwise Mt(x) Mt1(x)
9
else
10
Mt(x) Mt1(x)
11 [ foreach pixel x do [step #2: Ot computation]
12
Ot(x) = |Mt(x) It(x)|
13 foreach pixel x do [step #3: update Vt every TV frames]
14
if t mod TV = 0 then
15
if Vt1(x) < N Ot(x) then
16
Vt(x) Vt1(x) + 1
17
if Vt1(x) > N Ot(x) then
18
Vt(x) Vt1(x) 1
19
otherwise Vt(x) Vt1(x)
20
Vt(x) max(min(Vt(x), Vmax), Vmin)
21 foreach pixel x do [step #4: E t estimation]
22
if Ot(x) < Vt(x) then Et(x) 0 else Et(x) 1

4. Algoritmul ierarhic
Algoritmul ierarhic este o versiune bi-nivel a filtrarii . Fiecare bloc implementeaza algoritmul de
baza #1 al algoritmului #3. Ambele blocuri folosesc modificarea conditionata. La nivelul de jos este o
actualizare conditionala temporala: Mt1 si Vt1 sunt actualizate in functie de E1t-1. La nivelul de sus este
o actualizare conditionala spatiala:M0t si V0t sunt actualizate in functie de E0t, supraesantionarea
binara a lui E1t. Factorul de subesantionare se afla in intervalul [2, 10] si este stabilit in functe de
marimea zgomotului. In cele din urma, o post-procesare morfologica este aplicata in 2 etape. In
prima etapa sunt indepartati pixelii de sine statatori care sunt considerati zgomot, iar a doua etapa
este o inchidere morfologica de 3x3.

Fig. 2. Algoritmul ierarhic


Rezultate obtinute cu acesti algoritmi:

Fig. 3. Secventa hol