JPEG | |
---|---|
Rozšíření | .jpg, .jpeg, .JPG, nebo .JPEG_.jpe.JPE |
MIME typ | obrázek/jpeg |
Podpis | 0xFF 0xD8 |
zveřejněno | 18. září 1992 |
Typ formátu | Grafický formát |
Vyvinutý v | JPEG 2000 , JPEG-LS , JPEG XR , MotionJPEG |
standard(y) | ISO/IEC 10918 |
webová stránka | jpeg.org/jpeg/ ( anglicky) |
Mediální soubory na Wikimedia Commons |
JPEG (vyslov jpeg [1] , angl . Joint Photographic Experts Group , podle názvu vývojářské organizace ) je jedním z oblíbených rastrových grafických formátů používaných k ukládání fotografií a podobných obrázků. Soubory obsahující data JPEG mají obvykle přípony (přípony) .jpg (nejoblíbenější), .jfif , .jpe nebo .jpeg . Typ MIME je image/jpeg.
Algoritmus JPEG umožňuje komprimovat obraz jak ztrátově , tak bezeztrátově (režim bezztrátové komprese JPEG). Podporovány jsou obrázky s lineární velikostí nepřesahující 65535 × 65535 pixelů.
V roce 2010 za účelem uchování informací o digitálních formátech populárních na počátku 21. století pro budoucí generace vložili vědci z projektu PLANETS návod na čtení formátu JPEG do speciální kapsle, která byla umístěna ve speciálním úložišti ve švýcarských Alpách. [2] .
Algoritmus JPEG je nejúčinnější pro kompresi fotografií a maleb obsahujících realistické scény s hladkými přechody jasu a barev. JPEG se nejvíce používá v digitální fotografii a pro ukládání a přenos obrázků pomocí internetu .
Formát JPEG v režimu ztrátové komprese je málo použitelný pro kompresi kreseb, textu a grafiky nápisů, kde ostrý kontrast mezi sousedními pixely vede k znatelným artefaktům . Takové obrázky je vhodné ukládat v bezztrátových formátech jako JPEG-LS , TIFF , GIF , PNG nebo použít režim bezztrátové komprese JPEG.
JPEG (stejně jako jiné formáty ztrátové komprese ) není vhodný pro kompresi obrázků během vícefázového zpracování, protože při každém uložení mezivýsledků zpracování se do obrázků zanese zkreslení.
JPEG by se neměl používat v případech, kdy je i minimální ztráta nepřijatelná, například při komprimaci astronomických nebo lékařských snímků. V takových případech lze doporučit režim komprese Lossless JPEG poskytovaný standardem JPEG (který však není podporován většinou oblíbených kodeků ) nebo kompresní standard JPEG-LS .
Při komprimaci je obraz převeden z barevného prostoru RGB na YCbCr . Standard JPEG (ISO / IEC 10918-1) neupravuje volbu YCbCr, umožňuje jiné typy transformace (například s počtem složek [3] odlišným od tří) a kompresi bez konverze (přímo do RGB) nicméně specifikace JFIF (formát JPEG File Interchange Format, navržený v roce 1991 společností C-Cube Microsystems a nyní de facto standard) zahrnuje použití konverze RGB-> YCbCr.
Po převodu RGB->YCbCr lze pro obrazové kanály Cb a Cr zodpovědné za barvu provést „decimaci“ (podvzorkování [4] ), což znamená, že je přiřazen každý blok 4 pixelů (2x2) kanálu jasu Y průměrné hodnoty Cb a Cr (decimační schéma "4:2:0" [5] ). Zároveň je pro každý blok 2x2 místo 12 hodnot (4 Y, 4 Cb a 4 Cr) použito pouze 6 (každý 4 Y a jeden zprůměrovaný Cb a Cr). Pokud jsou vyšší požadavky na kvalitu obrazu obnoveného po kompresi, lze ztenčení provést pouze v jednom směru - vertikálně (schéma "4:4:0") nebo horizontálně ("4:2:2"), nebo neprovádět vůbec ("4:4:4").
Norma také umožňuje decimaci s průměrováním Cb a Cr nikoli pro blok 2x2, ale pro čtyři po sobě jdoucí (vertikálně nebo horizontálně) pixely, tedy pro bloky 1x4, 4x1 (schéma „4:1:1“), jakož i 2x4 a 4x2 (schéma "4:1:0"). Je také možné použít různé typy decimace pro Cb a Cr, ale v praxi se taková schémata používají velmi zřídka.
Dále jsou složka jasu Y a složky zodpovědné za barvu Cb a Cr rozděleny do bloků 8x8 pixelů. Každý takový blok je podroben diskrétní kosinové transformaci (DCT) . Výsledné DCT koeficienty jsou kvantovány (pro Y, Cb a Cr se obecně používají různé kvantizační matice) a komprimovány pomocí run a Huffmanových kódů . Standard JPEG také umožňuje použití mnohem efektivnějšího aritmetického kódování , avšak kvůli patentovým omezením (patent na aritmetický QM kodér popsaný ve standardu JPEG patří IBM ) se v praxi používá jen zřídka. Populární knihovna libjpeg v posledních verzích obsahuje podporu pro aritmetické kódování, ale prohlížení obrázků komprimovaných pomocí této metody může být problematické, protože mnoho prohlížečů jejich dekódování nepodporuje.
Matice použité pro kvantování DCT koeficientů jsou uloženy v záhlaví souboru JPEG. Obvykle jsou postaveny tak, že vysokofrekvenční koeficienty jsou podrobeny silnější kvantizaci než nízkofrekvenční. To vede k zhrubnutí jemných detailů v obraze. Čím vyšší je kompresní poměr, tím silnější je kvantování všech koeficientů.
Při ukládání obrázku jako souboru JPEG je kodéru přidělen parametr kvality v nějaké libovolné jednotce, například 1 až 100 nebo 1 až 10. Vyšší číslo obvykle znamená lepší kvalitu (a větší komprimovaný soubor). V samotném JPEG souboru však žádný takový parametr není a kvalitu rekonstruovaného obrazu určují kvantizační matice, typ decimace složek barevného rozdílu a přesnost matematických operací jak na straně kodéru, tak na straně dekodéru. V tomto případě i při použití nejvyšší kvality (odpovídající kvantizační matici skládající se pouze z jednotek a absenci decimace složek barevného rozdílu) nebude rekonstruovaný obraz přesně odpovídat původnímu, což je spojeno jak s konečnou přesností DCT a s nutností zaokrouhlit hodnoty koeficientů Y, Cb, Cr a DCT na nejbližší celé číslo. Bezztrátový režim komprese JPEG, který nepoužívá DCT, poskytuje přesnou shodu mezi obnovenými a původními obrázky, ale jeho nízká účinnost (kompresní poměr zřídka přesahuje 2) a nedostatek podpory ze strany vývojářů softwaru nepřispěly k popularitě Lossless. JPEG.
Standard JPEG poskytuje dva hlavní způsoby reprezentace kódovaných dat.
Nejběžnější, podporovaná většinou dostupných kodeků , je sekvenční (sekvenční JPEG) datová reprezentace, která zahrnuje sekvenční procházení zakódovaného obrazu s bitovou hloubkou 8 bitů na komponentu (nebo 8 bitů na pixel pro černobílé odstíny šedé). obrázky) blok po bloku zleva doprava, shora dolů. Výše popsané operace se provádějí na každém zakódovaném obrazovém bloku a výsledky kódování jsou umístěny do výstupního proudu ve formě jediného „skenování“, to znamená pole zakódovaných dat odpovídajících postupně předávaným („skenovaným“) obraz. Základní nebo "základní" režim kódování umožňuje pouze takové znázornění (a Huffmanovo kódování kvantovaných DCT koeficientů). Rozšířený (rozšířený) režim spolu se sekvenčním také umožňuje progresivní (progresivní JPEG) reprezentaci dat, kódování obrázků s bitovou hloubkou 12 bitů na komponent/pixel (komprese takových obrázků podle specifikace JFIF není podporována), a aritmetické kódování kvantovaných DCT koeficientů.
V případě progresivního JPEG jsou komprimovaná data zapsána do výstupního proudu jako sada skenů, z nichž každý popisuje celý obraz ve stále větších detailech. Toho je dosaženo buď tím, že v každém skenování není zaznamenána úplná sada DCT koeficientů, ale pouze některé z nich: první - nízkofrekvenční, v dalších skenech - vysokofrekvenční (metoda "spektrálního výběru", to znamená spektrální vzorky ), nebo postupným, od skenování ke skenování, zpřesňováním DCT koeficientů (metoda „postupné aproximace“, tedy postupné aproximace). Tato progresivní reprezentace dat je užitečná zejména při přenosu komprimovaných obrázků pomocí nízkorychlostních komunikačních kanálů, protože umožňuje získat pohled na celý obrázek po přenesení malé části souboru JPEG.
Obě popsaná schémata (jak sekvenční, tak progresivní JPEG) jsou založena na DCT a zásadně neumožňují získat obnovený obraz, který je absolutně totožný s tím původním. Norma však umožňuje i kompresi, která nepoužívá DCT, ale je postavena na bázi lineárního prediktoru (bezeztrátový, tedy „bezeztrátový“, JPEG), který zaručuje úplnou shodu bitů po bitech mezi původní a restaurované obrazy. Současně kompresní poměr u fotografických obrázků zřídka dosahuje 2, ale v některých případech je zaručená absence zkreslení žádaná. Znatelně vyšší kompresní poměry lze získat pomocí kompresní metody JPEG-LS popsané v ISO/IEC 14495-1 , která i přes podobnost názvů přímo nesouvisí s JPEG ISO/IEC 10918-1 (doporučení ITU T.81 ) standard (doporučení ITU T.87).
Soubor JPEG obsahuje posloupnost značek , z nichž každá začíná bytem 0xFF, který označuje začátek značky, a bytem identifikátoru. Některé značky se skládají pouze z této dvojice bajtů, zatímco jiné obsahují další data sestávající z dvoubajtového pole o délce informační části značky (včetně délky tohoto pole mínus dva bajty začátku značky , tedy 0xFF a identifikátor) a samotná data. Tato struktura souborů umožňuje rychle najít značku s potřebnými údaji (například délkou řádku, počtem řádků a počtem barevných složek komprimovaného obrázku).
Popisovač | bajtů | Délka | Účel | Komentáře |
---|---|---|---|---|
SOI | 0xFFD8 | Ne | Začátek obrazu | |
SOF0 | 0xFFC0 | variabilní velikost | Začátek snímku (základní, DCT) | Označuje, že obrázek byl zakódován v základním režimu pomocí DCT a Huffmanova kódu . Značka obsahuje počet řádků a délku obrazové řádky (dvoubajtová pole s posunem 5, respektive 7, vzhledem k začátku značky), počet komponent (bytové pole s posunem 9 vzhledem k začátku značky), počet bitů na komponentu je striktně 8 (bajtové pole s offsetem 4 vzhledem k počáteční značce), stejně jako poměr komponent (například 4:2:0) . |
SOF1 | 0xFFC1 | variabilní velikost | Začátek snímku (rozšířený, DCT, Huffmanův kód) | Označuje, že obraz byl zakódován v rozšířeném režimu pomocí DCT a Huffmanova kódu. Značka obsahuje počet řádků a délku řádků obrázku, počet složek, počet bitů na složku (8 nebo 12) a poměr složek (např. 4:2:0). |
SOF2 | 0xFFC2 | variabilní velikost | Začátek snímku (progresivní, DCT, Huffmanův kód) | Označuje, že obraz byl zakódován v progresivním režimu pomocí DCT a Huffmanova kódu. Značka obsahuje počet řádků a délku řádků obrázku, počet složek, počet bitů na složku (8 nebo 12) a poměr složek (např. 4:2:0). |
DHT | 0xFFC4 | variabilní velikost | Obsahuje Huffmanovy tabulky | Určuje jednu nebo více Huffmanových tabulek. |
DQT | 0xFFDB | variabilní velikost | Obsahuje kvantizační tabulky | Určuje jednu nebo více kvantizačních tabulek. |
DRI | 0xFFDD | 4 byty | Určuje délku intervalu restartu | Určuje vzdálenost mezi značkami RST n v makroblocích. V nepřítomnosti DRI je výskyt RST markerů n v kódovaném datovém toku nezákonný a je považován za chybu. Pokud se během kódování nepoužijí značky RST n , značka DRI se buď nepoužije vůbec, nebo je v ní interval opakování zadán jako 0. |
SOS | 0xFFDA | variabilní velikost | Začni skenovat | Začátek prvního nebo dalšího skenování obrazu s obtokovým směrem zleva doprava shora dolů. Pokud byl použit základní režim kódování, použije se jeden sken. Při použití progresivních režimů se používá více skenů. SOS marker odděluje informativní (záhlaví) a kódovanou (ve skutečnosti komprimovaná data) část obrázku. |
RST n | 0xFFDn _ | Ne | restartovat | Značky restartu se používají k segmentování dat kódovaných entropickým kodérem. V každém segmentu jsou data dekódována nezávisle, což umožňuje paralelizaci dekódovací procedury. Pokud dojde k poškození kódovaných dat během přenosu nebo ukládání souboru JPEG, použití značek restartu umožňuje omezit ztrátu (makrobloky z nepoškozených segmentů budou správně obnoveny). Vkládá se do každého r- tého makrobloku, kde r je interval restartu DRI markeru. Nepoužívá se v nepřítomnosti DRI markeru. n , nízké 3 bity kódové značky, cykly 0 až 7. |
APP n | 0xFFEn _ | variabilní velikost | Nastaveno aplikací | Například EXIF souboru JPEG používá značku APP1 k ukládání metadat ve struktuře založené na TIFF . |
COM | 0xFFFE | variabilní velikost | Komentář | Obsahuje text komentáře. |
EOI | 0xFFD9 | Ne | Konec zakódované části obrázku. |
Nevýhody komprese JPEG zahrnují výskyt charakteristických artefaktů na obnovených snímcích při vysokých kompresních poměrech : obraz je rozptýlen do bloků o velikosti 8x8 pixelů (tento efekt je patrný zejména v oblastech obrazu s hladkými změnami jasu), v oblastech s vysokým prostorové frekvenci (například na kontrastních obrysech a okrajích obrazu) se objevují artefakty ve formě šumových halo. Standard JPEG (ISO/IEC 10918-1, Annex K, clause K.8) počítá s použitím speciálních filtrů pro potlačení blokových artefaktů, ale v praxi se takové filtry přes svou vysokou účinnost prakticky nepoužívají.
Navzdory nedostatkům se však JPEG velmi rozšířil díky poměrně vysokému (ve srovnání s alternativami, které existovaly v době jeho vzniku) kompresnímu poměru, podpoře komprese plnobarevných obrázků a relativně nízké výpočetní náročnosti .
Pro urychlení procesu komprese podle standardu JPEG se tradičně používá paralelizace výpočtů, zejména při výpočtu DCT. Historicky jeden z prvních pokusů o urychlení procesu komprese pomocí tohoto přístupu byl popsán v roce 1993 v článku Kasperoviche a Babkina [7] , který navrhl originální aproximaci DCT, která umožňuje efektivní paralelizaci výpočtů pomocí 32bitového univerzálního registry procesorů Intel 80386 . Výkonnější výpočetní schémata, která se objevila později, používala rozšíření SIMD instrukční sady procesoru architektury x86 . Výrazně lepších výsledků lze dosáhnout schématy, která využívají výpočetní schopnosti grafických akcelerátorů ( technologie NVIDIA CUDA a AMD FireStream ) k organizaci paralelních výpočtů nejen pro DCT, ale i pro další stupně komprese JPEG (převod barevného prostoru, run-level, statistické kódování atd.) a pro každý blok 8x8 kódovaného nebo dekódovaného obrazu. Článek [8] prezentoval implementaci paralelizace všech stupňů algoritmu JPEG pomocí technologie CUDA, která výrazně zvýšila rychlost komprese a dekódování podle standardu JPEG.
kontejnery na média | |
---|---|
Video/Audio | |
Zvuk | |
Hudba |
|
Rastrové | |
Vektor | |
Komplex |