Sunteți pe pagina 1din 11

Interfet, e om-calculator

Metoda Harris de detect, ie a colt, urilor


din imagini

Student, i: Aurică Alina, Aldea Ovidiu-Alexandru

Profesor ı̂ndrumător: Tiberiu Marit, a

Grupa 30643, An 4, TI
Contents
1 Introducere 2

2 Obiective proiect 2

3 Studiu bibliografic 2

4 Analiză s, i fundamente teoretice 2

5 Proiectare de detaliu s, i implementare 4


5.1 Funct, ia harris(img, threshold, k) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.2 Funct, ia harrisr gb(img, threshold, k) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.3 Funct, ia convolve(img, kernel) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

6 Testare s, i validare 6

7 Manual de instalare s, i utilizare 8

8 Concluzii 9

1
1 Introducere
Proiectul de fat, ă are ca scop crearea unei implementări proprii pentru metoda Harris de detect, ie
de colt, uri, atât ı̂n imagini grayscale, cât s, i ı̂n imagini color. Această metodă este utilizată cu precădere
ı̂n computer vision, deoarece se ocupa cu extragerea de feature-uri necesare pentru detect, ia mis, cărilor,
recunoas, terea de obiecte, reconstruct, ii 3D, image registration s, i video tracking.

2 Obiective proiect
Obiectivul principal pentru imaginile grayscale este să reus, im să obt, inem prin algoritmul nostru
(care respectă pas, ii descris, i ı̂n curs) aproximativ aceleas, i rezultate pe care le-am obt, ine dacă am utiliza
funct, ia Harris predefinită ı̂n librăria OpenCV.
Celălalt obiectiv al proiectului este să implementăm o metodă care să aplice algoritmul Harris s, i
să poată fi folosit pe imaginile color. Acest lucru nu poate fi ı̂ncă realizat de funct, ia predefinită ı̂n
librăria OpenCV.

3 Studiu bibliografic
Cercetările pentru metoda Harris de detect, ie de colt, uri pe imagini grayscale au ı̂nceput de la
documentat, ia din librăria OpenCV a funct, iei cv.cornerHarris() [1]. Aceasta a cont, inut, pe scurt, un
rezumat despre formulele din spatele funct, iei s, i despre senmificat, iile fiecărui termen ı̂n parte. Pentru
dezvoltările acestora (explicat, iile matematice din spatele obt, inerii matricei de autocorelat, ie), cât s, i
pentru obt, inerea detaliată a pas, ilor algoritmului am studiat Interact, iune Om-Calculator, Cursul 4,
Universitatea Tehnică din Cluj-Napoca [2] s, i Computer Vision, CUrsul 6.2, Universitatea Carnegie
Mellon [3]. Cursul de Interact, iune Om-Calculator a constituit baza pentru modificarea algoritmului
să funct, ioneze s, i pe imagini color.

4 Analiză s, i fundamente teoretice


După cum am ment, ionat mai sus, scopul proiectului a fost să creăm o implementare proprie a
algoritmului s, i să-l adaptăm să poată fi aplicat s, i pe imagini color, nu numai pe imagini grayscale.
Pentru aceasta, am urmat pas, ii de construct, ie ai algoritmului, pe care ı̂i voi reda mai jos:

1. Pentru fiecare pixel P(x, y) din imagine se calculează matricea M de autocorelat, ie.

Definit, ie: Matricea de autocorelat, ie este rezultatul maximizării prin funct, ii Taylor a variat, iei
intensităt, ii pentru o fereastră w(x, y) shiftată cu deplasamentul (u, v).

Figure 1: Variat, ia intensităt, ii ı̂n punctul P(x, y) pentru o fereastră w(x, y) shiftată cu deplasamentul
(u, v)

2
Figure 2: Aproximarea variat, iei intensităt, ii după aplicarea funct, iilor Taylor

Figure 3: Matriciea de autocorelat, ie pentru imagini grayscale

Legendă:

Ix s, i Iy
= operatori diferent, iali care descriu geomatria ”suprafet, ei” ı̂n puntul (x, y) din punct de
vedere al variat, iei intensităt, ii; se pot obt, ine prin aplicarea unor matrici de tip Sobel.

w(x, y) = f ereastră cu ponderi gaussiene.

Figure 4: Matriciea de autocorelat, ie pentru imagini color

Legendă:

Rx s, i Gx s, i Bx
= operatori diferent, iali pe fiecare canal (RGB) care descriu geomatria ”suprafet, ei” ı̂n puntul
(x, y) din punct de vedere al variat, iei intensităt, ii; se pot obt, ine prin aplicarea unor matrici
de tip Sobel.

Sσ = f ereastră cu ponderi gaussiene.
2. Se calculează matricea de răspuns R(x, y) pentru fiecare pixel P(x, y).

