HaloStack

Panu Lahtinen (pnuu a iki fi)

Tämä sivu on vanhentunut! Ks. Avaruus-foorumin ketju uudesta versiosta!

English versio coming soon!(?)

Sisältö:

HaloStack on yksinkertainen, käyttöjärjestelmäriippumaton Python-ohjelma kuvien pinoamista varten. Ohjelma on suunnattu lähinnä halokuvien pinoamiseen. Toistaiseksi itse komento suoritetaan komentoriviltä, mutta kohdistamista varten on tehty yksinkertainen käyttöliittymä. Varsinainen graafinen käyttöliittymä on tulossa, joskus. Ehkä. Totta puhuen, todennäköisesti ei ole...

Ohjelmaan on toteutettu yksinkertainen kohdistusmenetelmä, joka toimii parhaiten jos halokuvat on otettu käyttäen tummaa peittäjää, jonka läpi Aurinko vielä kuitenkin näkyy. Kuvia esimerkkipeittäjästä löytyy täältä. Pinoaminen toimii myös muiden jalustalta otettujen kanssa suhteellisen hyvin, mutta laskenta hidastuu kohdistusalueen suuremman koon takia.

Ohjelma tallentaa kuvat PNG-muodossa. Keskiarvopinot tallennetaan 16-bittiä/kanava sisältävinä riippumatta siitä ovatko lähtökuvat olleet 8-bittisiä (kuten JPG), tai suuremman bittisyvyyden omaavia (kameroiden raakaformaatin kuvat, 16-bittiset TIFF-kuvat, jne.). Muut pinot tallennetaan samalla bittisyvyydellä kuin alkuperäiset kuvat.

Jos käytät Windowsia, paina tästä.

Perusominaisuuksien käyttämiseksi Linuxissa tarvitaan Python-ohjelmointikielen tulkki, johon on asennettu Numpy-, matplotlib- ja PythonMagick-kirjastot.

Tiettyjen lisäominaisuuksien käyttämiseksi tarvitaan lisäksi (nämä ovat siis vapaaehtoisia):

  • UFRaw - kameroiden raakakuvaformaattien lukemiseksi PythonMagick:n kautta. Tämä toimii luultavasti vain Linuxissa
  • h5py - HDF5-kirjasto Pythonille mediaanipinoamista varten
  • SciPy-kirjasto Pythonille kuvien kiertämistä varten

Asennus

Windows

Lataa HaloStack 0.2.1 Windowsille: 64-bit

Paketista purkautuu yksi varsinaisesti tarvittava tiedosto, halostack.exe. Tämän lisäksi mukana on python-lähdekoodit sekä lähdekoodin lisenssiehdot sekä versiohistoria.

Vanhemman version kättöohjesivu ja latauslinkit: versio 0.1.x.

Jos haluat käyttää HaloStack-ohjelmaa suoraan Python-asennuksen kanssa, tai muokata ohjelmaa, alla on listattu tarvittavat riippuvuudet latauslinkkeineen:

  • HaloStack-skriptit, ks. kohta "Asennus Ubuntuun"
  • Python (versio 2.x)
  • Numpy
  • PythonMagick (sama versio kuin Python-asennuksesi)
  • Matplotlib (graagiseen kohdistuspiteen valitsemiseen)
  • h5py (valinnainen, tarvitaan mediaanipinojen tekemiseen)
  • SciPy (valinnainen, tarvitaan kuvien kiertämiseen)
  • UFRaw (valinnainen, tarvitaan raakakuvien lukemiseen, ei testattu Windowsissa)

Ubuntu

Asennus tapahtuu purkamalla skriptit alla olevasta paketista sopivaan hakemistoon. Skriptin voi ajaa suoraan ilman python -komentoa skriptin edessä, kunhan tiedosto löytyy ohjelmapolusta (esim. kotihakemostossa oleva ~/bin -hakemisto). Molemmat .py-päätteiset tiedostot tulee olla samassa hakemistossa. Katso käyttöesimerkkejä alempaa.

Lataa HaloStack v0.2.1 Python-skriptit tästä .tar.gz tai .zip.

Avaa terminaali, ja kopioi alla oleva komento asentaaksesi tarvittavat paketit:

sudo apt-get install python python-numpy python-pythonmagick ufraw python-h5py python-scipy python-matplotlib

Vanhemman version kättöohjesivu ja latauslinkit: versio 0.1.x.

Käyttöesimerkkejä

Alla olevat esimerkkikomennot ovat windows-käyttäjiä silmälläpitäen kirjoitettu. Linuxissa komento on "halostack.py". Listaus komentoriviparametreista löytyy sivun lopusta, tai komennolla "halostack -h".

  • Lasketaan keskiarvo kaikista nykyisessä hakemistossa olevista JPG-kuvista ja tallennetaan kuva tiedostoon keskiarvo.png (16-bit/kanava). Tässä oletetaan kuvien olevan siinä hakemistossa, jossa komento suoritetaan. Kohdistamista varten kuvasta klikataan ensin kohdistusalue (aurinko tai kuu), ja seuraavaksi avautuvasta kuvasta alue jolta kohdistusaluetta etsitään. Ks. kuvat esimerkkikomennon alla.
    Tämä komento (kuvatiedostopäätteetä tarvittaessa vaihtaen) on riittävä suurimpaan osaan tapauksista. Loppukäsittely (esim. USM-terävöitys) kannattaa hoitaa erillisellä kuvankäsittelyohjelmalla.
        halostack -a average.png *.JPG
    
    align_reference.jpg

    Klikkaa kohdistamiseen käytettävä alue kuvasta. Ennen kohdistusalueen valintaa kuva kannattaa maksimoida koko näytön kokoiseksi ikkunan ylänurkan napeista. Mitä pienempi aluevalinta on, sitä nopeampaa kohdistaminen on. Täytyy kuitenkin pitää huoli, että referenssialue kattaa koko auringon. Kuva: Marko Riikonen.

    align_search_area.jpg

    Toisesta avautuvasta kuvasta valitaan alue, jolta ensimmäisessä kuvassa rajattua kohdetta etsitään. Nämä kulmapisteet sijoitetaan siten, että se kattaa ensimmäisessä kohdassa määritetyn alueen sijainnin kaikissa pinottavissa kuvissa. Mitä tarkemmin aluemääritys onnistuu, sitä nopeammin pinoaminen etenee. Yleensä kuitenkin kannattaa ottaa varmanpäälle, ja valita tämä alue vähän liian isoksi. Kuva: Marko Riikonen.

  • Kerätään kuvaan pikselit, joissa on suurin kokonaiskirkkaus. Muuten kuten edellä. Maksimipinoaminen on hyödyllinen pintahalokuvien pinoamisessa (ks. testimateriaali).
        halostack -m maximum_intensity.png *.tiff
    
  • Kerätään kuvaan pikselit, joissa kirkkaimman ja himmeimmän värikanavan ero on mahdollisimman suuri, eli max(R,G,B) - min(R,G,B) saa suurimman arvon:
        halostack -c maximum_color_difference.png *.Png
    
  • Kerätään kuvaan pikselit, joissa värikanavien välinen keskihajonta on suurin:
        halostack -M maximum_color_deviation *.jpg
    
  • Lasketaan kuvaan jokaisen kohdakkain olevan pikselin mediaani. Tämä ominaisuus tarvitsee Pythonin h5py-kirjaston, jota ei ole mukana Windows-paketissa.
        halostack -n median.png *.TIF
    
  • Terävöitetään kuvia ennen pinoamista epäterävällä maskilla (USM, Unsharp Mask), jonka säde on 40 pikseliä ja terävöityksen määrä 2.5 (Photoshopissa 250 %). Huomaa, ettei sigma- ja threshold-parametrejä ole annettu, joten käytetään oletusarvoja s=r/2 = 40/2 = 20 ja t=0.
        halostack -a average.png -u 40,2.5 *.jpg
    
  • Terävöitetään valmis pino epäterävällä maskilla:
        halostack -a average.png -U 25,2.5 *.jpg
    
  • Yhtenäistetään kuvien kirkkaus ensimmäistä kuvaa vastaavaksi. Normalisointi tehdään ennen kohdistamista ja pinoamista.
        halostack -m maximum_intensity.png -n 0 *.tif
    
  • Yhtenäistetään kuvien kirkkaus kuvasta "image42.tif" saatuun arvoon. Normalisoinnit lasketaan alueelta, jonka vasen ylänurkka kohdistetuissa kuvissa on (x1=300, y1=300) ja oikea alanurkka (x2=400, y2=400). Normalisoinnissa ko. alueiden keskikirkkaudet (mediaani) säädetään samoiksi.
        halostack -m max_int.png -b image42.tif -n 0 -N 300,300,400,400 *.tif
    

Testimateriaalia

Tässä tarjolla esimerkkikuvia, joilla pinoamista voi kokeilla.

