Eliminarea Zgomotelor din Secventele Video Achizitionate cu Camere Thz. Prelucrari de Imagini

ELIMINAREA ZGOMOTELOR DIN SECVENȚELE VIDEO ACHIZIȚIONATE CU CAMERE THZ. PRELUCRĂRI DE IMAGINI

„Învățătura este o comoară care își urmează stăpânul pretutindeni.”

Proverb popular

REZUMATUL PROIECTULUI

În lucrarea de diplomă cu titlul “Eliminarea zgomotelor din secvențele video achiziționate cu camere THz. Prelucrări de imagini” sunt prezentate camera video THz și diverse operații și metode de prelucrare a secvențelor video achiziționate cu aceasta.

În introducere am prezentat pe scurt motivația și scopul alegerii acestei teme de proiect.

În capitolul al 2-lea din proiect am prezentat noțiuni generale despre camera video,design-ul camerei și aplicații în care se utilizează aceasta.

În capitolul al 3-lea am prezentat kitul de dezvoltare FPGA NIOS II ALTERA CYCLONE III 3C25.Pe acest kit va fi implementat programul pentru prelucrarea imaginilor achiziționate cu camera THz.

În capitolul al 4-lea am facut o prezentare teoretica despre imaginile digitale,despre prelucrarea acestora și concepte generale despre limbajele de programare utilizate.

În capitolul al 5-lea, la realizarea practică, am descris pașii pentru ducerea la bun sfârșit a aplicației propuse.

Termenii cheie: camera THz,ALTERA,imagini digitale

CPRINSUL

1 Introducere

2 CAMERA VIDEO THz

2.1 Prezentarea camerei video

2.2 Design-ul camerei video

2.2.1 Arhitectura circuitului

2.2.2 Detectorul front-end și circuitul de reset

2.2.3 Circuitul de citire

2.2.4 Implementarea matricii și schema circuitului

2.2.5 Ansamblarea cipului și design-ul modulului camerei video

2.3 AplicaȚii thz

3 Altera fpga

3.1 Prezentare generală

3.2 NIOS II ALTERA CYCLONE III

3.2.1 Caracteristici

3.2.2 Prezentare kit

4 Imagini Digitale

4.1 Descrierea imaginilor digitale

4.1.1 Afișarea imaginilor digitale

4.1.2 Formatul fișierelor imaginilor

4.1.3 Tipuri de imagini

4.2 Prelucrarea imaginilor

4.2.1 Binarizarea imaginilor

4.2.2 Histograma unei imagini

4.2.3 Egalizarea histogramei

4.3 Limbaje de programare utilizate

4.3.1 Concepte generale ale limbajului MATLAB

4.3.2 Procesarea imaginilor în MATLAB

4.3.3 Concepte generale ale limbajului C

5 Realizare practică

5.1 Prezentare generală

5.2 Mod de lucru

5.2.1 Extragerea matricilor imaginilor într-un fișier text

5.2.2 Crearea unui program în C pentru citirea și scrierea unui fișier text

5.2.3 Scrierea și compilarea unui program folosind Quartus II

5.2.4 Crearea și rularea unui program C folosind ALTERA NIOS II IDE

5.2.5 Extragerea imaginilor din fișierul video

5.2.6 Detectarea conturului unei regiuni

7 Bibliografie

8 ReferinȚe web

A Codul sursă

CD / DVD

Index

LISTA FIGURILOR

Figura 1. Schema bloc a camerei video 4

Figura 2. Schema mixerului THz cu antena sonoră și circuitul de reset 4

Figura 3. Geometria unui singur pixel în matrice 5

Figura 4. Circuitul pixelilor cu detector 6

Figura 5. Circuitul de selecție al pixelilor pentru o matrice, cu selectarea rândului și a coloanei………………………………………………………………………………………………………………………………………7

Figura 6. Micrografia matricii 8

Figura 7. Diagrama bloc a modulului camerei video…………………………………………………………….…………………9

Figura 8. Screening-ul de securitate non-invazivă 10

Figura 9. Monitorizarea apei 10

Figura 10. Controlul calității în industrie 11

Figura 11. Aplicații biomedicale și dentare 11

Figura 12. Calitatea imprimării hârtiei 12

Figura 13.Structura unui fpga ………………………………………………………………………………………………………..13

Figura 14.Ciclul de proiectare convenȚional al unui fpga …………………………………………………………….14

Figura 15. Blocurile funcȚionale ale microprocesorului NIOS II CYCLONE 3C25 cu sistem de control LCD…………………………………………………………………………………………………………………………….18

Figura 16. Ecran lcd 19

Figura 17. Prezentare laterală 1 19

Figura 18. Prezentare laterală 2 20

Figura 19. Pixeli cu diferite tonuri și nivele 21

Figura 20. Imagini originale 41

Figura 21. Imagini cu nuanță de gri 41

Figura 22. Interfața software-ului QUARTUS II 46

Figura 23. Selectarea opțiunii SOPC Builder din meniul Tools 48

Figura 24. Implementarea sistemului 49

Figura 25. Alocarea adresei de bază a componentelor 50

Figura 26. Pinii CLK și RESET 51

Figura 27. Compilarea programului 51

Figura 28. Softul ALTERA Nios II IDE 52

Figura 29. Crearea unui nou proiect în NIOS ……………………………………………………………………………………53

Figura 30. Crearea unei biblioteci 54

Figura 31. Rularea aplicației 54

Figura 32. Operatorul Sobel pe orizontală 58

Figura 33. Operatorul Canny pe orizontală 59

Figura 34. Operatorul Roberts pe orizontalĂ 59

Figura 35. Operatorul Sobel pe verticală 60

Figura 36. Operatorul Canny pe verticală 60

Figura 37. Operatorul Roberts pe verticală 61

LISTA TABELELOR

Tabelul 1. Tipuri de date În C 36

1 Introducere

Tema proiectului de diplomă, Eliminarea zgometelor din secvențele video achiziționate cu camere THz. Prelucrări de imagini, a fost aleasă sub îndrumarea doamnei Prof. dr. ing. Maria Trocan de la Institutul Superior de Electronică din Paris ( ISEP ), datorită faptului că am beneficiat de bursa ERASMUS, mergând în Franța, la Paris, pentru o perioadă de 4 luni, loc în care am realizat atât partea practică cât și partea teoretică a acestui proiect. În continuare sunt prezentate scopul și motivația acestui proiect.

Pe piața de vânzări a apărut un mare interes pentru tehnologiile THz folosite din ce în ce mai des în diverse aplicații în special la securitatea în aeroporturi, dar și pentru senzorii de gaz folosiți la echipamentele de stingere a incendiilor, imagistica medicală, aplicații farmaceutice, astronomie, comunicare și analiza materialelor.

Tehnologiile THz sunt utile deoarece undele terahertz pot pătrunde începand de la materiale opace până la alte părti ale spectrului electromagnetic. Astfel multe materiale nemetalice sunt transparente pentru aceste tehnologii. În aceste categorii de materiale se pot încadra multe materiale plastice, lemn, carton, pământ / sol, țesătură sau ceramică.

Deoarece în urma achiziției materialului video cu aceste camere Thz, calitatea acestuia, în multe cazuri, nu este foarte bună, este nevoie de intervenție exterioară pentru a elimina zgomotul (denoissing) din aceste secvențe video. Astfel se poate interveni în timp real, după divizarea fișierului video în frame-uri, prin aplicarea diferitelor metode de prelucrare a imaginilor , astfel încât calitatea fiecărei imagini să fie de nivel ridicat, iar zgomotul din acestea să fie înlăturat.

La ora actuală, orice ramură a științei utilizează dispoztive de achiziție și procesare pentru preluarea, reprezentarea și prelucrarea informațiilor vizuale, problema corectării distorsiunilor introduse de dispozitivele de achiziție fiind una de actualitate.

Prelucrarea și analiza imaginilor reprezintă practic necesitatea de a înlocui observatorul uman, cu atât mai mult cu cat există în prezent soluții pentru situații în care omul nu se poate confrunta doar cu simțurile naturale, cum este cazul imaginilor invizibile, ca imagini acustice, ultrasunete sau radar.

Principalele avantaje ale acestor tehnologii sunt acelea de cost redus și faptul că prelucrarea fișierului video achiziționat se face în timp real.

Camera video THz

2.1 Prezentarea camerei video

Există un mare interes pentru tehnologiile terahertz cum ar fi aplicațiile în curs de dezvoltare pentru scanarea de securitate în aeroporturi, pentru senzorul de gaz folosit la echipamentele de stingere a incendiilor, imagistica medicală, aplicații farmaceutice, astronomie, comunicare și analiza materialelor. În acest spațiu al aplicațiilor, integrarea la o scară foarte largă în procesele tehnologice cu silicon, devine o alternativă ieftină față de tranzistorul cu o mobilitate electronică mare, dispozitive electronice cu vacuum, bolometre, micro și nanobolometre. În plus, capacitățile de înaltă frecvență ale proceselor tehnologice pe bază de silicon se îmbunătățesc în mod constant prin scalare, care permite un nivel ridicat de integrare și consum scăzut de energie la frecvențe superioare.

Un cip al camerei video de 1 k-pixeli pentru înregistrare video activă la temperatura camerei a fost complet integrat într-o tehnologie CMOS de 65-nm. Cipul folosește o resetare inedită și o arhitectură de citire cu un consum mediu de energie de numai 2,5 W/pixel.

Matricea pixelilor, care are dimensiunea de 32 x 32, este formată din 1024 antene sonore diferențiale on-cip cuplate la detectoare directe NMOS operate dincolo de frecvența lor de tăiere bazate pe principiul de auto-amestecare distribuite rezistiv. Aceasta include selectarea pe rând și coloană și integrarea circuitelor capabile să înregistreze un video THz de până la 500 fps.

Cipul camerei a fost ansamblat împreună cu lentile de silicon de 41,7 dB ( măsurat la 856 GHz ) într-un modul al camerei de dimensiuni 5 x 5 x 3 cm. Acesta este conceput pentru iluminare continuă, fără a fi necesară o tehnică de blocare. În modul video, camera operează până la 500 fps. La 856 GHz atinge o responsivitate de aproximativ 115 kV/W ( inclusiv un câștig VGA de 5 dB ) și o putere totală a zgomotului echivalent de aproximativ 12 nW integrată pe o lățime de bandă video de 500 kHz. La o frecvență de tăiere de 5 kHz ( modul non-video ) , un singur pixel poate oferi o responsivitate maximă Rv de 140 kV/W, inclusiv un câștig VGA de 5 dB. Controlerul de citire al camerei poate fi oprit pentru a selecta un pixel permanent și de a aplica tehnici de blocare. În modul non-video, o responsivitate maxima Rv de 140 kV/W, inclusiv un câștig VGA de 5 dB și o putere echivalentă minimă au fost atinse la 856 GHz pentru o frecvență de tăiere de 5 kHz. Antenele de bandă largă oferă o directivitate de 41,7 dB la 856 GHz, iar pixelii ating o lățime de bandă de 3 dB de cel puțin 790 – 960 GHz. Camera are un câmp vizual cuprins în intervalul ( -23 , +23 ) grade.

