Sunteți pe pagina 1din 26

4.4.

2 Proiecții

Complexitatea calculului în aplicații grafice orientate 3D este datorată celei de-a treia
dimensiuni din WCS comparativ cu reprezentarea bidimensională în NDCS. Soluția aplicată este
folosirea proiecțiilor ca aplicații de transformare a obiectului 3D în obiectul 2D.

Proiecția unui obiect tridimensional se definește astfel: razele de proiecție (numite proiectori)
trec printr-un punct dat al spațiului (numit centru de proiecție) și prin fiecare punct al obiectului,
intersectând planul de proiecție pe care se realizează proiecția.

Proiecțiile plane pot fi paralele sau perspective. Acestea diferă prin distanța dintre centrul de
proiecție și planul de proiecție. Dacă distanța este finită se obține proiecția perspectivă (figura 4-12);
dacă distanța este infinită se obține proiecția paralelă (figura 4-13). Proiecția perspectivă este
caracterizată de poziția centrului de proiecție și de planul de proiecție. Proiecția paralelă este
caracterizată de direcția de proiecție și de planul de proiecție.

Figura 4-12 Proiecție perspectivă a segmentului relativ la centrul de proiecție.

Figura 4-13 Proiecție paralelă a segmentului relativ la direcția de proiecție.

Prin parametrizarea definițiilor proiecțiilor, se obțin diferite cazuri particulare: proiecția


perspectivă cu un punct de fugă, cu două puncte de fugă, cu trei puncte fugă; proiecția paralelă
ortografică (elevație, plan, profil, axonometrică - izometrică), respectiv oblică (cabinet, cavalieră, alte
cazuri).

A. Proiecția perspectivă

Proiecția perspectivă este caracterizată de poziția centrului de proiecție și de planul de


proiecție (figura 4-12). Astfel, liniile paralele între ele și neparalele cu planul de proiecție converg spre
un punct de fugă (figura 4-14). Dacă liniile sunt paralele cu axele principale, punctul de fugă se numește
punct de fugă axial. Într-o asemenea proiecție pot exista cel mult trei puncte de fugă.

103
Spre exemplu, dacă planul de proiecție intersectează axa Z atunci doar această axă are punct
de fugă, întrucât liniile paralele cu axele Y și X sunt paralele și în planul de proiecție (nu au puncte de
fugă). Din acest motiv, numărul punctelor de fugă reprezintă un criteriu important de clasificare a
proiecțiilor perspective. În practică, proiecțiile perspective cu două puncte de fugă se folosesc în
proiecția arhitecturală și industrială.

Figura 4-14 Proiecții perspective.

În funcție de înclinarea planului de proiecție față de centrul de proiecție și de obiect pot fi


identificate două tipuri de proiecții perspective:

1. Perspectiva ascendentă (punctul de fugă este situat deasupra obiectului): este cazul
centrului de proiecție privind obiectul de jos și aproape.

2. Perspectiva descendentă (punctul de fugă este situat sub obiect): este cazul centrului de
proiecție privind obiectul de sus și aproape. Pentru determinarea coordonatelor în perspectiva pentru
un punct se rezolvă sistemul format de ecuația planului de proiecție și ecuația razei vizuale. Acest mod
de procesare conduce la calcule greoaie, necesitând un efort de calcul semnificativ.

B. Proiecția paralelă

În funcție de unghiul dintre direcția de proiecție și normala la planul de proiecție, proiecția


paralelă poate fi:

B.1. Proiecția paralelă ortografică - dacă direcția de proiecție coincide cu normala la planul de
proiecție. În acest tip de proiecție se folosește ca plan de proiecție un plan perpendicular pe axele de
coordonate, obținându-se proiecțiile: vedere plan (sau vedere de sus), vedere profil (sau vedere
laterală) și vedere frontală (sau elevație). Aceste proiecții au proprietatea de a păstra distanțele și
unghiurile, dar cele trei figuri rezultate nu dau informații detaliate despre natura tridimensională a
obiectului.

Pentru punctul P de coordonate omogene (𝑥, 𝑦, 𝑧, 1) aparținând obiectului ce va fi supus


proiecției ortografice obținem următoarele transformări:

B.1.1. Vederea frontală

