Documente Academic
Documente Profesional
Documente Cultură
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.
A. Proiecția perspectivă
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ă.
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ă
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.
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
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
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.
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.
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.
𝑥′ 𝑥 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:
𝑑: 𝐶𝑝 + 𝑡 (𝑃 − 𝐶𝑃), 𝑡 ∈ 𝑅.
107
−𝑑𝑥 𝑑𝑥
1 0 𝑧𝑝 ∗
𝑑𝑧 𝑑𝑧
−𝑑𝑦 𝑑𝑦
0 1 𝑧𝑝 ∗
𝑑𝑧 𝑑𝑧
(4-52) 𝑀𝑔𝑒𝑛 = −𝑧𝑝 2 1 .
0 0 𝑞∗𝑑𝑧
𝑧𝑝 ∗ 𝑞∗𝑑𝑧+𝑧
𝑝
−1 𝑧𝑝
[0 0 𝑞∗𝑑𝑧 𝑞∗𝑑𝑧
+1 ]
𝑧𝑝 = 𝑑
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)
Punctul de fugă se obține astfel: (𝑥𝐹 , 𝑦𝐹 , 𝑧𝐹 )𝑇 = 𝑀𝑔𝑒𝑛 (0, 0, 1, 0)𝑇 (prin multiplicarea
𝑥𝐹 = 𝑞 ∗ 𝑑𝑥
punctului de la infinit de pe axa 𝑍 cu 𝑀𝑔𝑒𝑛 ): {𝑦𝐹 = 𝑞 ∗ 𝑑𝑦.
𝑧𝐹 = 𝑧𝑃
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.
108
Puncte: 8
Linii: 12
Fețe: 6
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.
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
3. Unde este planul normal? (care este orientarea ecranului față de planul normal);
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.
110
Figura 4-21 Transformări 3D cu sursă de lumină aplicate unei prisme.
Secțiunea Obiecte:
- Butonul Reset Camera aduce camera (observatorul) în poziția inițială (stabilită la inițializarea
applet-ului);
- 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 Mută permite alegerea subiectului care va fi deplasat, obiectul sau camera.
- 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).
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
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.
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.
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.
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 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:
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.
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).
(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).
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.
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;
Introducere
Algoritmul Shannon-Fano
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.
Algoritmul Huffman
#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.1 Atribuie codurile 0/1 celor două ramuri ale arborelui și șterge nodul descendent din OPEN
(v figura 5-4).
118
Figura 5-4 Algoritmul Huffman aplicat șirului ABCDE.
H(S)=(15x1.38+7x2.48+6x2.7+6x2.7+5x2.96)/39=85.26/39=2.19.
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().
119
Figura 5-6 Arborele Huffman după o schimbare de nod (A incrementat de două ori).
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;
}
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.
121
Continuând exemplul anterior (tabelul 5-8), șirul de intrare este acum:
"^WED<256>E<260><261><257>B<260>T".
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-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.
𝑒𝑐 : 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.
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.
Codificarea RLE
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
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).
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.
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.
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).
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.
128