Hlavní navigace

Fotíme manuálně RAW s iPhone X a distribucí Linux From Scratch

8. 12. 2020
Doba čtení: 11 minut

Sdílet

 Autor: Depositphotos
Kupodivu není potřeba žádný kabel, aplikace iTunes, emulátor Windows, instalace knihoven, peníze, kreditní karta, registrace, koukání se na reklamy, nic takového! Stačí nám telefon a nějaký ten software.

Budeme potřebovat:

  • iPhone X nebo 8, 8 Plus, 7, 7 Plus, 6s, 6s Plus, SE. Pravděpodobně to bude chodit i na novějších modelech.
  • Počítač s WiFi LAN spojením s iPhonem. Já mám iPhone na Internetu přes mobilní síť a funguje jako hotspot (WiFi access point) pro laptop s LFS. Nejsem si bohužel jist zda to bude fungovat s externím WiFi access pointem protože mi obecně přijde, že iPhone a aplikace na něm mají spoustu nečekaných omezení a jsou nespolehlivé, a jiné scénáře jsem nezkoušel.
  • Na počítači Linux From Scratch (LFS) nebo jiný Linux s GCC
  • Webový prohlížeč s javascriptem (zkoušeno s Firefoxem)
  • Na iPhonu nainstalované aplikace AirDroid (přenos dat), Flannl (na konci je malé L, manuální raw kamera), RCam (pokud potřebujeme fotit s bleskem nebo svítilnou)
  • Množství nervů na četné bugy a frustrace aplikací a iPhonu

Ikony aplikací Airdroid, Flannl a RCam na iPhonu

Doporučuji:

  • Nabíjecí kabel iPhone a USB zdroj 5 V aspoň 1 A
  • Hrnec nebo pánev s rovným, tepelně vodivým dnem, který se dá postavit vzhůru nohama na stůl
  • Čistý textil, co utře čočku bez zanechání mastnoty

Kompilace programu dcraw pod LFS

Program dcraw.c zkompilujeme do binárky dcraw příkazem

gcc -o dcraw -O4 dcraw.c -lm -DNODEPS

Tento oficiální kompilační příkaz jsem zvolil, protože se mi nechtělo řešit odkud a jak nainstalovat knihovny lcms2 a jasper a řešit případné chyby při jejich kompilaci. Chodí to krásně bez nich.

Postup focení

Volba kamery

iPhone X má dvě fixní kamery. Nemohou zoomovat. Vyšší „zoomy“ se dělají ořezáním obrázku. Technické parametry jsem vyhledal a vypočetl:

Parametr Kamera 1× Kamera 2×
Rozlišení v „pixelech“ (subpixely Bayerovy CFA masky) 4032×3024 4032×3024
úhlová perioda pixelů ve středu zorného pole 306 µrad 165 µrad
Pro srovnání: průměr Měsíce (9040 µrad) 30 pixelů 55 pixelů
Ekviv. ohnisková vzdálenost hlášená v DNG raw souboru pro teoretické 36×24 mm políčko 35 mm filmu FocalLengthIn35mmFilm 28 mm 52 mm
Skutečná ohnisková vzdálenost hlášená v DNG raw souboru FocalLength 4 mm 6 mm
Skutečná ohnisková vzdálenost v pixelech 3268 px 6061 px
Název Sony Exmor RS Sony Exmor RS
Typ stacked back-illuminated CMOS stacked back-illuminated CMOS
Pixelová perioda („velikost“) pixelů senzoru 1224 nm 990 nm
Rozměry senzoru 4,94 × 3,70 mm 3,99 × 2,99 mm
Clonové číslo f/1,8 f/2,4
Čistý průměr čočky 2,22 mm 2,5 mm
IR filtr ano ano
optická stabilizace ano ano
rozsah ISO citlivosti (elektronické zesílení v CMOS senzoru) 25–2000 25–800
rozsah expozičního času 1/3–1/40 000 s 1/3–1/40 000 s
Nejbližší zaostření 9 cm 28 cm
Rozlišení dokumentu při nejbližším zaostření 922 dpi 550 dpi
Velikost pole při nejbližším zaostření 11,1 cm x 8,33 cm (zhruba papír C7) 18,6 cm x 14,0 cm (zhruba papír B6)

