JPEG 2000 je standard pro kompresi obrazu založený na vlnkové transformaci. Umožňuje použít ztrátovou i bezeztrátovou kompresní metodu. Při stejném kompresním poměru poskytuje lepší kvalitu než starší standard JPEG. Naopak při použití bezeztrátové metody dosahuje většinou lepšího kompresního poměru formát PNG.

JPEG 2000
Přípona souboru.jp2, .j2k, .jpf, .jpx, .jpm, .mj2
Typ internetového médiaimage/jp2, image/jpx, image/jpm, video/mj2
Uniform Type Identifierpublic.jpeg-2000
TvůrceJoint Photographic Experts Group
Standard(y)ISO/IEC 15444
Otevřený formát?
Schéma uspořádání bitů

U ztrátové komprese lze při kompresi specifikovat jednu či více kvalit (v závislosti na použitém kodéru, např. zadáním cílových hodnot PSNR), nebo přesně zadat jeden či více datových toků (případně kompresních poměrů, v závislosti na kodéru). Vytvořený codestream je pak hierarchicky rozdělen do několika vrstev s postupně se zvyšující kvalitou / datovým tokem. To je zásadní rozdíl proti předcházející metodě JPEG, ve které nelze předem (bez provedení komprese) přesně datový tok určit, ani nelze do jednoho toku uložit obraz ve více kvalitách.

Postup komprese editovat

Předzpracování editovat

Předzpracování sestává z převodu barevného modelu a případného rozřezání obrázku na dlaždice.

Pro ztrátový mód komprese se nejprve provede tzv. ICT (Irreversible Component Transform), tj. převod z RGB na YCbCr (jas a dvě barvonosné složky),[1]

 

nebo pro případ bezeztrátové komprese RCT (Reversible Component Transform)

 .

RCT lze provést pouze s celočíselnou aritmetikou. Po převodu se každá složka komprimuje samostatně. Obraz je rozřezán na pravidelné dlaždice libovolné velikosti. Všechny dlaždice mají stejnou velikost (kromě okrajů). Lze vzít celý obraz jako jednu dlaždici. Pak nedochází ke vzniku blokových artefaktů. Pokud mají některé komponenty menší rozlišení, dlaždice jsou rozděleny na stejných místech jako ty s vyšším rozlišením).

Rozklad editovat

 
Podpásma diskrétní vlnkové transformace. Zobrazeny jsou tři úrovně rozkladu. Na prostřední úrovni jsou vyznačeny precinty a bloky kódování (code-blocks).
 
Biortogonální spline vlnka CDF 5/3 použitá ve standardu JPEG 2000 k bezeztrátové kompresi.

Následuje komprese každé dlaždice odděleně. K tomu se použije diskrétní vlnková transformace s biortogonálními spline vlnkami 9/7 (v aritmetice s pohyblivou řádovou čárkou) nebo s biortogonálními spline vlnkami 5/3 (v celočíselné aritmetice, v případě bezeztrátové komprese).

Diskrétní vlnkovou transformací je obraz reprezentován v několika rozlišeních (tzv. pyramida rozlišení). To dává kodéru možnost organizovat codestream takovým způsobem, že se na straně příjemce postupně zvyšuje rozlišení dekódovatelného obrazu. Reprezentace přitom není redundantní. Každé vyšší rozlišení se složí ze čtyřech podpásem předcházejícího rozlišení. Kvantizace jednotlivých podpásem – reálné koeficienty (v pohyblivé řádové čárce) se kvantizují na celá čísla pomocí uniformní kvantizace, krok kvantizace lze volit zvlášť pro každé podpásmo (a tím též řídit granularitu přírůstku kvality). Pro bezeztrátový režim komprese kvantizace odpadá.

Kódování koeficientů editovat

Po kvantizaci je každé podpásmo rozděleno na nepřekrývající se oblasti (precint), které později odpovídají paketům. Jsou voleny tak, aby napříč podpásmy tvořily bloky v originálním obrazu. Ty jsou dále rozděleny na bloky kódovaní (code-block) stejné velikosti (kromě bloků na kraji obrazu). Všechny bity všech koeficientů v bloku jsou pak kódovány algoritmem EBCOT.

 

EBCOT (Embedded Bitplane Coding with Optimal Truncation) je algoritmus pro kódování koeficientů v bloku v pořadí od nejvýznamnějšího po nejméně významný bit.

  • Nejprve se rozdělí koeficienty do bitových rovin.
  • Bitové roviny obsahující pouze nuly jsou přeskočeny (uchová se jen jejich počet), začne se první rovinou obsahující alespoň jednu jedničku.
  • Bity se z roviny zpracovávají po čtyřřádkových pruzích, v rámci pruhu po sloupcích.
  • Každá rovina je pak kódována ve třech průchodech: Significance Propagation, Magnitude Refinement a Cleanup Pass. Prvním průchodem je vždy Cleanup Pass.

Bit je významný, pokud v této nebo v předchozích bitových rovinách v něm byla 1.

  • Significance Propagation – Zakóduji ty bity, které nejsou důležité, ale sousedí s alespoň jedním důležitým (v některém z 8 směrů).
  • Magnitude Refinement – Zakóduji bity z míst, které se byly v minulých rovinách důležité.
  • Cleanup Pass – Zakóduji všechny zbylé bity.

Znaménko se kóduje společně s prvním bitem.

Takto získané bity se kódují binárním kontextovým aritmetickým kodérem, tzv. MQ kodérem. Kontext kódovaného bitu je tvořen stavem jeho 8 sousedů (okno 3×3 bity). Výsledný proud bitů je rozdělen na pakety.

