Creeaza.com - informatii profesionale despre


Evidentiem nevoile sociale din educatie - Referate profesionale unice
Acasa » referate » informatica » grafica design
Formatul JPEG

Formatul JPEG


Formatul JPEG

Pe langa o rata inalta de comprimare avem nevoie si de pastrarea calitatii informatiilor originale. JPEG imbina cele doua deziderate intr-un mod eficient. In ziua de astazi auzim tot mai des despre necesitatea transmiterii imaginilor la distanta, despre compact discuri si calitatea imaginilor stocate pe acestea, despre integrarea dintre tehnologia informatica si televiziune. Dar poate ar fi bine sa spunem ca in spatele acestor realitati tehnologice stau anumite specificatii legate de formatul datelor ce circula de la emitator la receptor. Practic aici este locul in care putem aminti despre existenta acestui format grafic, foarte eficient, numit JPEG.

Intrand in domeniul tehnic vom spune ca este un format grafic care comprima imaginile de tip bitmap. Un dezavantaj major in acest caz este faptul ca respectiv comprimarea si decomprimarea se executa destul de incet. La ora actuala, formatul JPEG este inclus in standardele internationale in vederea implementarii sale la nivel hard (este vorba despre cipuri care sa realizeze comprimarea si decomprimarea fara a mai fi nevoie de un soft specializat in acest sens). La ora actuala, formatul este acceptat ca atare de toate softurile care se doresc a fi ajutatoare in domeniul prelucrarii imaginilor, pe majoritatea platformelor.



Sa ne facem intelesi de la inceput, JPEG este un standard ce defineste o familie de tehnici de compresie si nu este neaparat un format fix - ca in cazul BMP sau PCX. Din obisnuinta am folosit in unele fraze sintagma "formatul JPEG'.

Imaginile JPEG pot fi incapsulate in multe moduri - cele mai folosite sunt JFIF si JPEG-TIFF.

Subformatul JFIF este prescurtarea expresiei JPEG File Interchange Format si a fost creat de catre Eric Hamilton de la C-Cube Microsystems.

JPEG-TIFF se bazeaza, in mare parte, pe specificatiile formatului TIFF 6.0. Aici vorbim despre faptul ca, indiferent de schema folosita, JPEG comprima imaginea rezultand anumite pierderi - deci imaginea reconstruita nu va fi totdeauna identica cu originalul (acest lucru nu trebuie inteles neaparat in sensul rau dupa cum se va vedea in continuare).

Utilizand o schema de compresie a imaginilor digitale diferita cu mult de cele utilizate in mod curent, JPEG nu necesita reconstruirea imaginii originale, bit cu bit. Se intampla de multe ori ca imaginea reconstruita, prin decodificarea informatiilor stocate in fisierul de format JPEG, sa fie o reprezentare mai buna a fotografiei originale decat in cazul in care se foloseste o schema de compresie fara pierderi.

In ciuda adancimii mari de culoare (16 milioane de culori) imaginile scanate cu JPEG pot fi stocate pe harddisk, ocupand putin spatiu. Acest lucru este posibil datorita unei comprimari a datelor bine pusa la punct, care micsoreaza dimensiunile fisierului la minim.

Fisierele JPEG pot fi recunoscute dupa extensia .JPG.

Acest format suporta 16,7 milioane de culori si este recomandat in special pentru imagini fotografice. Compresia interna JPEG, spre deosebire de GIF, se face cu pierdere de calitate. In functie de setarile pe care le faceti, pierderea de calitate este mai mult sau mai putin vizibila ochiului uman. Odata ce scadeti calitatea imaginii si o salvati, datele pierdute nu mai pot fi recuperate pentru a reface originalul.

Prin comprimare JPEG imaginea din stanga isi pierde o parte din date si, in functie de setari, aceasta pierdere poate deveni vizibila, ca in imaginea din dreapta.

JPEG este un mecanism standardizat de compresie a imaginilor cu tonuri continue (de exemplu fotografii), color sau in tonuri de gri, dezvoltat de experti fotografi.