2.2 Design-ul camerei video

Senzorii de imagine vizuală CMOS detectează fotoni prin mecanismul cunoscut sub numele de efect fotoelectric interior. Deoarece siliciul cristalin este un semiconductor indirect, acest produs implică mai mult de un foton în procesul de absorție de fotoni. Numai în cazul în care energia fotonică hω este suficient de mare, se excită un electron în interiorul zonei de epuizare a foto-diodei, creând astfel un electron. Eficiența senzorilor de imagine vizuală este adesea descrisă de eficiența cuantică QE( λ ), care depinde de lungimea de undă și descrie numărul de electroni generați și colectați pentru fiecare foton incident. Pentru CMOS, eficiența cuantică QE este de aproximativ 60% la 700 nm.

Din păcate, la frecvențe THz ( 0.3 – 3 THz sau 0.1 – 1 mm ), energia fiecărui foton este cu aproximativ 3 ordine mai mică decât în spectrul vizual ( 400 – 789 THz sau 380 – 750 nm ), de exemplu hω = 4 MeV la 1 THz. Ca atare, efectul fotoelectric interior nu se aplică și de aceea sunt necesari mai mulți fotoni pentru a crea un singur electron, care reduce substanțial energia cuantică. Prin analogie cu detectoare vizuale, randamentul cuantic pentru un detector cu raspuns pătratic este legat de responsivitatea cuantică a detectorului Ri, după cum urmează:

Un detector THz care realizează aceeași responsivitate curentă Ri ca un detector cu foto-diodă va realiza un randament cuantic de aproximativ 0,06% la un THz. Având în vedere acest lucru, procesul rezistiv de amestecare distribuit cu o responsivitate curentă Ri tipică de 2,5 mA/W oferă o eficiență cuantică QE de aproximativ 0,001%. Acest lucru arată în mod clar că este nevoie de un circuit de citire cu zgomot redus pelt de un foton în procesul de absorție de fotoni. Numai în cazul în care energia fotonică hω este suficient de mare, se excită un electron în interiorul zonei de epuizare a foto-diodei, creând astfel un electron. Eficiența senzorilor de imagine vizuală este adesea descrisă de eficiența cuantică QE( λ ), care depinde de lungimea de undă și descrie numărul de electroni generați și colectați pentru fiecare foton incident. Pentru CMOS, eficiența cuantică QE este de aproximativ 60% la 700 nm.

Din păcate, la frecvențe THz ( 0.3 – 3 THz sau 0.1 – 1 mm ), energia fiecărui foton este cu aproximativ 3 ordine mai mică decât în spectrul vizual ( 400 – 789 THz sau 380 – 750 nm ), de exemplu hω = 4 MeV la 1 THz. Ca atare, efectul fotoelectric interior nu se aplică și de aceea sunt necesari mai mulți fotoni pentru a crea un singur electron, care reduce substanțial energia cuantică. Prin analogie cu detectoare vizuale, randamentul cuantic pentru un detector cu raspuns pătratic este legat de responsivitatea cuantică a detectorului Ri, după cum urmează:

Un detector THz care realizează aceeași responsivitate curentă Ri ca un detector cu foto-diodă va realiza un randament cuantic de aproximativ 0,06% la un THz. Având în vedere acest lucru, procesul rezistiv de amestecare distribuit cu o responsivitate curentă Ri tipică de 2,5 mA/W oferă o eficiență cuantică QE de aproximativ 0,001%. Acest lucru arată în mod clar că este nevoie de un circuit de citire cu zgomot redus pentru camera THz. În continuare vom descrie design-ul circuitului camerei într-o tehnologie CMOS de 65 nm.

Arhitectura circuitului

Senzorii de imagine convenționali CMOS pentru spectrul vizual utilizează de obicei un detector cu foto-diode și necesită un tranzistor de reset separat. Spre deosebire de aceasta, schema circuitului de citire folosește tranzistorul detector NMOS pentru a reseta încărcările acumulate ale condensatorului de integrare reducând numărul de elemente de circuit in-pixel necesare și numărul de elemente zgomotoase nedorite conectate la nodul de detectare. În Figura 1 este prezentată diagrama bloc a cipului camerei. Fiecare pixel activ constă dintr-un detector de bandă largă, un circuit de reset, un condensator de integrare și un pixel orb pentru compensare, urmate de un amplificator diferențial. Fiecare rând al matricei este reglat până la un moment dat și coloanele sunt selectectate consecutiv de un decodor rând/coloană, care este controlat de un dispozitiv programabil logic extern situat în interiorul modulului camerei. Semnalele multiplexate ale matricei pot fi citite diferențiat înaintea unui amplificator tampon on-chip. Cipul camerei video este ansamblat într-un modul compact cu un convertor analog-digital alimentat printr-o magistrală serială universală ( USB ). Fluxul video digital poate fi afișat pe un calculator prin intermediul unui software de captură video dedicat.

Figura 1. Schema bloc a cipului camerei

Detectorul front-end și circuitul de reset

Detectorul front-end este compus dintr-o antenă sonoră on-chip prezentat în Figura 2, alimentând un detector diferențial NMOS care permite detectarea de bandă largă.

Figura 2. Schema mixerului THz cu antena și circuitul de reset

Tranzistorul detector poate fi văzut ca o sursă de curent în paralel cu conductanța canalului M1 și un condensator de integrare C int. Integrarea/resetarea constantei de timp poate fi controlată de nivelul de tensiune al semnalului de resetare aplicat la poarta M1. Camera video a fost proiectată pentru 25 fps. Deși, acest lucru lasă suficient timp pentru integrare ( 40 ms per cadru ), condensatorul de integrare necesar ar fi prea mare pentru a fi integrat pe cip. Zona pixelilor disponibilă se potrivește doar unui condensator de integrare C int = 8 pF, cu o constantă de timp de integrare de aproximativ 0,1 s. Acest lucru poate fi atenuat prin mediere în domeniul digital până când camera video poate opera cadre la rate mai mari. Proiectarea fizică a antenei on-chip este prezentată în Figura 3.

Figura 3. Geometria unui singur pixel în matrice

Toate rutele de frecvență joasă necesare în centrul unui pixel sunt realizate de-a lungul intensității câmpului zero al antenei. Circuitul activ al pixelilor este găzduit în interiorul cadrului care înconjoară fiecare antenă în matrice. Siliconul cu rezistivitate scăzută ar trebui să contorizeze o pierdere suplimentară de 10% în comparație cu un substrat cu o rezistivitate mai mare. Acest lucru se datorează naturii sale de a pierde curent continuu, care nu scalează cu frecvență și datorită distanțelor relativ scurte ale undelor care călătoresc dea lungul inelului și prin substrat. Eficiența radiației simulate a antenei este de 70 – 77%, de la 0.8 – 1 THz pe un substrat semi-infinit. Configurația antenei are o cuplare-cruce redusă de – 25 dB între toți pixelii din matrice, chiar și în absența stratului anti-reflexie.

Circuitul de citire

În ceea ce privește proiectarea circuitului de citire, principala provocare este de a atinge un nivel scăzut de consum de energie. Ar fi de preferat, prin urmare, senzori de pixeli pasivi, dar semnalul de la circuitul detectorului este prea mic și, în modul de citire a tensiunii, trebuie să fie realizat de către o etapă de transconductanță a impedanței, făcându-l succesibil la trecerea de zgomot în lanțul de citire. Un circuit activ al pixelilor, prin urmare, oferă o mai bună imunitate la zgomot și o amplificare în pixeli. Pentru a reduce consumul mediu de energie per pixel, numai amplificatoarele în pixeli ale unui singur rând sunt active simultan. Figura 4 prezintă schema părții active a circuitului unor pixeli. Semnalul de selectare al rândului este împărțit între un rând de pixeli, în timp ce semnalul de selectare al coloanei este împărțit între o coloană de pixeli.

Figura 4. Circuitul pixelilor cu detector

Tranzistorul detector M1 este urmat de o pereche de tranzistori de citire M3/M4 care acționează ca o pereche diferențială cu un circuit de compensare atașat ( pixel de referință orb). Circuitul pixelilor de referință nu este conectat la nicio antenă și , prin urmare, este folosit pentru a produce un potențial de referință. Polarizarea porții perechii de tranzistori M3/M4 este furnizată de V ant. Această tensiune este aplicată fie prin pixelul activ fie prin pixelul de referință orb. În cazul M3, această tensiune de polarizare este aplicată în continuare prin nodul comun al antenei.

Implementarea matricii și schema circuitului

Schema bloc a unității de selecție digitală este prezentată în Figura 5. Selectarea pe rând și coloană se realizează prin utilizarea adreselor pe 5 biți pentru selectarea rândului și coloanei. Un singur rând este polarizat la un anumit timp și perechile diferențiale din fiecare coloană împart o sarcină activă comună ( M6 – M7 ), oferind un câștig în buclă deschisă de 50 dB per pixel.

Figura 5. Circuitul de selecție al pixelilor pentru o matrice,

cu selectarea rândului și a coloanei

Un multiplexor controlat digital selectează un singur pixel pentru a fi tamponat în continuare de un amplificator de unitate-câștig. Această schemă de citire permite funcționarea în paralel a 1024 de pixeli, în timp ce circuitele de citire activează doar un singur rând ( 32 de elemente ). Matricea generală și circuitul de citire au fost simulate în domeniu-timp cu ajutorul unui generator de model comportamental test. Această simulare a fost folosită pentru a emula excitația pixelilor în matrice și de a verifica timing-ul global, constanta de timp de integrare și injectarea responsabilă a switch-urilor analogice. Micrografia matricei este prezentată în Figura 6.

Figura 6. Micrografia matricii

Schema cipului include stiva de metal complet ( structuri metalice multi-strat gros ) cu umplere inactivă care să fie conforme cu o tehnologie CMOS calificată industrial.

Ansamblarea cipului si design-ul modulului camerei video

