Hlavní navigace

Fotografování dalekohledem: masky korekce vinětace

7. 10. 2021
Doba čtení: 7 minut

Sdílet

 Autor: Depositphotos
V minulém díle byly ukázky fotografií, mobilní aplikace Neoshot, adaptér na dalekohled a optické vady. Dnes přesuneme snímky po Wi-Fi, nafotíme masky korekce vinětace a konvertujeme obrázky do PNG.

Přenos dat z iPhonu přes Wi-Fi do Linuxu

  • Pustíme Airdroid a necháme ho běžet na obrazovce. Pokud je v pozadí, nefunguje. Preemptivní multitaskování bylo poprvé implementováno na MULTICSu v roce 1964, na OS/360 v 1967 a na Unixu v roce 1969.

Pokrok IT. Vlevo: MULTICS, 1964. Má preemptivní multitasking. Uprostřed: IBM/360, 1967. Má preemptivní multitasking. Vpravo: Airdroid na iPhonu X, 2021. Nemá multitasking.

  • V prohlížeči na PC zadáme http://172.20.10.1:8888, IP adresu upravíme podle adresy iPhonu (gatewaye), z příkazu route -n
  • Na obrazovce iPhonu potvrdíme akceptanci. Někdy to náhodně nefunguje, je třeba znova odenterovat URL, případně restartovat další komponenty (Airdroid, WiFi).
  • V prohlížeči klikneme na Photos a maximalizujeme okno galerie
  • Najíždíme na malé šipečky download u jednotlivých fotek, počkáme, až zmodrají a klikneme na ně. Masové stahování Airdroid nemá – pokud se o něj pokusíme, již komprimované soubory se znova komprimují do ZIP, žádnou další kompresi to nepřinese, trvá to déle než fotky postahovat ručně, telefon se přitom přehřeje a pokud označíme fotek desítky, nedoběhne to.

Focení masek korekce nerovnoměrnosti obrazového pole

Dalekohled vinětuje. Kromě toho různé pixely mají trochu jinou citlivost a občas se vyskytne pixel nebývale citlivý nebo necitlivý. Takže je obraz vynásoben jakýmsi lehce zašuměným kopečkem s tečkami. Vyfotíme si proto uniformní bílé pole, abychom mohli tímto polem obraz podělit a získat obraz, kde všechny tyto vady budou vykompenzovány. Této technice se říká flat field correction (FFC). Abychom do obrazu nepřidali šum, vyfotíme fotek mnoho a zprůměrujeme je:


Tričko nemusí být dokonale bílé, dcraw bílou vyváží. Obě vrstvy ale musí být napnuté bez záhybů a volná látka nesmí stínit, abychom pak ve všech kompenzovaných fotografiích neměli stíny.

  1. Ostření mobilu nastavíme na doraz na dálku.
  2. Dalekohled k tomu doostříme na krajinu z okna. Tím bude pozice čoček vůči otvorům a hranolům identická s normálním focením a vinětování bude identické.
  3. Přes objektiv napneme bílé tričko, obě vrstvy tkaniny (skrz jednu silně prosvítá obraz lampy). Obě vrstvy musí být napnuté a tričko na objektivu obepneme gumičkou. Přebývající tričko se nesmí dostat před objektiv.
  4. Zapneme v Neoshotu automatic white balance, 3×3 mřížku a v menu Volume shutter.
  5. Vycentrujeme bílý kruh na mřížce 3×3 pomocí přeexpozice
  6. Nastavíme minimální ISO a nejdelší čas a přisuneme jasnou lampu co nejblíž tak, aby na RGB histogramu žádný kanál nešel na doraz a měl ještě trochu rezervu.
  7. Namíříme ne přímo na lampu, ale trochu stranou (obraz jasné lampy stále poněkud prosvítá)
  8. Namíříme na mobil větrák. Při sériovém focení RAW se silně zahřívá.
  9. Fotografujeme dlouhou sérii držením knoflíku snížení hlasitosti. Stále kontrolujeme histogram.
  10. Při přenosu velkého množství snímků pozor: fotografie, kterým se ještě nestihl vytvořit náhled v okamžiku mountování USB, se na USB nezobrazí.

Skript na masku korekce nerovnoměrnosti obrazového pole


Smíchané hlášky několika instancí programu dcraw běžících v paralelizátoru „parallel“

