Program pro zpracování fotografií ve formátu RAW
Program MRAW zpracovává soubory fotografií ve formátu Canon CR2,
Canon CRW, Nikon NEF a Adobe DNG. Je schopen dekódovat obraz ze souboru,
aplikovat případné temné snímky, bias nebo flatfieldy a uložit výsledek
ve formátu CR2 nebo DNG. Dále je implementována konverze do formátu
RGB s možností uložení výsledku v nekomprimovaném formátu TIFF
se 16 bity na kanál nebo v komprimovaném JPEG.
Při vývoji programu nebyly využity žádné existující kódy či knihovny,
pouze specifikace příslušných formátů a průzkum skutečných
souborů z digitálních zrcadlovek značek Canon a Nikon. Program
proto může některá data interpretovat nebo zapisovat odlišně, než
bývá u jiných programů obvyklé. To se týká i převodu do RGB formátu,
který využívá vlastní algoritmus interpolace. Zaměřil jsem se na
minimalizaci možných artefaktů, algoritmus však není příliš rychlý
a neprodukuje "zářivé, kontrastní a ostré" snímky, jak bývá u jiných
programů zvykem. Přesto je možné jej použít i pro převod běžných,
denních snímků do formátu TIFF nebo JPEG. Pokud však nejsou správně
exponovány, je zpravidla nutné následně doladit vyvážení barev apod.
Program se spouští z příkazového řádku, jedním příkazem lze zpracovat
více souborů. Pokud je zadáno více jmen vstupních souborů bez dalších
operací, jsou data ze souborů zprůměrována a uložena opět ve formátu CR2
nebo DNG. Pokud je zadáno zpracování souborů ( temný snímek, bias,
flatfield, převod do RGB ), je zpracován a uložen každý soubor
samostatně.
Výstupní soubory ve formátu CR2 jsou kompatibilní se standardem,
při průměrování většího množství snímků však mají větší počet bitů
na pixel, aby se zbytečně neztrácela přesnost. Takové výstupy odmítá
číst plugin CameraRaw ve Photoshopu, vyžaduje přesnou bitovou hloubku
pro daný typ fotoaparátu. Proto je možné volbou v příkazovém řádku
výslednou bitovou hloubku omezit. Ostatní operace se soubory zachovávají
původní počet bitů originálu ( i když je např. kombinován
s temným snímkem s vyšší bitovou hloubkou ). Výstupy ve
formátu DNG jsou vždy konvertovány na 16 bitů/kanál a lze je číst
programem CameraRaw bez problémů.
Originální programy, dodávané s fotoaparáty Canon ( např.
Digital Photo Professional ) odmítají soubory, generované
programem MRAW, zpracovat, protože v nich nenajdou nedokumentované
"tajné" datové struktury, zaznamenané fotoaparátem. Většina ostatních
programů používá algoritmy programu "dcraw", který výstupní soubory
programu MRAW čte bez problémů. Chyby a zjednodušení v programu "dcraw"
byly při vývoji kódu MRAW vzaty v úvahu.
Kompatibilita formátu DNG
Program čte komprimované i nekomprimované DNG soubory verzí 1.1
a vyšší ( Adobe DNG konvertor 3.2 a vyšší ). Teoreticky
by mohl číst i nekomprimované DNG soubory verze 1.0, ale zpracování
by nemělo stejnou kvalitu, jako u vyšších verzí ( chybí maskované
okraje obrazu ). Komprimované soubory DNG 1.0 mají odchylku
od standardu v algoritmu komprese a program s nimi není kompatibilní.
Program pracuje pouze s daty z RGB senzorů s Bayerovou maskou 2x2.
Jiná obrazová data nebude interpretovat správně. DNG soubor
musí být vytvořen se zachováním původního CFA formátu ( tedy
nikoliv tzv. lineární DNG ). Nebylo testováno čtení DNG s vloženým
původním RAW souborem, ale patrně bude fungovat.
Kvalita zpracování závisí na informacích, obsažených v DNG souboru.
Bez problémů je použití souborů, vytvořených Adobe DNG konvertorem
z formátů CRW a CR2, kde je zachována prakticky veškerá informace
z původních RAW souborů. Horší je situace u některých souborů,
převedených z formátu NEF ( z testovaných zejména
z Nikonu D90 ), kde se převodem část informací ztrácí.
Program zapisuje nekomprimované DNG soubory verze 1.2, zpětně
kompatibilní s verzí 1.1. Bez komprese je i vložený náhled.
Soubory jsou tedy poměrně veliké, lze je však číst téměř
libovolným programem, který DNG formát používá.
Kompatibilita formátu NEF
Formát, využívaný zrcadlovkami Nikon, neobsahuje některá data,
využívaná programem MRAW ( a obsažená v souborech
CRW a CR2 ). Také obrazová data ze senzoru nejsou zaznamenána
zcela bezztrátově. Program je schopen se soubory pracovat, kvalita
výsledků však bude patrně v průměru nižší, než u souborů
ze zrcadlovek Canon.
Upozornění :
Program je stále ve vývoji. Byl sice důkladně testován, ale v některých
algoritmech mohou být neodhalené chyby. Je poskytován v dobré víře,
že bude uživatelům užitečný, avšak bez jakýchkoliv záruk.
Autor nenese odpovědnost za případnou materiální nebo psychickou újmu,
způsobenou používáním programu.
Licence :
MRAW je volně šiřitelný program. Můžete jej zdarma používat, šířit, modifikovat nebo
využívat jeho části ve svých programech v souladu s podmínkami
GNU General Public License 3.
Historie :
7.1.2014 verze 1.1.8
s upravenou analýzou histogramu při převodu do RGB pro potlačení vlivu okrajů snímku ( elektroluminiscence apod. )
7.3.2013
verze 1.1.7
s malou úpravou vlastního algoritmu aplikace flatfieldu.
5.3.2013
verze 1.1.6
s doladěnými algoritmy po předchozích úpravách.
4.3.2013
verze 1.1.5 s další
úpravou normalizace úrovní při aplikaci flatfieldu, řešící problémy s přeexponovanými snímky.
3.3.2013
verze 1.1.4 s upraveným
algoritmem normalizace úrovní při aplikaci flatfieldu.
21.1.2011
verze 1.1.3 s malou
změnou určení úrovní jednotlivých kanálů při převodu do RGB u částečně saturovaných pixelů.
30.10.2010
verze 1.1.2 s upraveným
algoritmem určení úrovně černé ve vstupních souborech, kde program není schopen správně identifikovat
maskované okraje senzoru ( zejména jde o temné snímky ve formátu CR2 ).
25.10.2010
verze 1.1.1 s upraveným
algoritmem detekce 10bitových a 12bitových CRW souborů řeší problémy s některými specifickými temnými snímky
z Canonu EOS 300D. Ostatní algoritmy zůstaly beze změn.
29.7.2010
první "stabilní" verze 1.1.0 rozšiřuje
množinu vstupních formátů, umožňuje aplikaci biasu a normalizuje úrovně při aplikaci flatfieldu. Pořadí operací s více
vstupními soubory bylo změněno pro snížení nároků na operační paměť. Převod do RGB formátu byl upraven i pro zpracování
monochromatického obrazu při fotografování přes úzkopásmové filtry. Opraveno několik drobných chyb z předchozích "beta" verzí.
15.6.2010
verze 1.0.beta11 s vylepšenou
detekcí binárních dat, zakódovaných v obraze a odpovídajícími úpravami aplikace temných snímků a flatfieldů.
Proti předchozím verzím lépe interpretuje data z EOS 450D, v nichž jsou rušivé binární sekvence na začátku
i na konci obrazových dat
24.5.2010
verze 1.0.beta10 s upraveným algoritmem
normalizace temných snimků. Úprava řeší technické problémy při výpočtech u některých snímků, metoda a výsledky jsou
stejné, jako v předchozí verzi.
17.5.2010
ve verzi 1.0.beta9 ( build 05/17/10 )
upraveny algoritmy, které mohly způsobit chyby při výpočtech pod systémem MS Windows
10.5.2010
verze 1.0.beta9. Další zpřesnění algoritmu
normalizace temných snímků a omezení interpolace při jejich aplikaci. Aplikace temných snímků vyžaduje delší čas
a ponechává ve snímku více šumu, výrazně se však snižuje riziko vzniku artefaktů
30.4.2010
verze 1.0.beta8. Podstatná úprava algoritmu
aplikace temných snímků a drobné úpravy ostatních algoritmů. Verze lépe řeší problémy s normalizací temných snímků. Doplněna
podpora NEF souborů z Nikonu D700
24.2.2010
verze 1.0.beta7. Úprava algoritmů
aplikace temných snímků a flatfieldů, přesnější řešení problémů s některými snímky z EOS 40D a EOS 50D
10.1.2010
verze 1.0.beta6. Úprava algoritmu
aplikace temných snímků, řešící některé problémy s maskovanými částmi temných snímků z EOS 40D
28.11.2009
verze 1.0.beta5. Doladění algoritmů po předchozích
úpravách podle testovacích souborů, zejména detekce hotpixelů v temných snímcích
27.11.2009
verze 1.0.beta4. Úprava algoritmů z důvodu problémů
s maskovanými částmi flatfieldů u EOS 40D a EOS 50D. Další úpravy vyvážení barev při různých volbách.
26.11.2009
verze 1.0.beta3. Rozšíření možností vyvážení barev,
oprava drobných chyb, další optimalizace algoritmů podle testovacích souborů.
23.11.2009
verze 1.0.beta2. Maximální počet souborů, které je možné
načíst současně, byl zvýšen na 512. Další úprava vyvážení barev částečně saturovaných částí obrazu.
22.11.2009
verze 1.0.beta1, podporující nekomprimované
NEF soubory ze zrcadlovek Nikon D200 a D300. Dále byla mírně upravena konverze do RGB formátu z hlediska vyvážení barev v okolí saturace senzoru.
20.11.2009
verze 1.0.beta0 s podporou zrcadlovek Nikon
( testovány soubory z D60, D80 a D90 ve formátech NEF i DNG ).
Řada algoritmů byla upravena podle zkušeností s testovacími soubory.
17.11.2009
zajištěna kompatibilita výstupních DNG souborů se vstupem programu SubRaw
16.11.2009
verze s plnohodnotným čtením i zápisem DNG souborů
5.11.2009
upravena správa paměti podle návrhu Martina Myslivce,
experimentálně doplněno čtení některých DNG souborů
3.11.2009
doplněno čtení CRW souborů z EOS 300D
31.10.2009
opraveno načítání RAW souborů z EOS 40D
29.10.2009
zveřejněna první testovací verze, vyvinutá na souborech z EOS 20D a EOS 50D
Stažení :
K dispozici jsou následující soubory, obsahující aktuální verzi programu :
- Přeložený program pro příkazový řádek Windows.
Soubor mraw.exe ze ZIP archivu stačí uložit kamkoliv na disk, nepotřebuje žádnou instalaci ani konfiguraci.
- Přeložený program pro Linux - stačí dekomprimovat
příkazem gunzip mraw.gz. Pracuje v prostředí aktuální verze Linuxu - jádro 2.6.x,
dynamické knihovny libc6, libm6 atd.
- Přeložený program se statickými knihovnami, pro odlišení
se soubor jmenuje "mraws". Pracuje pod Linuxem.
- Verze, přeložená pro systém Mac OS X,
za překlad děkuji Pepovi Ladrovi.
- Archiv zdrojového kódu, pro případný překlad
pro jiný operační systém. Studium kódu je také možné, ale jen pro silné nátury. Omlouvám se, ale
vše je ve stavu vývoje a navíc málokdo je schopen číst můj hrozný C-čkový dialekt. Makefile
je připraven pro kompilaci výše uvedených verzí pro Linux a MS Windows s pomocí pčekladače
GCC a sady MinGW32 ( k překladu pro Windows )
Vzhledem k odlišným vlastnostem posledních verzí ponechávám možnost stažení
předchozích testovacích verzí programu :
- Verze 1.0.beta11 :
- Verze 1.0.beta8 :
Pro případné zájemce mám ještě verzi pro stanice s procesory PA-RISC a operačním systémem HP-UX, nepředpokládám však,
že by ji někdo potřeboval.
Použití :
mraw files [-b files] [-d files] [-f files] [volby zpracování] [volby výstupu]
files
jedno nebo více jmen souborů ke zpracování
-b files
jedno nebo více jmen souborů s biasem. Data ze souborů
jsou zprůměrována, na vstupní soubory, temné snimky
i flatfieldy je aplikován výsledný bias
-d files
jedno nebo více jmen souborů s temnými snímky. Snímky
jsou zprůměrovány, na vstupní soubory je aplikován
výsledný temný snímek
-f files
jedno nebo více jmen souborů s flatfieldy. Snímky
jsou před aplikací zprůměrovány. Při aplikaci flatfieldu
je využívána pouze jasová složka, fotografovaná plocha tedy
nemusí být bílá. Měla by však mít ve všech místech
stejou barvu kvůli nerovnoměrné spektrální citlivosti senzoru.
Volby zpracování :
-c level
Úroveň kontrastu (pro RGB výstup). Standardně program
kontrast snímku nemění (hodnota 1).
-e
Extrahování vložených JPEG náhledů do samostatných souborů.
V RAW souborech bývají vloženy dva náhledy, jeden ve větší velikosti (u EOS 50D i v plné
velikosti), druhý malý "thumbnail".
-g level
Gamma korekce (pro RGB výstup, standardně 2.22),
parametr -g bez hodnoty nastavuje korekci 1 (lineární). Funkce pracuje trochu odlišně od běžných
editorů a snaží se méně zdůrazňovat šum kolem úrovně černé. Přesto nedoporučuji nastavovat
příliš vysoké hodnoty, protože vysoká strmost křivky v nízkých úrovních zesílí nejen šum, ale třeba
i zbytky po elektroluminiscenci (darkframe nikdy není dokonalý). Gammu je vhodnější zvyšovat
až po základním zpracování obrazu nějakým editorem. Hodnoty zhruba do 4 nebo 5 jsou však poměrně
"bezpečné" a aspoň hned vidíme, co jsme vyfotografovali
-h
RGB výstup poloviční velikosti, bez interpolace barev.
V podstatě softwarový binning 2x2. Rychlé, bez artefaktů a většinou postačující.
-i
Pouze výpis základních informací o vstupních souborech,
bez zpracování
-l type
Způsob práce s úrovní barev pro RGB výstup (0, 1, 2, nebo 3,
standardně 1). Parametr -l bez hodnoty nastaví typ 0. Číslo může být dvojmístné, pak první
číslice určuje míru oříznutí histogramu shora i zdola. Význam jednotlivých hodnot je následující :
0 - zpracování beze změny úrovní ze souboru. Vzhledem k nerovnoměrné spektrální citlivosti senzoru
je výsledný obraz zpravidla do zelena, někdy je však výhodnější doladit barvy dodatečně, protože
žádné předem dané "správné" vyvážení u astrofotografií neexistuje
1 - vyvážení bílé podle nastavení fotoaparátu, vhodné pro zpracování běžných denních snímků
2 - vyvážení podle volby automatiky při fotografování (jako by byla zvolena Auto WB, pouze pro CR2 formát,
jinak funguje jako -l1)
3 - vyvážení vlastním algoritmem podle úrovní barev, zpravidla žádné "krásné" barvy neposkytne,
ale zachová maximum z průběhu signálu v jednotlivých kanálech.
Pokud je použita dvouciferná volba, pak první číslice má následující význam :
0 (nebo jednociferná volba) - optimální rozsah úrovní podle automatiky programu
1 - bez oříznutí rozsahu (zachová barvy i v částečně saturovaných pixelech)
2 - silnější oříznutí rozsahu, vyšší kontrast za cenu ztráty části barevné informace.
-n value
Úroveň šumu, použitá pouze při aplikaci temného snímku
(celé číslo, standardně 1). Nejedná se o redukci šumu, ale o relativní stanovení úrovně,
jaká se má ignorovat nebo eliminovat při zákmitech do záporných hodnot po odečtení darkframe
apod. Pro většinu situací nedoporučuji s touto hodnotou hýbat.
-p value
Maximální počet bitů na pixel v RAW výstupu. Jak je
uvedeno výše, CameraRaw odmítá pracovat se snímky s odlišnou bitovou hloubkou, než má
převodník příslušného fotoaparátu. Při průměrování třeba dvaceti 12bitových snímků program
zapíše výsledek do 16bitového souboru, aby neplýtval přesností. Volbou -p 12 program
donutíme k zápisu 12bitového souboru, který je možné zpracovat v CameraRaw. V praxi tato
volba není příliš využívána, protože průměrujeme temné snímky a flatfieldy, které pak
čteme opět tímto programem a nezpracováváme je v CameraRaw.
-r
Automatická detekce okrajů snímku místo použití
souřadnic masky z fotoaparátu (pro RGB výstup). Tímto lze získat několik pixelů obrazu navíc,
protože neprůhledná maska senzoru bývá užší, než fotoaparát zapisuje do RAW souboru.
Okraje však u tmavých snímků nemusí být detekovány správně, jednotlivé snímky mohou mít různou
velikost a mohou vznikat chyby v interpolaci barev na okraji. Při následném skládání snímků
se však těch několik pixelů někdy hodí.
-v
Výpisy na terminál, více parametrů -v vyvolá výpis více
podrobností, které pravděpodobně nikomu k ničemu nebudou, pokud se nevyzná ve formátech
souborů a nechce spolupracovat na ladění a vývoji programu.
Bez tohoto parametru program nepíše nic.
Volby výstupu :
-j[c] [name]
Výstup ve formátu JPEG. "c" je úroveň komprese od 1
do 5 (standardně 2). Úroveň 1 je skoro zbytečná, protože se snaží zachovat více barevné informace,
než je v samotném RAW souboru. Při úrovni 2 program používá podobnou kompresi,
jako fotoaparáty Canon při nastavené nejvyšší kvalitě JPEGu.
-m [name]
Monochromatický výstup TIFF. Jde vlastně o kopii RAW souboru
bez interpolace i s maskovanými okraji apod. Zachovává i původní bitovou hloubku, přestože
formát TIFFu je 16bitový. Obraz je tedy dost tmavý, využívá jen malou část rozsahu.
Těžko se hodí k něčemu jinému, než studiu toho, co různé fotoaparáty do RAWu zaznamenávají.
-o[t] [name]
Výstup v RAW formátu (standardní). Slouží k zadání
jména výstupního souboru, RAW výstup program provede i tehdy, když žádné výstupní parametry
nejsou zvoleny. Standardně program zapisuje RAW ve formátu CR2, pokud původní
soubor byl v tomto formátu. V ostatních případech je výstup ve formátu DNG. Tuto
automatickou volbu je možné změnit číslem "t" za volbou -o : -o1 je
výstup ve formátu DNG, -o2 ve formátu CR2.
-t [name]
Výstup v 16bitovém RGB formátu TIFF bez komprese,
kompatibilním se všemi prohlížeči a editory, které jsem zkoušel.
Parametry v příkazovém řádku mohou být sdružovány za jedním znakem "-". Příkaz
mraw test.CR2 -v -v -b -t test.tif
je tedy ekvivalentní příkazu mraw test.CR2 -vvbt test.tif.
Číselné parametry mohou být psány bez mezery jako součást volby nebo za mezerou. Příkaz k převodu do RGB formátu
s kontrastem zvýšeným na úroveň 1.5 a hodnotou gamma 3.0 lze tedy napsat ve formě
mraw test.CR2 -c 1.5 -g 3 -t test.tif
nebo mraw test.CR2 -c1.5g3t test.tif . Textové parametry
( jména souborů ) musí být uvedeny samostatně a odděleny mezerou.
Jména výstupních souborů mohou být uvedena v příkazovém řádku nebo generována automaticky. Program použije
jméno příslušného vstupního souboru ( při průměrování více souborů jméno prvního ) a případně
mu změní příponu podle typu výstupu ( .CR2, .dng, .tif, .jpg ). Pokud soubor s daným jménem existuje,
program připojí ke jménu pořadové číslo _001, _002
atd.
Pokud je v příkazovém řádku zadáno celé jméno výstupního souboru včetně přípony, program jej použije
i v případě, že je starší soubor stejného jména přepsán. To lze využít k rychlému vyzkoušení několika
variant bez zbytečného zaplnění disku. Pokud není jméno úplné ( bez přípony ), program starší
soubory nepřepisuje, přidává k názvu souboru pořadové číslo a příslušnou příponu.
Například příkaz mraw test.CR2 -t abc vytvoří výstupní
soubor abc.tif. Stejný příkaz, zadaný podruhé vytvoří soubor
abc_001.tif. Ovšem příkaz
mraw test.CR2 -t abc.tif původní soubor
abc.tif bez varování přepíše.
Popisovaná syntaxe příkazů možná na první pohled vypadá komplikovaně, umožňuje však rychle
volit nejrůznější možnosti. Obecně mé programy fungují trochu jako pistole bez pojistky.
S jejich pomocí se dá dosáhnout výsledku bez zbytečného zdržování, ale manipulace s nimi vyžaduje
trochu cviku a opatrnosti, abychom se nestřelili do nohy.
Několik mrawoučných příkladů
Příkaz
mraw test.CR2 -t
převede soubor test.CR2 na RGB nekomprimovaný soubor
test.tif se 48 bity na pixel a s korekcí gamma 2.22.
Máme-li 10 souborů s názvy test01.CR2 ..
test10.CR2 , pak příkaz
mraw test*.CR2 -t
převede všechny tyto soubory na RGB soubory test01.tif ..
test10.tif.
Pokud nezadáme žádnou operaci se soubory ( v předchozím příkladu převod do RGB ),
pak příkaz
mraw test*.CR2 -o test
data ze souborů test01.CR2 .. test10.CR2
zprůměruje a uloží do souboru test.CR2.
Chceme-li výstup převést do formátu DNG, pak příkaz
mraw test*.CR2 -o1 test
provede stejnou operaci a výsledek uloží do souboru test.dng.
Máme-li k výše uvedeným souborům ještě temné snimky v souborech
dark01.CR2 .. dark10.CR2 a flatfieldy
v souborech flat01.CR2 .. flat10.CR2, pak
příkaz
mraw test*.CR2 -d dark*.CR2 -f flat*.CR2
zprůměruje temné snímky i flatfieldy, postupně je aplikuje na všechny soubory
test01.CR2 .. test10.CR2
a výsledky uloží ve formátu CR2 do souborů
test01_001.CR2 .. test10_001.CR2.
Chceme-li pro zpracování použít bias, jehož vzorky máme v souborech
bias01.CR2 .. bias10.CR2 ,
použijeme příkaz
mraw test*.CR2 -b bias*.CR2 -d dark*.CR2 -f flat*.CR2
Bias je pak aplikován na vstupní soubory, temné snímky i flatfieldy před jejich aplikací. Příkaz
mraw test*.CR2 -b bias*.CR2 -d dark*.CR2 -f flat*.CR2 -g4.5t
provede stejné operace, ovšem výsledky převede do RGB formátu s korekcí gamma = 4.5 a uloží v souborech
test01.tif .. test10.tif.
Udělá tedy vše, co by se se soubory v RAW formátu udělat mělo a připraví TIFF soubory
pro skládání expozic a další úpravy.
Zpět na hlavní stránku fotografických experimentů