Camera THz este ansamblată într-o cutie de metal de dimensiuni 5 x 5 x 3 cm3 pentru a demonstra soluții de ansamblare cu cost scăzut pentru aplicații portabile. Aceasta este conectată la placa de achiziție de date prin intermediul unui singur cablu RJ45 de 8 fire. Aceasta constă dintr-o lentilă de silicon atașată la partea din spate a cipului, un controler pentru citire implementat într-un dispozitiv de control logic complex programabil acționat de un generator de ceas ( CLK ), un amplificator de câștig variabil de zgomot redus ( VGA ) și un suplinitor de putere așa cum este prezentat în Figura 7.

Figura 7. Diagrama bloc a modulului camerei video

Toate componentele sunt montate pe 4 plăci cu circuite imprimate ansamblate. Consumul total de energie al modulului camerei este de 280 mW și câștigul VGA a fost stabilit la 5 dB, cu o lățime de bandă de 500 kHz. Cipul a fost aliniat la centrul lentilelor și lipite împreună în timpul procesului de ansamblare al cipului. Raportul dintre lățimea cipului și raza lentilei este de 0,34 pentru a evita pierderile excesive de reflexie la contactul aer-silicon. Ieșirea analogică a camerei THz a fost prelevată 2 MSPS de catre un curent continuu alternativ extern și a fost trimisă la un calculator prin intermediul unui link USB pentru a fi afișată pe un ecran. Software-ul dezvoltat afișază un grafic tridimensional în timp real al fluxului de date. Aceasta permite procesarea imaginilor de bază a transmisiei video începând cu un cadru de calibrare închis pentru reducerea nivelului de zgomot.

Aplicații THz

Camera video THz poate fi folosită pentru diverse aplicații, în domenii precum securitate, agricultură, medicină și industrie. În continuare vom enumera câteva exemple:

Figura 8. Screening-ul de securitate non-invazivă

Figura 9. Monitorizarea apei

Figura 10. Controlul calității în industrie

Figura 11. Aplicații biomedicale și dentare

Figura 12. Calitatea imprimării hârtiei

ALTERA FPGA

PREZENTARE GENERALĂ

Un FPGA ( Field Programmable Gate Array ) este un circuit integrat digital configurabil, de către utilizator, după fabricare. Configurarea FPGA se face, în general, cu ajutorul unui limbaj de descriere hardware HDL, similar cu cel folosit pentru dispozitivele ASIC ( Application – Specific Integrated Circuit ), dezvoltându-se recent și compilatoare care traduc instrucțiuni din limbajul C în limbajul HDL.

ASIC – urile includ matrice de porți, elemente standard și circuite adaptate cerințelor. Acestea sunt foarte generice și pot avea până la 800 000 porți logice. Marele dezavantaj al ASIC – urilor este costul de producție destul de mare.

FPGA-urile sunt alcătuite din blocuri logice configurabile ( programabile ) legate între ele de o serie de conexiuni configurabile la rândul lor. FPGA – urile combină multe din caracteristicile matricilor de porți, cum ar fi densitatea mare, cu cele ale circuitelor programabile timpurii, în principal programabilitatea. Un factor diferențiator este acela că majoritatea FPGA – urilor are o granuralitate mare, ceea ce înseamnă că acestea constau într-o matrice de blocuri logice, înconjurate de blocuri de intrare/ieșire programabile și legate prin interconexiuni care sunt la rândul lor programabile. Un FPGA tipic conține între 64 și zeci de mii de blocuri logice, și un număr mai mare de circuite bistabile. Majoritatea FPGA – urilor nu asigură o interconectare completă între blocurile logice, ceea ce ar fi prohibitiv din punct de vedere al costurilor.

În figura 13 este prezentată structura unui FPGA

Figura 13. Structura unui FPGA

Există două clase principale de arhitectură FPGA și anume:

arhitecturi cu granulație mare

arhitecturi cu granulație fină

La ora actuală, FPGA – urile cu cea mai mare densitate sunt produse folosind tehnologia SRAM ( Static Random Access Memory ). Un al doilea proces tehnologic utilizat este cel numit antifuzibil, care are avantajul unei interconectivități sporite. Circuitele bazate pe SRAM sunt în mod inerent reprogramabile, chiar în cadrul sistemului, dar necesită o sursă externă de memorie de configurație.

Programarea convențională a FPGA – urilor am descris-o în schema de mai jos:

Figura 14. Ciclul de proiectare convențional pentru un FPGA

Tipuri de FPGA

După tehnologia folosită în procesul de fabricare, există mai multe tipuri de FPGA:

SRAM – au la bază celule SRAM. Pot fi programate/reprogramate odată instalate în sistem. Sunt volatile.

Antifuse – pot fi programate doar în laborator, cu un dispozitiv special. Nu pot fi reprogramate. Nu sunt volatile.

Fuse – pot fi programate doar în laborator, cu un dispozitiv special. Nu pot fi reprogramate. Nu sunt volatile.

EPROM ( Erasable Programmable Read – Only Memory ) – în mod obișnuit sunt programate doar o dată. Conținutul lor poate fi șters sub acțiunea razelor ultraviolet. Nu sunt volatile.

EEPROM ( Electricaly Erasable Programmable Read – Only Memory ) – sunt similare EPROM, doar că pot fi reprogramate.

Flash – au la bază celule flash care sunt mai mici decât cele EEPROM, ceea ce le face mai ieftine. Sunt reprogramabile. Nu sunt Volatile.

NIOS II ALTERA CYCLONE III 3C25

Setul Altera Cyclone III este un kit de dezvoltare foarte complet, cu o gamă largă de aplicații integrate care implică procesarea video și panoul de control tactil .

FPGA-urile Cyclone de la Altera au fost produse începând cu decembrie 2002 și sunt una din cele mai importante familii de astfel de circuite produse de această companie.

au la bază tehnologia SDRAM

conțin până la 24624 elemente logice

maxim 288Kb de memorie RAM.

Aceste FPGA-uri au drept țintă următoarele segmente ale pieței de produse electronice:

sisteme TV și DVD

rutere DSL

rețele wireless

controlul proceselor

telematică

imprimantele pentru calculatoare personale

CARACTERISTICI

Dispozitiv:

Nume de sistem: cycloneIII_3c25_niosII_video

Familie: Cyclone III

Dispozitiv: 3C25F324

Elemente totale logice folosite: 22875/24624 (93%)

Total pini folosiți: 167/216 (77%)

Memorie totală utilizată: 163270/608256 (27%)

Procesor:

Nios II / f core

Valori nominale: 113 DMIPS la 100 MHz, 1,400-1,800 LES, opțiuni MMU / MPU

invalide

4-kByte cache de instrucțiuni, cache de date 2-KByte

Interfețe de memorie:

Interfață Flash comună de memorie flash

16 MBytes

Memorie DDR SDRAM de înaltă performanță

Frecvență nominală: 133 MHz, 16 biți, 32 MBytes

Interfață serială periferică pentru card SD / MMC

Suportă card de memorie SD până la 1 Gbit

Memorie SRAM sincronă

1 MByte

Interfețe de comunicare:

Ethernet MAC 10/100/1000 Base T

Primire și transmitere integrată FIFO 512 × 32 biți

32 de biți de transmisie și de primire pentru acces la rețea prin canale SG-DMA

JTAG UART cu citire și scriere FIFO integrate

UART pentru RS-232 de comunicare serială

Rată de transfer de 115200, nici o paritate, 8 biți de date, 1 bit de stop

Implementate folosind uz general PIOs

Prevazut cu interfață controler LCD

Subsistemul Video:

Controler LCD integrat IP

Configurat la 800 × 480 rezoluție

Implementate folosind uz general PIOs

Controler integrat touch panel IP

Generație RGB Sync IP

128-byte ceas dual FIFO

Periferice de sistem:

Timere / countere

Timer-ul de sistem

Timer de înaltă rezoluție

4 butoane PIOs (numai intrare)

2 LED PIOs (numai ieșire)

Figura 15. Blocurile funcționale ale microprocesorului

NIOS II CYCLONE 3C25 cu sistem de control LCD

PREZENTARE KIT

În figura 16, ce prezintă partea din față, avem un capac transparent care acoperă ecranul LCD și ecranul tactil ce conferă instalației un design placut.

Figura 16. Ecran LCD

În figura 17, în partea de sus a setului, se pot vedea sloturile DB15F pentru ieșirea VGA dar și DB9F pentru legătura RS232 necesare pentru achiziția video, iar pentru partea audio sunt prezente sloturile pentru conectorii “Jack”.

Figura 17. Prezentare laterală 1

Figura 18 prezintă în partea de sus slotul pentru card SD/MMC, conectorul RJ45 folosit pentru internet, dar și PS2 ce este utilizat pentru conectarea tastaturii/mouse-ului, iar în partea de jos a setului se pot observa priza USB, comutatorul de pornire/oprire a instalației și conectorul de alimentare.

Figura 18. Prezentare laterală 2

IMAGINI DIGITALE

DESCRIEREA IMAGINILOR DIGITALE

Tehnologia imaginilor digitale (imaginile digitale captate și prelucrate pe computer) revoluționează continuu arta fotografică. Majoritatea imaginilor pe care le vedem tipărite au fost create folosind tehnologii digitale. Prelucrarea digitală se extinde de la un nivel primar, al retușării imaginilor noi, până la montajele fotografice foarte elaborate și prelucrate, utilizate curent în industria reclamelor.

O imagine digitală este o reprezentare a unei imagini reale bidimensională (imagine în "2D" sau două dimensiuni), ca o mulțime finită de valori digitale (numerice), codificate după un anumit sistem.

Imaginile digitale pot fi produse și plecând de la imagini tradiționale, analogice, prin digitalizare. Aceste imagini analogice se împart mai întâi în numeroase elemente infime ca suprafață numite pixeli, și anume sub formă de raster grafic sau hartă de tip raster, fiecare pixel primind (având) două coordonate plane. Apoi caracteristicile de luminozitate și culoare ale fiecărui pixel, eventual împreună cu coordonatele sale (dacă acestea nu sunt implicite), sunt codificate conform mai multor sisteme, rezultatul final al acestei digitalizări fiind un șir de numere care sunt memorate cu ajutorul calculatoarelor. În mod obișnuit, imaginile digitale și pixelii lor sunt stocate în memorii de computere, sau și pe benzi magnetice video digitale.

Luate ca atare, imaginile digitale și pixelii nu se pot vedea, deoarece ele sunt doar înșiruiri de numere. În mod teoretic memorarea lor ar putea fi realizată și prin simpla notare a șirului de numere pe hârtie, ceea ce însă este împiedicat în practică de lungimea uriașă a șirului. Pentru a consuma mai puțin loc în memorie, imaginile digitale pot fi stocate, sau și transmise sub forme comprimate, urmând să fie decomprimate la destinație după necesități.

