2011-08-30

ImageJ:llä tähtikuvien käsittely

ImageJ on Javapohjainen, Yhdsyvaltain terveysviraston (NIH, National Institutes of Health) kehittämä ja rahoittama ohjelma mm. mikroskooppikuvien käsittelyyn ja analysointiin. Vaikka ohjelman kohdeyleisö onkin kovin spesifi, mikäänhän ei estä ohjelman muuta käyttöä vaikka tähtikuvien pinoamiseen tai mitä ikinä keksiikään.

ImageJ
ImageJ:n pääikkuna.


Itse asensin tuon 64-bittisenä, koska 32-bittinen tuppaili kaatumaan Javan muistirajoitusten takia. Simppelistä käyttöliittymästä huolimatta ohjelmassa on monia käteviä ominaisuuksia ja plugineina on saatavissa vielä lisää toiminnallisuutta, osa tosin kovin erikoistunutta.

Imagej avaa 8-bittiset, 16-bittiset ja 32-bittiset kuvat TIFF-, FITS-, JPEG- ja monessa muussakin formaatissa. 16-bittiset (per kanava siis) kuvat avataan ja käsitellään oletuksena kolmena erillisenä värikanavana, joten värikuvia varten tarvitaan erillinen lisäosa jonka voi ladata osoitteesta ij-plugins.sf.net.

Fiji (Fiji is just ImageJ)

ImageJ:stä on olemassa myös vaihtoehtoinen sovelluspaketti, joka pakkaa itse ImageJ:n lisäksi monia hyödyllisiä plugineita ja automaattipäivitysmahdollisuuden. Sen voi ladata osoitteesta fiji.sc.

Kuvien kohdistaminen

(Tähti)kuvien kohdistamisen voi hoitaa vaikka Huginilla, metodin ja ohjelmiston ollessa jo entuudestaan tuttu se kävikin nopeahkosti. Align_image_stackilla loin siis läjän kohdistuspisteitä kuvien välille, poistin kohdistuspisteistä maastoon osuneet, optimoin kuvien keskinäiset sijainnit ja tallensin levylle ison läjän kasibittisiä rajaamattomia TIFFejä. Rajaamattomia siksi että kovin moni ohjelma ei Panotoolsin ulkopuolella tajua noiden TIFF-tiedostojen rajaustagien päälle yhtään mitään.

Kuvat voi kohdistaa myös ImageJ:ssä/Fijissä, plugin nimeltään Linear stack alignment with SIFT toimii hyvin ja nopsasti, kyseinen plugin tulee ainakin Fijin perusasennuksen mukana.



ImageJ:n käyttö

ImageJ:n valikon File/Import/Image sequence... kautta avataan pinon ensimmäinen kuva. Sen jälkeen ImageJ kysyy montako kuvaa on pinossa, ja mitkä niistä avataan. Pistämällä täpän kohtaan virtual stack ohjelma ei lataa kaikkia kuvia kerralla muistiin vaan lataa ne kiintolevyltä vain tarvittaessa. Jos on reilusti muistia käytössä niin kannattaa ladata samoin tein kuvat muistiin koska DRAM on aina kiintolevyä nopeampaa.

Kuvien lataamisen jälkeen pinon ensimmäinen kuva ilmestyy omaan ikkunaansa ja kuvien keskiarvoistuksen voi tehdä valitsemalla valikosta Image/Stacks/Z Project... jolloin seuraavanlainen ikkuna ilmestyy:

Pudotusvalikosta voi valita pinoamistavan, start slice ja stop slice -valinnoillaa voi ottaa mukaan pinosta vain valitun kuvajoukon start slicen ollessa joukon ensimmäinen kuva ja end slice vastaavasti viimeinen. Pinoamismetodeista average intensity laskee keskiarvon, median vastaavasti laskee kuvapinon mediaanin, max intensity ottaa vain kirkkaimmat pikselit mukaan pinosta (kätevä esim. viirutähtikuvia varten), min intensity tekee saman tummimmalle pikselille. Muille valinnoille en ole käyttöä keksinyt.

Mediaanin etuna on se että se ei ota huomioon pikselijoukon reunimmaisia (outliers) ollenkaan - toisin kuin keskiarvo joka laskee mukaan kaikki pikselit riippumatta siitä mitä niissä on - vaan pikselin tavallisin eli useimmin toistuva arvo yksinomaisesti vaikuttaa lopulliseen kuvaan. Ikävä kyllä ImageJ ei tajua kuvien läpinäkyvyyden eli alfa-kanavan päälle mitään vaan laskee ne mustina pikseleinä kuviin mukaan, tähtitaivaskuvissa tämä saattaa näkyä tummina reunoina jos tähdet ovat taivaalla pinon kuvaamisen aikana paljon ehtineet liikkua. Alla on esimerkkikuvapari, vasemmalla keskiarvo ja oikealla mediaani, kuvan reunojen mustuminen näkyy molemmissa kuvissa mutta vähemmässä määrin mediaanipinossa. Mediaanipinossa myös maaston ja taivaan raja on terävämäpi, helpottaa maskausta jos haluaa lisätä maastonkin vielä kuvaan. Valmiin kuvan voi käydä katsomassa Flickristä.

Average vs Median

Linnunrata, 59 kuvaa Vasemmalla vielä eilisyöltä pätkä syksyistä Linnunrataa, kuvattu Samyangin 8 mm:n kalansilmällä ja 59 kappaletta kuvia pinottu ylläkuvailulla metodilla. Kameran herkkyys oli asetettu 1600:aan, joten pinoaminen nosti signaali/kohina-suhdetta sqrt(59):n verran eli pinotun kuvan kohinat teoriassa vastaavat noin ISO200-kuvaa (kameran herkkyys/sqrt[kuvien määrä]). Käytännössä tästä kuitenkin jäädään koska kuvalle on lisätty melkoisesti kontrastia jälkikäsittelyssä.

Keskellä näkyy itse Linnunradan tähtivyö ja sitä halkova pimeä sumu eli ns. Suuri Repeämä. Ylhhäällä keskellä kuvaa oleva kirkas tähti on Joutsenen Deneb, siitä alas Linnunrataa pitkin löytyy Kesäkolmion alakärki eli Kotkan Altair ja niiden välissä, Linnunradan oikealla puolella on kolmion oikeanpuoleinen kärki eli Lyyran kirkas Vega. Jos tarkkaan katsoo, niin myös Andromedan galaksi M31 löytyy kuvan vasemman ylänurkan lähettyviltä. Yläreunan ja vasemman alareunan kirkastuminen ja kellertyminen johtuu valosaasteesa, jota täällä ei ikävä kyllä pääse kovinkaan helpolla pakoon. Kuvan musta alareuna on puustoa, joka on taustan tähtiin nähden liikkunut kun kuvat on tähtien mukaan kerran kohdistettu.

Kuvia pinottiin 59 kappaletta plus yksi pimeä ruutu eli darkki kennon häiriöiden vähennykseen, darkin voi kätevästi vähentää raakakuvista ennen pinoamista Raw Therapeella, raw-välilehdellä on oma dark frame -osio kyseistä operaatiota varten. Samalla olisi tietysti voinut korjata vinjetoinninkin flättikuvalla, mutta kunnollisen flättiruudun kuvaaminen on liki mahdotonta kalansilmällä.

Tuossa kalansilmässä on hauska optinen virhe täydellä aukolla: ilmeisesti palloaberraation johdosta pistemäiset valonlähteet saavat ympärilleen kuunsirpin muotoisen kehän itse valonlähteen ollessa tällöin ko. sirpin reunalla eikä keskellä kuten voisi odottaa. Kuvan kokonaiskontrasti myös pienenee tuntuvasti (ja näkyvästi) tuoden semmoisen utuisen soft focus -fiiliksen kuvaan. Efekti tosin katoaa nopeasti objektiivin aukkoa pienentäessä.

Muita käyttökohteita

