Metode de Focalizare a Zonelor de Interes din Imaginile Digitale
Cuprins
Cuprins 3
Introducere 5
CAPITOLUL I 7
Echipamente pentru achiziția imaginilor. Dispozitive “foto” digitale 7
1.1. Introducere 7
1.2. Sistemul de vedere uman 7
1.3. Scanner- ul 8
1.4. Camera digitală 9
1.4.1. Senzori de imagine 10
1.4.2. Obiectivul 12
1.4.3. Obturatorul 20
1.5. Camera video 20
CAPITOLUL II 22
Formarea imaginilor 22
2.1. Formarea imaginii printr-un dioptru sferic 23
2.2. Vederea umană 24
2.3. Formarea imaginii prin obiectivul camerei foto-video 25
2.3.1. Imaginea prin lentile sferice subțiri 26
2.3.2. Construcția imaginii unui obiect real prin lentilele subțiri sferice 27
2.4. Senzorii de imagine pentru camerele digitale 28
2.4.1. CCD 28
2.4.2. CMOS sau APS (active pixel sensor) 28
2.5. Culorile imaginii 29
2.6. Imagini digitale 30
CAPITOLUL III 31
Focalizarea zonelor de interes din imaginile digitale 31
3.1. Tipuri de focalizare 32
3.1.1. Focalizarea automată cu ultrasunete 32
3.1.2. Focalizarea electronică cu ajutorul unui sistem infraroșu de detective 33
3.1.3. Focalizarea electromecanică 34
3.1.4. Focalizarea prin împărțirea zonală a imaginii 35
CAPITOLUL IV 36
Implementarea aplicațiilor de prelucrare a imaginilor digitale 36
4.1. Crearea interfeței grafice în GUI – Matlab 36
4.2. Identificarea focalizării imaginii video în timp real 37
4.2.1. Regiunea de interes 37
4.2.2. FFT și focalizarea relativă 38
4.2.3. Construirea sistemului în Simulink 38
4.2.4. Rezultatele simulării 43
4.3. Afișarea histogramei utilizând înregistrarea video live 45
4.4. Transformări ale imaginii 47
4.4.1. Detectarea marginilor dintr-o imagine cu ajutorul modelului fuzzy logic 47
4.4.2. Detectarea marginilor într-o imagine cu metoda Canny 50
4.4.3. Detectarea marginilor într-o imagine cu metoda Sobel 51
4.4.4. Detectarea marginilor într-o imagine cu metoda Prewitt 52
4.4.5. Segmentarea imaginii 52
4.4.6. Complementul imaginii 53
4.4.7. Trasarea limitelor într-o imagine 53
4.4.8. Rotirea imaginii după un unghi dat 55
4.4.9. Ajustarea imaginii 55
4.4.10. Redimensionarea imaginii 56
4.4.11. Egalizarea histogramei unei imaginii 56
4.4.12. Intoarcerea verticală a imaginii 57
4.4.13. Întoarcerea orizontală a imaginii 57
4.4.14. Imaginea în tonuri de gri 58
4.4.15. Imaginea în negru și alb 58
4.4.16. Componenta roșie a imaginii 59
4.4.17. Componenta albastră a imaginii 59
4.4.18. Componenta verde a imaginii 60
Concluzii 61
Bibliografie 62
ANEXA 1 63
Introducere
Omul a fost întotdeauna o ființă predominant vizuală care se bazează pe vedere ca să dea sens lumii din jurul său. Nu privim obiectele doar pentru a le identifica și clasa, ci observăm și difențele dintre acestea. Oamenii au abilități vizuale foarte precise : putem identifica o persoană instantaneu, putem diferenția culorile , putem procesa o cantitate mare de informație vizuală foarte repede. Dar lumea este în mișcare și continuă transformare ; orice obiect ,în timp, se poate schimba. Imaginea depinde de timpul zilei – zi sau noapte, de cantitatea de lumină solară (senin sau inorat), de diverse umbre care cad peste ea, etc.
Prelucrarea imaginilor implică schimbarea naturii imaginii cu scopul îmbunatățirii informației pentru interpretarea umană sau pentru a fi mai potrivită percepției mașinilor autonome.
În acesta lucrare vom încerca să obținem o imagine capturată care să fie focalizată și, cu ajutorul calculatorului, îi vom schimba natura. Este necesar să realizăm că cele două aspecte ale prelucrării imaginilor, precizate mai sus, sunt destul de diferite, dar la fel de importante. Oamenilor le place ca imaginile să fie clare și detaliate, iar mașinile/calculatoarele preferă imaginile simple și ordonate.
Exemple de modificări făcute imaginilor ar fi : consolidarea marginilor unei imaginii pentru a fi mai clară, scoaterea zgomotului dintr-o imagine, zgomot ce reprezintă defapt erori aleatorii, îndepărtarea neclarității din cauza mișcării unei imaginii ; obținerea marginilor unei imaginii pentru măsurarea anumitor obiecte, scoaterea anumitor detalii din imagine de care nu suntem interesați cu scopul de măsurare sau numărare, etc.
În ceea ce privește achiziția imaginilor, un aspect destul de important este focalizarea cadrelor , aceasta asigurând o claritate parțială sau totală a imaginii în funcție de zona de focalizare. În acest scop am realizat un sistem în Simulink care, în funcție de frecvența spațială, ne va arăta dacă imaginea este focalizată sau nu.
Popularitatea crescută a aplicațiilor multimedia a condus la prezența nemărginită a camerelor digitale într-o varietate de dispozitive mobile; cum ar fi telefoanele, camerele web, dispozitive pentru jocuri, etc. Tindem către dezvoltarea aparatelor de achiziție de imagine cât mai mici ca dimensiune și la prețuri scăzute, dar fără a pierde din calitatea imaginii. O cameră digitală este un sistem complex format din lentile (obiectiv), senzori și un procesor de imagine digitală, aceste părți componente fiind, la rândul lor, sisteme complexe. Sistemul camerei digitale este modelat, de obicei, de un sistem liniar bazat pe principiile fizicii și opticii.
În aplicațiile privind procesarea imaginilor, diferența între obiectele aflate în scenă și restul scenei este foarte importantă. Asfel, dacă vrem să extragem conturul unui obiect va trebui să avem informații complete despre marginile din imagine. De aici rezultă că detectarea marginilor este o operație esențială în prelucrarea imaginilor. Performanța metodelor de detecție a fost întotdeauna subiectivă deoarece fiecare utilizator vrea să obțină anumite rezultate de la imagine. Există numeroase metode pentru detectarea marginilor că filtrele Canny, Sobel sau Prewitt, dar recent au apărut niște tehnici noi bazate pe modele fuzzy.
Introduse la începutul anilor 1970, sistemele fuzzy și teoriile de control fuzzy, ca o tehnologie în curs de dezvoltare care vizează aplicațiile industriale, au adăugat o promițătoare dimensiune în domeniul existent al sistemelor de control convenționale. Atunci când un sistem fizic complex nu oferă un set de ecuații precise sau un model matematic exact, necesită, în descriere, termeni lingvistici, acesta fiind un sistem neclar. Metodele și algoritmii de control fuzzy pot fi considerate ca tip de control inteligent. Folosirea expertizei umane în sistemele de modelare și control este avantajoasă și, de multe ori, chiar necesară.
Un ultim aspect atins în această lucrare este achiziția histogramei în timp real care, pentru echipamentele de achiziție video-foto profesionale actuale, este importantă deoarece oferă un control precis asupra setărilor de expunere. Histograma, în cazul fotografiilor, va arăta nivelurile de lumină existente.
CAPITOLUL I
Echipamente pentru achiziția imaginilor. Dispozitive “foto” digitale
1.1. Introducere
Indiferent de domeniul de aplicație se impune un format numeric în definirea imaginii pentru ca informația să poată fi prelucrată de calculator. Pentru obținerea unei imagini numerice este nevoie de senzor și convertor. Senzorul este elementul fizic care percepe radiația electromagnetică transformându-o într-o mărime electrică (tensiune) proporțională radiației primite. Convertorul este dispozitivul electronic care face trecerea de la mărimea electrică la formatul numeric al imaginii. O clasificare a echipamentelor pentru achiziția imaginilor cuprinde: scanner-ul, camera clasică, camera digitală foto-video, sisteme de vedere biologice (sistemul uman) etc. Există o tendință inevitabilă de a folosi ca model sistemele biologice de vedere în cele mai multe domenii de aplicații.
1.2. Sistemul de vedere uman
Sistemul de vedere uman cuprinde trei componente fundamentale : ochiul care are rol de senzor, nervul optic asigură calea de transmisie a informației și creierul ca unitate de prelucrare.
Principala funcție a ochiului este de a detecta lumina. Ochiul este compus dintr-un sistem sensibil la schimbările de lumină, transformându-le în impulsuri nervoase. Cei mai simpli ochii identifică doar dacă obiectele din jur sunt obscure sau luminate.
Ochiul uman are o formă sferică și este format din : 1) fibre zonulare, 2) camera posterioară, 3) irisul – disc colorat cu rol de reglere a cantității de lumină care pătrunde în ochi, 4) pupila – orificiul de culoare neagră din centrul irisului, 5) corneea – este o membrană transparentă, 6) umoarea apoasă – lichid aflat între cornee și iris, 7) mușchi cu cili, 8) ligament suspensor, 9) cristalinul – se comportă ca o lentilă (biconvexa) de focalizare, 10) umoare vitroasă – substanța gelatinoasă și transparentă care umple ochiul, 11) fovee, 12) vase de sânge, 13) nerv optic, 14) disc optic, 15) canalul Stilling-Cloquet, 16) sclerotica – numită și albul ochiului, 17) coroida, 18) retina – membrana pe care se proiectează imaginea; după cum este prezentat în figura de mai jos.
Fig. 1.1. Schema ochiului uman
1.3. Scanner- ul
Scanner-ul este un dispozitiv care face captura de imagine cu ajutorul blocului de scanare (format din sursa de lumină, elemente fotoelectrice și sistem optic), explorând prin baleiaj, linie cu linie și punct cu punct, texte tipărite, imagini analogice sau chiar obiecte fizice, producând o imagine digitală ce poate fi prelucrată pe calculator. Există mai multe tipuri de scannere cum ar fi: scannere de mâna care sunt deplasate manual și se folosesc pentru obiecte de dimensiuni mici, scanere rotative, scannere plane (clasice) – sunt prevăzute cu un geam pe care se pune documentul, sub acesta existând senzorii care se deplasează citind imaginea, aparate de identificare a micromatricilor de ADN din ramura certetărilor biomedicale, etc.
Fig. 1.2. Scanner de mână și scanner plan
Parametrii de bază ai scannerelor sunt urmatorii: rezoluția de scanare (optică), viteza la care se face scanarea, numarul de culori si densitatea optică.
1.4. Camera digitală
Camera digitală este un dispozitiv electronic care înregistrează imaginile cu ajutorul unui senzor de imagine (CCD, CMOS, etc.) și convertește imaginea optică în semnal electric; putând stoca fotografiile pe un mediu digital (card) în locul peliculei de film folosite la aparatele foto clasice.
Camerele digitale, cât și cele clasice folosesc același tip de sistem optic, diafragma pentru corectarea cantității de lumină care pătrunde pe dispozitivul unde se formează imaginea. Avantajul camerelor digitale este acela că acest dispozitiv este electronic, pozele putând fi vizualizate pe ecran imediat după ce au fost făcute și apoi salvate sau șterse din memorie; pe când la aparatele clasice imaginea se formează printr-un proces chimic pe peliculă de film, care trebuie developat înainte ca pozele să fie scoase. Unele aparate digitale pot chiar filma video cu sunet sau pot efectua anumite elemente de editare imagine.
Prima cameră digitală a fost inventată în 1975 de către Steven Sasson, inginer la Eastman Kodak, la început acesta fiind folosite în scopuri militare sau științifice, medicale și în cele din urmă ca produs de larg consum.
Camera digitală că dispozitiv de achiziție a imaginilor a înlocuit camerele clasice și folosesc la creearea de noi aparate cum este webcam-ul, camerele integrate în telefoane sau tablete, jucării, etc.
Figura (fig. 1.3.) urmatoare reprezintă schema bloc a unei camere digitale obișnuite :
În figură, imaginea se focalizează prin lentile, trecând printr-o matrice filtru de culoare (CFA – color filter array) pe un senzor de imagine care convertește lumina în semnale electrice. Se face procesarea semnalului analogic, cum ar fi corelarea de probe dublu prelevate, controlul automat al câștigului (AGC- automatic gain control), conversia de la analogic la digital (ADC) și o cantitate semnificativă de procesare digitală pentru culoare, îmbunătățirea imaginii și compresie.
1.4.1. Senzori de imagine
Senzorul de imagine joacă un rol esențial în calitatea imaginii finale. Majoritatea camerelor utilizate astăzi ultilizeaza ca senzor de imagine, dispozitivul cu cuplaj de sarcină (CCD – charge-coupled device).
Fig. 1.4. CCD
Senzorii CCD au fost inventați în 1969 de Dr. Willard Boyle și Dr. George Smith la Bell Labs. Denumirea senzorului vine de la felul în care este citită sarcina după ce imaginea a fost capturată. Utilizând un proces special, senzorul poate transporta sarcina fără a compromite calitatea imaginii. CCD reprezintă un registru care permite deplasarea sarcinilor electrice (semnale analogice) prin etape succesive, controlat de un semnal de ceas. Senzorul este alcătuit dintr-un panou de diode fotosensibile, acestea captând datele imaginii și un panou de memorare care preia datele când este atașat la panoul de diode.
Un alt tip de senzor de imagine este CMOS (complementary metal-oxide-semiconductor) sau Active Pixel. Tehnologia care este implementată în acesta a fost dezvoltată între anii 1992 – 1995 la NAȘA,s Jet Propulsion Laboratory de Dr. Eric Fossum. CMOS este citit într-o manieră similară cu memoria digitală și poate funcționa la viteze foarte mari de cadru.
Fig. 1.5. CMOS
Tehnologia CMOS oferă promisiunea de a integra într-un singur cip, pentru camere digitale, detectarea de imagine și procesarea acesteia; cipul având dimensiuni reduse, consum mic de energie si funcționalități suplimentare.
Comparație între senzorii CCD si CMOS :
CCDCMOSPreț- costisitor datorită metodelor speciale folosite la fabricație- ieftine deoarece plăcuțele CMOS sunt folosite pentru multe tipuri diferite de semiconductoriEnergie- consumă de 100 de ori mai multă energie ca CMOS- consumă puțină energieZgomot- imagini cu zgomot mic, deci calitate foarte mare- sensibile la zgomotMaturitate- produse de o perioadă de timp mai mare, calitate mai mare, mai mulți pixeli- produse recente dar egale la rezoluții mici și mijlocii cu CCDFuncționalitate
Extinsa- posibil tehnologic cu ajutorul altor cipuri- alte circuite sunt ușor implementate pe același cipFactorul de
umplere- mare- mic
1.4.2. Obiectivul
1.4.2.1.Generalități
Primul obiectiv a fost realizat de firma Goerz în anul 1892, iar cel mai vechi obiectiv care se folosește încă a fost conceput de fierma Zeiss în 1896. În momentul de față obiectivele cele mai bune calitativ sunt produse de firme ca Zeiss, Schneider în Germania; Canon, Nikon, Pentax în Japonia, Kinoptic în Franța, etc. Majoritatea acestor firme și-au extins domeniul de activitate producând și camere video, care au o calitate foarte bună și folosesc tehnologia optică proprie, dar tehnologia electronică este făcută de firme mari precum Sony, Panasonic, Sharp, JVC, etc.
Obiectivul este un sistem optic format din una sau mai multe lentile, care permit intrarea luminii în aparat și cu ajutorul căreia se formează și focalizează imaginea pe materialul fotosensibil (senzori de imagine la camere digitale). Obiectivele influențează cel mai mult claritatea și calitatea unei imagini și sunt caracterizate prin distanța focală și luminozitate.
Fig.1.6. Secțiune printr-un obiectiv cu distanța focală variabilă
Distanța focală a unui sistem optic este distanța de la planul focal la centrul optic. În funcție de aceasta obiectivele se împart în:
a. teleobiective pentru distanțe focale peste 70mm; apropie mult obiectul având o arie de cuprindere foarte mică;
b. normale; distanța focala este în jur de 50mm, redă imaginea obiectului așa cum îl vedem; reproduce vederea umană;
c. superangulare – au distanta focală sub 40mm și unghi de cuprindere foarte mare.
În funcție de montarea obiectivelor la camera digitală acestea pot fi:
a. obiective fixe (nedemontabile) acestea fiind formate dintr-o lentilă fotografică atașată permanent camerei; sunt destinate consumatorilor de rând și au câteva avantaje ca: camera cu obiectiv fix este compactă, posibilitatea prăfuirii senzorului este foarte redusă, astfel de camere nu necesită cheltuieli pentru echipamente adiționale și au o portabilitate crescută.
b. obiective interschimbabile (demontabile) – folosite în special de comsumatori profesioniști au ca avantaje: o scară largă de distanțe focale, longevitate, pot fi construite pentru situați specifice și în primul rând pot fi schimbate în funcție de necesitate.
1.4.2.2.Lentile
Lentila este construită dintr-un material transparent (sticlă, plastic, etc.) care are două fețe opuse în general curbe; fiind folosită singură sau în grup pentru a forma imagini ale obiectelor. Are la bază fenomenul de refracție a luminii prin care direcția de propagare a luminii se schimbă la trecerea dintr-un mediu transparent în altul similar.
În funcție de modul în care acționează asupra fasciculelor de raze lentilele sunt:
a. convergente – transformă fasciculul paralel într-unul convergent; sunt mai groase la mijloc și mai subțiri pe margine; pot forma imagini reale ale obiectelor;
b. divergente – transformă fasciculul paralel într-unul divergent; sunt mai subțiri la mijloc și mai groase pe margine.
Pentru construcția obiectivelor se folosesc combinații între aceste tipuri de lentile pentru a forma imaginea și pentru a îmbunătății transferul optic.
În figura următoare am grupat, în două coloane, principalele tipuri de lentile și anume: în partea stângă lentilele convergente și în partea dreaptă lentilele divergente; F reprezentând focarul.
Fig.1.6. Tipuri de lentile
1.4.2.3. Diafragma
Deoarece luminozitatea imaginii reale variază în limite foarte mari, apare necesitatea unui dispozitiv care controlează dozarea trecerii luminii.
Diafragma este o structură opacă subțire care are o deschidere (apertură) în centru; element activ de obicei plasat între lentiilele obiectivului cu rolul de a limita fluxul de lumină care trece prin apertură. Centrul aperturii coincide cu axa optică a sistemului de lentile.
Fig.1.7. Poziționarea diafragmei în cadrul unui obiectiv
Deschiderea diafragmei se notează cu f, reprezentând raportul dintre diametrul fizic al deschiderii și distanța focală. Majoritatea camerelor folosesc o diafragmă ajustabilă numită și iris. Ochiul uman este deasemenea un sistem optic care are diafragma adica irisul și apertura – pupila.
Fig.1.8. Deschiderea diafragmei pentru diferite valori
Un rol important al diafragmei este adâncimea câmpului de profunzime, reprezentând intervalul de claritate în fața și în spatele obiectului.
Diafragma poate fi realizată din lamele care sunt dispuse astfel încât se pot desface concentric permițând astfel o variație a diametrului orificiului, controlând totodată și cantitatea de lumină care trece prin obiectiv. În funcție de aceasta, diafragma are standardizate trepte astfel realizate, lumina fiind dublată sau injumătățită de la o treaptă la alta.
Fig.1.9. Zona de claritate în funcție de deschiderea diafragmei
1.4.2.4.Caracteristicile obiectivelor
Caracteristicile obiectivelor de orice tip pot fi :
– tehnico-constructive (mărimea, greutatea obiectivului, deschiderea relativă, oscilația distanței focale, etc.)
– fotometrice (coeficientul de difuzie, aberațiile, transparența spectrală, etc).
Calitatea imaginii este dată în mare parte de tipul de obiectiv folosit. Pentru ca imaginea să se formeze corect este nevoie de mai multe lentile cu indici de refracție diferiți.
Obiectivul dispune în general de trei reglaje care pot fi acționate manual sau semi-automat:
– focalizarea – reglează claritatea imagini sau a obiectului care se dorește a fi focalizat.
– diafragma (iris) – reglează deschiderea lamelelor astfel controlând cantitatea de lumină care trece prin obiectiv
– distanța focală (zoom) – reglează dimensiunea și raza de acoperire a cadrului.
1.4.2.4.1.Distanța focală
Aceasta reprezintă distanța dintre centrul optic al obiectivului și elementul fotosensibil al aparatului foto-video.
În funcție de distanța focală se modifică anumite elemente: unghiul de deschidere și profunzimea.
Unghiul de deschidere la obiectivele normale este ≈ 46o , la teleobiective este mai mic de 46o și la superangulare este mai mare de 46o.
Profunzimea repezintă zona de claritate care se modifică raportat la distanța focală: superangularele având profunzime mare, obiectivele normale – medie, iar la teleobiective zona de profunzime fiind scăzută.
a. b.
Fig. 1.10 Variația: a. unghiului de deschidere raportat la distanța focală
b. profunzimii raportat la distanța focală
1.4.2.4.2.Deschiderea relativă
Luminozitatea obiectivelor este dată de deschiderea obiectivului și distanța focală, reprezentând cantitatea maximă de lumină ce poate trece prin obiectiv atunci când este complet deschis. Deschiderea relativă este dată de raportul între distanța focală și diametrul de deschidere maximă al diafragmei:
Cu cât dechiderea relativă se apropie de valoarea 1, cu atât luminozitatea crește.
Deschiderea relativă influențează și profunzimea câmpului aflat în zona de claritate, aceasta fiind mai mare când se folosește o diafragmă mai închisă.
1.4.2.4.3.Transparența spectrală
Transparența spectrală este dată de raportul dintre fluxul luminos transmis de obiectiv și fluxul luminos incident.
Având în vedere numărul mare de lentile din componența unui obiectiv care contribuie la mărirea cantității de lumină reflectată și la micșorarea contrastului, suprafețele lentilelor se tratează cu straturi de interferență care au rolul de a anula lumina totală reflectată. Grosimea stratului trebuie să fie de un sfert de lungime de undă (λ/4) ca cele două raze rezultate în antifază să se anuleze.
Una din metodele folosite pentru realizarea stratului de interferență are la bază evaporarea în vid și condensarea pe suprafața lentilei a fluorurilor de sodiu, calciu și magneziu. Se aplică tratamente termice pentru mărirea rezistenței peliculei aflate pe lentilă, aceasta căpătând o nuanță albăstruie sau purpurie.
1.4.2.4.4.Contrastul obiectivelor
Contrastul obiectivelor este dat de raportul dintre iluminarea maximă și cea minimă. Obiectele aflate în natură sunt caracterizate de un contrast foarte variat. Scăderea contrastului se datorează luminii difuze reziduale. Aceasta apare datorită fenomenelor de refracție și reflecție, zgârieturilor de pe obiectiv, prafului sau a eventualelor pete de grăsime.
Fig. 1.11. Variația gradului de difuzie in funcție de deschiderea diafragmei
1.4.2.4.5.Rezoluția
Rezoluția se masoară în linii/mm și reprezintă capacitatea unui obiectiv de a reda cele mai mici detalii ale obiectelor într-o imagine. Obiectivul are rezoluția maximă în centru, aceasta scăzând spre margine (minima). La unele obiective rezoluția orizontală diferă de cea verticală în raport cu redarea liniilor. Puterea de rezoluție a obiectivelor este dată de limita de claritate. Diafragmele de dimensiune mai mică oferă o rezoluție mai bună.
Fig. 1.12. Rezoluția unui obiectiv in funcție de diafragmă
1.4.2.4.6.Aberațiile sistemelor optice
Deoarece lentilele nu sunt perfecte, imaginea obținută are aberații. Pentru corecția acestora se asociază lentile convergente cu lentile divergente. Aberațiile pot fi clasificate în : aberații cromatice și aberații geometrice.
Aberațiile de sfericitate provin de la razele de lumină marginale care se focalizează diferit față de cele care care străbat lentila aproape de centrul acesteia. O soluție eficientă este combinarea unei lentile divergente cu una convergentă, ele având aberații de sfericitate identice dar de sensuri contrare.
Aberațiile cromatice apar atunci când razele de culori diferite se focalizează la distanțe diferite, astfel razele care au lungimea de undă mică sunt focalizate mai aproape decât razele cu lungime de undă mai mare. Conturul obiectelor poate apărea colorat în imagine datorită luminii albe în care se regăsesc toate radiațiile vizibile. Aberația cromatică se poate elimina în cea mai mare parte prin combinarea lentilei divergente cu cea convergentă. Corecția cromatică nu poate fi realizată în tot spectrul vizibil, dar totuși aberațiile sunt micșorate puternic.
La obiectivele cu transfocar corecția aberației de cromaticitate reprezintă cea mai importantă problemă datorită apariției fenomenului de refracție. Indicele de refracție variază raportat la lungimea de undă a luminii, astfel fenomenul este accentuat când lentila este mai mare fiind direct proporțional și cu distanța focală.
a. b.
Fig. 1.13. Formarea imaginii: a. prin lentila sferică, b. prin lentila asferică
Lentilele sferice dau aberații mari, dar sunt folosite pentru că se prelucrează ușor. Acestea sunt înlocuite cu lentile asferice care permit producerea obiectivelor cu zoom mare și distanță minimă față de subiect. Datorită fenomenului de difracție la lentilele sferice focalizarea razelor de lumină se face în puncte diferite față de raza care trece prin centru, acest fenomen purtând numele de aberație de sfericitate. Efectele acesteia sunt contrastul și rezoluția redusă, imaginea fiind cu blur. Pentru reducerea acestor aberații lentilele sferice nu au o formă sferică clasică acestea realizându-se astfel încât razele să fie focalizate într-un singur punct.
1.4.3. Obturatorul
Obturatorul este dispozitivul care controlează durata de expunere la lumina senzorului electronic sensibil la aceasta. În funcție de locul unde sunt amplasate, obturatoarele pot fi:
a. centrale (leaf shutter) sunt de obicei poziționate între lentile
b. focale (focal plane shutter) sunt montate in fața senzorului de imagine.
Fig.1.14. Componentele unei camere digitale:
1. lentile
2. oglinda de reflexie
3. obturator focal
4. senzor de imagine
5. ecran pentru focalizare
6. lentila condensator
7. pentaprisma
8. vizorul
1.5. Camera video
Camera video este echipament folosit pentru achiziționarea electronică a imaginilor aflate în mișcare; inițial folosite în televiziune. Primele camere au fost concepute de John Logie Baird, bazate pe discul electromecanic Nipkow și folosite de BBC în transmisii experimentale în anii 1930. Astăzi, camerele video folosesc, ca și aparatele digitale “foto” pentru achiziția imaginii, senzori ca CCD sau CMOS.
Camerele video sunt folosite în principal în două moduri:
a. transmisia live – camerele transmițând imagini în timp real. Acestea sunt folosite pentru transmisiile “în direct” de televiziune, dar și pentru transmisii live de securitate, militare/tactice sau operațiuni industriale care au nevoie de supraveghere.
b. pentru înregistrarea pe dispozitive de stocare pentru procesare ulterioară.
Tipuri de camere :
a. camera video pentru studio – există o varietate de modele în funcție de categoriile de studiouri : camere pentru circuit închis, stații TV locale, case de producție etc.
b. camera de transmisie mobilă- sunt mai compacte și oferă o mobilitate mai mare pentru filmările din teren sau studio.
c. camere video de greutate mică – sunt făcute pentru filmări în locuri unde expresivitatea nu primează ; au comanda automată.
d. camere de supraveghere – aparate compacte folosite în special în circuite video închise.
e. camere de buzunar – se găsesc în general la telefoanele mobile.
f. webcams – camera video care transmite în timp real imaginii pe un calculator sau într-o rețea de calculatoare.
Fig.1.15. Tipuri de camere video
CAPITOLUL II
Formarea imaginilor
Imaginea este definită ca reproducerea unui obiect cu ajutorul unui sistem optic. Un rol important în formarea și procesarea imaginilor îl are procesul de percepție al acestora de către ochiul uman. Informația la nivel vizual poate fi definită de anumite atribute cum ar fi: lumina, luminanța, strălucirea, culoarea sau muchiile unui obiect. Ochiul omenesc transformă imaginile geometrice ale obiectelor in senzații vizuale.
Lumina este o radiație electromagnetică fiind exprimată ca o distribuție L (λ) de energie (λ – lungimea de undă a radiației). Din punct de vedere matematic, lumina percepută a unui obiect este:
– – masura în care un obiect reflectă energie luminoasă incidentă.
Luminanța (intensitatea luminoasa) a unui obiect cu o dstribuție spațială a luminii, I(x, y, λ) este dată de relația :
-V(λ) – funcția de eficiență luminoasă relativă a sistemului vizual.
Strălucirea unui obiect reprezintă luminanța percepută și depinde de intensitatea luminoasă a mediului ambiant obiectului. Două obiecte din același ambient pot avea aceeași luminanță, dar străluciri diferite.
Figura.2.1 Exemple de vizualizare ale aceluiași obiect
In funcție de aceste caracteristici prezentate mai sus, poziția subiectului față de observator și unghiul de cuprindere din care se formează imaginea unui obiect, aceasta poate diferi prin : dimensiune, proporțiile diferitelor părți ale obiectului, culoare și contrast, se poate chiar schimba raportul dintre obiectul principal și altele existențe in cadru.
Modelul matematic al imaginii :
Din punct de vedere matematic imaginea poate fi reprezentată ca o funcție cu două variabile:
– imaginea în tonuri de gri se poate realiza cu funcția: f(x, y): R2 R, în acest caz valorile luate de f sunt valorile luminanței obiectelor aflate în imagine, în punctele spațiale (x, y).
– imaginea color se poate realiza cu funcția: f(x, y): R2 R3, în acest caz valorile luate de f sunt vectori de trei componente (de exemplu modelul RGB) dintr-un spațiu de culori.
2.1. Formarea imaginii printr-un dioptru sferic
Dioptrul reprezintă suprafața de separare a două medii transparente (apă, sticlă, aer, etc.) care au indici de refracție diferiți. Dacă această suprafață este sferică atunci dioptrul este sferic. Un dioptru sferic este format din: vârf (V – intersecția axului optic cu suprafața dioptrului), raza de curbură (R ) și indici de refracție (n și n’).
Fig.2.2. Formarea imaginii printr-un dioptru sferic
Relația punctelor conjugate este dată de raza de curbură, distanțele x, x’ și indicii n, n’ :
Mărimea liniară β ne arată de câte ori imaginea este mai mare decât obiectul :
Imaginea obiectului PQ printr-un dioptru sferic este construită conform legilor de refracție a razelor de lumină ; aceasta fiind P’Q’ aflată la intersecția razelor refractate prin dioptru. Deoarece incidența este normală pentru raza care pornește din Q aceasta trece nedeviată în cel de-al doilea mediu. Cea de a doua rază cade in punctul V cu unghiul de incidență i și este refractată cu unghiul r ajungând în punctul Q’ care este imaginea lui Q. Imaginea punctului P este perpendiculară din Q’ pe axul optic al sistemului. Imaginea astfel obținută este reală, mai mică și răsturnată.
2.2. Vederea umană
Ochiul constituie organul vederii la om și este format din globul ocular și anexele sale. Lumina pătrunde în ochi prin cornee, strabăte umoarea apoasă, cristalinul (are rol de lentilă) și umoarea sticloasă proiectându-se pe retină, unde se formează imaginea reală, dar cu dimensiuni mai mici și răsturnată. De la retină se probagă semnale bioelectrice spre lobii occipitali ai sistemului nervos care returnează senzațiile vizuale.
Fig.2.3. Ochiul uman
Ochiul uman deține trei tipuri de receptori sensibili la radiațiile de verde, roșu și albastru. Dacă se stimulează in mod egal receptorii se va percepe o lumină gri neutru sau albă, dar dacă stimularea este inegală, atunci se percepe culoarea dominantă.
Vederea nocturnă are sensibilitatea maximă a spectrului λ = 510 nm (albastru verzui); iar la vederea diurnă λ= 555 nm (verde gălbui).
Zona fotosensibilă a retinei este formată din :
– bastonașe care nu pot percepe culorile, dar sunt sensibile la variațiile nivelului de iluminare și sunt responsabile pentru vederea nocturnă (scotopică)
– conurile sunt de trei tipuri pentru cele trei benzi spectrale : albastru (frecvența 419 nm), verde (frecvența 531 nm) și roșu (frecvența 588 nm) ; ele fiind responsabile pentru vederea diurnă (fotopică)
La om vederea este binoculară, sistemul vizual uman poate analiza adâncimea în spațiu (prin tehnica triangulației), când ambii ochi vizualizează același obiect se realizează convergența axelor lor optice. Unghiul astfel format va fi mic pentru obiecte îndepartate și mare pentru cele apropiate, sistemul nervos calculând distanța până la obiect; obținându-se și senzații ca dispunere în adâncime, volum, relief, etc.
2.3. Formarea imaginii prin obiectivul camerei foto-video
Vederea cu un singur ochi (vederea monooculară) este asemănătoare cu formarea imaginii prin obiectivul unei camere “foto” cu propietatea că, deși se disting obiectele aflate în spațiu nu putem controla adâncimea imaginii. Aceasta însă poate fi sugerată astfel:
– Dacă două obiecte se află în aceeași direcție a vederii noastre, în planuri diferite ca adâncime, acestea se pot suprapune parțial sugerând astfel poziția lor în planuri cu adâncimi diferite.
– Dacă două obiecte asemănătoare sunt de aceeași mărime putem spune că se află la distanțe egale de observator, iar dacă sunt de mărimi diferite înseamnă că acestea se află la distanțe diferite sugerând astfel adâncimea imaginii.
– Alte elemente care arată adâncimea imaginii sunt : iluminarea, câmpul clar-neclar și contrastul obiectelor.
Fig.2.4. Asemănarea dintre camera foto și ochi
La aparatele foto-video imaginea este captată prin acumularea de către senzori electronici sau peliculă a luminii din imaginea dorită care se formează prin obiectiv. În cazul în care obiectul este la distanță mare (la infinit), imaginea se formează aproape de focarul sistemului optic; în cazul în care obiectul este aproape de sistemul optic, imaginea se formează într- un plan situat în spatele focarului.
2.3.1. Imaginea prin lentile sferice subțiri
Lentila este un mediu transparent (are un indice de refracție) introdus într-un alt mediu tot transparent (cu indice de refracție diferit). Sunt confecționate prin șlefuirea până la netezirea perfectă a unor materiale transparente. Lentilele cele mai des întâlnite sunt cele sferice.
Convergența, notată cu C reprezintă inversul distanței focale f și se calculează cu relația :
Pentru sistemele cu lentile alipite C totală este egală cu suma convergențelor fiecărei lentile.
Punctul de întâlnire al razelor de lumină care vin de la infinit și trec prin lentilă, respectiv punctul din care pleacă razele și după refracție pe lentilă sunt paralele cu axul optic poartă numele de focar.
Fig.2.5. Focarul lentilei sferice convergente, respectiv divergente
Reamintim că lentilele sferice pot fi convergente (au convergență pozitivă; formează imagini reale) și divergente (au convergență negativă; formează imagini virtuale).
2.3.2. Construcția imaginii unui obiect real prin lentilele subțiri sferice
Pentru contrucția imaginii unui obiect printr-o lentilă convergentă vom desena raza care trece din vârful obiectului nedeviată prin centrul optic al lentilei și raza paralelă la axul optic principal al lentilei aceasta reflectându-se prin focar. Vom repeta construcția obiectului pentru distanțe diferite pentru a observa ce schimbări se produc.
a) b)
c) d)
e)
Fig.2.6. Formarea imaginii unui obiect prin lentila convergentă când acesta este situat la : a) -2f, b) -f, c) -, d) între -2f și -f, e) între -f și vârf.
Se observă că, atunci când obiectul este așezat la distanță mai mare decât distanța focală față de lentilă, imaginea formată este reală, iar când obiectul este între focar și centrul lentilei, imaginea este una virtuală.
Prin lentilele divergente se formează numai imagini virtuale indiferent de poziția obiectului față de lentilă.
Fig.2.7. Formarea imaginii unui obiect prin lentila divergenta
2.4. Senzorii de imagine pentru camerele digitale
Senzorii de imagine convertesc imaginea optică într-un semnal electric, astfel imaginea putând fi capturată pentru stocare și procesare ulterioară. Cei mai utilizați senzori de imagine sunt CCD (charge-coupled device) și CMOS (complementary metal-oxide-semiconductor).
2.4.1. CCD
Într-un senzor CCD pentru capturarea imaginilor se găsesc două regiuni: una fotosensibilă și una de transmitere formată din regiștri de deplasare. Imaginea este proiectată prin lentilă (obiectiv) pe matricea de celule fotosensibile încărcând aceste celule cu sarcini electrice proporționale cu intensitatea luminii din acel loc. Dupa ce matricea a fost expusă la imagine (lumina), un circuit de control face ca fiecare condensator să își transfere conținutul la condensatorul vecin. Ultimul condensator își transferă sarcina într-un amplificator care o transformă în tensiune. Prin repetarea acestui proces, circuitul de control convertește conținutul de sarcini al matricei într-o secvență de tensiuni. La camera digitală aceste tensiuni sunt apoi eșantionate, digitizate și stocate ulterior în memoria acesteia.
2.4.2. CMOS sau APS (active pixel sensor)
Senzorul pixel-activ este format dintr-un circuit integrat care conține o matrice de senzori pixel, fiecare pixel conținând un fotodetector și un amplificator activ. Spre deosebire de CCD senzorul CMOS posedă pentru fiecare fotodiodă tranzistori miniaturizați prin care semnalul analogic este amplificat și convertit în semnal digital, apoi informația fiind transferată pe mediul de stocare prin legături mai convenționale. Dezavantajul acestui senzor este acela că fotonii ajung nu numai la fotodiode ci și la tranzistorii incorporați astfel scăzând sensibilitatea luminoasă a senzorului.
Fig.2.8. Diferența de funcționare a senzorilor CCD și CMOS
2.5. Culorile imaginii
Culoarea reprezintă percepția frecvențelor diferite de lumină (a undelor electromagnetice).
Lumina monocromatică reprezintă radiația electromagnetică perfect sinusoidală caracterizată de puterea transportată și frecvența oscilației. Lumina monocromatică se află în spectrul vizibil pentru valorile lungimii de undă între 400nm și 700nm.
O sursă de lumină produce un amestec de radiații electromagnetice cu lungimi de undă și intensități diferite. Separând componentele monocromatice, adică radiațiile cu lungimi de undă diferite, se realizează descompunerea spectrală.
Fig.2.9. Spectrul vizibil
2.6. Imagini digitale
Imaginea digitală este o reprezentare matricială a unei imagini reale. Elementele matricei poartă numele de pixeli. Imagini digitale se pot produce și de la imaginile analogice (tradiționale) prin digitizare. Digitizarea unei imagini analogice se face prin împarțirea acesteia în elemente foarte mici ca suprafață (pixeli), elementele având fiecare două coordonate plane. Apoi se face codificarea pixelilor împreună cu coordonatele plane și caracteristicile de culoare și luminozitate rezultând un șir de numere care este stocat în memorie.
Fig.2.10. Reprezentarea matricială a imaginii digitale cu M linii și N coloane
După tipul de date din care este formată structura bidimensională (matricea sau tabloul) imaginile sunt :
– Imaginea scalară este o imagine în care fiecare componentă a acesteia este un număr unic (scalar), de exemplu imaginile alb-negru sau imaginile cu niveluri de gri.
– Imaginea vectorială au fiecare componentă reprezentată printr-un vector de numere, de exemplu imaginile color, imaginile stereo sau secvențele de imagini.
Imaginile mai pot fi clasificate după natura lor in :
– Abstracte
– Non-vizibile
– Imagini vizibile.
CAPITOLUL III
Focalizarea zonelor de interes din imaginile digitale
În optica geometrică, focalizarea (numită și imagine punct) reprezintă punctul în care razele de lumină provenite de la un punct (aflat pe un obiect) se intersectează. Deși conceptual vorbind focalizarea este un punct, din punct de vedere fizic aceasta are o extindere spațială numită zona de confuzie. Aceasta este cauzată de aberațiile optice ale imaginii.
Spunem că o imagine, o regiune sau o imagine punct este focalizată dacă razele de lumină de la punctele obiectului sunt convergente cât mai multe posibile ca în imagine. Imaginea nu este focalizată atunci când razele de lumină nu sunt convergente. Diferența dintre aceastea este definită uneori de cercul de confuzie. Acesta este folosit în fotografiere pentru determinarea adâncimii de câmp, a părții de imagine cu contrast ridicat.
Punctul de focalizare pentru o lentilă (sau o oglindă sferică sau parabolică) un punct în care se focalizează razele de lumină paralele. Deoarece lumina poate trece printr-o lentilă în ambele sensuri, aceasta are două puncte de focalizare, câte unul de fiecare parte. Distanța de la planul principal al lentilei la punctul de focalizare poartă numele de distanță de focalizare.
Oglinzile eliptice au două puncte focale : razele de lumină care trec printr-unul din punctele focale înainte de a ajunge la oglindă sunt reflectate apoi, astfel încât să treacă prin cel de-al douilea punct focal.
Focalizare imaginilor la dispozitivele foto-video se poate realiza manual prin setarea parametrilor necesari de către operatorul aparatului său automat.
Focalizarea automată la sistemele optice se realizează cu ajutorul unui senzor, un sistem de control și un motor care acționează pentru mișcarea diferitelor părți mobile (lentile). Sistemele de focalizare automată se bazează pe unul sau mai mulți senzori (matrice de senzori) care determină focalizarea corectă. Viteza cu care focalizarea automată este dependentă de dimensiunile aperturii.
În funcție de senzorul folosit, focalizarea automată poate fi activă, pasivă sau hibridă.
Sistemul AF activ măsoară distanța față de obiect independent de sistemul optic și îl ajustează ulterior pe acesta pentru o focalizare corectă. Există diferite moduri de măsurare a distanței cum ar fi undele sonore ultrasonice sau lumina infraroșie. În primul caz undele sunt emise de cameră și se măsoară întârzierea reflecției lor astfel, distanța până la obiect putând fi calculată.
Sistemele AF pasive analizează imaginea care trece prin sistemul optic și calculează focalizare corectă. Focalizarea pasivă poate fi realizată prin măsurarea contrastului sau detectarea de fază.
Detectorul de fază împarte razele de lumină ale imaginii în perechi și le compară. Cele două imagini sunt analizate pentru modelul similar al intensității luminii, se calculează eroarea de separare pentru a determina dacă obiectul este în față sau în spatele zonei de focalizare. Se estimează necesarul de mișcare și acționează sistemul de focalizare pentru realizarea acesteia.
Fig. 3.1. Detec ția de fază: 1. – Punctul de focalizare este prea aproape, 2. – Focalizarea este corectă, 3. si 4. – Punctul de focalizare este prea departe
Măsurarea contrastului se face prin lentile pe un senzor câmp. Diferența de intensitate dintre pixeli vecini, ai senzorului, crește odată cu focalizarea corectă a imaginii. Sistemul optic poate fi reglat până când este detectat contrastul maxim.
La sistemele hibride de focalizare automată sunt conbinate metodele prezentate mai sus.
3.1. Tipuri de focalizare
3.1.1. Focalizarea automată cu ultrasunete
Primul sistem de focalizare automată s-a realizată cu un emițător de ultrasunete și un receptor. Se emit valuri de impulsuri în spațiul ultrasunetelor, acestea reflectându-se la întâlnirea cu un obiect. Timpul în care pachetul de ultrasunete parcurge drumul este o mărime direct proporțională cu distanța la obiectul filmat. În funcție de acest timp se vor poziționa lentilele de focalizare. Această metodă nu oferă performanțe foarte bune, deoarece pot fi și alte obiecte în afară de cel care se dorește a fi focalizat, care pot reflecta pachete de ultrasunete și astfel să se producă o eroare în procesul de focalizare automată. Gradul de focalizare la această metodă este relativ redus.
Fig. 3.2. Principiul de focalizare cu ajutorul ultrasunetelor
3.1.2. Focalizarea electronică cu ajutorul unui sistem infraroșu de detective
Camera prevăzută cu un sistem de focalizare automat va compara distanța dintre cameră și obiect cu poziția de focalizare pentru o altă distanță între cameră și obiect. Lentilele sunt repoziționate pentru distanța actuală dintre cameră și obiect. Micromotorul de focalizare este acționat de o tensiune furnizată de comparatorul între cele două măsurători. Camera este prevăzută cu un detector de poziție al lentilelor și alt detector de distanță. La măsurarea distanței dintre cameră și obiect utilizăm metoda triunghiului. Aceasta constă în proiectarea unor raze în infraroșu prin sistemul optic al camerei la obiect, care îl va reflecta. Fasciculul de raze reflectat este perceput de dispozitivul fotosensibil aflat în cameră. Acesta percepe distanță de la obiect la cameră.
Fig.3.3. Determinarea distanței dintre obiect si cameră
Fig. 3.4. Determinarea distanăei dintre obiect si cameră cand razele infrarosii sunt emise prin obiectiv
3.1.3. Focalizarea electromecanică
Sistemul de focalizare electromecanic realizează focalizarea automată după următorul principiu. Focalizarea nu se realizează direct, imaginea fiind mai întâi focalizată în spatele său în fața țintei și apoi treptat prin pași la distanțe mici până când imaginea se proiectează corect pe țintă. Acest sistem de focalizare folosește un fascicul de raze în infraroșu emis de un LED aflat pe cameră. Fasciculul este reflectat de obiect către senzorul detector. Dacă fasciculul nu este reflectat în centrul detectorului (două diode alăturate) motorul care realizează focalizarea pornește într-unul din sensuri (în funcție pe ce dioda este reflectat) și acționează până razele ajung în centrul detectorului.
Fig. 3.5. Principiu de realizare a focalizării electromecanice
3.1.4. Focalizarea prin împărțirea zonală a imaginii
Focalizarea prin împărțirea zonală a imaginii are la bază sistemul de funcționare al ochiului uman. Dacă avem obiecte apropiate, focalizarea se face pe un punct sau o suprafață mică din câmpul vizual, iar dacă obiectele sunt situate la depărtare atunci focalizarea se face pe suprafețe mult mai mari aflate în câmpul vizual.
Fig. 3.6. Zone de focalizare: pe suprafața mică (zona 1), pe suprafața medie (zonele 1+2) si largă (cuprinde suprafetele 1-16)
CAPITOLUL IV
Implementarea aplicațiilor de prelucrare a imaginilor digitale
4.1. Crearea interfeței grafice în GUI – Matlab
În linia de comandă a Matlab-ului tastăm: “guide” care ne va deschide o fereastră de unde vom folosi un Blank GUI.
Fig. 4.1. Blank GUI
În GUI-ul nou deschis alegem controalele de bază din meniul din stânga:
– Axes : pentru afișarea imaginilor și a histogramei
– Text static: care este afișat pe ecran ca titlu informativ
– Push button și radio button: pentru efectuarea acțiunilor atunci când utilizatorul dă click pe acestea
Pentru fiecare control în parte au fost editate în Inspector-ul de proprietăți: tag – numele controlului în cod, string – textul afișat pe controale, ForegroundColor – culoarea textului, BackgroundColor – culoarea controlului.
După toate aceste modificări interfața grafică va arata așa:
Fig. 4.2. Interfața grafică a aplicației
În momentul salvării interfeței GUI se va crea pe lângă fișierul .fig care conține dispunerea controalelor și fisierul .m conținând funcțiile callbacks pe care le vom completa ulterior.
Codul aplicației este explicat în următoarele subcapitole, iar în întregime se găsește în ANEXA 1.
4.2. Identificarea focalizării imaginii video în timp real
Am construit cu ajutorul Simulink un sistem pentru determinarea focalizării cadrelor video utilizând raportul dintre conținutul de înaltă frecvență spațială și conținutul de joasă frecvență spațială aflate într-o regiune de interes (ROI). Când acest raport este mare, imaginea este focalizată, iar când raportul este mic, imaginea nu mai este focalizată.
4.2.1. Regiunea de interes
Sistemul va arata o imagine în timp real de la un webcam care va fi focalizată sau nefocalizată. Am folosit blocul DrawShapes pentru a pune în evidență regiunea de interes (ROI) din cadrul video și blocul Insert Text pentru a indica dacă imaginea este focalizată sau nu. ROI poate fi mutată pentru a ajunge la partea din imagine care ne interesează cel mai mult. Am folosit blocurile constant, slider gain și matrix concatenate pentru definirea ROI.
4.2.2. FFT și focalizarea relativă
După definirea ROI trebuie să trecem printr-un FFT pentru a calcula cât de multe componente cu frecvență ridicată sunt în imaginea video. Cu cât acestea vor fi mai multe cu atât imaginea video va fi mai focalizată. Dacă elementele de joasă frecvență vor fi multe atunci vom avea o imagine neclară.
În fereastra de focalizare relativă vom afișa raportul dintre conținutul de frecvență înaltă spațială și cel de frecvență scazută în ROI. Acest raport este un indicator pentru reglarea focalizării relative a camerei video. Când acest raport este mare imaginea video este focalizată.
Am proiectat sistemul de verificare a focalizării în Simulink. Pentru citirea datelor de la webcam am folosit blocul “From video Device” din Image Acqusition Tool care achiziționează date de imagine în direct de la un echipament de achiziție imagini. Se pot utiliza și clipuri video existente în calculator, acestea fiind deschise cu ajutorul blocului “From Multimedia File”.
Ieșirea sistemului poate fi vizualizată cu blocurile “To Video Dispay” sau “Video Viewer” care se găsesc în Video and Image Processing Blockset – Sinks.
4.2.3. Construirea sistemului în Simulink
Deschidem Simulink și creăm un model nou :File – New – Model.
Citirea datelor de la un webcam se face cu ajutorul blocului From Video Device. Deschidem acest bloc pentru a seta parametrii acestuia : Device – selectăm webcamul pe care îl utilizăm, Video format – modificăm dimensiunea cadrului 320x240x3, Data Type- double. Folosim blocul To Video Display ca să observăm datele care vin de la webcam.
Ne uităm la semnalul transmis Format – Port/Signal Displays – Signal Dimensions unde dimensiunile ar trebui să fie 320x240x3. 320×240 reprezentând mărimea cadrului și x3 componentele roșu, verde și albastru. În continuare vom lucra doar cu imagini în nuanțe de gri. Pentru aceasta vom folosi blocul: Video and Image Processing Blockset – Conversions – Color Space Conversion pe care îl punem între From Video Device și Video Viewer. Setăm Color Space Conversion din RGB în intensitate.
Definirea ROI. Luăm blocul Video and Image Processing Blockset→Text and Graphics→Draw Shapes și îl plasăm între Color Space Conversion și Video Viewer. Pentru specificarea ROI din Simulink→Sources folosim patru blocuri de constante : unul pentru rând, unul pentru coloană, unul pentru lățime și unul pentru înălțime. Setăm rândul = 1, coloana = 1, lățimea = 128, înălțime = 128. Conectăm ieșirea rândului și a coloanei la câte un slider gain (Simulink→Math operations) pentru a face capabilă selectarea ROI într-o manieră mai interactivă. Apoi conectăm ieșirile slider gains, lățimea și înălțimea la o matrix concatenate (Simulink→ Math Operations). Acum modelul Simulink ar trebui să arate astfel:
Putem lua blocurile care definesc ROI și creea un subsistem pentru a simplifica modelul. Selectăm blocurile, dăm dublu click – create subsystem – și schimbăm numele blocului în ourROI. Noul model va arăta astfel :
Acum este timpul să scoatem secțiunea definită de ROI pe care o vom folosi pentru FFT. Vom utiliza un bloc selector din Simulink – Signal Routing – Selector. Dăm dublu click pe selector și schimbăm valoarea dimensiunii de intrare cu 2. Setăm ca indicii de pornire să fie citiți de la un port și dimensiunea ieșirilor să fie 128 cu 128. Observăm că acum selectorul are două intrări noi.
În continuare vom crea două ieșiri noi subsistemului ROI pe care le vom conecta la rând și coloană.
Vom utiliza un block Submatrix din Signal Processing Blockset – Signal Management – Indexing pentru selectarea zonei din ROI care va fi folosită pentru FFT.
Din Video and Image Processing Blockset – Transform vom utiliza un bloc 2D-FFT. La început am setat blocul de achiziție să citească datele de la un webcam ieșirea fiind de tip double. Atunci când o variabilă are date de tip double blocul Video and Image Processing presupune că ar trebui să ruleze valori de la 0 la 1. Dar FFT va calcula și valori mai mari de 1 ceea ce va face pixelii să fie saturați. Pentru ca semnalul să fie mai mare ca zero vom scădea o valoare de 0.5 din ieșirea submatricei. Din Simulink – Math Operations vom utiliza un bloc sumă cu lista semnelor +-. Valoarea 0.5 va fi introdusă într-un bloc constantă care va fi conectat la intrarea – a blocului sumă și la + vom conecta ieșirea submatricei. În final conectăm ieșirea blocului sumă la intrarea blocului 2D-FFT. De asemenea trebuie să știm că FFT generează un semnal cu valoare complexă și Video Viewer așteaptă un semnal de valoare reală. Prin urmare, va trebui să punem un bloc de valoare absolută după blocul FFT. Din Simulink – Math Operations luăm blocul Math Function și îi setăm Magnitude^2. În acest moment modelul Simulink va arăta astfel :
În continuare pentru simplificarea modelului vom crea un subsistem pentru calculul FFT.
Acum este timpul să selectăm porțiunea din matrice care va conține frecvențele pe care le vom utiliza pentru a calcula raportul dintre componenta de frecvență spațială înaltă și componenta de frecvență spațială joasă, determinând astfel dacă imaginea este focalizată sau nu.
Vom introduce în model trei blocuri submatrice cu urmatoarele caracteristici :
– Submatricea 1 : Ending row = index; ending row index = 16; column span = one column.
– Submatricea 2 : Ending row = index; ending row index = 16; start column = index ; column index = 2 ; Ending column = index ; Ending column index = 16.
– Submatricea 3 : Ending row = index; ending row index = 16; start column = offset from last ; starting column offset =14.
Conectăm cele trei blocuri submatrice la blocul Magnitude FFT. După care, întoarcem rândurile ieșirii submatricei 3 cu ajutorul blocului Signal Processing Blockset – Signal Management – Indexing. Adaugăm ieșirea submatricei 2 la versiunea întoarsă a celei de a treia apoi concatenăm suma cu ieșirea primei submatrice utilizând un bloc de concatenare al matricei caruia îi setăm intrarea la 2. Pentru a vizualiza datele FFT corespunzătoare frecvențelor colectate vom utiliza : o funcție matematică (log10), un bloc de scalare(1/8) și un vizualizator video. Modelul va arata astfel :
Vom reduce din nou complexitatea sistemului prin crearea de subsisteme.
Acum este timpul să calculăm raportul dintre componentele de frecvență înaltă și cele joasă. Dupa cum se observă componentele de frecvență joasă sunt spre colțuri, de aceea vom tăia o porțiune din colțul stânga sus. Pentru aceasta vom plasa o submatrice după matricea de colectare a frecvenței și o vom configura astfel :
– Ending row = index ; ending row index = 5 ; start column = first ; end column index = 2.
Apoi schimbăm ieșirea submatricei ca fiind un vector 2D folosind un bloc de remodelare din Simulink – Math Operations. Luăm ieșirea blocului de remodelare și îi adunăm elementele cu un bloc sumă cu lista de semne setata la 1. Acest lucru va calcula componentele de frecvență joasă.
Acum luăm ieșirea subsistemului matrice de colectare a frecvențelor și o trecem printr-un bloc de remodelare, îi adunăm elementele și scădem componentele de frecvență joasă cu un bloc sumă cu lista semnelor setată la -+.
În cele din urmă facem raportul dintre frecvența înaltă și cea joasă cu un block Devide (Simulink – Math Operations).
Vom utiliza un bloc Vector Scope din Signal Processing Blockset – Signal Processing Sinks pentru a afișa raportul dintre frecvența înaltă și cea joasă din interiorul ROI. Acest raport ne indică reglarea focalizării relative a unei camere video. Când acest raport este mare imaginea video este focalizată, iar când este mic imaginea video este nefocalizată.
Modelul va arata ca în figura de mai jos :
Modelul redus :
Ultimul pas în modelul nostru este să introducem un bloc text ca să indicăm dacă imaginea este sau nu focalizată. Vom folosi un bloc Relational operator din Simulink – Logic and bit Operations ca să comparăm raportul cu o constantă de 0.03. Utilizăm un bloc de inserare text din Video and Image Processing Blockset – Text and Graphs. Setăm textul :{‘ Out of focus’, ‘In focus’} și locația [10 100]. În acest fel, în cazul în care raportul este mai mare decât 0,03 va aparea textul : In focus și în caz contrar : Out of focus. Conectăm ieșirea blocului Draw Shape la intrarea imaginii și raportul la intrarea selectată a blocului Inset Text și ieșirea sa la Video Viewer.
Din nou, se poate reduce complexitatea modelului prin crearea de subsisteme. Sistemul final va arăta astfel :
Sau (unde poziția regiunii de interes este setată printr-un bloc constantă):
4.2.4. Rezultatele simulării
În imaginile următoare putem vedea rezultatele sistemului de Identificare a focalizării imaginii video în timp real.
Am luat o secvență video care s-a aflat pe rând nefocalizată, iar apoi focalizată și am observat că sistemul nostru pune în evidență regiunea de interes (ROI) din cadrele video analizate și introduce un text care ne indică dacă imaginea video este sau nu focalizată.
Fig. 4.3. Imaginea video cu ROI și textul indicație
Ferestrele de mai jos ne prezintă raportul dintre frecvența spațială înaltă și frecvența spațială joasă în funcție de ROI. Acest raport este o indicație a sistemului de identificare a focalizării imaginii video în timp real. Când acest raport este mare, peste valoarea 0.03, imaginea video este focalizată; iar când acest raport este mic, sub valoarea 0.03, imaginea video nu este focalizată.
Fig. 4.4. Fereastra focalizare relativă capturată când imaginea nu este focalizată
Fig. 4.5. Fereastra focalizare relativă capturată când imaginea este focalizată
Datele FFT sunt folosite pentru a calcula cât de multe elemente de frecvență înaltă se află în imaginea video unde se poate de asemenea observa diferența între imaginea focalizată și cea nefocalizată.
Fig. 4.6. Datele FFT pentru imaginea focalizată, respectiv imaginea nefocalizată
4.3. Afișarea histogramei utilizând înregistrarea video live
Am construit cu ajutorul Simulink un sistem pentru afișarea în timp real a histogramei utilizând înregistrarea video live. S-a utilizat la realizarea sistemului blocul 2-D Histogram la calcularea histogramelor pentru valorilor R, G și B al fiecarui cadru video.
Construirea sistemului în Simulink
Deschidem Simulink și creăm un model nou :File – New – Model.
Citirea datelor de la un webcam se face cu ajutorul blocului From Video Device. Deschidem acest bloc pentru a seta parametri acestuia : Device – selectăm webcamul pe care îl utilizăm, Video format – modificăm dimensiunea cadrului 320x240x3, Ports mode – semnale separate pe culori, Data Type – uint8. Folosim blocul To Video Display ca să observăm datele care vin de la webcam. În acest bloc setăm Settings – Image signal – Separate color signals.
Unim ieșirile blocului From Video Device cu intrările blocului To Video Display pentru fiecare semnal în parte :
În continuare separăm semnalul pentru R, G și B. Vom introduce în schemă trei blocuri Data Type Conversion cu setările : Output data type – single, Input and output to have equal – Real World Value (RWV), Integer rounding mode – Zero. Legăm ieșirile blocului From Video Device la cele trei blocuri Data Type Conversion .
Utilizăm blocul Bus Creator pentru crearea unui semnal bus din intrările sale pe care le unim cu ieșirile blocurilor Data Type Conversion.
La ieșirea blocului Bus Creator legăm intrarea blocului Histogram pe care îl vom pune în schema și care va avea parametrii : Upper limit of histogram : 255, Number of bins : 256.
Semnalul care iese din blocul Histogram va intra în blocul Bus Selector de unde se va împarți în trei. Vom folosi trei blocuri Reshape pentru shimbarea dimensiunii semnalului la Column vector (2-D).
Cu ajutorul blocului Matrix Concatenate alipim cele trei semnale pe care le vom vizualiza în blocul Vector Scope cu domeniu de intrare – Time. Acesta va afișa într-o fereastră semnalele în timp real ale histogramei pentru R, G și B.
Sistemul final va arata astfel :
Mai jos sunt ferestrele afișate de blocurile Vector Scope și To Video Display :
Fig. 4.7. Histograma RGB și imaginea aferentă
4.4. Transformări ale imaginii
4.4.1. Detectarea marginilor dintr-o imagine cu ajutorul modelului fuzzy logic
Marginea este granița dintre două regiuni uniforme. Aceasta poate fi detectată prin comparația intensității a doi pixeli vecini, dar pentru că regiunile uniforme nu sunt precis definite, diferențele mici de intensitate dintre doi pixeli vecini nu reprezintă întotdeauna o margine. Ele pot fi efecte de umbrire.
Detectarea marginilor cu ajutorul modelelor fuzzy permite folosirea funcțiilor membru pentru a arăta dacă un pixel aparține unei margini sau unei regiuni uniforme.
Irgb = imaginea este o matrice formată din trei dimensiunii de intensitate: roșu, verde și albastru.
Transformăm Irgb în grayscale pentru a putea lucra cu o matrice 2D în locul uneia 3D. Am utilizat formula standard de conversie NTSC care calculează luminanța efectivă a fiecărui pixel.
Igray = 0.2989*Irgb(:,:,1)+0.5870*Irgb(:,:,2)+0.1140*Irgb(:,:,3);
Fig. 4.8. Imaginea în tonuri de gri
O alta metodă de conversie a imaginii în grayscale este funcția rgb2gray din Image Processing Toolbox.
DeoareceToolbox-ulFuzzyLogic folosește doar numere de precizie double vom face această conversie de la matricea uint8.
I = double(Igray); %conversia in double
Algoritmul fuzzy pe care l-am folosit se bazează pe gradientul de imagine pentru localizarea întreruperilor din regiunile uniforme. Calculăm gradientul de imagine de-a lungul axei x și axei y.
Gx = [-1 1]; % intervalul de valori al gradientului
Gy = Gx';
Ix = conv2(I,Gx,'same'); % matricea gradientului axei x
Iy = conv2(I,Gy,'same'); % matricea gradientului axei y
Fig. 4.9. Gradienții imaginii după axa x, respectiv y
Gx și Gy sunt filtrele gradientului. Utilizăm funcția conv2 pentru a obține matricele cu gradienții axei x și axei y. Valorile gradientului sunt în intervalul [-1 1].
Următorul pas este crearea unui sistem FIS pentru detectarea marginilor.
edge = newfis('edgeDetection'); % crearea unui sistem FIS
Introducem intrările sistemului vor fi Ix și Iy – gradienții de imagine.
edge = addvar(edge,'input','Ix',[-1 1]); % intrarea Ix a sistemului FIS
edge = addvar(edge,'input','Iy',[-1 1]); % intrarea Iy a sistemului FIS
Specificăm funcțiile membre ca fiind gaussiene pentru fiecare intrare; iar pentru că valoarea gradientului pentru un pixel este 0 acesta aparține funcției membru zero cu gradul de 1.
sx = 0.1; sy = 0.1;
edge = addmf(edge,'input',1,'zero','gaussmf',[sx 0]);
% definim functia membru gausiana pentru prima intrare
edge = addmf(edge,'input',2,'zero','gaussmf',[sy 0]);
% definim functia membru gausiana pentru a doua intrare
sx și sy precizează deviația standard pentru funcția membru zero a intrarilor Ix și Iy. Valorile sx și sy pot fi modificate pentru a schimba performanța detectorului de marginii. Creșterea acestor valori face algoritmul mai puțin sensibil la marginile din imagine și scade intensitatea marginilor detectate.
Specificăm intensitatea marginii detectate ca ieșire a sistemului FIS construit.
edge = addvar(edge,'output','Iout',[0 1]);
Introducem funcțiile membre triunghiulare, white și black, pentru Iout.
wa = 0.1; wb = 1; wc = 1;
ba = 0; bb = 0; bc = .7;
edge = addmf(edge,'output',1,'white','trimf',[wa wb wc]);
% definim prima functie membru triunghiulara pentru iesire
edge = addmf(edge,'output',1,'black','trimf',[ba bb bc]);
% definim a doua functie membru triunghiulara pentru iesire
Fig. 4.10. Functiile membre de intrare si iesire
Parametri de mai sus influențează intensitatea marginilor detectate.
Vom adăuga regulile prin care vom face un pixel alb dacă aparține unei regiuni uniforme și negru în caz contrar.
r1 = 'If Ix is zero and Iy is zero then Iout is white';
r2 = 'If Ix is not zero or Iy is not zero then Iout is black';
r = char(r1,r2);
edge = parsrule(edge,r);
Evaluăm ieșirea detectorului de margini pentru fiecare rând de pixeli din I folosind șiruri corespunzătoare Ix și Iy ca intrări.
Ieval = zeros(size(I)); % Prealocarea matricei de iesire
for ii = 1:size(I,1)
Ieval(ii,:) = evalfis([(Ix(ii,:));(Iy(ii,:));]',edge);
end
Fig. 4.11. Marginile imaginii extrase cu ajutorul modelului fuzzy
Astfel am detectat marginile dintr-o imagine folosind un FIS care compară gradientul fiecărui pixel pe axele x și y. Dacă gradientul pentru un pixel nu este zero, atunci pixelul aparține unei margini.
4.4.2. Detectarea marginilor într-o imagine cu metoda Canny
Metoda cea mai eficientă de detectare a marginilor folosește filtrul Canny. Metoda Canny diferă de celelalte metode de detectare a marginilor deoarece folosește două procedee diferite de segmentare a imaginilor (pentru detectarea marginilor mai vizibile și cele mai puțin vizibile), și include în ieșire marginile mai puțin vizibile doar dacă sunt conectate la cele mai pronunțate. Prin urmare este puțin probabil ca această metodă să fie pacalită de zgomot și are mai multe șanse să detecteze și marginile mai puțin vizibile și reale.
Pentru aplicarea filtrului Canny vom transforma imaginea RGB în imagine tonuri de gri după care vom folosi metoda ca în codul de mai jos:
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
BW1 = edge(gray, 'canny'); % gaseste marginile cu metoda canny
Fig. 4.12. Marginile imaginii cu metoda Canny
4.4.3. Detectarea marginilor într-o imagine cu metoda Sobel
Filtrul Sobel este folosit în procesarea imaginilor în special în algoritmii de detectare a marginilor și crează o imagine care pune accentul pe margini și tranziții. Tehnic acesta este un operator de diferențiere discretă care calculează o aproximare a gradientului funcției de intensitate al imaginii. Aproximarea gradientului făcut de filtru Sobel este relativ brută în special pentru variațiile de frecvență înaltă din imagine.
Pentru aplicarea filtrului Sobel vom transforma imaginea RGB în imagine tonuri de gri după care vom folosi metoda după cum este prezentată în codul de mai jos:
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
BW2 = edge(gray, 'sobel'); % gaseste marginile cu metoda sobel
Fig. 4.13. Marginile imaginii cu metoda Sobel
4.4.4. Detectarea marginilor într-o imagine cu metoda Prewitt
Filtrul Prewitt este utilizat în procesarea imaginilor în special pentru detectarea marginilor. Operatorul calculează gradientul de intensitate al imaginii in fiecare punct, dând direcția cu cea mai mare creștere probabilă de la lumină la intuneric și rata schimbării în direcția aceasta. Filtrul Prewitt de asemenea are o aproximare a gradientului relativ brută mai ales la variațiile de frecvență înaltă din imagine.
Pentru aplicarea filtrului Prewitt vom transforma imaginea RGB în imagine tonuri de gri după care vom folosi metoda după cum este prezentată în codul de mai jos:
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
BW3 = edge(gray, 'prewitt'); % gaseste marginile cu metoda prewitt
Fig. 4.14. Marginile imaginii cu metoda Prewitt
4.4.5. Segmentarea imaginii
Segmentarea imaginii crează o imagine binară dintr-o imagine tonuri de gri. Metoda Otsu este utilizată pentru a construi automat imaginea binarizată pe baza de grupare sau la reducerea imaginii tonuri de gri în imagine binară. Algoritmul presupune că imaginea care urmeaza să fie segmentată conține două clase de pixeli și apoi calculează pragul optim de separare al celor două clase încât răspândirea combinată a lor este minimă. Codul pentru segmentarea imaginii este:
im2=im2bw(im,graythresh(im)); % segmentarea imaginii cu metoda Otsu
Fig. 4.15. Imaginea segmentată
4.4.6. Complementul imaginii
În imaginea complement valorea fiecărui pixel este scazută din valoarea maximă pe care o suporta un pixel și diferența obținută este folosită ca valoare a pixelilor pentru imaginea obținută. Codul în Matlab pentru imaginea complemet este:
im2 = imcomplement(im); % calculeaza complementul imaginii
Fig. 4.16. Imaginea complement
4.4.7. Trasarea limitelor într-o imagine
Limitele unei imagini pot fi identificate mai bine dacă imaginea are un contrast bun față de fundal. În primul rând vom elimina culoarea din imagine pentru a putea identifica mai bine obiectele. Pentru aceasta vom converti imaginea RGB în imagine tonuri de gri:
im1=rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
Pasul urmator este transformarea imaginii într-una binară. Funcția de mai jos atribuie culoarea negru pentru toți pixelii cu luminozitate mai mare decat un prag și pentru restul alb. Comanda graythresh calculează aproximativ pragul imaginii.
im2=im2bw(im1,graythresh(im1)); % segmentarea imaginii cu metoda Otsu
Operatorul ~ ne va afișa imaginea complement astfel elementele negre vor deveni albe și invers. Efectuăm acest pas pentru ca domeniile de interes să fie de culoare albă.
im3=~im2; % calculeaza complementul imaginii
În acest pas vom gasi limitele fiecărui obiect din imagine și le vom stoca în B:
B = bwboundaries(im3); % traseaza limita exterioara a obiectelor
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(im3) % afiseaza imaginea
Vom utiliza o funcție text pentru a vizualiza numărul de obiecte găsite în imagine și vom folosi un bloc for pentru marcarea limitelor tuturor elementelor aflate în imagine:
text(10,10,strcat('\color{green}Objects Found:',num2str(length(B))))
hold on
% afiseaza numarul de obiecte gasite
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 0.2)
end
% traseaza limita obiectelor
Fig. 4.17. Imaginea binarizată cu numarul de obiecte existente și marcarea acestora
4.4.8. Rotirea imaginii după un unghi dat
Rotirea imaginii după un unghi dat se face în matlab cu ajutorul codului de mai jos. Mai întâi vom construi o casetă de dialog unde vom putea stabilii unghiul de rotire și setăm unghiul de 90 grade ca valoare implicită.
prompt = {'Unghiul de rotire(0-360):'};
dlg_title = 'Rotire';
num_lines = 1;
def = {'90'};
answer = inputdlg(prompt,dlg_title,num_lines,def);
val = str2num(answer{1});
% deschide o fereastra in care putem alege unghiul de rotire
global im % defineste variabila globala
rotateim = imrotate(im, val); % roteste imaginea
Fig. 4.18. Imaginea rotită la un unghi de 90 grade
4.4.9. Ajustarea imaginii
Ajustarea imaginii se face cu comanda imadjust care mapează valorile din imagine la valori noi în imaginea rezultată; astfel încat între valorile de intrare mici și mari mapează între valorile de ieșire mici și mari. Valorile luate trebuie să fie în intervalul [0 1]. Pentru valorile implicite [0 1] putem folosi o matrice goală ([]).
RGB = imadjust(im,[.2 .3 0; .6 .7 1],[]);
%ajusteaza intensitatea imaginii in functie de valorile introduse
Fig.4.19. Imaginea ajustată
4.4.10. Redimensionarea imaginii
Redimensionarea folosește mărirea sau micșorarea imaginii la scară față de imaginea inițială. Am inițializat mai întâi o casetă de dialog pentru introducerea ratei de micșorare/ mărire. Dacă valorile acestei rate sunt între 0 și 1 imaginea va fi mai mică decât cea inițială, iar dacă rația este mai mare decât 1 imaginea va fi mai mare decât cea inițială.
prompt = {'Introduceti rata de micsorare/marire(0.1-1):'};
dlg_title = 'Redimensionare';
num_lines = 1;
sr = inputdlg(prompt,dlg_title,num_lines);
sr = str2double(sr);
% deschide o fereastra in care putem alege rata de micsorare/marire
ims=im;
ims=imresize(ims,sr); % redimensioneaza imaginea
Fig.4.20. Imaginea originală și cea redimensionată
4.4.11. Egalizarea histogramei unei imaginii
Prin egalizarea histogramei vom îmbunatăți contrastul imaginii în tonuri de gri.
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
axes(handles.axes3); % floseste axa 3 pentru afisare
histeq(gray); % imbunatatirea contrastului flosind egalizarea histogramei
Fig. 4.21. Imagine cu histograma egalizată
4.4.12. Intoarcerea verticală a imaginii
Codul pentru întoarcerea verticală a imaginii este:
im2 = flipdim(im ,2); % intoarce matricea de-a lungul dimensiunii 2
Fig. 4.22. Imaginea întoarsă vertical
4.4.13. Întoarcerea orizontală a imaginii
Codul pentru întoarcerea orizontală a imaginii este:
im2 = flipdim(im ,1); % intoarce matricea de-a lungul dimensiunii 1
Fig. 4.23. Imaginea întoarsă orizontal
4.4.14. Imaginea în tonuri de gri
Codul pentru transformarea imaginii RGB în imagine tonuri de gri este:
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
Fig. 4.24. Imaginea în tonuri de gri
4.4.15. Imaginea în negru și alb
Codul pentru transformarea imaginii RGB în imagine negru – alb este:
bw = im2bw(im); % transforma imaginea intr-una binara (negru si alb)
Fig. 4.25. Imaginea în negru și alb
4.4.16. Componenta roșie a imaginii
Izolarea componentei roșu dintr-o imagine RGB se face cu ajutorul codului de mai jos:
red = im;
red(:,:,2) = 0;
red(:,:,3) = 0; % extragem componenta rosie a imaginii
Fig. 4.26. Componenta roșie a imaginii
4.4.17. Componenta albastră a imaginii
Izolarea componentei albastru dintr-o imagine RGB se face cu ajutorul codului de mai jos:
blue = im;
blue(:,:,1) = 0;
blue(:,:,2) = 0; % extragem componenta albastra a imaginii
Fig. 4.27. Componenta albastră a imaginii
4.4.18. Componenta verde a imaginii
Izolarea componentei verde dintr-o imagine RGB se face cu ajutorul codului de mai jos:
green = im;
green(:,:,1) = 0;
green(:,:,3) = 0; % extragem componenta verde a imaginii
Fig. 4.28. Componenta verde a imaginii
Concluzii
Popularitatea crescută a aplicațiilor multimedia a condus la prezența nemărginită a camerelor digitale într-o varietate de dispozitive mobile; cum ar fi telefoanele, camerele web, roboți industriali, dispozitive medicale, dispozitive pentru jocuri, etc. Tindem către dezvoltarea aparatelor de achiziție de imagine cât mai mici ca dimensiune și la prețuri scăzute, dar fără a pierde din calitatea imaginii.
Atât pentru achiziția imaginilor cât și pentru utilizarea lor ulterioară, un rol important îl deține prelucrarea acestora cu scopul îmbunatățirii informației pentru interpretarea umană sau pentru a fi mai potrivite percepției mașinilor autonome. Dacă pentru oameni cadrele foto/video trebuie să fie clare și detaliate, mașinile/calculatoarele prefera imaginile simple și ordonate.
În această lucrare s-a construit o aplicație care realizează identificarea focalizării imaginii video în timp real, afișarea histogramei în timp real, detectarea marginilor prin mai multe metode și alte transformări făcute imaginilor.
Identificarea focalizării imaginii video în timp real este folositoare pentru toate echipamentele de achiziție video din nevoia unor cadre cât mai precise, clare și detaliate în zona de interes. Aceste cadre vor fi ulterior prelucrate în funcție de utilizarea lor.
Rezultatele simulării ne indică nivelul de focalizare al cadrelor video raportat la frecvența spațială. Se poate observa din evidențierea regiunii de interes a cadrului, din graficul de focalizare relativă și din datele FFT cand imaginea este focalizată sau nu.
În funcție de utilizarea cadrelor foto/video acestea mai pot suferi o serie de transformări ulterioare. Un exemplu ar fi detectarea marginilor dintr-o imagine, aceasta putând fi efectuată prin mai multe metode. Din rezultatele obținute prin procesul de detecție se observă ca metoda Canny și cea cu implementarea modelului fuzzy detectează atât marginile vizibile cât și cele mai puțin vizibile, reale. Aceste metode sunt puțin probabil afectate de zgomotul existent în imagine.
Achiziția histogramei în timp real este importantă pentru echipamentele video/foto profesionale deoarece oferă un control precis al setărilor de expunere. Aceasta arată nivelurile de lumină existente în imagine și ne ajută la obținerea unui cadru cât mai bun.
Prelucrarea imaginilor reprezintă un aspect important în domenii cum ar fi: domeniul medical, domeniul industrial, în învățământ, prelucrarea datelor în criminalistică, în robotică etc.
Bibliografie
[1] Emil Sofron, Sisteme de control fuzzy, Ed. All Educational, Bucuresti, 1998;
[2] Dan Cojoc, Niculae Puscas, Introducere in procesarea semnalelor optice, Ed. Matrix, Bucuresti, 1999;
[3] Vaida Mircea-Florin, Procesarea imaginilor medicale.Ingineria programarii, Ed. Casa Cartii, Cluj, 2000;
[4] Guanrong Chen, Introduction to Fuzzy Sets, Fuzzy Logic and Fuzzy Control Systems, Ed. CRC Press, U.S.A., 2001;
[5] Alasdair McAndrew, An Introduction to Digital Image Processing with Matlab, 2004.
[6] Kenneth R. Castleman. Digital Image Processing. Prentice Hall, 1996
[7] http://envirofotoclub.wordpress.com/cursuri/
[8] http://www.webdesignbox.ro/parametrii-unei-fotografii
[9] http://www.bel.utcluj.ro/rom/dce/goltean/fuzzy/fuzzy.htm
[10] http://en.wikipedia.org/wiki/Autofocus
[11] http://aparate.elth.ucv.ro/IVANOV/Master/MOOEE/Laborator/Creare%20GUI.pdf
[12] http://www.webit-ps.com/tutoriale/Matlab/10.pdf
ANEXA 1
Codul de apelare al funcțiilor callback aflat în spatele interfeței grafice GUI:
% app01.m
function varargout = app01(varargin)
% APP01 M-file pentru app01.fig
% APP01 creaza el insusi un nou APP01 sau mareste
% singleton* existent.
%
% H = APP01 intoarce mijlocul de manevrare pentru un nou APP01
% sau mijlocul de manevrare pentru singleton* existent.
%
% APP01('CALLBACK',hObject,eventData,handles,…) apeleaza functiile
% locale numite CALLBACK din APP01.M cu argumentele de intrare date.
%
% APP01('Property','Value',…) creaza un nou APP01 sau mareste
% singleton* existent. Incepand de la stanga, perechile de valori de
% propietati aplicate la GUI inainte ca app01_OpeningFcn sa fie
% apelate.
%
% Un nume de proprietate nerecunoscut sau valoare invalida face cerere
% de proprietate close_f_heck.
%
% Toate intrarile sunt transmise la app01_OpeningFcn prin varargin.
%
% *Vezi optiunile GUI din meniul GUIDE's Tools. Alege " GUI allows
% only one instance to run (singleton)".
%
% Vezi de asemenea: GUIDE, GUIDATA, GUIHANDLES
% Editeaza textul de deasupra pentru a modifica raspunsul ajutorului
% pentru app01.
% Ultima modificare by GUIDE v2.5 12-Jul-2014 16:49:02
% Incepe codul de initializare – NU EDITATI!
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, …
'gui_Singleton', gui_Singleton, …
'gui_OpeningFcn', @app01_OpeningFcn, …
'gui_OutputFcn', @app01_ OutputFcn, …
'gui_LayoutFcn', [] , …
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% Sfarsitul codului de initializare – NU EDITATI
% – Executa chiar inainte ca app01 sa fie vizibila.
function app01_ OpeningFcn(hObject, eventdata, handles, varargin)
% Aceasta functie nu are argumente de intrare, vezi OutputFcn.
%
% hObject mijloc de manevrare pentru figura
% eventdata rezervat – pentru a fi definit intr-o versiune
% viitoare a MATLAB
% handles structura pentru mijloc de manevra si date utilizator
% (vezi GUIDATA)
% varargin argumente in linie de comanda pentru app01 (vezi VARARGIN)
% Alegeti linia de comanda implicita pentru iesire in app01
handles.output = hObject;
% Actualizeaza structura mijloc de manevra
guidata(hObject, handles);
% UIWAIT face app01 sa astepte raspunsul utilizatorului (vezi UIRESUME)
% uiwait(handles.figure1);
%
% – Iesirile din aceasta functie sunt returnate la linia de comanda.
function varargout = app01_OutputFcn(hObject, eventdata, handles)
% varargout celule de matrice pentru returnarea argumentelor de iesire
% (vezi VARARGOUT);
% hObject mijloc de manevra pentru figura
% eventdata rezervat – pentru a fi definit intr-o versiune
% viitoare a MATLAB
% handles structura pentru mijloc de manevra si date utilizator
% (vezi GUIDATA)
%
% Obtine linia de comanda implicita pentru iesire de la structura
% mijloc de manevra
varargout{1} = handles.output;
% – Executa la apasarea butonului save_image.
function save_image_Callback(hObject, eventdata, handles)
img = getimage(handles.axes3); % obtine imaginea din axa 3
[FileName, PathName] = uiputfile('*.jpg', 'Save As');
% deschide o caseta de dialog pentru ca utilizatorul sa completeze numele
% imaginii si sa o salveze
Name = fullfile(PathName, FileName);
% construieste numele complet al imaginii
imwrite(img, Name, 'jpg');
% scrie imaginea img cu numele specificat in format jpg
% – Executa la apasarea butonului histogram.
function histogram_Callback(hObject, eventdata, handles)
global im % defineste ca variabila globala im
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
axes(handles.axes4); % floseste axa 4 pentru afisare
imhist(gray); % afiseaza histograma imaginii tonuri de gri
% – Executa la apasarea butonului live_histogram.
function live_histogram_Callback(hObject, eventdata, handles)
open_system('histograma_live') % deschide sistemul din Simulink
set_param('histograma_live','SimulationCommand','start');
% porneste simularea sistemul
% – Executa la apasarea butonului load_image_manually.
function load_image_manually_Callback(hObject, eventdata, handles)
global im im2 % defineste variabila globala
[path,user_cancel]=imgetfile();
if user_cancel
msgbox(sprintf('Error'),'Error','Error');
return
end
% deschide o caseta de dialog pentru ca utilizatorul sa completeze numele
% imaginii si sa o salveze, daca nu introducem nimic si apasam cancel ne
% va arata eroare
im=imread(path); % citeste imaginea din fisierele grafice
im=im2double(im); % transforma imaginea in double
im2=im; % pentru procesul de back-up
axes(handles.axes2); % floseste axa 2 pentru afisare
imshow(im); % afiseaza imaginea
% – Executa la apasarea butonului exit.
function exit_Callback(hObject, eventdata, handles)
close all; % inchide programul
% – Executa la apasarea butonului start_webcam.
function start_webcam_Callback(hObject, eventdata, handles)
global vid % defineste variabila globala
vid = videoinput('winvideo',1,'RGB24_640x480');
% deschide webcam-ul in format RGB
vid.ReturnedColorspace = 'rgb';
% configureaza setarile intrarii video
triggerconfig(vid, 'manual');
% setam inaltimea si latimea
vidRes = get(vid, 'VideoResolution');
% latimea imaginii
imWidth = vidRes(1);
% inaltimea imaginii
imHeight = vidRes(2);
% numarul de bande al imaginii ( 3 deoarece imaginea este RGB)
nBands = get(vid, 'NumberOfBands');
% creaza un spatiu gol pentru imagine si o afiseaza in axes1
hImage = image(zeros(imHeight, imWidth, nBands), 'parent', handles.axes1);
preview(vid,hImage);
% – Executa la apasarea butonului take_snapshot.
function take_snapshot_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
global vid % defineste variabila globala
im = getsnapshot(vid); %creaza un instantaneu al imaginii
axes(handles.axes2); % floseste axa 2 pentru afisare
imshow(im) % afiseaza imaginea
im = getimage(handles.axes2);
[FileName, PathName] = uiputfile('*.jpg', 'Save As');
Name = fullfile(PathName, FileName);
imwrite(im, Name, 'jpg');
% salveaza imaginea
% – Executa la apasarea butonului clear_all.
function clear_all_Callback(hObject, eventdata, handles)
arrayfun(@cla,findall(0,'type','axes'))
% cauta toate axele si le inchide
% – Executa la apasarea butonului GrayScale.
function GrayScale_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(gray); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului black_and_white.
function black_and_white_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
bw = im;
bw = im2bw(im); % transforma imaginea intr-una binara (negru si alb)
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(bw); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului red_component.
function red_component_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
red = im;
red(:,:,2) = 0;
red(:,:,3) = 0; % componenta rosie a imaginii
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(red); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului blue_component.
function blue_component_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
blue = im;
blue(:,:,1) = 0;
blue(:,:,2) = 0; % componenta albastra a imaginii
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(blue); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului green_component.
function green_component_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
green = im;
green(:,:,1) = 0;
green(:,:,3) = 0; % componenta verde a imaginii
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(green); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului canny_edge_detection.
function canny_edge_detection_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
BW1 = edge(gray, 'canny'); % gaseste marginile cu metoda canny
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(BW1); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului sobel_edge_detection.
function sobel_edge_detection_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
BW2 = edge(gray, 'sobel'); % gaseste marginile cu metoda sobel
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(BW2); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului prewitt_edge_detection.
function prewitt_edge_detection_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
BW3 = edge(gray, 'prewitt'); % gaseste marginile cu metoda prewitt
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(BW3); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului threshold_image.
function threshold_image_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
im2=im2bw(im,graythresh(im)); % segmentarea imaginii cu metoda Otsu
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(im2); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului image_complement.
function image_complement_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
im2 = imcomplement(im); % calculeaza complementul imaginii
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(im2); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului draw_boundaries.
function draw_boundaries_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
im1=rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
im2=im2bw(im1,graythresh(im1)); % segmentarea imaginii cu metoda Otsu
im3=~im2; % calculeaza complementul imaginii
B = bwboundaries(im3); % traseaza limita exterioara a obiectelor
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(im3) % afiseaza imaginea
text(10,10,strcat('\color{green}Objects Found:',num2str(length(B))))
hold on
% afiseaza numarul de obiecte gasite
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 0.2)
end
% traseaza limita obiectelor
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului rotate.
function rotate_Callback(hObject, eventdata, handles)
prompt = {'Unghiul de rotire(0-360):'};
dlg_title = 'Rotire';
num_lines = 1;
def = {'90'};
answer = inputdlg(prompt,dlg_title,num_lines,def);
val = str2num(answer{1});
% deschide o fereastra in care putem alege unghiul de rotire
global im % defineste variabila globala
rotateim = imrotate(im, val); % roteste imaginea
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(rotateim) % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului image_adjust.
function image_adjust_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
RGB = imadjust(im,[.2 .3 0; .6 .7 1],[]);
%ajusteaza intensitatea imaginii in functie de valorile introduse
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(RGB); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului image_resize.
function image_resize_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
prompt = {'Introduceti rata de micsorare/marire(0.1-1):'};
dlg_title = 'Redimensionare';
num_lines = 1;
sr = inputdlg(prompt,dlg_title,num_lines);
sr = str2double(sr);
% deschide o fereastra in care putem alege rata de micsorare/marire
ims=im;
ims=imresize(ims,sr); % redimensioneaza imaginea
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(ims); % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului fuzzy_edge_detection.
function fuzzy_edge_detection_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
Irgb = im;
Igray = 0.2989*Irgb(:,:,1)+0.5870*Irgb(:,:,2)+0.1140*Irgb(:,:,3);
% formula standard de conversie NTSC care calculeaza luminanta efectiva a
% fiecarui pixel.
I = double(Igray); %conversia in double
Gx = [-1 1]; % intervalul de valori al gradientului
Gy = Gx';
Ix = conv2(I,Gx,'same'); % matricea gradientului axei x
Iy = conv2(I,Gy,'same'); % matricea gradientului axei y
edge = newfis('edgeDetection'); % crearea unui sistem FIS
edge = addvar(edge,'input','Ix',[-1 1]); % intrarea Ix a sistemului FIS
edge = addvar(edge,'input','Iy',[-1 1]); % intrarea Iy a sistemului FIS
sx = 0.1; sy = 0.1;
% sx si sy precizeaza deviatia standard pentru functia membru zero a
% intrarilor Ix si Iy
edge = addmf(edge,'input',1,'zero','gaussmf',[sx 0]);
% definim functia membru gausiana pentru prima intrare
edge = addmf(edge,'input',2,'zero','gaussmf',[sy 0]);
% definim functia membru gausiana pentru a doua intrare
edge = addvar(edge,'output','Iout',[0 1]);
% specificam intensitatea marginii detectate ca iesire a sistemului FIS
wa = 0.1; wb = 1; wc = 1;
ba = 0; bb = 0; bc = .7;
edge = addmf(edge,'output',1,'white','trimf',[wa wb wc]);
% definim prima functie membru triunghiulara pentru iesire
edge = addmf(edge,'output',1,'black','trimf',[ba bb bc]);
% definim a doua functie membru triunghiulara pentru iesire
r1 = 'If Ix is zero and Iy is zero then Iout is white';
r2 = 'If Ix is not zero or Iy is not zero then Iout is black';
r = char(r1,r2);
edge = parsrule(edge,r);
%definim regulile sistemului FIS
Ieval = zeros(size(I)); % Prealocarea matricei de iesire
for ii = 1:size(I,1)
Ieval(ii,:) = evalfis([(Ix(ii,:));(Iy(ii,:));]',edge);
end
% evaluarea iesiri detectorului de marginii pentru fiecare rand de pixeli
axes(handles.axes3); % floseste axa 3 pentru afisare
image(Ieval,'CDataMapping','scaled'); colormap('gray');
% afisarea marginilor
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului histogram_equalization.
function histogram_equalization_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
gray = rgb2gray(im); % transforma imaginea RGB in imagine tonuri de gri
axes(handles.axes3); % floseste axa 3 pentru afisare
histeq(gray);
% imbunatatirea contrastului flosind egalizarea histogramei
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului flip_horizontal.
function flip_horizontal_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
im2 = flipdim(im ,2); % intoarce matricea de-a lungul dimensiunii 2
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(im2) % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
% – Executa la apasarea butonului check_focus.
function check_focus_Callback(hObject, eventdata, handles)
open_system('video_focus') % deschide sistemul din Simulink
set_param('video_focus','SimulationCommand','start');
% porneste simularea sistemului
% – Executa la apasarea butonului close_f_heck.
function close_f_heck_Callback(hObject, eventdata, handles)
set_param('video_focus','SimulationCommand','stop');
% opreste simularea sistemul
close_system('video_focus')
% inchide sistemul din Simulink
% – Executa la apasarea butonului close_live_h.
function close_live_h_Callback(hObject, eventdata, handles)
set_param('histograma_live','SimulationCommand','stop');
% opreste simularea sistemul
close_system('histograma_live')
% inchide sistemul din Simulink
% – Executa la apasarea butonului flip_vertical.
function flip_vertical_Callback(hObject, eventdata, handles)
global im % defineste variabila globala
im2 = flipdim(im ,1); % intoarce matricea de-a lungul dimensiunii 1
axes(handles.axes3); % floseste axa 3 pentru afisare
imshow(im2) % afiseaza imaginea
set(hObject,'Value',0); % reseteaza butonul radio
3
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Metode de Focalizare a Zonelor de Interes din Imaginile Digitale (ID: 162782)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