Afișarea imaginilor digitale

Spunem despre o imagine că este digitală atunci când este construită din pixeli (picture element), în locul granulelor de argint.

Deși pixelii și imaginile digitale nu pot fi văzute în mod nemijlocit, până la urmă scopul folosirii lor este tot obținerea unor imagini reale, care să poată fi deci văzute de către om. Acestea se realizează cu ajutorul unor altor dispozitive tehnice, consacrate acestui scop, cum ar fi imprimantele (normale sau stereolitografice), ecranele (display-urile) de calculator, proiectoarele de imagini ș.a. Aceste imagini reale, de fapt analogice (deoarece rareori pixelii sunt reprezentați foarte acurat și fără încălecări), sunt denumite tot "imagini digitale", dacă provin din imaginile digitale din memoria calculatorului.

Pixelii sunt pătrati și pozitionați în rânduri orizontale și verticale formând o grila. Toți pixelii din grilă au aceeași dimensiune, au luminozitate și culoare uniformă, adică tonul culorii nu variază de la o margine la alta a aceluiași pixel.

Figura 19. Pixeli cu diferite tonuri și nivele

Într-o imagine digitală tipică, există 256 de niveluri diferite, sau tonuri distincte cu care se reprezintă trecerea uniformă de la o luminozitate închisă la una deschisă. Dacă pixelii sunt suficient de mici, atunci când sunt tipăriți, în imaginea privită nu se poate sesiza trecerea de la un ton la altul, având astfel iluzia unei treceri continue.

Dacă imaginea este monocromă, culoarea fiecărui pixel este exprimată printr-un bit, 1 sau 0.

Pentru o imagine true color, culoarea fiecărui pixel este exprimată în valori de intensitate pentru fiecare dintre culorile fundamentale (RGB), fiecare componentă a unei culori fiind reprezentată pe câte un octet rezultând astfel 256 de nivele pentru fiecare dintre componente. În acest caz sunt necesari câte 3 octeți pentru fiecare pixel și rezultă posibilitate a utilizării a 16.777.216 combinații de culoare.

Pentru o imagine bazată pe o paletă de culori, valoarea fiecărui pixel este interpretată ca fiind un index într-un tabel cu valori RGB (paleta de culori sau colormap). Numărul de biți necesar pentru stocarea culorii unui pixel depinde de numărul de culori din paletă. Dimensiunile obișnuite ale paletelor de culori sunt 16 (4 biți / pixel) și 256 (8 biți / pixel).

Formatul fișierelor imaginilor

Există o infinitate de forme și mărimi de imagini, acestea fiind valabile atât pentru imaginile tradiționale, analogice, cât și pentru cele digitale. Cel mai des folosite sunt însă formele dreptunghiulare, care se reflectă și la formele ecranelor de cinema, TV, calculatoare și altele. Forma imaginilor digitale dreptunghiulare se exprimă prin numărul de pixeli pe orizontală și verticală, sau pe lățime și lungime (înălțime).

Imaginile sunt stocate în fișiere cu scopul de a fi reproduse, fișierul respectiv conținând cel puțin urmatoarele informații:

dimensiunile imaginii (lațime și înălțime);

numărul de biți/pixel;

tipul imaginii;

paleta de culori (dacă este cazul);

datele imaginii (matrice cu valorile pixelilor);

Diferențele dintre formatele imaginilor provin din modul specific în care se organizează aceste informații. Structura unui fișier imagine tipic începe cu un antet în care sunt incluse informații despre imaginea conținută, după care urmează paleta de culori, dacă valorile pixelilor din imagine reprezintă indecși într-o paletă. Datele imaginii apar după paleta de culori. De obicei pixelii imaginii sunt stocați linie cu linie. Tabloul de pixeli ocupă cea mai mare parte a fișierului imagine, deși de obicei se folosesc diferite metode de compresie a datelor, bazate fie pe un algoritm de codare pe baza lungimii, fie pe alte scheme de compresie. De la un format de fișier imagine la altul pot apărea variații în modul de stocare a informațiilor.

Informația poate fi citită și înțeleasă numai dacă programul cu care se citește imaginea cunoaște acel format de fișier.

Bitmap (.bmp) – formatul a apărut odata cu prima versiune a sistemului de operare Windows. Imaginile în formatul .bmp au o calitate medie spre înaltă, dar dimensiunea este prea mare în comparație cu calitatea oferită.

Joint Photographic Expert Group (.jpeg) – a apărut ca urmare a unor cercetări destinate obținerii unor imagini digitale cu o comprimare mai mare, în scopul reducerii spațiului fizic utilizat pe disc. Imaginile JPEG sunt cele mai întâlnite pe Internet, tocmai din cauza gradului foarte mare de comprimare. Este un algoritm de compresie destinat comprimării imaginilor alb-negru sau color luate din realitate. Algoritmul de comprimare se bazează pe sensibilitatea crescută a ochiului uman la variațiile mici de luminanța și sensibilitatea mai redusă la variațiile mici de culoare. În această idee, algoritmul acordă mai multă atenție – deci mai multi bytes, pentru modificările fine de luminanță și o pondere mai mică pentru culoare, întrucât imaginea comprimată este destinată observării de către oameni, iar nu determinarilor colorimetrice. O proprietate foarte utilă a algoritmului jpeg este capacitatea acestuia de a avea un grad variabil de comprimare, ales de utilizator.

Graphic Interchange Format (.gif) – reușește compresii de pană la 90%, însă cele 256 de culori îl limitează la o gamă fixă de culori. Este superior JPEG în privința calității imaginii, a ratei de comprimare sau a ambelor. Imaginile optime pentru comprimare prin metoda GIF sunt cele cu linii și cu suprafețe uniform colorate, cum sunt cele desenate cu programe de grafică. GIF comprimă bine marginile netede, cum ar fi chenarele fotografiilor sau conturul literelor aplicate peste o imagine datorită rotunjirilor inerente în calculele matematice pe care le efectuează algoritmul de compresie.

Portable Network Graphics (.png) – deține probabil cel mai bun raport calitate/dimensiune. Acest format nu afectează calitatea imaginilor , însă spațiul ocupat mai mare decât la fișierele .jpeg îl face greu de implementat în mediul online. Pentru aceeași imagine, fișierele PNG sunt mai mici decât cele în varianta GIF. Formatul PNG-24 suportă și imagini cu tonuri continue, dar dimensiunile fișierelor sunt mai mari decât cele JPEG.

Tagged Image File Format – toate programele de prelucrare și vizualizare de fișiere imagine suportă acest format. Inițial a fost creat pentru trimiterea faxurilor, ulterior și pentru imagini digitale. Fișierele TIFF suportă mai multe prelucrări fară să le fie afectată calitatea deoarece informația se stochează fără comprimare și fără pierderi, dezavantajul fiind dimensiunea foarte mare. Formatul TIFF este recomandat ca fișier de salvare între etapele de prelucrare a imaginii, unde spațiul disponibil nu este o problemă.

RAW (.raw) – sunt fișierele care conțin datele primare, cele furnizate de captator, fără să fie modificate. În header-ul fișierului sunt stocate informații despre setările camerei în momentul fotografierii, lucru ce ajuta în timpul prelucrării. Dimensiunile sunt destul de mari dar nu mai mari decât la TIFF. În schimb, în timpul prelucrării se pot face modificări în privința expunerii, acurateței, contrastului, balansul de alb, etc. Pentru a putea fi imprimat însă, formatul RAW are nevoie obligatoriu de prelucrare. Un alt dezavantaj este că fiecare producător de camere foto digitale deține un format specific de fișier care nu poate fi prelucrat de programele altor companii.

Digital Negative (.dng) – este creat recent de Adobe pentru a fi pus la dispoziția fotografilor ca format universal de fișier RAW, astfel încât deja a fost adoptat de anumiți producatori de camere foto digitale. Formatul DNG prezintă aceleași avantaje și dezavantaje ca formatul RAW.

Tipuri de imagini

Orice imagine este o structură bidimensională (tablou, matrice) de date. După tipul datelor din această structură bidimensională, imaginile prelucrate pot fi împarțite în 2 categorii:

Imagini scalare: fiecare componentă conține un scalar. Imaginile monocrome sunt imagini scalare și au doar 2 valori posibile, care corespund unui conținut binar al imaginii.

Imagini vectoriale: fiecare componentă reprezintă un vector de numere. Cel mai des întâlnit caz este cel al imaginilor color, în care vectorul este compus din 3 elemente.

După natura lor, imaginile pot fi clasificate ca imagini abstracte, imagini non-vizibile și imagini vizibile.

Imaginile abstracte sau modelele sunt de fapt funcții matematice, continue sau discrete, de două variabile. Imaginile non-vizibile, care nu pot fi percepute în mod direct de ochiul uman, sunt de fapt achiziții ale unor câmpuri bidimensionale de parametri fizici (presiune, temperatură, densitate, etc). Imaginile ce pot fi percepute în mod direct de către ochiul uman, (deci imaginile vizibile) sunt la rândul lor imagini optice, generate ca distribuții de intensitate luminoasă (așa ca hologramele, imaginile de interferență și difracție) sau imagini propriu-zise (de luminanță în sensul curent al termenului, ce se referă la fotografii, desene, picturi, schițe, scheme și altele din aceeași categorie).

O altă împarțire a imaginilor scalare se poate face după semnificația ce se dă valorii numerice a pixelilor. Vom distinge astfel imagini de intensitate și imagini indexate. O imagine de intensitate este o imagine în care valoarea fiecărui pixel este o masură directă a intensității luminoase sau a mărimii fizice preluate de senzor, ca de exemplu în imaginile cu nivele de gri. Pixelii unei imagini de intensitate pot avea orice fel de valori: reale sau naturale (depinzând dacă imaginea este sau nu cuantizată).

Termenul de imagine digitală se aplică de asemenea și datelor asociate cu punctele unei regiuni din spațiu, tridimensionale, așa cum ar fi aceea produsă de un echipament tomografic, sau aparate fotografice speciale pentru 3 dimensiuni. În acest caz, fiecare element al imaginii în "3D" (în spațiu) are 3 coordonate (în loc de 2) și poartă numele de voxel (acronim provenit de la "volumetric pixel").

PRELUCRAREA IMAGINILOR

Binarizarea imaginilor

Binarizarea sau prăguirea (thresholding) imaginilor este un caz special al întinderii maxime a contrastului. Rezultatul operației de binarizare este o imagine care conține doar două nivele de gri: alb și negru. Pentru imagini în tonuri de gri, operația de binarizare se scrie matematic astfel:

unde L reprezintă numarul de nivele pe care se face cuantizarea tonurilor de gri. Cazul cel mai frecvent este L = 256, pentru o cuantizare pe 8 biți, x luând valori în intervalul [0,255], iar T este o valoare de prag, reprezentând o valoare întreagă din intervalul [0,L).

Pentru imaginile color, binarizarea se poate face în urmatorul mod:

unde v este un vector tridimensional ce reprezintă culoarea pixelului (de exemplu v=(R,G,B) ), iar Y(v) reprezintă luminanța (Y=0.3R+0.6G+0.1B).

În urma acestei transformări contrastul este maximizat la nivelul întregii imagini.

Histograma unei imagini

Histograma unei imagini reprezintă frecvența relativă de apariție a nivelelor de gri din imagine. Pentru o imagine f, de dimensiune M x N pixeli, histograma se definește astfel:

unde funcția δ este definită în urmatorul mod:

Din punct de vedere static, putem considera valoarea fiecărui pixel al imaginii ca o realizare particulară a unei variabile aleatoare asociată nivelelor de gri, caz în care histograma reprezintă funcția de densitate de probabilitate a acestei variabile aleatoare. Fiind o funcție de densitate de probabilitate, histograma fiecărei imagini verifică condiția de normare:

Practic, calculul histogramei presupune parcurgerea pixel cu pixel a imaginii și contorizarea numărului de nivele de gri întâlnite.

Egalizarea histogramei

Egalizarea histogramei reprezintă o operație de accentuare a contrastului și are ca scop obținerea unei histograme uniforme.

Se asociază unui pixel din imagine o variabilă aleatoare ξ . Astfel, valorile intensității luminoase ale pixelilor reprezintă realizări particulare ale variabilei aleatoare asociate. Se consideră că variabila ξ are o densitate de probabilitate și o funcție de repetiție . Se definește în continuare variabila care are funcția de repetiție:

Pentru cazul discret, se presupune că nivelele x de gri ale pixelilor au valori între 0 si L-1 (unde de regulă L=256), unde sunt asociate probabilitățile de apariție unde . Aceste probabilități pot fi estimate pe baza calculului histogramei, considerând imaginea dată, ca fiind o realizare particulară a procesului aleator descris de variabila , astfel:

Noile nivele de gri, reprezentând valori discrete ale variabilei din intervalul [0,L-1] se vor calcula cu formulele:

unde este histograma cumulativă a imaginii, iar este valoarea minimă a histogramei cumulative.

LIMBAJE DE PROGRAMARE UTILIZATE

Concepte generale ale limbajului MATLAB

Limbajul MATLAB este un limbaj de înaltă performanță pentru proiectarea asistată pe calculator. MATLAB este în același timp un limbaj de programare și un sistem de dezvoltare care integrează calculul, vizualizarea și programarea într-un mediu ușor de utilizat, probleme și soluțiile acestora fiind exprimate într-un limbaj matematic accesibil.

MATLAB este utilizat în domenii precum matematica și calculul numeric, dezvoltarea algoritmilor, modelare și simulare, analiza și vizualizarea datelor, grafică inginerească, dezvoltare de aplicații inclusive GUI.

Sistemul MATLAB constă în cinci părți principale: limbajul MATLAB, mediul de lucru MATLAB, Handle Graphics, biblioteca de funcții matematice a MATLAB-ului și interfața de aplicații program a MATLAB-ului ( API ).

Mediul de lucru MATLAB reprezintă un set de facilități ce permit manevrarea variabilelor în spațiul de lucru, importul și exportul de date, dezvoltarea, manipularea, editarea și depanarea fișierelor MATLAB, care au extensia .m, și a aplicațiilor MATLAB. Reprezintă sistemul grafic al MATLAB-ului și cuprinde comenzi de nivel înalt pentru vizualizarea datelor bi și tri-dimensionale, procesarea imaginilor, animație. Acesta permite și utilizarea unor comenzi de nivel scăzut pentru crearea unor interfețe grafice GUI.

Biblioteca de funcții matematice a MATLAB-ului reprezintă o colecție complexă de algoritmi de calcul pornind de la funcții elementare, de exemplu sinus, cosinus etc., până la funcții sofisticate, de exemplu inversarea unei matrice, valoarea proprie etc.

Interfața de aplicații program a MATLAB-ului( API ) este o bibliotecă ce permite scrierea de programe în C sau Fortran care interacționează cu MATLAB-ul. Aceasta include facilitate pentru apelarea rutinelor din MATLAB, apelarea MATLAB-ului ca masină de calcul, scrierea și citirea fișierelor de tip .mat.

MATLAB-ul lucrează cu expresii matematice care implică la scară largă lucrul cu matrici. Expresiile matematice sunt alcătuite cu ajutorul următoarelor tipuri: variabile, numere, operatori, funcții.

Variabilele

MATLAB-ul nu necesită declararea variabilelor deoarece atunci când întalnește un nou nume de variabilă, acesta generează automat variabila respectivă și alocă sapațiul necesar de memorie. La declararea variabilelor, MATLAB-ul face distincție între literele mici și cele mari.

De exemplu, a = 30 creează o matrice 1 x 1 cu numele a și stochează valoarea acesteia, 30, într-o singură locație corespunzătoare singurului element al matricei.

Numere

MATLAB-ul utilizează notația zecimală, cu punct zecimal opțional și cu semn + sau -. Se utilizează și notația stiințifică cu litera e pentru a specifica o putere a lui 10. Reprezentarea numerelor imaginare este realizată cu litera i sau j ca sufix.

Exemple de numere în MATLAB:

4 -52 0.0207

8.5900216 6.90713e-18 2.00159e13

2i -3.41193j 7e3i

Operatori

Expresiile utilizează operatori aritmetici uzuali:

+ Adunare

– Scădere

* Înmulțire

/ Împărțire

^ Ridicarea la o putere

( ) Operatorul de specificare a ordinii de evaluare

Funcții

MATLAB-ul furnizează un mare număr de funcții matematice elementare standard, de exemplu abs, sqrt, exp, sin etc. O parte din funcții sunt de tip built-in, adică sunt o parte a nucleului MATLAB. Acestea au o mare eficiență, dar detaliile constructive nu sunt accesibile utilizatorului.

Alte funcții sunt implementate ca fișiere MATLAB și pot fi modificate.

Funcții folosite pentru lucrul cu fișiere:

fopen – pentru a deschide fișierul

fclose – pentru a închide fișierul

fread – pentru a citi datele binare din fișier

fwrite – pentru a scrie date binare în fișier

Funcții folosite pentru calcule:

max – funcția ce returnează cea mai mare valoare

min – funcția ce returnează cea mai mică valoare

mean – calculează o valoare medie

prod – funcția ce calculează un produs

sum – funcția ce calculează o sumă

sort – sortează elementele în ordine crescătoare

Câteva funcții furnizează valori unor constante universale:

pi are valoarea 3.14159

I sau J reprezintă valoarea imaginară și are valoarea -1

Realmin reprezintă cel mai mic număr real în virgulă mobilă și are valoarea 2-1022

Realmax reprezintă cel mai mare număr real în virgulă mobilă și are valoarea 21022

Inf reprezintă infinitul

nu este un număr

Instrucțiuni în MATLAB:

Instrucțiunea if

Instrucțiunea if are următoarea sintaxă:

if expresie.logică

grup.de.instrucțiuni

end

Instrucțiunea if-else

Instrucțiunea if-else are următoarea sintaxă:

if expresie.logică

grup.de.instrucțiuni1

else

grup.de.instrucțiuni2

end

Instrucțiunea for

Instrucțiunea for are următoarea sintaxă:

for indice=expresie

grup.de.instrucțiuni

end

Instrucțiunea while

Instrucțiunea while are următoarea sintaxă:

while expresie

grup.de.instrucțiuni

end

Instrucțiunea break

Instrucțiunea break oprește execuția instrucțiunilor for sau while,folosită pentru întreruperea forțată a acestora.

Instrucțiunea return este folosită pentru o terminare normală a funcției.

Procesarea imaginilor în MATLAB

Procesarea imaginilor face referință la un ansamblu de tehnici și metode de achiziție,modificare,afișare,de stocare și de exploatare a informației de natură vizuală din imagini. Funcțional, prelucrarea imaginilor are ca scop transformarea imaginii de la intrare în altă imagine ce are caracteristici asemănătoare ( structurale, perceptuale și semantice ). Astfel de operații sunt cele de îmbunătățire, cele de filtrare pentru reducerea zgomotului, de restaurare și transformări geometrice.

Operațiile de îmbunătățire a imaginilor au ca scop mărirea detectabilității pentru componentele imaginilor. Detectabilitatea componentelor se referă mai mult la percepția vizuală umană decât la o analiză automată. Chiar și o imagine originală ( nedegradată ) poate să fie îmbunătățită, obținându-se o imagine falsificată. Calitatea subiectivă a imaginii poate să fie apreciată pe bază de contrast sau accentuare a elementelor de contur ( margini, frontiere, linii și muchii ) și pe bază de netezire în regiuni uniforme.

Funcții în MATLAB utile pentru îmbunătățirea imaginilor:

histeq – pentru egalizarea histogramei

brighten – pentru modificarea luminozității

imadjust – pentru ajustarea intensității sau a paletei de culori

stretchlim – pentru calcularea intensităților minime, dar și maxime utile unui contrast bun

Funcții în MATLAB folosite în aritmetica imaginilor:

imsubstract – pentru diferența între două imagini

imadd – pentru adunare între două imagini

imabsdiff – pentru diferența absolută între două imagini

immultiply – pentru înmulțire între două imagini

imcomplement – pentru complementarea unei imagini

imlincomb – pentru combinație liniară între două imagini

Transformările geometrice sunt utile pentru a se elimina anumite distorsiuni geometrice introduse de imperfecțiuni ale dispozitivului de captare. Pentru realizarea transformărilor geometrice se folosesc două etape:

transformarea coordonatelor pixelilor în imaginile inițiale

calcularea nivelelor de gri ale pixelilor în noua imagine

Funcții în MATLAB folosite în tranformările geometrice:

imresize – pentru redimensionarea unei imagini

imrotate – pentru rotirea unei imagini

imcrop – pentru selectarea unei zone dreptunghiulare în imagine

maketform – pentru realizarea unei structuri a transformării geometrice

cp2tform – pentru realizarea unei structuri a transformării geometrice

imtransform – pentru aplicarea unei transformări generale a imaginii

Funcții generale ale imaginilor în MATLAB:

imread – citește fișierele în format .img, imagini cu nivele de gri, imagini fără antet, imagini pătrate, imagini în format de 8 biți.

