Utilizarea Visual C++ In Procesarea Imaginilor
Utilizarea Visual C++ in procesarea imaginilor
MEMORIU TEHNIC
1. Percepția umană și procesarea de imagini
Începând cu introducerea sistemului Bartlane de transmisie prin cablu a imaginilor (1920) și până în prezent progresele prelucrării în domeniul imaginilor au fost impresionante. Pe lîngă aplicațiile din tehnica spațială, aceste tehnici se folosesc într-o mulțime de aplicații în vederea optimizării analizei și interpretării de către observatorul uman.
Un domeniu major de aplicație al tehnicilor de prelucrare a imaginilor este percepția lor cu ajutorul calculatorului. Scopul este extragerea informației într-o formă cât mai potrivită pentru prelucrarea ulterioară pe calculator.
Există posibilitatea ca pornind și de la celelate simțuri (auz, miros, gust si pipăit) specifice oamenilor obișnuiți să se conceapă echipamente inteligente care să ofere rezultate mult mai bune decât cele existente în acest moment.
În acest moment auzul este integrat în cadrul sistemelor multimedia existând cercetări pentru a integra și celelate simțuri.
Următoarea figură (Figura 1.1.) ne prezintă modul în care pornind de la semnalul de intrare perceput de ființa umană, acest semnal este procesat în cadrul memoriei senzoriale, cea de scurtă durată și cea de lungă durată.
Figura 1.1. Psihologia și memoria umană
Trebuie spus de la început că există o diferență în ceea ce priveste tipul de informație preluată din imagini de către vederea umană și modul cum utilizează imaginile sistemele de calcul în scopuri tehnice.
Vederea umană este în mod primar calitativă și comparativă mai degrabă decât cantitativă.
În schimb, analiza de imagine realizată de către sistemele de calcul este dominant orientată spre o apreciere cantitativă a imaginii.
Vederea umană, deci, este considerată cel mai important simț, simț care însă încă nu este suficient de bine cunoscut.
Sistemul uman de viziune utilizează un mecanism care urmărește maximizarea îmbunătățirii detaliilor din imaginea originală.
Lumina care provine de la obiecte este colectată prin mediile transparente ale ochiului, Figura 1.2., după care este focalizată și proiectată pe retină. Pe retină sunt excitați peste 125 milioane de senzori sensibili la lumina sub formă de conuri și bastonașe (125 mil. bastonașe, 7 mil. conuri). Bastonașele sunt foarte senzitive la intensitatea luminoasă pe când conurile detectează culoarea și detaliile fine din imagine.
Figura 1.2. Ochiul uman
Există trei tipuri de conuri, referite ca roșu (Red), verde (Green) și albastru (Blue). Vârful răspunsului acestor conuri nu corespunde exact la lungimile de undă corespunzătoare acestor culori, Figura 1.3. (B = 440 nm, G = 545 nm, R = 580 nm). Ultimele două vârfuri sunt practic în spectrul culorii galbene existând suprapuneri între cele 3 domenii. Senzorii excitați trimit impulsuri prin nervul optic către cortexul vizual în vederea analizei, interpretării și recunoașterii imaginilor.
Figura 1.3. Răspunsul spectral al conurilor
Percepția color a imaginilor este făcuta ținând cont de 3 variabile perceptuale:
1. Nuanța de culoare (Hue), care permite distincția între culori cum ar fi între verde și galben. Senzația de albastru (B) este între 430-480 nm, pentru verde (G) între 500-550 nm, pentru galben între 570-600 nm iar pentru roșu (R) este peste 610 nm.
2. Saturația, reprezintă gradul în care o culoare este percepută ca fiind nediluată cu culoarea albă. De cele mai multe ori este cunoscută ca și puritatea unei culori. Culorile nesaturate apar spălacite, fade pe când cele saturate sunt vibrante, puternice. Roșu reprezintă o culoare saturată iar roz o culoare nesaturată.
3. Claritatea culorii (Lightness) este intensitatea percepută a luminii reflectate a unui obiect. Se referă la gama culorilor de la alb la negru trecând prin gri sau de la roșu închis la roșu deschis trecând prin celelalte nuanțe. Practic reprezintă nuanțele de gri (gray level), intensitățile, această tratare a imaginilor fiind cunoscută ca și tratare a imaginilor de intensitate. Pornind de la aceste trei variabile se definește modelul color, HSI.
Relația dintre intensitatea luminoasă pe fotoreceptorii bastonașe și percepția luminozității este mai degrabă logaritmitică decât liniară. Astfel pentru aceiași schimbare în intensitatea luminoasă, există o mult mai mare schimbare percepută la regiunile de luminozitate închisa din imagine față de cele strălucitoare. Printr-o simplă înegrire a imaginii, detaliile precedente neiluminate pot fi luminate (Figura 1.4.).
Y’
Percepția luminozității
Y
X X’
Negru Alb
Intensitatea luminoasă
Figura 1.4. Percepția luminozității și intensitatea luminoasă, X =X’
Lumina reprezintă o radiație electromagnetică care stimulează răspunsul vizual. Se exprimă prin distribuția energiei spectrale L(λ), unde λ e lungimea de undă ce pentru domeniul vizibil e cuprins între 350 nm și 780 nm, din spectrul electromagnetic. Lumina primită de la un corp (luminozitatea lui sau iluminarea lui specifică) poate fi reprezentată de relația:
unde ρ(λ) reprezintă reflectivitatea sau transmisivitatea unui obiect și L(λ) este distribuția energiei incidente. Domeniul iluminării în care sistemul vizual uman poate opera este între 1 la 1010, sau 10 ordine ale magnitudinii, ceea ce reprezintă o calitate deosebită a sistemului vizual uman.
Luminanța (luminance) sau intensitatea spațială a unui obiect spațial distribuit având distribuția luminii I(x, y, λ) este definită prin:
unde V(λ) este numită funcția de eficiență a luminozitații relative a sistemului vizual. Pentru ochiul uman, V(λ) este o curbă în formă de clopot (Figura 1.5.). Luminanța unui obiect (privit ca și o sursă de emisie) este independentă de luminanța obiectelor înconjurătoare.
Strălucirea( brightness) numită de asemenea strălucirea aparentă a unui obiect este percepția luminanței depinzând de luminanța înconjurătoare.
Două obiecte având medii înconjurătoare diferite pot avea luminanața identică dar să difere prin strălucire.
Figura 1.5. Funcția tipică de eficiență
a luminozității relative
Deci în al doilea mod, ochiul uman vizualizează un efect simultan de contrast prin care percepția luminoziății unei zone (arii) depinde de intensitatea ariei înconjurătoare (fond).
În Figura 1.6.a, cele două patrate mici din mijloc au aceeași valoare a luminanței dar cel din stânga apare mai strălucitor. În Figura 1.6.b cele două patrate par a avea aceeași strălucire dar luminanțele lor sunt diferite. Realitatea este că percepția umană este mai sensibilă la contrastul luminanței decât la valorile absolute ale ei.
Figura 1.6. Contrast simultan
patrate mici în mijloc cu luminanța egală dar care nu par a avea aceeași strălucire
patrate mici în mijloc, care par a avea strălucirea egală dar luminanța lor e diferită
Conform legii puterii:
și alegând n = 3, a3 = 21.9, ca preferată în cadrul legii logaritmice, ea fiind practic cea mai utilizată, rezultă:
Figura 1.7. Modele ale
contrastului
O altă definiție a contrastului ține cont de intensitatea maximă și minimă a unei regiuni sau a unei imagini. Contrastul c, se definește prin:
Imaginile cu contrast ridicat au regiuni mari întunecoase și luminoase.
În al treilea mod, sistemul vizual uman poate accentua schimbările de intensitate, utilizând efectul de bandă Mach, care înseamnă că în imediata vecinătate a unei regiuni închise și a uneia deschise, ochiul uman percepe o schimbare mult mai exagerată în tranziția luminozității, decât este prezentă de fapt.
Deci interacțiunea spațială a luminanței unui obiect și vecinătatea lui crează un fenomen numit efectul Mach. Acest efect arată că strălucirea nu este o funcție monotonă a luminanței. Considerăm nivelele de gri ale barelor din Figura. 1.8. în care fiecare bară are o luminantă constantă. Strălucirea aparentă nu este uniformă de-a lungul barei.
(a) (b)
Figura 1.8. Efectul de bandă Mach
a) Bare de nivele de gri. b) Luminanța și strălucirea
Tranziția la fiecare bară apare mai luminoasă în partea dreaptă și mai întunecoasă în cea stângă. Linia întreruptă din Figura 1.9.b reprezintă luminozitatea percepută. Efectul de bandă Mach e ilustrat prin umflătura, respectiv gaura care apare. Măsurarea efectului Mach poate fi folosită la estimarea răspunsului în impuls al sistemului vizual.
Figura 1.9. Benzi Mach
a) D = banda inchisă, B = banda strălucitoare. b) Efectul de bandă Mach
c) Natura răspunsului în impuls al sistemului vizual
De asemenea, este de remarcat faptul că rezoluția ochiului uman este de circa 25×106 unităti/cm2 față de 500-4000 unităti/cm2 la senzorii uzuali folosiți în prezent.
Percepția umană permite procesarea a circa 16 imagini pe secundă în timp ce există unele sisteme de analiză a imaginilor care procesează până la 300 de imagini pe secundă. Aceste sisteme de analiză a imaginilor sunt însă extrem de dedicate unor aplicații. Percepția umană rămâne încă superioară în ceea ce privește înțelegerea și clasificarea imaginilor.
1.1. Caracteristici specifice prelucrării de imagini
Analiza imaginilor este utilizată în multe domenii ale activității industriale, în domeniul educațional, sănătate, cercetare etc.
Prelucrările efectuate asupra imaginilor se pot grupa în următoarele categorii (Figura 1.10.).
Figura 1.10. Structura unui sistem de analiza a imaginilor
Deci, prelucrările de imagini pot fi:
prelucrări de nivel inferior (datele de intrare și de ieșire sunt de tip imagine reprezentate prin matrici de puncte); ca și principale prelucrări la acest nivel avem:
achiziție, vizualizare,
îmbunătățirea imaginii,
accentuarea unor caracteristici.
prelucrări de nivel intermediar (datele de intrare sunt de tip imagine, iar cele de ieșire sunt reprezentate sub forma unor structuri simbolice); principalele operații care se referă la acest nivel reprezintă extragerea de trăsături:
locale,
globale.
prelucrări de nivel superior (operează pe reprezentări simbolice) unde întâlnim mai ales:
recunoașterea imaginilor bazate pe forme,
interpretarea rezultatelor.
Prelucrarea imaginilor (Image Processing) are mai multe subdomenii, cum ar fi :
Restaurarea imaginii (Image Restoration) – are ca scop reducerea deformărilor introduse la formarea imaginii digitale
Îmbunătățirea imaginii (Image Enhancement) – se ocupă cu creșterea contrastului, eliminarea zgomotelor etc.
Compresia imaginilor (Image Compression) – are ca obiectiv reprezentarea imaginii astfel încât aceasta să ocupe mai puțin spațiu decât imaginea inițială. Deci, aceasta are ca scop reducerea cantității de informație necesară reprezentării imaginii. Aceste tehnici de compresie a imaginilor pot fi extrem de utile la stocarea și transmiterea imaginilor.
Analiza imaginilor (Image Analysis) are ca scop determinarea obiectelor care apar într-o imagine și descrierea suprafețelor acestor obiecte. Intrarea este o imagine digitală, iar ieșirea este o reprezentare simbolică a imaginii inițiale.
1.2. Domenii abordate de analiza imaginilor
Analiza imaginilor, deseori este legată de domeniile pe care le abordează. Obiectivele principale pot fi în acest moment orientate către două direcții importante:
– dezvoltarea de aplicații știintifice și inginerești,
– utilizarea de resurse avansate în asistarea procesului educațional.
În cadrul aplicațiilor științifice și inginerești avem:
– procesări de imagini medicale și tehnico-industriale,
– procesări multimedia,
– calcul performant pentru dezvoltarea rețelelor neuronale,
– facilități privind utilizarea sistemelor performante în telecomunicații, etc.
Aplicațiile care urmăresc asistarea procesului educațional se referă la:
– asistarea educațională folosind Internet-ul,
– aplicații multimedia pentru asistarea complexă în învățămantul special, etc.
Principalele domenii abordate de procesarea imaginilor sunt:
a) imagistica tehnico-industrială – care se referă la vederea artificială deseori asociată cu robotică.
Acest domeniu include :
aplicații privind manipularea obiectelor,
controlul proceselor de fabricație sau asamblare,
cristalografie, defectoscopie,
analize dinamice inteligente,
controlul și inspecția de calitate inclusiv inspecție prin termoviziune,
modelarea de suprafețe sau volume, etc.
b) imagistica comercială – include în general recunoașterea caracterelor și a semnăturilor, imaginea fiind deseori binarizată. De asemenea poate fi inclusă activitatea de reclamă, caz în care analiza imaginilor este în mod necesar legată de cea de grafică. În cadrul imagisticii comerciale poate fi inclusă și o parte din activitatea de birotică în special cea referitoare la:
citirea documentelor vizuale,
inspecția etichetelor pentru identificare,
instrumente de proiectare asistată pentru ingineri, arhitecți, etc.
c) imagistica aeriană și spațială – dezvoltată în special în domeniul meteorologic, al cartografiei și al explorărilor spațiale. În acest caz imaginile se caracterizează prin dimensiuni mari, informații multispectrale, tratările făcând apel la procedee de recalare geometrică precum și la metode de filtrare.
Câteva din domeniile urmărite se referă la:
descoperirea și interpretarea imaginilor astronomice (analiza stelelor duble, găuri negre, etc.),
analiza imaginilor terestre în vederea detecției depozitelor minerale, infestărilor cu insecte, eroziunii solului, etc.
d) imagistica militară – urmărește:
detecția, identificarea și urmărirea țintelor,
ghidarea proiectilelor,
recunoașterea fotografiilor, analiza și interpretarea scenelor, etc.
Acest domeniu necesită utilizarea de metode rapide adaptabile la o variație mare a parametrilor de intrare.
e) imagistica în telecomunicații – utilizează:
tehnici de compresie digitală a imaginilor și datelor cu facilități de transmitere a lor la distantă,
realizarea unor rețele de comunicație multimedia cu aplicații în telemedicină, telediagnoză, teleconsultanță, teleconferințe, etc.
f) imagistica biomedicală – se referă atât la cea microscopică cât și la cea macroscopică. Ea este strâns legată de calitatea imaginii de analizat. Imaginile sunt de cele mai multe ori mediocre în ceea ce privește contrastul, în comparație cu imaginile din domeniul industrial. Dimensiunea imaginilor este mică în comparație cu cele din domeniul aerian.
Imagistica biomedicală trebuie să țină cont de o dinamică mare a rezoluției fiind deseori necesară integrarea informațiilor de culoare.
1.3. Reprezentarea imaginilor digitale
Termenul de imagine monocromă se referă la funcția de intensitate bidimensională f(x,y), unde x și y reprezintă coordonatele spațiale ale unui punct din imagine numit pixel, iar f este funcția proporțională în fiecare punct care precizează intensitatea pixelului din imagine.
O imagine digitală este o imagine f(x,y) care a fost discretizată atât în coordonate spațiale cât și ca intensitate. Elementele unei asemenea rețele digitale sunt deci numiți pixeli. În spațiu elementul spațial de procesarea a imaginilor se numește voxel, v(x,y,z).
Prelucrarea digitală este mult facilitată dacă se folosesc matrici pătratice, iar numărul nivelelor de gri se alege ca putere intreagă a lui 2.
1.4. Etape ale procesării de imagini
Prelucrarea digitală a imaginilor presupune o succcesiune de etape de procesare hard și soft, precum și de implementare a unor metode teoretice.
Prima etapă a prelucrării este achiziția de imagine. După obținerea imaginii digitale urmează preprocesarea care constă în aplicarea unor algoritmi de îmbunătățire , curățare de zgomot și izolare a regiunilor a căror structură a pixelilor indică o asemănare cu informația alfanumerică avută în vedere. Etapa următoare constă în segmentarea imaginii , repectiv împărțirea ei în obiecte distincte (segmentarea este una dintre cele mai dificile etape în prelucrarea digitală de imagini datorită algoritmilor sofisticați).
Prima decizie ce trebuie luată este că, datele trebuie se fie reprezentate ca un contur sau ca o regiune completă. Reprezentarea ca și contur este justificată în cazul în care prelucrarea urmărește evidențierea caracteristicilor de formă (colțuri, inflexiuni ,etc.), pe când reprezentarea ca și regiune este mai potrivită când se urmărește studiul caracteristicilor interne ale regiunii. În unele aplicații, cele două tipuri de reprezentare coexistă, ca și în cazul recunoașterii de caractere, care necesită algoritmi bazați pe forma conturului precum și pe alte proprietăți interne ale regiunii analizate.
Descrierea sau selecția caracteristicilor reprezintă un proces care are ca rezultat o informație cantitativă sau caracterictici ce diferențiază o clasă de obiecte de altele.
Ultima etapă este recunoaștera și interpretarea datelor.
Recunoașterea datelor reprezintă procesul de clasificare a unui obiect într-o anumită categorie, pe baza informației rezultate (descriptorilor) în urma descrierii imaginii segmentate.
Interpretarea presupune găsirea unei anumite semnificații pentru un ansamblu de obiecte recunoscute. Ca exemplu recunoașterea unui caracter ( A ) necesită asocierea descriptorilor acestui caracter cu categoria „ A “.
1.5. Dipozitive de afișare
Dispozitivele de afișare monocrome folosesc în general convertoare digital/anlogic de 8 biți/pixel, generând semnalul video care comandă strălucirea pixelilor pe ecran. Pentru dispozitivele de afișare monocrome numărul nivelelor de gri este în acest caz de maxim 256.
Dispozitivele de afișare în culori folosesc în general un triplet de 8 biți pentu cele trei culori fundamentale, convertorul furnizând trei semnale prin care se controlează atât strălucirea cât și crominanța imaginii afișate.
Paleta de culori este un tabel cu tripleți RGB care specifică culoarea fiecărui pixel afișat.
Modelul RGB se poate reprezenta printr-un cub în 3D, R, G și B fiind colțurile fiecărei axe (Figura 1.11.).
Fig. 1.11. Cubul modelului RGB
Negrul (Black) este originea, iar albul (White) este vârful lui opus, scala nivelelor de gri reprezentându-se prin linia Black-White.
Într-o paletă de culori de 8 biți pe culoare, Roșu (Red) este reprezentat prin (255, 0, 0), iar în cubul de culori prin (1, 0, 0).
Tratarea RGB este costisitoare ca timp de calcul și spațiu de memorare, de aceea se pune problema ca ținând cont de caracteristicile percepției vizuale umane color bazată pe modelul HSI să se poată face o conversie într-un nou model. Ca și nou model folosit putem avea modelul YIQ, YUV sau YCbCr (între ele fiind diferențe de formă nesemnificative).
În cadrul acestor modele se folosește semnalul Y ca fiind semnalul de luminanță, fiind de fapt strălucirea pancromatică a unei imagini monocrome care urmează să fie afișată cu ajutorul unui tub monocrom (alb-negru).
Y combină semnalele R, G, B într-o proporție specifică senzitivității ochiului uman. Practic Y ne dă intensitatea nuanței de gri și se calculează prin:
Y = 0.299·R + 0.587·G + 0.114·B
Ecuația provine de la standardul NTSC care permite pe baza acestei relații calculul luminanței.
Uneori pentru anumite aplicații se folosește o pondere egală pe fiecare componentă și putem avea următoarea definiție:
Y = 0.333·R + 0.333·G + 0.333·B
Mărimile I și Q (respectiv U și V sau Cb, Cr) sunt componente ale semnalului color și sunt alese pentru compatibilitate cu echipamentele hardware de afișare.
I este în esență Red – Cyan și e dat de relația:
I = 0.596·R – 0.274·G – 0.322·B
Q este în esență Magenta – Green și e dat de relația:
Q = 0.211·R – 0.523·G + 0.312·B
U sau Cb corespunde aproximativ lui Green – Magenta fiind definite prin:
Cb = – 0.16874·R – 0.33126·G + 0.5·B
V sau Cr corespunde aproximativ lui Blue – Yellow, fiind definit prin:
Cr = 0.5·R – 0.41869·G – 0.08131·B
Conversia inversă de la YCbCr la RGB este dată de relațiile:
R = 1.0(Y + 1.402(Cr
G = 1.0(Y – 0.34414(Cb – 0.71414(Cr
B = 1.0(Y + 1.772(Cb
Modelele RGB, YIQ, YUV sau YCbCr sunt folosite din considerente hardware.
RGB este orientat spre senzorii pentru camerele TV și tuburile video de afișare, iar YIQ, YUV sau YCbCr sunt considerate datorită standardelor de televiziune care le-au impus. Sunt și alte modele de codare mai utile procesării de imagini care sunt mult mai legate de percepția vizuală umană.
Modelul CIE (Commision Internationale de l’Eclairage) este cel mai vechi standard pentru diagramele cromatice (Figura 1.12.).
Fig. 1.12. Diagrama cromatică CIE
În aceasta diagramă se definesc:
culorile vizibile în cadrul conturului extern închis, ele fiind complet saturate pe acest contur extern,
numerele, precizează lungimile de undă în nm,
triunghiul înscris reprezintă culorile care sunt tipice tuburilor video de afișare care folosesc mixajul RGB.
Spațiul color CMY (Cyan-Magenta-Yellow) este spațiul complementar lui RGB. CMY sunt cunoscute ca fiind culori substractive primare fiind definite pornind de la alb, de unde sunt substrase pentru a obține culoarea dorită:
C = 1.0 – R R = 1.0 – C
M = 1.0 – G G = 1.0 – M
Y = 1.0 – B și B = 1.0 – Y
caz în care culorile sunt normalizate, ele fiind între 0.0 și 1.0 . Într-un spațiu de 24 de biți color, C = 225 – R, celelalte valori determinându-se în același mod.
Modelul CMYK reprezintă un model folosit în procesul de tipărire și desktop publishing. El provine din modelul CMY la care se adugă negru (Black). Trecerea din CMY în CMYK se face prin:
K= min(C, M, Y)
C = C – K
M = M – K
Y = Y – K
Cum percepția color umană se poate descrie cu componentele nuanță de culoare (Hue), saturație (S) și claritatea culorii (Intensity Lightness Value) putem avea modelele color HSI, HSV, HSL. Aceste modele sunt foarte apropiate unul de altul.
Spațiul în care sunt plotate aceste 3 valori poate fi afisat ca un con sau dublu-con circular sau hexagonal (Figura 1.13.).
Figura 1.13. Reprezenarea bi-conică a spațiului HSI
(Nuanță de Culoare – Saturație – Intensitate)
În această reprezentare biconică a spațiului HSI, Intensitatea I (Grey) variază în lungul axei centrale. Distanța dintre axe ne dă S (Saturația) în timp ce direcția specifică H (nuanța de culoare).
Trecerea din spatiul RGB în HSI se face pe baza relațiilor:
Dacă B este mai mare decat G atunci:
H = 360o – H
Pentru conversia inversă din HSI în RGB, procesul depinde de sectorul în care este H.
2. Elemente privind procesarea de imagini
2.1. Caracteristicile sistemelor inteligente de analiză a imaginilor
Scopul analizei automate computerizate a imaginilor este de a oferi capabilităti asemănătoare cu cele umane.
Printre caracteristicile urmărite în vederea obținerii unor sisteme inteligente avem:
1. posibilitatea extragerii unor informații prelucrabile (pertinente) din detalii, în general irelevante,
2. posibilitatea de a invăța din exemple și de a generaliza cunoștințe astfel încât ele să poată fi folosite în circumstante noi și diferite,
3. posibilitatea de a efectua inferențe din informații incomplete.
2.2. Elemente de bază specifice sistemelor de analiză a imaginilor
2.2.1. Elemente introductive
Structura generală a unui sistem cu viziune artificială este dată în Figura 2.1.:
Etapele urmărite de către un sistem cu viziune artificială sunt:
Figura 2.1. Structura generală a unui sistem cu viziune artificială
a) achiziția imaginii, care duce la digitizarea imaginii într-o memorie de imagini,
b) pretratarea, prin metode de restaurare a imaginii și eliminarea zgomotelor și a defectelor de iluminare,
c) determinarea de caracteristici din imagine, prin extragere de atribute, determinare de primitive în vederea stabilirii unui procedeu de invățare pentru sistemul cu viziune,
d) descrierea simbolică și clasificarea, care pregătește interpretarea finală prin găsirea zonelor de interes cu ajutorul tehnicilor de segmentare a imaginii și eventual caracterizarea acestor zone de interes cu atribute sau descrieri structurale.
Pe baza acestor date se face o clasificare a zonelor de interes, care va fi validată de următoarea etapă,
e) interpretarea, prin care scena de analizat va fi înțeleasă, ceea ce implică cunoașterea domeniului de aplicabilitate.
În ultima perioadă, un lucru tot mai important de care trebuie să țină seama un sistem de analiză a imaginilor îl reprezintă transmiterea datelor și a imaginilor.
2.2.2. Transmisia datelor și imaginilor digitale
Pentru a realiza o transmisie de date la distanță cu ajutorul sistemelor de calcul, datele trebuie codificate într-o formă adecvată atât sistemelor de calcul, cât și dispozitivelor prin care acestea sunt transmise. Sistemele de calcul înmagazinează datele ca semnale digitale exprimate în biți, în timp ce dispozitivele de comunicare utilizează semnale analogice care sunt exprimate sub forma unor frecvențe.
2.3. Caracteristicile de bază ale analizei imaginilor
Analiza imaginilor constă din utilizarea informațiilor bidimensionale sau tridimensionale de la un captor vizual, utilizând tratări numerice, cu ajutorul calculatoarelor în procesul de analiză.
Patru factori au influentat în mod decisiv dezvoltarea unor sisteme de analiză a imaginilor de cost redus:
larga disponibilitate a unor sisteme de calcul relativ ieftine (compatibile IBM PC sau Macintosh) cu posibilități de calcul și memorare ridicate precum și cu posibilități de interfațare la dispozitive de stocare a imaginilor de tip frame-grabber sau plăci multimedia
dezvoltarea unor circuite integrate care permit o conversie a semnalelor video de înaltă calitate și la o rată de transfer ridicată
creșterea calitătii dispozitivelor de achiziție de imagini combinată cu reducea prețurilor de vânzare
disponibilitatea atât hardware, cât și software pentru calculatoare compatibile IBM PC sau Macintosh, a unor plăci de achiziție de imagini precum și a unor programe aplicative sau biblioteci de funcții (clase) la un preț din ce în ce mai redus și cu posibilități de calcul din ce în ce mai mari.
2.3.1. Achiziția și păstrarea imaginilor
Prin digitizare, scena din realitate este convertită într-o imagine compusă din unități digitizate (pixeli în cadrul spațiului 2D, voxeli în spațiul 3D) cărora în general le este asociată o valoare, valoarea de gri, cuprinsă uzual între 0 și 255, reprezentând intensitatea spotului luminos convertit.
Scena reprezintă acea zona "vazută" de către captor formată dintr-o mulțime de obiecte fizice într-o zonă a mediului, iar imaginea reprezintă în general o matrice de pixeli stocată într-o memorie de imagini care urmează a fi prelucrată de către un sistem de calcul, reprezentind proiecția scenei pe un plan bidimensional.
2.3.1.1. Camerele video și achiziția imaginilor
Prima diferență importantă între vederea umană și imaginea analizată de sistemul de calcul este modul în care se achiziționează imaginea. Cei mai obișnuiți senzori utilizați pentru captat imagini sunt camera video si scanerul.
Pentru a putea procesa o imagine, ea trebuie trecută în calculator într-o formă digitală. Pentru a digitiza imaginile analogice ele trebuie eșantionate și cuantizate.
Eșantionarea presupune procesul de captură de eșantioane din semnalul analogic, adică preluarea punctelor de informație aflate la diferite distanțe unele de altele.
Cuantizarea reprezintă procesul asignării unei valori binare pentru fiecarea valoare eșantionată.
Camerele de achiziție a imaginilor pot fi împărțite în:
a) Camere standard, care utilizează cipuri care au o mulțime de senzori pentru pixeli (elemente de imagine) – 500.000 senzori /cmp. Senzorii funcționează ca numărători de fotoni, astfel că semnalul sumat și amplificat de la fiecare linie a acestor senzori produce un voltaj analog.
b) Camere cu vidicon (camere de tip vechi cu tub) de vacuum sunt camere mai ieftine și servesc ca prototip de comparație cu camerele solide, iar principiul de funcționare este cel al fotoconductibilității.
c) Camere digitale. Majoritatea încă nu sunt potrivite pentru aplicații tehnice datorită unor limitări de optică și a rezoluției limitate, datorită faptului că folosesc compresii de tip JPEG ceea ce produce pierderi. Sunt unele camere mai avansate care nu pierd prin compresie și acestea s-ar preta la aplicații tehnice. Camerele utilizate în domeniul tehnic nu au facilități de comprimare, ele folosind sistem optic flexibil și asigurând o rezoluție înaltă.
Există trei tipuri principale de camere digitale în acest moment:
– cu cip monocrom; se pot realiza capturi color dacă se folosesc trei filtre RGB și trei secvențe de imagini
– cu scanare liniară; au rezoluție mare și timp îndelungat de scanare, sunt folositoare doar pentru imagini statice
– care utilizează cipuri de megapixel de proveniență RGB. O cameră de aceast tip este lentă, direct legată la interfețele SCSI ale sistemelor de calcul, nu realizeză compresii, posibilități mari de depozitare a imaginilor; încă sunt foarte costisitoare.
Tendința actuală este de a îmbunătăți camerele standard prin îmbunătățirea continuă a rezoluției spațiale (numărul senzorilor individuali), uniformitatea realizării lor și reducerea costurilor acestor camere. Rămâne de văzut în ce măsura HDTV (High Definition TeleVision – televiziune de înaltă rezoluție), va aduce îmbunătățiri remarcabile camerelor video în viitorul apropiat.
Indiferent de camera ce se poate folosi pentru achiziția de imagini este important ca sistemul optic al camerei să focalizeze corect pentru a captura detalii fine ale imaginii. Există camere care realizează acest lucru automat – sisteme de microscopie automată sau unele sisteme de urmărire (ex. de trafic).
Scanerele se pot clasifica în:
– reflective, cele care măsoară lumina reflectată de sursa originală
– transmisive, cele care masoară lumina transmisa de sursă.
Aceste scanere pot scana imagini:
– alb-negru
– color, folosind diferite tehnici. Se preferă în general întâi o prescanare și apoi o sanare finală. În domeniul razelor X se folosec scanere SEM, Scanning Electron Microscope.
Plăcile de achiziție a imaginilor sunt dispozitive intercalate între camerele video și sistemul de calcul. Ele pot fi de tip frame-grabber, sau mai nou plăcile multimedia de cost relativ scăzut pot indeplini rolul acestor plăci de achizitie. Aceste plăci de achiziție au ajuns astăzi la performanțe deosebite atât ca viteză de achiziție, ca rezoluție dar și ca posibilitați de a prelucra într-o oarecare masură imaginea capturată.
Tendinta actuală pe piața plăcilor de achiziție este de a realiza plăci extrem de performante cu soft de analiză și prelucrări de imagine care sunt utilizate mai ales în scopuri profesionale.
2.3.1.2. Stocarea imaginilor digitale
Când se lucrează cu un sistem de analiză computerizată a imaginilor acestea trebuie salvate pe disc sub formă de fișiere care sunt oarecum asemănătoare cu celelalte tipuri de fișiere, (text, programe, etc… dar din anumite motive, fișierele cu imagini digitale trebuie să fie considerate distincte din anumite puncte de vedere:
Fișierele de imagine sunt de obicei mari. O singură imagine de 640×480 pixeli monocrom ocupa aproximativ 300 KB în timp ce o imagine color necesita aproximativ 1 MB. Imaginile în 3D sunt mult mai mari (de exemplu 500 x 500 x 500 imagine de reconstructie tomografică 3D ocupă aproximativ 125 MB), deci se necesită o mare capacitate de stocare. O serie de imagini ce duc la o secvență animată
2.3.1.3. Memorarea imaginilor
O imagine digitală pe 8 biti de dimensiuni 1024 x 1024 pixeli necesită 106 biți, adică un spațiu foarte mare, de aceea memoria ocupă un loc important în sistemele de prelucrare de imagini.
Pentru aplicații de prelucrare de imagini se poate realiza:
– memorare pe termen scurt, necesară procesării propiu-zise
– memorarea on-line, necesară pentru accesare rapidă
– memorarea în vederea arhivării, în care accesul la imagine este mai puțin frecvent
Memoria pe termen scurt este memoria de lucru a calculatorului (RAM) sau mai există anumite plăci de memorie specializate numite “memorii cadru” (frame buffers) care permit memorarea unuia sau mai multor cadre la care accesul este foarte rapid, adică în timp real (25 cadre / s)
Memoria „on-line” se face de obicei cu discuri magnetice, discurile Winchester care au viteza de acces bună și reprezintă un suport bun de memorare dar încă scump și are restricții ca mărime.
Memoria de arhivare se caracterizează prin capacităti foarte mari de memorare necesare dar cu accesare mai puțin frecventă. Acestea sunt discurile optice și benzile magnetice. CD-ROM-ul este o modalitate ieftină de stocare și de aceea CD-urile reprezintă modalitatea cea mai frecventă de a avea la dispoziție bilioteci de imagini. Există CD-uri de inaltă densitate (DVD – Digital Video Disks) care ofera stocarea unei cantitati mai mari de informație pe același format.
Discurile optice (WORM – drives = write once read many) oferă mai multe posibilități ca CD-ROM-ul, oferindu-ne atăt arhivarea și stocarea imaginilor cât și accesul acestora prin citire / scriere. Acestea sunt utile mai ales în medicină dar și în alte domenii în care imaginile trebuie stocate în mod permanent acestea avand o capacitate mare, în medie de aproximativ 1GB/disc.
Floppy discurile sunt de capacitate redusă și astăzi sunt mai puțin utilizate pentru transportul și stocarea unui număr extrem de mic de imagini (una singură), cu capacităti între 1.4 și 20MB acestea din urmă fiind denumite floptical disc deoarece au nevoie de o unitate prevazuta cu senzor optic necesar pentru citirea informației.
Discurile de mare capacitate (ZIP-drive), cu o capacitate în medie de 100MB, sunt astăzi competitive ca preț și performanță cu discurile optice, având o viteză de acces sub cea a hard-discurilor dar sunt mult mai rapide decât CD-urile.
Benzile magnetice sunt extrem de lente, dar au capacitate mare de stocare.
La alegerea mediului de stocare a imaginilor trebuie avut în vedere volumul de imagini care va fi stocat, scopul utilizarii acestor imagini (viteza de acces ) prețul de cost al stocarii.
2.3.1.4. Formate de imagine
Tentația de a realiza un format de imagine propriu este foarte mare, mai ales în cazul firmelor de marcă care doresc sa-și impună standardele, ajungându-se astfel la multe formate de imagine diferite. Acestea pot fi apreciate după mai multe criterii cum ar fi, gradul de compresie pe care îl realizează și timpul necesar împachetării și despachetării acestora. Cele mai importante formate din aceasta categorie sunt: PCX, BMP, IMG, TARGA, IBM, TIFF, GIF, WPG, JPEG, PIC, CDR, PCD, etc.
O imagine este un tablou bidimensional de pixeli, denumit adesea rastru (raster). Fiecare linie orizontală este numită linie de scanare, sau linie de rastru. În calculator, culoarea fiecărui pixel este reprezentată printr-una din următoarele metode:
– dacă imaginea este monocromă, culoarea fiecărui pixel este exprimată printr-o valoare de 1 bit – 1 – 0.
– pentru o imagine True Color, culoarea fiecarui pixel este exprimată în termenii intensităților de roșu (R), verde (G) și albastru (B) care creează culoarea. De obicei, fiecare componentă a unei culori este reprezentată pe un octet, astfel există 256 de nivele pentru fiecare componenta de culoare. Aceasta abordare necesită trei octeți pentru fiecare pixel și permite până la 256 x 256 x 256 = 16777216 sau 16 milioane de combinații distincte ale valorilor RGB (culori).
– pentru o imagine bazată pe o paletă de culori, valoarea fiecarui pixel este interpretată ca un index într-un tabel cu valori RGB cunoscut sub numele de paletă de culori, sau hartă de culori (Colormap). Pentru fiecare pixel se afiseză valoarea RGB corespunzătoare conținutului acelui pixel. Numărul de biți necesari pentru stocarea valorii fiecărui pixel depinde de numărul de culori din paletă. Dimensiunile obișnuite ale paletelor de culori sunt 16 (necesită 4 biți pe pixel) și 256 (necesită 8 biți pe pixel).
Caracteristici comune ale fișierelor de imagine
Pentru a vă asigura că puteți citi, interpreta și afișa o imagine stocată electronic, imaginea trebuie să conțină cel puțin următoarele informații:
– dimensiunile imaginii – lățimea și înălțimea
– numărul de biți pe pixel
– tipul imaginii – dacă valorile pixelilor trebuie interpretate ca fiind culori RGB sau elemente într-o paletă de culori
– paleta de culori – dacă imaginea folosește vreuna
– datele imaginii, care reprezintă tabloul cu valorile pixelilor
Aproape toate fișierele imagine (vezi Figura 2.2. ) conțin acest set de informații, dar fiecare format specific de fișier organizează aceste informații într-un alt mod.
Figura 2.2. Format tipic de fișier imagine
Această figură reprezintă structura unui fișier imagine tipică. Fișierul începe cu un scurt antet – având de la câțiva pâna la 128 sau chiar mai mulți octeți. Urmează apoi o paletă de culori dacă valorile pixelilor din imagine folosesc paleta de culori. Datele imaginii – tabloul cu valorile pixelilor – apar după paleta de culori. De obicei tabloul de pixeli este stocat linie cu linie. Tabloul de pixeli ocupă cea mai mare parte a fișierului imagine. De exemplu, o imagine de dimensiune 640 x 480 pixeli cu 256 culori necesită 640 x 480 = 307200 octeți pentru stocare, deoarece valoarea fiecarui pixel ocupă un octet. Desigur, spațiul de stocare necesar pentru datele imaginii poate fi redus recurgând la compresia datelor, fie printr-un algoritm de codare pe baza lungimii, fie cu alte scheme de compresie.
Cu toate că multe fișiere imagine au un aspect similar celui prezentat anterior este loc pentru mai multe variații:
– ordinea informațiilor din antet poate să difere de la un format de fișier la altul.
– formatele dependente de ecran sar peste întreaga paleta de culori și stochează numai tabloul de pixeli.
– tabloul de pixeli poate fi stocat de sus în jos sau de jos în sus.
– dacă valorile pixelilor sunt componente RGB, ordinea roșu, verde, albastru poate fi modificată.
– valorile pixelilor pot fi stocate în format împachetat sau ca planuri de biți. În formatul împachetat, toți biții aparținând unui pixel sunt stocați unul după altul. Când imaginea este stocată pe planuri de biți, biții pentru fiecare pixel sunt separați conform poziției bitului, cei mai puțin semnificativi biți ai tuturor pixelilor sunt stocati linie cu linie, apoi se trece la biții următoarei poziții de bit și asa mai departe.
– valorile pixelilor pot fi stocate într-un format comprimat
Formate uzuale pentru fișiere imagine
Există mai multe metode de stocare a unei imagini într-un fisier, acesta fiind motivul pentru care veți găsi atât de multe tipuri diferite de formate pentru fișiere imagine. Iată câteva dintre cele mai populare formate de fișiere imagine:
Formatul PCX, folosit la început de programul Paint Brush al companiei Zsoft, este un format pentru fișiere imagine pe care-l suportă multe programe de desenare si scanere. Fișierele PCX folosesc o schemă de codare pe baza lungimii (Run-Length-Encoding – RLE) pentru a stoca imaginea într-o formă comprimată.
Formatul BMP Windows sau DIB (un format introdus de Microsoft Windows 3.0) stochează imaginea ca pe o hartă de biți independentă de dispozitiv. Formatul DIB include o paletă de culori și stochează datele imaginii într-o manieră standard pentru a face fișierul imagine independent de dispozitiv. Formatul Windows BMP poate stoca imagini folosind 1 (monocrom), 4 (16 culori), 8 (256 culori) sau 24 (16 milioane de culori) de biți pe pixeli. Formatul BMP nu este la fel de eficient ca PCX și alte formate, dar interpretarea fișierelor BMP este relativ ușoară.
Formatul pe 24 de biți Truevision Targa provine de la adaptoarele de ecran de înaltă performanță pentru PC-uri Truevision. Există câteva tipuri diferite de fișiere Targa. Cea mai populară este versiunea cu 24 de biți pe pixel care foloseste 8 biți pentru fiecare dintre componentele R, G și B. Acest format poate stoca fișiere imagine cu pâna la 16 milioane de culori. Totuși, dimensiunea fișierului pentru o imagine pe 24 de biți este foarte mare – o imagine 640 x 480 pe 24 de biti necesită 3 x 640 x 480 = 921600 octeți, adică aproximativ un 1Mb.
TIFF, sau Tagged Image File Format a fost dezvoltat în colaborare de Microsoft Corporation și Aldus Corporation ca un format flexibil, independent de sistem, pentru stocarea de imagini monocrome pâna la imagini cu culori pe 24 de biți. Multe programe de tehnoredactare computerizată și procesoare de texte pot citi și folosi imagini TIFF. În plus, toate scannerele dispun de programe de control care pot salva imagini în formatul TIFF.
GIF sau Graphics Interchange Format a fost dezvoltat de CompuServe pentru stocarea într-o formă compactă a imaginilor cu până la 256 de culori. Fișierele GIF stochează imagini folosind schema de compresie LZW (denumită astfel după autorii ei, Lempel-Ziv-Welsh).
JPEG (Join Photographers Expert Group) este cel mai utilizat format de imagine în rețeaua Internet. Este un format comprimat de imagine ceea ce îi conferă avantaje extrem de mari în comparatie cu celelalte formate de imagine.
2.3.1.5. Metode de compresie a imaginilor
Metodele de compresie ale imaginilor facilitează comunicarea rapidă între diferite sisteme pe baza imaginilor, precum și stocarea lor în vederea unei utilizări ulterioare. În ultimii ani s-a trecut la standardizarea procesului de compresie a imaginilor în vederea utilizării imaginilor în diverse aplicații de prelucrări de imagini.
Prin rata de comopresie, Cr întelegem raportul dintre cantitatea inițială de date necompresate și cantitatea de date compresată.
Există metode de compresie a imaginilor care conduc la degradarea informațiilor în momentul decompresiei lor, funcție de gradul de compresie ales (lossy compression). Aceste metode duc la pierderea informațiilor neesențiale și redundante. Ratele de compresie sunt relativ mari necesitând însă algoritmi mai complicați și mai multe calcule. Aceste metode pot fi folosite la imagini care urmează doar să fie vizualizate, omul nesesizând pierderile.
Există și metode de compresie a imaginilor, metode care nu duc la degradarea informațiilor (lossles compresion) prin refacerea lor prin decomprimare, însă eficiența acestor metode este relativ scăzută fiind tot mai puțin folosite. Un sistem care suportă compresia datelor trebuie sa conțină in configurația sa un codor și un decodor (Figura 2.3.).
Figura 2.3. Sistem care suportă compresia datelor
Cele mai importante trei standarde de compresie de imagini (care s-au impus în mod deosebit în acest moment în domeniul compresiilor de date) sunt:
– JPEG (Join Photographic Experts Group), utilizat în cazul imaginilor statice. Codorul JPEG convertește imaginea într-o reprezentare de frecvență spațială folosind o transformare DCT (Discret Cosine Transform) 2D.
– MPEG (Moving Pictures Expert Group), utilizat în cadrul imaginilor în mișcare, cu diverse variante care s-au dezvoltat în ultimii ani. Codorul MPEG este mult mai complex decât codorul JPEG. Acest codor caută să facă o predicție asupra evoluției unei imagini, printr-un estimator de mișcare, transformând și codificând apoi diferența între imaginea prevazută și imaginea în sine. Predicția imaginilor poate fi facută pe bază imaginilor viitoare precum și pe baza celor trecute. Astfel codorul trebuie să reordoneze imaginile punând imaginea de referință înaintea celor prevăzute. Decodorul pune imaginile înapoi într-o ordine de afișare corectă.
– P*64 , reprezintă standardul CCITT H.261, ca și codor/decodor în videotelefonie. Codorul P*64 codifică de asemenea imagini prevăzute a fi eronate, dar care trebuie să le ia așa cum vin. Poate alege între o imagine curentă și una prevazută cu ajutorul unui sistem " block-by-block". Predicția codorului este bazată în mod normal pe același bloc al imaginii precedente, codorul putând include ca și optiuni un estimator de mișcare, precum și un filtru.
Alte considerente referitor la compresia imaginilor
Compresia este necesară stocarii și transmisiei imaginilor deoarece reduce mărimea lor. Stocarea este esențială în mai multe domenii, unul important fiind tehnica video digitală, în timp ce transmisia de imagini se întâlnește în rețelele de telecomunicații , teleconferințe, etc.
Există mai multe criterii după care metodele de compresie pot fi judecate, și anume:
– timpul necesar comprimării/decomprimării – acest criteriu este important mai ales în transmisiile în timp real, cum ar fi videoconferințele
– gradul de conservare al imaginii
– costurile impuse de algoritmii aleși și resursele de calcul
– standardul de compresie utilizat, dacă este sau nu universal pentru a putea fi utilizat și de către alții.
Metodele de compresie
Metodele de compresie sau codare a imaginilor se împart în două categorii:
– codarea predictivă
– codarea prin transformări.
Codarea predictivă exploatează redundanță existentă în imagine, în vreme ce codarea prin transformări realizează modificarea structurii de date a imaginii într-o altă matrice, astfel că o mare cantitate de informații este impachetată într-un număr mai mic de eșantioane.
Există algoritmi care combină aceste categorii. În primul caz este vorba, mai bine zis, de o codificare decât o compresie și permite reconstructia imaginii inițiale. Această codificare este utilizată mai ales în transmisiile de imagini. Se bazează pe asemănarea (diferența) dintre pixelii unei imagini astfel ca se folosesc un număr mai mic de biți per pixel pentru a memora ceea ce au comun acești pixeli. Viitoarea abordare a compresiei de imagini este de a utiliza algoritmi predictivi, care examinând mai mulți pixeli precedenți anticipează și stochează diferențele dintre aceștia.
RLE (Run Length Encoding) este una din metodele cele mai simple de compresie fiind folosită în cazul în care avem date care se repetă (zone din imagine care au aceeași valore a pixelilor). Astfel, secvența de caractere:
AAAABBBBBCCCCCCCCDEEEE
devine
4A5B8C1D4E
și deci, în acest caz:
Cr = = 2.2
În cazul în care zona care urmează a fi codată nu este repetitivă, metoda este foarte ineficientă putând duce chiar la factori de compresie subunitari. De aceea metoda RLE va păstra aceste zone nemodificate și deci necodate, urmând a fi codate doar zonele repetitive, lucru ce va fi precizat printr-un caracter special. Astfel secvența:
ABCDDDDDDDDEEEEEEEEE
ar deveni
ABC+8D+9E
Formatul PCX folosește metoda RLE de compresie pe planele separate ale imaginii. Metoda se pretează imaginilor specifice desenelor animate și nu imaginilor naturale.
Standardul JPEG (Join Photographers Expert Group) reprezintă efortul colaborării între CCITT (International Telegraph and Telephone Consultative Committee) și ISO (International Standard Organization).
Acest standard definește trei sisteme diferite de codare:
– un sistem de codare de bază cu pierderi, care este bazat pe transformata DCT și este adecvat pentru o gamă largă de aplicații,
– un sistem de codare extinsă pentru aplicațiile de precizie înaltă sau reconstrucție progresivă; fără pierderi,
– un sistem de codare cu pierderi mai mici pentru conversia reversibilă.
Modul de compresie progresiv JPEG se obține prin realizarea unui set de subimagini și fiecare subimagine va fi codată cu un set specific de coeficienți DCT. Compresia progresivă JPEG poate fi obținută folosind trei tipuri de algoritmi: un algoritm progresiv de selecție spectrală, un algoritm progresiv de aproximări succesive și un algoritm progresiv combinat.
Standardul JPEG permite și folosirea unor algoritmi de compresie fără pierderi, respectiv un algoritm de compresie predictivă în locul transformării DCT.
Compresia ierarhică JPEG permite o reprezentare progresivă a imaginii decodate, într-un mod similar cu algoritmul progresiv, dar permite în plus față de acesta imagini codate cu rezoluții multiple. JPEG nu specifică un format de fișier fiind considerat doar printr-un flux de biți. Sunt mai multe formate de imagini care memorează imagini JPEG cele mai folosite fiind JFIF si JPEG pentru TIFF 6.0.
Standardul H.261 este dezvoltat pentru aplicații de telecomunicații video. Deoarece acestea sunt în general aplicații care nu implică modificări importante ale conținutului cadrelor succesive datorate mișcării obiectelor din imagine, algoritmul folosit limiteză strategiile de căutare și estimare a mișcării, în scopul obținerii unei rate de compresie cât mai ridicate. Folosind acest standard se pot atinge rate de compresie între 100:1 și 2000:1.
Compresia fractalică, este o metodă diferită de compresie prin care se memorează instrucțiuni sau formule de creare a imaginilor. De aceea metoda este independentă de rezoluție, imaginile putând fi scalate la o rezoluție mai mare decât imaginea originală.
Fractalii sunt imagini compuse din imagini mai mici. Metoda permite rate de compresie de peste 100 fiind considerată o metodă asimetrică.
Compresia Wavelet, se aseamană cu cea DCT, care însă este limitată la utilizarea funcției cosinus. Wavelet folosește funcții mai simple, complexitatea calculelor scazând astfel fără însă a sacrifica major calitatea imaginii obținute.
Compresia holografică este o nouă metodă care se bazează pe o reprezentare frecvențială 3D a imaginilor. Metoda este în curs de elaborare; rezultatele pe care le ofera par să fie spectaculos de bune.
Standardul de compresie MPEG (Motion Picture Experts Group) a fost propus pentru aplicații video care se caracterizează prin modificări importante între două cadre succesive, datorate mișcării obiectelor din imagine. Metoda de compresie utilizează un algoritm de codare intercadre și poate realiza o compresie de pâna la 200:1 prin memorarea numai a diferențelor dintre cadre succesive. Totodată standardul MPEG prevede și compresia unui canal audio cu rata de 5:1 pâna la 10:1.
Se bazează pe similitudinea unor blocuri de pixeli al unor imagini succesive transmițând doar 2 frame-uri pe secundă, restul fiind informație codificată ca diferența dintre frame-uri prin așa numitele keyframe-uri.
2.3.2. Analiza modulului de ameliorare a imaginilor
Modulul de ameliorare (preprocesare) a imaginii urmărește restaurarea imaginii numerice degradate de diverși factori cum ar fi: zgomote, defecte de iluminare, miscarea sau defocalizarea imaginii, etc.
Preprocesarea imaginii se efectuează înaintea operației de analiză efectivă a ei. Preprocesarea imaginilor are ca scop eliminarea erorilor apărute în cursul procesului de achiziție, erori cauzate de procesul de conversie a semnalului video analogic în semnal digital sau datorate paraziților induși aleator pe calea de achiziție a semnalului analogic.
2.3.2.1. Restaurarea imaginilor digitale
Corectarea (restaurarea) imaginilor digitale se referă la înlăturarea sau minimizarea degradării cunoscute într-o imagine. Orice imagine achiziționată prin mijloace optice, electrono-optice sau electronice este degradată într-o anumită proporție. Degradarea se poate datora zgomotului, proastei focalizări a camerei, mișcării relative obiect-cameră, etc. Restaurarea se face prin filtrarea efectelor degradării.
Reducerea zgomotului unei imagini se poate realiza prin înlocuirea unui pixel cu media lui și a vecinilor lui pe o regiune variabilă și este cu atât mai eficientă cu cât regiunea este mai mare (filtru de mediere), insă cu atât imaginea apare mai incețoșată. Acesta metodă de a reduce zgomotul unei imagini îmbunătățește calitatea imaginii, însă se repercutează asupra rezoluției imaginii.
O alta metodă este cea a filtrului Olympic; pe o anumita zonă se elimină pixelii cu valori extreme ale intensității luminoase ale pixelilor vecini și pe urmă se face o medie a pixelilor rămași, însă rezultatele metodei nu sunt bune deoarece imaginea rămâne încețoșată și zgomotul nu este eliminat în totalitate.
Filtrul median este utilizat mai ales pentru a elimina zgomotul produs de pixeli care sunt distruși sau lipsesc din imagine, înlocuindu-i cu valoarea de mijloc (ca poziție) a pixelilor învecinați care sunt ordonați în funcție de intensitatea luminoasă.
Eliminarea zgomotelor se poate face apelând și la unii operatori ai morfologiei matematice.
Eroziunea și dilatarea nuantelor de gri, este o metodă de filtrare care utilizează minimul si maximul valorilor intensităților luminoase. Astfel, valoarea pixelului cu cea mai mare intensitate luminoasă în fiecare regiune este utilizată pentru a înlocui valorile originale ale pixelilor.
Entropia maximă poate fi utilizată și ea în procesul îmbunătățirii imaginilor. Imaginile conțin alte defecte cum ar fi încețosarea datorată mișcării obiectului sau focalizarea defectuoasă. În aceste conditii se vor aplica filtrele inverse. Acestea sunt utile pentru corectarea semnalului de intrare anticipând degradările cauzate de sistem.
Creșterea contrastului este operația prin care se imbunatateste vizibilitatea structurilor unei imagini. Pixelii intunecați din imagine devin negri, cei deschisi devin albi, iar cei gri din imaginea originală iau valori noi care sunt interpolate liniar între negru si alb. Resignarea valorilor pixelilor din imaginea originală crește contrastul vizual al pixelilor prezenți dar nu crește abilitatea de a discrimina variații subtile în nuanțele de gri.
2.3.2.2. Imbunătățirea imaginilor
Există metode care cresc vizibilitatea unei porțiuni a imaginii, a unui aspect sau a unei componente a imaginii, scopul fiind de accentuare a anumitor caracteristici (contrast, contururi), etc…(pentru analiza sau redarea acestora fără modificări de date din structura imaginilor). Avand în vedere utilitatea lor practică în toate aplicațiile legate de prelucrările de imagini, aceste metode sunt extrem de importante.
Din punctul de vedere al algoritmului utilizat pentru îmbunătățirea imaginii se disting patru categorii mari de tehnici de îmbunătățire:
Operațiuni punctuale: mărirea contrastului, atenuarea zgomotului, operațiuni de tip fereastră (transformări, pseudocolorări, etc…) și atenuarea imaginii prin histograme;
Operațiuni spațiale: filtarea de zgomot, filtrarea mediană, tehnica de “zooming” a imaginii, alte tipuri de filtrări;
Operațiuni de tranformare a imaginilor: filtrarea liniară, filtrarea de tip radical sau filtrarea homomorfică;
Operațiuni de pseudocolorare între care se disting tehnicile de colorare falsă și pseudocolorare a imaginilor, Look Up Table (LUT).
Compresia de contrast este necesară mai ales în cazul imaginilor cu contrast mic datorat iluminării slabe, această trasformare îmbunătățește vizibilitatea pixelilor de amplitudine mică față de pixelii de amplitudine mare.
Negativarea imaginilor sau inversarea acestora este utilizată mai ales în medicină, imaginile fiind mai ușor de interpretat.
Histogramele sunt reprezentarea frecvenței de apariție a diferitelor nivele de gri intr-o imagine. Egalizarea histogramelor modifică intensitatea luminoasă a pixelilor permitând astfel evidențierea unor detalii în anumite arii.
Amplificarea Laplaciană accentuează contururile mai ales cele liniare, permitând interpretatea mai ușoară a imaginilor.
Scăderea imaginilor este utilă când este necesară compararea a două imagini complexe cu elemente având însă deosebiri relativ mici între ele.
În ceea ce privește mărirea și interpolarea imaginilor (zoom-ul) există două modălități: dublarea imaginii și interpolarea liniară. În cazul dublării imaginii fiecare pixel de-a lungul unei linii și fiecare linie este repetată, iar interpolarea liniară este o multiplicare a imaginii la care pixelii care se intercaleaza sunt media aritmetică a pixelilor vecini din imaginea originală. Această transformare este necesară pentru a vizualiza și măsura anumite detalii din imagine.
2.3.2.3. Operații specifice modulului de ameliorare a imaginilor
O primă metodă specifică preprocesării de imagini o constituie corecția optică. Ea urmărește:
– păstrarea în timp a nivelului de gri al obiectului de analizat în condiții de achiziții multiple de imagini,
– eliminarea imperfecțiunilor sistemului optic,
– accentuarea contrastului în imaginea achiziționată.
O metodă utilizată în preprocesarea imaginii o reprezintă modificarea histogramei. Defectele de iluminare se manifestă deseori printr-o distributie neregulată a nivelelor de gri din imagine. Această anomalie poate fi ușor detectată prin analiza histogramei imaginii. Histograma reprezintă funcția care asociază la fiecare nivel de gri din imagine un anumit număr de pixeli având acest nivel de gri. O imagine bine iluminată are o histogramă într-o plaja largă de valori. Eliminarea defectelor de iluminare poate fi efectuată printr-o redistribuție a nivelurilor de gri. Egalizarea histogramei asigură o distribuție uniformă a nivelelor de gri din imagine.
O altă metodă specifică preprocesării imaginilor o constituie normalizarea ei.
În cazul în care iluminarea este necoresponzătoare ca intensitate, semnalul înregistrat va avea o plajă mică de variație pe scara nivelelor de gri. Acest fapt îngreunează prelucrările ulterioare în detecția contururilor. Extinderea plajei nivelelor de gri nu va compensa în întregime pierderea de informație dar va avea ca efect o îmbunătățire a contrastului. Pentru realizarea acesteia se construiește histograma imaginii din care rezultă extinderea plajei nivelelor de gri. Se baleiază apoi imaginea și fiecare punct al acesteia este deplasat spre negru cu valoarea minimă a nivelului de gri. Această valoare se înmulteste apoi cu câtul dintre valoarea maximă a nivelului de gri (cazul în care plaja nivelelor de gri ocupă toate valorile posibile) și diferența dată de extinderea nivelelor de gri din imagine.
O altă metodă utilizată în preprocesarea imaginii o reprezintă netezirea (filtrarea) imaginilor.
La achiziția oricăror semnale de frecvență înaltă peste semnalul dat apare o componentă de zgomot. Acest zgomot dacă nu este înlăturat, poate influența negativ analizele ulterioare.
În cazul analizei imaginilor un accent important s-a pus pe găsirea unui filtru care să înlăture zgomotul alb (datorat componentelor aleatoare de înaltă frecvență a semnalului video digitizat). Aceste zgomote apar în câmpul imaginii sub forma unor pixeli izolați cu nuanțe mult diferite de nuanța pixelilor înconjurători și poartă numele de zgomot sare și piper.
De remarcat că pierderea frecvențelor înalte din imagine poate duce și la pierderea unor detalii semnificative pentru procesul de recunoaștere. De aici rezultă că alegerea filtrului este deosebit de importantă.
Netezirea imaginilor poate fi realizată cu:
1. filtre spatiale liniare – aceste filtre se caracterizează prin răspunsul lor impulsional h(m,n) caz în care filtrarea unei imagini f(i,j) se obține prin convoluție discretă:
Dacă limitele m si n sunt finite, filtrul este cu răspuns impulsional finit (RIF), în caz contrar avem filtre cu răspuns impulsional infinit (RII). Cele mai utilizate filtre sunt de tip RIF, de dimensiune redusă (3 x 3) din cauza procesoarelor de convoluție specializate.
Printre filtrele spațiale liniare amintesc:
a) filtrul de mediere, caz în care masca h(3,3) este:
,
fiind un filtru trece jos.
Aceste filtre elimină zgomotele din imagine, fiind eficace în cazul regiunilor uniforme. Ele deteriorează marginile contururilor, efectul lor fiind o ușoara defocalizare a imaginii ce poate fi corectată prin deconvolutie.
b) filtre trece sus, se pot constitui din două filtre liniare a caror ieșire reprezintă estimarea gradientului din imagine.
Amplitudinea gradientului poate fi estimata cu:
sau
g = max ( |gx | , |gy | )
Orientarea după care variația intensității este maximă este dată de:
In cazul discret avem :
Dx f(x,y) = gx = f(x,y) – f(x-1,y)
Dy f(x,y) = gy = f(x,y) – f(x,y-1)
Derivata funcției imagine fată de o direcție a, este dată de:
Da f(x,y) = gx cos a + gy sin a
Operatorul Laplace, este un operator derivativ de ordin par, cu rol de accentuare izotropică. Se definește ca :
În cazul discret derivatele parțiale de ordinul al doilea pe direcțiile x și y, sunt aproximate prin relațiile:
Nucleul de convoluție este o singură matrice de 3 x 3 care poate fi:
Pentru mărirea preciziei se lucrează cu un nucleu de convoluție de forma:
,
care sintetizează media laplacianului corespunzător axelor originale, cu laplacianul unui sistem de axe ortogonale rotite cu 45o față de axele originale, sau cu matricea:
Imaginea accentuata va fi | 2 f(x,y) | .
2. filtre spațiale neliniare
Aceste filtre se constituie ca o multitudine de metode care depind în general de aplicația utilizată. Unul dintre aceste filtre îl constituie filtrul median.
Filtrul median înlocuiește valoarea fiecărui punct al imaginii cu valoarea mediană a tuturor pixelilor din vecinătatea punctului ales. Rezultatele sunt foarte bune, însa costul e destul de mare din cauza necesității sortării în fiecare punct. Filtrul elimină zgomotele izolate din regiunile uniforme, păstrând tranzițiile dintre regiuni.
3. filtrarea temporală a imaginilor
Acest tip de filtru reușește să păstreze detaliile fine din imagine fără a deteriora informația utilă din imagine.
Metoda constă în preluarea mai multor cadre ale aceleiași scene de analizat și medierea rezultatelor. Deși îmbunătățirea este spectaculoasă, ea este aplicabilă doar în cazul unor scene statice și necesită un timp destul de mare afectat doar procesului de achiziție.
2.3.3. Modulul de segmentare a imaginilor
Etapa de separare respectiv detectare a corpurilor din câmpul imaginii are ca efect o reducere importantă a volumului informațiilor prin definirea indicilor de imagine care posedă o semnificatie. Distincția dintre fond și obiect, numită segmentare, poate fi făcută prin punerea în evidență a zonelor de variație rapidă a intensității luminoase.
În cazul unei imagini de intensitate, procesul de segmentare depinde de geometria obiectelor, reflectanța suprafeței vizibile, iluminarea scenei și originea captorului.
Segmentarea se poate face în mai multe moduri:
– Binarizare – o segmentare care împarte imaginea în două clase, obiect și non-obiect.
– Extragere de contur – segmentarea care împarte imaginea în zone de contur și non-contur.
Conturul reprezintă zone din imagine a căror valoare a pixelilor variază într-un mod brusc. Conturul fizic este reprezentat în general prin linii de discontinuitate a suprafeței, margini tangențiale ale suprafeței, limitele umbrelor sau reflecțiilor sau linii de discontinuitate date de reflectanța diferită a unor zone.
Pornind de la conturul fizic, conturul unei imagini este dat în general printr-o aproximare prin segmente de dreaptă care pot fi considerate indici de imagine.
– Extragere de regiuni – o segmentare care detectează regiunile din imagine, ca indici de imagine.
Regiunile reprezintă zone omogene ale imaginii tinând cont de un anumit criteriu cum ar fi, nivelul de gri, culoare, textură, etc.
Formarea regiunilor poate fi facută printr-un procedeu bazat pe aplicarea pragurilor deduse din histograma imaginii sau prin metode mai complicate cum ar fi cele bazate pe aproximare funcțională.
În cazul segmentării bazate pe intensitate, deseori apar detectate regiuni false. Apariția regiunilor false este dată în general de zgomotul de înaltă frecvență și de tranzitia netedă între regiuni uniforme. Rafinarea regiunilor poate fi făcută în mod interactiv sau automat.
Principiile generale ale segmentării se referă la faptul ca obiectul de interes poate fi găsit prin descoperirea zonelor unde valorile pixelilor sunt omogene și în cazul în care obiectele nu diferă apreciabil față de vecini trebuie să ne bazăm pe detecția de muchii.
2.3.4. Modulul de analiză și interpretare a imaginilor
Analiza și interpretarea imaginilor grupează două tehnici principale și fundamentale de abordare:
a). tratări numerice, care permit după ameliorarea imaginilor, utilizind diferite tehnici de segmentare, extragerea de caracteristici generale cum ar fi, linii de contrast, segmente și unghiuri de referință, etc. Algoritmii asociati în acest caz depind într-o mică măsura de natura problemei de tratat, ei fiind algoritmi generali de recunoaștere de forme.
b). metode de judecată, fondate pe cunoștinte explicite precum și pe reprezentarea lor. Cunostintele sunt legate de problemele puse spre rezolvare, domeniul de aplicație, tehnica utilizată, etc.
Majoritatea metodelor practice de recunoaștere a formelor permit identificarea obiectelor pe baza corespondenței cu o bază de modele. Modelele pot fi perceptuale, funcționale sau semantice.
Aceste cunoștinte sunt organizate în cadrul unui sistem de reprezentare, sistem în cadrul căruia se definesc:
tipul de cunoștinte care se dorește a fi reprezentat, utilizând:
– atribute caracterizând forma obiectelor, cum ar fi factor de formă, factor de ondulație, factor de aplatizare, orientare, etc.,
– atribute depinzând de natura suprafeței obiectelor cum ar fi textură, culoare, etc.,
– relații între obiecte, de apartenență sau de poziție relativă.
reprezentarea informatică a acestor cunoștințe prin, reguli de producție, reprezentări procedurale, utilizarea de limbaje orientate obiect, etc.
Combinarea metodelor de analiză a imaginilor, în special în cazul tratărilor imaginilor de o calitate mediocră, facilitează obținerea unor rezultate deosebit de utile.
În vederea vizualizării imaginilor prelucrate atât în cazul unor sisteme cu posibilități de lucru cu imagini de intensitate cât și color, se pune problema recodificării lor în vederea scoaterii în evidență a unor detalii de interes care duc la o metodă de interpretare cât mai precisă a rezultatelor.
Metodele de recodificare a imaginilor pe baza de LUT (Look Up Table) sunt intens folosite datorită vitezei mari de prelucrare a volumului de informație conținut de semnalul imagine. Această viteză se datoreză și setului ortogonal de instrucțiuni al procesoarelor moderne.
În principiu, metoda constă în schimbarea intensității și/sau a nuanței pixelilor unei imagini conform unei tabele construite în prealabil. În vederea păstrării intensității pixelilor din imagine se preferă ca recodificarea să fie facută ținând cont doar de crominanță, astfel că ulterioarele prelucrări care se efectuează asupra imaginii să beneficieze de aceleași valori pentru intensități. În sistemele moderne de prelucrări de imagini LUT-ul este un dispozitiv hard.
2.4. Operații asupra imaginilor
Imaginile care urmează a fi analizate sunt reprezentate sub forma unor imagini binare, a unor imagini cu valori de gri sau color.
O imagine binară posedă doar două valori, 0 pentru fond și 1 pentru obiecte. În acest caz se determină în general doar prezența sau absența unor obiecte din imagine precum și dimensiunea lor.
În cadrul unei imagini cu valori de gri fiecare pixel este reprezentat printr-o valore tipică cuprinsă între 0 și 255. În acest caz sunt efectuate analize mult mai complexe în vederea determinării unor parametri utilizați în cadrul procesului de diagnosticare medicală.
Imaginile color pot fi tratate fie pornind de la semnalele RGB proprționale cu logaritmul intensității stimulului extern sau de la spațiul perceptual, caz în care culoarea este parametrizată în termeni de luminantă, saturație și crominanță. Tratarea poate fi efectuată pe mai multe planuri distincte sau în mod global, funcție de modalitatea de analiză aleasă.
2.4.1. Operații asupra pixelilor
Fie g(x,y) un pixel din imagine. Operatia f acționează asupra tuturor pixelilor din imagine putând avea diferite forme, astfel încât g(x,y) → f(g(x,y)).
Inversarea imaginii reprezintă scăderea valorii maxime a nivelului de gri din imagine în vederea obținerii imaginii negative. Dubla inversare trebuie să lase imaginea nemodificată.
Operațiile de extindere ("stretching"), respectiv inversa ei, de revenire, efectuate asupra imaginilor cu valori de gri au rolul de a mări contrastul imaginilor de analizat.
Normalizarea imaginii urmarește o redistribuție a nivelurilor de gri din imagine prin extinderea plajei de nuanțe la plaja maximă admisă. O operatie de normalizare modifica, în general, irevocabil conținutul unei imagini, în schimb operația de „streching” poate fi refăcută ușor prin revenire.
Aplicarea unui prag t (x,y) asupra unei imagini de intensitate transpune imaginea inițială într-o imagine binară utilizată în general în selectarea obiectelor și a fondului dintr-o imagine.
Operațiile aritmetice au rolul de a combina două imagini g1(x,y) și g2(x,y) g(x,y) prin adunare, scădere, sau multiplicare pentru imagini de intensitate sau pentru imaginile binare sunt aplicați operatori de tip logic. Aceste operații sunt utilizate în general în corectarea imaginilor de unele imperfecțiuni în vederea unor înregistrări ulterioare.
2.4.2. Operații de adiacență
Operațiile de adiacență formează structuri din pixelii individuali. Sunt impuse reguli de conectivitate (care din pixelii din vecinătate sunt considerați pentru expansiunea structurii) și de admisie (ce valori ale pixelilor candidați pot fi luate pentru expansiune).
Concatenarea reprezintă cel mai simplu exemplu de operație de adiacență. Ea operează asupra imaginilor binare folosind în general conectivitatea pentru 8 pixeli învecinați. Toti pixelii candidați cu o valoare de 1 sunt admiși. Concatenarea repetată dă un obiect.
Operația de înlănțuire în cadrul imaginilor binare reprezintă un mod de a obține conturul unui obiect. Operația caută în mod secvențial în sensul acelor de ceasornic printre pixelii aflați în adiacența punctului curent. Primul pixel având valoarea 1 reprezintă următorul centru de căutare. Printr-o operatie repetată de înlănțuire se obține conturul ordonat cu condiția ca punctul de start să fie pe contur.
Cu ajutorul morfologiei matematice se pot extrage dintr-o imagine anumite caracteristici specifice, funcție de scopul urmărit prin aplicarea unei succesiuni de operatori adecvați.
O transformare morfologică elementară f este caracterizată prin:
– tipul ei : erodare, dilatare, etc.,
– elementul structural, B,
– iteratorul sau : o constantă n, o limită,
– o mască, în cazul transformărilor geodezice.
Morfologia matematică a fost dezvoltată și pentru cazul digital în vederea utilizării în cadrul aplicațiilor de prelucrări de imagini. Există operatori definiți în cazul imaginilor binare precum și în cazul imaginilor de intensitate.
Principalii operatori morfologici sunt:
a). Dilatarea
Dacă notăm:
– X ansamblul de puncte (albe) din imagine marcate cu 1 ce reprezintă obiectul, fondul fiind marcat cu 0,
– B, un ansamblu de puncte, numite element structural. Unul din punctele elementului structural yo, e numit centrul lui B, celelalte puncte fiind numite marcatoare,
– By reprezintă translatarea lui B cu y, yo = y,
– B’ simetricul lui B față de originea reperului,
atunci, dilatarea lui X cu B este definită ca :
Y = X + B' ,
ca un ansamblu de puncte
Y = { y : By ∩ X 0 }
Operația de dilatare revine la marcarea (cu alb) a tuturor punctelor interceptate de elementul structural B atunci când centrul elementului structural baleiază ansamblul punctelor multimii X. Dacă elementul structural e o bulă (sfera, cerc) dilatarea lărgeste obiectul cu o grosime constantă.
b). Erodarea
Erodarea lui X cu B este dată prin :
Y = X – B'
și reprezintă ansamblul de puncte,
Y = { y : By ( X } ,
adica Y e formată din punctele y astfel încât elementul structural centrat în y , By, să fie inclus în X, deci plasând centrul elementului structural pe punctele ansamblului de puncte erodate, toți marcatorii reacoperă un punct al obiectului ce a fost erodat..
Dacă elementul structural e o bulă, erodarea subțiază obiectul cu o grosime constantă.
Erodarea și dilatarea sunt duale față de complement,
( X + B')C = XC – B',
adică e echivalent a dilata punctele albe sau a eroda punctele negre.
Erodarea și dilatarea reprezintă cazuri speciale ale operatorilor de votare. Votarea majoritară sau minoritară admite pixelul dacă un set de pixeli din conectivitate are valoarea 1. Dacă setul este 1 peste tot operația de votare degenereaza la dilatare sau erodare.
c). Deschiderea
Deschiderea este definită ca o erodare urmată de o dilatare,
X = ( X – B') + B ,
reprezentând domeniul B baleiat de toate translatările lui B incluse în X.
Operația netezește contururile, suprimă neregularitățile, taie istmurile.
Dacă elementul structural e o bulă, operația rotunjeste unghiurile, suprimând unicele regiuni conexe.
d). Închiderea
Inchiderea este definită ca o dilatare urmată de o erodare,
XB = ( X + B') – B,
unghiurile fiind rotunjite, iar găurile umplute.
Deschiderea și închiderea sunt duale prin complementaritate:
( X B)C = ( XC ) B si ( XC )B = ( XB )C
Ca și operații asupra imaginilor, închiderea și deschiderea reduc mult din complexitatea datelor ce reprezintă conturul corpurilor, reținând caracteristicile lor cele mai pregnante.
e). Scheletizarea unei imagini binare
Scheletul unei forme X oarecare poate fi definit ca centrul bulelor maximale incluse în formă. Putem de asemenea considera că, contururile formelor sunt erodate din exterior pâna când fronturile eroziunilor se reîntâlnesc în puncte care reprezintă scheletul.
Algoritmii morfologiei matematice, prin abstractizare elimină informația redundantă în sensul scopului, punând în evidență corpul de analizat.
Cu ajutorul morfologiei matematice se pot extrage din imagine o sumedenie de caracteristici cu o succesiune de primitive adecvate.
Primitivele morfologiei matematice pot fi privite din două puncte de vedere:
– al conținutului matematic și algoritmic, ca și primitive operator, de transformare,
– al efectului pe care îl au asupra imaginii ca și primitive de efect, de criteriu, de caracteristică.
Primitivele se clasifică funcție de gradul de selectivitate într-o scară ierarhică, complexitatea crescând cu selectivitatea.
Operatorii morfologici pentru imagini de intensitate au la bază definirea operatorilor definiți pentru imagini binare, doar că selectarea valorii care urmează a fi înscrisă în imagine ca urmare a unei transformari morfologice se face pe baza unui criteriu de minim sau maxim, aplicat asupra pixelilor din vecinătatea de lucru.
Prin operațiile de adiacență definite pentru imaginile de intensitate se poate obține o mai mare flexibilitate.
2.4.3. Operații pe vecinătate
Operațiile pe vecinătate produc o nouă valoare pentru pixelul central bazată pe valoarea vecinilor. Domeniul operațiilor este mai degrabă dat de dimensiunea vecinătății decât de regulile de conectivitate. Dimensiunea vecinătății variază în mod uzual între 2 x 2 și 31 x 31.
Vecinătatea de 3 x 3 este echivalentă unei adiacențe cu conexiunea 8, dar între cele două există o diferență esențială.
Pixelii adiacenți sunt considerați pentru că sunt concatenabili în multimi de pixeli, structuri, având proprietăți asemănătoare cu pixelul central.
Operațiile pe vecinătate produc o valoare și nu un element al structurii. Operațiile pe vecinătate pentru imagini de intensitate pot fi împărțite în liniare și neliniare.
Convoluția este o operație liniară în care pixelul central este înlocuit printr-o sumă ponderată a vecinilor. Coeficienții filtrelor determină rezultatul imaginii de ieșire.
Filtrele liniare pastrează energia din imagine, intensitățile din imagine fiind doar redistribuite printre vecini. Acest lucru avantajează măsurătorile cantitative ale valorilor de gri prin faptul că nu sunt introduse în mod artificial alte valori de gri. În cazul în care imaginea este distorsionată de zgomot, filtrele liniare nu produc o imagine acceptabilă din cauza cantității de energie care trebuie redistribuită în imagine, ea fiind prea mare. În acest caz sunt utilizate filtrele neliniare.
2.4.4. Transformări
Daca pixelii sunt transformați în afara domeniului spatial, operația este numită o transformare a imaginii. Transformarile imaginii descriu proprietăți ale intregii imagini.
2.5. Tehnici specifice utilizate în analiza imaginilor
2.5.1. Analiza texturală
Analiza texturală este inclusă în cadrul analizei imaginilor fiind o parte integrantă a vederii artificiale. Ținând cont de diferența existentă între teoria elaborată în vederea definirii texturilor și aplicațiile practice care urmează a le implementa este necesară definirea și descrierea unor primitive care să caracterizeze textura.
Analiza texturală se încadrează în cadrul analizei imaginilor nonfigurative. În acest caz imaginile conțin anumite modele care se repetă după o anumita regulă. Printre domeniile în care analiza texturală iși găsește diferite aplicații avem medicina cu deosebire genetica, morfopatologia, histopatologia, apoi biofizica etc.
Uneori diferența între două texturi e dată de acest aspect aleator al texturii sau de distribuția statistică gasită între textoni (șabloane care se pot repeta fie în mod exact, fie cu unele mici modificări).
Figura 2.4. Imagini avand regiuni caracterizate prin texturi
(a, b) Textura arificiala
(c, d, e) Textura naturala delimitata din imagini reale
În Figura 2.4. este prezentată o mică colecție de texturi, câteva naturale și altele artificiale. Analiza texturală este strâns legată de procesul de segmentare a texturilor mai degrabă decât de caracterizare a lor.
O textură este considerată a fi o structură spațială construită prin organizarea unor primitive cu aspect aleator. Este extrem de dificil a segmenta texturi. Liniile de separație desenate între texturi deseori sunt arbitrare, funcția de percepție deseori este matematică. Este posibil ca anumite combinații de operații să ofere rezultate rezonabile. Noi metode se incearcă a fi utilizate, în general metode bazate pe fractali și analiza fractalică.
Se pot incerca unele metode simple de detecție a texturilor folosind intensitatea din cadrul unor ferestre (de 3 x 3, pâna la 31 x 31) unde se poate determina intensitatea medie precum si unii parametrii statistici specifici.
Utlizarea unor ferestre care se suprapun printr-un anumit algoritm asupra imaginii poate să ofere unele rezultate acceptabile. Acest lucru este explicabil ținând cont de faptul că textura se referă la regiuni de pixeli si nu la pixeli individuali. În consecintă delimitarea texturilor se poate face considerând o distanță de W pixeli, unde W reprezintă lățimea ferestrei alese.
Figura 2.5. Segmentarea texturilor folosind fereastra de suprapunere
(a) Media intensitatilor intr-o fereastra de 14×14 considerand imaginea din 2.1b.
(b) Binarizarea acestei imagini.
(c) Zona de separatie apartine unei plaje de separatie incerte
În Figura 2.5. este ilustrat următorul principiu. Se folosește media intensităților pentru a segmenta imaginea din Figura 2.4.b.
Valoarea medie dă rezultate acceptabile în acest caz dar în general în cadrul altor tipuri de imagini rezultatele sunt nesatisfăcătoare. Se mai poate considera în acest sens și deviația standard a nivelelor de gri.
Figura 2.6. ne arată regiunile identificate folosind deviația standard locală la segmentarea texturilor. Asfel, Figura 2.4.a poate fi segmentată prin această metoda și chiar și celelalte imagini cu exceptia 2.4.d.
Figura 2.6. Utilizarea deviatiei standard la segmentarea imaginilor din Figura 2.3.
BREVIAR DE CALCUL
3. Operații specifice procesărilor de imagini
În cadrul aplicației mele am efectuat o altă abordare a operațiilor care se pot afectua asupra imaginilor, urmând următoarea clasificare:
operații punctuale – care operează doar asupra valorii unui pixel,
operații spațiale (pe arii) – care folosește pixelul de intrare și cei vecini pentru a genera o nouă ieșire,
operații geometrice – care modifică aranjamentul pixelilor pe baza anumitor transformări geometrice,
operații pe cadre de imagini – în acest caz o nouă valoare pentru un pixel este obținută pe baza unei operații care implică două sau mai multe imagini diferite.
3.1. Operații punctuale
Acestea pot fi și ele împărțite la rândul lor în mai multe categorii:
a). operații aritmetice – se referă la:
adunare,
scădere,
împărțire,
înmulțire.
Primele două ajustează strălucirea (brightness) unei imaginii, iar ultimele două ajustează contrastul imaginii.
S-ar putea să apară probleme, în sensul depășirii limitelor inferioare și superioare a valorii pixelilor. De obicei în aceste cazuri se limitează la valorile 0 și 255.
Modul de implementare a acestor operații în cadrul aplicației este:
void CImageProcessDoc::OnProcesariaritmeticeAdunare()
{
int indice_add;
CIndice_Aritmetic PInd;
PInd.DoModal();
indice_add = PInd.m_Edit_adding;
for (i = 0; i < number_of_pixels; i++)
buffer [i] = buffer [i] + indice_add;
/* revisualization of the image */
UpdateAllViews (NULL);
}
void CImageProcessDoc::OnProcesariaritmeticeScadere()
{
int indice_add;
CIndice_Aritmetic PInd;
PInd.DoModal();
indice_add = PInd.m_Edit_adding;
for (i = 0; i < number_of_pixels; i++)
buffer [i] = buffer [i] – indice_add;
/* revisualization of the image */
UpdateAllViews (NULL);
}
void CImageProcessDoc::OnProcesariaritmeticeInmultire()
{
float indice_div;
CIndice_Aritmetic PInd;
PInd.DoModal();
indice_div = PInd.m_Edit_dividing;
for (i = 0; i < number_of_pixels; i++)
buffer [i] = buffer [i] * indice_div;
/* revisualization of the image */
UpdateAllViews (NULL);
}
void CImageProcessDoc::OnProcesariaritmeticeImpartire()
{
float indice_div;
CIndice_Aritmetic PInd;
PInd.DoModal();
indice_div = PInd.m_Edit_dividing;
for (i = 0; i < number_of_pixels; i++)
buffer [i] = buffer [i] / indice_div;
/* revisualization of the image */
UpdateAllViews (NULL);
}
b). operații logice – se efectuează folosind anumite “măști” care reprezintă valori de pixeli cu o anumită valoare.
Cea mai folosită operație logică este SAU-Exclusiv (XOR), operație care setează biții identici (0 și 1) la 0, iar cei diferiți la 1. XOR va seta pe negru toți pixelii identici cu masca folosită, ceilalți având diferite valori de gri.
Această operație este folosită de obicei în sistemele grafice pentru a genera un cursor pentru mouse, pentru a crea diferite efecte speciale, etc…
c). look-up-table (LUT) – tabelele de recodificare implementează cel mai ușor algoritmii referitor la operațiile punctuale asupra imagnilor.
LUT sunt tablouri simple, care folosesc valoarea curentă a pixelului ca un index în cadrul acestor tabele, de unde se va lua o nouă valoare care va fi introdusă în imaginea de ieșire în aceeași poziție în care a fost în imaginea de intrare.
Imaginea de intrare LUT Imaginea de ieșire
Utilizarea LUT evită efectuarea de operații de calcul inutile. În cazul de mai sus (3 biți / pixel), practic, doar trei valori sunt procesate, indiferent de dimensiunea imaginii (în general, la imagini cu opt biți per pixel sunt procesate 256 de valori).
Modul de implementare al acestei operații în cadrul aplicației este:
void CImageProcessDoc::OnLut()
{
/* initialize Look-up table */
for(i=0; i<256; i++)
{
temp = operation(i);
CLIP(temp, 0, 255);
LUT[i] = temp;
}
/* process image via the Look-up table */
for(i=0; i<number_of_pixels; i++)
buffer[i] = LUT[buffer[i]];
/* revisualization of the image */
UpdateAllViews (NULL);
}
d). histogramă – vizualizează profilul intensităților dintr-o imagine. Ea furnizează informații referitor la contrast, precum și la toată distribuția de intensitate a unei imagini.
Histograma este funcția care asociază la fiecare nivel de gri un anumit număr de pixeli având acest nivel de gri din imaginea analizată.
La reprezentarea ei grafică, pe axa x sunt trecute intensitățile disponible ale pixelilor, iar pe axa y sunt trecute numărul de apariții pentru fiecare intensitate.
y
Maxint
0 1 2 3 ……… 255 x
Figura 3.1. Histograma unei imagini
Pentru afișarea histogamei imaginii am introdus funcția:
void CAfish_Histrogram::OnPaint()
{
CPaintDC dc(this); // device context for painting
char str[10];
brus = new CBrush(RGB(255,255,255));
fer = new CRect(87,39,350,350);
dc.FillRect( fer, brus );
dc.MoveTo(89, 348);
dc.LineTo( 89, 41);
dc.MoveTo(89, 348);
dc.LineTo( 348, 348);
unsigned long histogram[256]; /* image histogram */
unsigned long sum_hist[256]; /* sum of histogram elements */
float scale_factor; /* normalized scale factor */
unsigned long i; /* index variable */
unsigned long sum; /* variable used to increment sum of hist */
unsigned long max_val_point;
int ind,j;
unsigned long max;
if(number_of_pixel_paint > 440)
ind = number_of_pixel_paint/440;
/* clear histogram to 0 */
for(i=0; i<256; i++)
histogram[i]=0;
/* calculate histogram */
for(i=0; i<number_of_pixel_paint; i++)
histogram[buffer_paint[i]]++;
/* calculate normalized sum of hist */
sum = 0;
scale_factor = 255.0 / number_of_pixel_paint;
for(i=0; i<256; i++)
{
sum += histogram[i];
sum_hist[i] = (sum * scale_factor) + 0.5;
}
max = histogram [0];
for (i=0; i<256; i++)
if (max<histogram [i])
max = histogram [i];
scale_factor = max / 260;
for (i=0; i<256; i++)
{
dc.MoveTo(90+i,348);
dc.LineTo( 90+i, 348 – histogram[i]/scale_factor);
}
}
Imaginile întunecate au histograma grupată în partea stângă, cele luminoase o au grupată în partea dreaptă, iar imaginile complet luminate au histograma în toată plaja de distribuție.
De obicei, histograma este folosită pentru identificarea simplă a obiectelor, obiectele similare având de obicei intensități similare.
De asemenea, vârfurile și văile permit separarea obiectelor de intensități diferite din imagine, văile permițând definirea pragurilor de separare.
e). egalizare de histogramă – imaginile care nu au o distribuție uniformă a intensităților pot fi modificate, fără însă a le uniformiza. Intensitățile se vor redistribui astfel încât, dacă histograma inițială avea vârfuri și văi și după egalizare se vor păstra, dar vor fi shiftate (deplasate). Practic, histograma va fi întinsă (împrăștiată).
Egalizarea histogramei se efectuează în următorii pași:
1). se calculează histograma obținând un vector de 256 de elemente (pentru o imagine cu 8 biți/pixel)
2). Se calculează suma normalizată a histogramei, obținând tot un vector de 256 de elemente, astfel:
elementul 0 este neschimbat,
elementul 1 va fi suma dintre elementul 1 și 0,
elementul 2 va fi suma dintre elementul 2, 1 și 0,
…
elementul 255 va fi suma dintre elementul 255, 254, … 1 și 0.
Aceste valori vor fi apoi normalizate, înmulțind fiecare element cu:
În acest mod (ajustând la cel mai apropiat întreg) se obține un LUT care poate fi folosit pentru pasul următor.
3). se modifică imaginea în imaginea destinație, folosind acest LUT.
Modul de implementare al acestei operații în cadrul aplicației este:
void CImageProcessDoc::OnHistEq()
{
unsigned long histogram[256]; /* image histogram */
unsigned long sum_hist[256]; /* sum of histogram elements */
float scale_factor; /* normalized scale factor */
unsigned long i; /* index variable */
unsigned long sum; /* variable used to increment sum of hist */
/* clear histogram to 0 */
for(i=0; i<256; i++)
histogram[i]=0;
/* calculate histogram */
for(i=0; i<number_of_pixels; i++)
histogram[buffer[i]]++;
/* calculate normalized sum of hist */
sum = 0;
scale_factor = 255.0 / number_of_pixels;
for(i=0; i<256; i++)
{
sum += histogram[i];
sum_hist[i] = (sum * scale_factor) + 0.5;
}
/* transform image using new sum_hist as a LUT */
for(i=0; i<number_of_pixels; i++)
buffer[i] = sum_hist[buffer[i]];
/* revisualization of the image */
UpdateAllViews (NULL);
}
Egalizarea histogramei lucrează cel mai bine pe imaginile care au detalii fine în zona întunecoasă.
f). specificarea histogramei – egalizarea histogramei aproximează o histogramă, relativ uniformă, dar uneori se dorește întunecarea sau iluminarea ei, sau mărirea contrastului. În aceste cazuri se folosește specificarea histogramei, care necesită:
o imagine ca intrare,
o histogramă dorită.
Ea se efectuează astfel:
se egalizează histograma imaginii originale,
se determină inversa histogramei egalizate pornind de la imaginea egalizată și histograma dorită.
y
x
Histograma dorită
Figura 3.2. Specificarea de histogramă
Determinarea inversei histogramei egalizate necesită să generăm LUT corespunzător histogramei dorite și apoi sa calculăm transformarea inversă a LUT. Acestă transformare inversă este calculată analizând ieșirile lui LUT. Cea mai apropiată ieșire pentru o intrare particulară devine valoarea inversă.
g). normalizrea imaginii (extinderea contrastului, contrast stretching) – așa cum am arătat, contrastul unei imagini este dat de distribuția pixelilor luminoși și întunecoși.
Imaginile cu contrast scăzut au histograme în care pixelii sunt concentrați la stânga, la dreapta sau în mijloc. Practic, se folosește un domeniu redus de valori din histogramă.
Imaginile care au contrastul mare au regiuni largi de intensități închise și luminoase. În general, imaginile de contrast ridicat au două vârfuri mari, unul în zona inferioară, iar celălalt în zona superioară.
Normalizarea este aplicată la o imagine pentru a extinde histograma astfel încât să umple tot domeniul dinamic al imaginii. Este utilizată pentru a îmbunătăți imagini de contrast redus, lucrând cel mai bine pe imagini care au o distribuție Gaussiană sau aproape Gaussiană.
Există două metode de normalizare:
normalizarea de bază (basic contrast stretching)
Aceasata lucrează bine pe imaginile care au toți pixelii concentrați într-o parte a histogramei. Metoda va expanda histograma imaginii astfel încât să fie acoperit tot domeniul pixelilor.
Relația de transfer este:
ends-in-search
Această metodă lucrează pentru imaginile care au toate intensitățile, dar au o concentrare de pixeli într-o parte a histogramei. În acest caz, relația care permite calculul LUT pentru transfer este:
h). transformarea intensității – are rolul de a converti un pixel vechi într-unul nou folosind o funcție predefinită. Aceste transformări sunt implementate cu LUT. Se preferă o reprezentare grafică (pe x, valorile pixelilor originali, iar pe y valorile pixelilor de ieșire).
Ca și transformări avem:
transformare null → pixel_nou = pixel_vechi
negativare → se vor negativa valorile
corecție gama → ieșire = intrare
Este folostă la compensarea răspunsurilor neliniare.
y < 1.0 → curbă exponențială
y = 1.0 → null
y > 1.0 → curbă logaritmică
Monitoarele RGB au y cuprins între 1.4 și 2.8.
3.2. Operații spațiale (procesare de arii)
Așa cum am precizat, aceste operații consideră ca intrare pixelul curent, precum și cei din vecinătate pentru a obține pixelul de ieșire.
Principalele operații spațiale sunt:
convoluția,
scoaterea în relief (embossing),
blurring (introducere a trăsăturilor și contururilor neclare),
sharpening (ascuțirea detaliilor),
detecția de contururi (edge detection),
filtre derivative de ordin 1 (Roberts, Prewitt, Sobel, Frei-Chen, etc…),
operator gradient compass,
filtre derivative de ordin 2 (Laplacian, Kirsch, etc…),
detecția de prag,
detecția color a muchiilor,
filtrul median,
filtrul maxim/minim,
filtrul Canny, etc…
a). Convoluția – este folosită în procesarea de imagini pentru:
netezire (smoothing)
accentuare a contrastelor (crispening)
detecție de contur, etc…
În principiu, convoluția reprezintă o sumă ponderată de pixeli preluați din vecinătatea pixelului curent, sumă utilizată pentru a determina noua valoare a pixelului.
Ponderile sunt determinate de o matrice relativ mică (3 x 3, 35 x 35) numită matrice mască, nucleu de convoluție. În general dimensiunea este impară, putându-se astfel localiza centrul care va corespunde pixelului de ieșire.
Această matrice se va plimba peste toată imaginea inițială, obținând astfel valorile pixelilor de ieșire (vezi Figura 3.3.).
Trebuie avut grijă ca la procesarea pixelilor de ieșire să nu stricăm valorile celorlalți pixeli, de aceea se preferă ca rezultatul să fie memorat într-o altă matrice, altfel se obține un sistem cu infinit în impuls, ceea ce nu este de dorit.
Dacă suma ponderilor din matricea de convoluție este 1, atunci imaginea obținută va avea aceeași intensitate cu cea originală. Dacă această sumă este 0 (sunt și coeficienți negativi), în mod obișnuit se adaugă la valoarea obținută o constantă și dacă tot se obține un pixel negativ el va fi setat pe 0.
O altă problemă care se pune la convoluție este modul în care sunt tratate marginile imaginii. Pentru aceasta sunt mai multe cazuri:
(0,0) (0, max C)
Fereastra de
convoluție
(max L, 0) (max L, max C)
noua valoare = I0 x M0 + I1 x M1 + … + I7 x M7 + I8 x M8
Figura 3.3. Modul de calcul pentru convoluție
se consideră pixelii care nu aparțin imaginii ca fiind egali cu 0,
se pornește convoluția doar din locul în care se suprapune pe imagine,
dublarea marginilor pentru o matrice de 3 x 3,
considerarea valorilor în celelalte extremități (wrap).
Multe măști de convoluție sunt considerate separabile, adică, convoluția poate fi efectuată prin execuția a două convoluții cu o mască unidimensională.
O funcție separabilă satisface relația:
f(x,y) = g(x) x h(y) ,
ele reducând numărul de calcule atunci când se folosesc măști de dimensiuni mari. De exemplu, convoluția cu masca:
poate fi operată prin
însă economia nu e spectaculoasă (6 înmulțiri în loc de 9).
Convoluția a fost implementată în cadrul aplicației astfel:
void CImageProcessDoc::OnConvolutieConvolutie()
{
unsigned char * new_buffer = new unsigned char [bytes_per_pixel * rows * cols];
int x, ind;
float fil[25];
float A, B, C;
A = 1.0/25.0;
B = -1.0;
C = 5.0;
for(ind = 0; ind < 25 ; ind ++)
{
fil [ind] = 0.0;
}
fil[0]=-1;
fil[25]=-1;
for (i = 0; i < rows; i++)
for (int j =0; j < cols; j++)
{
if (i>=2 && j>=2 && i<rows-3 && j<cols-3)
{
x = i*cols + j;
val_fil = ( buffer[x-2*cols-2] * fil[0] +
buffer[x-2*cols-1] * fil[1] +
buffer[x-2*cols] * fil[2] +
buffer[x-2*cols+1] * fil[3] +
buffer[x-2*cols+2] * fil[4] +
buffer[x-cols-2] * fil[5] +
buffer[x-cols-1] * fil[6] +
buffer[x-cols] * fil[7] +
buffer[x-cols+1] * fil[8] +
buffer[x-cols+2] * fil[9] +
buffer[x-2] * fil[10] +
buffer[x-1] * fil[11] +
buffer[x] * fil[12] +
buffer[x+1] * fil[13] +
buffer[x+2] * fil[14] +
buffer[x+cols-2] * fil[15] +
buffer[x+cols-1] * fil[16] +
buffer[x+cols] * fil[17] +
buffer[x+cols+1] * fil[18] +
buffer[x+cols+2] * fil[19] +
buffer[x+2*cols-2] * fil[20] +
buffer[x+2*cols-1] * fil[21] +
buffer[x+2*cols] * fil[22] +
buffer[x+2*cols+1] * fil[23] +
buffer[x+2*cols+2] * fil[24] );
new_buffer [i * cols + j] = val_fil;
}
}
memcpy (buffer , new_buffer, bytes_per_pixel * rows * cols);
delete new_buffer;
for (i = 0; i < number_of_pixels; i++)
{
ind = 255 – buffer[i];
if (ind > 128)
buffer [i] =128 + buffer [i];
else
buffer [i] =ind + buffer [i];
}
/* revisualization of the image */
UpdateAllViews (NULL);
}
b). Scoaterea în relief (embossing) – se poate obține cu matricea
după convoluție adăugând valoarea 128.
În cadrul imaginilor color există în general două tehnici care se aplică:
lucrul cu imagini HSI, caz în care se lucrează doar asupra intensității, culoarea fiind păstrată (cea mai des folosită),
lucrul cu cele trei planuri R, G, B, caz care oferă rezultate mai bune (blurring).
c). Blurring (contururi neclare)
Reprezintă un filtru trece jos care elimină detaliile fine din imagine. E folosit pentru a simula defocalizarea unei camere,a nu scoate în evidență fondul, etc…
Tehnica este folosită în fotografie când se introduc diverse filtre. Ea se poate realiza cu o mască de convoluție în care toți coeficienții sunt egali:
– la 3 x 3 , toți au valoarea :
void CImageProcessDoc::OnFilterFtj19()
{
unsigned char * new_buffer = new unsigned char [bytes_per_pixel * rows * cols];
int x, ind;
float fil[9];
float A, B, C;
A = 1.0/9.0;
B = -1.0;
C = 5.0;
for(ind = 0; ind < 9 ; ind ++)
fil[ind] = A;
for (i = 0; i < rows; i++)
for (int j =0; j < cols; j++)
{
if (i>=1 && j>=1 && i<rows-1 && j<cols-1)
{
x = i*cols + j;
val_fil = (buffer[x-cols-1] * fil[0] +
buffer[x-cols] * fil[1] +
buffer[x-cols+1] * fil[2] +
buffer[x-1] * fil[3] +
buffer[x] * fil[4] +
buffer[x+1] * fil[5] +
buffer[x+cols-1] * fil[6] +
buffer[x+cols] * fil[7] +
buffer[x+cols+1] * fil[8] );
new_buffer [i * cols + j] = val_fil;
}
}
memcpy (buffer , new_buffer, bytes_per_pixel * rows * cols);
delete new_buffer;
/* revisualization of the image */
UpdateAllViews (NULL);
}
– la 5 x 5 , toți au valoarea :
void CImageProcessDoc::OnFilterFtj125()
{
unsigned char * new_buffer = new unsigned char [bytes_per_pixel * rows * cols];
int x, ind;
float fil[25];
float A, B, C;
A = 1.0/25.0;
B = -1.0;
C = 5.0;
for(ind = 0; ind < 25 ; ind ++)
fil[ind] = A;
for (i = 0; i < rows; i++)
for (int j =0; j < cols; j++)
{
if (i>=2 && j>=2 && i<rows-3 && j<cols-3)
{
x = i*cols + j;
val_fil = (buffer[x-2*cols-2] * fil[0] +
buffer[x-2*cols-1] * fil[1] +
buffer[x-2*cols] * fil[2] +
buffer[x-2*cols+1] * fil[3] +
buffer[x-2*cols+2] * fil[4] +
buffer[x-cols-2] * fil[5] +
buffer[x-cols-1] * fil[6] +
buffer[x-cols] * fil[7] +
buffer[x-cols+1] * fil[8] +
buffer[x-cols+2] * fil[9] +
buffer[x-2] * fil[10] +
buffer[x-1] * fil[11] +
buffer[x] * fil[12] +
buffer[x+1] * fil[13] +
buffer[x+2] * fil[14] +
buffer[x+cols-2] * fil[15] +
buffer[x+cols-1] * fil[16] +
buffer[x+cols] * fil[17] +
buffer[x+cols+1] * fil[18] +
buffer[x+cols+2] * fil[19] +
buffer[x+2*cols-2] * fil[20] +
buffer[x+2*cols-1] * fil[21] +
buffer[x+2*cols] * fil[22] +
buffer[x+2*cols+1] * fil[23] +
buffer[x+2*cols+2] * fil[24] );
new_buffer [i * cols + j] = val_fil;
}
}
memcpy (buffer , new_buffer, bytes_per_pixel * rows * cols);
delete new_buffer;
/* revisualization of the image */
UpdateAllViews (NULL);
}
sau toți au valoarea 1 și în față folosesc sau . Practic reprezintă filtrul de mediere.
Acest filtru reduce zgomotul Gaussian din imagine nefiind însă eficient pentru zgomotul în impuls, care reprezintă un zgomot cu valori extreme 0 și 255 (zgomot sare și piper).
Medierea micșorează contrastul, valorile tinzând să se alinieze la valori de mijloc.
Pentru blurring se mai folosește următoarea mască:
Codul sursă al implementării acestei măști este:
void CImageProcessDoc::OnFilterFtj1811614()
{
unsigned char * new_buffer = new unsigned char [bytes_per_pixel * rows * cols];
int x, ind;
float fil[9];
float A, B, C;
A = 1.0/25.0;
B = -1.0;
C = 5.0;
for(ind = 0; ind < 9 ; ind ++)
{
if (ind % 2 == 0)
fil[ind] = 1.0/8.0;
else
fil [ind] = 1.0/16.0;
}
fil[4] = 1.0/4.0;
for (i = 0; i < rows; i++)
for (int j =0; j < cols; j++)
{
if (i>=1 && j>=1 && i<rows-1 && j<cols-1)
{
x = i*cols + j;
val_fil = (buffer[x-cols-1] * fil[0] +
buffer[x-cols] * fil[1] +
buffer[x-cols+1] * fil[2] +
buffer[x-1] * fil[3] +
buffer[x] * fil[4] +
buffer[x+1] * fil[5] +
buffer[x+cols-1] * fil[6] +
buffer[x+cols] * fil[7] +
buffer[x+cols+1] * fil[8] );
new_buffer [i * cols + j] = val_fil;
}
}
memcpy (buffer , new_buffer, bytes_per_pixel * rows * cols);
delete new_buffer;
/* revisualization of the image */
UpdateAllViews (NULL);
}
care se apropie cel mai mult de profilul Gaussian.
Suma coeficienților este egală cu 1 și deci, intensitatea imaginii de ieșire nu este afectată.
Filtrele Gaussiene de netezire sunt de forma:
unde σ contrrolează împrăștierea efectivă.
Măștile care au valoare mică pentru σ sunt ascuțite, iar cele cu σ mare sunt late. σ influențează și dimensiunea măștilor. Ele trebuie să fie suficient de mari ca să conțină toți coeficinții diferiți de zero.
Pentru σ = 2.0 este nevoie de o mască de 15×15
σ = 3.0 este nevoie de o mască de 23×23
Pentru 3×3 se folosesc valorile (-1,-1) , (-1,0) , (-1,1) , (-1,0) , (0,0) , (0,-1) , (1,0) , (0,1) și (1,1) pentru coordonatele x și y.
Filtrele trece jos elimină zgomotele, dar contururile devin neclare, de aceea filtrul median este mai eficient.
d). Sharpening
Ascuțirea detaliilor are efect opus celui de blurring. Este referită ca accentuarea contrastelor (crispening), dar scoțând în evidență detaliile din imagine.
Această tehnică poate fi folosită la restaurarea imaginilor, mărind în același timp și contrastul. Matricea de convoluție are un coeficient pozitiv în centru și în general negativi în rest. Ca și măști de convoluție avem:
implementată:
void CImageProcessDoc::OnFilterFts015()
{
unsigned char * new_buffer = new unsigned char [bytes_per_pixel * rows * cols];
int x, ind;
float fil[9];
float A, B, C;
A = 1.0/25.0;
B = -1.0;
C = 5.0;
for(ind = 0; ind < 9 ; ind ++)
{
if (ind % 2 == 0)
fil[ind] = -1.0;
else
fil [ind] = 0.0;
}
fil[4] = 5.0;
for (i = 0; i < rows; i++)
for (int j =0; j < cols; j++)
{
if (i>=1 && j>=1 && i<rows-1 && j<cols-1)
{
x = i*cols + j;
val_fil = (buffer[x-cols-1] * fil[0] +
buffer[x-cols] * fil[1] +
buffer[x-cols+1] * fil[2] +
buffer[x-1] * fil[3] +
buffer[x] * fil[4] +
buffer[x+1] * fil[5] +
buffer[x+cols-1] * fil[6] +
buffer[x+cols] * fil[7] +
buffer[x+cols+1] * fil[8] );
new_buffer [i * cols + j] = val_fil;
}
}
memcpy (buffer , new_buffer, bytes_per_pixel * rows * cols);
delete new_buffer;
/* revisualization of the image */
UpdateAllViews (NULL);
}
și masca
implementată:
void CImageProcessDoc::OnFilterFts19()
{
unsigned char * new_buffer = new unsigned char [bytes_per_pixel * rows * cols];
int x, ind;
float fil[9];
float A, B, C;
A = 1.0/25.0;
B = -1.0 ;
C = 5.0;
for(ind = 0; ind < 9 ; ind ++)
{
fil[ind] = -1.0;
}
fil[4] = 9.0;
for (i = 0; i < rows; i++)
for (int j =0; j < cols; j++)
{
if (i>=1 && j>=1 && i<rows-1 && j<cols-1)
{
x = i*cols + j;
val_fil = (buffer[x-cols-1] * fil[0] +
buffer[x-cols] * fil[1] +
buffer[x-cols+1] * fil[2] +
buffer[x-1] * fil[3] +
buffer[x] * fil[4] +
buffer[x+1] * fil[5] +
buffer[x+cols-1] * fil[6] +
buffer[x+cols] * fil[7] +
buffer[x+cols+1] * fil[8] );
new_buffer [i * cols + j] = val_fil;
}
}
memcpy (buffer , new_buffer, bytes_per_pixel * rows * cols);
delete new_buffer;
/* revisualization of the image */
UpdateAllViews (NULL);
}
Filtrele trece sus măresc detaliile dar și amplifică zgomotele din imagine.
e). Detecția de contur (muchii)
Muchiile dintr-o imagine permit izolarea obiectelor, determinarea formei, dimensiunii și anumite informații legate de textură.
O muchie reprezintă locul în care intensitateta unei imagini se modifică brusc de la o valoare low la o valoare high sau invers.
Sunt multe aplicații, uneori doar ca și efecte speciale, ieșirea unui detector de muchii putându-se suprapune peste imaginea inițială pentru a accentua muchiile.
Detecția de muchii reprezintă cel mai complex element din “procesarea” imaginii, neexistând o metodă universal valabilă pentru că muchiile sunt foarte diverse.
De multe ori se fac diferite experimente pentru a alege cea mai bună tehnică de detecție de contur.
Cel mai simplu și rapid detector de muchii determină valoarea maximă prin scăderea din valoarea pixelului central pe cei opt vecini (separat), valoarea de ieșire fiind maximul valorii absolute a fiecărei diferențe. Acesta este operatorul de omogenitate.
Operatorul diferență este mai rapid, el făcând mai puține operații, făcând scăderi în vecinătate în modul următor:
Ceilalți detectori globali de contur folosesc unele măști de convoluție.
f). Operatori derivativi de ordin 1
Operatorii gradient comun (sau gradient ortogonal) detectează muchii orizontale și verticale. Acești operatori lucrează prin convoluție. Măștile cele mai utilizate sunt:
Hr Hc
Roberts
Prewitt
Sobel
Frei – Chen
Amplitudinea poate fi determinată calculând vectorul sumă al Hr și Hc:
Orientarea muchiilor poate fi găsită prin:
g). Operatorul gradient compass
Detectează muchii pentru opt orientări diferite. Practic, imaginea va fi convoluționată cu opt măști, ieșirea fiind maximul dintre cele opt valori obținute.
Ceea ce este de remarcat este faptul că măștile de dimensiune mică sunt senzitive la zgomote.
h). Operatori derivativi de ordin 2
Operatorii gradient au un răspuns larg asupra zonei tratate. Ei sunt buni pentru muchiile care au o rampă lentă.
Detectarea oricărui contur se numește localizare, dar în general este dificil a detecta conturul muchiilor de câțiva pixeli. De multe ori se folosește un proces de subțiere (thinning) pentru a reduce lățimea muchiilor la un pixel.
Operatori derivativi de ordin 2 oferă rezultate mai bune. De asemenea, contururile obținute sunt inchise.
Oeratorul Laplacian este cel care este untilizat cel mai frecvent. El va produce muchii mai ascuțite decât majoritatea celorlalte tehnici.
Utilizând anumite măști, în imagine apar valori ale pixelilor care duc la o schimbare de semn la muchiile imaginii. Aceste schimbări de semn sunt numite “treceri prin zero” sau zero crossing. După convoluție imaginea trebuie să fie procesată pentru a detecta aceste treceri prin zero și pentru a seta pixelii de ieșire în mod adecvat.
Dacă ar fi să implementăm în cadrul aplicației, codul sursă al acestei funcții ar fi:
for (i=0; i < (cols * (rows – 1)); i++)
if ((image [i] < 0) && ((image Ii+1] >= 0) || (image [i+cols] >= 0)))
out_buffer [i] = 255;
else
if ((image [i] > 0) && ((image Ii+1] <= 0) || (image [i+cols] <= 0)))
out_buffer [i] = 255;
else
out_buffer [i] = 0;
Operatorul Laplace este sensibil la zgomote, și de aceea “trecerile prin zero” indică mai multe muchii decât sunt în realitate. De aceea se folosește un prag pentru a determina magnitudinea muchiilor care vor fi marcate. De multe ori se preferă folosirea Laplacianului Gaussianului, LOG, care este un operator mai eficient. El presupune, mai întâi, aplicarea netezirii Gaussiene și apoi a Laplacianului. Se poate defini astfel masca:
Funcția este numită “filtrul pălăria Mexicană”.
Primul punct “zero crossing”a lui LOG este la .
De obicei acest operator este folosit cu măștile de dimensiuni mari mai mari de 7×7) și de aceea numărul de calcule este foarte mare. Pentru cazul 35×35 se preferă a se folosi o aproximare dată de operatorul DoG (Difference of Gaussians):
Practic se va face convoluția cu DoG prin scăderea a două măști Gaussiene cu valori σ diferite. Raportul dă o aproximare bună pentru LOG. Un avantaj a lui DoG este abilitatea de a specifica lățimea muchiilor de detectat modificând valorile lui σ1 și σ2 ; masca de 9 x 9 va detecta muchii mai largi decât masca de 7 x 7.
Deasemenea, DoG închide contururile detectate.
i). Detecția de prag (Thresholding)
Pe baza detecției de prag putem:
sincroniza o imagine, caz în care o imagine de intensitate (cu nivele de gri) va fi convertită într-una alb-negru (binarizare). Această nouă imagine trebuie să conțină toate informațiile necesare referitor la numărul, poziția și forma obiectelor.
extragere de contur
extragere de regiuni
Utilizarea nivelelor de gri ale pixelilor face ca anumiți pixeli având nivele de gri apropiate să poată fi împărțiți pe baza unei proceduri de clasificare în obiect sau nou obiect.
Detectia de prag, aproape intotdeauna este esențială înainte de:
sublinierea contururilor (thinning)
vectorizare
operații morfologice, etc…
Cea mai folosită metodă de conversie a unei imagini de intensitate într-una alb-negru este de a selecta un singur prag, T. În acest mod:
dacă I(i,j)<T , I(i,j)=0 , colecția pixelilor negrii
I(i,j)(T , I(i,j)=1 , colecția pixelilor albi
Selectia pe baza unui singur prag ne oferă o solutie parțială de segmentare, oferind o soluție globală utilizabilă mai ales în cazul în care imaginile se pretează a fi tratate astfel (documente scanate, imagini simple de test, etc…)
Algoritmii de detecție de prag se pot baza:
pe histograma imaginii
pe anumite valori din imagine
O metodă simplă, dar relativ ineficientă constă din a considera valoarea medie a intensităților din imagine ca și prag. Asta implică, că imaginile au aceeași pondere pentru negru și alb, lucru care nu este realist. În general procentul de negru poate fi constant, dar nu egal cu cel de alb. La o foaie tipărită el variază în general între 8,46% și 15,67%, în funcție de existența formelor, imaginilor, etc…
În general histograma este cea mai folosită în procesul detecției de prag. Adesea pragul este considerat a fi punctul cel mai de jos între două vârfuri semnificative ale histogramei. Dacă histograma este doar cu două vârfuri, această alegere este cea mai bună.
Segmentarea bazată pe prag a imaginilor se bazează pe faptul că o muchie (edge) este dată de pixelii care sunt apropiați de contur, între obiect și fond sau între două obiecte care aproape se ating. Histograma punctelor care constituie muchia este foarte regulată și din acest motiv se pot detecta muchiile pornind de la Laplacian, care este un operator de detecție de muchii nedirecțional. Cel mai simplu mod în acest caz este de a folosi un nucleu de convoluție adecvat pentru acest Laplace.
În continuare se vor considera doar acei pixeli care au valori largi ale Laplacian-ului. Acei pixeli care au Laplacian-ul mai mare cu 85% față de veciniii lor vor fi păstrați în imagine; după aceea pragul va fi determinat pornind de la noua histogramă a imaginii obținute.
O metodă de detecție de prag care nu se bazează pe histogramă consideră valoarea medie Tmed a intensității din imagine ca un prim prag, care apoi este rafinat printr-un proces de selecție iterativ. Următorul prag se determină considerând media nivelelor de gri a tuturor pixelilor de la 0 la Tmed , Tb , respeciv de la Tmed la 255, de unde obținem To . Noua valoare va fi:
.
Procesul se repetă până când nu mai avem o schimbare a pragului. Acest proces poate fi implementat doar hardware, varianta software se poate implementa mai usor, pornind de la histogramă.
La detecția de prag se poate folosi și entropia. Entropia este o măsură a conținutului informațional a unei imagini.
Mulțimile fuzzy pot fi și ele folosite la detecția de prag, precum și alte diverse metode.
Oricum, procesul de detecție de prag în vederea segmentării este foarte dependent de natura și calitatea imaginilor utilizate.
j). Detecția color
Într-o imagine color trebuie văzută care este diferența muchiilor. În cazul în care suntem în spațiul HSI, detecția se face ținând cont de canalul de intensitate. În spațiul RGB, detecția de contur se face pe cele trei planuri separate, după care, combinând cele trei planuri, rezultă o imagine color segmentată. Cele trei componente pot fi și adunate pentru a crea o scală de gri, sau pot fi adunate vectorial rezultând tot nivele de gri, astfel:
În general majoritatea muchiilor detectate în spațiul HSI se găsesc și in spațiul RGB, deci este suficient a se face detecția pornind de la componenta de intensitate.
În cazul în care avem imagini de contrast scăzut, detecția pornind de la intensitate nu este suficientă și atunci se face o detecție ținând cont și de crominanța imaginii.
k). Filtrul median
Zgomotul Gaussian este înlăturat de filtrele trece-jos. Zgomotul în impuls este cel mai bine eliminat cu filtrul median.
Filtrul median păstrează contururile și detaliile și deci frecvențele înalte din imagine. Omul este foarte sensibil la frecvențle înalte din imagine. Filtrul median constă din suprapunerea și translatarea cu un număr impar de linii și coloane. Pixelii din imagine peste care se suprapune fereastra sunt ordonați crescător, iar pixelul din mijloc va fi introdus în locul pixelului curent (cel din mijlocul ferestrei). Ca și fereastră se ia de obicei un bloc patrat impar, dar dacă se doresc anumite operații speciale putem avea:
– filtru vertical
– elimină zgomotul corelat orizontal, cum ar fi o linie scanată care a dispărut
– dacă aplicăm un filtru orizontal, atunci pixelul dispărut va fi împrăștiat în ambele direcții. Acest filtru elimină zgomotele care apar în coloane de pixeli;
– se pot alege elemente în formă de X sau de diamant.
La alegerea unui bloc pentru filtrul median trebuie să se țină cont de timpul de procesare și de faptul că un filtru median de lățime 3 pixeli elimină zgomotele din imagine de pe o linie, iar un filtru median de lățime 5 pixeli, elimină zgomotele din imagine de pe două linii, etc…
Filtrul median poate fi aplicat și în spațiul 3D (2D + timp) mai ales în televiziune, fiind numit filtru median temporal. Se elimină zgomotele de burst (vârf), păstrând de asemenea și mișcarea, mai bine decât filtrul temporal clasic.
Se pune problema de a optimiza acest filtru median pentru că odată ce este aplicat pe o fereastră, în pasul următor, când se trece la următorul pixel, se va modifica doar o coloană. Sunt metode care țin cont de pixelii procesați realizând un algoritm de sortare adaptiv.
Se poate considera și un filtru median separabil. Acest lucru implică, mai întâi filtrarea imaginii cu un filtru orizontal și apoi urmată de o filtrare verticală. Acest lucru va reduce timpul de calcul, sortând 2n numere, față de n x n = n2.
Ieșirea filtrului separabil este similară cu cea a filtrului neseparabil.
În cadrul imaginilor color, algoritmul de calcul este diferit. Se poate aplica pe fiecare plan R, G, B, și în final se combină cele trei planuri, dar se pierde corelația dintre componentele lor.
O proprietate importantă a filtrului median este aceea că el nu inventează alte valori, în pixelul curent fiind introdus un pixel din imagine ales ca urmare a sortării. Deci, un pixel obținut din filtrarea mediană color trebuie să fie un pixel din imaginea inițială.
În cadrul filtrării mediane color se poate exploata proprietatea că suma diferențelor dintre valoarea mediană și toate celelalte valori va fi mai mică decât suma diferențelor pentru orice alte valori din mulțime.
,
unde: N = 9 pentru un bloc 3 x 3,
y este o valoare arbitrară și xmed este valoarea mediană.
Pe baza acestei proprietăți putem însuma diferențele dintre componentele R, G și B. Pixelul având cea mai mică sumă va fi considerat ca și ieșire a filtrului median.
Pentru a face calculele pentru filtrul median color se pornește cu N elemente aflate în fereastra filtrată. Pentru fiecare pixel color se determină distanța:
,
unde i reprezintă pixelul procesat și j sunt ceilalți pixeli din fereastră. x și y din ecuația precedentă vor fi componentele R, G și B.
x i = {red i , green i , blue i}
, va corespunde ieșirii filtrului, xi .
Metoda poate fi folosită pentru ferestre pare și impare, insă cum, tradițional, pixelul de ieșire este asociat valorii centrale din fereastră, este de preferat ca numărul pixelilor de intrare ai filtrului să fie impar.
l). Filtrul minim/maxim
Acest filtru este asemănător cu cel madian, doar că în loc de a înlocui cu valoarea mediană pixelul din centru, el va fi înlocui cu valoare minimă sau maximă. Aceste filtre elimină zgomotele impulsionale extreme (minimul elimină vârfurile albe, iar maximul elimină vârfurile negre).
Filtrul minim/maxim poate fi folosit pentru a lărgi trăsăturile din cadrul unei imagini cu contrast ridicat. Acest filtru nu poate elimina zgomotele impulsive mixte atâta timp cât îmbunătățesc vârfurile negative și cele pozitive.
O cascadă de filtre minim/maxim poate elimina sarea și piperul.
Un filtru maxim urmat de un filtru minim se numește un filtru de închidere (closing). Un filtru minim urmat de un filtru maxim se numește un filtru de deschidere (opening).
Filtrul median poate fi ușor transformat în filtru minim/maxim.
m). Filtrul Canny
A fost propus în 1986 de către John Canny. Acesta propunea ca un detector de muchii este necesar să satisfacă trei criterii:
detecție bună,
localizare bună,
un singur răspuns la o singură muchie.
Acest filtru se implementează considerând șase pași:
se face o convoluție a imaginii cu o mască Gaussiană,
se calculează componentele gardientului pentru fiecare pixel,
se calculează direcția gradientului pentru fiecare pixel rezultat,
se calculează derivata de ordin 2 în lungul acestei direcții a gradientului pentru fiecare pixel,
se localizează valorile de zero în această derivată de ordin 2,
se clasifică valorile de zero ca puncte de pe contur.
3.3. Procesarea geometrică a imaginilor
Acest mod de procesare modfică arnjamentul pixelilor pornind de la unele transformări geometrice. Ideea constă doar din deplasarea pixelilor în cadrul imaginii astfel încât în mod ideal valorile să nu fie modificate.
Dacă acest proces se referă la un pixel a cărui localizare nu există, atunci el va fi generat. Această generare se numește interpolare. Interpolarea nu este un proces geometric, dar este utilizată de multe transformări geometrice.
a). Inverse mapping
În cazul în care se utilizeză transformări geometrice asupra imaginilor, deseori se folosesc coordonatele imaginii destinație pentru a genera coordonatele imaginii sursă. Acest proces se numește „potrivire inversă”.
b). Forward mapping
Procesarea punctuală permite transferul unui pixel de intrare de coordonate (x,y) în unul de ieșire printr-un proces numit „potrivire înainte”. La această potrivire apar două probleme:
găurile (holes) reprezintă pixeli nedefiniți, pixelii destinație neavând corespondență în sursă,
suprapunerile (overlaps) apar atunci când doi pixeli de intrare se potrivesc pe același pixel de ieșire.
c). Interpolarea
Din cauza potrivirii putem avea anumite probleme. Fie transformarea:
Pixelul de la destinația [0][0] va porni de la sursa [0][0]. Pentru destianția [1][1] sursa ar trebui să fie [0.5][0.5], pixel care, însă, nu există în imagine (rezoluție subpixel).
Interpolarea reprezintă procesul generării de valori adrese ce aparțin între pixeli, deci pentru domeniul subpixel. Ea generează un pixel nou analizând pixelii din jur, astfel încât să poată face o asociere cât mai corectă în funcție de transformarea dorită și de pixelii din jur.
destinație [1][1] → sursă [0][0]
Funcția de interpolare este dependentă de aplicația dedicată, astfel încât cu cât procesul de interpolare este mai sofisticat, procesul de calcul va fi mai complicat și mai lung.
Principalele tehnici de interpolare sunt:
interpolarea bazată pe cel mai apropiat vecin, pixelul fiind asigurat pixelului cel mai apropiat adresei nou generate, ca și pixel de ieșire. Adresele fracționare calculate pentru pixelii sursă vor fi rotunjite la cel mai apropiat pixel, valid ca adresă.
interpolarea biliniară, noul pixel generat fiind o sursă ponderată a patru pixeli, cei mai apropiați. Ponderile sunt direct proporționale cu distanța de la fiecare pixel existent. Sunt necesare trei interpolări liniare per pixel rezultând o imagine mai netedă (smoother) decât la metoda precedentă.
interpolare de nivel înalt, folosește zone mai mari pentru pixelii din vecinătate in vederea generării pixelului de ieșire. La acest nivel avem tehnicile de interpolare cubice și B-spline care folosesc șaisprezece pixeli vecini pentru a genera pixelul de ieșire. Principiul se bazează pe convoluția unidimensională. Convoluția unidimensională cubică este dată de relația:
cu valori pentru a:
– 0.5 pentru precizie aritmetică mare,
– 0.75 și
– 1.0 pentru vizualizare bună.
În procesul de calcul se impun optimizări pentru a crește viteza de calcul.
Funcția ideală de interpolare este un filtru trece jos, funcția B-spline oferind un rezultat foarte bun. Funcția este strict pozitivă, oferind netezirea cea mai bună. Funcția unidimensională este dată de relația:
d). Scalarea imaginilor
Scalarea permite mărirea anumitor dimensiuni dintr-o imagine. Procesul prin care o imagine sau o porțiune din imagine este scalată se numește:
prin mărire:
magnificare
scaling up
zooming
upsampling
stretching
prin micșorare:
shrinking
scaling down
decimare
downsampling
minificare
Prin scalare nu se va îmbunătăți rezoluția pentru că nu sunt mai multe date decât cele capturate. Prin interpolare mai pot genera noi valori, dar ele, practic, vor altera imaginea originală.
Scalările se fac având ca referință imaginea originală, imaginea rezultată va fi modificată ținând cont de anumiți factori de scală, iar dacă se revine la mărimea inițială, noua imagine va fi deteriorată față de cea originală datorită procesului de interpolare.
În principiu, scalarea este un proces simplu:
magnificare – repetări de pixeli, în funcție de metoda de interpolare aleasă,
shrinking – duce la posibilitatea pierderii detaliilor fine din imagine
De aceea pot fi folosite diverse tehnici, cum ar fi:
reprezentarea mediană a unui bloc de pixeli, care înlocuiește blocul cu valoare lui mediană,
reprezentarea medie a unui bloc de pixeli, care înlocuiește blocul cu valoare lui medie.
Procesul de zoom-ing din cadrul aplicației se face prin următoarele metode:
– pentru Zoom In (+):
void CImageProcessDoc::OnZoomIn()
{
unsigned char * new_buffer = new unsigned char [4 * bytes_per_pixel * rows * cols];
for (i=0; i< rows; i++)
for (int j =0; j < cols; j ++)
{
new_buffer [2 * i * 2 * cols + j * 2] = buffer [i * cols + j];
new_buffer [2 * i * 2 * cols + j * 2 + 1] = buffer [i * cols + j];
new_buffer [(2 * i + 1) * 2 * cols + j * 2] = buffer [i * cols + j];
new_buffer [(2 * i + 1) * 2 * cols + j * 2 + 1] = buffer [i * cols + j];
}
buffer = (unsigned char * )realloc (buffer,4 * bytes_per_pixel * rows * cols * sizeof (unsigned char) );
memcpy (buffer , new_buffer, 4 * bytes_per_pixel * rows * cols);
delete new_buffer;
rows = 2 * rows;
cols = 2 * cols;
number_of_pixels = bytes_per_pixel * rows * cols;
/* revisualization of the image */
UpdateAllViews (NULL);
}
– pentru Zoom Out (–):
void CImageProcessDoc::OnZoomOut()
{
unsigned char * new_buffer = new unsigned char [bytes_per_pixel * (rows/2) * (cols/2)];
for (i = 0; i < rows/2; i ++)
for (int j = 0; j < cols/2; j ++)
new_buffer [i * (cols/2) + j] = buffer [i * 2 * cols + 2 * j + 2];
buffer = (unsigned char * )realloc (buffer,bytes_per_pixel * rows * cols * sizeof (unsigned char)/4 );
memcpy (buffer , new_buffer, bytes_per_pixel * rows * cols / 4);
delete new_buffer;
rows = rows/2;
cols = cols/2;
number_of_pixels = bytes_per_pixel * rows * cols;
/* revisualization of the image */
UpdateAllViews (NULL);
}
e). Rotația imaginii
Rotația imaginii se face centrat la un pixel sau la origine, cu un unghi dat α, pe baza relațiilor:
origine:
xsursă = xdestinație·cos α + ydestinație·sin α
ysursă = ydestinație·cos α – xdestinație·sin α
Această relație rotește imaginea raportat la punctul (0,0), dar dacă imaginea este centrată în (xcentr,y centr), relația devine:
xsursă = (xdestinație – xcentr)·cos α + (ydestinație – ycentr)·sin α
ysursă = (ydestinație – ycentr)·cos α – (xdestinație – xcentr)·sin α
În cadrul aplicației, această operație este definită prin următorul cod sursă:
void CImageProcessDoc::OnRotLeft()
{
unsigned char * new_buffer = new unsigned char [bytes_per_pixel * rows * cols];
for (i = 0; i < rows; i++)
for (int j =0; j < cols; j++)
{
new_buffer [ (cols -1 – j)* rows*bytes_per_pixel + i*bytes_per_pixel] = buffer [i * cols * bytes_per_pixel+ j * bytes_per_pixel];
if ( bytes_per_pixel == 3)
{
new_buffer [ (cols -1 – j)* rows*bytes_per_pixel + i*bytes_per_pixel + 1] = buffer [i * cols * bytes_per_pixel + j * bytes_per_pixel + 1];
new_buffer [ (cols -1 – j)* rows*bytes_per_pixel + i*bytes_per_pixel + 2] = buffer [i * cols * bytes_per_pixel + j * bytes_per_pixel + 2];
}
}
memcpy (buffer , new_buffer, bytes_per_pixel * rows * cols);
int aux;
aux = cols;
cols = rows;
rows = aux;
delete new_buffer;
/* revisualization of the image */
UpdateAllViews (NULL);
}
f). Translația
Constă din deplasarea unei secțiuni a imaginii la o altă locație în imagine. Este posibil ca destinația să se suprapună peste sursă și în acest caz trebuie memorate aceste valori pentru a evita distrugerea imaginii.
g). Oglindirea
Reprezintă oglindirea imaginii după axa Ox sau Oy. Oglindirea orizontală se face după axa Oy, iar oglindirea verticală se face după axa Ox. Practic, pixelii vor fi reorganizați, neefectuându-se nici o operație de transformare.
Codul sursă ala cestei operații este:
void CImageProcessDoc::OnProcessMirror()
{
unsigned char * new_buffer = new unsigned char [bytes_per_pixel * rows * cols];
for (i = 0; i < rows; i++)
for (int j =0; j < cols; j++)
new_buffer [i * cols + j] = buffer [i * cols + cols – j];
memcpy (buffer , new_buffer, bytes_per_pixel * rows * cols);
delete new_buffer;
/* revisualization of the image */
UpdateAllViews (NULL);
}
3.4. Procesarea pe cadre
Implică considerarea a două sau mai multe imagini, imaginea de ieșire obținându-se ca urmare a unei operații care se efectuează între mai multe imagini.
Principalele operații care se efectuează sunt:
adunarea,
scăderea,
operații logice (ȘI / SAU),
media.
Adunarea
De obicei nu se face adunare simplă pentru că poate să apară depășire. De aceea se folosește relația:
Noul_pixel = α · pixel1 + (1 – α)· pixel2
Astfel, α poate fi specificat astfel încât una dintre imagini sa fie predominantă.
Scăderea
Este folosită pentru a determina diferențele dintre imagini, folosită mai ales în procesul de supraveghere. În acest caz se consideră un prag care declanșează alarma (algoritmii mai complicați se mai ghidează și în funcție de străluciri, etc…).
Operații logice
Operația AND se folosește pentru a masca o parte din imagine.
Operația OR este folosită pentru a adăuga părți dintr-o altă imagine peste imaginea inițială.
Media
Practic, reprezintă filtrul temporal și deci imaginile trebuie să fie statice.
Elimină doar zgomotele necorelate.
REZULTATE EXPERIMENTALE
4. Rezultate experimentale
Aplicația de față fost implementată în limbajul VISUAL C++ versiunea 6.0. Această aplicație a fost gândită pentru a încărca imagini în formatele PGM – Portable Graymap și PPM – Portable Pixmap (aceste formate aparțin de formatul PNG – Portable Network Graphics), a efectua diferite operații asupra imaginii deja încărcate și vizualizări ale acesteia în urma acestor procesări, plus posibilitatea salvării sau listării imaginilor astfel obținute.
Aplicația are o interfață gandită pentru o utilizare cât mai ușoară, beneficiind și de combinațiile uzuale de taste specifice sistemului de operare Windows (cum ar fi „CTRL+O” pentru „Open”, „CTRL+N” pentru „New”, etc.). De asemenea, se mai poate observa și bara cu butoane pentru a se lucra cât mai ușor cu funcțiile uzuale ale oricărei aplicații sau a oricărui program.
Astfel, pentru a incepe să se lucreze în cadrul aplicației este necesar mai întâi a se încărca o imagine. Acest lucru se poate face prin accesarea meniului File / Open …, sau prin acționarea butonului de pe bară.
În urma acestei acțiuni rezultă fereastra:
Selectând fișierul cu numele „BIRDGIRL” se va încărca acea imagine și se va afișa în fereastra aplicației:
În momentul de față se poate efectua oricare dintre procesările de imagine care sunt implementate în acest program. Acestea sunt:
în cadrul meniului POINT OPERATIONS:
Arithmetic Operations:
Add
Substract
Multiply
Divide
LUT (Look-Up-Table)
Histogram:
Image Histogram
Histogram Equalization
Inverse
în cadrul meniului AREA OPERATIONS:
Convolution
Filters:
Bluring – filtre trece jos (implementate cu diferite măști)
Sharpening – filtre trece sus (deasemena, implementate cu diferite măști)
Binary
Gray Scale
în cadrul meniului GEOMETRIC OPERATIONS:
Zoom:
Zoom In (+)
Zoom Out (–)
Horizontal Mirror
Rotate
Deci, dacă dorim să vizionăm histograma acestei imagini va trebui să accesăm meniul Point Operations / Histogram / Image Histogram. Astfel, histograma acestei imagini este:
Dacă se aplica o egalizare de histograma asupra imaginii, histograma va deveni:
iar imaginea rezultată în urma egalizării va fi:
Dacă rămânem tot în meniul POINT OPERATIONS (operații punctuale asupra imaginilor), în submeniul operațiilor aritmetice (Arithmetic Operations) putem selecta una dintre operațiile specifice: adunare, scădere, înmultire sau împărțire. Operațiile adunare și scădere operează asupra strălucirii imaginii, iar operațiile de înmulțire și împărțire operează asupra contrastului imaginii.
De exemplu, dacă se dorește aplicarea unei operații de adunare vom fi întâmpinați de o fereastră de dialog în care se va introduce coeficientul de calculare al operației (această fereastră este comună pentru toate cele patru operații).
După introducerea coeficientului (în cazul de față 75), imaginea rezultată în urma operației va fi:
iar histograma:
Dacă s-ar fi efectuat o operație de înmulțire cu coeficientul 1.8 ar fi rezultat imaginea:
respectiv histograma:
În urma operației de negativare se va vizualiza următoarea imagine:
În cazul histogramei se poate observa inversarea nivelelor de negru (0) cu cele de alb (255):
Din cadrul meniului AREA OPERATIONS (operații spațiale) am selectat:
filtrare trece jos, care reprezintă de fapt o operație de bluring. Masca de conoluție folosită a fost:
filtrare trece sus, care reprezintă de fapt o operație de sharpening. În acest caz masca de conoluție folosită a fost:
binarizare (cu pragul 128):
Din cadrul meniului GEOMETRIC OPERATIONS (operații geometrrice) am selectat:
oglindire orizontală:
În urma acestei operații histograma imaginii nu se modifică deoarece nu se modifică valorile intenstăților pixelilor.
rotație (care este efectuată în sens trigonometric cu un unghi prestabilit de 90o, fără interpolare). Înaintea acetei operații am efectuat și o operație Zoom Out.
La fel ca în cazul oglindirii, histograma nu se modifică.
Toate aceste exemple au fost executate asupra unei imagini în format PGM.
În cazul imaginilor în format PPM numărul de operații posibile a fi efectuate este limitat datorita formatului mai deosebit.
Imaginea în format PPM asupra căreia voi exemplifica câteva operații este:
Operațiile sunt:
transformarea imaginii într-una alb-negru (gray-scale):
negativarea:
binarizarea:
În urma binarizării unei imagini color se poate observa ca acesata nu se face perfect datorită faptului ca aceasta se execută doar asupra luminanței imagini, în timp ce crominanța acesteia rămâne neschimbată.
CONCLUZII
Prelucrarea digitală a imaginilor este un domeniu în rapidă și continuă dezvlotare, cu aplicații multiple în inginerie, știință și economie. De-a lungul ultimului deceniu s-a observat un interes crescând pentru morfologia imaginilor, rețele neuronale, prelucrarea imaginilor, compresia, recunoașterea și analiza de imagini. Adesea rezultatele analizei prezintă asemănări foarte reduse cu caracteristicile obișnuite ala imaginilor, indispensabile ochiului uman pentru interpretare sau înțelegere.
Lucrarea de față cuprinde noțiuni fundamentale din domeniul prelucrării de imagini. Nivelul prezentării a fost gândit pentru a oferi oricărei persoane intersate de acest domeniu vast o imagine de ansamblu a acestuia.
Fără a avea pretenția unei lucrări de referință în domeniu, consider lucrarea utilă pentru studenți și specialiști dornici să abordeze această incitantă ramură a tehnologiei. Atât Memoriul Tehnic cât și Breviarul de Calcul ar putea fi incluse în cadru unui îndrumător de laborator de Prelucrări de imagini.
De asemenea, aplicația practică oferă posibilitatea orcărui student de a putea studia câteva dintre cele mai importante prelucrări care se efectuează în mod uzual asupra imaginilor.
Evident, orice observații sau sugestii referitoare la conținut sunt binevenite și ar putea fi luate în considerare în eventualitatea unei dezvoltări ulterioare. Aplicația practică ar putea fi cu ușurință dezvoltată, deoarece mediul de programare Visual C++ ar putea fi accesibil oricărui student și ar putea oferi posibilitatea lărgirii utilității acesteia.
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: Utilizarea Visual C++ In Procesarea Imaginilor (ID: 150762)
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.
