Lifehacks

Jak funguje komprese JPEG? Rozklad |

Pojďme se bavit o formátu JPEG a kompresi fotografií. Jaké to bylo dříve, jaké je to nyní a co bude dál?

aka_opex 15. prosince 2022 v 09:11

Dnes není nic neobvyklého, že pošleme fotku kamarádovi a nestaráme se o to, jaké zařízení, prohlížeč nebo operační systém používá. To vše díky formátu JPEG, který dokáže zmenšit velikost původního souboru 10, 50 a dokonce 100krát. Obrázky JPEG jsou v našich životech na internetu všudypřítomné, ale za jednoduchostí a snadností použití se skrývají algoritmy, které eliminují detaily, které lidské oko nepostřehne. Výsledkem je nejvyšší vizuální kvalita při nejmenší velikosti souboru.

Přemýšleli jste někdy o tom, kolik místa je na našich zařízeních pro fotografie?

Podívejme se na tuto fotografii:

Jeho rozlišení je 12.2 megapixelů nebo 4032 × 3024 pixelů. Kolik by měl vážit? Pojďme si to spočítat. Jak víte, barvu každého pixelu určují tři složky: červená, zelená a modrá. Každá součást je zakódována osmibitovým číslem. Zjistíme, že takový obrázek bude vážit 8x3x4032x3024 = 292 626 432 bitů, tedy téměř 300 MB.

Ve skutečnosti váží 7.36 MB. To je 40krát MÉNĚ! A pokud budete stahovat přes Whatsapp, bude to nějakých 200 kilobajtů. To vše díky formátu JPEG, se kterým se setkáváme neustále.

Samozřejmě dochází k mírné ztrátě kvality, ale ve srovnání s několika desítkami zmenšení velikosti souboru to už nehraje velkou roli. A nové formáty dobývají trh – stejný hevc. JPEG je stále králem tohoto odvětví. Pojďme tedy zjistit, jak přesně to všechno funguje? A tady je psychologie vidění a to, jak mazaná matematika šetří místo.

Na počátku osmdesátých let byly počítače schopny ukládat a zobrazovat digitální obrázky, ale existovalo mnoho různých řešení, jak to implementovat. Nemohli jste například jen tak poslat obrázek z jednoho počítače do druhého. K vyřešení tohoto problému byla v roce 80 sestavena komise odborníků z celého světa nazvaná Joint Photographic Experts Group (JPEG). Tato skupina lidí vytvořila v roce 1986 standard komprese digitálního obrazu JPEG, který nás zachraňuje dodnes.

Nejprve se podívejme na to, proč je vůbec možné komprimovat obrázek, aniž by naše oči zaznamenaly změny, které formát na fotografii dělá. JPEG odstraňuje informace, které jsou pro lidské oko obtížně vnímatelné.

Nyní stojí za to mluvit o tom, jak naše vize funguje. Jak víte, v oku jsou dva typy buněk citlivých na světlo: tyčinky a čípky. Tyčinky jsou málo citlivé na světlo, ale hrají zásadní roli ve vidění za špatných světelných podmínek, zatímco čípky mají barevné receptory. Poskytují našim očím barevné vidění. Každé oko má asi 100 milionů tyčinek a pouze 6 milionů čípků.

V důsledku toho je oko mnohem citlivější na změny jasu obrazu a méně citlivé na změny barev. Proto při komprimaci obrázku můžete použít následující trik: za prvé oddělte barvu od jasu a za druhé odstraňte trochu barvy a v tomto případě si nikdo ničeho nevšimne. Právě na tomto triku je založena první a velmi důležitá fáze komprese, nazývaná subdiskreditace barev.

Přečtěte si více
Výkresy saunových kamen: jak si vyrobit kovová kamna s uzavřeným ohřívačem vlastníma rukama? Schémata nejlepších návrhů a hotové projekty pro montáž

Ale jak přesně oddělíme jas od barvy? Jak víte, každý pixel je charakterizován třemi složkami: R, G, B – jedna proměnná pro každou barvu, která může nabývat hodnot v rozsahu od 0 do 255.

Trik je v tom, že stejnou informaci můžeme uložit pomocí dalších tří proměnných: Y, Cb, Cr. Pak můžeme snadno převést obrázek s RGB pixely do nového formátu s různými složkami Y, Cb, Cr. Zde Y odpovídá za jas a Cb a Cr jsou barevné kanály. Výpočtem těchto proměnných tedy získáme tři nové obrázky složené z těchto tří složek. Výpočet probíhá pomocí takových záludných vzorců, pokud vás to zajímá.