Lidské oko má čistý průměr čočky max. asi 6 mm a kvantovou účinnost tyčinek 0,25 (Rieke, Baylor: Single-photon detection by rod cells of the retina, Table I). Fotodioda v CMOS senzoru odhaduji bude mít téměř 100% (SFH203 bez antireflexu v Ronje měla 89%), ale barevné filtry, které propouštějí vždy jen třetinu spektra, ji srazí tak na 30 %.

Kdyby tam byla dělící kostka co fotony rozhazuje do směrů místo aby je pohlcovala jako v kamerách se třemi CCD, bylo by to lepší. Lidské oko tak bude mít stejný kvantový šum obrazu při sedmkrát slabším osvětlení. Na mysli mám kvantový šum nezávislý na úhlovém rozlišení pixelů. iPhone X tak lidské oko neporazí, ale zrcadlovky, jejichž objektivem se dá zapálit cigareta, určitě ano.

Focení se svítilnou – aplikace RCam

Tuto použijeme jen v případě nutnosti blesku, svítilny, nastavení na který bod obrazu autofokusovat nebo autoexponovat, nebo kontroly čísel autofokusu během focení.

Její nevýhody:

  • Kopírování fotek ven je martyrium
  • Přijde mi, že bere víc proudu než aplikace Flannl
  • Pomalejší focení
  • Fotky zabírají v iPhonu o 50 % víc místa
  • Nastavování hodnot točítkem u pravého kraje často náhodně aktivuje stahování konfiguračního menu iPhonu z okraje
  • Za slunečných podmínek aplikace svévolně přenastavuje expoziční čas, když člověk ladí ISO, i když expoziční čas je jasně červeně podtržen jako že je nastaven na manuál
  • I samotné nastavování hodnot před foceném, bez jakéhokoliv focení, spotřebovává takové množství CPU, že se telefon přehřeje, omezí jas displeje a za slunečného počasí pak na displej není vidět a s aplikací téměř nelze pracovat.
  • Menu jsou plná zákeřných cripplewarových položek které nefungují a místo toho je třeba odkliknout hlášku, že jsou za peníze, která potřebuje odkliknout. To zpomaluje a frustruje, pokud si člověk nepamatuje z hlavy všechny funkce, kde tohle nastává.
  • Vstup do menu nastavení pod ozubeným kolečkem nebo do galerie nebo přepnutí mezi fotem a videem tam a zpět bezdůvodně vypne světlo a RCam pak lže, že je světlo zapnuté.
  • Zapnutí světla způsobí, že parametry nastavení parametrů fotografie (čas atd.) začnou být nedostupné, ač jsou na úplně jiném místě obrazovky. Je třeba stisknout ikonu menu světla ještě jednou.
  • Po přepnutí módů video → RCam 1 sekundu lže, že RAW režim je vypnutý.
  • Při každém startu je třeba zmáčknout zbytečné OK (upomínka nesmyslného požadavku na povolení mikrofonu)

Focení výchozí – aplikace Flannl

