Extensii | .jp2, .j2k, .jpf, .jpm, .jpg2, .j2c, .jpc, .jpx,.mj2 |
---|---|
Tip MIME | image/jp2, image/jpm |
PUID | x-fmt / 392 , fmt / 463 |
Semnătură | 00 00 00 0C 6A 50 20 20 0D 0A 87 0A( hexa ) |
Dezvoltat de | Grup mixt de experți în fotografie |
ISO | 15444 |
Specificație | Formatul deschis |
Site-ul web | (ro) jpeg.org/jpeg2000 |
JPEG 2000 sau ISO / IEC 15444-1, prescurtat JP2 (uneori J2K ) este o compresie standard de imagine comună ISO , IEC și ITU-T , dezvoltată între 1997 și 2000 și creată de grupul de lucru grupul Joint Photographic Experts group . Din mai 2015, a fost recunoscută oficial de ISO / IEC și ITU-T sub codul ISO / IEC CD 15444.
JPEG 2000 poate funcționa cu sau fără pierderi, utilizând transformate de undă (metodă de analiză matematică a semnalului), a cărei descompunere este similară cu transformata Fourier pe termen scurt . Performanța sa de compresie (fără pierderi și fără pierderi) este superioară celei JPEG ISO / IEC 10918-1 (linia de bază JPEG). Prin urmare, obținem fișiere cu greutate mai mică pentru o calitate egală a imaginii. În plus, contururile clare și contrastante sunt redate mai bine.
Standardul JPEG 2000 este format din 16 părți (în 2019), cu toate acestea, este primul care este denumit „inima” sistemului. JPEG normalizează doar algoritmul și formatul de decodare. Metoda de codificare este lăsată liberă, atâta timp cât imaginea produsă poate fi decodată de un decodor standard. Standardul prevede în acest scop un set de fișiere de testare, denumite „conformitate” sau fișiere de conformitate . Se spune că un decodor este conform dacă este capabil să decodeze toate așa-numitele fișiere de „conformitate”.
Standardul este prezentat în mai multe părți dezvoltate succesiv începând cu anul 2000.
În dezvoltare:
În plus față de performanțele sale de compresie, JPEG 2000 aduce o serie de funcții noi, cum ar fi scalabilitatea , regiunile de interes, rezistența la erori de transmisie, codificarea fără pierderi, versatilitatea organizării datelor, precum și diverse extensii. Direcționarea unei aplicații (interactivitate, securitate, wireless etc.) care sunt interesul acestui standard.
Datorită funcțiilor sale avansate, capacității sale de a gestiona imagini mari, precum și performanțelor excelente de mare viteză, JPEG 2000 se adresează profesioniștilor din domeniul imaginii, dar are până acum doar puține aplicații. În special, prezența sa pe World Wide Web este marginală. Un codec open source JPEG 2000, OpenJPEG , a fost dezvoltat de Universitatea din Louvain pentru a promova utilizarea JPEG 2000.
Procesul de codare urmează o schemă convențională de modificare a proprietăților statistice ale datelor sursă printr-o schimbare a modelului colorimetric (sinteză) printr-o transformare, înainte de cuantificarea coeficienților care rezultă din această transformare apoi codificarea entropiei . Noutățile în comparație cu JPEG din punctul de vedere al compresiei sunt utilizarea unei transformări wavelet , care oferă scalabilitate naturală, dar mai presus de toate un algoritm foarte sofisticat de codificare a entropiei. Se bazează puternic pe algoritmul EBCOT al lui David Taubman . Acesta constă dintr-o grupare și o modelare a coeficienților de undă care oferă un codor aritmetic adaptiv cu un tren binar având proprietățile statistice adecvate.
Urmează o etapă de alocare a ratei de biți care face posibilă respectarea ratei de biți țintă și a cărei muncă este facilitată de partiționarea trenului binar format de EBCOT . Ultimul pas este formatarea sintactică a fluxului de cod JPEG 2000, cu formarea pachetelor, apoi sintaxa la nivel înalt, deosebit de abundentă în JPEG 2000.
În standardul JPEG 2000, un flux de cod este setul de date format din datele imaginii comprimate grupate împreună în pachete, precum și sintaxa la nivel înalt: anteturile de bloc , antetul principal. Metadatele de formatul de fișier JP2 nu fac parte din codestream. JP2 încapsulează fluxul de cod JPEG 2000 într-un format de fișier.
Primul pas, foarte simplu, este transformarea valorilor pixelilor în valori semnate. De obicei, trecem de la o reprezentare de [0 255] la [-128 127], pentru a avea un semnal centrat în jurul valorii de zero.
Transformarea culorii este opțională. Acesta constă în trecerea de la modelul color al imaginii originale ( RGB în general) la modelul YUV (1 luminanță, 2 crominanțe) mai potrivit pentru compresie deoarece cele 3 componente sunt mult mai puțin corelate.
Sunt specificate două transformări: o ireversibilă ( ICT pentru transformarea componentelor ireversibile ), cu coeficienți reali și o reversibilă ( RCT pentru transformarea componentelor reversibile ) cu coeficienți întregi. Avantajul RCT este de a fi utilizat în combinație cu transformarea reversibilă de 5/3 pentru o compresie fără pierderi.
Deși RCT poate fi utilizat pentru codificarea cu pierderi, de obicei se utilizează TIC deoarece oferă rezultate mai bune.
Transformarea se efectuează pe fiecare bloc al fiecărei componente. Se efectuează pe o rețea diadică, adică fiecare iterație a filtrelor de analiză este urmată de o decimare (în) de 2. Se împarte imaginea în sub-benzi unde este numărul de niveluri de descompunere (numărul de iterații al filtrelor de analiză). Standardul prevede un număr maxim de niveluri de descompunere de 32.
Este posibil să utilizați două tipuri de transformări de undă în JPEG 2000.
JPEG 2000 permite implementarea acestor filtre fie printr-o convoluție clasică, fie prin metoda „ ridicării ”.
În unele cazuri, ar putea fi util să împărțiți imaginea în trotuare (în țiglă engleză ). Este pur și simplu o felie dreptunghiulară a imaginii, felie specificată, care este în general utilizată pentru comprimarea imaginilor mari. Blocurile sunt apoi un mijloc de reducere a complexității memoriei pentru codificator ca și pentru decodor, prin lucrul pe subimagini independente. Pavelele pot avea un impact vizual: uneori le percepem limitele (liniile orizontale și verticale în imagine).
În mod implicit, întreaga imagine este considerată ca o singură țiglă.
Standardul JPEG 2000 utilizează un cuantizator scalar uniform al zonei moarte . Cuantificare vectorială , deși , teoretic , mai eficient este considerat prea scump. Dimpotrivă, cuantificatorul scalar uniform este extrem de simplu de implementat și ieftin.
Interesul zonei moarte provine din foarte mulți coeficienți de undă care nu sunt zero, dar aproape de zero. Acești coeficienți oferă foarte puține informații relevante, iar codificarea entropiei lor ar implica un cost suplimentar semnificativ, având în vedere calitatea câștigată. Prin urmare, zona moartă face posibilă scăparea acestor coeficienți prin cuantificarea lor la zero.
Transformata de undă obținută și cuantificată în timpul etapelor anterioare este acum trunchiată în mai multe „blocuri de cod”, și anume blocuri de coeficienți de dimensiune (de obicei) sau . Codificarea entropiei se realizează apoi independent pe fiecare dintre codurile bloc.
Primul pas este algoritmul EBCOT (Embedded Block Coding with Optimal Truncation), inventat în 1998 de David Taubman . Acest algoritm este un codor de plan de biți .
Și anume, elementele codului de bloc (care nu este altceva decât o serie de numere bidimensionale) sunt văzute din punctul de vedere al scrierii lor binare, în „profunzime”. Fiecare plan corespunde deci unui bit al scrierii binare a numerelor care alcătuiesc codul blocului.
Aceste diferite planuri sunt apoi parcurse succesiv, de la planul corespunzător celui mai semnificativ bit până la planul corespunzător celui mai puțin semnificativ bit. Fiecare plan este codificat în trei treceri (ideea fiind de a vizita cu prioritate casetele susceptibile de a oferi informații).
În primul rând, o trecere de propagare semnificativă (propagarea semnificației), în timpul căreia sunt codate casetele asociate coloanelor vecine de coloane semnificative; se spune că o coloană este semnificativă dacă s-au întâlnit biți diferiți de zero în această coloană în fotografiile anterioare;
Apoi, o trecere de rafinament de amplitudine (Magnitude Refinement), în timpul căreia sunt codate casetele asociate coloanelor semnificative; în cele din urmă, un permis de curățare (Cleanup), în timpul căruia sunt pătratele planului care nu au fost vizitate în timpul trecerilor anterioare.
Pentru fiecare celulă vizitată, sunt emise atât valoarea bitului, cât și contextul său (sensul vecinilor). Această pereche valoare / context este trimisă unui codificator aritmetic adaptiv . Din motive de viteză de calcul și utilizare pe arhitecturi multiple, JPEG2000 folosește un anumit codificator, numit codificator-MQ, ale cărui proprietăți sunt fundamental echivalente cu cele ale oricărui alt codificator aritmetic.
Această funcție poate varia foarte mult de la un algoritm de codificare la altul, în funcție de performanța și funcționalitatea așteptate pentru codificator. Cu toate acestea, toți algoritmii de alocare a ratei de biți au scopul comun de a crea pachete de date așa cum sunt definite în standard.
Fiecare pachet corespunde unui anumit strat (de obicei asociat cu conceptul de calitate) al unui nivel de rezoluție al unei componente a imaginii. Acesta constă dintr-un antet care îi identifică conținutul și permite accesul rapid aleatoriu în fluxul de coduri, precum și date comprimate obținute prin concatenarea unui anumit număr de treceri de codificare a blocurilor de cod cu același nivel de rezoluție. Pentru a obține rate de compresie ridicate, ultimele treceri de codare ale unui bloc de cod sunt adesea omise. Ultimul caz se ridică mai mult sau mai puțin la modificarea etapei de cuantificare și, prin urmare, la reducerea preciziei coeficienților din care au fost eliminați cei mai puțin semnificativi biți.
În cele din urmă, fiecare pachet este adăugat la fluxul de cod după un antet (grupând împreună toți parametrii de codare) și într-o ordine de includere în funcție de tipul de progresie dorit (de exemplu: prin rezoluție, după strat). Amintiți-vă că este întotdeauna posibil să modificați progresul în momentul transmiterii, din același flux de cod stocat pe partea serverului. Astfel, în funcție de ordinea în care decodorul primește pachetele, este capabil să reconstruiască o imagine progresiv prin rezoluție sau strat.
În terminologia JPEG 2000, un pachet constă dintr-un antet și gruparea datelor de entropie asociate cu un bloc, un strat de calitate, o componentă, o rezoluție și o secțiune . Pentru o imagine monocromă (1 componentă) comprimată cu opțiunile implicite (1 bloc, 1 incintă, 1 strat de calitate și 5 rezoluții), numărul de pachete este deci 5.
Ordinea pachetelor este importantă deoarece determină progresivitatea. În funcție de progresivitatea spațială dorită, de nivelul de calitate sau chiar de componentă, ordinea pachetelor va fi diferită pentru a permite decodarea progresivă în funcție de modalitatea aleasă.
Un pachet poate fi gol, apoi nu există date de entropie care să corespundă acestei secții speciale, în acest strat de calitate, această componentă și această rezoluție. Acest lucru se poate întâmpla pe imagini mici supra-tăiate de pietre și incinte.
O regiune de interes (ROI for Region Of Interest) este o regiune a imaginii care este codificată cu o precizie mai mare, în general deoarece această regiune prezintă un interes deosebit (de exemplu: față, plăcuță de înmatriculare etc.). Această precizie mai mare se realizează în detrimentul celorlalte zone ale imaginii, care sunt apoi comprimate la o rată mai mare și, prin urmare, degradate. Selectarea ROI se face de către utilizator, deci în general manual, dar există algoritmi care permit extragerea automată a ROI-urilor. Acești algoritmi nu fac parte din JPEG 2000.
O originalitate a JPEG 2000 este de a include instrumente de rezistență la erori de transmisie. Problema vine în principal din codificatorul aritmetic, deoarece un singur bit rău duce la decodarea unei secvențe defectuoase.
În mod implicit, codarea aritmetică acționează asupra unui cod de bloc . În cazul unei erori (un singur bit greșit este suficient), întregul cod de blocare se pierde. Pentru a limita efectele acestor erori, standardul propune mai multe instrumente, a căror filosofie este în esență compartimentarea cuvintelor cod sau reducerea lungimii acestora pentru a evita propagarea erorilor sau pentru a limita efectele acestora.
Instrumentele oferite sunt următoarele:
Marker de segment Acești markeri sunt introduși după fiecare plan de biți și sunt codificați aritmetic. Decodarea lor corectă indică faptul că planul de biți curent a fost decodat corect. În schimb, dacă markerul nu este găsit, planul de biți va fi considerat eronat și, prin urmare, șters. Încetarea cu fiecare trecere Este un mod de a limita propagarea erorilor, prin compartimentarea datelor într-un mod fin (la fiecare trecere). Decodorul aritmetic poate continua decodarea în caz de eroare. Marker de resincronizare (SOP / EPH) Acești doi markeri indică începutul și sfârșitul fiecărui pachet și permit decodorului să se sincronizeze cu numărul pachetului inclus în acești markeri. Acestea sunt markeri de sintaxă (nu codați aritmetic) și a căror gestionare este specifică fiecărui decodor.Aceste instrumente nu sunt suficiente pentru transmisia wireless. Metode specifice au fost dezvoltate în partea 11 a standardului, JPEG 2000 Wireless ( JPWL ).
În ciuda caracteristicilor și performanțelor excelente pentru codificarea imaginilor digitale, precum și a utilizării exclusive din 2005 ca codec pentru video în cinematografia digitală (Digital Cinema Package sau DCP), JPEG 2000 se luptă să se dezvolte.
Sunt menționate diferite motive, inclusiv:
Folosirea formatului deschis standard JPEG 2000 este implementată treptat: