AS-0.3200 A09-17Kuvanrekisteröinti indosyaniinivihreä videoangiografiaan Projektityö Marianna Kontulainen 12/9/2009
Sisällysluettelo 1 Projektin tavoite... 3 2 ITK-kirjasto... 3 2.1 Kuvanrekisteröintiprosessi... 3 2.2 Intensiteettiin perustuva rekisteröinti... 4 2.3 Piirteisiin perustuva rekisteröinti... 4 3 Projektin kulku... 4 3.1 Ajankäyttö... 4 3.2 Toteutuneet riskit... 5 4 Python-rajapinta... 5 4.1 Asennus... 6 4.2 Koodi... 6 5 Toteutunut ohjelma... 6 5.1 ITK:n asennus ja kääntäminen... 6 5.2 Videomateriaali... 6 5.2 Valitut funktiot... 7 5.3 Ohjelman rakenne... 7 5.4 Käytetyt keinot suorituksen nopeuttamiseksi... 7 5.5 Suorituskyky... 8 6 Kehitysehdotuksia... 8 7 Käytettyä kirjallisuutta... 9
1 Projektin tavoite Projektityön tavoitteena oli tehdä kuvanreksteröintiohjelma indosyaniinivihreä (ICG, indocyanine green) videoangiografiaan. Angiografiassa potilaan verisuoneen ruiskutetaan varjoainetta, jonka jälkeen aineen etenemistä voidaan kuvata mm. röntgenillä tai infrapunakameralla. Indosyaniinivihreä lääketieteessä yleisesti käytetty varjoaine. Aine fluoresoi lähi-infrapuna-alueella, joten yksinkertaisimmillaan infrapunakamerana voidaan käyttää tavallista digikameraa. Kuvanrekisteröinnissä peräkkäiset videoframet kohdistetaan päällekkäin, jolloin kuvauslaitteen liikkumisesta aiheutuva häiriö poistuu. Rekisteröitävä videokuva on peräisin aivoleikkauksesta. Rekisteröinnistä oli tarkoituksena tehdä nopeaa, jotta sitä voitaisiin käyttää onlinekuvanrekisteröinnissä. Reaaliaikaisessa kuvanrekisteröinnissä rekisteröinti pitäisi pystyä suorittamaan 15-25 kertaa sekunnissa. Valmiissa ohjelmassa tulisi myös olla mahdollisuus seurata rekisteröinnin etenemistä ja onnistumista suorituksen aikana. Tavoitteena oli käyttää valmista ITK-kirjastoa (Insight Segmentation and Registration Toolkit) apuna ohjelman toteuttamisessa. ITK-kirjasto on toteutettu C++-kielellä, mutta siitä on olemassa rajapinnat Pythonille, Javalle sekä Matlabille. Projektityön aluksi suunnitelmana oli käyttää Python-rajapintaa, jotta ohjelmointi sujuisi helpommin. 2 ITK-kirjasto 2.1 Kuvanrekisteröintiprosessi ITK:n kuvanrekisteröintiprosessi on kuvan 1 mukainen. Sisääntulona prosessiin syötetään kaksi kuvaa, joista toinen on paikallaan oleva kuva ja toinen liikkuva kuva. Iteraatiosyklin mitta-osiossa lasketaan mitta, joka kuvaa paikallaan olevan ja liikkuvan kuvan välistä eroa. Optimointi-osiossa lasketaan edelliseltä iteraatiokierrokselta saadun mitan perusteella uudet transformaatioparametrit. Transformaatio kohdassa tehdään varsinainen mäppäys kahden kuvan pisteiden välillä käyttäen optimointi-osiossa laskettuja transformaatioparametreja. Interpolointia tarvitaan, koska pisteet eivät aina mäppäydy suoraan gridille vaan hieman ohi siitä. Iterointisykliä toistetaan kunnes liikkuva kuva on saatu kohdistettua riittävän hyvin paikallaan olevan kuvan päälle. Kuva 1. Kuvanrekisteröintiprosessi
2.2 Intensiteettiin perustuva rekisteröinti Intensiteettiin perustuvassa rekisteröintimenetelmässä käytetään koko kuvadataa. Tämän ansiosta rekisteröintiprosessi on automaattinen, mutta laskennallisesti se voi olla hidas erityisesti käytettäessä suuren resoluution kuvia tai tarkkoja 3D-kuvia. Tarkoituksena on minimoida kustannusfunktiota, joka mittaa kuvien intensiteettiien samankaltaisuutta. Tässä projektityössä tehdyssä ohjelmassa rekisteröintimenetelmä on intensiteettiin perustuva, joten tästä menetelmästä kerrotaan tarkemmin luvussa 5. 2.3 Piirteisiin perustuva rekisteröinti Piirteisiin perustuvassa rekisteröinnissä kuvasta valitaan tiettyjä tunnistettavia piirteitä, kuten pisteitä, viivoja tai muotoja. Tämä menetelmän on nopeampi verrattuna intensiteettiin perustuvaan menetelmään, koska rekisteröinnin tekemiseen ei tarvita koko kuvadataa. Ennen rekisteröintiprosessin aloittamista käyttäjän on yleensä valittava piirteet, joiden mukaan rekisteröinti tehdään. Näin ollen rekisteröintiprosessi ei ole täysin automaattinen eikä tapauksesta riippumaton. Angiografiakuvissa piirteinä voisi käyttää esimerkiksi suonien risteyskohtia. Eri leikkauksissa sngiografiassa näkyy kuitenkin erilaisia risteyksiä, jolloin käyttäjän olisi aina osoitettava risteyskohdat. Lisäksi osa piirteistä saattaa olla osan aikaa poissa näkyvistä (kuvan ulkopuolella tai leikkausinstrumentin alla), joka aiheuttaa lisävaikeuksia rekisteröintiin. Piirteiden löytäminen ja tunnistaminen kuvasta ei ole helppo tehtävä. ITK-kirjastossa on funktioita liittyen piirteisiin perustuvaan rekisteröintiin. Yksinkertaisimillaan piirteinä voi siis olla yksittäisiä pisteitä. Minimoidaan kahden kuvan pistejoukkojen etäisyyttä. Ensimmäinen skenaaroi soveltuu jäykkään tai affiini transformaatioon. Siinä kahdessa pistejoukossa on sama määrä pisteitä ja tietyllä pisteellä yhdessä joukossa tiedetään olevan täsmälleen yksi vastaava piste toisessa pistejoukossa. Toisessa skenaariossa pisteiden välistä vastaavuutta ei tunneta eikä pistejoukot ole välttämättä saman kokoisia. Ensimmäisen skenaarion mukaiseen rekisteröintiongelmaa voidaan yrittää ratkaista ITK:n funktiolla LandmarkBasedTransformInitializer. Jos kyseessä on deformaation rekisteröinti, voidaan käyttää ITK:n KernelTransform-funktioita. 3 Projektin kulku 3.1 Ajankäyttö Ajankäyttö on esitetty tarkemmin alla olevassa taulukossa. Projektityöhön käytetty aika vastaa vajaata viittä opintopistettä (127,5h/27h=4,72 op). Projektin aluksi asetin omaksi tavoitteekseni 5 opintopistettä. Viikko Käytetty tuntimäärä: 37 Aiheiden jako, alustavaa tutustumista rekisteröintiin 4 38 Tarkennusta työhön ohjaajalta, suunnittelua työparin kanssa 3,5 Kirjallisuuden lukemista (mm. Insight into Images) 6 39 Tapaaminen ohjaajan ja työparin kanssa 1,5 Työsuunnitelman teko ja esittely 6 Kirjallisuuden lukemista (mm. ITK software guide) 9
40 Python rajapinnan asennus 6,5 Esimerkkien koodausta Pythonilla 13 41 Esimerkkien koodausta Pythonilla 2 42 ITK:n kääntäminen (C++-kieleen siirtyminen) 7 43 Alkeellisen rekisteröintiohjelman koodaus C++:lla 7,5 44 Koeviikko, sain työssä käytettävän videomateriaalin Kahden kuvan kaappaus videomateriaalista ja käyttö tehdyssä ohjelmassa 2 Kuvasarjan teko videomateriaalista kaapatusta kuvasta 4 45 Väliraportin teko ja esittely 5 46 Koodausta (multi resolution menetelmä) 3 47 Koodausta (multi resolution menetelmä) 3,5 48 Lopullisen ohjelman koodaus: Ohjelman perusrakenne, tulosteet 14 Eri funktioiden kokeilua 6 49 Parametrien säätöä ja ohjelman suorituskyvyn arviointia 8 50 Loppudemon esittely ja kalvojen teko 4 Loppudokumentin kirjoitus 12 Yhteensä: 127,5 3.2 Toteutuneet riskit Projektin alussa suurimmaksi riskiksi luokiteltiin epäilys siitä, että ITK-kirjaston ei välttämättä sovellu nopeaan kuvanrekisteröintiin. Erityisesti deformaation rekisteröinti nopeasti aiheutti huolta. Projektin aikana tämä epäilys osoittautui todeksi ja toteutetussa ohjelmassa jäätiin kauaksi tavoitellusta rekisteröintinopeudesta huolimatta erilaisista yrityksistä nopeuttaa suoritusta. Ohjelmointikielen epäiltiin myös aiheuttavan ongelmia. Pythonilla ohjelmointi olisi sopinut minulle paremmin ja työtä aloitettiinkin tekemään Python-rajapinnan avulla. Opettelin ITK-kirjaston käyttöä Pythonilla. Ohjelmoin esimerkkiohjelmia ja kokeilin erilaisten funktioiden toimintaa. Selvisi kuitenkin, että rajapinnan kautta ei ole kaikkia tarvittavia funktioita käytettävissä, joten jouduin vaihtamaan C++-kieleen. Osa Pythonilla ohjelmointiin käytetty aika meni hukkaan ja ohjelmointi C++-kielellä oli hitaampaa, koska minulla ei ollut paljoa kokemusta sillä ohjelmoimisesta. Aloitin tekemään työtä parin kanssa ja hän oli mukana vielä väliraportin aikaan. Myöhemmin selvisi kuitenkin, että parini ei suoritakaan kurssia. Kaikki kurssiin liittyvät tuotokset ovat minun tekemiäni. Odotin kuitenkin saavani apua erityisesti loppudokumentin kirjoittamiseen ja siksi en pysynyt täysin aikataulussa. 4 Python-rajapinta Aloitin tekemään projektityötäni Python-rajapinnan kautta. Ajattelin, että Pythonilla ohjelmoiminen olisi nopeampaa ja itselleni helpompaa. ITK:n ohjelmointikieli on siis C++. Itselläni ei ollut aiempaa kokemusta kyseisestä ohjelmointikielestä, joten työtä nopeuttaakseni päätin käyttää Pythonrajapintaa.
4.1 Asennus Python-rajapinnan käyttöönottoa varten asensin seuraavat ohjelmat: Python 2.16 wrapitk 0.3.0 (binäärit) ITK 3.14.0 4.2 Koodi Opettelin ITK:n käyttöä Pythonilla ja ohjelmoin ITK:n esimerkkejä Pythonilla, jotka oli aiemmin toteutettu C++:lla. Lopputuloksena tästä työstä on muutamia ohjelmia, joissa tehdään yksinkertainen rekisteröinti kahdelle kuvalle. Kaikki funktiot eivät kuitenkaan ole käytössä Pythonrajapinnan kautta. Päätös ohjelmointikielenvaihdosta syntyi, kun selvisi, että esimerkiksi käyttämäni CenteredRigid2DTransform-funktio ei ollut käytettävissä rajapinnan kautta. Lopullisen toteutuksessa en voinut käyttää Pythonilla tekemääni koodia. 5 Toteutunut ohjelma 5.1 ITK:n asennus ja kääntäminen ITK:n kääntämistä ja asennusta varten tarvitsin seuraavat ohjelmat: MinGW 5.1.6 MSYS 1.0.11 Cmake 2.6.4 ITK 3.16.0 ITK Software Guiden luvussa kaksi on selkeät ohjeet kirjaston asennukseen ja tein asennuksen sen mukaan. 5.2 Videomateriaali Alkuperäisenä suunnitelmana oli tehdä ohjelma, joka pilkkoo videomateriaalin ensin yksittäisiin kuviin, suorittaa rekisteröinnin kuville ja yhdistää sitten yksittäiset kuvat takaisin videoksi. Ennen kuin sain videomateriaalin käsiini, etsin valmiita ohjelmia ja muita ratkaisuja, joilla videokuvan saisi helposti jaettua yksittäisiin kuviin. ITK:ssa ei ollut valmiita funktioita tämän tekemiseen. Saadessani lopulta videomateriaalin jouduin muuttamaan suunnitelmiani. Videomateriaalissa kirurgi paineli kudosta leikkaustyökalulla, jolloin verisuonten muoto muuttui. Aikaisemmin oli todettu, että ITK:n rekisteröintifunktiot, jotka ottivat deformaation huomioon olivat liian raskaita reaaliaikaiseen rekisteröintiin. Videomateriaalia oli ilmeisesti käytetty opetustarkoitukseen ja kuvan päälle oli lisätty selventäviä tekstejä. Myös nämä tekstit todettiin ongelmallisiksi rekisteröinnin kannalta. Näistä syistä päätin olla käyttämättä saatua videota sellaisenaan. Sen sijaan kaappasin videomateriaalista yhden kuvan ja liikuttelemalla tätä yhtä kuvaa sain muodostettua sarjan kuvia, jotka syötin ohjelmaani. Käytin apuna vidonkäsittelyohjelmaa. Tekemässäni kuvasarjassa kuvat ovat resoluutioltaan 256x256, ne siirtyvät sekä kiertyvät ja ne on tallennettu png-formaatissa.
5.2 Valitut funktiot Projektityön aikana kokeilin useita rekisteröintifunktioita ja luin ITK Software Guidea sekä dokumentaatiota. Tärkeimpänä valintakriteerinä oli nopeus. Esittelen tässä lyhyesti rekisteröintiprosessin eri osiin liittyvät funktiot. Muitakin funktioita toki käytettiin, mutta nämä ovat rekisteröinnin kannalta tärkeimmät. Transformaatiofunktioksi valitsin CenteredRigid2Dtransformfunktion. Funktio on tarkoitettu jäykkien kappaleiden 2D-kuvien rekisteröintiin. Iteraatioprosessin aikana kuvaa kierretään keskipisteen ympäri, kun normaalisti kierto tehdään kuvan kulmassa olevan pisteen ympäri. Mittana käytin MeanSquaresImageToImageMetric-funktiota, jossa lasketaan keskineliöllinen pikselikohtainen ero intensiteetissä kahden kuvan välillä. Mitan optimaalinen arvo on nolla. Interpolaattorifunktioksi valitsin LinearInterpolateImageFunction-funktion, jossa oletetaan, että intensiteetti muuttuu lineaarisesti grid-sijaintien välillä. Optimointi funktiona käytin RegularStepGradientDescentOptimizer-funktiota. Funktiossa parametreja muutetaan gradientin suuntaan. 5.3 Ohjelman rakenne Ohjelma ajetaan komentoriviltä ja se ottaa komentoriviparametreinä rekisteröitävän kuvasarjan sijainnin ja formaatin, kuvasarjan viimeisen kuvan numeron sekä sijainnin ja formaatin, jolla rekisteröity kuvasarja tallennetaan. Komento, jolla ohjelma käynnistetään on seuraavanlainen Registration1 input/img%03d.png 49 output/out%03d.png Kuvien tiedostoformaatti on png ja tässä esimerkissä rekisteröitävät kuvat löytyvät input-kansiosta ja rekisteröidyt kuvat laitetaan output-kansioon. Kuvien tiedostonimet ovat img000.ong, img001.png, img002.png jne. Toteutetussa ohjelmassa paikallaan oleva kuva on koko ajan kuvasarjan ensimmäinen kuva. Rekisteröintiprosessi tehdään for-loopissa, jossa kuvasarjan jokainen kuva käydään läpi ja asetetaan liikkuvaksi kuvaksi. Rekisteröinti tehdään aina yhdelle kuvaparille kerrallaan. Lopuksi rekisteröity kuvasarja siis palautetaan tiedostoon. 5.4 Käytetyt keinot suorituksen nopeuttamiseksi Kuvamateriaalista tehtiin useita oletuksia, joiden odotettiin nopeuttavan rekisteröintiä. Ensimmäinen oletus oli, että kuvassa ei tapahdu deformaatiota. Tämä oletus tehtiin, koska ITK:n deformaation huomioon ottavien funktioiden suoritus kesti useita minuutteja. Vertasin funktioiden suoritusaikoja ajamalla ITK:n valmiita esimerkkiohjelmia. Projektityössä käytettävä kuvamateriaalissa ei siis tapahdu muodon muutosta, se ainoastaan siirtyy ja kiertyy. Oletettiin myös, että videokuva on pieniresoluutioista eli tässä tapauksessa 256x256. Lisäksi maksimikiertymä ja -siirtymä oletettiin melko pieniksi. Kuvasarja, joka tehtiin tätä projektityötä varten oli kaikkien näiden oletusten mukainen. Kaikki edellä mainituista oletuksista eivät todennäköisesti pätisi oikealle videomateriaalille verisuonikartoituksesta. Kirurgin leikkaustyökalut saattavat olla kohteen edessä ja kirurgi saattaa koskea kudosta niin, että kohteen muoto muuttuu. Resoluutio ja oletus siitä, että kuva liikkuu vain vähän eri framejen välillä voi pitää paikkansa oikeassakin tilanteessa. Eräs keino, jolla ohjelman suoritusta pyrittiin nopeuttamaan oli Multi Resolution menetelmän käyttäminen. Tässä menetelmässä paikallaan olevasta ja liikkuvasta kuvasta muodostetaan
kuvapyramidit, joissa alkuperäisistä kuvista on muodostettu annetujen kutistustekijöiden mukaan pienempiresoluutioisia kuvia. Rekisteröinti tehdään ensin pienimmän resoluution kuville ja iteraatiokierrosten edetessä resoluutiota kasvatetaan. Lisäksi suoritusta voidaan nopeuttaa tekemällä rekisteröinti vain joka toiselle kuvalle. 5.5 Suorituskyky Multi resolution -menetelmä ei nopeuttanut ohjelman suoritusta kuten odotettiin; eroa tuskin huomasi. Menetelmästä on apua, jos rekisteröitävät kuvat ovat kaukana toisistaan. Projektityössä toteutetussa ohjelmassa kuvan oletettiin liikkuvan todella vähän, joten menetelmä ei vähentänyt iteraatiokertoja merkittävästi. Ohjelman suoritukseen kului omalla koneellani kuusi minuuttia. Ohjelman suoritusnopeus riippuu hyvin paljon käytettävän PC:n tehokkuudesta. Kokeilin ohjelman suoritusta myös toisella, tehokkaammalla koneella ja suoritusaika oli 50 sekuntia. Myös sillä oli merkitystä, millä alustalla ohjelma käännettiin. Parhaimmillaan pääsin 40 sekunnin suoritusaikaan. Suoritusaika puolittuu, jos rekisteröinnissä käytetään vain joka toista kuvaa. Jätettäessä joka toinen kuva huomioimatta, suorituksen tarkkuus kärsii ja mitan arvo kasvaa. Ohjelman suoritusajassa jäätiin kauaksi tavoitellusta, mutta optimoimalla ohjelmaa edelleen ja käyttämällä riittävän tehokasta PC:tä voidaan päästä reaaliaikaisen rekisteröinnin tavoitteisiin. Liitteenä on taulukko rekisteröintituloksista. Niistä nähdään, että mitan arvo on yhtä rekisteröintikierrosta lukunnottamatta alle yhden. Ero alkuperäisestä kuvasarjasta laskettujen arvojen ja rekisteröinnin tuloksena saatavien arvojen välillä on todella pieni kierron ja y-suuntaisen translaation kohdalla. X-suunnassa ero on hieman suurempi. Tämä johtuu todennäköisesti vain siitä, että alkuperäisessä kuvasarjassa kuva liikkuu x-suunnassa enemmän, jolloin eroa on jäljellä enemmän myös rekisteröinnin jälkeen. Katsottaessa rekisteröinnin tuloksena saatavaa kuvasarjaa rekisteröinti näyttää onnistuneen hyvin; kuva pysyy paikallaan ja se on riittävän tarkka. 6 Kehitysehdotuksia Toteutettu ohjelma ottaa 50 kuvaa, tekee kaikille rekisteröinnin ja palauttaa 50 rekisteröityä kuvaa. Jos rekisteröintiohjelmaa käytettäisi online-rekisteröinnissä, pitäisi ohjelma toteuttaa niin, että se ottaa yhden kuvaparin eli kaksi peräkkäistä kuvaa, joista ensimmäinen asetetaan paikallaan olevaksi kuvaksi ja toinen liikkuvaksi kuvaksi. Ohjelma tekee tälle kuvaparille rekisteröinnin ja palauttaa yhden rekisteröidyn kuvan. Kuvaparin jälkimmäinen kuva siirtyy seuraavaksi paikallaan olevaksi kuvaksi ja videovirrasta otetaan uusi kuva liikkuvaksi kuvaksi. Jos kuva liikkuu hitaasti kauaksi alkuperäisestä kohteesta ja rekisteröinti tehdään aina kahdelle peräkkäiselle kuvalle, myös rekisteröity kuva alkaa liikkua eikä pysy paikallaan kuten oli tarkoitus. Tästä syystä rekisteröinnissä tulee ottaa huomioon myös ensimmäisen kuvan koordinaatit ja laskea jäljessä tulevien kuvien koordinaatit ensimmäisen kuvan suhteen. Vaikka kuva siirtyisi kokonaan pois ensimmäisen kuvan määrittämältä kohdealueelta, ohjelma säilyttää kuitenkin tiedon liikkuvan kuvan sijainnista, mutta rekisteröity kuva pysyy paikallaan. Koordinaattien selvittämiseksi on tutkittava tarkemmin ITK:n tapaa tehdä rekisteröinti. Mikäli rekisteröinti halutaan tehdä FPGA:lla, on ITK näkemykseni mukaan liian raskas kirjasto siihen tarkoitukseen. Jos rekisteröintiohjelmaa suoritetaan PC:ssä, on ITK:n käyttäminen mahdollista myös
online-rekisteröinnin tapauksessa. Toinen kirjasto, jonka sopivuutta kuvanrekisteröintiin voisi tutkia on OpenCV-kirjasto. OpenCV (Open Source Computer Vision) on konenäkösovelluksia varten tehty avoimen lähdekoodin kirjasto, joka on tarkoitettu erityisesti reaaliaikaiseen kuvaprosessointiin. Kirjaston funktioita voisi soveltaa piirteisiin perustuvaan rekisteröintiin. Lisäksi kirjastosta löytyy valmis funktio still-kuvien kaappaamiseen videokuvasta. 7 Käytettyä kirjallisuutta [1] Tuomas Seppälä; Indosyaniinivihreä silmän optisessa verisuonikartoituksessa; Kandidaatintyö; 10.12.2008 [2] Luis Ibáñez, Will Schroeder, Lydia Ng, Josh Cates, Insight Software Consortium; The ITK Software Guide; 21.11.2005; http://www.itk.org/itksoftwareguide.pdf [3]Terry S. Yoo; Insight into Images: Principles and Practice for Segmentation, Registration, and Image Analysis; 2004; ISBN: 9781568812175 [4] ITK 3.16.0 Documentation; http://www.itk.org/doxygen316/html/index.html
Translaatio x-suunta Alkuperäinen Rekisteröity Ero Translaatio y-suunta Alkuperäinen Rekisteröity Ero -0,4327-0,443225 0,010525 0,03 0,0296787 0,000321-0,8629-0,845099-0,0178 0,0955 0,0961581-0,00066-1,2868-1,27141-0,01539 0,1944 0,199341-0,00494-1,7013-1,66204-0,03926 0,3254 0,32856-0,00316-2,1035-2,0692-0,0343 0,4877 0,4781 0,0096-2,4905-2,4484-0,0421 0,6809 0,68172-0,00082-2,8595-2,80402-0,05548 0,905 0,899196 0,005804-3,2076-3,15464-0,05296 1,1605 1,16268-0,00218-3,5315-3,48507-0,04643 1,4483 1,44401 0,00429-3,8259-3,78412-0,04178 1,7674 1,75448 0,01292-4,0849-4,08075-0,00415 2,1151 2,11324 0,00186-4,304-4,58478 0,28078 2,4882 2,46484 0,02336-4,4799-5,10189 0,62199 2,8826 2,82974 0,05286-4,6109-5,45695 0,84605 3,2941 3,20934 0,08476-4,6967-5,45564 0,75894 3,718 3,64454 0,07346-4,7384-5,37139 0,63299 4,1498 4,09227 0,05753-4,7384-5,23084 0,49244 4,5848 4,5439 0,0409-4,6999-5,04208 0,34218 5,0188 4,99243 0,02637-1,3923-1,57832 0,18602 7,2478 7,23301 0,01479 2,8283 2,79195 0,03635 7,0024 6,99542 0,00698 4,7663 4,8955-0,1292 3,9643 3,96296 0,00134 4,3002 4,58277-0,28257 3,224 3,22876-0,00476 3,7226 4,16671-0,44411 2,576 2,57961-0,00361 3,0392 3,63499-0,59579 2,0483 2,05209-0,00379 2,2687 3,00357-0,73487 1,6546 1,65712-0,00252 1,442 2,30453-0,86253 1,3923 1,39099 0,00131 0,5862 1,53975-0,95355 1,2419 1,23784 0,00406-0,2801 0,760536-1,04064 1,1786 1,16934 0,00926-1,1453-0,0260301-1,11927 1,1782 1,16451 0,01369-2,0096-0,811183-1,19842 1,2198 1,20036 0,01944-2,8745-1,60506-1,26944 1,2859 1,26056 0,02534-3,7416-2,38969-1,35191 1,3601 1,32688 0,03322-4,6116-3,21881-1,39279 1,4244 1,399 0,0254-5,4834-3,99961-1,48379 1,4565 1,41297 0,04353-6,3528-4,85846-1,49434 1,4254 1,39515 0,03025-7,2104-5,62778-1,58262 1,2843 1,24163 0,04267-8,0154-6,37629-1,63911 0,967 0,919734 0,047266-8,6824-7,07593-1,60647 0,4223 0,391676 0,030624-9,1378-8,05585-1,08195-0,3182-0,319606 0,001406-6,4806-6,08801-0,39259-3,7562-3,75003-0,00617-2,1227-2,26594 0,14324-5,2938-5,30608 0,01228 2,0546 1,85378 0,20082-3,8953-3,91062 0,01532
2,5059 2,31534 0,19056-3,1344-3,15343 0,01903 2,8339 2,65613 0,17777-2,3191-2,33513 0,01603 2,9049 2,75736 0,14754-1,4455-1,45794 0,01244 2,4982 2,39005 0,10815-0,6835-0,700194 0,016694 1,7378 1,66525 0,07255-0,2512-0,258878 0,007678 0,878 0,841173 0,036827-0,0617-0,0728046 0,011105 Kierto (astetta) Alkuperäinen Rekisteröity Ero Mitta -0,0242-0,0261431 0,001943 0,64809-0,0638-0,0694899 0,00569 0,261129-0,1057-0,10714 0,00144 0,691726-0,1457-0,142621-0,00308 0,953752-0,1812-0,181969 0,000769 0,857599-0,2096-0,198571-0,01103 0,929318-0,2281-0,235736 0,007636 0,627339-0,2321-0,23165-0,00045 0,767062-0,2142-0,203594-0,01061 1,02915-0,1573-0,161875 0,004575 0,666389 0-0,0026305 0,002631 0,094105 1,3048 1,30684-0,00204 0,772092 2,8872 2,88586 0,00134 0,780323 4 3,998 0,002 0,788467 3,5451 3,54902-0,00392 0,780773 2,9392 2,93653 0,00267 0,788413 2,2756 2,27701-0,00141 0,781152 1,581 1,58028 0,00072 0,785328 0,8678 0,866851 0,000949 0,755358 0,1438 0,1498-0,006 0,83556-0,5854-0,581289-0,00411 0,798325-1,3145-1,31093-0,00357 0,761597-2,0375-2,03635-0,00115 0,777206-2,7453-2,74399-0,00131 0,806379-3,42-3,42189 0,00189 0,772307-4 -4,00214 0,00214 0,795343-4,4146-4,41343-0,00117 0,781488-4,7874-4,78698-0,00042 0,77167-5,1372-5,13704-0,00016 0,785532-5,4683-5,46638-0,00192 0,782117-5,7818-5,78478 0,00298 0,783411-6,0769-6,07539-0,00151 0,786841-6,3513-6,35049-0,00081 0,785445-6,6009-6,6027 0,0018 0,793083-6,8186-6,81585-0,00275 0,785109
-6,9909-6,99128 0,00038 0,782807-7,0875-7,08657-0,00093 0,787904-7 -6,9972-0,0028 0,779246-4,6982-4,70152 0,00332 0,787234-1,7528-1,75096-0,00184 0,80934 0,6622 0,667615-0,00541 0,756987 0,9183 0,918211 8,9E-05 0,788401 0,9179 0,917987-8,7E-05 0,738368 0,8284 0,826982 0,001418 0,802508 0,6907 0,692392-0,00169 0,753825 0,5237 0,523553 0,000147 0,790799 0,34 0,340797-0,0008 0,756534 0,153 0,161736-0,00874 0,524027