motiv

Jsou výrobci digitálních fotoaparátů podvodníci?

Ještě jednou se zde vracíme k článku, který Ondřej Neff loni uveřejnil na DigiNeffu a kolem kterého se strhnula na FotoPrůvodci rozsáhlá diskuse.

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.

Uspřádání buněk sensoru
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é.

Abychom obdrželi normální obrázek, kde hodnoty intenzit barevných kanálů známe v týchž bodech, je potřeba kanály převzorkovat. Jinými slovy, je potřeba odhadnout hodnoty kanálů ve zvolených bodech na základě známých hodnot, čili je nutné data interpolovat.

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.

Rozločení vzorků barevných kanálů před interpolací
Obr. 2 - Vzorky barevných kanálů před interpolací
Rozmístění vzorků barevných kanálů po interpolaci
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.

Některé běžné metody interpolace, reálný obrázekNěkteré běžné metody interpolace, reálný obrázek - zvětšeno 3x
Obr. 4 - Některé běžné metody interpolace CFA dat, reálný obrázek. Vlevo obrázek ve skutečné velikosti, vpravo výřez 3x zvětšený. Zde vidíte pouze náhledy, nezmenšená verze se vám zobrazí, když na ně kliknete.

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.

Některé běžné metody interpolace, černobílý vzorNěkteré běžné metody interpolace, černobílý vzor - zvětšeno 3x
Obr. 5 - Některé běžné metody interpolace, černobílý vzor. Vlevo obrázek ve skutečné velikosti, vpravo výřez 3x zvětšený. Zde opět vidíte pouze náhledy, nezmenšená verze se vám zobrazí, když na ně kliknete.

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).

Dojde zde tudíž k navýšení celkového objemu dat interpolací na trojnásobek, přičemž počet červených a modrých vzorků se zečtyřnásobí, počet zelených zdvojnásobí.
Jak jemné detaily může obrázek z digitálního fotoaparátu obsahovat je dané hustotou původních vzorků. Nové vzorky vznikají na základě jakéhosi obecného modelu, který není schopný doplnit specifické detaily, které původní vzorky nedokázaly zachytit. Vzhledem k tomu, že hustota původních vzorků je nižší, výsledný obrázek nemůže reprodukovat detaily na té úrovni, na jaké to dokáže plnohodnotný neinterpolovaný obrázek o stejném počtu pixelů. Digitální fotoaparát s CFA sensorem má tudíž fakticky nižší rozlišovací schopnost, než odpovídá uváděnému počtu pixelů.

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.

Selhání interpolace u drobné šachovniceSelhání interpolace u tenkých proužků
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í.

Tím, že se hodnota každé buňky při výpočtech chybějících hodnot použije víckrát, faktické rozlišení dat (množství detailů, které data zachycují) v žádném případě nelze zvýšit, a to ani když se k výpočtu hodnot každého pixelu použije kombinace jiných buněk.

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.

radka
http://radka.tezaur.net/photo
Další články autora

1   2   3   4   5   
1 - výborný ... 3 - průměrný ... 5 - špatný
sdilettisktisk
Diskuse k článku
pavel11.2.2002, 12:41odpověď
radka11.2.2002, 21:22odpověď
MR11.2.2002, 21:09odpověď
radka12.2.2002, 04:43odpověď
BorekL12.2.2002, 16:04odpověď
Mirek14.2.2002, 19:00odpověď
Brano113.2.2002, 15:28odpověď
radka14.2.2002, 01:06odpověď
Jan Novák13.2.2002, 20:30odpověď
radka13.2.2002, 22:10odpověď
Tomas14.8.2003, 13:48odpověď
Pavel Pola14.8.2003, 15:44odpověď
Jirka14.2.2002, 00:37odpověď
radka14.2.2002, 02:15odpověď
Prema13.4.2002, 17:46odpověď
Honza F25.3.2002, 16:58odpověď
Jaroslav Novak19.5.2002, 00:12odpověď
radka19.5.2002, 02:20odpověď
Zenitak31.7.2002, 16:12odpověď
Ziak Erik31.7.2002, 16:47odpověď
radka31.7.2002, 17:45odpověď
Ziak Erik1.8.2002, 09:04odpověď
W.K.5.8.2002, 23:01odpověď
Ziak Erik6.8.2002, 10:44odpověď
W.K6.8.2002, 23:09odpověď
Ziak Erik7.8.2002, 09:13odpověď
W.K8.8.2002, 21:58odpověď
Ziak Erik9.8.2002, 10:00odpověď
W.K9.8.2002, 23:56odpověď
W.K10.8.2002, 15:19odpověď
Ziak Erik12.8.2002, 09:10odpověď
Ziak Erik12.8.2002, 10:23odpověď
W.K13.8.2002, 00:00odpověď
Ziak Erik13.8.2002, 12:22odpověď
jozko pucik12.2.2004, 19:40odpověď
jozko pucik12.2.2004, 19:48odpověď
baghira6.9.2004, 20:13odpověď
Ondra14.10.2002, 16:55odpověď
Tomas4.2.2004, 16:51odpověď
Spectre13.8.2002, 00:36odpověď
jozko pucik12.2.2004, 20:05odpověď
saman11.10.2005, 10:46odpověď
Pavel Pola13.8.2002, 04:30odpověď
Tomas11.12.2002, 17:21odpověď
Pavel28.2.2004, 11:14odpověď
 cb
bela.sebastian24.7.2004, 23:28odpověď
radka25.7.2004, 16:30odpověď
Patronek6.9.2004, 23:09odpověď
radka7.10.2004, 18:07odpověď
Stan20.8.2004, 10:36odpověď
Jiri Dobry7.9.2004, 08:15odpověď
Pepo12.1.2006, 05:54odpověď
malinm20.2.2006, 16:23odpověď
Marek Vojtíšek27.9.2006, 16:37odpověď

přidat příspěvekpříspěvky e-mailemzobrazit vše stromovězobrazit vše podle data

Možná by vás mohlo zajímat




 

 

Tento web používá k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookie. Používáním tohoto webu s tím souhlasíte. Další informace