Postup focení

  • V nastavení telefonu aplikaci zapneme přístup ke kameře a galerii fotek. Aplikace chodí i bez přístupu k GPS.
  • Registraci uživatele zneškodníme stisknutím ikony foťáku.
  • Namíříme kam chceme fotit a ťukneme na obrázek. Tím se to nějak samo nastaví.
  • Ťukneme na 3 ikony vpravo dole, které zoranžoví a tak zamknou fokus, čas+zesílení CCD zesilovače (ISO citlivost) a bílý bod. Fokus 0 je na blízko, 125 dál než nekonečno, které je někde u 85. Zesílení je lineární s číslem ISO, 25 je malé zesílení, 800 velké. Výsledná numera v souboru budou přímo úměrná počtu fotonů, která napadaly do daného pixelu, ale mohou mít „přidanou hodnotu“ – ze svodového proudu fotodiod a možná i zesilovač má DC offset?
  • Posouváním prstu po obrazovce vlevo vpravo vybíráme nastavovaný parametr (fokus, čas atd.) a nahoru dolů měníme jeho hodnotu.
  • Po stisknutí spouště se vyfotí fotka a uloží do normální fotogalerie telefonu. Pokud manuálně fotíme burst (automaticky ho to neumí), něco se zavaří a Flannl několikrát ignoruje stisknutí spouště.
  • Revize ostrosti: U Flannl vyžaduje okliku. Vstoupíme do systémové aplikace iPhonu Photos a dáme editovat vyfocený obrázek. Zazoomujeme a vidíme, zda byl vyfocen ostře. Pak musíme stisknout Cancel, jinak se raw soubor přemaže JPEGem.

Bugy při práci ve Flannl

  • Dotyková plocha iPhonu je velmi nespolehlivá a často interpretuje posouvání prstu jako ťuknutí. To způsobuje, že se provede autokalibrace, oranžové ikony zase zbělají a pracně manuálně nastavené hodnoty se nám rozhází a musíme je nastavovat znova. Je třeba „chodit po vejcích, aniž bychom je rozšlapali“, což mi přijde vyčerpávající. iPhone byl zakoupen nový a neutrpěl nic co by mohlo dotykovou plochu poškodit, prst i telefon byly suché.
  • Aplikace někdy selže tak, že ťukneme na oranžovou ikonu, aplikace to akceptuje ťuknutím vibrátoru, ale „přepne“ se z oranžové na oranžovou (selhání logické funkce inverze bitu mezi 0 a 1).
  • Zamknutí nastavení je ve Flannl nespolehlivé, někdy svévolně přenastavuje hodnoty i když všechny ikonky zůstávají oranžové. Jindy zase oranžovou barvu náhle svévolně vypne, aniž bychom se obrazovky vůbec dotkli. Aplikace také náhodně segfaultuje (zmizí z obrazovky a najdeme ji v přepínači aplikací restartovanou). Tyto problémy jsem v RCam nespozoroval.
  • Když přepneme z kamery 1 na 2 a zpět na 1, není možné nastavit ISO 800–2000, ač to kamera 1 umí a předtím to nastavit šlo. Je třeba restartovat aplikaci.

Autofokus ve Flannl

Pokud používáme autofokus, ten se čas od času sám od sebe najednou rozostří a zaostří, případně zůstane nekompletně zaostřen. Pokud při tom zrovna fotíme, vznikne rozmazaná fotka. Toto monitorujeme tak, že v menu najedeme na fokus ale neuvolníme prst z obrazovky. Fokus nám tak neustále ukazuje čísílka, jak autofokusuje. Pokud vidíme, že jsou stabilní a rozumná, můžeme vyfotit, a nebo ještě lépe přepnout fokus na manuál a pak vyfotit.

Pokud autofokusu úplně nevěříme zda je nastaven optimálně, dáme ho na manuál a rozostříme. Pak ho přepneme na auto a sledujeme, jak se čísla při zaostření ustálí.

Autofokus se na blízkém dorazu podivně zasekává. Pod číslem asi 40 najednou začne jet k číslu 0 a tam se zasekne. Pokud kameru opět zpátky trochu oddálíme, autofokus nezafokusuje, ač je kamera ve vzdálenosti, kde je schopna ostřit.

Kalibrace expozičního času

I přes optický stabilizátor je u kamery 1× potřeba použít čas 1/50–1/100 a u kamery 2× 1/100–1/200, aby byl obraz dokonale ostrý, pokud telefon držíme v ruce.

Toto je možné kalibrovat pomocí oboustranně čistého listu papíru, na který propiskou a pravítkem namalujeme tři hvězdice v řadě, každou ze šesti čar. Propiskou projedeme podle pravítka 3×, aby měla čára opakovatelný kontrast a tloušťku. Vyfotíme to kolmo ze vzdálenosti jeden metr nebo víc. Pokud se fotka hne, některá ramena hvězdic budou mít viditelně slabší kontrast.