In mod nesurprinzator, acest format este cel mai bun pentru imaginea de tip fotografic. Nu functioneaza foarte bine (in termenii comprimarii de dimensiune de fisier) cu imagini unde culorile contrasteaza in mod deosebit una cu cealalta, sau unde avem spatii largi, plate de aceeasi culoare. De fapt, cateodata este nevoie de voalarea unei imagini inainte de a o salva in format JPEG - nu suficient pentru a degrada calitatea imaginii, dar suficient pentru a lasa compresia JPEG sa-si faca treaba putin mai usor.
JPEG-urile nu sunt folosite la fel de des ca si GIF-urile, dar daca se doreste obtinerea unei atmosfere subtile, atunci este nevoie de imagini fotografice ca tema principala.

Compresia JPEG este una cu pierderi - in functie de setarea de compresie aleasa, va incadra unele din informatiile vizuale pentru a reduce dimenisinea fisierului. Unele imagini vor arata bine cu o compresie JPEG 'agresiva', dar vor pastra intotdeauna o copie suplimentara a imaginii originale. JPEG-urile sunt fisiere care nu pot fi animate.

Orice JPEG poate fi salvat ca Progressive JPEG. Acesta este foarte similar cu GIF-ul intretesut. Ca si in cazul GIF-ului, este afisata o imagine la o calitate scazuta si dupa mai multe treceri calitatea se imbunatateste. Unele unelte de prelucrare grafica permit specificarea numarului de pasi in care se afiseaza imaginea, descarcarea completa a fisierului.

Formatul JPEG foloseste pentru comprimare transformarea cosinus discreta (DCT). In spatele acestui sistem se ascunde o transformata Fourier, care schimba dispersia pixelilor intr-o dispersie de frecventa si de amplitudine. Suprafetelor mari si uniforme de imagine li se atribuie participatii de frecventa mici, in schimb detaliile fine primesc participatii de frecventa mai mari. Comprimarea apare ca urmare a faptului ca parti de imagine cu participatii de frecventa mai mari capata o pondere mai mica, iar amplitudinile lor vor fi egale cu zero.


Bineinteles ca la comprimare se pierd unele date de imagine, insa algoritmul de compresie utilizat verifica in permanenta ca la decomprimare imaginea sa nu sufere o pierdere a calitatii. La comprimare, fiecare imagine este divizata in blocuri de 8x8 puncte de imagine. Pentru inceput, fiecare bloc trebuie sa suporte o transformare cosinus. Scopul acesteia este de a cuprinde modificarea de culoare de la un bloc la altul. In etapa a doua, algoritmul verifica daca diferentele de culoare dintre blocuri sunt vizibile cu ochiul liber. Diferentele dintre blocurile vecine care nu sunt observabile cu ochiul liber sunt ignorate.

Formatul JPEG este un format grafic cu pierderi, fiind conceput sa exploateze cunoscutele limite ale ochiului uman: schimbarile mici de culoare sunt percepute cu o acuratete mai scazuta decat modificarile de stralucire. Imaginile JPEG sunt destinate a fi privite de oameni si nu analizate intr-o maniera computerizata.

O proprietate folositoare este aceea ca formatul JPEG suporta mai multe grade de pierdere (reducere), in functie de parametrii de compresare utilizati. Un alt aspect important se refera la faptul ca decodoarele JPEG pot folosi aproximari (cu un grad mai ridicat de inexactitate) in vederea accelerarii procesului de decodificare a imaginii. JPEG permite stocarea informatiilor de culoare pe 24 biti/pixel (16 milioane de culori), utilizand metode LZ/Hufmann de compresie grafica.

JPEG poate opera in mai multe moduri. Modul secvential cu pierderi are urmatoarele faze, sofisticate:

Pregatirea blocului de intrare

Transformarea cosinusoidala discreta

Cuantificarea

Codificarea functie de lungime

Codificarea statica a iesirii

Sunt definite mai multe formate bazate pe JPEG:

■ JFIF (JPEG File Interchange Format)

■ TIFF/JPEG, o extensie a formatului TIFF

Tehnicile JPEG se regasesc si in cadrul standardului video MPEG (Motion Picture Experts Group). Deoarece filmele contin atat imagini cat si sunet, MPEG le comprima pe ambele. Exista mai multe familii de standarde MPEG:

MPEG-1 (care poate fi transmis prin retea la distante modeste, fiind folosit pentru memorarea filmelor pe CD-ROM in formate CD-I si CD-Video) si

MPEG-2 (pentru conferinte de rezolutie medie).

