V minulém dílu seriálu o čudlíkování jsem se dost podrobně zabývala převzorkováním obrázků. Pokusila jsem se tam mimo jiné vysvětlit, co je to interpolace a jak funguje, a zmínila jsem se tam též o tzv. Nyquistově frekvenci. Ráda bych toho teď využila a ještě se vrátila k tématu, o kterém se před časem na FotoPrůvodci velmi bouřlivě diskutovalo. Chci zde ukázat, že to, co Ondřej Neff napsal ve svém článku Co je CCD (5) uveřejněném na DigiNeffu, je chybné a že pravda je ve skutečnosti na straně čtenáře, kterého Ondřej Neff obvinil ze základního nepochopení principu generování digitálního obrazu.
Sensor digitálního fotoaparátu tvoří pole světlocitlivých buněk. Dopadne-li na buňku světlo, vytvoří se na ní elektrický náboj, jehož velikost je úměrná množství světla, které na buňku dopadne. Velikost náboje se pak převede na číslo, které reprezentuje intenzitu obrazu v daném bodě. Problém ale je, co s barvou. Každá buňka totiž generuje jen jednu hodnotu intenzity a my, abychom zachytili barvu, potřebujeme tři – pro každý ze tří barevných kanálů jednu.
V případě skeneru, kde se obrázek snímá postupně po řadách, lze jednoduše v každém bodě provést měření tři. Buď lze použít jednu řadu buněk a provést expozici třikrát, pokaždé světlem jiné barvy, nebo se snímač může skládat ze tří řad buněk, každé citlivé na jinou barvu, a tím, že se snímač posune vždy jen o jednu řadu, se v každém bodě postupně změří intenzita pro všechny tři barevné kanály. Při fotografování si takový luxus ovšem bohužel obvykle nemůžeme dovolit. Pokud by se scéna exponovala takto postupně, bylo by to příliš pomalé a v průběhu snímání by docházelo ke změnám scény a polohy fotoaparátu, což by mělo za následek nežádoucí deformace obrazu. Proto je potřeba expozici provést najednou. Nejběžnějším způsobem řešení problému barvy je použití obdélníkového pole buněk, kde každá buňka má před sebou barevný filtr a je tudíž citlivá pouze světlo jisté barvy (CFA - Color Filter Array). Obdržíme tak současně hodnoty intenzity všech kanálů, nicméně, protože se expozice provádí najednou, máme pro každý kanál hodnoty v jiných bodech.
| Obr. 1 - Uspřádání buněk sensoru |
Buňky ciltivé na jednotlivé barvy mohou být rozmístěny různě. Nejoblíbenější je Bayerovo uspořádání zachycené na Obr. 1. Každá čtveřice sousedních buněk zde obsahuje dvě zelené buňky, jednu červenou a jednu modrou. Zelené buňky jsou umístěné na jedné diagonále, červená a modrá buňka na opačné.
Počet pixelů výsledného obrázku bývá stejný jako počet buněk, až na pár extra řad buněk po stranách potřebných při interpolaci. Pozice pixelů jsou stejné jako pozice buněk, v každém bodě ale známe hodnotu jen jednoho kanálu. Pro zbylé dva kanály ji musíme doplnit. Jinými slovy, známe hodnoty kanálů na sítích bodů zobrazených na Obr. 2 a potřebujeme dointerpolovat jejich hodnoty ve všech ostatních bodech, kde se přímky protínají, t.j. na sítích znázorněných na Obr. 3.
| Obr. 2 - Vzorky barevných kanálů před interpolací |
| Obr. 3 - Vzorky barevných kanálů po interpolaci |
K dopočítání chybějících vzorků je možné použít různých metod. Nejjednodušší způsob je vždy s každou buňkou uvažovat její tři sousedy ve čtveřici – např. vlevo, nahoře a šikmo vlevo nahoře. Chybějící hodnoty se v daném bodě doplní vždy hodnotami sousedních buněk patřičné barvy. Tento způsob ovšem není nic jiného, než obyčejná interpolace nejbližším sousedem provedená u každého z kanálů. Podobně jako v případě zvětšování a zmenšování obrázků i zde interpolace nejbližším sousedem dává velmi slabé výsledky. V praxi se proto používají složitější metody interpolace, založené na modelech, které lépe vystihují realitu. Kromě obecných interpolačních metod zmíněných v seriálu o digitálních úpravách, jako třeba bilineární nebo bikubické interpolace, se zde používají i specializované metody vyvinuté speciálně pro tento typ dat. Velmi pěkný přehled hlavních metod zpracoval Ting Chen, jeden ze studentů Laboratoře informačních systémů Stanfordské univerzity, ve svém ročníkovém projektu A Study of Spatial Color Interpolation Algorithms for Single-Detector Digital Cameras. Zpráva obsahuje u většiny metod kromě popisu rovněž i jejich implementaci v Matlabu - dovolila jsem si tyto programy využít k vytvoření příkladů, které zde můžete vidět.
Na Obr. 4 jsou zachycené výsledky práce několika nejběžnějších metod na reálných datech. Abychom měli srovnání, jak by výsledek skutečně měl vypadat, vychází se z kompletního digitálního obrázku a výstup CFA sensoru se simuluje tak, že se u každého z kanálů ponechají vzorky pouze v bodech naznačených na Obr. 2. Zbylé 2/3 vzorků se zahodí a znovu doplní interpolací. Na výsledných obrázcích můžeme pozorovat typické artefakty, které vznikají při použití zejména těch nejjednodušších metod. Kromě zubatosti hran a ztráty ostrosti, se kterými jsme se setkali už při zvětšování obrázků, se zde objevují i posuny barev a zejména barevné zuby, vypadající jako “zipy” podél hran. Specializované metody, které provádějí interpolaci adaptivně, na základě analýzy dat v okolí každého bodu, jako např. na obrázku prezentovaná metoda založená na detekci hran nebo metoda lineární barevné korekce, dávají lepší výsledky. Jsou ale početně mnohem náročnější. Např. u tohoto konkrétního obrázku a této konkrétní implementace v Matlabu je interpolace nejbližším sousedem více než stokrát rychlejší než metoda lineární barevné korekce – zatímco interpolace nejbližším sousedem byla hotová za několik setin sekundy, při použití metody lineární korekce výpočet trval několik sekund. Jak je vidět, volba metody je kompromisem – za rychlost se platí kvalitou.
Barevní “duchové” a “zipy” podél hran jsou způsobené tím, že pro každý kanál známe hodnoty v jiných bodech. Je-li na obrázku někde strmý přechod (hrana), pak v interpolovaných datech má tendenci vzniknout přechod v každém kanálu v trochu jiných místech – výsledkem je pak barevné moiré kolem hran. Toto působí velmi rušivě zejména u monochromatických a téměř monochromatických námětů. Ukázka barevného moiré vzniklého na černobílém obrazci je na Obr. 5. Metody, které pozici přechodů nějakým způsobem detekují a interpolaci výsledkům patřičně přizpůsobí, nejen do značné míry eliminují vznik těchto barevných artefaktů podél hran, ale výsledné obrázky jsou pak také opticky ostřejší. Někdy ovšem zvýšený lokální kontrast navozující dojem ostrosti může být až přehnaný - můžeme to pozorovat např. na tečkách na okvětních plátcích na zvětšených výřezech na Obr. 4, kde u interpolovaných obrázků v dolní řadě jsou tečky výrazněji definované a tmavší, než u originálu.
Jak je to s rozlišením obrázků z digitálu? Podívejme se nejprve na počty vzorků. Zanedbáme-li extra řady buněk na krajích, potřebné pro interpolaci, pak začneme-li s N vzorky z N buněk – N/4 červenými, N/4 modrými a N/2 zelenými, skončíme s N pixely, tj. N vzorky červenými, N modrými a N zelenými, čili celkem 3N vzorky (jak je vidět na Obr. 2 a 3, kde N=120).
Tvrzení, že obrázek z digitálního fotoaparátu poskytuje stejné rozlišení jako standardní neinterpolovaný obrázek o třetinovém počtu pixelů, neboli 1,73x menší v každém směru, není zcela přesné, jelikož jednotlivé kanály jsou vzorkovány různě hustě, tzn. jejich rozlišovací schopnost (vyjádřená nejvyšší zachytitelnou frekvencí - Nyquistovou frekvencí) se liší. U červeného a modrého kanálu je v každém směru dokonce pouze poloviční; zelený kanál poskytuje o něco větší rozlišení.
Vzhledem k tomu, že vzdálenost mezi vzorky každého ze tří kanálů je větší než jeden pixel, detaily o velikosti zhruba jednoho pixelu CFA data nejsou schopná zachytit. Představte si např., že fotografujete černobílou šachovnici, která má čtverečky tak drobné, že na jeden čtvereček připadne přesně jedna buňka sensoru. Pokud by každá buňka měřila intenzitu všech tří kanálů, dostali bychom opravdu černobílou šachovnici. Nicméně zde, vzhledem k tomu, že buňky CFA sensoru jsou citlivé jen na jednu barvu a jsou rozmístěné jako na Obr. 1, tak výsledek bude takový, že všechny zelené buňky uvidí např. bílé čtverečky, zatímco všechny modré a červené buňky černé. Tj. (za ideálních podmínek, pomineme-li šum vznikající při snímání a pod.) všechny zelené vzorky budou mít hodnotu 255 (bílá má RGB složky 255, 255, 255) a červené a modré vzorky 0 (černá je 0, 0, 0). Úplně stejná data ovšem dostaneme, budeme-li fotografovat jednolitou jasně zelenou plochu (s RGB komponentami 0, 255, 0)! Algoritmus dopočítávající chybějící hodnoty nemá absolutně žádné vodítko, které by naznačovalo, zda šlo o černobílou šachovnici nebo o zelenou plochu. Jsou to deterministické funkce a nemůžou dát pro stejná data pokaždé jiný výsledek. Navíc zde nemluvíme pouze o dvou různých obrázcích, pro která budou data stejná, ale o nekonečně mnoha takových obrázcích! Stejně dobře totiž mohlo jít o šachovnici černo-zelenou, černo-žlutou, zeleno-žlutou apod., v nekonečném množství různých odstínů (pomineme-li diskretizaci hodnot barev). Nebo ani nemuselo jít o šachovnici, ale o jeden z mnoha jiných vzorů např. o pruhy široké jeden pixel.
Takto jemná textura reprezentuje příliš vysokou frekvenci, přesahující Nyquistovu frekvenci pro danou hustotu vzorků. Data ji nedokáží zachytit. Žádný výpočet ji nemůže z dat, ve kterých není zachycená, zrekonstruovat. Kde nic není, ani smrt nebere. Toto je zachyceno na Obr. 6. Jak vidíme, ve všech případech je výsledkem interpolace takovýchto dat jednolitá zelená plocha. Vzhledem k tomu, že jednobarevné plochy se v obrázcích vyskytují velmi často, má to smysl. Metoda, která by pro takováto data (tzn. i pro jednobarevné zelené plochy) dávala šachovnici nebo pruhy, by v praxi nefungovala příliš dobře. Model o který by se opírala, by nebyl vhodný model pro reálné obrázky.
| Obr. 6 - Selhání u drobné textury. Zvětšeno 3x. | |
Výše uvedený příklad je sice poněkud akademický a v praxi k takhle extrémním situacím zpravidla nedochází, nicméně to, že data ze sensoru uspořádaného jako na Obr. 1 nedokáží detaily o velikosti zhruba jednoho pixelu zachytit, je patrné např. i na Obr. 4. Všimněte si, že žádná z metod interpolace nedokázala věrně zreprodukovat drobné tečky na okvětním plátku. Tenké čáry na Obr. 5 také působí problémy.
Takže abych to shrnula: Obrázky obdržené digitálními fotoaparáty s CFA sensorem jsou interpolované. Dochází k navýšení objemu dat na trojnásobek a tvrzení, že skutečná rozlišovací schopnost odpovídá třetinovému počtu pixelů, je sice velmi zjednodušené, ale má poměrně blízko k pravdě. Ondřej Neff se mýlí, když tvrdí, že se zde interpolace neprovádí - nebo, nověji, když interpolaci v tomto kontextu odmítá interpolací nazývat, viz dodatek k jeho článku Co je interpolace na DigiNeffu. Z matematického hlediska totiž zcela jasně jde o interpolaci a tento termín se též používá i v odborné literatuře týkající se problematiky CFA sensorů (viz např. obsáhlý seznam referencí v Ting Chenově zprávě). Zmatek sem nevnáší ti, kdo používají termín interpolace, ale Ondřej Neff. Mlhavý pojem “komparace” který propaguje, pouze mate a zastírá podstatu věci. Nepatří do slovníku odborníka, ale do kategorie klasických marketingových triků. Většina zákazníků má zafixováno, že interpolace = podvod, a pokud se podaří zamaskovat, že jde o interpolaci, a vzbudit dojem, že se jakousi zázračnou komparací z hodnot buněk vytvoří plnohodnotná data, je to nepochybně plus. Vysvětlení na stránkách Foveonu, které Ondřej Neff v dodatku ke svému článku Co je to interpolace označil za účelové zneužívání termínu interpolace, naopak vůbec žádným marketingovým trikem není. Toto vysvětlení je sice poněkud zjednodušené, leč v principu zcela pravdivé.
Představa Ondřeje Neffa, že k umělému navýšení objemu dat zde nedochází a obrázky produkované digitálem s CFA sensorem jsou neinterpolované, plnohodnotné, protože se barvy doplní na základě porovnání hodnot sousedních buněk, přičemž trik spočívá v tom, že každá buňka se použije víckrát, je naivní a zcela mylná. Zázraky se nedějí.
Je to přesně totéž jako u zvětšování obrázků. Tam se také RGB hodnoty každého starého pixelu účastní výpočtu vždy několikrát. Nicméně tím se ztracené detaily nenahradí. Nyquistova frekvence je Nyquistova frekvence. Cokoli menšího je nenávratně ztraceno.
Znamená to tedy, že výrobci digitálních fotoaparátů jsou podvodníci? Podle mě nikoli. Udávat faktické rozlišení a nikoli počet pixelů výsledného obrázku by bylo poněkud komplikované (ona to není tak docela ta třetina, která bývá často zmiňovaná), nepraktické a jen zbytečně matoucí. Interpolace u CFA sensorů funguje velice dobře a lepší cenově dostupné a v praxi použitelné technické řešení momentálně neexistuje. Normálnímu uživateli může být celkem jedno, jestli obrázky, které svým digitálním fotoaparátem získá, jsou interpolované nebo ne. Na druhou stranu, pokud se provádí exaktní srovnání rozlišovací schopnosti digitálních fotoaparátů a skenerů, či filmu, pak je potřeba skutečnost, že u digitálních fotoaparátů s CFA sensorem se data doplňují interpolací a faktické rozlišení obrazu je nižší, než by odpovídalo počtu pixelů, vzít v úvahu.
Závěrem bych ráda poděkovala Radku Tezaurovi, který mě na Ting Chenovu zprávu upozornil.