Figure 5: Matricea de răspuns

3. Se filtrează matricea de răspuns R(x, y) prin thresholding:


R < threshold => R(x, y) = 0
.

3
4. Se aplică ”non-maximum supression”: se ret, in maximele locale, iar restul valorilor devin 0.
5. Toate puntele rămase sunt colt, uri.
Interpretarea matricei de răspuns (valoare a ”tăriei” colt, ului ı̂n punctul respectiv) se regăses, te mai
jos s, i ajută la clasificarea punctelor ı̂n una din cele 3 categorii: ”flat” point, ”edge” point s, i ”corner”
point.

Figure 6: Interpretare matrice de răspuns

5 Proiectare de detaliu s, i implementare


Pentru implementarea algoritmului Harris de detect, ie a colt, urilor am ales ca limbaj de programare
Python, iar ca librării ajutătoare: OpenCV (cv2) s, i numpy. Codul se imparte: ı̂ntr-un modul de main,
unde au loc apelurile de testare a codului pe imagini color s, i grayscale, ı̂n 2 funct, ii principale: harris()
s, i harris rgb() care reprezintă implementările propriu-zise ale algoritmului s, i o funct, ie convolve() care
aplică operat, iile de convolut, ie utilizând Soleb s, i Gauss.
Librăria OpenCV oferă funct, ii speciale pentru lucrul cu imagini. Numpy este utilizat pentru
operat, ii pe vectori s, i matrici. Matricile Sobel s, i Gauss sunt reprezentate prin intermediul unor Kernel-
uri patratice, de dimensiuni impare:

SOBEL X = np . a r r a y ( (
[ −1 , 0 , 1 ] ,
[ −2 , 0 , 2 ] ,
[ −1 , 0 , 1 ] ) , dtype=” i n t 3 2 ” )

SOBEL Y = np . a r r a y ( (
[ −1 , −2, −1] ,
[0 , 0 , 0] ,
[ 1 , 2 , 1 ] ) , dtype=” i n t 3 2 ” )

4
GAUSS = np . a r r a y ( (
[1/16 , 2/16 , 1/16] ,
[2/16 , 4/16 , 2/16] ,
[ 1 / 1 6 , 2 / 1 6 , 1 / 1 6 ] ) , dtype=” f l o a t 6 4 ” )

5.1 Funct, ia harris(img, threshold, k)


În cadrul acestei funct, ii am implementat Harris Corner pentru imagini grayscale. Parametrul
img reprezintă imaginea pe care dorim să realizăm detect, ia, threshold este un parametru ales arbitrar
pentru a se realiza filtrarea prin thresholding a matricii de răspuns, iar k este factorul liber (egal cu
proport, ia dintre recall s, i precision) din formula matricii de răspuns (poate lua valori intre 0.04 s, i 0.15
s, i e setat default pe 0.04). Pas, ii implementării sunt următorii:

1. Se realizează o copie a imaginii sursă - pe ea se vor marca colt, urile detectate.


2. Se transformă imaginea ı̂n grayscale.
3. Se aplică operat, ii de convolut, ie cu Sobel, atât pe OX, cât s, i pe OY pentru obt, inerea variat, iei
intensităt, ilor.

4. Se obt, ine matricea de autocorelat, ie ı̂nainte de filtrarea gaussiană.


5. Se realizează filtrarea gaussiană s, i se obt, ine matricea de autocorelat, ie.
6. Se calculează matricea de răspuns, se afis, ează s, i se normalizează.
7. Se convertes, te matricea normalizată ı̂n grayscale.

8. Se aplică filtrarea prin thresholding s, i apoi non-maximum supression.


9. Puntele rămase sunt punctele de colt, s, i se marchează pe copia imaginii init, iale.

5.2 Funct, ia harrisr gb(img, threshold, k)


În cadrul acestei funct, ii am implementat Harris Corner pentru imagini color. Parametrii au aceeas, i
ı̂nsemnătate ca pentru funct, ia harris(). Pas, ii implementării sunt următorii:
1. Se realizează o copie a imaginii sursă - pe ea se vor marca colt, urile detectate.
2. Se ı̂mparte imaginea pe canale RGB.
3. Se aplică operat, ii de convolut, ie cu Sobel, atât pe OX, cât s, i pe OY pe fiecare canal pentru
obt, inerea variat, iei intensităt, ilor.
4. Se obt, ine matricea de autocorelat, ie ı̂nainte de filtrarea gaussiană.
5. Se realizează filtrarea gaussiană s, i se obt, ine matricea de autocorelat, ie.
6. Se calculează matricea de răspuns, se afis, ează s, i se normalizează.

7. Se convertes, te matricea normalizată ı̂n grayscale.


