2018-11-17

Yksinkertainen superresoluutiopinoaminen Huginilla

Mitä tarvitaan? Jalusta jossa on vähän klappia, jotta vaikka antiikkikameran peilinläpsäytys tai sulkimen täräytys liikauttaa kameraa kuvien välillä hitusen. Kameraa voi koittaa liikuttaa valotusten välillä myös vaikka vähän sormella tökkien. Liian suurta liikehdintää kannattaa kuitenkin välttää, maisemakuviin alkaa nopeasti ilmestymään parallaksia ja makrokuvissa ongelmia puolestaan tulee syväterävyyden kanssa. Huginin käyttämä jäykkä kohdistus ei voi kohdistaa kuvia täydellisesti parallaksin vuoksi (Googlen Pixel 3 -puhelimen* käyttämä palakohdistus sen sijaan pystyisi siihen, mutta tietääkseni vastaavia kohdistuskeinoja käyttämää ohjelmaa ei kukaan ole tehnyt työpöytäkäyttöön). Valotusajan soisi kuvasarjassa olevan tarvittavan pitkä (tai tarpeeksi lyhyt) jottei kameran liikkuvien osien aiheuttama tärähdys näkyisi kuvassa.

Usvaa Kallaveden jäällä
(Käytin tässä kuvassa samaa pinoamistapaa, mutta se ei juuri tuonut minkäänlaista resoluutiohyötyä. Kohina sen sijaan väheni.)

Tarvitaan myös terävää optiikkaa, joka kykenee toistamaan kameran pikseliverkkoa pienempiä yksityiskohtia; objektiivia ei myöskään kannata himmentää tappiin asti, koska diffraktion vaikutus kasvaa jossain vaiheessa liian suureksi. Hyvänä nyrkkisääntönä voi pitää pienintä aukkosuhdetta joka on lukuna sama kuin kameran pikselitiheys kaksinkertaisena — D800:n tapauksessa tämä raja olisi jossain f/8:n ja f/11:n tienoilla, f/22 on jo liian pehmeätä superresoluutioyritykselle (koitettu on), mutta monivalotusten kohinaa tasoittava vaikutus ei tietenkään katoa. Ellei objektiivissa ole kiinni tonnitolkulla rahaa, kannattaa henkisesti valmistautua siihen ettei superresoluutio auta suttunurkkien kanssa, kuvan terävin keskiosa on tosin useimmissa objektiiveissa niin hyvä että siellä parannuksen näkee helposti vaikka pikselit olisivat pieniäkin.

Telemaisemia kuvatessa ilmakehän soisi olevan myös rauhallinen. Vellova ilma toimii satunnaisesti muotoillun linssin tavoin ja vääristää maisemaa kuvien välillä vaikka kamera pysyisikin täysin aloillaan. Hugin ei ole kykeneväinen kohdistamaan tälläisiä pinoja vaan tarvittaisiin planeettakuvien käsittelystä tuttuja joustavia kuvien kohdistustapoja. Ilmakehä voi vääntää maisemaa mutkalle vaikkapa näin:


(Jos tästä kuvasarjasta laskisi keskiarvon, olisi se huomattavan pehmeä. Animaatiossa heikosti välkkyvä talon seinän pystylaudoitus katoaa kokonaan. Ilmakehä rajoittaa resoluutiota valotusajan ollessa ilman liikkeisiin verrattuna liian hidas.)

Riippuu täysin olosuhteista milloin ilmakehä velloo liikaa: kaupunkioloissa lämpimänä kevätpäivänä vellomisen näkee jo 50-millisen objektiivin kuvista, kun vaikka kosteana syysiltana polttoväliä saa olla vaikka puoli metriä eikä näy mitään merkkiä ilmakehän rauhattomuudesta.