imwrite – scrie fișierele în format .img, imagini cu nivele de gri, imagini fără antet, imagini pătrate, imagini în format de 8 biți

mfiread – citește fișierele în format .mfi, imagini cu nivele de gri, imagini fără antet, imagini pătrate, imagini în format de 8 biți

mfiwrite – scrie fișierele în format .img, imagini cu nivele de gri, imagini fără antet, imagini pătrate, imagini în format de 8 biți

degrad – degradează o imagine în nivele de gri folosind filtrarea liniară și adăugarea zgomotului

dilatare – dilatează o imagine binară sau cu nivele de gri

enhance – prelucrează o imagini cu nivele de gri cu ajutorul operațiilor punctuale de îmbunătățire

erodare – erodează o imagine binară sau cu nivele de gri

etajfilt – filtrează o imagine cu nivele de gri folosind filtre ce ordonează dupa rang multietaj

gtransf – realizează o transformare geometrică afină a imaginii

lfilter – realizează filtrarea neliniară de ordine folosind L-filtru a imaginii

linfilt – realizează filtrarea liniară de ordine a imaginii

Concepte generale ale limbajului C

Limbajul C este un limbaj structurat pe funcții. O funcție poate fi considerată un subprogram, ea este declarată atribuindu-se un nume, iar apoi este apelată cu ajutorul numelui și cu parametrii specificați. La apelul funcției se execută instrucțiunile din interiorul acesteia.

Orice program scris în C trebuie să aibă o funcție “main”, funcție la care se face referire și prin “programul principal”. În momentul rulării programului scris, instrucțiunile din această funcție vor începe automat să se execute, la terminarea lor care implică și ieșirea din funcția main, programul se termină.

Exemplu de program doar cu funcția main și fără nici o instrucțiune:

void main() {

}

Acesta poate fi considerat un program, însă el nu face nimic.

Din interiorul acestui program pot fi apelate alte funcții, apriori definite, spre exemplu:

void functie() {

}

void main() {

functie();

}

După cum se observă, caracterele { și } sunt folosite pentru începerea unui bloc de instrucțiuni și pentru închiderea blocului.

Instrucțiunile pot fi atribuiri, operații matematice (adunare, scădere, înmulțire, împărțire, ridicare la putere, etc). O instrucțiune trebuie să aibă cel puțin un operator. Acești operatori sunt variabile sau constante. Orice variabilă trebuie să aibă un tip de date. Tipurile de date din C sunt prezentate în tabelul 1.

Tabelul 1. Tipuri de date în C

Declararea variabilelor se face punând înaintea numelui ales tipul de date. La declararea variabilelor se poate specifica și valoarea inițială a acestora.

unsigned long variabila;

int variabila=20;

Cu aceste variabile se pot face aproape orice fel de operații. Pentru a face o operație cu 2 sau mai mulți operatori, tipul acestora nu trebuie să fie același, dar valoarea ce va fi introdusă în variabila care păstrează rezultatul va fi convertită la tipul de date al acestei variabile.

float a=5,b=7,c;

c=a+b;

Mai multe valori de același tip de date pot fi reunite într-un vector, care poate fi considerat ca o mulțime de numere de acelasi tip. Exemplu de declarare și inițializare a unor vectori.

int vector_one[10]; /* se declară un vector de întregi */

int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

Exemplu de declarare a unui șir de caractere:

char txt[6] = "mikro";

Pe lângă variabile și funcții, o altă componentă foarte importantă a limbajului C sunt structurile decizionale și cele repetitive.

Structura decizională if

int a,b,c;

a=2; b=3;

if (a<b) {

c=a;

}

else {

c=b;

}

Se evaluează logic valoarea expresiei de după if. Dacă rezultatul evaluării logice este adevărat se va executa instructțiunea din primul bloc de instrucțiuni, în caz contrar se va executa cealălaltă. Niciodată nu se vor executa ambele în același timp.

Structura repetitivă “for”. Sintaxa este puțin mai complexă decât la if. Structura for conține o inițializare de variabilă, o condiție de continuare, și o incrementare.

n=1;

for(i=2;i<20;i++){

n = n * i;

}

Acest bloc de cod va avea ca rezultat calculul lui 20 factorial, care va fi pus în variabila n. Acest bloc se va repeta de 19 ori.

Operația ++ este o operație de incrementare, și are ca efect incrementarea lui i cu 1.

Structura repetitivă “while” este similară cu for doar că în sintaxa ei are doar condiția de ieșire din buclă.

i=2;

while(i<20) {

n = n * i;

i++;

}

Acest bloc de cod are același efect cu cel de mai sus, cu singura diferență că a fost folosită structura repetitivă while în loc de for.

Structura “do” . Este similară cu for și cu while cu singura deosebire că și atunci când condiția de continuare nu este satisfăcută de la început, instrucțiunile din blocul de instrucțiuni al structurii repetitive do vor fi executate cel puțin o dată.

i=2;

do {

n=n*i;

i++;

}

while(i<20);

REALIZARE PRACTICĂ

PREZENTARE GENERALĂ

Experimentul presupune dezvoltarea unor aplicații pentru prelucrarea imaginilor, în limbajele de programare Matlab si C++, pentru camera video TeraHertz, STMicroelectronics. Din cauza faptului că nu dispunem de acest dispozitiv, ne vom folosi de un fișier video pus la dispoziție de catre STMicroelectronics. După realizarea aplicațiilor vom folosi kit-ul de dezvoltare Altera Cyclone III 3C25, care va comunica direct cu camera video.

MOD DE LUCRU

Extragerea matricilor imaginilor într-un fișier text

Pentru început vom crea un program în Matlab care extrage, într-un fișier text, matricea fiecarui frame al fișierului video ThzMovieRichard.wmv .

Este necesară citirea fișierului video ThzMovieRichard.wmv ce urmează a fi prelucrat.

filename=' D:\aaa\franta\facultate ISEP\ISEP\m\THzCam\ THzMovieRichard.wmv';

mov = VideoReader(filename);

Vom citi numărul frame-urilor din fișierul video.

numFrames = mov.NumberOfFrames;

Pentru obtinerea matricei fiecarei imagini se va folosi o bucla “for” prin care parcurgem fișierul video.

Citim frame-ul curent.

currFrame = read(mov, t);

Tranformăm imaginea color într-o imagine cu nuanță de gri și modificăm dimensiunile acesteia la 240 x 240.Convertim elementele matricei imaginii la unsigned integer pe 8 biți.

grayFrame = currFrame(1:end,100:339);

figure(1), imagesc(grayFrame), colormap(gray);

img=uint8(grayFrame);

[h w]=size(img);

În figurile 18 și 19 sunt prezentate imaginile originale și imaginile prelucrate.

Figura 20. Imagini originale

Figura 21. Imagini cu nuanță de gri

Creem un fișier text în care se vor scrie matricile imaginilor.

fid = fopen('data.txt','wt')

Vom folosi o nouă buclă “for” care va scrie elementele de pe linii și coloane, ale fiecărei matrici.

for i= 1:h

for j=1 :w

fprintf( fid,'%d ',img(i,j));

end

fprintf(fid,'\n');

end

După parcurgerea acestei bucle “for’ se vor salva datele scrise în fișierul text.

fclose(fid)

Codul folosit pentru extragerea matricilor din fișierul video este:

clc;

close all;

clear all;

filename ='D:\aaa\franta\facultate ISEP\ISEP\m\THzCam\THzMovieRichard.wmv'

mov = VideoReader(filename);

numFrames = mov.NumberOfFrames;

fid = fopen('data.txt','wt')

for t = 1 : numFrames

currFrame = read(mov, t); %reading individual frames

%transform the color image in a gray image and convert it to

%dimensions 240×240

grayFrame = currFrame(1:end,100:339);

figure(1), imagesc(grayFrame), colormap(gray);

img=uint8(grayFrame);

[h w]=size(img);

for i= 1:h

for j=1 :w

fprintf( fid,'%d ',img(i,j));

end

fprintf(fid,'\n');

end

fprintf(fid,'\n');

end

fclose(fid)

Crearea unui program în C pentru citirea și scrierea unui fișier text

Pentru a dezvolta în continuare aplicația, este necesară creerea unui program C++ care citește fișierul obținut anterior și il scrie într-un alt fișier text. Acest lucru este necesar pentru a trece de la mediul Matlab la NIOS.

Vom citi fișierul creat in Matlab.

ifstream in("data.txt ");

Vom crea un nou fișier de tip text pregătit pentru a scrie conținutul fișierului anterior.

ofstream out("data2.txt");

Declarăm o variabilă de tip string, cu ajutorul căreia vom parcurge, prin instrucțiunea repetitivă “while”, fișierul text “data.txt”.

string s;

while(getline(in, s))

out << s << "\n";

Codul C++ folosit este următorul:

#include "stdafx.h"

#include <string>

#include <fstream>

using namespace std;

unsigned char main() {

ifstream in("data.txt"); // Open for reading

ofstream out("data2.txt"); // Open for writing

string s;

while(getline(in, s)) // Discards newline char

out << s << "\n"; // … must add it back

}

Scrierea și compilarea unui program folosind Quartus II

Pentru a implementa programul anterior pe placa FPGA ne folosim de soft-urile Quartus II și NIOS II IDE.

Pornirea aplicației Quartus

După instalare, iconița Quartus II ar trebui să apara pe desktop. Pentru pornirea software-ului va se da un dublu clic pe iconiță și se va aștepta până când apare fereastra cu numele Quartus II.

Prima fereastră care va fi afișată după deschiderea mediului de programare Quartus II este fereastra Getting Started With Quartus II Software.

Figura 22. Interfața software-ului QUARTUS II

Crearea unui nou program

Pentru crearea unui nou proiect se selectează opțiunea Create a New Project din fereastra Getting Started With Quartus II Software. În fereastra care se deschide se selectează directorul de lucru pentru proiect, se introduce un nume pentru proiectul curent, apoi se introduce un nume pentru entitatea principală a proiectului. Se dă clic pe butonul Next pentru a continua.

În următoarea fereastra se pot include în proiect fișiere de design existente și / sau să se specifice librării noi. Pentru a continua se dă clic pe butonul Next.

În cea de-a treia fereastră a wizardului se selectează dispozitivul hardware utilizat. La Device family se selectează Cyclone III, la Target device se selectează Specific device selected in „Available devices” list, iar in zona Show in „Available device” list se selectează pentru Package – Any, pentru Pin count – 324, iar pentru Speed grade se va selecta Any. Din zona Available devices se va selecta circuitul EP3C25F324C6, acesta fiind circuitul de pe plăcile de dezvoltare Cyclone III Starter Kit.

