JPEG 2000: Porovnání verzí

Smazaný obsah Přidaný obsah
MatSuBot (diskuse | příspěvky)
m sjednocení infoboxu; kosmetické úpravy
m opravy některých nesmyslů, ale ještě to chce upravit
Řádek 28:
'''JPEG 2000''' je standard pro [[komprese dat|kompresi]] obrazu založený na [[diskrétní vlnková transformace|vlnkové transformaci]]. Umožňuje použít [[ztrátová komprese|ztrátovou]] i [[bezeztrátová komprese|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 [[Portable Network Graphics|PNG]].
 
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.
* Přípona souborů: <code>.jp2</code> nebo <code>.j2c</code>
 
* Přípona souborů: <code>.jp2</code> (kontejner JP2) nebo <code>.j2c</code> (čistý codestream)
* MIME typ: <code>image/jp2</code>
* Při kompresi lze definovat kvalitu, nebo cílovou velikost výsledného souboru.
 
== Postup komprese ==
Řádek 52 ⟶ 53:
</math>.
 
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. (proPak malénedochází obrázky)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 ===
Řádek 58 ⟶ 59:
[[Soubor:Wavelet Bior2.2.svg|náhled|vpravo|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í spline vlnky|biortogonálními spline vlnkami]] 9/7 (v aritmetice s pohyblivou řádovou čárkou) nebo s [[biortogonální spline vlnky|biortogonálními spline vlnkami]] 5/3 (v celočíselné aritmetice, v případě [[bezeztrátová komprese|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í.
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 kvalitugranularitu přírůstku kvality). Pro bezeztrátový režim komprese kvantizace odpadá.
 
=== Kódování koeficientů ===
Po kvantizaci je každé podpásmo rozděleno na „packetnepřekrývající partitions“se oblasti čtvercové(precint), nepřekrývajícíkteré sepozději oblastiodpovídají paketům. Jsou typicky voleny tak, aby napříč podpásmy tvořily bloky v originálním obrazu. KaždáTy packetjsou partitiondále je dělenarozděleny na bloky kódovaní (code-block) stejné velikosti (kromě bloků na kraji obrazu),. všechnyVšechny bity všech koeficientů v bloku jsou pak kódovány pomocíalgoritmem EBCOT.
 
[[Soubor:Jpeg2000 EBCOT.png|vpravo]]
Řádek 70 ⟶ 71:
* Nejprve se rozdělí koeficienty do [[bitová rovina|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ízpracovávají po čtyřřádkových blocíchpruzích, v rámci blokupruhu 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''.
 
Prvním průchodem je vždy ''Cleanup Pass''.
 
Bit je důležitý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é kódování|aritmetickým kodérem]], tzv. [[MQ kodér]]em.
Kontext koeficientukódovaného bitu 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ší…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. 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 algoritmukodéru, stejně tak pořadí paketů ve vrstvě. ObecněJednou sez možností organizace codestreamu je očekává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.
Řádek 97 ⟶ 96:
* 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ímzahodí.
* Při kompresi na určitou velikost se vždy přidávámpřidává bit, který nejvíc pomůže. Po dosažení velikosti se zbytek bitů zahodí.
 
== Další vlastnosti JPEG 2000 ==
Řádek 108 ⟶ 107:
 
== Srovnání s JPEG ==
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 JPEG2000JPEG 2000 má oproti JPEG vyšší paměťovou i časovou náročnost. Na rozdíl od JPEG se neprojevují [[artefakt]]y 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 rozmazanější než originál (neboť ztrátovost komprese se projeví nejvíce u vysokofrekvenční složky).