Záhada histogramu

Histogram patří mezi základní pomůcky při editaci digitálních fotografií. Jeho pochopení je důležité pro správný postup při tonálních úpravách snímků. Bohužel ne každý je zběhlý v matematice a statistice, a tak mnoha digitálním fotografům zůstává význam histogramu utajen. V tomto článku se pokusím srozumitelnou formou některé principy pro práci s histogramem vysvětlit.

Tento článek je z roku 2004, informace v něm uvedené jsou sice stále platné (alespoň myslím), ale můžou působit už poněkud zastarale.

Úvod

Digitální záznam obrazu (v našem případě fotografie) spadá do oblasti teorie signálů, a jako takový má svá specifika, která je dobré znát. Pro zjednodušení v celém článku uvažuji se snímky ve stupních šedi v běžném osmibitovém rozsahu. Při získávání digitálního obrazu se převádí spojitá obecná dvojrozměrná funkce (reálný obraz dopadající ve formě světla na čip fotoaparátu) na diskrétní funkci (pole pixelů – digitální fotografie). Přitom se provádí dva nutné, na sobě víceméně nezávislé procesy – kvantizace a sampling (vzorkování). Kvantizace znamená rozdělení spojité tonální škály (od černé po bílou) do daného počtu jasových úrovní (nejčastěji 8 bitů, tj. 256 různých jasových hodnot). Vzorkování je rozdělení obrazu na jednotlivé body – pixely. Protože tímto procesem vzniká velká sada dat, je vhodné posuzovat je statisticky. Jednou z důležitých statistických veličin charakterizující digitální záznam obrazu je histogram.

Histogram je graf absolutních četností jednotlivých jasových hodnot zastoupených v celém obrazu. Jedná se tedy o diskrétní funkci. Na vodorovné ose se nachází jednotlivé jasové úrovně od 0 do 255, na svislé ose je pak celkový počet pixelů v obraze obsahující danou hodnotu. Hodnota histogramu v bodě i je rovna počtu pixelů této hodnoty v celém obrázku.

Součet všech hodnot histogramu je pak roven celkovému počtu bodů v obrazu. Běžně se ovšem histogram normalizuje, čili na svislé ose si můžeme představit spíš procentuální zastoupení příslušné hodnoty v obrazu od 0 do 100 %.

Histogram a fotografie

Zpět k fotografii. Jedna stará známá poučka říká, že běžná černobílá fotografie by měla obsahovat úplně černou i úplně bílou. Samozřejmě toto pravidlo není absolutní, nicméně pro velkou část fotografií skutečně platí. Protože v digitálním světě je všechno jednoznačné, víme, že jasová hodnota 0 znamená absolutně černou a hodnota 255 absolutně bílou. Fajn. Logicky nám z toho plyne, že každá běžná čb digitální fotografie by měla obsahovat hodnoty 0 a 255.

Pokračujme v úvahách dál – možná si říkáte, že tady něco nehraje. Každý digitálista bojuje s tzv. přepaly, což jsou místa s jasovou hodnotou 255. Všichni známe tyto nepěkné vyžrané fleky bez kresby. Jak tedy jdou dohromady zdánlivě protichůdné požadavky na bílou barvu v obraze a zároveň bez přepalů? Pokud se podíváte na histogram počítačově neupravované fotografie, většinou uvidíte pěknou hladkou křivku. Je to logické, reálný svět je spojitý, proto pokud jeho digitální obraz má být věrný, měl by alespoň spojitě vypadat. Zkuste si vyfotografovat scénu s nízkým kontrastem (aby fotoaparát byl schopen zaznamenat celý expoziční rozsah scény i s rezervou na obou koncích histogramu). Jak teď vypadají konce histogramu? Troufnu si tvrdit, že klesají relativně pozvolně k nule. Nikdy nebudou ostře useknuté, protože takový obraz v reálu neexistuje. Na základě tohoto poznatku můžeme pravidlo zobecnit:

Každý běžný digitální ČB snímek by měl obsahovat obě krajní jasové hodnoty (0 a 255), a to v ideálním případě právě jednou!

Čistě teoreticky by se měl histogram limitně blížit k bílé zleva a k černé zprava. Protože ale většinou máme kvantizační rozsah 256 hodnot a počet pixelů řádově víc (například 3 až 6 miliónů bodů), bude prakticky i bílých bodů v obraze víc než jeden.

Podívejme se na typické ukázky histogramů.

1. Histogram správně exponovaného snímku

histogram_spravny.png

Takto přibližně vypadá histogram správně exponovaného snímku. Všiměte si, že histogram začíná v bodě 0, poté stoupá, dále může mít rozmanitý průběh, ale nakonec opět klesá k nule (k souřadnicím 255,0). Snímek tedy obsahuje nějaké minimální množství zcela černé a stejně tak určité minimální množství bílé. Obsah plochy histogramu je pro všechny snímky stejného rozměru stejný (je to vlastně počet bodů obrazu). Protože se však většinou histogram normalizuje (upravuje se jeho výška na nejvyšší obsaženou hodnotu), vizuálně se může jevit plocha různá.

Takovýto histogram (se dvěma hrby – typ velbloud) má obvykle kontrastní snímek. Naopak pro málo kontrastní snímek je typický tečkovaně naznačený průběh (s jedním hrbem – typ dromedár)