Tarpeeksi pienten, kuvatasolla pikselikokoisten siirtymien tuottaminen kuvapinoon ei ole ihan yksioikoista. Käsivaralta se onnistuu helposti, nopeassa sarjassa ja tarkoituksella kameraa paikallaan pitäen saa varmasti aikaiseksi riittävästi kuvien välistä siirtymää, mutta jalustalta kuvatessa joutuu kikkailemaan. Esimerkiksi Siruin K20x-kuulapäätä tiukentamalla ja vuoroin löysäämällä kuva valuu puolisen tusinaa pikseliä alaspäin joka kerta kun polttoväli on sadan millin tienoilla. Tämä olisi ihan hyvä tapa saada siirros aikaan normaalioptiikan ja lyhyiden teleobjektiivien kanssa. Pitkien teleoptiikoiden kanssa vähempikin riittää, ja saattaa hyvinkin käydä niin ettei kameraa tietoisesti ole tarvetta liikutella kuvien välillä vaan vaikkapa jalustan ja pään mekaaniset välykset tai kolmijalan alla olevan maan muodonmuutos riittävät tarvittavaan siirrokseen. Jos ei muuta niin kamera-objektiivi -yhdistelmää voi kuvien välillä hellästi taputella objektiivin ääripäästä ja toivoa parasta. Ja vaikkeivat kuvissa näkyisikään mitään liikettä, ei pino silti hukkaan mene: kuvat voi aina pinota sellaisinaan, kuvanlaatuparannus vain jää lähinnä kohinan poiston asteelle.

Metsien halkomaa usvaista peltomaisemaa
(400 milliä, todella tyyni ilma; periaatteessa optimiolosuhteet pinoamiselle. Objektiivin kuvanlaatu tuli kuitenkin rajoitteeksi, joten pinoaminen superresoluutiota ajatellen ei tuottanut mitään hyötyä. Kesäyössä lämpimänä käyneen kameran pitkän valotuksen kohina sen sijaan vaimeni tehokkaasti.)

Kun hyvä kuvapino on kuvattu ja tallennettu levylle häviöttömästi, voidaan pino tuoda TIFF-muodossa Huginiin. Sen jälkeen kuvat tarvitsee vain kohdistaa toisiinsa alipikselitarkkuudella ja antaa Huginin laskea niistä keskiarvo. Loppujen lopuksi varsin yksinkertaista.

Kohdistuspisteet kannattaa tehdä Huginin mukana tulevalla align_image_stack -apuohjelmalla, ohjelma tekee juuri sen minkä nimi lupaa: etsii kohdistuspisteet kuvapinolle nopeasti ja tarkasti. Sitä pääsee käyttämään kunhan suunnistaa Huginin asetuksiin ja etsii sieltä control point detectors -välilehden ja luo uuden esiasetuksen juuri tälle käytölle ellei sellaista ole jo valmiiksi. Klikkaa new... -nappia ja uusi ikkuna aukeaa. Ikkunaan laittaa asetukset tämän kuvan mukaan, ja tallentaa. Tärkeä kirjainrimpsu on tuo -f %v -v -p %o %i, joka ohjeistaa align_image_stackia tekemään työnsä oikein. Asetusten tallennettua kuvapinojen kohdistuksen voi Huginissa hoitaa aina yhtä helposti kunhan valitsee kohdistuspisteiden etsintään tämän ohjelman.

Seuraava vaihe on tallentaa kohdistetut kuvat kaksinkertaisella resoluutiolla ja kuvista keskiarvon laskeminen. Hugin tekee sen tyhmän oletuksen että kuvista kasataan panoraama, joten kohdistuspisteiden luonnin jälkeen on nollattava kuvien sijainti panoraamapallolla, se hoituu valitsemalla kaikki kuvat kuvalistassa ja hiiren oikean napin takaisesta valikostta navigoimalla komentoon reset ja sieltä edelleen reset positions. Näin koko kuvapino asettuu keskelle kanvasta. Kun toisiksi alimmasta, Optimise-otsikon alla olevasta pudotusvalikosta on valittuna Positions (incremental, starting from anchor), voi klikata napista calculate, jolloin Hugin laskee kuvien sijainnit kohdilleen pinon ensimmäisen kuvan (kuvalistan numero nolla) suhteen.

Jos haluaa hifistellä vaikka objektiivin geometrian tai oikomisen suhteen, sen voi tehdä tässä vaiheessa. Kuvalistauksessa voi hiiren kakkosnapin takaa ladata aiemmin valmiiksi lasketut objektiivitiedot, tai kuviin voi käydä asettamassa vaaka- ja pystysuuntaisia kohdistuspisteitä control points -välilehdeltä. Lisäkohdistuspisteiden jälkeen kuvien sijainti pitää laskea uusiksi jotta kohdistuspisteiden lisäys tulisi mukaan kuvien sijaintitietoihin. Tämän jälkeen voi suunnistaa esikatseluikkunaan, asettaa projektion sekä rajata turhat reunat pois. Tallennettavan kuvan mitat voi asettaa viimeiseltä välilehdeltä, kunhan muistaa klikata calculate optimal size, sen jälkeen pitää vain kaksinkertaistaa kummankin sivun pikselimäärä. Ja juuri tämä kaksinkertaistus on se joka erottaa tavallisen kuvien pinoamisen superresoluutiopinoamisesta.