JPEG, a fost creat pentru a comprima fie imagini color, fie imagini alb-negru, din lumea reala. Merge foarte bine pe fotografii, scene din natura, dar mai putin pe imagini care contin text sau care contin linii, cercuri, s.a.m.d.

Standardul care 'ii face concurenta' JPEG-ului, este standardul GIF(Graphics Interchange Format, creat de Compuserve).  Avantajul standardului JPEG, este ca poate comprima imagini pe 24 de biti(16 milioane de culori), in timp ce GIF, lucreaza cu imagini de 8 biti(256 de culori). Bineinteles, ca si GIF, are partile lui bune.

De exemplu, se descurca mai bine cu imaginile cu care nu prea se descurca JPEG(contin text, linii, imagini simple, in general), se descurca mai bine si cu imaginile care au foarte putine culori.

JPEG, are una dintre cele mai bune scheme de compresie a imaginilor pe 24 de biti. Obtine o compresie de la 10:1, pana la 20:1(fara o pierdere mare din calitatea imaginii), in timp ce alti algoritmi obtin compresii de doar 2:1.

Majoritatea comprimatoarelor JPEG, dau dreptul utilizatorului sa aleaga un anumit factor de compresie. Acest factor de compresie, este pur arbitrar, el nefiind standardizat; deci, un factor de compresie de 80, nu inseamna ca se va pastra 80% din datele originale. Chiar mai mult, factorul poate varia la unele compresoare. Sunt compresoare care pun la dispozitie un factor in gama 0-100, altele in gama 0-4, altele doar mare-medie-mica.

Cel care alege factorul de compresie, trebuie sa stie ce doreste: o marime mica sau o calitate mare. Compresia cu acelasi factor, poate da rezultate mai bune pe unele tipuri de imagini decat pe altele, deci trebuie ales factorul si in functie de imaginea care urmeaza a fi comprimata.

Este recomandat, ca pentru o buna compresie/marime, sa se foloseasca factorul 75. Daca se doreste o calitate mai buna, este indicat sa se utilizeze un factor de pana la 95, deoarece un factor de 100, obtine un fisier de doua ori mai mare, nejustificat de diferenta de calitate. Iar, daca se doreste o marime mai mica, este recomandat un factor de 10-15.

Ca urmare a digitizarii imaginilor (prin scanare, de exemplu), rezulta o schema de culori ce foloseste cate 24 biti pe pixel - cate 8 pentru fiecare componenta RGB (red, green, blue). Un format comprimat, GIF de exemplu, foloseste o tabela de culori avand 256 de intrari. Acest lucru inseamna ca fiecare pixel va fi reprezentat pe 8 biti (nu pe 24 de biti-deci un prim pas spre comprimarea informatiei). GIF comprima in continuare cei 8 biti pe pixel folosind algoritmul LZW dar acest lucru nu mai ajuta foarte mult la comprimare. JPEG, pe de alta parte, stocheaza, in primul rand, informatiile privind schimbarile de culoare, in special variatiile de stralucire. Atat timp cat imaginea reconstruita va pastra aceste variatii, totul va fi foarte apropiat de original.

Daca este sa analizam formatul JPEG prin considerarea cailor traditionale de urmat in cazul algoritmilor de compresie a imaginilor digitale trebuie sa spunem ca tehnica folosita aici este departe de a fi comuna, in schimb se apropie foarte mult de modul de lucru al televiziunii.

JPEG nu mai este foarte eficient in cazul imaginilor ce contin un numar mic de culori si un numar mic de muchii, ca in cazul animatiilor generate pe calculator, alte formate grafice fiind mult mai eficiente in aceasta situatie. Spatiul care se poate salva folosind formatul JPEG este destul de mare.

Sa luam in considerare un exemplu simplu. O imagine avand dimensiunile de 727 x 525 pixeli cu 24 biti pe pixel, va ocupa in forma necomprimata cam 1145 Kb. Versiunea GIF va fi de aproximativ 240 Kb. Un fisier in format JPEG de inalta calitate va ocupa 155 Kb iar in cazul JPEG de calitate standard, va fi ocupat un spatiu de 58 Kb. De fapt, JPEG-ul ce ocupa 58 Kb este de calitate mai inalta ca GIF-ul. Secretul consta, dupa cum am mai spus, in faptul ca se pastreaza variatiile de culoare si nu culoarea in sine. In plus, in cazul JPEG-ului avem de-a face cu pastrarea informatiei despre pixel pe un singur bit.