Masky jsem hromadně konvertoval z DNG do PPM následujícím skriptem:

#!/bin/bash

if [ $# -lt 1 ]
then
        echo -e "\nPoužití:$0 <dng soubor> <dng soubor> ...\n"
        exit 1
fi

parallel -j 4 -u 'dcraw -t 90 -v -4 -j -a -q 3 -C 1.0015 0.9963 {}' ::: $@

Je nutné, aby se anomální pixely transformovaly identicky, jako se to s nimi stane při focení obrazu, který obsahuje motiv. Proto je nastavena jak korekce chromatické aberace -C 1.0015 0.9963, tak algoritmus interpolace barev -q 3 stejně, jak to bude u cílového obrazu. Pro jiný dalekohled mohou být jiná čísla, je třeba experimentálně ozkoušet, co bude produkovat minimální barevné proužky na jasné černo-bílé hraně v kraji snímku. Pro testovací foto jsou vhodné budovy.

Chromatická aberace je latinský termín pro barevnou vadu. Způsobí, že červený a modrý kanál mají jinou velikost obrazu než zelený. Jedná se pouze o promile. Projevuje se to jako barevné hrany tam, kde mají být pouze černobílé. Změnou velikosti se dá také v dcraw kompenzovat. Kompenzace není dokonalá, protože tento „zoom“ zdá se není v celém obrazu rovnoměrný. I když jsem ho v jednom místě vykompenzoval, v jiných pořád trochu aberace je.

Jeden z souborů PPM kontrolně nahrajeme do G'MICu, ten vypíše statistiku a vidíme, že se žádný z nadměrně citlivých pixelů nepřeexponoval – maximum nedosahuje 65535, je pouze 46210. Maska tedy bude korektní:

$ gmic EKWC5584.ppm
[gmic]-0./ Start G'MIC interpreter.
[gmic]-0./ Input file 'EKWC5584.ppm' at position 0 (1 image 3024x4032x1x3).
[gmic]-1./ Display image [0] = 'EKWC5584.ppm'.
[0] = 'EKWC5584.ppm':
  size = (3024,4032,1,3) [139 Mio of floats].
  data = (560,575,465,313,376,404,350,302,121,13,249,413,(...),0,290,549,496,461,266,41,245,426,302,237,215).
  min = 0, max = 46210, mean = 21683.7, std = 11126.1, coords_min = (45,0,0,0), coords_max = (1593,2246,0,0).

Další skript sečte masky ze souborů PPM do souboru masks_added.png:

#!/bin/bash

cmdline=$(ls *.ppm | sed -e 's/^/"/;s/$/" -add/' | tr '\n' ' ')
gmic $cmdline -pow 0.45454545 -normalize 0,65535 -o masks_added.png

-pow 0.45454545 vytváří PNG s gammou 2,2, která dobře využívá přesnost 16 bitů v celém tonálním rozsahu obrazu.


Maska nerovnoměrnosti obrazového pole (vlevo) a její detaily v různých místech. Kontrast byl zvýšen podle minima a maxima ve výřezu. Vidíme, jakou fantazii má senzor Sony Exmor RS. (můžete si stáhnout originální soubory)

Skript pro konverze z DNG do 16-bitového PNG pomocí dcraw

Pro konverzi, korekci chromatické aberace a korekci vinětování používám následující skript. Pokud konvertujeme více fotek naráz, program parallel zrychlí čtyřnásobně na mém 4-procesorovém systému. Gamma 2.2 bez lineárního segmentu sice neodpovídá sRGB, ale zase se snadno konvertuje do a z lineárního fotometrického prostoru pro manipulace v G'MICu.

Soubor masks_added.png který jsme právě vytvořili, musí být připraven ve stejném adresáři jako je skript.

#!/bin/bash

set -o pipefail

# Předejde přílišnému zesilování obrazu vlivem tmavých částí masky
cutpoint=0.07

if [ $# -lt 1 ]
then
        echo -e "\nPoužití: $0 <DNG soubor> <DNG soubor> ...\n" >&2
        exit 1
fi

dir=$(dirname $0)
maskfn="$dir/masks_added.png"
parallel -u 'dcraw -t 90 -c -v -g 2.2 0 -6 -j -W -w -q 3 -C 1.0015 0.9963 {} \
| gmic -.ppm '"$maskfn"' -div 65535 -pow 2.2 -cut[1] '"$cutpoint"',1 -div -pow 0.454545 -normalize 0,65535 -o {}.png' ::: $@

Výstup je v 16-bitovém PPM (-6), gamma 2,2 (čistá funkce umocnění) (-g 2.2 0), vyvážení bílé podle iPhonu (-w). Používá se pokročilá rekonstrukce barev AHD (-q 3, pozor, není to ADHD). Koriguje se chromatická aberace dalekohledu (-C 1.0015 0.9963).

Dá se zlepšit ostrost rozdílným zaostřením mobilu a dalekohledu?

Na jednu vzdálenost k fotografovanému předmětu se dá zaostřit různými kombinacemi zaostření mobilu a dalekohledu. Můžeme tedy svobodně volit jednu veličinu. Nezobrazuje naše soustava ostřeji při určitém nastavení této veličiny?


Vlevo je telefon zaostřen na blízko, uprostřed na půl rozsahu a vpravo na dálku. Dalekohled byl tomu příslušně doostřen. Vidíme, že levý obrázek je více zazoomovaný než pravý. Hodnoty zoomu jsou 1,075; 1,035 a 1,000. Vzdálenost: 3,7 km.


Ořízneme-li obrázky, aby zobrazovaly stejný motiv a zvětšíme zhruba na 200% na stejný rozměr, přijde mi, že jejich ostrost je téměř totožná. Doufal jsem, že nastavením na určitý fokus by třeba zobrazovací vady elementů zobrazovací soustavy interagovaly příznivějším způsobem a tak by se dala ostrost optimalizovat.

Závěr: ostrost jsme nezlepšili, ale přišli jsme na bizarní slabý zoom 1,075×, kterým soustava oplývá, ač ani mobil, ani dalekohled zoom nemají.

Kalibrace jako dálkoměr

Optické vlastnosti soustavy dalekohledu a telefonu, mobil byl zaostřen na 2/3 (spíše na dálku)
Parametr Kamera „2ד s dalekohledem 6,835×
Úhlová perioda pixelů ve středu zorného pole 24,14 µrad
Pro srovnání: typická divergence zeleného laserového ukazovátka (1200 μrad) 50 pixelů
Pro srovnání: průměr Měsíce (9040 µrad) 374 pixelů
Využitý průměr objektivu 17,1 mm

Pokud je v obrazu nějaký známý rozměr (např. rozteč podlaží, rozteč očí, velikost hlavy člověka, výška člověka, velikost poznávací značky, průměr kola auta, rozteč drátěného pletiva, rozteč vlnitého plechu), můžeme použít iPhone X s dalekohledem jako hrubý dálkoměr. Na obrázku odpočítáme pixely např. v GIMPu. Nejdříve je třeba zkalibrovat dalekohled:

K odečtení pixelových roztečí se hodí GIMP, souřadnice lze odečíst i v G'MICu:

Kalibrace zvětšení dalekohledu
Šířka budovy bez dalekohledu Šířka budovy s dalekohledem Zvětšení dalekohledu
Fotografie 1 129,00 pixelů 881 pixelů
Fotografie 2 128,50 pixelů 879 pixelů
Průměr 128,75 pixelů 880 pixelů 6,835×

Pokud kalibrujeme v Indonésii, na Filipínách, nebo v Japonsku, nepoužíváme vzdálenosti budov vyfotografované v různé dny, protože ty nemusí zůstat neměnné.

Vzdálenost k identifikované budově jsem odečetl na Google maps jako 4,516 km. 1 pixel odpovídá 24,14 μrad × 4,516 km = 10,90 cm.

Root školení Elk

Výpočet velikosti předmětů
Rozměr Pixely Metry
Rozteč 7 pater 191 pixelů 20,82 m
Rozteč 1 patra 27,29 pixelů 2,975 m
Šířka okna bytu 11 pixelů 120 cm
Výška okna bytu 12 pixelů 131 cm
Šířka velkého schodišťového okna s 3×2 tabulemi 31 pixelů 3,38 m
Výška velkého schodišťového okna s 3×2 tabulemi 21 pixelů 2,29 m

V příštím díle budeme měřit skutečné rozlišení dalekohledu matematicky.

(Autorem fotografií je Karel Kulhavý, není-li uvedeno jinak.)

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.