Uploaded by Denisa Emilia Bigiu

A Circle Hough Transform Implementation Using High-Level Synthesi (1) (1)

advertisement
Machine Translated by Google
O IMPLEMENTARE CERCLE HOUGH TRANSFORMĂ FOLOSIND LA NIVEL ÎNALT
SINTEZĂ
De
Carlos Lemus
Licențiat în Inginerie Calculatoare
Universitatea Nevada Las Vegas 2018
O teză depusă în îndeplinirea parțială a
cerințelor pentru
Master în Inginerie - Inginerie Electrică
Departamentul de Inginerie Electrică și Calculatoare
Colegiul de Inginerie Howard R. Hughes
Colegiul Absolventului
Universitatea din Nevada, Las Vegas
decembrie 2020
Machine Translated by Google
Aprobarea tezei
Colegiul Absolventului
Universitatea din Nevada, Las Vegas
24 noiembrie 2020
Această teză pregătită de
Carlos Lemus
intitulat
O implementare a transformării Circle Hough utilizând sinteza la nivel înalt
este aprobată în îndeplinirea parțială a cerințelor pentru gradul de
Master în Inginerie - Inginerie Electrică
Departamentul de Inginerie Electrică și Calculatoare
Emma Regentova, Ph.D.
Kathryn Hausbeck Korgan, Ph.D.
Președintele comisiei de examinare
Decan absolvent al colegiului
Venkatesan Muthukumar, Ph.D.
Membru al comisiei de examinare
Mei Yang, Ph.D.
Membru al comisiei de examinare
Yoohwan Kim, Ph.D.
Reprezentantul Facultă
ii de Licen
ă
ii
Machine Translated by Google
Abstract
Circle Hough Transform (CHT) a găsit aplicații în biometrie, robotică și imagine
analiză. În această lucrare, se pune accentul pe dezvoltarea unui Field Programmable Gate Array
(FPGA) accelerator care efectuează o serie de proceduri și are ca rezultat detectarea cercului.
Proiectarea este realizată folosind instrumente Vivado High-Level Synthesis (HLS) și este țintită pentru a
Zynq UltraScale+ ZCU106. Implementarea include următoarele proceduri:
Filtru gaussian, operator de margine Sobel, prag și, în final, algoritmul CHT. The
performanța este evaluată pe baza timpului de execuție în comparație cu software-ul (Python
execuția codului) și instrumentele de analiză furnizate de instrumentul Vivado HLS. Precizia de
detectarea este evaluată datorită aproximării făcute de dragul unei execuții mai rapide. The
CHT necesită o cantitate mare de memorie pentru implementarea sa și, prin urmare, resursa totală
utilizarea trebuie optimizată. În această lucrare evaluăm atât viteza (timpul), cât și numărul
a blocurilor logice și a componentelor de memorie necesare implementării. Miezul lucrării
este implementarea eficientă a transformării Circle Hough folosind sinteza la nivel înalt.
Cuvinte cheie: Circle Hough Transform · Sinteză la nivel înalt · Detectare cerc · Câmp
Matrice programabilă
iii
Machine Translated by Google
Mulțumiri
În primul rând, aș dori să îi mulțumesc Dr. Regentova pentru că a fost un mentor incredibil și a
pilon de sprijin pe parcursul întregii mele cariere colegiale. A fost o călătorie lungă până la care să ajungi
unde sunt acum și datorită ajutorului și îndrumării ei am reușit
să-mi îndeplinesc obiectivele.
De asemenea, aș dori să le mulțumesc prietenilor și familiei mele pentru că sunt o sursă constantă de
încurajare. În special, prietenii mei Brandon și Prentyce pentru că m-au lăsat să le aleg
creierul la soluții de antrenament în timpul acestui proces. În cele din urmă, aș dori să ofer un incredibil
Mulțumiri speciale părinților mei, Axel și Lissette, și surorii mele, Daniela, pentru că m-au ținut
pistă și fiind motivul pentru care am ajuns până aici.
Mulțumesc
Carlos Lemus
Universitatea Nevada Las Vegas,
decembrie 2020
iv
Machine Translated by Google
Cuprins
iv
Mulțumiri
vii
lista figurilor
Capitolul 1 Introducere
1
Capitolul 2: Lucrări conexe
3
Capitolul 3: Detectarea cercurilor
5
3.1 Procedura de detectare a cercului
5
3.2 Filtru gaussian
6
3.3 Detectarea marginilor Sobel
8
3.4 Limitare
10
3.5 Transformarea cercului Hough
11
3.6 Implementarea HLS
20
26
Capitolul 4: Experimente și discuții
4.1 Rezultate
26
4.2 Performanța rezultatelor
31
4.3 Analiza timpului
33
4.4 Analiza memoriei
35
38
Capitolul 5: Concluzie
5.1 Limitări
38
5.2 Recomandare
38
5.3 Concluzii
40
Referințe
42
Curriculum vitae
43
v
Machine Translated by Google
Lista de mese
Tabelul 1. Comparație pipelining pentru CircularVoting
23
Tabelul 2. Comparația conductelor pentru CircularSelection
25
Tabel 3. Experimente 1,2, 3. Imagini pentru testarea dimensiunilor asortate.
28
Tabelul 4. Experimentul 4 Detectarea irisului
29
Tabelul 5. Experimentele 5,6,7. Aplicații de conducere autonomă.
30
Tabelul 6. Rezultate ale măsurătorilor de detectare
32
Tabelul 7. Analiza sincronizarii platformei
34
Tabelul 8. Nucleul real al filtrului gaussian
40
Tabelul 9. Aproximarea întregului filtru gaussian pentru implementarea circuitului
40
vi
Machine Translated by Google
lista figurilor
Fig 1. Imagine zgomotoasă (stânga) Detector de margini fără filtru (Centru) Detector de margini cu filtru
7
(Dreapta)
Fig 2. Sobel în direcția orizontală (Stânga) Sobel în direcția verticală (Centru) Sobel
9
însumate împreună (dreapta)
Fig 3. Limitare în Python (stânga) Limitare în Vivado HLS (dreapta)
11
Fig 4. Relația dintre (x,y) [10]
12
Fig 5. Folosind teorema lui Pitagora pentru a găsi un punct pe un cerc
13
Fig 6. Puncte din spațiul geometric (stânga) și puncte din spațiul parametric (dreapta) [10]
14
Fig 7. Mai multe cercuri în desenul spațiului parametrilor la diferite raze formează un con [10]
15
Fig 8. (a) Imaginea originală (b) Implementarea HLS a transformării Circle Hough (c) Python
20
implementarea Circle Hough Transform
Fig 9. Implementarea funcției CircleVoting
22
Fig 10. Implementarea funcției de sortare circulară
24
Fig 11. Rezultat HLS (stânga) Rezultat Python (centru) Diferența absolută (dreapta)
33
Fig 12. Raportul Timing și Latency de la Vivado HLS. Conductă (stânga) Nu canalizat
34
(Dreapta)
Fig 13. Utilizarea memoriei pentru întreaga aplicație furnizată de Vivado HLS
35
Fig 14. Utilizarea memoriei întregii aplicații oferite de Vivado HLS
36
Fig 15. Utilizarea ieșirii de export pentru miezul IP al dispozitivului vizat
37
Fig 16. Recomandarea Python Canny Edge
39
vii
Machine Translated by Google
Capitolul 1 Introducere
Detectarea automată a cercurilor este o parte importantă a extragerii informațiilor din computer
viziune. Circle Hough Transform (CHT) este unul dintre cei mai populari algoritmi pentru detectarea cercurilor
datorită toleranței sale la zgomot. A fost folosit în diverse domenii, inclusiv biometrie, robotică și
aplicatii mobile.
Această lucrare propune o implementare de detectare a cercului utilizând algoritmul CHT
Vivado High Level Synthesis (HLS), un mediu de dezvoltare integrat (IDE). The
instrument furnizat de Xilinx permite compilarea automată a codului de limbaj de nivel înalt (de exemplu,
C, C++) la limbaje de dezvoltare hardware, cum ar fi VHDL sau Verilog. Miezurile pot fi
sintetizat și integrat folosind Vivado Design Suite pentru a fi utilizat în embedded
aplicatii. În acest studiu, vizăm placa de dezvoltare Zynq UltraScale+ ZCU106
datorită vitezei și resurselor sale de înaltă performanță, cum ar fi Look Up Tables (LUT) și
Block Ram fără procesor (BRAM).
Un filtru gaussian, detecția Sobel și procedurile de prag sunt utilizate ca
pași preliminari pentru a detecta automat cercurile din imagini. Toate cele trei funcții menționate
au fost implementate de Xilinx într-o bibliotecă xfOpenCV similară cu cea a OpenCV. In orice caz,
aceste funcții au fost accelerate folosind metode de paralelism disponibile numai pentru hardware,
cum ar fi derularea buclelor, canalizarea și partiționarea și remodelarea matricelor pentru a îmbunătăți viteza
si memorie.
Viteza pe care logica programabilă (PL) o aduce la acest pas poate fi apoi cuplată
proceduri pe sistemul de procesare (PS) pentru a efectua operațiuni mai complexe, cum ar fi
executarea tehnicilor de învățare automată și utilizarea CHT ca parte a post-procesării sale
1
Machine Translated by Google
proceduri. Cu alte cuvinte, ca o componentă a întregului. Algoritmul CHT implementat în
această lucrare nu este una care poate fi găsită în biblioteca xfOpenCV. În acest caz, explorăm
acuratețea și performanța algoritmului de sinteză la nivel înalt ca bază a unui mai mare
proiect. Acest lucru poate fi implementat ulterior pe un FPGA folosind video în timp real și co-proiectare software
pentru a accelera metodele de detectare a cercurilor pentru aplicațiile încorporate.
Restul lucrărilor este organizată după cum urmează: Capitolul 2 discută munca aferentă.
Capitolul 3 descrie implementarea CHT propusă și procesul de detectare a cercului. Capitol
4 descrie experimentele și rezultatele. În final, lucrarea se încheie în capitolul 5.
2
Machine Translated by Google
Capitolul 2: Lucrări conexe
Au existat mai multe aplicații ale algoritmului CHT care profită de acesta
paralelism și rezultă în soluții în timp real. Unele dispozitive mobile care implementează CHT
algoritmul a fost dezvoltat pentru a segmenta cu acuratețe irisul în domeniul biometric [6,10].
Aceste modele sunt solicitate, astfel încât să poată fi integrate cu ușurință în personalul mobil sau
aplicații comerciale și conectate cu alte hardware. În aceste aplicații hardware-ul
implementarea este singura soluție, cum ar fi una care este încorporată în detectarea și scanarea irisului
pentru Securitate. Problemele, cum ar fi detectarea roților și a indicatoarelor rutiere [4], sunt doar câteva pentru
aplicatii mobile. Acest lucru excelează față de o implementare software ca soluții încorporate aproape
oferi întotdeauna un upgrade de performanță în timp real.
Au fost propuse mai multe metode diferite pentru detectarea eficientă a cercurilor.
Metodele bazate pe CHT sunt utilizate pe scară largă datorită eficacității lor, cu toate acestea, necesită uriașe
cerințe de calcul și memorie. Unii au căutat să îmbunătățească acest lucru cu noi
implementări precum utilizarea unui CHT incremental (ICHT) și a unui algoritm CORDIC care
utilizează proprietățile paralele pentru a reduce timpul de calcul și a gestiona resursele. Djekoune et
al. a prezentat o metodă de reutilizare a valorilor coordonatelor punctului cerc calculate anterior pentru
deduceți următorul punct cerc eliminând funcțiile trigonometrice necesare în timpul votării CHT
proces [3]. Acest lucru reduce foarte mult timpul de calcul necesar pentru realizarea CHT.
Alte lucrări au arătat că un gradient al cercurilor poate fi folosit în locul originalului
metoda de utilizare a func
iilor trigonometrice pentru implementarea CHT. Chen
i colab. [7] Cu
popularitatea în creștere a metodelor de învățare automată, studiile au arătat, de asemenea, modalități de a detecta
3
Machine Translated by Google
cercuri, cum ar fi utilizarea unui sistem bazat pe populație bazat pe Teaching Learning Based
Algoritm de optimizare [2].
Multe arhitecturi și algoritmi au fost propuși pentru a accelera CHT
algoritmul [4]. Una dintre aceste metode este pe un Field Programmable Gate Array (FPGA), un
platformă încorporată care a crescut în popularitate ca metodă de producere accelerată
produse hardware. În cele mai recente lucrări, Kumar et al. a propus un CHT eficient de memorie
implementare pe un FPGA pentru implementarea pentru localizarea irisului. Se foloseste
Imagini de dimensiuni 320x240 și un sortiment de matrice de acumulatoare 1D și 2D pentru a găsi cercul
centre și reduce memoria necesară, rezultând timpi de procesare rapidi. De asemenea
a investigat că pentru a face detectarea cercului mai precisă imaginea trebuie să fie
preprocesate pentru a reduce marginile false înainte de aplicarea CHT [11].
În timp ce secțiunea a discutat mai multe arhitecturi CHT existente, cu accent pe
FPGA, pot fi modificate și implementate pe HLS. Acest lucru permite o rapidă
producția de nuclee de proprietate intelectuală (IP) pentru sisteme încorporate care pot accelera
algoritmi avansați și măsoară cu precizie viteza și utilizarea memoriei
implementare. Lucrările ulterioare ar necesita o muncă minimă la structura codului și
algoritmul în loc de designul hardware obținând rezultate similare cu omologii săi.
4
Machine Translated by Google
Capitolul 3: Detectarea cercurilor
Procesarea imaginii conține mai mulți pași pentru a pregăti imaginea pentru detectare. Imagini
trebuie îmbunătățite sau caracteristicile trebuie extrase mai întâi din imaginea însăși. In aceasta sectiune,
descriem pașii necesari pentru extragerea caracteristicilor necesare pentru detectarea algoritmului CHT
cercuri. Mulți dintre pașii preprocesorului sunt implementați folosind OpenCV pentru Python și
xfOpenCV pentru Vivado HLS, deoarece sunt deja optimizate. Cu toate acestea, hardware-ul
implementarea este discutată în text. Ca un prim pas, imaginile de intrare de dimensiunea MxN sunt
convertite la intensitățile gri.
3.1 Procedura de detectare a cercului
În primul rând, imaginile color presupuse a fi de dimensiunea 320x240 au fost convertite la scară de gri
de dragul economisirii timpului de rulare fără pierderi considerabile de precizie. Conversia este
realizat prin utilizarea unei aproximări a ecuației reale de conversie a culorii (1).
= .2989 + .5870 + .1140 (1)
Schimbarea greutăților la puteri de două pentru un calcul mai eficient are ca rezultat (2).
= .25 + .50 + .25 (2)
Imaginea este apoi convertită într-un flux AXI4, implementat de Vivado ca a
protocol de comunicare între procesor, nuclee IP și memorie. În cele din urmă, fluxul AXI4
a imaginii este apoi convertită într-o matrice cu un singur canal pentru a începe procesarea.
Preprocesarea înainte ca algoritmul CHT să fie efectuată așa cum sa discutat. În primul rând, Gaussianul
Filtrul de estompare 5x5 este aplicat folosind o dimensiune a nucleului de 5x5. Valoarea reală a marginii depinde de
magnitudinea gradientului. Pixelii cu valori de gradient relativ mari sunt considerați o margine 5
Machine Translated by Google
punct. Acest pas este critic pentru aplicarea ulterioară a transformării; prin urmare, valoarea pragului
este un parametru care trebuie ajustat interactiv sau selectat pentru aplicație. Această valoare ar trebui să fie
alese cu grijă pe bază de proiect. Dacă pragul este prea scăzut, vor fi găsite multe puncte de margine,
inclusiv duplicate în jurul marginii reale datorită estompării naturale a imaginii. Acest lucru poate fi cauzat de
contrastul scăzut din jurul marginilor sau obiectelor de culori și intensități similare. Pe de altă parte,
valorile pragului foarte mari pot face ca multe puncte de margine să rămână în urmă. Punctele de margine sunt
valorile de intrare pentru CHT; prin urmare, cu cât prezintă mai multe margini, cu atât va fi mai mare cantitatea de memorie
consumate, afectând negativ resursele și viteza algoritmului. Dacă pragul este
prea sus, va face mai dificilă detectarea cercurilor.
Imaginea trece prin algoritmul CHT și un acumulator cu toate voturile este
creat pentru o gamă de raze. Gama razelor depinde de aplicație și este limitată de
cantitatea de memorie disponibilă descrisă în capitolele următoare. Se face vizualizarea cercului
prin bucla prin acumulator peste un nucleu selectând valoarea maximă pe
raze diferite. Dacă valoarea maximă este peste prag, atunci punctele sunt reprezentate în imagine
spațiu creând un cerc artificial peste imagine.
3.2 Filtru gaussian
Într-un mediu cu cuvinte reale, imaginile nu sunt de așteptat să fie de calitate perfectă. In alta
cuvinte, imaginile sunt zgomotoase. Se știe că imaginile cu dispozitive de cuplu de încărcare (CCD) au zgomot
diverse tipuri (datorită căldurii camerei și zgomotului electronic). Este modelat în general ca un
Zgomot Gaussian alb aditiv (AWGN). Filtrul gaussian îmbunătățește imaginea prin convoluție
fereastra de imagine cu funcția Gaussiană „în formă de clopot” care atenuează zgomotul. Asta permite
intrarea în detectorul de margini Sobel pentru a avea un impact mai mic asupra zgomotului și, prin urmare, margini false datorate
6
Machine Translated by Google
la zgomot sunt reduse. De asemenea, o anumită cantitate de neclaritate reduce șansa apariției marginilor create de
detalii mici, cum ar fi textura și obiectele mici, care urmează să fie scoase din procesarea ulterioară. Un sâmbure
au fost alese dimensiuni de 5x5 și a = .8, deoarece a permis cele mai bune rezultate din rezultatul final
calitate în experimentele noastre.
Având în vedere nucleul, netezirea se realizează prin convoluția filtrului cu imaginea
pixeli și producând o fereastră de 5x5 pixeli de imagine în care valoarea pixelului central este a
suma produselor împărțită la constanta de normalizare. Marginile rândului și coloanei sunt
neprelucrate. Alternativ, se pot procesa marginile prin completarea cu zerouri sau valori
de pixeli vecini în afara limitelor imaginii. Pentru biblioteca xfOpenCV
funcția, implementarea înlocuiește aritmetica în virgulă mobilă folosită în mod obișnuit cu
aritmetică cu punct fix folosind tabele de căutare (LUT) pentru înmulțire. Figura 1 prezintă a
compararea rezultatelor obținute de detectorul de margine și delimitarea cu și fără
filtru gaussian.
Fig 1. Imagine zgomotoasă (stânga) Detector de margini fără filtru (Centru) Detector de margini cu filtru (dreapta)
7
Machine Translated by Google
3.3 Detectarea marginilor Sobel
Detectarea marginilor este o etapă preliminară în majoritatea metodelor în care schița de
este nevoie de obiecte. Acest lucru este crucial în special în implementarea Hough Transform
algoritmi. În anumite cazuri, detectarea marginilor se poate face în timpul preprocesării în
Subsistem programabil FPGA (PS) și conectat la logica programabilă (PL) pentru
procesare ulterioara. Acest lucru se aplică în principal soluțiilor în care memoria este mai mult o preocupare
decât viteza. Prin aplicarea Sobel Edge Detection, acesta va permite CHT să găsească marginile
cercul pentru a vota.
Suita Vivado HLS 2019 oferă mai multe funcții ale bibliotecilor OpenCV, care
include soluția de bibliotecă xfOpenCV Sobel Edge Detection care este utilizată în acest sens
muncă. Această operațiune folosește o mască de 3x3 pentru calcularea gradienților verticale și orizontale ca
suma a 3 pixeli din stânga și dreapta, precum și diferența de sume din partea de sus 3
și cei 3 pixeli de jos, ponderați pentru normalizare.
Convoluțiile sunt prezentate în (1) și (2) în care Gx și Gy sunt derivatele în
direcțiile orizontale și, respectiv, verticală, iar A este matricea bidimensională a
valorile intensității într-o fereastră 3x3 a imaginii gaussiene îmbunătățite.
+1 0
+2 0
= [ +1 0
1
2
1
+1 +2 +1
0
00
=[ 1 2 1
(1)
]
]
(2)
În fiecare punct al imaginii, aproximarea gradientului total poate fi combinată
utilizând în mod normal (3).
8
Machine Translated by Google
=
2
+
2
(3)
Cu toate acestea, luarea rădăcinii pătrate a unei ecuații ar necesita mult hardware și
timp. O funcție implementată de xfOpenCV ia o sumă ponderată în care ambele
derivatele sunt ponderate în mod egal simplificând la (4).
=|
|+|
|
(4)
Figura 2 prezintă rezultatele gradientului orizontal (stânga), gradientului vertical
(din mijloc) și suma ponderată a celor două (dreapta). Se poate argumenta că un mai sofisticat
detector de margini, care elimină marginile duplicate și ia în considerare numai punctele conectate la
marginile de raportare, cum ar fi detectorul de margini Canny, ar avea ca rezultat o detecție a marginilor mai semnificativă.
Cu toate acestea, de dragul accelerării algoritmului general, nu îl considerăm în
acest lucru.
Fig 2. Sobel în direcția orizontală (Stânga) Sobel în direcția verticală (Centru) Sobel însumat
împreună (dreapta)
9
Machine Translated by Google
3.4 Limitare
Thresholdingul este realizat și de biblioteca xfOpenCV a Vivado HLS. Obiectivul
de prag este de a se asigura că numai pixelii peste un anumit prag sunt selectați la creare
o imagine complet binară. Acest lucru ajută, de asemenea, la eliminarea marginilor groase sau false create de
Sobel Edge Detection. Marginile groase ar putea fi eliminate în continuare prin utilizarea unui morfologic
filtru. Funcția pas prezentată în (5) descrie pragurile utilizate pentru discriminare
între pixelii de margine și non-margine.
()={
()>ℎℎ
ℎ
0
(5)
Pentru vizualizare, punctele de margine sunt afișate ca alb (valoarea este 255) pe un negru
fundal. Aceasta este o procedură obișnuită de binarizare a imaginii necesară înainte ca CHT să fie
efectuat. Pragul necesar depinde de imagine și poate fi necesar să fie ajustat
aplicarea. Un prag de 35 este utilizat pentru a rezulta în Fig 3, care a fost găsit experimental.
10
Machine Translated by Google
Fig 3. Limitare în Python (stânga) Limitare în Vivado HLS (dreapta)
3.5 Transformarea cercului Hough
Transformarea Hough utilizează punctele de contur rezultate din detectarea marginilor și
folosește un proces de vot pentru a detecta modele de puncte în datele de imagine binare. Prima dată a fost brevetat
de Paul Hough în 1962 și sugerată mai târziu de Duda și Hart ca metodă care utilizează
reprezentarea în coordonate polare a lungimii liniei și a orientării, , a vectorului normal
la linia de la originea imaginii [8]. Lungimea liniei poate fi derivată așa cum se arată
în (6) în care x și y reprezintă un pixel de coordonate pe imagine.
=
()+
( ) (6)
Aceste coordonate polare pot fi vizualizate în Fig 4 ca o relație cu (x,y).
11
Machine Translated by Google
Fig 4. Relația dintre (x,y) [11]
Metoda a fost apoi adaptată pentru a detecta parabole și elipse. Pentru această lucrare,
accentul se pune pe detectarea cercurilor cu algoritmul CHT. CHT implementat în această lucrare
constă din trei părți. Mai întâi, imaginea este scanată pentru marginile găsite după Gaussian
netezire și prag pentru detectarea marginilor. Apoi, cercuri cu raze diferite pe
marginile detectate sunt calculate și acumulate într-un bin în spațiul parametrilor. În cele din urmă, cel
matricea acumulatorului este iterată în secțiuni cu ferestre la un moment dat pentru a localiza maximele locale și
trageți doar valoarea maximă a cercului al cărui centru este deasupra pragului.
Principiile pentru CHT sunt următoarele. Ecuația generală a unui cerc este ca
urmează:
(
)
2
+(
2
)
=
2
(7)
Folosind elementele de bază ale trigonometriei și o rază dată, orice punct dintr-un cerc poate fi
calculat prin (8) și (9).
12
Machine Translated by Google
=
( ) (8)
=
( ) (9)
Unde t este variază de la 0 la 360 de grade și (a, b) sunt orice punct din jurul cercului lui
raza R centrată pe (x,y). Fig. 5 prezintă derivarea lui (8) și (9) folosind cercul unitar și
Teorema lui Pitagora. Cunoscând centrul (x,y) și raza, orice cerc poate fi trasat
acele ecuații.
Fig 5. Folosirea teoremei lui Pitagora pentru a găsi un punct pe un cerc
Fig. 6 prezintă punctele găsite în marginile unui cerc. Este creat un plan al unui cerc
în jurul marginii acelui punct și valoarea pixelilor găsiți sunt „votate” și incrementate într-un
matrice acumulatoare de dimensiunea imaginii. Odată ce algoritmul analizează întreaga imagine,
13
Machine Translated by Google
punctele cu cele mai multe voturi denotă existența centrului unui cerc în cadrul imaginii la a
raza dată.
Fig 6. Puncte din spațiul geometric (stânga) și puncte din spațiul parametric (dreapta) [11]
Deși există algoritmi CORDIC pentru calcularea multor funcții trigonometrice,
se ia decizia de a calcula funcția sin și cos prin simpla căutare. Acest lucru permite
reducerea numărului de cicluri luate de natura iterativă a CORDIC. În schimb, două matrice
au fost create pentru stocarea calculelor pentru fiecare valoare sin și cos de la 0 la 360 de grade.
Reducerea cantității de iterații prin utilizarea unei valori incrementale diferite poate accelera
algoritm dar reduc acuratețea cercurilor detectate și modul în care acestea sunt desenate vizual.
În cele mai multe cazuri, raza reală a cercului nu este cunoscută. Acesta este un suplimentar, dar
parametru necesar la detectarea cercurilor cu raze variate care adaugă complexitate
algoritm. După cum se vede în Fig. 7, adăugarea unei raze necunoscute adaugă o a treia dimensiune
14
Machine Translated by Google
acumulator care ține evidența voturilor la diferite raze, crescând astfel memoria
necesar. Cunoașterea razelor cercurilor din imagini ar scădea foarte mult utilizarea
memorie necesară. O căutare extinsă poate fi implementată fără a itera fiecare rază
prin modificarea variabilei de increment.
Fig 7. Mai multe cercuri din spațiul parametrilor desenate la diferite raze formează un con [11]
În algoritmul de vot CHT, mai întâi, o matrice acumulatoare 3D de dimensiunea imaginii și
a numărului de raze trebuie inițializat cu zerouri. Apoi, căutați matrice de tabele pentru fiecare
15
Machine Translated by Google
unghiul de la 0 la 360 de grade sin și cos sunt inițializate. Algoritmul CHT de mai jos
iterează prin fiecare coordonată de pixel din limitele imaginii. Dacă a fost găsită o margine,
mai multe cercuri dintr-un interval de raze sunt iterate, fiecare incrementând acumulatorul de vot
matrice.
Algoritmul 2.1 Algoritmul de vot cu transformare cerc Hough
1: Inițializați: accum [Rânduri][Coluri][Raza] = 0
Inițializați: sin [] și cos [] buclă matrice de tabel pentru fiecare unghi n de la 0 la 360 de grade
2: pentru fiecare x din Rând faceți
3: pentru fiecare y în Cols do
4: dacă celula(x,y) != 0 atunci // Căutați marginea
5:
6:
pentru fiecare r din Radius do
pentru fiecare
7:
(0,360) face
8:
b = y – r * sin[n] cos[n]
*
a=x–r
9:
dacă a (Rânduri, coloane) și b (Rânduri, coloane) atunci
10:
acum[x][y][r] += 1 //Vot
11:
12:
13:
sfâr
sfâr
sfâr
itul dacă
itul pentru
itul pentru
14: se încheie dacă
15: sfâr
16: sfâr
17: sfâr
itul pentru
itul pentru
itul pentru
După ce matricea acumulatorului este umplută și fiecare rază este contabilizată, algoritmul
caută și selectează cel mai mare vot din matricea acumulatorului dintr-o secțiune a imaginii.
În funcție de performanța procedurii de detectare a marginilor, pot fi detectate multe centre
provocând detecții false. Pentru a atenua acest lucru, sunt utilizate două metode. În primul rând, este setat un prag
16
Machine Translated by Google
permit doar voturilor mai mari decât acel prag să fie numărate ca centre. Totuși, acest lucru ar putea fi
insuficient deoarece centrele pentru diferite raze ar putea fi încă prezente. În această implementare a
algoritmul CHT, o fereastră este utilizată pentru a traversa matricea de acumulatori la diferite raze
și selectați numai maximul local pentru acea fereastră.
17
Machine Translated by Google
Algoritmul 2.2 Algoritmul de selecție a transformării cercului Hough
Necesită: Dimensiunea kernelului > 0 este dimensiunea ferestrei prin care căutați; Pragul cerc C este pragul
necesar pentru a considera un vot un pixel. I_Dst(Rows,Cols) este imaginea de destinație.
1: Inițializați pixelul care va ține evidența celui mai mare vot pentru pixelul din
matrice de acumulatori
Inițializați x0,y0,r0 care va ține evidența indexului celui mai mare pixel votat
Inițializați temp care va deține temporar cel mai mare vot 2: pentru fiecare
x din rândul do
3: pentru fiecare y în Cols do
4: pixel = 0, temp = 0 5: pentru
fiecare i din K do
6:
pentru fiecare k din K do
7:
pentru fiecare r din Radius do
8:
temp = acumulare[x+i][y+j][r]
9:
dacă temp > pixel atunci
10:
pixel = temp
11:
x0 = x+i
y0 = y+j
r0 = r
sfâr
12:13:14:15:sfâr
16: sfâr
17:
itul dacă
itul pentru
itul pentru
dacă > atunci pentru
18:
fiecare
(0,360) faceți
b = y0 – r0 * sin[n] a =
19:20:
x0 – r0 * cos[n]
21:
dacă a și b (Rânduri, coloane) atunci
22:
I_Dst(a,b) = 255 end
23:
if
24:
sfâr
25:
sfâr
itul pentru
itul dacă
26: sfâr
itul pentru
27: sfâr
itul pentru
28: sfâr
itul pentru
Dacă valoarea maximă depășește pragul selectat, atunci este înregistrat un centru de cerc în acesta
secțiunea imaginii. Acest lucru face ca, dacă un punct de acumulare „votat” a depășit-o
prag că numai cercul cu cele mai multe voturi din acea secțiune este utilizat pentru a vizualiza cercul în interior
18
Machine Translated by Google
imaginea. Mărimea ferestrei ar depinde de intervalul razelor. Fig 8 demonstrează
rezultatele implementării CHT.
(A)
(b)
(c)
19
Machine Translated by Google
Fig 8. (a) Imaginea originală (b) Implementarea HLS a transformării Circle Hough (c) Python
implementarea Circle Hough Transform
3.6 Implementarea HLS
Modelele reprogramabile bazate pe FPGA oferă flexibilitate de proiectare și putere redusă
implementarea opțiunilor de accelerare hardware în comparație cu ASIC și GPU-uri. HLS permite
compilare de circuite de sinteză direct din limbaje de nivel înalt, cum ar fi C și C++
coduri. Imaginile pot fi convertite într-un flux AXI4, care este protocolul de comunicare Vivado
între procesor, nuclee de proprietate intelectuală (IP) și memorie. Aceasta include AXI4-Stream
Video care este un subset al protocolului de streaming special conceput pentru transportul
cadre video. Acest lucru crește foarte mult viteza de dezvoltare pentru software și hardware
inginerii să implementeze și să facă modificări la nucleele IP concepute pentru fabrică.
Opțiunile și instrumentele de optimizare disponibile numai cu o implementare hardware pot fi
folosit pentru a îmbunătăți performanța algoritmului care nu ar fi disponibil în Python. Pentru
de exemplu, directivele compilatorului PRAGMA sunt folosite pentru controlul tipului de prelucrare, derulare
buclele, conductele, partiționarea și remodelarea rețelelor pentru a obține paralele și conducte
arhitecturi. Aceasta înseamnă că unii pași din bucle pot fi efectuate în același ceas
ciclu ca și altele reducând astfel latența. Filtrul Gaussian, Sobel Edge Detection și
Limitarea a fost deja optimizată de biblioteca xfOpenCV a Xilinx pentru sistemele încorporate.
Au fost implementate două funcții pentru algoritmul CHT care utilizează instrumentele de pipelining.
În primul rând, funcția CircularVoting inițializează matricea acumulatorului și scanează imaginea marginilor
20
Machine Translated by Google
la diferite raze pentru a crea o serie de „voturi”. Matricea a fost complet partiționată în
a treia dimensiune, care împarte matricea în elementele sale individuale pentru un acces mai rapid. Cu
ajutor de PRAGMAS, în Fig 9 LOOPVOTE este canalizat. Aceasta înseamnă că următoarele puncte (a,b).
poate fi calculată la un moment mai devreme decât cel al următorului cerc care se calculează. Abilitatea de a
conducta este o chestiune de dependențe. O variabilă de 8 biți numită voturi a fost creată temporar
stocați formularul de vot curent BRAM înainte de a actualiza valoarea de la citirea și scrierea
memoria în același timp ar provoca un pericol de date din cauza dependenței care ar împiedica
bucla de a fi canalizat.
21
Machine Translated by Google
01
LOOPR:for(ap_uint<10> r =R_MIN; r<R_MAX; r+=R_INCREMENT){
02#pragma HLS LOOP_TRIPCOUNT min=0 max=100
03 index_rând = 0;
04
LOOPX:for(ap_uint<10> x = 0; x < înălțime; x++ ){
05#pragma HLS LOOP_TRIPCOUNT min=1 max=ROWS
06
XF_PTNAME(DEPTH) img_pixel_val;
07
= 0; y < latime; y++){
LOOPY:for(ap_uint<10> y
08#pragma HLS LOOP_TRIPCOUNT min=1 max=COLS
09#pragma HLS DEPENDENCE matrice inter false
10#pragma HLS LOOP_FLATTEN dezactivat
11
img_pixel_val = _src_mat.read(row_index); // Citind
următorul pixel
12
13
14
if(img_pixel_val != 0) //Found Edge
{
LOOPVOTE:for(ap_uint<10> n = 0; n < ANGLEN; n+=ANGLE_INCREMENT ){
15#pragma HLS LOOP_TRIPCOUNT min=0 max=360
16#pragma HLS PIPELINE
17
b=
y - r * sinval[n];
18
a = x - r * cosval[n];
19
dacă(a >= 0 && a < înălțimea && b >= 0 && b <
lă ime){
20
ap_uint<8> r_index = (r-R_MIN)/R_INCRE-
MENT;
21
22
23
24
25
26
27
28
29
30
voturi = accum[a][b][r_index];
voturi = voturi + 1;
}
accum[a][b][r_index] = voturi;
}//Sfârșitul votului în buclă
}
index_rând = index_rând + 1;
}//Sfârșit LOOPY
}//END LOOPX
}//Sfârșitul buclei
Fig 9. Implementarea funcției CircleVoting
Rezultatele conductei pot fi analizate folosind instrumentul de analiză HLS Vivado. Prin inserare
un LOOP_TRIPCOUNT la bucle for din interiorul codului, Vivado poate estima latența necesară
completați bucla pentru un număr variabil de iterații. Tabelul 1 prezintă rezultatele latenței și
bucle care au fost canalizate pentru funcția CircularVoting. Fără pipeline, latența maximă este
aproape mai mult de jumătate în comparație cu conductele. Această latență măsoară numărul de cicluri de ceas
22
Machine Translated by Google
necesare pentru ca funcția să calculeze toate valorile de ieșire. LOOPR și LOOPVOTE au fost și ele
aplatizate împreună automat pentru a reduce timpul.
cu
Conducte
(A)
F/O
Conducte
(b)
Tabelul 1. Comparație pipelining pentru CircularVoting
A doua funcție, CircularSorting(), iterează prin matrice și află dacă a
punctul este deasupra pragului. Pentru fiecare (x,y) din imagine, o fereastră caută maximul
valoare așa cum se face în Selection Sort. Dacă există un centru care depășește CIRCLE_THRESHOLD, acesta
este desenat.
23
Machine Translated by Google
01 LOOPX2:for(ap_uint<10> x = 0; x < înălțime-DIMENSIUNEA KERNEL; x+= KERNEL_SIZE){
02 #pragma HLS LOOP_TRIPCOUNT min=1 max=ROWS
03
XF_PTNAME(DEPTH) img_pixel_val;
04
LOOPY2:for(ap_uint<10> y = 0; y < width-KERNEL_SIZE; y+= KERNEL_SIZE){
05 #pragma HLS LOOP_TRIPCOUNT min=1 max=COLS
06 #pragma HLS LOOP_FLATTEN dezactivat
07
// Găsiți maximul local
08
pixel = 0;
09
temp = 0;
10
LOOPi:for(ap_uint<13> i = 0; i < KERNEL_SIZE; i++){
11 #pragma HLS LOOP_TRIPCOUNT min=1 max=ROWS
12
LOOPj:for(ap_uint<13> j=0; j< KERNEL_SIZE; j++){
13 #pragma HLS LOOP_TRIPCOUNT min=1 max=COLS
14 #pragma HLS PIPELINE
15
LOOPR:for(ap_uint<13> r=R_MIN; r<R_MAX; r+=R_INCREMENT){
16 #pragma HLS LOOP_TRIPCOUNT min=1 max=100
17
ap_uint<8> r_test = (r-R_MIN)/R_INCREMENT;
18
ap_uint<10> x_i = x+i;
ap_uint<10> y_j = y+j;
temp = acumulare[x_i][y_j][r_test];
19
20
21
22
if(temp > pixel){
pixel = temp;
23
24
x0 = x_i;
y0 = y_j;
r0 = r;
25
26
27
28
29
30
31
32 ){
}
}//Sfârșitul buclei
}//Încheiați LOOPI
}//END LOOPJ
if(pixel >= CIRCLE_THRESHOLD){
LOOPDRAW:for(ap_uint<10> n = 0; n < ANGLEN; n+= ANGLE_INCREMENT
33 #pragma HLS LOOP_TRIPCOUNT min=0 max=360
34 #pragma HLS PIPELINE
35
b = y0 - r0 * sinval[n];
36
a = x0 - r0 * cosval[n];
37
if(a >= 0 && a < înălțime && b >= 0 && b < lățime){
38
index_rând = a*lățime + b;
39
_dst_mat.write(index_rând, 255);
40
}
41
}//END LOOPDRAW
42
}
43
}//Sfârșit LOOPY
44 }//END LOOPX
Fig 10. Implementarea funcției de sortare circulară
24
Machine Translated by Google
Din nou, buclele care caută valoarea maximă din matricea acumulatorului și
desenul cercurilor din matrice a fost canalizat.
cu
Conducte
(A)
F/O
Conducte
(b)
Tabelul 2. Comparația conductelor pentru CircularSelection
Circuitul sintetizat poate fi apoi împachetat ca nucleu IP și exportat pentru utilizare în
Vivado IDE pentru integrarea cu alte nuclee și PS. Codul C este convertit în a
Limbajul de descriere hardware (HDL), cum ar fi Verilog. Instrumentul permite generarea HDL
module de proiectare.
25
Machine Translated by Google
Capitolul 4: Experimente și discuții
4.1 Rezultate
Calitatea subiectivă a rezultatului este evaluată prin observarea rezultatelor. The
calitatea obiectivă se măsoară prin compararea centrelor cercurilor găsite de software și
hardware, respectiv. Implementarea hardware este produsă folosind testbench
cod. Precizia algoritmului folosind HLS este evaluată prin efectuarea aceleiași
pașii făcuți utilizând Python OpenCV pe un computer și comparând rezultatele. Scriptul Python
a fost creat pentru a replica algoritmul pentru comparație pe un procesor i5-9600k la 3,70 GHz și
16 Gb de RAM pe Windows 10.
Mai multe imagini au fost explorate folosind algoritmii Python și Vivado HLS.
Vor fi prezentate limitările și rezultatele prelucrării unora dintre imagini. Parametrii
utilizate pentru prelucrare sunt furnizate pentru fiecare soluție. ThreshVal este valoarea folosită pentru
pragând în etapa de preprocesare. MaxKernelSize se referă la dimensiunea ferestrei folosită
caută numărul maxim de voturi din acumulator. R_Range este intervalul de rază prin care trebuie căutat
unde [R_Min, R_Max]. R_increment descrie valoarea de incrementare a iteratorului utilizată.
Circle_Threshold este valoarea permisă pentru o valoare maximă din matricea acumulatorului
considerat un cerc.
Experimentele 1, 2, 3 (Tabelul 3) sunt exemple folosite pentru a căuta cercuri cu diferite
intervale de raze. Căutarea unei game largi de dimensiuni de cerc are mai multe limitări diferite. The
problema principală este necesarul de memorie. Deoarece HLS are o cantitate limitată de BRAM, doar una mică
poate fi utilizat intervalul de căutare. Dacă se utilizează o gamă largă, este necesar un R_increment mai mare pentru a reduce valoarea
dimensiunea matricei de acumulatori. Acest lucru, cu toate acestea, poate rata cercurile a căror rază se află între
26
Machine Translated by Google
incremente care cauzează inexactități în date, cum ar fi cele din experimentul 1 în care a fost un cerc
ratat. Intervalul de rază trebuie setat la o valoare optimă de la o aplicație la alta
așa cum se arată în experimentul 2, în care intervalul de rază și nucleul sunt limitate la dimensiunea
cercuri de detectat. Mai mult, cu cât este mai mare numărul de raze care trebuie căutate, cu atât mai mult timp
algoritmul va lua deoarece trebuie să calculeze un cerc la fiecare margine pentru fiecare imagine.
#
Original
Piton
Vivado HLS
1
(A)
(b)
(c)
ThreshVal = 65, MaxKernelSize = 70, R_Range = [4,60], R_increment = 4
Circle_threshold = 160
2
(d)
(e)
ThreshVal = 65, MaxKernelSize = 10, R_Range = [10,20], R_increment = 1,
Circle_threshold = 180
27
(f)
Machine Translated by Google
3
(g)
(h)
(i)
ThreshVal = 35, MaxKernelSize = 50, R_Range = [20,80], R_increment = 4
Circle_threshold = 130
Tabelul 3. Experimentele 1, 2, 3. Imagini pentru testarea dimensiunilor asortate.
Experimentul 4 (Tabelul 4) este un exemplu de aplicare a CHT la detectarea irisului pentru
urmărirea ochilor și scanarea irisului. Aceasta poate fi folosită pentru soluții în timp real pe un dispozitiv încorporat
platformă. Cu toate acestea, apare o limitare atunci când se încearcă localizarea atât a irisului, cât și a pupilei. De când
Pupila se află în centrul direct al ochiului, centrul ei se află în aceeași locație sau aproximativ
aproape de același centru cu irisul. De obicei, raza mai mare va avea prioritate față de
mai mic, deoarece mai multe margini de pixeli vor determina un vot mai mare pentru acea rază în zone similare.
28
Machine Translated by Google
#
Original
Piton
Vivado HLS
4
(A)
(b)
(c)
ThreshVal = 30, MaxKernelSize = 50, R_Range = [50,62], R_increment = 4
Circle_threshold = 210
Tabelul 4. Experimentul 4 Detectarea irisului
Conducerea autonomă a devenit un punct cheie de studiu în multe domenii diferite. The
aplicația are cerințe stricte de sincronizare și trebuie implementată pe sistemele încorporate. În
Experimentele 5, 6 și 7 (Tabelul 5) diferite detectări comune efectuate pentru conducerea autonomă sunt
a explorat subliniind importanța capacității de a implementa un algoritm de detectare a cercurilor pe
un sistem încorporat. Această aplicație poate fi folosită pentru numărarea bicicletelor pe drumuri, semn rutier
detectarea și depistarea mașinilor (garaj sau pe străzi).
29
Machine Translated by Google
#
Original
Piton
Vivado HLS
5
(A)
(b)
(c)
ThreshVal = 85, MaxKernelSize = 100, R_Range = [50,60], R_increment = 2
Circle_threshold = 130
6
(d)
(e)
(f)
ThreshVal = 72, MaxKernelSize = 50, R_Range = [48,50], R_increment = 1,
Circle_threshold = 96
7
(g)
(h)
ThreshVal = 120, MaxKernelSize = 30, R_Range = [15,20], R_increment = 1,
Circle_threshold = 180
Tabelul 5. Experimentele 5, 6, 7. Aplicații de conducere autonomă.
30
(i)
Machine Translated by Google
4.2 Performanța rezultatelor
Pentru a evalua performanța rezultatelor au fost următoarele metrici de detectare
utilizat: True Positive (TP), un obiect este prezent în adevărul de bază (GT) și experiment;
Fals Pozitiv (FP), un obiect a fost prezent în experiment, dar nu în GT; și False
Negativ (FN), un obiect este prezent în GT, dar nu în experiment. Folosind (12),
Rata de detectare (DR), care descrie numărul de pozitive adevărate relativ la suma de
pozitivele adevărate și negativele false, pot fi calculate pentru a măsura procentul de
ținte adevărate detectate [1].
=
(12)
(+)
Rezultatele fiecărui experiment sunt prezentate în tabelul de mai jos.
Vivado HLS
Piton
TP
#
1
2
FN
0,875
1
0,9
FP DR
TP
87,5%
0,125 0 0 0
0,1 0,3 0
000010
FP
FN
DR
0,875 0,125 0 87,5%
100,0% 0,982143 0,017857 0,214286 98,2%
90,0%
0,9
0,1
0,4 90,0%
34
1
100,0%
1
0
0 100,0%
100,0%
1
0
0 100,0%
100,0%
1
0
1 100,0%
100,0%
1
0
0 100,0%
5
1
6
1
7
1
0
31
Machine Translated by Google
Tabelul 6. Rezultate ale măsurătorilor de detectare
În general, rezultatele demonstrează un DR ridicat atât pentru Vivado HLS, cât și pentru Python
implementări atunci când fiecare este comparată cu imaginea originală cu o medie de 96,5%
și, respectiv, 96,7%. Aceasta înseamnă că implementarea CHT poate fi utilizată ca un
instrument eficient pentru detectarea cercurilor. Algoritmul nu a funcționat la fel de bine atunci când era acolo
a fost o gamă largă de raze de căutat, cum ar fi în al treilea experiment și când multe
marginile din fundal au cauzat false pozitive inexacte, ilustrate în experimentul 6.
Unul dintre principalele motive pentru care cele două soluții ar da rezultate diferite este că
aproximările la diferite etape ale implementărilor făcute pentru a ține seama de viteza și
memoria sunt afectate atunci când vizați o platformă încorporată. Dacă detectarea ar fi putut fi
realizat după aplicarea unor algoritmi mai sofisticați pentru detectarea marginilor, cum ar fi în
Canny Edge Detection, ne-am putea aștepta la un rezultat mai bun. Imaginile rezultate din Vivado HLS
a desenat cercuri mai puțin decât perfecte (mai pixelate) în comparație cu soluția Python, deoarece aceasta
a folosit o gamă mai mică de unghiuri pentru a le vizualiza. Efectele acestui lucru pot fi văzute când
luând diferența absolută dintre cele două imagini (Fig 11).
32
Machine Translated by Google
Fig 11. Rezultat HLS (stânga) Rezultat Python (centru) Diferența absolută (dreapta)
4.3 Analiza timpului
Timpul algoritmului variază foarte mult în funcție de cantitatea de muchii detectate și de rază
numara. Pentru fiecare pixel dintr-o margine, algoritmul CHT trebuie să găsească un cerc pentru fiecare rază din
interval de rază. Vivado oferă o estimare a latenței având în vedere parametrii descriși în aceasta
lucrați pentru timpul de rulare a algoritmului pe sistemul vizat (placa UltraScale+ ZCU106) la
100MHz. Acest raport este prezentat în Fig 12 pentru experimentul 1 în Tabelul 4Eroare! Sursa de referință
nu a fost găsit.
33
Machine Translated by Google
Fig 12. Raportul Timing și Latency de la Vivado HLS. Conductă (stânga) Nu canalizat (dreapta)
Comparația dintre cele două platforme pentru experimentul 3 este prezentată în Tabelul 7. As
tabelate, valorile minime și maxime sunt aceleași pentru PC-ul Python
implementarea la care se face referire la începutul rezultatelor, deoarece putem măsura timpul
scurs între întregul proces. Cu toate acestea, Vivado HLS oferă doar o estimare a
timp ar dura. Rezultatele arată o diferență clară chiar și în cel mai rău scenariu
între o implementare software versus una încorporată. Timpul ar varia în funcție de
bucle necesare pentru a itera prin diferitele raze.
Platformă
Analiza timpului min (secunde) Analiza timpului max (secunde)
Vivado HLS
.0364
8.354
Piton
5,69
86,71
Diferență (%)
99,36
90,37
Tabelul 7. Analiza sincronizarii platformei
34
Machine Translated by Google
4.4 Analiza memoriei
Cea mai mare problemă cu Transformarea Hough este acumularea mare de voturi pentru fiecare pixel
și în consecință memoria mare. Designul arată că 582 din BRAM_18k este folosit în principal
gestionează matricea de vot, 8 DSP48E pentru operații aritmetice, 2857 Flip Flops (FF) și 9994
Căutați tabele (LUT) în Fig 13 pentru experimentul 3.
Fig 13. Utilizarea memoriei pentru întreaga aplicație furnizată de Vivado HLS
Dimensiunile mari ale imaginii și cantitatea mare de margini cresc utilizarea BRAM, motiv pentru care a
pentru detecție se utilizează dimensiunea relativ mică a imaginii și o valoare de prag relativ ridicată.
Prin urmare, sunt necesare doar bănci de 8 biți. Figura 14 arată un experiment în care au fost 15 cazuri
creat din 38 BRAM_18K. În acest caz, matricea este o matrice de 8 biți de 320x240, adică
76800 de cuvinte și o rază de 15. Citirea și scrierea BRAM-ului sunt implementate
folosind o adevărată RAM cu două porturi cu control atât pentru citire, cât și pentru scriere pe ambele porturi. Acest
35
Machine Translated by Google
permite un număr mai mic de cicluri pentru citirea memoriei, dar mărește și
cantitatea de BRAM necesară.
Fig 14. Utilizarea memoriei întregii aplicații oferite de Vivado HLS
După sinteză, proiectul poate fi exportat, iar sincronizarea reală și rutarea designului poate fi
fi măsurat. Fig. 15 prezintă resursele reale utilizate necesare pentru implementare dacă sunt plasate într-un
Proiectul Vivado. Rezultatele tind să utilizeze mai mult BRAM, dar optimizează alocarea resurselor în FF-uri
și LUT-uri.
36
Machine Translated by Google
Fig 15. Utilizarea ieșirii de export pentru miezul IP al dispozitivului vizat
37
Machine Translated by Google
Capitolul 5: Concluzie
5.1 Limitări
Când lucrați pe platforme încorporate, va exista întotdeauna un compromis între
memorie, viteză și precizie. După cum sa discutat în experimente, există mai multe
limitările implementării Circle Hough Transform. Cea mai critică problemă este una mare
cantitatea de memorie necesară pentru stocarea datelor. Când căutați o gamă largă de raze,
nevoia de BRAM crește foarte mult. Dacă sunt necesare imagini mai mari, dimensiunea BRAM-ului ar putea
fi un blocaj și soluția este să folosiți memoria externă (SDRAM), care va
crește latența. Dacă imaginile au prea multe margini, implementarea matricei de vot este
limitat la un numărător de 8 biți. Multe scenarii trebuie luate în considerare atunci când utilizați acest lucru
implementare la o anumită aplicație. Cu toate acestea, designul se dovedește a fi înalt
avantajos acolo unde viteza este o preocupare.
5.2 Recomandare
Pentru a îmbunătăți algoritmul, ar trebui un algoritm mai eficient de detectare a marginilor
să fie implementat în soluția HLS. Algoritmi precum detectarea Harris sau Canny Edge
ar putea oferi mai multe margini de numărat în timpul procesului de acumulare. Fig. 16 este o
rezultat experimental folosind un test care ar putea fi utilizat pentru detectarea condusului autonom
folosind Canny în Python în loc de detectarea Sobel Edge.
38
Machine Translated by Google
Fig 16. Recomandarea Python Canny Edge
După ce s-au făcut unele îmbunătățiri, viitorul acestei lucrări ar fi să
implementați nucleul HDL exportat într-un sistem încorporat și testați-l folosind fie preimagini încărcate sau videoclipuri în timp real de la o cameră. În plus, nu orice interval de raze poate
poate fi căutat și este limitat de dimensiunea imaginii procesate. Ar fi cel mai mult
benefic să cunoască raza exactă care se caută prin preprocesarea imaginii și
predeterminarea parametrilor pentru cea mai bună performanță.
Gaussian Blur a fost optimizat de xfOpenCv, dar ar putea fi și mai departe
îmbunătățit prin implementarea schimburilor. Suma produselor poate fi implementată de MAC (înmulțire
se acumulează) sau se calculează în paralel folosind 24 de adunatoare complete. Acest lucru poate fi optimizat în continuare folosind
ierarhia sumătorilor Carry-save. Greutățile reale ale nucleului sunt aproximate folosind puteri de doi
în loc de numerele în virgulă mobilă din nucleul gaussian real 5x5 de mai jos.
39
Machine Translated by Google
0,003765 0,015019 0,023792 0,015019 0,003765
0,015019 0,059912 0,094907 0,059912 0,015019
0,023792 0,094907 0,150342 0,094907 0,023792
0,015019 0,059912 0,094907 0,059912 0,015019
0,003765 0,015019 0,023792 0,015019 0,003765
Tabelul 8. Nucleul real al filtrului gaussian
1/84 x
1
1
2
1
1
1
4
8
4
1
2
8
16
8
2
1
4
8
4
1
1
1
2
1
1
Tabelul 9. Aproximarea întregului filtru gaussian pentru implementarea circuitului
Rezultatul este împărțit o dată la constanta de normalizare care este suma tuturor
greutăți în 5x5. Acesta este 84 pentru a menține intervalul de ieșire în intervalul real de valori ale pixelilor
și este o diviziune întreagă care poate fi implementată de un divizor de matrice paralelă (nr
rest).
5.3 Concluzii
În această lucrare am investigat și proiectat circuitul de implementare a
Transformarea cercului Hough. Designul a fost realizat în Vivado's High Level
Sinteză care vizează placa UltraScale+ ZCU106. Analiza demonstrează un semnificativ
40
Machine Translated by Google
accelerarea factorului de 85,4% utilizând conducte, care este continuată prin derularea buclei și matrice
compartimentare. În timp ce această soluție sacrifică o anumită precizie în comparație cu Python-ul său
implementare, funcționează la viteze accelerate. Acceleratorul poate fi folosit ca parte
sau un produs independent (IP) pentru detectarea cercurilor pentru o varietate de aplicații, în care aceasta
tipul de prelucrare este un produs final sau o etapă intermediară pentru analiză, inclusiv irisul
detecție pentru scanare și analiză ulterioară, detectarea bicicletelor și mașinilor pe drumuri,
și multe alte sarcini interesante.
41
Machine Translated by Google
Referințe
1. A. Godil, W. Shackleford, M. Shneier, R. Bostelman și T. Hong, „Metrici de performanță pentru
evaluarea sistemelor de detectare și urmărire a obiectelor și umane”, 2014.
2. A. Lopez-Martinez și FJ Cuevas, „Detecția automată a cercurilor pe imagini folosind algoritmul
de optimizare bazată pe predare și analiza gradientului”, Applied Intelligence, vol. 49, nr. 5,
p. 2001–2016, 2018.
3. AO Djekoune, K. Messaoudi și K. Amara, „Incremental circle hough transform: An improved
method for circle detection”, Optik, voi. 133, p. 17–31, 2017.
4. A. Tarik, M. Boussaid, A. Karim și A. Abdelah, „Îmbunătățirea performanței de detectare a
semnelor rutiere prin combinarea caracteristicilor transformării și texturii Hough”,
International Journal of Computer Applications, voi. 73, nr. 9, p. 5–9, 2013.
5. F. Ferhat-taleb Alim, K. Messaoudi, S. Seddiki și O. Kerdjidj, „Modified circular Hough transform
using FPGA”, 2012 a 24-a Conferință Internațională de Microelectronică (ICM), Algiers,
2012, pp. 1-4, doi: 10.1109/ICM.2012.6471412.
6. J. Avey, „Un accelerator hardware bazat pe FPGA pentru segmentarea irisului”.
7. L. Wang și L.-Q. Chen, „Detecția cercului concentric bazat pe transformarea Hough a punctului
de mijloc al acordului”, Journal of Computer Applications, voi. 29, nr. 7, p. 1937–1939, 2009.
8. RO Duda, „Utilizarea transformării Hough pentru a detecta linii și curbe în imagini”,
Comunicarea ACM, 01-ian-1972.
9. S.-C. Pei și J.-H. Horng, „Detecția arcului de cerc bazată pe transformarea Hough”, Pattern
Recognition Letters, 15-iul-2002.
10. V. Kumar, A. Asati și A. Gupta, „Hardware Accelerators for Iris Localization”,
Journal of Signal Processing Systems, voi. 90, nr. 4, p. 655–671, 2017.
11. V. Kumar, A. Asati și A. Gupta, „Arhitectura eficientă în memorie a transformării cercului
Hough și implementarea sa FPGA pentru localizarea irisului”, Arhitectura eficientă în
memorie a transformării cercului Hough și implementarea sa FPGA pentru localizarea irisului - IET
Reviste și reviste, 2018.
12. X. Chen, L. Lu și Y. Gao, „A new concentric circle detection method based on Hough transform,”
2012 a 7-a Conferință Internațională pentru Informatică și Educație (ICCSE), Melbourne,
VIC, 2012, pp. 753- 758, doi: 10.1109/ICCSE.2012.6295182.
42
Machine Translated by Google
Curriculum vitae
Colegiul Absolvent,
Universitatea din Nevada, Las Vegas
Carlos Lemus
E-mail: carlosslemus@yahoo.com
Grade:
Licențiat în Inginerie Calculatoare, 2018
Universitatea din Nevada, Las Vegas
Titlul disertației: O implementare a transformării Circle Hough folosind sinteza la nivel înalt
Comisia de examinare a disertației:
Președinte, Dr. Emma Regentova, Ph.D.
Membru al Comitetului, Dr. Venkatesan Muthukumar, Ph.D.
Membru al Comitetului, Dr. Mei Yang, Ph.D.
Reprezentant Absolvent al Facultății, Dr. Yoohwan Kim, Ph.D.
43
Download