JPEG 2000

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
JPEG 2000
Přípona souboru .jp2, .j2k, .jpf, .jpx, .jpm, .mj2
Typ internetového média image/jp2, image/jpx, image/jpm, video/mj2
Uniform Type Identifier public.jpeg-2000
Tvůrce Joint Photographic Experts Group
Standard(y) ISO/IEC 15444
Otevřený formát? ?
Schéma uspořádání bitů

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.

  • Přípona souborů: .jp2 nebo .j2c
  • MIME typ: image/jp2
  • Při kompresi lze definovat kvalitu, nebo cílovou velikost výsledného souboru.

Postup komprese[editovat | editovat zdroj]

Předzpracování[editovat | editovat zdroj]

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]


	\begin{bmatrix} Y \\ C_b \\ C_r \end{bmatrix} =
	\left[\begin{array}{lll} +0{,}299 & +0{,}587 & +0{,}114 \\ -0{,}16875 & -0{,}33126 & +0{,}5 \\ +0{,}5 & -0{,}41869 & -0{,}08131 \end{array}\right]
	\begin{bmatrix} R \\ G \\ B \end{bmatrix}

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


\begin{array}{ll}
	Y_r &= \left\lfloor \frac{R+2G+B}{4} \right\rfloor \\
	C_b &= B - G \\
	C_r &= R - G
\end{array}
.

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é čtvercové dlaždice libovolné velikosti. Všechny dlaždice mají stejnou velikost (kromě okrajů). Lze vzít celý obraz jako jednu dlaždici (pro malé obrázky). 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 | editovat zdroj]

Rozdělení dlaždic
Biortogonální spline vlnka 2,2 (CDF 5/3) použitá ve standardu JPEG 2000

Následuje komprese každé dlaždice odděleně. K tomu se použije L-úrovňová 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).

L-úrovňová transformace má L+1 rozlišení obrazu – L je rozlišení obrazu a 0 je nejnižší frekvence. Ze 4 podpásem (subbandů) rozlišení j se složí jeden s rozlišením j+1. 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éž částečně řídit kvalitu). Pro bezeztrátový režim komprese kvantizace odpadá.

Kódování koeficientů[editovat | editovat zdroj]

Po kvantizaci je každé podpásmo rozděleno na „packet partitions“ – čtvercové nepřekrývající se oblasti. Jsou typicky voleny tak, aby napříč podpásmy tvořily bloky v originálním obrazu. Každá packet partition je dělena na bloky stejné velikosti (kromě bloků na kraji obrazu), všechny bity všech koeficientů v bloku jsou pak kódovány pomocí EBCOT.

Jpeg2000 EBCOT.png

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

  • 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 načítají po čtyřřádkových blocích, v rámci bloku po čtyřbitových 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 důležitý, 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éremMQ kodérem. Kontext koeficientu je tvořen stavem jeho 8 sousedů (okno 3×3 bity). Výsledný proud bitů je rozdělen na pakety – paket spojuje jeden ze tří průchodů všech bloků přes celou packet partition.

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í.

Pakety ze všech podpásem jsou složeny do tzv. vrstev. Jedna vrstva obsahuje všechny pakety daného typu pro dané podpásmo. Způsob, jakým jsou však bloky děleny do paketů není ve standardu definován a je to na algoritmu, stejně tak pořadí paketů ve vrstvě. Obecně se očekává, že data budou řazena tak, aby se s přibývajícími vrstvami kvalita obrazu rovnoměrně zvyšovala.

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, zbylé bity zahodím.
  • Při kompresi na určitou velikost vždy přidávám bit, který nejvíc pomůže. Po dosažení velikosti se zbytek bitů zahodí.

Další vlastnosti JPEG 2000[editovat | editovat zdroj]

  • 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 | editovat zdroj]

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 JPEG2000 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 - proto se to v praxi moc nepoužívá. Č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 více rozmazané než originál (neboť ztrátovost komprese se projeví nejvíce u vysokofrekvenční složky).

Významné implementace[editovat | editovat zdroj]

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

Odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

  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/, 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 | editovat zdroj]