De altfel JPEG permite multe optiuni de codificare si comprimare. Noi ne vom concentra pe JPEG standard, o versiune pe care toate implementarile soft trebuie sa o suporte si deci sa o foloseasca. Decodificarea informatiilor stocate incepe prin convertirea imaginii RGB intr-un spatiu color de tip luminanta/crominanta, folosind formulele de calcul discutate in sectiunea urmatoare. De fapt aici este vorba despre o imagine bazata pe o scala a nuantelor de gri plus doua canale ce stocheaza informatii despre variatiile de culoare. Datele imaginii se prelucreaza prin impartirea acesteia in blocuri de 8x8 pixeli. In continuare se aplica o transformare cosinus discreta (DCT - discrete cosine transform) in scopul convertirii informatiilor relative la imaginea bitmap in informatii legate de ratele de schimbare (se mai foloseste si termenul de analiza in frecventa). Cuantificarea, care este pasul urmator, produce trunchierea rezultatelor codificarii DCT obtinandu-se informatiile intr-un interval mai redus de valori. Aceasta cuantificare este pasul care face ca algoritmul JPEG-ului sa provoace o pierdere de informatie. Aplicatiile care permit inregistrarea imaginilor in format JPEG ofera utilizatorului posibilitatea de a regla rata de compresie.

In final, rezultatele cuantificarii sunt comprimate folosind algoritmul Huffman. Decomprimarea imaginii decurge prin parcurgerea etapelor descrise anterior in ordine inversa. In primul rand are loc decomprimarea rezultatelor cuantificate si apoi se utilizeaza transformarea cosinus inversa pentru reconstruirea imaginii. Bitii cei mai putini semnificativi (pierduti la cuantificare) nu pot fi regasiti si atunci algoritmul de decomprimare insereaza zerouri in locul lor.

Intr-o imagine color, JPEG comprima fiecare componenta de culoare separat. Desi este posibila comprimarea componentelor de rosu, verde si albastru intr-un mod eficient totusi comprimarea JPEG lucreaza mai bine atunci cand se aplica informatiile de culoare exprimate sub forma luminanta (stralucire) si crominanta. Acest lucru este mult mai folositor deoarece ochiul este mai putin senzitiv la schimbarile de culoare decat la schimbarile de luminozitate. Astfel canalele de crominanta pot fi codificate cu pierderi mai mari decat canalul de luminanta. Intr-o imagine de tip RGB, toate cele trei canale contin informatii despre luminozitate si ca urmare toate trei vor fi codificate cu aceeasi rata.

O schema de culori acceptata in toata lumea, cunoscuta sub denumirea de CCIR 601, foloseste trei componente Y, Cb si Cr care, spus in general, se refera la luminozitate, "albastreala' si "roseata'. Componenta Y poate fi utilizata direct ca fiind versiunea alb-negru a imaginii (uneori Cb si Cr sunt numite U si V iar schema de culori este referita prin notatia YUV, totusi in sens strict tehnic YUV nu este acelasi lucru cu YCbCr). Considerand deci ca fisierul initial este stocat folosind schema de culori RGB, pentru a ajunge la reprezentarea YCbCr vom putea folosi urmatoarele formule de calcul:

Y = 0,229R + 0,587G + 0,114B
Cb = 0,1687R - 0,3313G + 0,5B
Cr = 0,5R - 0,4187G - 0,0813B

Trebuie spus ca aceasta transformare este in principiu fara pierderi deoarece, per asamblu, tripletul YCbCr contine aceleasi informatii ca si RGB dar repartizate putin altfel (in practica se introduc anumite erori de rotunjire adica respectiv componentele Y, Cb, Cr vor fi niste valori intregi prin rotunjire si atunci la refacerea tripletului RGB valorile componentelor pot diferi putin fata de original).

La refacerea infomatiilor initiale vom avea nevoie de valorile tripletului RGB. In acest scop se pot folosi urmatoarele formule:

R = Y + 1,402(Cr-128)
G = Y - 0,34414(Cb-128) - 0,71414(Cr- 128)
B = Y + 1,772(Cb - 128)