Toto oddělení je nutné, abychom mohli dále odstranit některé detaily z barevných kanálů (složených z Cb a Cr) Dosud jsme neodstranili žádná data a matematické transformace z jednoho formátu do druhého jsou reverzibilní. Tyto akce se samozřejmě provádějí na všech pixelech obrázku.

Nyní využijeme zvláštnost našeho vidění: změny barev vnímáme hůře než změny jasu. Dříve jsme z původního obrázku získali 2 barevné proměnné a jednu proměnnou jasu.

Nyní je proveden další krok: každé 4 pixely v obou barevných obrázcích jsou sloučeny do 1, čímž se odstraní duplicitní informace. Výsledkem jsou detaily, které naše oči špatně vnímají, tzn. obě barevné složky (Cr a Cb) jsou zmenšeny na ¼ své původní velikosti, zatímco složka jasu zůstává stejná. V pouhých dvou krocích se tak obrázek 2krát zmenší, než je jeho původní velikost

Navíc, pokud nyní shromáždíte tyto 3 komponenty do jednoho originálního obrázku, pak nebude možné si všimnout rozdílu mezi originálem a komprimovaným obrázkem pouhým okem.

Nyní probíhají přípravy na nejdůležitější, nejsložitější a nejchytřejší etapu. Za tímto účelem je každý z našich 3 obrázků, složený z jasu a dvou barevných kanálů, rozdělen do bloků 8×8 pixelů. Nyní musí kompresní algoritmy nějak pochopit, kolik detailů je v každém z těchto bloků. Pokud je málo detailů, můžete kódovat s menším počtem bitů, čímž se zmenšuje velikost souboru, a pokud je detailů hodně, pak naopak.

Jinými slovy, pokud by obrazy v muzeích byly uloženy v džípu, pak by jakýkoli Van Goghův obraz zabíral méně místa než Malevichův černý čtverec.

Tento druh analýzy se provádí pomocí věci s děsivým názvem – diskrétní kosinusová transformace. Než k tomu přistoupíme, podívejme se na tento jednoduchý příklad. Máme vícebarevné průsvitné kusy skla. Jejich položením na sebe získáme barvu, kterou potřebujeme, tj. např. pro získání fialové je třeba položit modrý kousek skla na červený. Stejná situace platí pro algoritmus.

Zvažte jeden z bloků 8×8. Všechny následné akce budou provedeny pro každý z těchto bloků. Tento blok obsahuje 64 pixelů. Ukazuje se, že každý jednoduchý monochromatický obrázek může být reprezentován jako kombinace těchto 64 základních obrázků.

To znamená, že jejich umístěním na sebe s různou mírou průhlednosti můžete získat jakýkoli jednoduchý obrázek 8×8 v podstatě stejným způsobem jako v příkladu se skleněnými kousky.

Přečtěte si více
Kdy a jak prořezávat třešně na jaře: vzory prořezávání stromů, keřů a plstěných třešní

Přesně takto můžeme přestavět jakýkoli z našich bloků 8×8 překrytím těchto základních obrázků přes sebe. V tomto případě je každý ze vzorů vynásoben číslem, které je ukazatelem toho, která jeho část je použita ke konstrukci určitého obrázku.

Podstatou algoritmu diskrétní kosinové transformace je vypočítat tato čísla. Výstupem je matice 8×8 sestávající z čísel, která odrážejí, jak moc nebo moc každý vzor přispívá k danému obrázku 8×8. Vypadá to asi takhle. V pohodě, že?

Čím větší číslo, tím větší příspěvek základního obrázku (vzoru) odpovídající tomuto číslu. Koeficienty umístěné v levé horní části matice jsou zodpovědné za plynulé přechody a obecnější rysy a koeficienty umístěné v pravé dolní části jsou zodpovědné za časté přechody, tzn. pro jemné detaily. Pokud je v tomto bloku málo podrobností, pak se za ně odpovědné koeficienty (umístěné v pravé dolní části matice) budou rovnat nule nebo hodnotám blízkým nule. (Právě v této fázi je zahozena velká část informací, které nejsou pro lidské oko viditelné.) Připomeňme si tento důležitý bod.

Je to trochu jako sestavit si identikit: nos číslo 9, ústa číslo 13, oči někde mezi čísly 6 a 42.

Než půjdeme dále, shrňme si průběžné výsledky. Co v tuto chvíli máme?

Máme matici 64 čísel obsahující informace o tom, jak přesně používat základní obrázky. Kromě fáze subdiskreditace barev jsme dosud nezavrhli významné množství informací, ale pouze určili, co je třeba vyřadit.

Jak se to dělá?