8. Se aplică filtrarea prin thresholding s, i apoi non-maximum supression.
9. Puntele rămase sunt punctele de colt, s, i se marchează pe copia imaginii init, iale.

5
5.3 Funct, ia convolve(img, kernel)
Această funct, ie este folosită pentru aplicarea de convolut, ii cu matricile Sobel s, i gaussiene, Img
reprezintă imaginea pe care se aplică convolut, ia (sau canalul de culoare), iar kernel-ul reprezintă ma-
tricea de convolut, ie care se aplică. Pas, ii aplicării operat, iei de convolut, ie sunt:

1. Se verifică dimensiunile kernel-ului: acestea trebuie să fie impare s, i egale.


2. Se creează o copie goală a imaginii init, iale.

3. Se parcurge imaginea, se formează o matrice cu valorile din imagine corespunzătoare cu pozit, iile
kernel-ului s, i după se aplică convolut, ia.
4. Se normalizează imaginea rezultat ı̂ntre 0 s, i 255, dacă este cazul.

6 Testare s, i validare
Partea de testare a fost realizată prin intermediul funct, iei main(). S-au folosit 6 imagini diferite: 3
dintre ele ı̂n format grayscale, pentru apelul funct, iei harris() s, i celelalte 3 color pentru apelul funct, iei
harris rgb(). Pas, ii de testare sunt următorii:

1. Citirea cu ajutorul funct, iei imread() a imaginii pe care dorim să testăm.
2. Afis, area imaginii sursă cu ajutorul funct, iei imshow().
3. Aplicarea pe imaginea sursă a funct, iei harris() cu parametrul threshold specificat.
4. Afis, area imaginii cu colt, urile detectate.

Validarea rezultatelor obt, inute s-a putut realiza doar pe imagini grayscale prin compararea celor
produse de apelul funct, iei cornerHarris() ı̂n cadrul lucrării de laborator nr. 5, cu cele produse de apelul
funct, iei noastre. Câteva dintre aceste imagini finale vor fi redate mai jos.
Pentru k = 0.04 s, i threshold = 150.

Figure 7: Imaginea rezultat a algoritmului nostru

6
Figure 8: Imaginea rezultat prin aplicarea cornerHarris()

Rezultat mult mai similar cu al nostru se obt, ine pentru k = 0.04 s, i threshold = 120.

Figure 9: Imaginea rezultat prin aplicarea cornerHarris()

Se observă, as, adar, că algoritmul nostru obt, ine performant, e asemănătoare decât funct, ia pre-
definită ı̂n OpenCV, doar că utilizează valori mai mari pentru a realiza filtrarea prin thresholding.
De asemenea, se observă, ı̂n cazul algoritmului pe imagini color că pe măsură ce ı̂ncercăm să
eliminăm fals pozitivele, se reduce s, i din numărul de real pozitive (dispar puncte din iarba, dar dispar
s, i de la colt, urile ferestrei).

7
Figure 10: Imagine color cu k = 0.04 s, i threshold = 45

Figure 11: Imagine color cu k = 0.04 s, i threshold = 60

7 Manual de instalare s, i utilizare


Pentru a putea rula algoritmul trebuie să avet, i instalat Python 3.12, OpenCV pentru Python s, i
numpy. Pentru persoanele care rulează din PyCharm (IDE), pas, ii sunt următorii (pentru a crea un
virtual environment):
1. Pentru Python: descărcat, i s, i instalat, i de pe https://www.python.org/downloads/site versiunea
corespunzătoare pentru sistemul de operare avut.
2. Pentru OpenCV s, i numpy: selectat, i din PyCharm Python Packeges s, i din meniul PyPI selectat, i
extensiile corespunzătoare.

8
După ce avet, i toate instrumentele necesare, rulat, i harris3.py cu opt, iunea de Current File.

8 Concluzii
În linii mari, proiectul a reus, it să-s, i atingă cele 2 obiective: crearea unei imprementări proprii
a algoritmului Harris de detect, ie de colt, uri pentru imagini grayscale s, i adaptarea lui pentru imagini
color. Din nefericire, implementarea noastră nu este la fel de bună comparativ cu funct, ia din OpenCV
(cornerHarris()), iar pe viitor ne gândim să ı̂ncercăm o abordare bazată pe kernel-uri de dimensiuni
mai mari (5x5, 7x7) decât cele de acum s, i să adaptăm threshold-ul s, i parametrul liber k la valori mai
potrivite.

9
References
[1] https://docs.opencv.org/4.x/dc/d0d/tutorial_py_features_harris.html
[2] https://users.utcluj.ro/~tmarita/HCI/C4.pdf
[3] https://www.cs.cmu.edu/~16385/s17/Slides/6.2_Harris_Corner_Detector.pdf

10

S-ar putea să vă placă și