Formatul grafic JPEG accepta ca cele trei componente ale tripletului YCbCr sa fie comprimate folosind rate de compresie diferite. O posibilitate folosita in mod curent propune utilizarea a cate unei valori Cb si Cr pentru fiecare 4 valori ale componentei Y. In acest mod, pentru fiecare dreptunghi de 2 x 2 pixeli vor exista 4 valori pentru componenta Y respectiv o valoare Cb si o valoare Cr. Folosind ideea descrisa mai inainte vom putea salva 50% din spatiul utilizat (6 valori in loc de 12) fara ca acest lucru sa aiba vreo influenta asupra calitatii imaginii percepute de ochiul uman.

Tehnica esantionarii anumitor componente la rate mai mici decat altele este cunoscuta prin denumirea de subesantionare (termenul in limba engleza este subsampling). Parametrii folositi pentru esantionare impreuna cu parametrii folositi in faza de cuantificare, determina rata de compresie. Intr-un fisier JPEG standard, toti acesti parametri sunt inclusi in header si ca urmare decodificatorul poate reconstrui imaginea corect.

Alte posibilitati de comprimare

Dupa cum am amintit mai la inceput, formatul grafic JPEG permite o multime de alte moduri de comprimare si respectiv stocare a informatiei. In continuare voi spune cateva cuvinte despre unele dintre aceste tehnici.

Modul ierarhic

In cadrul acestui mod de lucru, o imagine este stocata la cateva rezolutii, in mod crescator. Parca nu ati inteles nimic din propozitia anterioara. Am dorit sa spun ca, de exemplu, o imagine de 1000 x 1000 pixeli poate fi stocata prima data intr-o versiune de rezolutie 10 x 10, apoi 100 x 100 si in final 1000 x 1000. Fiecare versiune a imaginii este stocata ca fiind o diferenta fata de versiunea precedenta, de rezolutie mai mica. In general, aplicatiile actuale nu implementeaza acest mod de lucru ierarhic dar o vor face probabil in viitor.

Modul de lucru fara pierderi

Exista si un astfel de mod de lucru specificat pentru acei utilizatori care din diferite motive doresc (sau au nevoie) sa reconstruiasca imaginea bit cu bit. Aceasta metoda face ca fiecare pixel sa fie stocat ca diferenta fata de pixelii situati deasupra lui sau in stanga. In acest caz nu va mai fi folosita deloc faza transformarii cosinus discrete la fel precum nu va fi folosita transformarea spatiului de culoare (din RGB in YCbCr). Acestea deoarece prin prelucrarile pe care le aplica imaginii pot introduce (si chiar introduc) mici pierderi de informatie. Deci practic acest mod de lucru fara pierderi are destul de putin in comun cu formatul JPEG, exceptand numele folosit.

Modul progresiv

In situatiile in care o imagine JPEG este decomprimata pe masura ce este receptionata de undeva (prin modem de exemplu) ar fi foarte interesant sa putem afisa o versiune tot mai buna a acesteia pe masura ce soseste.

Selectia spectrala transmite intai componentele de frecventa mica pentru fiecare bloc de 8 x 8 iar apoi transmite componentele de frecventa inalta. Un alt mod posibil de lucru este cel prin care se transmit prima data cei mai semnificativi patru biti si in continuare se transmit cei mai putin semnificativi patru biti. Cele doua moduri, descrise in acest alineat, pot fi combinate dupa cum este nevoie.

Iarasi nici o implementare nu suporta modurile progresive de lucru deoarece toate au nevoie in primul rand de fisierul stocat pe disc si procesul de codificare-decodificare este destul de incet. Probabil ca viitoarele implementari hard vor permite folosirea acestor moduri de lucru.

In ultima etapa vor fi comprimate celelalte blocuri in mod obisnuit si vor fi stocate pe harddisk intr-un fisier JPEG. In functie de continutul imaginii, aceasta metoda economiseste intre 50 si 70 de procente din spatiu de stocare, fara sa fie observata o pierdere a calitatii.

O consecinta a comprimarii puternice cu JPEG este faptul ca aceste fisiere pot fi transferate prin modem prin intermediul liniei telefonice. Astfel, majoritatea imaginilor din Internet sunt codificate JPEG. JPEG aduce cu sine, in schimb, si o serie intreaga de dezavantaje. Daca in cazul fotografiilor comprimarea decurge fara probleme, in schimb la desenele tehnice, de exemplu, apar probleme serioase.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.