Pro tuto fázi se používá následující tabulka. Říká se tomu kvantizační tabulka. Nemá nic společného s kvantovými počítači. Nelekejte se, zdá se, že je to pro dnešek poslední těžký termín. Zjednodušeně řečeno: určuje, jakou část dříve přijatých informací převezmeme do výsledného souboru. Podívejte se: toto je matice 8×8 obsahující koeficienty, kterými dělíme čísla z naší původní matice. Stupeň komprese je určen charakteristikou kvantizační tabulky, tzn. Čím větší jsou koeficienty v této tabulce, tím menší budou čísla v nové matici. V závislosti na vlastnostech kvantizační tabulky můžeme zmenšit velikost obrázku na 95 % původní velikosti, ale v tomto případě samozřejmě nebude kvalita komprimovaného obrázku nejvyšší. Právě tato tabulka je hlavním nastavením jpeg, které reguluje úroveň komprese.

Nyní přejděme ke kvantování, tzn. fázi, ve které dojde k největší kompresi. Zde nejprve rozdělíme čísla z matice, kterou jsme obdrželi v předchozí fázi, na určité koeficienty odpovídající kvantizační tabulce, a poté výsledná čísla zaokrouhlíme na nejbližší celé číslo (například: dělení 560/4=140; -41/3 =-13,7, 14 – zaokrouhlete na nejbližší celé číslo, dostaneme -XNUMX atd.). Ale co je tato kvantizační tabulka a odkud pochází?

  1. Zdrojová matice
  2. Tabulka kvantifikace
  3. Nová matrice

Pokud se podíváte na kvantizační tabulku, můžete vidět, že největší čísla jsou umístěna vpravo dole v tabulce. To znamená, že nejvíce vysokofrekvenčních dat je vyřazeno, tzn. zodpovědný za ty detaily, které naše oči vnímají nejhůře.

Přečtěte si více
Rajčata Roma: popis odrůdy s fotografiemi, recenze pěstitelů zeleniny

V důsledku tohoto procesu se ukázalo, že většina čísel v naší původní matici se rovnala nule, protože čísla v blízkosti pravého dolního rohu matice byla příliš malá a po dělení a zaokrouhlení klesla na nulu. Zůstanou pouze čísla v blízkosti levého horního rohu matice. V této fázi dochází k nejvýraznější kompresi obrazu, tzn. Téměř všechna data, která naše oči špatně vnímají, jsou vyřazena.

Dále se používá klikaté skenování matice čísel, jehož výsledkem je číselný řetězec s nenulovými hodnotami na začátku a nulovými hodnotami na konci.

Potom místo vypisování všech čísel v řetězci v pořadí použijeme algoritmus kódování délky běhu, takže místo vypsání všech nul jim jednoduše řekneme, kolik jich je.

Dále je již komprimovaná sekvence zakódována pomocí Huffmanova algoritmu. Jedná se o poměrně složitý proces, ale stručně řečeno, nuly jsou kódovány méně bity a nenulové prvky sekvence jsou kódovány více bity.

Proces komprese je dokončen. Obdrželi jsme komprimovaný obrázek jako posloupnost čísel.

Jak to nyní zobrazit na obrazovce? K tomu jsou vyžadovány všechny stejné kroky, ale provedeny v opačném pořadí: 1. Dekódování pomocí Huffmanova algoritmu, 2. Dekódování pomocí metody délky běhu, 3. Vyplnění matice 8×8 koeficienty klikatým způsobem pro každý z 8×8 bloků, 4. Vynásobení jednotlivých čísel matice odpovídajícím koeficientem podle kvantizační tabulky, 5. Změna měřítka barevných složek, 6. Převod získaných hodnot Y, Cb a Cr pro každý pixel do RGB a 7. Zobrazení obrázku ve formátu JPEG na obrazovce. Připraveno!

Pojďme si to shrnout. Jak vidíte, při práci s JPEG se používá velké množství nuancí: vlastnosti struktury oka, matematické kompresní metody, rozklad do spektra.

JPEG má samozřejmě poměrně velké množství nevýhod: nemožnost vysoce kvalitní komprese textových obrázků, zhoršení kvality při opětovném ukládání, ale i přes všechny své četné nedostatky a úctyhodné stáří zůstává dodnes nejoblíbenějším formátem obrázků. na internetu, i když je nyní nahrazován začaly přicházet jiné, mnohem pokročilejší formáty jako HEIC, AV1, WebP a další. Pro popularitu JPEG v současnosti existují samozřejmě důvody: za 30 let existence je velmi dobře prostudován, je zdarma a navíc je každému srozumitelný a známý.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Back to top button