Paket má hlavičku, kde jsou informace o obsažených blocích: počet nulových a obsazených bitových rovin, zdali blok vůbec obsahuje data a další.

Pomocí vypouštění méně důležitých paketů se řídí kvalita, při bezeztrátové kompresi se žádný paket vypustit nesmí. To je zásadní rozdíl proti metodě JPEG, ve které je kvalita pevně svázána s kompresí. Pro změnu kvality je u JPEGu třeba celý obraz znovu zkomprimovat. U JPEG 2000 rekomprese nutná není, dochází pouze k reorganizaci codestreamu, což není výpočetně náročné.

Pakety ze všech podpásem jsou složeny do tzv. vrstev. Způsob, jakým jsou však bloky děleny do paketů, není ve standardu definován a je to na kodéru, stejně tak pořadí paketů ve vrstvě. Jednou z možností organizace codestreamu je ta, že data budou řazena tak, aby se s přibývajícími vrstvami kvalita obrazu rovnoměrně zvyšovala. Další možností je postupné zvyšování rozlišení, nebo sekvenční přenos (jako je to běžné u metody JPEG).

Standard však nedefinuje způsob, jak najít optimální délku paketu pro všechny bloky. Kompresor se snaží se minimalizovat celkové zkreslení při dané velikost výsledných dat či kvalitě a musí tedy nějak rozhodnout, kde v paketech „odseknout“ již méně významné bity.

Jeden z možných algoritmů na kompresi:

  • Pro každý bit kódovaný EBCOT kodérem se změří zlepšení kvality.
  • Vyrobí se graf počtu bitů ku kvalitě pro každý blok.
  • Tam, kde strmost grafu (nárůst kvality na přidaný bit) klesne pod určitou úroveň danou kvalitou, se zbylé bity zahodí.
  • Při kompresi na určitou velikost se vždy přidává bit, který nejvíc pomůže. Po dosažení velikosti se zbytek bitů zahodí.

Výsledný codestream může být uložen přímo do souboru (přípona .jpc). Běžnější je ale jeho obalení do kontejneru JP2 (přípona .jp2), který k němu umožňuje přilepit metadata.

Další vlastnosti JPEG 2000 editovat

  • Pomocí vhodného přerovnání paketů lze např. pro velké obrázky seskupit pakety pro detailní úroveň některého výřezu k sobě. Lze tak prohlížet detailně nějaký výřez, aniž by se musel dekódovat celý obrázek – ovšem kodér a dekodér s tímto musejí počítat.
  • Lze kódovat některé regiony obrazu s větší kvalitou než jiné (pokud kodér umožňuje).
  • Otočení o násobek 90 stupňů, oříznutí nebo zrcadlové převrácení obrazu lze provést bez kompletní rekomprese a s tím související ztráty kvality (není nutné provádět zpětnou a pak opět dopřednou vlnkovou transformaci).
  • V JPEG 2000 Part II lze tyto transformace jen zapsat do hlavičky a dekodér je pak pouze při dekompresi provede.
  • Při editaci velkého obrázku lze rekódovat jen změněné dlaždice a v případě potřeby dlaždici zakomprimovat na velikost jakou měla předtím, není tedy nutné přeuspořádávat soubor.

Srovnání s JPEG editovat

Pro střední stupeň komprese poskytuje JPEG 2000 asi o 20 % lepší kompresi než JPEG, pro nízké nebo vysoké stupně komprese může být zlepšení ještě větší. Vhodné pro JPEG 2000 jsou velké snímky, nebo snímky s málo kontrastními okraji (například lékařské snímky). Kodér JPEG 2000 má oproti JPEG vyšší paměťovou i časovou náročnost. Na rozdíl od JPEG se neprojevují artefakty vzniklé dělením do bloků 8×8 pixelů, ale pokud se použije dělení obrazu do dlaždic, bude zde vidět nespojitost. Často se využívá podvzorkování barvonosných složek (chroma subsampling), kdy mají barvonosné komponenty poloviční rozlišení, neboť lidské oko je více citlivé na jas, než barvu. Pokud se barvy v obrázku příliš rychle střídají, budou vypadat mdle.

JPEG 2000 (stejně jako JPEG) osciluje ve spektrální doméně (algoritmus se snaží na ostrou hranu napasovat vlnovou funkci), což znamená, že kolem ostrých hran i zde budou viditelné artefakty. Obrazy s vysokým poměrem komprese jsou rozmazanější než originál (neboť ztrátovost komprese se projeví nejvíce u vysokofrekvenční složky).

Významné implementace editovat

název knihovny programovací jazyk licence
OpenJPEG[2] C BSD
JasPer[3] C JasPer License[4]
JJ2000[5] Java LGPL
FFmpeg C LGPL

Odkazy editovat

Související články editovat

Reference editovat

  1. P. Schelkens, A. Skodras & T. Ebrahimi: The JPEG 2000 Suite. Wiley, Series: Wiley-IS&T Series in Imaging Science and Technology, 2009. str. 6. ISBN 978-0-470-72147-6.
  2. http://www.openjpeg.org/ Archivováno 8. 11. 2020 na Wayback Machine., http://code.google.com/p/openjpeg/
  3. http://www.ece.uvic.ca/~mdadams/jasper/
  4. http://www.ece.uvic.ca/~mdadams/jasper/LICENSE
  5. http://code.google.com/p/jj2000/

Externí odkazy editovat