Pentru a finaliza crearea noului program se va apasa butonul Finish.

Implementarea schemei

După crearea noului proiect se intră în fereastra de lucru a mediului de dezvoltare Quartus II.

Pentru a putea implementa o schemă nouă, va trebui creat un fișier nou, de tipul Block Diagram / Schematic File. Pentru aceasta, din meniul File al mediului de dezvoltare se alege opțiunea New. Din fereastra nou deschisă se alege opțiunea Block Diagram / Schematic File din cadrul opțiunii Design Files. Dând clic pe butonul OK se va deschide foaia de lucru pentru introducerea schemei.

Se va salva fișierul cu schema bloc prin selecția opțiunii Save as… din meniul File al mediului de dezvoltare Quartus II.

În continuare definim sistemul cu microprocesor cu ajutorul SOPC builder, din meniul Tools de unde se va alege opțiunea SOPC Builder.

Figura 23. Selectarea opțiunii SOPC Builder din meniul Tools

Va apărea fereastra Create New System în care vom salva numele noului sistem, iar la sectiunea Target HDL se va selecta opțiunea Verilog. După apăsarea butonului OK vom avea noul sistem unde vom insera componentele ce îl vor defini.

Prima componentă introdusă se va afla în submeniul Altera SOPC Builder unde se selectează Nios II Processor și se va alege cel mai mic dintre ele așa cum se vede în figura următoare, iar după selectare se va acționa butonul Finish. Următorul pas este introducerea memoriilor interne din submeniul Memories and memory Controller, dăm click pe On-Chip, iar apoi pe On chip memory unde se va alege un total de memorie alocată de 32 Kbytes.

Următoarea componentă este introducerea unui periferic de comunicare care să facă legatura între PC și hardware prin portul de depanare JTAG, mergând pe submeniul Interface protocul, iar apoi pe serial și în cele din urmă pe JTAG UART. Se utilizează parametrii standard și se actionează Finish.

Cea de-a treia componentă este utilizată pentru a conecta LED-urile și se bazează pe introducerea unui controler de intrări/ieșiri paralele (PIO). Se selectează Peripherals, apoi Microcontroller Peripherals și în cele din urma PIO. În fereastra nou aparută la secțiunea Width vom selecta 4 biți, iar la Direction se selectează Output ports only, iar la final se acționează butonul Finish. Această ultimă componentă (PIO) se redenumește LED_PIO.

După finalizarea introducerii celor trei componente sistemul va arăta ca cel din urmatoarea figură:

Figura 24. Implementarea sistemului

Pentru a aloca automat adresa de bază a componentelor vom merg la meniul System, Auto-Assign Base Addresses și vom acționa butonul Generate.

Figura 25. Alocarea adresei de bază a componentelor

Atunci când generalizarea sistemului a fost finalizată cu succes fereastra actuală o vom închide și ne întoarcem la programul Quartus II. Vom da dublu-click pe partea hașurată a imaginii unde introducem 2 pini de intrare pe care îi redenumim CLK si RESET și unul singur de ieșire ce va suferi și el o modificare a numelui în LED[3..0]. După finalizarea redenumirii se va merge la meniul Processing și se va selecta Start Compilation.

Figura 26. Pinii CLK și RESET

Figura 27. Compilarea programului

Crearea și rularea unui program C folosind ALTERA NIOS II IDE

Pentru a face posibilă continuarea aplicației noastre este nevoie de instalarea și ruralea software-ului ALTERA NIOS II IDE.

Figura 28. Software-ul ALTERA Nios II IDE

Mediul de dezvoltare integrat NIOS II IDE este un software grafic de dezvoltare pentru familia de procesoare intregrate NIOS II. Acest software ofera o platformă de dezvoltare consistentă care funcționează pentru toate sistemele procesoarelor NIOS II. Se pot realiza toate procesele de dezvoltare inclusiv de editare, de construire și depanare. IDE permite crearea de aplicații complexe bazate pe un sistem de operare în timp real (RTOS).

Pentru a începe lucrul în software-ul NIOS II IDE este necesar să se parcurgă urmatorii pași, în ordinea dată. Se merge pe butonul START la folderul Altera, iar apoi se va da dublu-click pe fișierul NIOS II IDE.

Crearea unui nou proiect

Odată pornit softwareul, pentru a rula o nouă aplicație, se va merge la meniul File și se va da click pe New C/C++ Application.

În noua fereastră aparută, la secțiunea Name se va scrie numele noii aplicații, la secțiunea SOPC Builder System se va alege folderul în care a fost încarcat sistemul lucrat în programul Quartus II, iar la Select Project Template se va alege proiectul cu numele dat mai sus. După terminarea tuturor pașilor se va da click pe butonul Finish.

Figura 29. Crearea unui nou proiect ]n Nios II

Construirea proiectului

Prin construirea unui proiect NIOS II IDE se compilează și se crează legături între toate codurile sursă asociate proiectului și bibliotecilor sale.

Pentru a încărca programul în memorie este nevoie să creem o bibliotecă și mai exact va trebui să dăm click dreapta pe folderul cu numele „nume aplicatie”_syslib[sys], din cele trei nou apărute în fereastra nostră, unde se va merge la Properties. Aici se va selecta opțiunea Small C library și se va da OK. Odată finalizați pasii se va selecta Built Project.

Figura 30. Crearea unei biblioteci

Rularea aplicatiei

După obținerea unei ferestre ca cea din figura 28 vom da dublu-click pe NIOS II Hardware pentru alegerea sistemului nostru, apoi se va apasa pe butonul Run.

Odată finalizată rularea, rezultatul obținut se va sterge și vom scrie codul nostru în limbajul C++ după care vom acționa butonul Run.

Figura 31: Rularea aplicației

Extragerea imaginilor din fișierul video

În continuare vom crea un program în Matlab cu ajutorul căruia vom extrage imaginile fișierului video ThzMovieRichard.wmv. Aceste imagini vor fi prelucrate prin diferite metode.

Vom crea un folder în care vor fi salvate imaginile.

opFolder = fullfile(cd, 'imagini’);

if ~exist(opFolder, 'dir')

mkdir(opFolder);

end

Într-o buclă “for” vom parcurge fiecare frame, transformat în imagine cu nuanță de gri, de dimensiuni 240 x 240, al fișierului video. Vom salva aceste frame-uri în formatul “.bmp”.

opBaseFileName = sprintf('%3.3d.bmp', t);

opFullFileName = fullfile(opFolder, opBaseFileName);

imwrite(grayFrame, opFullFileName, 'bmp');

Codul Matlab folosit este:

clc;

close all;

clear all;

filename ='D:\aaa\franta\facultate ISEP\ISEP\m\THzCam\THzMovieRichard.wmv';

%reading a video file

mov = VideoReader(filename);

% Defining Output folder as 'imagini'

opFolder = fullfile(cd, 'imagini');

%if not existing

if ~exist(opFolder, 'dir')

%making directory

mkdir(opFolder);

end

%getting frames no

numFrames = mov.NumberOfFrames;

numFramesWritten = 0;

%for loop to traverse & process from first frame to last frame

for t = 1 :numFrames

currFrame = read(mov, t); %read individual frames

grayFrame = currFrame(1:end,100:339);

opBaseFileName = sprintf('%3.3d.bmp', t);

opFullFileName = fullfile(opFolder, opBaseFileName);

imwrite(grayFrame, opFullFileName, 'bmp'); %saving as 'bmp' file

%indicating the current progress of the file/frame written

numFramesWritten = numFramesWritten + 1;

figure(1), imagesc(grayFrame), colormap(gray);

img=uint8(grayFrame);

[h w]=size(img);

end

Detectarea conturului unei regiuni

Imaginile extrase din fișierul video vor fi prelucrate pentru a detecta conturul obiectelor filmate cu camera THz. Se vor utiliza trei detecori, Canny, Sbel și Roberts. După compararea rezultatelor se va alege cea mai bună metodă de detectare a contururilor.

Pentru început, se va transforma imaginea color într-o imagini cu nuanțe de gri.

gray_img = rgb2gray(currImage);

După această transformare se va extrage conturul obiectelor din imagine. Pentru fiecare din cei trei operatori se va extrage conturul atât pe orizontală cât și pe verticală.

Se va extrage conturul obiectelor folosind operatorul Sobel pe orizontală și apoi se va afișa rezultatul.

[g1,t1] = edge(gray_img,'sobel','horizontal');

Rezultatul este prezentat în figura 32, în partea stângă este prezentată imaginea inițială, iar în partea dreaptă este prezentată imaginea obținută în urma prelucrării.

Figura 32. Operatorul Sobel pe orizontală

Acum se va extrage conturul obiectelor folosind operatorul Canny pe orizontală.

[g2,t2] = edge(gray_img,'canny','horizontal');

În figura 33 este prezentată, în partea stangă, imaginea inițială, iar în partea dreaptă, imaginea obținută.

Figura 33. Operatorul Canny pe orizontală

Ultimul operator folosit este operatorul Roberts pe orizontală.

[g3,t3] = edge(gray_img,'roberts','horizontal');

Rezultatele obținute sunt afișate în figura 34.

Figura 34. Operatorul Roberts pe orizontală

Rezultatele obținute în urma extragerii conturului prin cele trei metode, pe orizontală,

nu sunt foarte clare. Totuși, prin metoda Roberts s-a obținut o imagine mai clară.

În continuare, se va extrage conturul obiectelor folosind operatorul Sobel pe verticală.

[g4,t4] = edge(gray_img,'sobel','vertical');

În figura 35 sunt prezentate rezultatele prelucrării.

Figura 35. Operatorul Sobel pe verticală

Se extrage conturul folosind operatorul Canny pe verticală.

[g5,t5] = edge(gray_img,'canny','vertical');

În figura 36 sunt prezentate rezultatele prelucrării.

Figura 36. Operatorul Canny pe verticală

Ultimul operator folosit este operatorul Roberts pe verticală.

[g6,t6] = edge(gray_img,'roberts','vertical');

Rezultatele sunt prezentate în figura 37.

Figura 37. Operatorul Roberts pe verticală

Și de această dată, imaginile obținute în urma prelucrării cu operatorul Roberts au fost cele mai clare.

Codul folosit pentru aceste prelucrări este următorul:

clc;

close all;

clear all;

numImages = 990

for i = 1 : numImages

filename = sprintf('%03d.tiff',i);

currImage = imread(filename);

gray_img = rgb2gray(currImage);

[g1,t1] = edge(gray_img,'sobel','horizontal');

imshow(g1);

[g2,t2] = edge(gray_img,'canny','horizontal');

figure, imshow(g2);

[g3,t3] = edge(gray_img,'roberts','horizontal');

figure, imshow(g3);

[g4,t4] = edge(gray_img,'sobel','vertical');

figure, imshow(g4);

[g5,t5] = edge(gray_img,'canny','vertical');

figure, imshow(g5);

[g6,t6] = edge(gray_img,'roberts','vertical');

figure, imshow(g6);

end

Rezultatele nu sunt cele așteptate pentru că se dorește o calitate mai bună, o recunoaștere mai precisă a obiectelor. Din această cauza, colegul meu, Păunescu Florin, va utiliza alte metode de prelucrare a imaginilor obținute de la camerele THz, metode de binarizare a imaginilor în speranța obținerii unor rezultate mai bune.

Concluzii

În concluzie, putem spune că dezvoltarea tehnologiilor THz și a domeniului prelucrărilor de imagini are o mare aplicabilitate în viața cotidiană. În prezent, aceste tehnologii sunt folosite cu succes în diverse domenii de activitate.

Pentru realizarea acestui proiect au fost necesare multe ore de studiu deoarece a implicat utilizarea unor aparate și soft – uri la care nu am avut acces până în acel moment. În tot acest timp am dobândit abilitatea de a lucra în echipă, iar problemele întâmpinate pe parcurs au ajutat la dezvoltarea capacității de a găsi soluții pentru rezolvarea acestora.

Rezultatele nu sunt cele așteptate pentru că se dorește o calitate mai bună, o recunoaștere mai precisă a obiectelor. Din această cauza, colegul meu, utiliza alte metode de prelucrare a imaginilor obținute de la camerele THz, metode de binarizare a imaginilor în speranța obținerii unor rezultate mai bune.

Bibliografie

P.Siegel, “Terahertz technology”,IEEE Trans. Microwave Theory Tech, vol. 50, no.3, Mar.2002.

U. Pfeiffer, “ESSCIRC plenary: Terahertz imaging with CMOS/BiCMOS process technologies,” in 2010 Eur. Solid-State Circuits Conf. (ESSCIRC), , Sep. 2010.

E. Öjefors, N. Baktash, Y. Zhao, R. Al Hadi, H. Sherry, and U. Pfeiffer,“Terahertz imaging detectors in a 65-nm cmos soi technology,” in 2010Eur. Solid-State Circuits Conf. (ESSCIRC), Seville, Spain, Sep. 2010

H. Sherry, J. Grzyb, Y. Zhao, R. A. Hadi, A. Cathelin, A. Kaiser, and U. Pfeiffer, “A 1 k-pixel CMOS camera chip for 25 fps real-time terahertz imaging applications,” in 2012 IEEE Int. Solid-State Circuits Conf. (ISSCC) Dig. Tech. Papers, Feb. 2012

H. Sherry, R. Al Hadi, J. Grzyb, E. Öjefors, A. Cathelin, A. Kaiser, and U. R. Pfeiffer, “Lens-integrated THz imaging arrays in 65 nm CMOS technologies,” in IEEE Radio Freq. Integr. Circuits (RFIC) Symp.Dig., Jun. 2011

L. Samoska, “An overview of solid-state integrated circuit amplifiers in the submillimeter-wave and THz regime,” IEEE Trans. Terahertz Sci. Technol., vol. 1, no. 1, pp. 9–24, Sep. 2011.

Cartea tehnică a instalației Altera Cyclone III 3C25

TOTUL DESPRE C ȘI C++ , Kris Jamsa & Lars Kland

N. SANTITISSADEEKORN AND E.M.BOLLT, “IMAGE EDGE RESPECTING DENOISING WITH EDGE DENOISING BY A DESIGNER NONISOTROPIC STRUCTURE TENSOR METHOD”, COMPUTATIONAL METHODS IN APPLIED MATHEMATICS, Vol.9(2009)

Prof. univ. dr. ing. Florica Moldoveanu, Tehnici de îmbunătățire și restaurare a imaginilor

ReferinȚe web

http://www.mathworks.com

http://www.altera.com

http://www.umfcv.ro/files/l/a/LABORATOR%20NR_%208%20%E2%80%93%20PRELUCRAREA%20IMAGINILOR%20MEDICALE_%20IMAGEJ.pdf

http://www.altera.com/products/fpga.html

http://ro.wikipedia.org/wiki/FPGA

http://imag.pub.ro/ro/cursuri/archive/labpi.pdf

http://old.ace.tuiasi.ro/ro/academice/curricula/programe/ingineri/…/Lab02.doc

http://www.foto-club.ro/article/6832/Imagine-digitala

A. CODUL SURSĂ

clc;

close all;

clear all;

filename ='D:\aaa\franta\facultate ISEP\ISEP\m\THzCam\THzMovieRichard.wmv'

%reading a video file

mov = VideoReader(filename);

%getting no of frames

numFrames = mov.NumberOfFrames;

fid = fopen('data.txt','wt')

%for loop to traverse & process from frame '1' to 'last' frames

for t = 1 : numFrames

currFrame = read(mov, t); %reading individual frames

%transform the color image in a gray image and convert it to

%dimensions 240×240

grayFrame = currFrame(1:end,100:339);

figure(1), imagesc(grayFrame), colormap(gray);

img=uint8(grayFrame);

[h w]=size(img);

for i= 1:h

for j=1 :w

fprintf( fid,'%d ',img(i,j));

end

#include "stdafx.h"

#include <string>

#include <fstream>

using namespace std;

unsigned char main() {

ifstream in("data.txt"); // Open for reading

ofstream out("data2.txt"); // Open for writing

string s;

while(getline(in, s)) // Discards newline char

out << s << "\n"; // … must add it back

}

clc;

close all;

clear all;

% assigning the name of sample video file to a variable

filename ='D:\aaa\franta\facultate ISEP\ISEP\m\THzCam\THzMovieRichard.wmv';

%reading a video file

mov = VideoReader(filename);

% Defining Output folder as 'imagini'

opFolder = fullfile(cd, 'imagini');

%if not existing

if ~exist(opFolder, 'dir')

%make directory & execute as indicated in opfolder variable

mkdir(opFolder);

end

%getting no of frames

numFrames = mov.NumberOfFrames;

numFramesWritten = 0;

%for loop to traverse & process from frame '1' to 'last' frames

for t = 1 :numFrames

currFrame = read(mov, t); %reading individual frames

grayFrame = currFrame(1:end,100:339);

opBaseFileName = sprintf('%3.3d.bmp', t);

opFullFileName = fullfile(opFolder, opBaseFileName);

imwrite(grayFrame, opFullFileName, 'bmp'); %saving as 'bmp' file

%indicating the current progress of the file/frame written

numFramesWritten = numFramesWritten + 1;

figure(1), imagesc(grayFrame), colormap(gray);

img=uint8(grayFrame);

[h w]=size(img);

end

clc;

close all;

clear all;

numImages = 990

for i = 1 : numImages

filename = sprintf('%03d.tiff',i);

currImage = imread(filename);

gray_img = rgb2gray(currImage);

[g1,t1] = edge(gray_img,'sobel','horizontal');

imshow(g1);

[g2,t2] = edge(gray_img,'canny','horizontal');

figure, imshow(g2);

[g3,t3] = edge(gray_img,'roberts','horizontal');

figure, imshow(g3);

[g4,t4] = edge(gray_img,'sobel','vertical');

figure, imshow(g4);

[g5,t5] = edge(gray_img,'canny','vertical');

figure, imshow(g5);

[g6,t6] = edge(gray_img,'roberts','vertical');

figure, imshow(g6);

end

CD / DVD

Autorul atașează în această anexă obligatorie, versiunea electronică a aplicației, a acestei lucrări, precum și prezentarea finală a tezei.

Index

B

Bibliografie 9

C

CUPRINSUL xi

LISTA FIGURILOR xii

LISTA TABELELOR xiii

R

Referințe web 10

Bibliografie

P.Siegel, “Terahertz technology”,IEEE Trans. Microwave Theory Tech, vol. 50, no.3, Mar.2002.

U. Pfeiffer, “ESSCIRC plenary: Terahertz imaging with CMOS/BiCMOS process technologies,” in 2010 Eur. Solid-State Circuits Conf. (ESSCIRC), , Sep. 2010.

E. Öjefors, N. Baktash, Y. Zhao, R. Al Hadi, H. Sherry, and U. Pfeiffer,“Terahertz imaging detectors in a 65-nm cmos soi technology,” in 2010Eur. Solid-State Circuits Conf. (ESSCIRC), Seville, Spain, Sep. 2010

H. Sherry, J. Grzyb, Y. Zhao, R. A. Hadi, A. Cathelin, A. Kaiser, and U. Pfeiffer, “A 1 k-pixel CMOS camera chip for 25 fps real-time terahertz imaging applications,” in 2012 IEEE Int. Solid-State Circuits Conf. (ISSCC) Dig. Tech. Papers, Feb. 2012

H. Sherry, R. Al Hadi, J. Grzyb, E. Öjefors, A. Cathelin, A. Kaiser, and U. R. Pfeiffer, “Lens-integrated THz imaging arrays in 65 nm CMOS technologies,” in IEEE Radio Freq. Integr. Circuits (RFIC) Symp.Dig., Jun. 2011

L. Samoska, “An overview of solid-state integrated circuit amplifiers in the submillimeter-wave and THz regime,” IEEE Trans. Terahertz Sci. Technol., vol. 1, no. 1, pp. 9–24, Sep. 2011.

Cartea tehnică a instalației Altera Cyclone III 3C25

TOTUL DESPRE C ȘI C++ , Kris Jamsa & Lars Kland

N. SANTITISSADEEKORN AND E.M.BOLLT, “IMAGE EDGE RESPECTING DENOISING WITH EDGE DENOISING BY A DESIGNER NONISOTROPIC STRUCTURE TENSOR METHOD”, COMPUTATIONAL METHODS IN APPLIED MATHEMATICS, Vol.9(2009)

Prof. univ. dr. ing. Florica Moldoveanu, Tehnici de îmbunătățire și restaurare a imaginilor

ReferinȚe web

http://www.mathworks.com

http://www.altera.com

http://www.umfcv.ro/files/l/a/LABORATOR%20NR_%208%20%E2%80%93%20PRELUCRAREA%20IMAGINILOR%20MEDICALE_%20IMAGEJ.pdf

http://www.altera.com/products/fpga.html

http://ro.wikipedia.org/wiki/FPGA

http://imag.pub.ro/ro/cursuri/archive/labpi.pdf

http://old.ace.tuiasi.ro/ro/academice/curricula/programe/ingineri/…/Lab02.doc

http://www.foto-club.ro/article/6832/Imagine-digitala

Similar Posts