Marko Riikosen 20.4.2012 kuvaama sarja pyramidihaloista Auringon ympärillä.

  • Kuvapaketti: riikonen1.zip
  • Esimerkkikomento:
  • halostack -a keskiarvo.png DSC_*
  • Esimerkkikomento valmiiksi annetulla kohdistuspisteellä ja etsintäalueella:
  • halostack -a keskiarvo.png -r 772,648,9 -s 750,620,795,670 DSC_*

Marko Riikosen 9.4.2012 kuvaama pintahalonäytelmä.

  • Kuvapaketti: riikonen2.zip
  • Esimerkkikomento:
  • halostack -m maksimi.png U*jpg
  • Esimerkkikomento valmiiksi annetulla kohdistuspisteellä ja etsintäalueella:
  • halostack -m maksimi.png -r 615,497,9 -s 590,470,640,515 U*jpg

Panu Lahtisen kuvasarja ilman peittäjää kuvattu sarja 23.4.2012 olleesta kirkkaasta ylläsivuavanäytelmästä.

  • Huomaa, että tässä kohdistusalueeksi on määritettävä paljon suurempi alue. Alueen on katettava koko auringon hohde, sekä aluetta sen ulkopuolelta.
  • Kuvapaketti: lahtinen1.zip
  • Esimerkkikomento:
  • halostack -a keskiarvo.png *jpg
  • Esimerkkikomento valmiiksi annetulla kohdistuspisteellä ja etsintäalueella:
  • halostack -a keskiarvo.png -r 405,320,40 -s 370,290,440,350 *jpg

Komentoriviparametrit

-a FILE, --average-stack FILE
    Laskee keskiarvopinonen ja tallentaa tuloskuvan 16-bit/kanava
    PNG-kuvana tiedostoon FILE (esim. keskiarvo.png).
-m FILE, --max-intensity-stack FILE
    Jokaiseen pikseliin valitaan pinosta ko. kohdassa oleva pikseli,
    jossa värikanavien yhteiskirkkaus on suurin (R+G+B saa
    suurimman arvon). Kuva tallennetaan tiedostonimellä FILE
    (esim. maksimi.png) samalla värisyvyydellä (8- tai
    16-bit/kanava) kuin lähtökuvat.
-M FILE, --max-deviation-stack FILE
    Jokaiseen pikseliin valitaan pinosta ko. kohdassa oleva pikseli,
    jossa värikanavien keskihajonta on suurin. Kuva tallennetaan
    tiedostonimellä FILE (esim. suurin_varihajonta.png) samalla
    värisyvyydellä (8- tai 16-bit/kanava) kuin
    lähtökuvat.
-c FILE, --max-color-diff FILE
    Jokaiseen pikseliin valitaan ko. kohdassa oleva pikseli, jossa
    kirkkaimman ja himmeimmän värikanavan erotus on
    mahdollisimman suuri, eli max(R,G,B) - min(R,G,B) saa suurimman
    arvon. Kuva tallennetaan tiedostonimellä FILE
    (esim. suurin_variero.png) samalla värisyvyydellä (8-
    tai 16-bit/kanava) kuin lähtökuvat.
-e FILE, --median FILE
    Jokaiseen pikseliin lasketaan ko. kohdassa olevien pikselien
    mediaani. Suurella kuvamäärällä tämä
    operaatio on hyvin hidas, ja vaatii todella paljon kiintolevyn
    käyttöä. Kuva tallennetaan tiedostonimellä
    FILE (esim. mediaani.png) samalla värisyvyydellä (8- tai
    16-bit/kanava) kuin lähtökuvat.

    Toimii suoraan vain Linux-versiossa!
-u R,A[,S[,T]], --pre-usm R,A[,S[,T]]
    Ennen pinoamista kuvia terävöitetään
    epäterävällä maskilla (USM, Unsharp Mask).

    R - maskin säde pikseleinä, esim. 40
    A - terävöityksen määrä, esim. 2.5
        (Photoshopissa 250 %)
    S - sigma, maskin säteen suuntainen painotuskerroin, esim. 20.
        Valinnainen. Jos arvoa ei anneta, käytetään arvoa R/2.
    T - kynnysarvo, Vain pikselit joiden kirkkaus on suurempi kuin annettu 
        luku huomioidaan terävöityksessä. Valinnainen.
-U R,A[,S[,T]], --post-usm R,A[,S[,T]]
    Ennen tallennusta valmiit pinot terävöitetään
    epäterävällä maskilla (USM, Unsharp
    Mask). Katso parametrien määrittelyt yltä.