Lepší aplikaci zdarma než Flannl a Rcam se mi nepodařilo najít. Zkoušel jsem jich asi 10. Všechny byly crippleware typu, že za čudlík raw si musíte připlatit, můžete vyfotit jen omezený počet fotek zdarma, raw fotka sice v aplikaci je, ale nijak se nedá vykopírovat ven, pouze JPEG, nebo se soubory daly jen poslat emailem a dropboxem, ale ne po LAN (což pokud máme mobilní Internet může stát dost peněz, být pomalé a selhat pokud nemáme zrovna připojení k Internetu). Výchozí aplikace od firmy Apple raw nemá, ač ho snadno mít může. Příště se budu při nákupu produktům Apple vyhýbat.

Extrakce raw fotek z iPhonu

Fotky se do galerie uloží jako DNG, které mají vestavěný JPG preview 1500×1126 pixelů a obsahují dále asi 10MB raw dat o rozlišení 4032×3024 pixelů. Jsou viditelné v galerii. Někdy se ale zobrazuje rozmazaný náhled, někdy ostrý obraz. Poznáte je podle toho, že když dáte editovat, na okamžik v rohu blikne nápis RAW. Ale needitujme je.

Na iPhonu se data zřejmě nedají normálně kopírovat z místa na místo nebo ven, jako na normálním počítači. Je tam systém sandboxů a soubory se při přesunu bez souhlasu uživatele a bez jakéhokoliv varování různě cenzurují, sanitizují, stripují a překódovávají, takže z iPhonu je dostat v nepoškozeném stavu je dost martyrium.

Zkoušel jsem velké množství kombinací různých aplikací, menu položek, akcí a jejich permutací a většina z nich má za výsledek JPEG soubor o velikosti 1,5 nebo 2,5 MB nebo 10 MB soubor PNG, v kterém jsou ale viditelné kompresní artefakty z JPEG.

Magická sekvence zbytečných akcí, která vede k vytržení raw DNG dat ze spárů iPhonu

Příprava

  • Pokud je to prakticky možné, iPhone zapojíme kabelem na nabíječku – rychle by se vybíjel.
  • Hrnec postavíme vzhůru nohama a iPhone na jeho dno položíme. iPhone se jinak přehřívá a zpomaluje.

Varianta: foceno RCam

Zabírá 15 MB na fotku. Je možné provést pouze zdlouhavě fotku po fotce.

  • Vstoupíme do galerie vestavěné v RCam (vlevo dole)
  • Klikneme na fotku (neselektujeme – funkce select je za peníze!)
  • Stiskneme šipku z krabice
  • Save 2 Images
  • Zmáčkneme odpadkový koš
  • Uložily se dvě fotky do fotogalerie iPhonu Photos – jedna je JPEG 4032×3024, druhá raw DNG asi 15 MB s vestavěným JPEGem 4032×3024.

Varianta: foceno Flannl

Zabírá 10 MB na fotku. Je možné provést pro hodně fotek naráz.

  • Vlezeme do Photos (výchozí prohlížeč fotek) a nafocené fotky vybereme. Pozor – kombinace nespolehlivé dotykové plochy iPhonu a špatného UX designu vede k častému nechtěnému výběru a odebrání náhodných fotek, když potřebujeme rolovat
  • Stiskneme ikonku šipka z krabice (share) a vybereme Save to Files
  • iPhone může na chvíli zamrznout. To mi mi přijde nepatřičné, protože přenos souboru z místa na místo má lineární výpočetní složitost, a hardware iPhone je velmi výkonný. Není to pouze zde a frustruje mě to.
  • Fotky znova vybereme a smažeme
  • Půjdeme do aplikace Files
  • Tam fotky vybereme, zmáčkneme šipku z krabice, vybereme a dáme „Save 16 Images“ apod.
  • Fotky vybereme znova a smažeme

Přenos dat přes WiFi do Linuxu