Pinosta voi laskea keskiarvon hugin_stackerilla, se on pieni apuohjelma joka ilmestyi Huginin mukaan vuosi-pari taaksepäin. Sitä pääsee hyödyntämään output-valikosta josta user defined output sequences ja listasssa pitäisi olla mean of stacked images.


Alla on vertailukuvapari, jossa vuorottain ovat esillä pinon yksittäinen valotus tuplatulla resoluutiolla ja superresoluutiopinottu kuva. Pyörän pinnoista näkee että debayer-prosessille tyypillinen erittäin pienten yksityiskohtien rosoisuus ja rupuisuus on kuvasta kadonnut jäljettömiin. Kameran kennon varsin aggressiivinen alipäästösuodin kuitenkin estää pahimpia sahalaitoja muodostumasta kuvaan alunalkaenkaan, lisäksi Raw Therapeen laadukas RCD-väri-interpolointi on pitänyt valevärit ja sahalaidat omalla panoksellaan kuosissa — tästä aiheesta lisää toisessa postauksessa.



Vertailu tämän pikselikoon teoreettiseen maksimiin voidaan suorittaa kuvaamalla sama kohde pidemmällä polttovälillä** ja alaspäin sovittamalla pidempipolttovälinen kuva vastaamaan pikselimittakaavaltaan samaan kokoon kuin lyhemmän polttovälin kuva. Polttovälien suhteen ollessa melkein 3:1, voi pidemmän polttovälin pienennettyä kuvaa pitää optisesti likipitäen virheettömänä referenssinä — varsinkin kun se on saanut samanlaisen superresoluutiokäsittelyn kuin lyhempipolttovälinen kuva. Syväterävyys kuvaparissa on hieman eri johtuen ihan fyysisesti suuremmasta kuvausaukosta; näin marraskuussa objektiivin vaihtoon kuluvassa ajassa maisema ehtii pimentyä ja vaihtaa väriään aukkotolkulla. Hyvä esimerkkikohta kuvaparissa on tuo sinisen polkupyörän satulassa oleva tuotemerkki: viitekuvassa se on helpohkosti luettavissa, mutta superresoluutiokuvassa se jää juuri ja juuri liian pehmeäksi jotta kirjaimista saisi varmasti selvää. Mustan Helkaman vaakatangossa oleva tuotenimi on toinen vastaava tapaus, superresoluutiokuvasta ei voi sanoa mitä siinä lukee kun pidemmän polttovälin kuvasta voi lukea sanan "kulkuri".


(En tiedä onko kyseessä optinen harha vai mikä, mutta 135mm polttovälin kuva näyttää suorastaan epätarkalta pienennettyyn 300mm:n kuvaan verrattuna. Olin kyllä tarkennuksen kanssa varovainen ja otin jopa huomioon Samyangin tarkennuksen siirtymän himmennetttäessä.)

Olen nähnyt joitain ohjeita joissa pinoaminen tehdään Photoshopissa ja olen sitä itsekin koittanut. En suosittele. Esimerkiksi 36 megapikselin kuvan koko resoluution tuplaamisen jäljiltä on 144 megapikseliä, ja kun kuvia on pinossa vaikkapa kymmenen, kestää pinoaminen Photoshopissa melkein varttitunnin (Hugin kohdistaa ja pinoaa kuvat enimmillään kymmenissä sekunneissa vaikka klikkauksia kertyykin paljon enemmän). Lisäksi joissain ohjeissa opastetaan tekemään pinoaminen ilman interpolointia suurennetuille kuville (nearest neighbour, kuva-alkiot periaatteessa vain kasvavat kokoa). Koitin tätäkin eikä ainakaan vielä kymmenen kuvan mitaisesta pinosta kadonnut palikkainen pikselimäisyys ja reunojen rosoisuus — ehkä pinon pitäisi olla pidempi. Kuva alla selventää:


(Molemmille kuville on annettu sama terävöityskäsittely erojen tuomiseksi esiin. Pino on kuvattu Pocophone F1 -puhelimella, jossa on hintaisekseen yllättävän hyvä optiikka kunhan pysyttelee raw-kuvauksessa. Yllä nearest neighbour, alla Lanczos-interpolointi.)

