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