2. Histogram přeexponovaného snímku

histogram_preexp.png

Klasický příklad přeexponovaného snímku. Hodnoty na pravé straně se již nevešly do dynamického rozsahu. Všechny body v červeně označené oblasti budou mít již tonální hodnotu 255. Proto se tato oblast zredukuje do červeně vyznačené úsečky. Tato úsečka bude obvykle extrémě vysoká, což po normalizaci vede většinou k radikálnímu snížení zbytku histogramu.

Asi není nutné zdůrazňovat, že takovýmto snímků je potřeba se vyhýbat, protože ve světlech neobsahují žádnou kresbu.

3. Histogram podexponovaného snímku

histogram_podexp.png

Podexponovaný, tmavý snímek. Histogram se scvrkl k levé části a velký kus dymanického rozsahu zůstal nevyužitý. I takovým případům je dobré se vyhýbat, protože pak musíte v počítači histogram opět natáhnout, což vede jednak k posterizaci (díry v histogramu, zhoršení kresby) a druhak ke zvýšení hladiny šumu.

Operace s histogramem

Histogram nelze upravovat přímo, jeho změna je pouze následek nějaké operace s obrazem. Funkce, které mají za následek změnu histogramu, a tedy slouží k tonálním úpravám snímků, jsou především Brightness and Contrast, Levels, Curves. Samozřejmě i spousta dalších funkcí ovlivňuje histogram, obecně sem patří prakticky každá operace s obrazem. Nicméně tyto tři jsou k tomu přímo stvořené.

Pozn.: Následující screenshoty pocházejí z programu Paint Shop Pro. Ve Photoshopu, Gimpu a jiných editorech jsou však velmi podobné.

1. Brightness and Contrast (jas a kontrast)

dia_brightness.png

Toto je nejjednodušší funkce pro úpravu jasu a kontrastu. A rovnou si řekněme, že pro úpravu fotografií taky nejméně vhodná. Proč tomu tak je zde nebudu podrobně rozepisovat, poměrně do hloubky to rozebírá například článek Radky na Paladixu.

Podívejme se, jaké změny histogramu má za následek tato funkce:

  • hodnota jas posouvá celý histogram vpravo (kladné hodnoty) či vlevo (záporné hodnoty)
  • hodnota kontrast roztahuje histogram symetricky podle střední šedé (kladné hodnoty), nebo ho naopak smršťuje (záporné hodnoty).

Jas:

histogram_jas.png

Kontrast:

histogram_kontrast.png

Proč jsou tyto funkce nevhodné pro úpravu fotografíí je jasné: kdybychom chtěli zesvětlit snímek pomocí brightness, posune se celý histogram doprava, a tím nejen že vzniká riziko přepálení bílé, ale zcela jistě ze snímku zmizí černá barva.

Jak je patrné z obrázků, pokud nastavíme oba parametry shodné, bude se histogram roztahovat (smršťovat) tak, že hodnota 0 zůstane fixována na místě. Tímto způsobem lze simulovat korekci expozice (ovšem lineárně; pravá kompenzace expozice přímo ve fotoaparátu ovšem funguje přímo nastavením clony a času, a výsledek není zcela lineární).

2. Levels (úrovně)

dia_levels.png

Pomocí nástroje Levels můžeme jednoduše a poměrně bezpečně korigovat jas snímku. Děje se tak posouváním krajních bodů histogramu (a příslušnou lineární transformací), navíc můžeme deformovat jas nelineárně pomocí gamma korekce.

Gamma korekce funguje podle následujícího vztahu: iout = iin1/g

Co to provádí s histogramem není už tak jednoduché znázornit, ale následující ilustrace pro představu postačí:

histogram_urovne

3. Curves (křivky)

dia_curves.png, 22 kB

Nástroj Křivky poskytuje největší volnost při tonálních úpravách obrázku. Jedná se vlastě o přímé určení funkce, kterou se mapují vstupní úrovně na výstupní. Pohled na dialogové okno tohoto nástroje často svádí ke srovnání s senzitometrickými křivkami klasických fotopapírů. Ovšem je tu zásadní rozdíl: zatímco charaktristické křivky fotopapírů udávají vlastnost materiálu, nástrojem Křivky určujete pouze transformační křivku jasových hodnot. Často zejména začátečníci mívají tendenci zaměňovat Křivky za jakýsi analytický nástroj ("jakou má ten snímek křivku?"). Což je zásadní nedorozumění. Je potřeba si uvědomit, že křivku namaluje uživatel, a ta logicky nemůže zhola nic vypovídat o snímku. Pouze tím říkáte programu, aby některé úrovně zvedl a jiné snížil. Nic víc.

Příklad korekce expozice pomocí křivky:

histogram_krivky1.png

Příklad zvýšení kontrastu křivky s fixací černé a bílé (zabránění přepalů):

histogram_krivky2.png

Závěr

Tak, to by pro začátek stačilo. Téma histogramu jsem zdaleka nevyčerpal a pravděpodobně se k němu ještě vrátím v dalším článku. Zejména co se týká vztahu kontrastu a histogramu, a dále ohledně degradace obrazu při použití výše uvedených funkcí.