Maaningantien valoviirut
Paitsi kohinan vähentäminen, kuvien pinoamisella on myös muita sovelluksia tähtikuvauksen ulkopuolella. Niistä enemmän alla:
Valoviirukuvat
Yksi käyttökohde voivat olla esimerkiksi erilaiset valoviirukuvat joita ei syystä tai toisesta voi yhdellä valotuksella ottaa, esimerkiksi perinteinen moottoritien ylikululta kuvattu pimeähkö tie jonka autojen etu- ja takavalojen tekemät kirkkaat viirut halkovat. Oikealla äskettäin kuvattu esimerkkikuva kyseisestä efektistä, kuvia pinottiin 17 kappaletta. Kohdistuksen hoiti edellä mainittu Fiji-plugin Linear stack alignment with SIFT ja pinoamistavaksi valittiin Max intensity. Tähän sotkin vielä vähän mukaan keskiarvon mukaan pinottua kuvaa.
Syväterävyyden lisääminen
Syväterävyyden lisääminen on yksi pinoamisen alalaji, tosin siinä otetaan kustakin kuvasta mukaan pinoon vain kontrastikkaimmat eli todennäköisesti terävät osat. Tällä on se sivuvaikutus että kuvapinon kohina ei pinotessa juurikaan vähene, joten kuvien tulisi olla hyvinkin kohinattomia ennen pinoamista. Kyseistä metodia käytetään makrokuvauksessa usein ja ImageJ:hen on useampia liitännäisiä operaatiota varten. Testasin niistä kahta syväterävyyspinoamisartikkelissa ja totesin molemmat liian hitaiksi, muistisyöpöiksi ja ylipäätään käyttökelvottomiksi.
Dynamiikan lisääminen
Yksinkertaisin tapa lisätä kuvan dynamiikkaa on laskea keskiarvo valotushaarukoidusta kuvapinosta: alivalottuneet kuvat tuovat detaljeja puhkipalaneisiin kuvan osiin ja ylivalottuneet vastaavasti kirkastavat varjoja. Tuloksena on kuvan kontrastin tuntuva loiveneminen. Itse asiassa tätä voi simuloida helposti kamerassakin jos siinä vain on mahdollisuus päällekkäisvalotuksiin, esimerkiksi D200 pystyy laskemaan yhteen jopa kymmenen kuvaa tuottaen yhden kohinattoman raakakuvan. Typerästi vain valotuksenhaarukointi kytkeytyy päällekkäisvalotusten kanssa pois päältä joten haarukointi pitää suorittaa käsin. En suosittele metodia varsinaiseen HDR-kuvaukseen tai -kuvankäsittelyyn, mutta hätätilassa tuokin voi välttää.
Ihmisten kadottaminen kuvasta
Jos kuvitellaan että kuvattavana on vaikka vilkas turistirysä jossa ihmisiä parveilee kuin kärpäsiä, mutta haluttaisiin kuva kuitenkin ilman ihmisiä sulkematta koko paikkaa, niin voidaan ottaa muutama kymmenen kuvaa ja laskea kuvapinosta mediaani. Tällöin periaatteessa kuvaan jää pelkästään tausta ja siinä liikkuvat ihmiset ovat kadonneet - tausta kun näkyy valtaosassa kuvista mutta ihmiset toivottavasti ovat liikkuneet ympäriinsä. Toinen vaihtoehto olisi tietysti pitkä valotus harmaasuotimen kanssa, mutta sillä on sama efekti kuin kuvapinon keskiarvolla: liikkuvista kohteista jää haamuja kuviin elleivät valotusajat ole naurettavan pitkiä.
Virtuaaliset pitkät valotukset
Kuten edellä mainitsin niin kuvapinon keskiarvo periaatteessa vastaa pitkää valotusta. Pinoamalla paljon, suht' tiheään - vaikka intervalometrin avulla - otettuja kuvia saadaan tehtyä yksi kuva joka melkolailla vastaa samanmittaista valotusta. Alla esimerkkikuva, pinottu noin 850:sta yhden tunnin aikana otetusta kuvasta, ImageJ siis laski koko pinosta keskiarvon joten valotuksen pituus on käytännössä yksi tunti. Huomaa kuinka kaikki liike on sumeutunut, jopa venerannan puiden teräväreunaiset varjot ovat muuttuneet pehmeiksi kun Aurinko on vaeltanut taivaalla:

Timelapsen keskiarvokuva