Obrazovka puštěné aplikace Airdroid na iPhonu

  • Pustíme Airdroid na iPhonu a necháme ho běžet na obrazovce. Pokud je v pozadí, nefunguje. To mě frustruje a překvapuje. Takovýto návrh softwaru bych v roce 2020 nečekal.
  • Pomocí iwconfig ověříme, zda má WiFi stále ESSID. iPhone se často bezdůvodně náhodně od WiFi odpojuje, i když je 30 cm od počítače, i když iPhone stále tvrdí že je počítač k hotspotu připojen, bez jakékoliv chybové hlášky v logu PC. Pokud se to stane, hotspot v iPhonu vypneme a zapneme a počkáme asi 15 sekund než se objeví ESSID v iwconfig  a gateway v  route -n.
  • V prohlížeči na PC zadáme http://172.20.10.1:8888, IP adresu upravíme podle adresy iPhonu (gatewaye), kterou zjistíme z příkazu  route -n
  • Na obrazovce iPhonu potvrdíme přijetí. Airdroid je nespolehlivý a někdy náhodně nefunguje. Je třeba znova odenterovat URL, případně restartovat další komponenty (Airdroid, WiFi), dokud to nezafunguje.
  • V prohlížeči klikneme na Photos a najedeme nad fotku. Objeví se jméno, např. IMG_1422.DNG 11,1 MB. Přípona DNG znamená raw fotku.
  • Vybereme fotky a stiskneme tlačítko Download vpravo nahoře. Nic se nestane, žádné potvrzení uživateli, že se děje nějaká akce (špatná UX). iPhone a hrnec se ale začnou hřát.
  • Po desítkách sekund až minutách se objeví okénko, zda stáhnout soubor zip s názvem Photos_downloaded_by_AirDroid.zip. Ten si tedy stáhneme. Toto mě frustruje a považuji za nefér, vzhledem k ceně iPhonu a tomu jak Apple uvádí jak vysoce výkonný šestijádrový 64bitový procesor na 2,39 GHz v iPhonu X má. Jenom na zahájení stahování 160 MB dat (16 fotek po 10 MB) se musí čekat tak dlouho.

Obrazovka aplikace Airdroid v prohlížeči na Linuxu

Konverze z DNG do 16-bitového PPM pomocí dcraw

dcraw -v -g 2.2 0 -6 -j -w -q 3 *.DNG

Výstup je v 16bitovém PPM ( -6), gamma 2,2 (čistá funkce umocnění) ( -g 2.2 0), vyvážení bílé podle iPhonu ( -w). Pokročilý algoritmus rekonstrukce barev AHD ( -q 3). PPM je bezeztrátový a rychle se ukládá na disk.

Root tip

Z PPM již můžeme dále zpracovat do PNG, JPG pomocí editoru GIMP nebo procesorů ImageMagick a G'MIC, nebo číst vlastním programem v C.

Konverze z PPM do PNG

PNG se bude zobrazovat se správnou gammou.

gmic test.ppm -o test.png

Raw fotka z iPhone X kamery „1ד přenesená na Linux From Scratch výše uvedenou metodou. Odřezky zeleniny na prkýnku. Jako robustní stativ byl použit válcovitý modrý předmět jehož kousek je vidět a bylo pečlivě zaostřeno. Fotka byla pouze převedena do 16bitového PNG (61 MB), nebyla dále upravována.


Raw fotka z iPhone X kamery „2ד skrz binokulární dalekohled 7× s kompenzací chromatické aberace dalekohledu programem dcraw -C, editovaná. Viditelné je mihotání vzduchu. Pokud mají patra rozteč tři metry, pak je vzdálenost domu 2,1 km. Expozice 1/1000 s. Atmosférický rozptyl je softwarově kompenzován. Softwarová kompenzace vinětace způsobuje šum v levém dolním rohu. 8-bit PNG.

Autor článku

Karel Kulhavý vystudoval operační systémy, sítě a překladače na MFF UK a je autorem optického pojítka Twibright Ronja a spoluautorem textového a grafického webového prohlížeče Twibright Links.