-b FILE, --base-image FILE
    Kuvaa FILE käytetään pinon vertailukohtana
    kohdistettaessa ja kuvienvälisen kirkkauden
    yhtenäistämisessä. Jos tiedostoa ei anneta,
    kuvasarjan ensimmäinen kuva toimii vertailukohtana.
-r x,y,s, --align-reference x,y,s

    Tämä funktio on mukana vain taaksepäinyhteensopivuutta varten,
    eikä sitä tarvita v0.2 tai uudempien versioiden kanssa.

    Kohdista kuvat etsimällä jokaisesta kuvasta annettua
    vertailukohtaa parhaiten vastaava piste. Vertailualue
    määritellään antamalla paikan keskipiste (x,y)
    sekä alueen määrittävän neliön sivu,
    jonka sivunpituus on annetusta luvusta laskettuna
    2s+1. Pikselikoordinaattien nollakohta (0,0) on kuvan vasemmassa
    ylänurkassa. Vertailudatana käytetään (ilman
    lisämäärittelyjä) kuvasarjan
    ensimmäisestä kuvasta ko. alueelta saatuja
    pikseleitä.  Paras sovitus määritetään
    etsimällä pienin arvo pikselien erotuksen
    neliölle. Vertailukuvan voi määrittää
    vapaasti -b -valinnalla.
-s x1,y1,x2,y2, --align-search-area x1,y1,x2,y2

    Tämä funktio on mukana vain taaksepäinyhteensopivuutta varten,
    eikä sitä tarvita v0.2 tai uudempien kanssa versioiden.

    Kuvien kohdistamista voi nopeuttaa
    määrittelemällä alueen, jolla kohdistuspiste
    sijaitsee kaikissa kuvissa. Alueen määrittämiseksi
    syötetään alueen vasen ylänurkka (x1,y1)
    sekä oikea alanurkka (x2,y2). Pikselikoordinaattien
    nollakohta (0,0) on kuvan vasemmassa ylänurkassa.
-n NUM, --normalize NUM
    Yhtenäistetään kuvien keskinäinen kirkkaus
    ennen pinoamista. Luku NUM määrittää tason
    johon kuvien keskimääräinen kirkkaus
    säädetään. Jos NUM on nolla,
    käytetään ensimmäisen kuvan (tai -b
    -valinnalla osoitetun kuvan) keskimääräistä
    kirkkautta vertailukohtana.
-N x1,y1,x2,y2, --normalize-area x1,y1,x2,y2
    Määritä kuvien välisen normalisaation
    laskemiseen käytettävä alue. Alue rajataan
    antamalla alueen vasemman ylänurkan (x1,y1) ja oikean
    alanurkan (x2,y2) pikselikoordinaatit. Koordinaattien nollakohta
    (0,0) on kuvan vasemmassa ylänurkassa.
-t NUM, --correlation-threshold NUM
    Tällä vivulla voit määrittää
    pienimmän korrelaatiokertoimen (R^2), jolla kohdistetut kuvat
    vielä hyväksytään mukaan
    pinottaviksi. Korrelaatiokertoimen arvo on välillä 0.0 -
    1.0, jossa 1.0 on täydellinen yhteneväisyys. Oletuksena
    kaikki kuvat hyväksytään mukaan pinottavaksi (eli
    -t 0.0).
-R, --rotate
    Jos kuvat ovat kiertyneitä toistensa suhteen, voidaan tämän vivun
    avulla valita kaksi aluetta joidenka mukaan horisontti oikaistaan.
    Alueet määritetään klikkaamalla alueiden ristikkäiset
    nurkkapisteet (esim. vasen alanurkka + oikea ylänurkka).
-O STR, --output-images STR
    Tallenna yksittäiset kuvasarjan kuvat PNG-kuvina. Kuvien
    nimien loppuun lisätään STR (esim. -O kohdistettu
    -> IMG_1234_kohdistettu.png). Näiden kuvien avulla
    uudelleenpinoaminen on paljon nopeampaa kuin raakakuvista pinojen
    laskeminen. Koska kuvat tallennetaan kohdistamisen jälkeen,
    näistä kuvista voi tarkistaa kohdistuksen onnistuminen,
    ja tarvittaessa hienosäätää erillisellä
    kuvankäsittelyohjelmalla.
-v, --version
    Tulostaa käytössä olevan HaloStack-ohjelman versionumeron.
-d, --no-alignment
    Pinoaa kuvat ilman kohdistamista. Kättökelpoinen
    esim. jo valmiiksi kohdistettujen kuvien pinoamiseen, tai
    ns. tähtiviirukuvien (star trails) tekemiseen.