104
1 0 0 0
0 1 0 0
(4-43) 𝑉𝐹𝑋𝑂𝑌 =[ ] (dispare axa Z din reprezentare).
0 0 0 0
0 0 0 1
Matricea din relația (4-43) caracterizează sistemul de transformări:
𝑥′ = 𝑥
(4-44) {𝑦 ′ = 𝑦
𝑧′ = 0

B.1.2. Vederea de sus

Transformarea compusă este o combinație între o rotație de 900 în jurul axei X și proiecția pe
planul xOy.
1 0 0 0 1 0 0 0
𝑥′ = 𝑥
0 1 0 0 0 0 0 0
(4-45) 𝑉𝑆 = 𝑉𝐹 ⋅ 𝑃𝑋𝑂𝑌 =[ ]⋅[ ], astfel încât {𝑦 ′ = 𝑧 .
0 0 0 0 0 −1 0 0
0 0 0 1 0 0 0 1 𝑧′ = 0

B.1.3. Vederea laterală

Folosește transformările: rotație de unghi 900 în jurul axei Y și proiecție pe planul xOy:
1 0 0 0 0 0 1 0
𝑥′ = 𝑧
0 1 0 0 0 1 0 0
(4-46) 𝑉𝐿 = [ ]⋅[ ], astfel încât {𝑦 ′ = 𝑦.
0 0 0 0 −1 0 0 0
0 0 0 1 0 0 0 1 𝑧′ = 0

B.2. Proiecție paralelă oblică - dacă unghiul dintre direcția de proiecție și normala la planul de
proiecție este nenul. Astfel de proiecții se obțin prin proiectarea unui obiect de-a lungul unor linii
paralele care nu sunt perpendiculare pe planul de proiecție. Proiecția unei fețe a obiectului, paralelă
cu planul de proiecție, păstrează unghiurile și permite măsurarea corectă a distanțelor iar proiecțiile
celorlalte fețe permit doar măsurarea distanțelor (figura 4-15).

Figura 4-15 Suprafața de trasare pentru proiecția: (a) oblică; (b) izometrică.

Se convine ca o proiecție oblică pe planul xOy să fie caracterizată prin punctul în care este
proiectat punctul 𝑀(0,0,1) pe planul xOy, distanța 𝑟 de la origine până la proiecție și unghiul α dintre

105
raza 𝑟 și Ox. În funcție de aceste valori se pot exprima coordonatele 𝑥′, 𝑦′ si 𝑧′ ale proiecției oblice pe
planul xOy a unui punct oarecare de coordonate (𝑥, 𝑦, 𝑧):
𝑥 ′ = 𝑥 + 𝑧 ⋅ 𝑟 ⋅ cos 𝛼
(4-47) { 𝑦 ′ = 𝑦 + 𝑧 ⋅ 𝑟 ⋅ sin 𝛼 ,
𝑧′ = 0
în coordonate omogene:
𝑥′ 1 0 𝑟 ⋅ cos 𝛼 0 𝑥
𝑦′ 0 1 𝑟 ⋅ sin 𝛼 0 𝑦
(4-48) [ ′] = [ ] ⋅ [ ].
𝑧 0 0 0 0 𝑧
1 0 0 0 1 1
Proiecția ortogonală este un caz particular al proiecției oblice (pentru 𝑟 = 0). Alte cazuri
particulare: proiecția cavalieră (pentru 𝑟 = 1), proiecția cabinet (pentru 𝑟 = 1/2). În proiecția
cavalieră direcția de proiecție face un unghi de 450 cu planul de proiecție. În consecință, proiecția unui
segment de dreaptă pe planul de proiecție are aceeași lungime cu segmentul, dacă segmentul este
perpendicular pe plan. În cazul proiecției cabinet, direcția de proiecție face un unghi arctan(2) cu planul
de proiecție. În consecință, segmentul perpendicular pe planul de proiecție se proiectează la jumătate
din lungimea reală.

Alte tipuri de proiecții ortogonale sunt proiecțiile axonometrice izometrice, pentru care direcția
de proiecție face unghiuri egale cu cele 3 axe ale sistemului de referință iar factorii de scalare pentru
lungimi sunt egali. Proiecțiile izometrice pot fi realizate după opt direcții.

4.4.3 Transformări proiective

Să determinăm matricea 4x4 caracteristică unei proiecții oarecare. Se presupune că în


proiecția respectivă planul de proiecție este perpendicular pe axa Z iar pentru proiecția paralelă planul
de proiecție este 𝑧 = 0. Fie punctul oarecare 𝑃(𝑥, 𝑦, 𝑧) și 𝑃′(𝑥′, 𝑦′, 𝑧′) proiecția sa.

Cazul 1. Centrul de proiecție perspectivă se află în originea sistemului de coordonate iar planul
de proiecție este 𝑧 = 𝑑 (figura 4-16).

Figura 4-16 Proiecție perspectivă având centrul de proiecție în originea sistemului de coordonate.

Relațiile caracteristice rezultate din asemănarea triunghiurilor generate prin proiectarea


punctului P în P’ (obiectele mai depărtate apar mai mici) sunt:

106
𝑥′ 𝑥 1 0 0 0
= 0 1 0 0
(4-49) {𝑦𝑑′ 𝑧
, iar matricea acestei transformări este: 𝑀𝑝𝑒𝑟𝑠 =[ ].
𝑦 0 0 1 0
=
𝑑 𝑧 0 0 1 ⁄𝑑 1
Conform acestei ultime relații, un punct în coordonate omogene se exprimă prin:
(𝑥, 𝑧, 𝑦, 𝑤)𝑇 = 𝑀𝑝𝑒𝑟𝑠 (𝑥, 𝑧, 𝑦, 1)𝑇 , iar coordonatele carteziene asociate punctului omogen se obțin prin
divizarea cu w, deci: (𝑥, 𝑦, 𝑧, 1) = (𝑥/𝑤, 𝑦/𝑤, 𝑧/𝑤, 1).

Cazul 2. Centrul de proiecție se află la 𝑧 = −𝑑 (figura 4-17) iar planul de proiecție este 𝑧 = 0.

Figura 4-17 Proiecție perspectivă având planul de proiecție xOy.

Relațiile caracteristice rezultate din asemănarea triunghiurilor generate prin proiectarea


punctului P în P’ sunt:

𝑥′ 𝑥 1 0 0 0
= 𝑧+𝑑 0 1 0 0
(4-50) {𝑦𝑑′ , iar matricea transformării devine: 𝑀′ = [ ].
𝑦 0 0 0 0
= 𝑧+𝑑
𝑑 0 0 1⁄𝑑 1
Acest caz include proiecțiile paralele: spre exemplu, pentru 1/𝑑 → 0 se obține proiecția
𝑥′ = 𝑥
ortografică pe planul 𝑧 = 0 de ecuație: {𝑦 ′ = 𝑦.
𝑧′ = 0
3. Planul de proiecție este 𝑧 = 𝑧𝑝 iar centrul de proiecție se află la distanța 𝑞 de punctele
(0, 0, 𝑧𝑝 ) pe direcția vectorului normalizat (𝑑𝑥, 𝑑𝑦, 𝑑𝑧). Dreapta ce unește centrul de proiecție și
punctul P poate fi descrisă parametric:

𝑑: 𝐶𝑝 + 𝑡 (𝑃 − 𝐶𝑃), 𝑡 ∈ 𝑅.

𝐶𝑝 ∈ 𝑑, prin urmare: 𝐶𝑝 = (0, 0, 𝑧𝑝) + 𝑞(𝑑𝑥, 𝑑𝑦, 𝑑𝑧).


𝑥 ′ = 𝑞 ∗ 𝑑𝑥 + 𝑡(𝑥 − 𝑞 ∗ 𝑑𝑥)
(4-51) { 𝑦 ′ = 𝑞 ∗ 𝑑𝑦 + 𝑡(𝑥 − 𝑞 ∗ 𝑑𝑦) .

𝑧 = (𝑧𝑝 + 𝑞 ∗ 𝑑𝑧) + 𝑡(𝑧 − 𝑧𝑝 + 𝑞 ∗ 𝑑𝑧)
𝑧𝑝 −(𝑧𝑝 +𝑞∗𝑑𝑧)
Cum 𝑃′ ∈ planului (𝑧′ = 𝑧𝑝 ), obținem 𝑡 = 𝑧−(𝑧𝑝 +𝑞∗𝑑𝑧)
.

Înlocuind 𝑡 în ecuațiile lui 𝑥′ și 𝑦′, se obține matricea transformării:

107
−𝑑𝑥 𝑑𝑥
1 0 𝑧𝑝 ∗
𝑑𝑧 𝑑𝑧
−𝑑𝑦 𝑑𝑦
0 1 𝑧𝑝 ∗
𝑑𝑧 𝑑𝑧
(4-52) 𝑀𝑔𝑒𝑛 = −𝑧𝑝 2 1 .
0 0 𝑞∗𝑑𝑧
𝑧𝑝 ∗ 𝑞∗𝑑𝑧+𝑧
𝑝
−1 𝑧𝑝
[0 0 𝑞∗𝑑𝑧 𝑞∗𝑑𝑧
+1 ]

Din expresia (4-52) se pot deduce următoarele cazuri particulare:

𝑧𝑝 = 𝑑
1. Matricea perspectivă se obține pentru { 𝑞=𝑑 .
(𝑑𝑥, 𝑑𝑦, 𝑑𝑧) = (0,0, −1)

𝑧𝑝 = 0
2. Proiecția ortogonală pe planul 𝑧 = 0: { 𝑞=0 .
(𝑑𝑥, 𝑑𝑦, 𝑑𝑧) = (0,0, −1)
𝑧𝑝 = 0
3. Proiecția cavalieră pe planul 𝑧 = 0: { 𝑞=∞ .
(𝑑𝑥, 𝑑𝑦, 𝑑𝑧) = (cos𝛼, sinα, −1)
𝑧𝑝 = 0
4. Proiecția cabinet pe planul 𝑧 = 0: { 𝑞=∞ .
(𝑑𝑥, 𝑑𝑦, 𝑑𝑧) = (1⁄2 ∗ cosα, 1⁄2 ∗ 𝑠𝑖𝑛𝛼, −1)

Pentru 𝑞 ≠ ∞, transformarea generală 𝑀𝑔𝑒𝑛 definește o proiecție perspectivă cu un punct de


fugă.

Punctul de fugă se obține astfel: (𝑥𝐹 , 𝑦𝐹 , 𝑧𝐹 )𝑇 = 𝑀𝑔𝑒𝑛 (0, 0, 1, 0)𝑇 (prin multiplicarea
𝑥𝐹 = 𝑞 ∗ 𝑑𝑥
punctului de la infinit de pe axa 𝑍 cu 𝑀𝑔𝑒𝑛 ): {𝑦𝐹 = 𝑞 ∗ 𝑑𝑦.
𝑧𝐹 = 𝑧𝑃

4.4.4 Structuri de date pentru reprezentarea obiectelor în spațiul tridimensional

Pentru a caracteriza un obiect 3D trebuie specificate:

1. punctele: printr-un vector tridimensional de numere reale pentru reprezentarea sa în


coordonate carteziene sau quadridimensional pentru reprezentarea sa în coordonate omogene.

2. liniile: prin referințe către punctele de sfârșit într-un vector de puncte aplicate mulțimii
punctelor de la aliniatul anterior.

3. suprafețele: prin referințele la linii în mulțimea liniilor definită la etapa anterioară.

108
Puncte: 8
Linii: 12
Fețe: 6

Figura 4-18 Cubul unitate.

Fie cubul unitate (figura 4-18) caracterizat de 8 puncte, 12 linii și 6 fețe, cu un vârf în originea
sistemului de coordonate (vârfurile vor fi descrise de coordonatele: (0,0,0), (1,0,0), … ). În cazul în care
cubul unitate nu este în origine și nu are fețele paralele cu planele sistemului de coordonate, acestea
se obțin aplicând transformări de rotație și translație.

Liniile se caracterizează prin perechi de puncte; spre exemplu, 𝑙𝑖𝑛𝑖𝑎1 (𝑂1 , 𝑂2 ), sau, în mulțimea
punctelor, liniile se reprezintă ca referințe de la fiecare punct la punctele ce caracterizează liniile
respective. Fețele pot fi numite prin indicii ale liniilor care le generează - spre exemplu, 𝐹1 (1,2,3,4),
astfel încât o față se poate caracteriza prin punctele ce definesc muchiile caracteristice.

Algoritm pentru afișarea vârfurilor:


for i = 1 to nr_pct
display_point (x[i], y[i], z[i]);

Pentru a afișa fiecare linie:


for i = 1 to nr_linii
first_i = linie_indice[first,i];
last_i = linie_indice[last,i];
move_to(x[first_i], y[first_i], z[last_i]);
draw_to(x[last_i], y[last_i], z[last_i]);

Pentru afișarea unei suprafețe:


for i = 1 to nr_linii_ale_suprafetei[facet]
j = facet_indice[i] //prelucrarea indicelui liniei
first_j = linie_indice[first, j];
last_j = linie_indice[last, j];
move_to(x[first_j], y[first_j], z[first_j]);
draw_to(x[last_j], y[last_j], z[last_j]);

Pentru a afișa întregul obiect nu este necesară afișarea tuturor suprafețelor deoarece ar
conduce la desenarea suprapusă a mai multor linii. Algoritmi din categoria celor descriși anterior
trebuie modificați pentru transformarea coordonatelor (𝑥, 𝑦, 𝑧) în coordonatele
(𝑥𝑒𝑐𝑟𝑎𝑛 , 𝑦𝑒𝑐𝑟𝑎𝑛 ) folosind transformări perspective și rutine de afișare pe ecran. Astfel, succesiunea
etapelor de transfer pentru prelucrarea coordonatelor pixelului corespunzător punctelor (𝑥, 𝑦, 𝑧) sunt:
transformare_3D, decupare_3D, transformare proiectivă, transformare_2D, decupare 2_D,
transformare din coordonate de fereastră în coordonate de ecran.

109
4.4.5 Concluzii privind procesarea obiectelor în spațiul tridimensional

Dezvoltarea algoritmilor pentru manipularea și transformarea unui obiect 3D într-o fereastră


de vizualizare pe ecran trebuie să răspundă înainte de procesare la următoarele întrebări:

1. Unde este obiectul? (coordonatele 3D: x, y si z);

2. Unde este ecranul? caracterizat prin punctul de referință al ferestrei de vizualizare


(𝑣𝑥 , 𝑣𝑦 , 𝑣𝑧 );

3. Unde este planul normal? (care este orientarea ecranului față de planul normal);

4. Care este dimensiunea ferestrei de vizualizare și unde este centrul de proiecție?

5. Care este direcția de proiecție?

6. Cum este reprezentat obiectul? Prin urmare, transformarea unui obiect 3D necesită:
translația, rotația, modificarea axei Z, înclinarea și scalarea, toate aceste transformări fiind precedate
de proiecții. Vom exemplifica prin aplicația ViewFrame, care permite observarea unui obiect 3D în
mișcare (figurile 4-19, 4-20, 4-21) sub o sursă de lumină. Funcțiunile controalelor și utilizarea appletului
sunt descrise mai jos.

Figura 4-19 Transformări 3D cu sursă de lumină aplicate unui cub.

Figura 4-20 Transformări 3D cu sursă de lumină aplicate unei piramide.

110
Figura 4-21 Transformări 3D cu sursă de lumină aplicate unei prisme.

Secțiunea Obiecte:

Butonul de selecție a figurii geometrice 3D (Modelul obiectului) permite utilizatorului alegerea


unui obiect dintr-o listă de trei: Cub (figura 4-19), Piramida (figura 4-20), Prisma (figura 4-21). La
modificarea modelului obiectului, animația este repornită cu noul model:

- Butonul Reset Camera aduce camera (observatorul) în poziția inițială (stabilită la inițializarea
applet-ului);

- Butonul Reset Obiect aduce obiectul în poziția inițială (originea WCS).

Secțiunea Animație permite alegerea modului în care se va realiza mișcarea:

- Butonul Rotație (după) permite alegerea axei și direcției în jurul căreia se va roti obiectul;

- Butonul Răsucire (după) permite alegerea axei și direcției în jurul căreia se va răsuci obiectul
(axa trece prin centrul obiectului);

- Butonul Start pornește animația;

- Butonul Stop oprește animația.

Secțiunea Manual permite modificarea poziției obiectului său camerei:

- Butonul Mută permite alegerea subiectului care va fi deplasat, obiectul sau camera.

- Butonul Metoda permite alegerea acțiunii ce se va realiza asupra subiectului (Translație,


Răsucire sau Rotație). Pentru varianta Camera, opțiunea Răsucire este dezactivată.

- Butoanele de acțiune permit realizarea mutării subiectului, în condițiile în care întâi a fost
stopată animația (Camera=observatorul poate fi deplasat/ă în timpul animației).

- Acționarea mouse-ului permite mutarea (translatarea sau răsucirea) obiectului în funcție de


metoda aleasă.

Appletul ViewFrame.java este descris mai jos. Toate fișierele sursă și modelele obiectelor
necesare sunt adăugate în Anexa III.

111
Applet 4-5. ViewFrame.java: obiect 3D în mișcare, sub o sursă de lumină
(vezi trimiterile în pagina web).

112
5 SISTEME MULTIMEDIA

5.1 Formatele fișierelor de grafică

5.1.1 Modele de reprezentare

Optimizarea lucrărilor grafice și proiectarea aplicațiilor grafice portabile necesită o bună


alegere a formatului fișierului grafic. Modelele de desenare tradiționale ce intervin asupra fonturilor
de caractere și asupra marginilor sunt: modul bitmap și modul vectorial. Fiecare din aceste modele
influențează crearea imaginilor, modificările ulterioare, facilitățile de import/export între aplicații,
calitatea imprimării.

5.1.2 Modul bitmap (hărți de biți)

Imaginile bitmap sunt stocate punct cu punct. Aplicațiile bitmap construiesc imaginea prin
umplerea fiecărui punct, ca un mozaic, putând fi ușor editat folosind un instrument pensulă
(Paintbrush). Modul bitmap este folosit de scanner pentru analiza imaginii și este singurul mod de
extragere pentru periferice numerice.

Limitările modelului bitmap sunt date atât de conservarea definiției imaginii de la creare la
imprimare, fără a ține cont de rezoluția reală a dispozitivelor de ieșire (afișare sau imprimare),
rezultând o redare neoptimizată a imaginii, cât și de ocuparea dezavantajoasă a spațiului de memorie.
Culoarea fiecărui punct ce compune imaginea bitmap este reprezentată binar, de unde și necesitatea
unui spațiu de memorie foarte mare.

FORMAT .TIF .GIF .TGA .BMP .JPG


DOMENIUL DE schimburi de schimb de imagini de format de video
APLICAȚIE fișiere fișiere sinteză imagini în Win
bitmap și OS/2
MĂRIMEA PE DISC 185 KB sau 17 MB 67 KB 374 KB 17 MB 303 KB
(exemplu comparativ)
MĂRIMEA FIȘIERULUI 17 MB 5,8 MB 17 MB 17 MB 17 MB
DECOMPRIMAT
COMPRESIE posibilă DA DA NU reglabilă
SISTEME DE 8b, 24b, 32b index pe 8b 8b, 16b, 4b, 8b, 24b 8b, 24b
CODIFICARE A CULORII 24b, 32b
NUMĂR DE CULORI max. 16,7 mil max. 256 max. 16,7 max. 16,7 mil -
mil
OBSERVAȚII format nerecomandat
standard pentru imagini
complexe

Tabelul 5-1. Principalele formate de fișiere bitmap.

Avantajele modelului bitmap se referă la buna adaptare pentru desenarea imaginilor complexe
(fotografii), fiind folosit de produse software de retușare a imaginii și prezentare asistată de calculator.

113
Aplicațiile care utilizează imagini în format hărți de biți se numesc aplicații de pictură (paint
programs). Principalele formate de fișiere bitmap sunt comparate în tabelul 5-1.

TIF (Tag Image File Format) este un format bitmap propus de Aldus-Microsoft. Permite o
codificare adaptată cel mai bine schimbului de imagini între aplicații și sisteme (cu condiția folosirii în
format necomprimat). În practică există diferite tipuri de format TIF (prin deosebirea algoritmului de
comprimare facultativ), formatul fiind irecuperabil de la o aplicație la alta. Versiunea 6.0 a formatelor
TIF (ultima) permite salvarea în standardul CMYK. Formatul permite codificarea imaginilor
monocrome, nuanțe de gri sau color (RGB pe 8b și pe 24b), cu diferite rezoluții.

TGA (TarGA) este un format bitmap folosit în aplicații de prelucrare a imaginilor de gamă înaltă
(imagini de sinteză sau pentru design industrial).

GIF (Graphics Interchange Format), format bitmap propus de CompuServe, este folosit pentru
schimbul de fișiere din rețelele publice (inclusive World Wide Web). Există două variante ale
standardului: GIF87a și GIF89a. Diferențele între cele două formate sunt minore. Are o rată de
compresie ce permite utilizarea extensivă, în special pentru scanarea fotografiilor.

Formatul GIF folosește pentru comprimare algoritmul Lempel-Ziv Welch (o variantă a


algoritmului de codificare Huffman, vezi secțiunea referitoare la compresii). Formatul permite
codificarea imaginilor monocrome, nuanțe de gri sau color, cu diferite rezoluții. Este limitat la
reprezentarea culorii pe 8 biți (256 culori) deci este folosit în special pentru imagini în culori distinctive,
dar și pentru codificarea imaginilor transparente (culoare dominantă neutră).

Figura 5-1 Rularea și stabilirea caracteristicilor unui fișier GIF animat folosind aplicația MS GIF Animator.

Un fișier GIF poate conține o secvență de mai multe cadre bitmap, care să constituie animație.
Cadrele sunt transmise la ecran cu sau fără pauză între ele, fiind folosite în special de proiectanții de
pagini web (figura 5-1).

JPG/JPEG (Joint Photographic Experts Group) comprimă imaginile color prin eliminarea
informațiilor superflue (neperceptibile cu ochiul) până la 5% din dimensiunea inițială (tehnică
denumită lossy compression), pe baza exploatării caracteristicilor anatomice de (in)sensibilitate a
ochiului uman. Din același motiv, acest format nu este recomandat reprezentărilor crochiurilor,
desenelor animate și imaginilor mono-culoare. O imagine JPEG este decomprimată automat la

114
deschiderea fișierului. Pot apare probleme de compatibilitate la recitirea fișierului JPEG cu alte aplicații
decât cea folosită la crearea lor.

Algoritmul de compresie parcurge patru pași: crearea matricei de pixeli (procesarea


eșantioanelor de 8x8 pixeli) și conversia schemei de culoare (în general folosind spații de culoare
bazate pe intensitate/ luminozitate și nu pe nuanțe RGB), procesarea DCT (Discrete Cosine
Conversion), cuantificare și codificări suplimentare. Calculele adiționale urmăresc transformarea într-
o structură unidimensională prin metoda modelului zig-zag (figura 1-16), în vederea pregătirii
transferului în format secvențial și a îmbunătățirii ratei de compresie.

Figura 5-2 Modelul zigzag aplicat unui fișier JPG.

Spre deosebire de formatul GIF, transparența este o mare problemă pentru formatul JPEG.
Formatul GIF utilizează o culoare (nefolosită în desen) pentru a marca suprafața imaginii ce va deveni
transparentă. Formatul JPEG nu folosește însă valori constante de culoare. După compresie, valoarea
unei celule este combinată cu valori ale celulelor apropiate și rotunjită la cel mai apropiat întreg. La
fiecare compresie valoarea se poate schimba, deci nu putem fi siguri ce culoare (intensitate) va avea
pixelul după o nouă decompresie. Acesta este și motivul pentru care pictogramele și cursoarele sunt
realizate în format GIF.

PNG (Portable Network Graphics) a fost proiectat pentru îmbunătățirea și înlocuirea


formatului comercial GIF. Algoritmul de compresie este LZ77 (folosit și în aplicațiile de arhivare zip,
gzip și pkzip). Formatul PNG este freeware (gratis) pentru uz comercial și propune trei modele:

- PNG gray_scale (nuanțe de gri, pixelii sunt reprezentați pe 16b valoare de iluminare, 0 = black,
256-1 - white);

- PNG true_color (pixelii sunt reprezentați folosind 24b valoare RGB, fiecare componentă
folosind 8b pentru specificarea influenței în culoarea pixelului, 0 – fără influență, 28-1 – influență
maximă);

- PNG palette_based (pixelii sunt reprezentați printr-un index de culoare dintr-o paletă de
culori.

BMP (BitMaP) este un format de fișier legat de sistemul de operare Windows și interfața
Presentation Manager OS/2. Este recunoscut de Clipboard-ul celor două medii grafice. Permite deci
schimb lejer între aplicații diferite. Este un format grafic independent de dispozitivul de ieșire, în sensul
că în momentul în care este transferat la ieșirea sistemului, driver-ul dispozitivului de ieșire (monitor,
imprimanta) traduce culorile specifice formatului de fișier în culorile curente ale dispozitivului.

Formatul BMP

115
Există două versiuni ale formatului de fișier grafic BMP pentru imagini Windows și două pentru
OS/2 (versiune veche/nouă). Versiunile Win/OS/2 vechi sunt identice, cele noi sunt diferite, deci există
aplicații care nu suportă toate formatele BMP: aplicații Windows cu format BMP OS/2 sau invers, sau
formatul BMP conține altceva decât imagine (icoană sau cursor) sau aplicația veche conține doar
versiunea veche BMP.

Formatul imagine BMP este proiectat pentru reprezentarea imaginilor de orice dimensiuni
folosind 1-24 biți pentru informații privind culoarea. Suportă compresii RLE (Run-Length Encoded) sub
Windows și Huffman 1D sub OS/2 (vezi secțiunea referitoare la compresia imaginilor). Imaginea este
stocată ca linii scanate ordonate bottom-up, ceea ce crează dificultăți la realizarea conversiilor de
format sau la imprimarea imaginii la imprimante matriceale.

Un fișier BMP conține, în ordine, elementele: header de fișier, header bitmap, paletă opțională,
bitmap propriu-zis. Variantele de format depind de header bitmap și paletă. Pentru versiunea
Windows, formatul este reprezentat de structurile:

Format vechi Format nou


BITMAPFILEHEADER BITMAPFILEHEADER
BITMAPCOREHEADER BITMAPINFOHEADER
BITMAPCOREINFO (imagine) BITMAPINFO (imagine)
RGBTRIPLE [ ] RGBQUAD [ ]
Tabelul 5-2. Structura formatului bitmap pentru sistemele Windows.

Intrările pentru paleta de culori în versiunea veche a formatului de fișier constau în 24b
(intensitatea RGB). În versiunea nouă are 4B, astfel încât paleta de culori poate fi citită ca vector de
date tip long. Imaginea în fișierul BMP este organizată ca o serie de linii scanate, prezentată începând
cu ultima linie către prima. Liniile scanate sunt completate totdeauna astfel încât să ocupe un număr
par de cuvinte duble de 32 biți. Pentru o imagine dată de n pixeli, fiecare pixel având o adâncime de d
biți, numărul de octeți pe linia scanată se calculează cu formula:

(5-1) NumărBytes/linie_scanată=((n*d+31)/32)*4.

Câmpurile nefolosite sau neimportante ale structurilor trebuie setate la 0.

Elementele structurii de informații BMP Windows sunt:

bfType (2B): validarea începutului de fișier BMP, plus alte indicații despre conținut. Pentru un
fișier imagine bitmap, câmpul conține valoarea hexa 4D42 (în forma lowbyte-highbyte rezultând
caracterele ASCII BM (BitMap).

BfSize: dimensiunea necomprimată a fișierului în Bytes

BfOffBits: offsetul (deplasamentul) față de începutul fișierului, în Bytes (deci de la începutul


structurii BITMAPFILEHEADER) până la începutul imaginii (bitmap propriu-zis). Se folosește pentru
localizarea poziției imaginii și pentru calculul numărului de intrări ale paletei:

(5-2) ncolors=(offBits-file_hdr_size-bitmap_hdr_size)/rgb_size.

BiSize: dimensiunea (în Bytes) a headerului bitmap, obținută deci ca un apel de funcție
Sizeof(BITMAPINFOHEADER). Se folosesc pentru indicarea versiunii de format: 12 (veche Win/OS/2),
40 (nou Win), 64 (nou OS/2), 12÷64 (alt format nou).

BiWidth: lățimea imaginii în pixeli.

BiPlanes: numărul de plane de culori din bitmap.

116
BiBitCount: numărul de biți per pixel (1,4,8,24). Este informația care permite să aflăm câte
culori sunt folosite pentru reprezentarea imaginii arhivate:

(5-3) nr_culori=2BiBitCount.

BiCompression: tipul de comprimare folosit de bitmap (pentru comprimare imagine în fișier)


În general este 0 (fără comprimare) pentru fișiere BMP. Windows decodifică automat imaginea
comprimată.

BjSizeImage: dimensiunea hărții de biți în octeți (imagine).

BiClrImportant: numărul de culori necesare pentru afișarea imaginii. Fiecare element al tabelei
de culori este o structură RGBQuad:
typedef struct tagRGBQUAD
{ BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;

5.1.3 Compresia imaginii în fișiere bitmap

Introducere

Conform formulei lui Shannon, entropia unei surse de informații S se definește:


1
(5-4) 𝐻(𝑆) = ∑𝑖 𝑝𝑖 log 2 𝑝 , unde:
𝑖

- 𝑝𝑖 este probabilitatea ca simbolul 𝑆𝑖 să apară în șirul S;


1
- log 2 𝑝 reprezintă cantitatea de informație conținută de 𝑆𝑖 , spre exemplu, numărul de biți
𝑖
necesari pentru codificarea lui 𝑆𝑖 .

Algoritmul Shannon-Fano

Este o abordare a codificării unui șir. Să presupunem că avem următoarea densitate de


caractere într-un șir: A(15), B(7), C(6), D(6), E(5) (tabelul 5-3).

Folosind o abordare top-down (figura 5-3), se parcurg următorii pași:

1. Sortarea simbolurilor după frecvența de apariție (pi), de exemplu: ABCDE.

2. Împărțirea recursivă în două părți cu aproximativ același număr de apariții.

117
Simbol Apariții log(1/p) Cod Subtotal (# biți)
A 15 1.38 00 30
B 7 2.48 01 14
C 6 2.70 10 12
D 6 2.70 110 18
E 5 2.96 111 15
TOTAL (#biți): 89
Tabelul 5-3. Algoritmul Shannon-Fano aplicat șirului ABCDE.

Figura 5-3 Algoritmul Shannon-Fano aplicat șirului ABCDE.

Algoritmul Huffman

Algoritmul Huffman este o abordare bottom-up a codificării unui șir:

#1. Inițializare: adaugă toate nodurile în lista OPEN, păstrată ordonată (spre exemplu, ABCDE,
v. tabelul 1-6);

#2. Repetă până când lista OPEN mai are doar un nod:

#2.1 Alege din OPEN două noduri având cele mai mici frecvențe/probabilități și crează un nod
părinte al lor;

#2.2 Atribuie suma frecvențelor/probabilităților descendenților nodului părinte;

#2.1 Atribuie codurile 0/1 celor două ramuri ale arborelui și șterge nodul descendent din OPEN
(v figura 5-4).

Simbol Apariții log(1/p) Cod Subtotal (# biți)


A 15 1.38 0 15
B 7 2.48 100 21
C 6 2.70 101 18
D 6 2.70 110 18
E 5 2.96 111 15
TOTAL (#biți): 87
Tabelul 5-4. Algoritmul Huffman aplicat șirului ABCDE.

118
Figura 5-4 Algoritmul Huffman aplicat șirului ABCDE.

Pentru exemplul de mai sus:

H(S)=(15x1.38+7x2.48+6x2.7+6x2.7+5x2.96)/39=85.26/39=2.19.

Numărul de biți necesari pentru codificarea Huffman este: 87/39=2.23.

Astfel, algoritmul Huffman transformă simboluri de lungime fixă în simboluri de lungime


variabilă, ajungând la rezultate optime doar dacă probabilitățile de apariție a simbolurilor sunt puteri
ale lui 2.

Codificarea Huffman adaptivă

Algoritmii anteriori necesită date statistice (care, de obicei, nu sunt disponibile, în cazul
secvențelor audio sau video în timp real), iar în cazurile în care datele sunt disponibile, procesul de
calcul este laborios, mai ales pentru noduri (secvențe) cu comportare similară (spre exemplu, prezența
împreună a literelor "gh"). Din aceste motive, în practică se preferă algoritmii adaptivi.

În cazul algoritmului adaptiv de codificare Huffman, ideea este comună majorității algoritmilor
de compresie adaptivă. Condiția este ca atât codorul, cât și decodorul, să folosească exact aceleași
rutine de inițializare Initialize_model() și actualizare a modelului update_model().

Figura 5-5 Un arbore Huffman.

119
Figura 5-6 Arborele Huffman după o schimbare de nod (A incrementat de două ori).

Figura 5-7 Arborele Huffman după o nouă schimbare de nod (A reincrementat).

Rutina update_model realizează incrementarea contorului și actualizarea arborelui Huffman.


În timpul actualizărilor, arborele Huffman trebuie să respecte (figura 5-5) condițiile de definire (spre
exemplu, nodurile, interne sau frunze, să fie aranjate în ordinea crescătoare a ponderilor), mutarea
unui nod implicând mutarea cu tot cu sub-arborele descendent (figura 5-6). Arborele Huffman poate
arăta total diferit după o schimbare de nod: spre exemplu, în al treilea arbore, nodul A (figura 5-7)
devine nodul 5 și este codificat cu 2 biți.
ENCODER DECODER
Initialize_model(); Initialize_model();
while((c=getc(input))!=eof) while((c=decode(input))!=eof)
{ {
encode(c,output); putc(c,output);
update_model(c); update_model(c);
} }

Prin urmare, algoritmii adaptivi beneficiază de avantajul de a nu necesita estimarea a priori a


probabilităților, fiind folositori în aplicațiile practice.

Algoritmul Lempel-Ziv-Welch

În cazul codificării unei colecții extrem de mari de șiruri, este folosită soluția propusă de Ziv și
Lempel în 1977, îmbunătățită de Terry Welch în 1984, sub numele de LZW compression:

120
w = NIL;
while (read a character k) {
if wk exists in the dictionary
w = wk;
else
add wk to the dictionary;
output the code for w;
w = k;
}

Exemplu: dacă șirul de intrare este "^WED^WE^WEE^WEB^WET", secvența de procesare este


descrisă în tabelul 5-5:

w k ieșirea index simbol


NIL ^
^ W ^ 256 ^W
W E W 257 WE
E D E 258 ED
D ^ D 259 D^
^ W
^W E 256 260 ^WE
E ^ E 261 E^
^ W
^W E
^WE E 260 262 ^WEE
E ^
E^ W 261 263 E^W
W E
WE B 257 264 WEB
B ^ B 265 B^
^ W
^W E
^WE T 260 266 ^WET
T EOF T
Tabelul 5-5. Exemplu de aplicare a algoritmului de compresie LZW.

Un șir de intrare compus din 19 simboluri a fost codificat prin reducere la o ieșire compusă din
7 simboluri plus 5 coduri (tabelul 5-7). Fiecare cod sau simbol necesită 9 biți. În mod uzual, compresia
nu funcționează pentru un număr mic de octeți citiți la intrare.

Algoritmul LZW pentru decompresie:


read character k;
output k;
w = k;
while ( read a character k ){ /* k: caracter/cod*/
entry = dictionary entry for k;
output entry;
add w + entry[0] to dictionary;
w = entry;
}

121
Continuând exemplul anterior (tabelul 5-8), șirul de intrare este acum:
"^WED<256>E<260><261><257>B<260>T".

w k ieșirea index simbol


^ ^
^ W W 256 ^W
W E E 257 WE
E D E 258 ED
D <256> ^W 259 D^
<256> E E 260 ^WE
E <260> ^WE 261 E^
<260> <261> E^ 262 ^WEE
<261> <257> WE 263 E^W
<257> B B 264 WEB
B <260> ^WE 265 B^
<260> T T 266 ^WET
Tabelul 5-6. Exemplu de aplicare a algoritmului de decompresie LZW.

Codificarea prin diferențe (DE)

Metoda DE (Differential Encoding) se bazează pe existența pixelilor vecini cu valori foarte


apropiate, astfel încât anumite diferențe să fie considerate neglijabile. Este, deci, o metodă care
conduce la compresia sursei, deci la pierderi de informații. Se aplică șirurilor de forma: 𝑆1 , 𝑆2 , . . . , 𝑆𝑛 ,
cu valori diferite de zero dar care nu diferă prea mult între ele. Se aplică o secvență de calculare a
diferenței față de valoarea anterioară: 𝑆1 , 𝑆2 − 𝑆1 , . . . , 𝑆𝑛 − 𝑆𝑛−1 .

Figura 5-8 Un exemplu de imagine supusă codificării DE.

Fie imaginea prezentată în figura 5-8. Se pot calcula diferențe atât între pixelii vecini cât și între
grupuri de pixeli (în general grupuri de 8x8). Secvența comprimată va fi: M5, 0, 255, -5, 3, -2, 0, 255, -
4, 3, 1, M5, unde șirurile de zero pot fi comprimate prin alți algoritmi (RLE).

Codificarea DPCM

Metoda de compresie DPCM (Differential Pulse Code Modulation) este una din metodele
simple și rapide de compresie a hărților de biți, imagini rasterizate pentru care fiecare pixel va fi
reprezentat pe 8b, fără însă să fie transmisă însăși valoarea pixelului. Codificatorul face o predicție a
valorii probabile a pixelului, bazându-se pe valorile pixelilor prelucrați anterior. Eroarea predicției
dintre valoarea preconizată a pixelului și actuala valoare este cifra cuantificată și transmisă.

Metoda are o rată bună de comprimare datorită faptului că multe imagini conțin o cantitate
semnificativă de redundanță spațială, pixelii vecini tinzând să aibă valori apropiate, astfel încât eroarea

122
de predicție să fie mică. Metoda este utilizată și pentru compresiile video, în care pixelii de pe aceleași
poziții dovedesc corelație temporală (își modifică lent valoarea în timp pentru aceiași pixeli în cadre
consecutive). Acest tip de compresii poate fi îmbunătățit prin folosirea codurilor de lungime variabilă.
Eficiența algoritmului depinde de acuratețea predicției. Cea mai simplă variantă predictivă este
valoarea ultimului pixel transmis (o combinație cu algoritmul DE), dar aceasta conduce la o rată slabă
de compresie. O valoare mai bună se obține prin media valorilor pixelilor vecini, predicția fiind cu atât
mai bună cu cât blocul de pixeli considerat este mai mare.

Figura 5-9 Codorul DPCM.

Figura 5-10 O secțiune din harta de biți pentru modelul de codificare DPCM.

Pentru codorul din figura 5-9, să analizăm varianta predicției valorii pixelului curent (figura 5-
10) pe baza valorilor pixelilor vecini cei mai apropiați:

(5-5) 𝑥𝑠 = 𝑎.

(5-6) 𝑥̂𝑠 = 𝑧1 𝑎 + 𝑧2 𝑏 + 𝑧3 𝑐.

Pentru exemplul dat, 𝑥𝑠 este valoarea pixelului curent (a în figura 5-10), 𝑥̂𝑠 se calculează ca o
expresie liniară (ponderată) a p pixeli anteriori pixelului curent (în cazul nostru, doi pixeli, b și c), e
este imaginea derivată obținută ca diferența dintre pixelul curent și pixelii anteriori. În procesul de
predicție, imaginea originală este pierdută, în timpul procesării putând avea acces doar la valoarea
calculată, 𝑥𝑠′ , a pixelului curent.

Eroarea de predicție poate fi (opțional) cuantificată și utilizată în calculul entropiei codorului.


Practic, eroarea este mică (datorită unei bune corelări spațiale). În figurile 5-9 și 5-11, care prezintă
arhitectura unui codor, respectiv decodor DPCM, sunt folosite următoarele simboluri:

𝑥𝑠 : semnalul eșantionat de intrare;

e: diferența dintre valoarea curentă și valoarea calculată;

e’: eroare cuantificată de predicție;

𝑥̂𝑠 : valoarea predicției;

x : valoarea reieșită din calcul a semnalului eșantionat;

𝑒𝑐 : valoarea erorii după codificarea DPCM (aceeași cu valoarea de intrare pentru decodorul
DPCM).

𝑧1 , 𝑧2 , 𝑧3 : coeficienți de ponderare.

123
Figura 5-11 Decodor DPCM.

Decodorul realizează operația:

(5-7) curent = (predictor) + e.

Utilizarea proprietăților predictor/imagine are un efect semnificativ în creșterea eficienței


ratei de compresie. Expresia predictor poate fi modificată adaptiv pentru a îmbunătăți rezultatele
compresiei. Compresia obținută pentru acest algoritm este între 4 și 8 ori pentru o imagine de calitate
medie.

Algoritmul modulare Delta

Algoritmul modulare Delta (Delta modulation, DM) este o particularizare a algoritmului DPCM,
pentru care pasul de predicție este de 1 bit. Acest tip de modulare este aplicat în principiu pentru
undele sonore, ieșirea DM fiind 0 pentru pante negative, respectiv 1 pentru pante pozitive ale undei
de intrare. Prin urmare, algoritmul DE codifică semnul derivatei semnalului (direcția amplitudinii
semnalului) și nu valoarea diferenței (ca în vazul DPCM). Schema bloc a modulatorului DM este
prezentată în figura 5-12.

Figura 5-12 Codor DM.

Semnalul de intrare 𝑥0 este comparat cu ieșirea integratoare R; semnalul delta e (diferența


dintre semnalul de intrare și semnalul puls) este transmis la cuantificator, care generează ieșirea în
funcție de diferența dintre acestea. Dacă diferența este pozitivă, ieșirea este un impuls pozitiv; dacă
ieșirea este negativă, cuantificatorul generează un semnal negativ. Semnalul de ieșire transmite un
feed-back către intrare pentru o nouă comparație, rezultatul fiind un așa numit semnal delta care este
din nou cuantificat. Prin urmare, semnalul de ieșire conține informații despre semnul schimbărilor
semnalului cu o perioadă de eșantionare în urmă.

Codificarea RLE

Metoda de codificare RLE (Run-Length Encoding) este o metodă de compresie ce se bazează


pe identificarea prezenței subșirurilor cu aceeași formă (numite run). Fiecare secvență de valori ce se
repetă este înlocuită cu numărul aparițiilor și forma subșirului. Pentru a fi productivă, această metodă

124
se aplică pe acele tipuri de fișiere care conțin în număr mare secvențe consecutive ale aceluiași model:
fișiere text care conțin spații pentru identarea sau formatarea paragrafelor, tabelelor sau diagramelor,
semnale digitizate (care conțin șiruri neschimbate de semnale). Un exemplu de astfel de semnal
digitizat este cazul imaginilor monocrome sau color, inclusiv a celor generate pe calculator (în special
pentru zonele de fundal).

RLE este o metodă de compresie prin pierderea informației, nu conduce la rezultate foarte
bune, dar este ușor de implementat și rapidă.

Exemplu:

- șirul de intrare: R T A A A A S D E E E E E

- după compresia RLE: R T *4A S D *5E

- reprezintă un caracter de control pentru semnalizarea secvenței repetitive (run).

Procesul de codificare se realizează efectiv dacă în șirul de intrare există secvențe repetate de
patru sau mai multe caractere, deoarece algoritmul RLE folosește minim trei caractere (două caractere
repetate conduc la mărirea șirului de ieșire, iar trei caractere conduc la un rezultat neutru). Procesul
de decodare: dacă nu există caractere de control, șirul este copiat, iar dacă este identificat un astfel de
caracter, atunci este îndepărtat și secvența ce urmează este copiată de numărul de ori semnalizat.

Există diferite scheme de compresie RLE, implementarea acestora depinzând în mare măsură
de tipul de date supuse codificării. Spre exemplu, standardul Windows propune două variante, pentru
compresia imaginilor bitmap caracterizate de adâncimea de culoare în 4b și 8b.

Compresia 4b RLE consideră secvența de ieșire ca fiind formată din doi octeți: primul (dacă nu
este zero) determină numărul de pixeli care vor fi desenați. Al doilea specifică două culori: primii patru
biți codifică prima culoare, următorii patru reprezintă a doua culoare (tabelul 5-8). Prin urmare, la
decomprimarea imaginii, pixelii de pe pozițiile impare vor avea culoarea dată de primul cod de 4b, iar
pixelii de poziție impară vor fi colorați cu al doilea cod. Dacă primul octet este zero, atunci al doilea
octet va fi un cod escape (tabelul 5-7).

Al doilea octet definește


0 End-of-line.
1 End-of-RLE (bitmap).
2 Următorii doi octeți reprezintă deplasarea pe direcțiile x și y (x - dreapta,
y - sus). Pixelii peste care se sare au culoarea zero.
>=3 La decompresie, următorii 4 biți sunt copiați.
Tabelul 5-7. Definiția codurilor escape pentru compresie 4b RLE.

Șirul comprimat Informația expandată


06 52 52 52 52
08 1B 1B 1B 1B 1B
00 06 83 14 34 83 14 34
00 02 09 06 Mută 9 poziții la dreapta și 6 deasupra.
00 00 End-of-line.
04 22 22 22
00 01 End-of-RLE (bitmap).

125
Tabelul 5-8. Exemple de secvențe codificate 4b RLE.

Compresia 8b RLE consideră secvența de compresie formată tot din 2 octeți: primul octet
(dacă este nenul) reprezintă numărul de pixeli consecutivi de aceeași culoare, specificată de al doilea
octet (tabelul 5-9). Similar variantei anterioare, dacă primul octet este zero, atunci al doilea octet
definește un cod escape. Codurile escape 0, 1, 2 au aceeași semnificație ca în tabelul 5-7; dacă valoarea
codului escape >=3, atunci la decompresie, următorii >=3 vor fi copiați din fișierul comprimat.

Șirul comprimat Informația expandată


06 52 52 52 52 52 52 52
08 1B 1B 1B 1B 1B 1B 1B 1B 1B
00 03 83 14 34 83 14 34
00 02 09 06 Mută 9 poziții la dreapta și 6 deasupra.
00 00 End-of-line.
04 2A 2A 2A 2A 2A
00 01 End-of-RLE (bitmap).
Tabelul 5-9. Exemple de secvențe codificate 8b RLE.

Vom exemplifica modelele de compresie a informației grafice prin applet-ul Compress. Acesta
prezintă, în afara interfeței caracteristice, algoritmii de codificare a informației de intrare (șir numeric
în baza 10) pentru modelele: DPCM, Delta, RLE, Zero supression si Huffman.

Figura 5-13 Applet-ul Compress pentru exemplificarea a cinci algoritmi de compresie a informației grafice: DPCM, Delta,
RLE, Zero supression și Huffman.

126
Applet 1-1. Compress.java: exemplificarea a cinci algoritmi de compresie a informației grafice:
DPCM, Delta, RLE, Zero supression si Huffman.

5.1.4 Modul vectorial

Imaginile vectoriale sunt stocate sub formă de primitive grafice sau de curbe Bezier. Desenul
este considerat un vector. Fiecare obiect grafic este creat pornind de la o definire geometrică a
formelor componente, cărora le sunt alocate atribute (culoare, grosime ș.a.).

Aplicațiile grafice vectoriale crează obiecte sau forme definite prin formule matematice,
conducând la obiecte prezentate prin curbe mai netede decât în abordarea bitmap, în cazul în care se
folosesc efecte de scală. Spre deosebire de modul bitmap, un desen vectorial nu este legat de rezoluție,
adaptându-se rezoluției perifericului de ieșire. În plus, stochează imagini în fișiere mai puțin
voluminoase și le manevrează mai ușor decât modul bitmap datorită descrierii matematice a
imaginilor. Modul vectorial este folosit în aplicații de design, arhitectură, reclamă.

Spre deosebire de aplicațiile de desenare (paint programs), programele care utilizează imagini
în format vectorial se numesc aplicații de trasare (draw programs). Informațiile comune fișierelor
grafice mod vectorial și bitmap sunt: rezoluția originală, dimensiunea imaginii, indicații despre paleta
de culori, parametrii algoritmului de comprimare (care reprezintă în același timp obstacole în efortul
de standardizare a formatelor grafice).

Majoritatea sistemelor grafice sofisticate (inclusiv sisteme CAD și aplicații de animație)


folosesc grafica vectorială. În plus, multe tipuri de imprimante (spre exemplu imprimantele PostScript)
folosesc grafica vectorială în timpul procesării. Caracterele (fonts) sunt reprezentate vectorial pentru
a putea fi reprezentate unitar fără să depindă de dimensiune. Datorită soluției de reprezentare, se mai
numesc și vector fonts, caractere scalabile, sau orientate obiect. Principalele formate de fișiere
vectoriale sunt comparate în tabelul 5-10.

PostScript: limbaj de descriere a paginii care descompune imaginea unei pagini prin
coordonate absolute, independente de caracterele fizice ale perifericului. Este un standard de
imprimare prezent pe diferite sisteme de operare (MS DOS/Windows, Mac, OS/2, UNIX) și o gamă largă
de imprimante.

EPS (Encapsulated PostScript) definește formatul rezultat din combinarea codului PostScript
ca o resursă (Pict pentru Mac, Tiff pentru PC) corespunzătoare descrierii imaginii de pe ecran. La
importul unui desen EPS în blocul imagine al unui software de punere în pagină, acesta este de fapt
resursa (Pict sau Tiff) care se afișează pe ecran, permițând vizualizarea și poziționarea precisă pe
monitor. În momentul imprimării se folosește fișierul PostScript. Unele programe crează fișiere EPS
fără preview. În acest caz, cadrul destinat pentru recepția imaginii rămâne vid la import, dar rezultatul
imprimării este corect.

DCS (DeskTop Color Separation) este o extensie a fișierului EPS pentru schimbul unei imagini
pentru care s-a realizat deja separarea culorii (producător: Quark). Se compune din cinci fișiere: unul
pe bază de rezoluție Pict pentru plasarea în Xpress, și patru fișiere de rezoluție ridicată reprezentând
patru culori de imprimat ce sunt trimise automat la imprimantă în momentul imprimării.

DXF (Drawing eXchange Format) este formatul de schimb creat de Autodesk în cadrul
software-ului AutoCad. A devenit standard prin generalizarea utilizării.

127
CDR (CorelDRAW!) este formatul nativ de prelucrare și reprezentare vectorială creat de Corel
Corporation în cadrul software-ului CorelDRAW!

CGM (Computer Graphic MetaFile) reprezintă formatul de fișier standard recunoscut de trei
organisme de normalizare/standardizare (ISO, ANSI, AFNOR) ce permite schimb de desene vectoriale
între aplicații grafice. Este un format folosit în extensia pentru programele de desen vectorial.

GEM (Graphics Environment Manager) este o interfață grafică utilizator dezvoltată de Digital
Research pentru PC-urile fabricate de firma Atari, ca și o interfață pentru unele programe DOS. Ca și
interfețele Macintosh și Microsoft Windows, GEM furnizează un mediu bazat pe ferestre pentru
aplicațiile în lucru. În cadrul sistemului grafic dezvoltat, GEM este și formatul fișierului grafic vectorial
de reprezentare a informației în mediul grafic GEM.

WMF (Windows MetaFile) este formatul compatibil CGM propriu aplicațiilor executate sub MS
Windows.

FORMAT .CDR .CGM .DXF .EPS .GEM .WMF


DOMENIUL DE ilustrații schimburi schimburi de PAO ilustrații schimburi
APLICAȚIE de fișiere fișiere desen de fișiere
EXEMPLU COMPARATIV 58 KB 31 KB 382 KB 907 KB 36 KB 42 KB
AL MĂRIMII FIȘIERELOR
PRIMITIVE DA DA DA DA DA DA
GRAFICE
ATRIBUTE DE DA DA DA DA DA DA
LINIE
CURBE BEZIER DA NU NU DA DA NU
IMAGINI BITMAP DA DA NU DA DA DA
OBIECTE 3D - NU DA NU NU NU
COTĂRI - NU DA NU NU NU
Tabelul 5-10. Principalele formate de fișiere vectoriale.

128

S-ar putea să vă placă și