Selvää kuitenkin on ettei näin yksinkertainen superresoluutiokäsittely voi taikoa kuviin määrättömästi lisäyksityiskohtia. Lisävalotusten myötä kohina pienenee kyllä ja väri-interpoloinnista aiheutuneet kuvantumisvirheet (valevärit, sahalaidat ja muu vastaava) tekevät katoamistemput. Mutta jos pino on jo kuvattu ja olemassa sekä vaatii jonkinlaista kuvienvälistä kohdistusta, on pinosta triviaalia ainakin testimielessä tehdä samalla superresoluutiokuva. Vähintäänkin saa tehtyä kuvastaan hiukan parempilaatuisen jos ei nyt suorastaan terävämpää.

Eniten pinoamisesta saa hyötyä kun kuva alunalkaenkin on terävä. Tälläinen tilanne ei D800:n aggressiivisen alipäästösuotimen kanssa tule varsin usein vastaan, mutta esimerkiksi Sigman Foveon-kennoisilla kameroilla, joissa jokainen pikseli on interpoloimaton ja alipäästösuodattamaton RGB-kolmikko, sahalaitoja näkee kuvissa usein. Bayer-laitteilla tälläisiä tilanteita tulee vastaan kun kennon pikselimäärä on kohtuullisempi optiikan suorituskykyyn nähden: esimerkiksi yllä oleva Pocophone F1 -kuvapari hyötyi pinoamisesta melkoisesti vaikka kyseessä onkin vain kännykkäkamera. Fujin Xtrans-kennoisilla ovat punaiset ja siniset pikselit varsin kaukana samanvärisistä tovereistaan jonka lisäksi valmistaja ei käytä alipäästösuotimia, joten Xtrans-kuvaajia pinoaminen saattaisi auttaa enemmän, ainakin silloin kun on käytetty hyvälaatuista väri-interpolaatiota. Kokemuksesta voin sanoa että Adoben Xtrans-käsittely ei ole tälläinen, mutta Raw Therapeella, Iridentillä ja Capture Onella kehitetyt Xtrans-raakakuvat saattaisivat hyötyä pinoamisesta enemmän — ainakin valevärit pienissä yksityiskohdissa vähenisivät.


*) Pixel 3 -puhelimen kameran laskennallinen kuvaus on loppujen lopuksi aika vaikuttavaa. Puhelimen käyttäjän käsien pientä liikettä täydennetään kameran vakaajayksikön liikkeillä jotta kuvasarjassa saadaan jokaiselle kennon osaväripikselille täydelliset RGB-arvot. Kuvasarja sitten kohdistetaan paloittain (näin voidaan poistaa kameran liikkeen aiheuttaman parallaksin tuottamat häiriöt ja kuvan liikkuvien osien aiheuttamat haamut) ja keskiarvoistetaan: tuloksena on laskennallinen täysvärikuva josta ei tarvitse poislaskea kennon väriverkkoa. Lisäksi puhelin ei käytä toista kameramoduulia zoomaamiseen tai syväyskartan luontiin vaan molemmat hoidetaan samalla kennolla: zoomaaminen hoidetaan superresoluutiolaskennalla ja syväterävyyden luontiin käytettävä syväyskartta lasketaan kameran kennon puolipikseleistä luodulla syväyskartasta jota lisäksi täydennetään koneoppimisella. Tuloksena tästä kaikesta on dynamiikaltaan suurennettu, väreiltään ja terävyydeltään paranneltu laskennallinen raakakuvatiedosto jossa yhtenä värikanavana tulee mukana syvyystieto. Dpreview'n arvion mukaan laskennallisesti puhelinkameran kenno vastaisi edesmenneessä Nikon 1 -sarjassa käytettyä yhden tuuman koon kennoa (rajauskerroin noin 2,7; puhelimissa rajauskerroin on yleisesti luokkaa 6). Ennustan saman tekniikan laskeutuvan myös ns. oikeisiin kameroihin noin vuosikymmenessä, ehkä aiemmin jos varsin vanhoillisille kameramarkkinoille onnistuu tunkeutumaan joku markkinahäirikkö.

**) Oikeasti absoluuttista erottelukykyä mitattuna viivaparia/kaarisekunti rajoittaa apertuurin halkaisija.

Matille terveisiä.

0 comments:

Lähetä kommentti