SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
EÖTVÖS LORÁND TUDOMÁNYEGYETEM
INFORMATIKAI KAR
PROGRAMOZÁSELMÉLET ÉS SZOFTVERTECHNOLÓGIAI
TANSZÉK
EGYSZERŰ ZENITKAMERA MÉRŐKÉPEIT
FELDOLGOZÓ SZOFTVER
Dr. Völgyesi Lajos
egyetemi tanár
BME ÉMK, Általános és
Felsőgeodézia Tanszék
Giachetta Roberto
egyetemi tanársegéd
ELTE IK, Programozáselmélet és
Szoftvertechnológiai Tanszék,
Koppányi Zoltán
programtervező informatikus BSc
Budapest, 2011
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
2. oldal
1. Bevezetés.....................................................................................................................4
2. A módszer elméleti háttere .......................................................................................6
2.1. Módszer általános leírása .........................................................................................6
2.2. Bemenő és meghatározandó adatok .........................................................................7
2.3. Mérés végrehajtása ...................................................................................................8
2.4. Feldolgozás elméleti háttere.....................................................................................8
2.4.1. Csillagok azonosítása ....................................................................................9
2.4.2. Képek tájékozása.........................................................................................12
2.4.3. Álláspont koordinátáinak meghatározása....................................................13
3. Felhasználói dokumentáció.....................................................................................15
3.1. Rendszerkövetelmények.........................................................................................15
3.2. A feldolgozási folyamat áttekintése .......................................................................15
3.3. Program indítása.....................................................................................................16
3.4. A program felépítése ..............................................................................................16
3.5. Fájlok kezelése .......................................................................................................17
3.5.1. Új projekt létrehozása..................................................................................17
3.5.2. Projekt mentése ...........................................................................................18
3.5.3. Projekt megnyitása ......................................................................................18
3.5.4. Projekt mentése másként .............................................................................18
3.5.5. Képek betöltése ...........................................................................................19
3.5.6. Betöltött kép eltávolítása.............................................................................19
3.5.7. Csillagkatalógus betöltése ...........................................................................19
3.6. Digitalizálás végrehajtása.......................................................................................20
3.6.1. Szerkesztő funkciók.....................................................................................21
3.6.2. Digitalizálás manuálisan..............................................................................22
3.6.3. Digitalizálás vetített csillagokkal ................................................................24
3.7. Képek tájékozása....................................................................................................25
3.8. Álláspont koordinátáinak meghatározása...............................................................26
3.8.1. Álláspont meghatározása középképzéssel...................................................26
3.8.2. Álláspont meghatározása forgástengely keresésével...................................27
4. Fejlesztői dokumentáció..........................................................................................28
4.1. Követelmény specifikáció ......................................................................................28
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
3. oldal
4.2. Alkalmazott technológiák.......................................................................................29
4.3. Alkalmazott szoftverfejlesztési módszertan...........................................................30
4.4. Előzetes tervezés ....................................................................................................30
4.5. A program osztály szerkezetének áttekintése.........................................................31
4.6. A Logic névtér........................................................................................................35
4.6.1. A Galaxy névtér...........................................................................................36
4.6.2. Az AndromedaMath névtér .........................................................................39
4.7. GUI névtér..............................................................................................................42
4.7.1. A MainForm osztály....................................................................................43
4.7.2. Az ImageForm osztály ................................................................................45
4.7.3. A ProgressBarForm osztály.........................................................................47
4.7.4. A StarForm osztály......................................................................................48
4.7.6. A paraméterező ablakok..............................................................................49
4.8. Lokalizáció .............................................................................................................51
4.9. Implementációs megkötések ..................................................................................51
4.10. Tesztelés ...............................................................................................................52
5. Összefoglalás ............................................................................................................54
6. Irodalomjegyzék ......................................................................................................56
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
4. oldal
1. Bevezetés
Az emberiség évezredekig a csillagok alapján tájékozódott. Mára a modern technika
fejlettségnek köszönhetően a helymeghatározási technikák ezt a fajta helymeghatározási
módot teljes mértékben kiszorították. Elég csak a GPS technikára gondolnunk. Akkor
mégis mi értelme van egy olyan szoftver készítésének, mely ezt a problémát tűzi ki
megoldásának?
Ennek okát nem a GPS koordináták vízszintes, hanem magassági összetevőiben kell
keresnünk. A magasság, bár mindennapjainkban geometriai mennyiségnek véljük,
valójában fizikai mennyiség. Sokkal egyértelműbb a kérdés, hogyha úgy tesszük fel, hogy
merre fele folyik a víz. Mindennapjainkban úgy válaszolnánk a kérdésre, hogy lefele. Ám a
tudomány erre így válaszol: a nehézségi erőtér adott ponton átmenő potenciálfelületének az
adott pontban vett gradiensének irányába. Ez pedig nem jelent mást, minthogy egy folyó
folyási irányát egy nagyobb tömeg, például különböző földalatti tömegek eltéríthetik, ha
kis mértékben is. A nagy távolságokon a kis eltérések jelentékeny összeget képezhetnek.
Az a kérdés pedig, hogy merre fele folyik a víz, bármennyire is bagatellnek tűnik,
valójában a mérnöki, és a természettudományos tevékenységekhez elengedhetetlen.
Fizikai magasságainkat egy alapfelülethez viszonyítva adjuk meg, ez pedig a Föld
elméleti alakja, a geoid. A geoid meghatározása ezért nagyon fontos. Meghatározásához
többek között az ún. függővonal elhajlások értékeire van szükség. Ehhez ismerni kell az
adott pont koordinátáit mind a geometriai, mind a fizikai rendszerben. Fizikai
rendszerünket szintfelületi földrajzi koordinátarendszerben adhatjuk meg. Ebben a
rendszerben adott koordinátákat pedig előállíthatunk zenitkamerákkal.
A zenitkamerával az égboltról készített fényképek segítségével, a csillagok
beazonosítása után, megfelelő eljárással megkaphatjuk a kép készítése helyének
szintfelületi koordinátáit. Így tulajdonképpen visszajutottunk a csillagokra végzett
mérésekhez, mint fontos helymeghatározási technikára.
A szakdolgozat célja egy ún. zenitkamera által készített képek feldolgozásának
támogatására program készítése.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
5. oldal
A szakdolgozat elején rövid áttekintést adunk a feldolgozási eljárás matematikai,
csillagászati összefüggéseihez. Erre szükség van a programkód megértéséhez, illetve a
felhasználó számára is, hogy tudja, milyen feladatokat is hajt végre.
Ezután a felhasználói dokumentáció a szoftver lehetőségeit mutatja be. Célja a
program teljes körű bemutatása, melyet egy feldolgozási folyamat mentén kíván megtenni.
A fejlesztői dokumentáció a fejlesztés során alkalmazott technológiákat, megoldásokat,
a program szerkezetének bemutatását tartalmazza. Segítségével dokumentáltam az
elvégzett munkát, illetve segítséget adunk a további fejlesztésekhez.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
6. oldal
2. A módszer elméleti háttere
A fejezet célja a szoftver fejlesztése során felhasznált szakirodalom rövid áttekintése.
Ezért a következőekben tárgyalom a feldolgozási folyamat lépéseit, azok matematikai,
csillagászati összefüggéseit. Ennek ismerete nélkülözhetetlen a feladat elkészítéséhez, a
program használatához.
2.1. Módszer általános leírása
Zenitkamerákat az 1950-es évektől használták a koordináta meghatározáshoz. A
későbbiekben a technikai fejlődés révén ezen eszközök is egyre pontosabbá váltak.
1. ábra - A zenitkamera alapelve1
Alapelvük, hogy a kamerát úgy állítjuk az égbolt felé, hogy annak irányvonala a helyi
függőleges irányába essen (1. ábra). Ebben a pozícióban készítenek fényképet az égboltról.
Az így készült képen az egyes csillagokat beazonosítva – megmérve – meghatározhatóvá
válik a mérőkép készítésének helye, oly módon, hogy a csillagok helyzetét valamely
koordinátarendszerben ismerjük. A nagy távolságok, Föld méretű értékek miatt a
1
forrás: Dr. Völgyesi Lajos
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
7. oldal
meghatározás egyes bemenő paramétereinek meghatározása során szélső pontossági
igényekre kell törekedni. Ehhez speciális hardware kialakításra van szükség (megfelelő
objektív, CCD mátrix, időmeghatározás kérdései, stb.), melyek az eszköz árát rendkívüli
módon megnövelik, ezért nagyon kevés ilyen műszer létezik a világon.
Ezen okoknál fogva indult kísérlet egy olcsóbb zenitkamera rendszer kifejlesztésére,
mely már meglévő eszközök felhasználásával kívánja a feladatot megoldani. Hazánkban
Laky és Ress [1][2] végeztek kísérletet ezzel kapcsolatban. Az ő munkáikra alapozva
készítettem el a szakdolgozatot.
2.2. Bemenő és meghatározandó adatok
A szakdolgozat témája a korábban említett mérések kiértékelésére szoftver fejlesztése.
Ehhez meg kell határoznunk a bemenő adatok körét, mellyel a feladat végrehajtható, illetve
milyen eredményeket kívánunk szolgáltatni a feldolgozásból. Itt csupán a bemenő és
kimenő adatok körét elméleti szempontból kívánom tárgyalni.
Először is rendelkezésre kell állnia a mérésből készített képeknek és a hozzájuk tartozó
időpontoknak a GAST2
időrendszerben, másrészről szükséges a csillagok látszóhelyének
ismerete azok azonosításához. Az előbbit mérések segítségével szerezhetjük be. Az utóbbi
meghatározásához az XEphem program kitűnően használható. A Unix alapú rendszer
oktatási és személyes használatra ingyenesen elérhető. A programban megadva az
álláspontunk előzetes koordinátáit és az időpontot, a csillagok látszóhelyei
rendelkezésünkre állnak az ún. II. ekvatoriális koordinátarendszerben. Ehhez a Hyparcos
Tycho2 csillagkatalógust használja, mely a benne tárolt égi vonatkoztatási rendszerben
adott csillagkoordináták és sajátmozgásaik, valamint egyéb modellek segítségével számítja
a csillagok látszóhelyét.
A bemenő adatok segítségével az elkészült programmal a képek kiértékelése már
elvégezhető, a folyamat végeredményeképpen pedig az álláspontunk szintfelületi
koordinátái állnak a rendelkezésünkre. Tehát tulajdonképpen két koordinátapár.
2
A GAST (Greenwich-i csillagidő, Greenwich Apperent Siderel Time) egy a föld forgásán alapuló
időrendszer. Kapcsolata az UTC világidővel összetett, az alábbi szakirodalomban olvasható [1].
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
8. oldal
2.3. Mérés végrehajtása
A mérések végrehajtásának rövid leírását szükségesnek találtuk, mivel így
kézzelfoghatóbbá válik a probléma bemenő adatainak értelmezése. A leírás [1] alapján
készült. A szerzők egy Zeiss THEO010B teodolitra rögzítettek egy Canon EOS350D típusú
digitális fényképezőgépet. Az állótengelyt a teodolit segítségével állították függőlegesbe,
és a kamerához csatlakoztatott számítógép segítségével készítették el a képeket. A képek
készítésének pontos idejét úgy határozták meg, hogy a számítógépet interneten keresztül
szinkronizálták az UTC idővel. A képek készítésénél a következő hibahatásokat vették
figyelembe:
• A hardverkésést, amíg a fénykép expozíciója és a számítógépbe való beérkezése
között eltelt. Ezt korábbi mérésekkel vették figyelembe.
• Az állótengely és az optikai tengely közötti szögeltérést úgy vették figyelembe,
hogy több képet készítettek. Az egyes pozíciókat 90 fokonként változtatták a
vízszintes körön, így a hibahatás kiejthető.
A mérés során olcsó, kézi GPS segítségével meghatározták az álláspontunk előzetes
koordinátáit.
A mérést követően az UTC időt a GAST időrendszerbe transzformálták az adott
epochára vonatkozó földforgás paraméterek (EOP – Earth Oriented Parameters) és a
megfelelő összefüggések segítségével. Így összeálltak a kiértékelendő kép-idő párok. A
mérés pontos végrehajtását a továbbiakban nem részletezem, az a korábbi forrásokból
elérhető [1].
2.4. Feldolgozás elméleti háttere
A feldolgozás menete 3 fázisra bontható. Ezek a következőek:
• Csillag-fényforrás azonosítása. A fényképen lévő fényforrásokat azonosítani kell. A
csillagok koordinátáit csillagkatalógusból vehetjük. Ebből meghatározhatjuk
(természetesen nem pontosan) a fényképen található helyüket, ezáltal hatékonyabbá
tehetjük a csillagok azonosítást, vagy akár automatizálhatjuk is azt.
• Képek tájékozása. Az egyes képekhez meghatározandó azok normálisának iránya.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
9. oldal
• Álláspont koordinátáinak meghatározása. A képek normálisai egy kúp alkotója
mentén helyezkednek el. Ennek a kúpnak a meghatározása a feladatunk, mivel az
jelöli ki az álláspontunk helyzetét.
A továbbiakban tekintsük át az egyes lépéseket kitérve a matematikai leírásukra.
2.4.1. Csillagok azonosítása
Az XEPhem fájlból nyert adatok a II. ekvatoriális koordinátarendszerben adottak (
2. ábra). Ezt a rendszert a természet jelöli ki. Az egyik alapiránya a Föld
forgástengelye (ω), az erre merőleges síkban található az égi egyenlítő síkja. Az égi
egyenlítői sík az ekliptika síkjával (ez az a sík, amelyen a Föld a Nap körül kering) való
metszése a csomóvonal. A csomóvonal két vége, két irányt jelöl ki: a Tavaszpont és az
Őszpontot. A koordinátarendszerünk másik tengelyének iránya essen a Tavaszpont (Ύ)
felé. A harmadik tengely úgy helyezkedik el az előzőekhez képest, hogy a tengelyeink
hármasa jobbsodrású rendszert alkosson. Az origó ezután a Föld tömegközéppontjába (O)
helyezve kapjuk a II. ekvatoriális koordinátarendszert.
2. ábra - II. ekvatoriális koordinátarendszer3
A koordinátarendszer ismeretében megadható egyes csillagok helyzete. Most
helyezzük egy egységsugarú gömb középpontját a koordinátarendszerünk kezdőpontjába,
3
forrás: Dr. Völgyesi Lajos
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
10. oldal
valamint húzzuk be a csillagra mutató helyvektort. Ez a vektor a gömböt átdöfi. A
döfésponton keresztül a gömbön rajzolhatunk egy az alapsíkra (egyenlítő síkjára)
merőleges (meridián, vagy órakört), és vele párhuzamos kört (parallel kört). Ezeken a
körökön mérve a döféspontunkat, két szöget kapunk (térbeli polár koordináták). Ezzel
adjuk meg a csillagunk helyzetét. A paralelkörön mért szöget rektaszcenziónak, a
meridiánkörön mért szöget hívjuk deklinációnak. Ilyen rektaszcenzió (α) és deklináció (δ)
értékeket kapunk az XEphem fájlból a mérőkép készültének időpontjában.
Továbbiakban tekintsük az álláspontunkat, ahol a mérőképek készültek. Tekintsük úgy,
hogy ez a pont a Föld tömegközéppontjában van. Ezt megtehetjük a nagy távolságuk miatt,
a szögek ebbéli változása olyan kismértékű, hogy a mérési pontatlanságunk jóval nagyobb.
Így álláspontunk megegyezik a II. ekvatoriális rendszer origójával. A problémánk továbbá
az, hogy a mérőképünk normálisa (ami a helyi függőleges, más néven zenit) nem egyezik
meg a koordinátarendszer kezdő irányával (ami a forgástengely). Ezért az XEphem
programból beolvasott értékeket át kell transzformálni.
A transzformáció annyit jelent, hogy az álláspontunkat a gömbön addig forgatjuk, míg
az a forgástengelyre nem esik. Ha az álláspontunk koordinátái ismertek a II. ekvatoriális
koordinátarendszerben, akkor az alábbi egyszerű képlettel ez megtehető:
ߙ′௖௦ = ߙ௖௦ +		ߙ௣ (1.1)
ߜ′௖௦ = ߜ௖௦ +	ߜ௣ (1.2)
ahol ߙ௖௦ a csillag rektaszcenziója, ߜ௖௦ a csillag deklinációja, 	ߙ௣	álláspontunk
rektaszcenziója, ߜ௣, álláspontunk deklinációja, valamint ߙ′௖௦, ߜ′௖௦	 a csillag
rektaszcenziója, és deklinációja egy mérőkép normálisával megegyező
koordinátarendszerben.
Azonban ehhez ismerni kell az álláspontunk koordinátáit az ekvatoriális rendszerben.
Ez azonban nem áll rendelkezésünkre. Helyette GPS mérést végezve (akár valamilyen
olcsóbb készülékkel) megkaphatjuk az álláspontunk ún. a’priori (előzetes) koordinátáit.
Ezzel az előzetes kép közelítőleg meghatározható. Ellenben a GPS rendszerben adott
koordináták olyan rendszerben adottak, amelynek a tengelyirányai nem forognak együtt a
Földdel. Ez a rektaszcenzióban okoz eltérést, amely meghatározható a Földnek a
kezdőiránytól mért elfordulásával, vagyis időméréssel. Tehát szükségünk van a képek
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
11. oldal
készítésének időpontjára a GAST időrendszerben (τ). Ennek ismeretében az (1.1) egyenlet
a következőképpen alakul:
ߙ′௖௦ ൌ ߙ௖௦ ൅		ߙ௣ ൅ 	τ (1.3)
Miután megkaptuk ebben a rendszerben a csillagok koordinátáit elő tudjuk állítani a
mérőképre történő vetítés útján keletkező képeket. Ehhez először át kell térnünk térbeli
polárkoordinátákról derékszögű koordinátákra a következő összefüggésekkel:
ܺ ൌ cos ߜ௖௦ cos ߙ௖௦ (1.4)
ܻ ൌ cos ߜ௖௦ sin ߙ௖௦ (1.5)
ܼ ൌ sin ߜ௖௦ (1.6)
Ezután a vetítést a 3. ábra alapján egyszerű aránypárokkal írhatjuk fel:
ߦ ൌ ܿ
௑
௓
(1.7)
ߟ ൌ ܿ
௒
௓
(1.8)
ahol ߦ, ߟ	 a képkoordináták, ܺ, ܻ, ܼ a csillag térbeli derékszögű koordinátái, ܿ
kameraállandó, melynek ismerete szükséges a feldolgozáshoz. A kameraállandó a
fényképező kamerákra jellemző mérőszám, melyet kalibrációval tudunk meghatározni.
3. ábra - Vetítés a mérőképre egyik metszetben
Az egyenletek felírásával megkaptuk a csillagkoordinátákból az ún. előzetes képet,
melyet most a ténylegesen készített képre illeszthetünk. Az apriori jellemző értékekből, és
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
12. oldal
más hatásokból, melyeket nem vettünk figyelembe a két kép eltérést fog mutatni. Az egyik
ilyen fontos eltérés, hogy nem tudjuk, milyen vízszintes szögben készültek a képek. Ez az
eltérés egy vízszintes értelmű forgatást jelent. További hibahatás a kép eltolódása az
előzetes képtől, ez annak köszönhető, hogy az álláspontunk koordinátái közelítőleg voltak
csak pontosak. Végül a vetítési centrum helyzetének csupán közelítő ismerete okozhat
méretarány torzulást.
Ha manuálisan ezeket kezeljük, akkor gyorsan egy helyes elrendezést kaphatunk,
melyekkel a csillagok képbeli helyzete azonosítható. Ezt úgy tehetjük meg, hogy az egyes
képkoordinátákat elforgatjuk, illetve eltoljuk. Ezt a következő képlettel végezhetjük el:
൤
ߦ′
ߟ′
൨ = ܴሺߙሻ ൤
ߦ
ߟ
൨ +	൤
ߦ଴
ߟ଴
൨ (1.9)
ahol ߙ, a forgatás szöge, ߦ଴, ߟ଴ az eltolás mértéke, ߦ, ߟ az eredeti képkoordináták,
valamint ߦ′, ߟ′ a transzformált koordináták.
Ezzel befejeztük a képen található csillagok azonosítását. Ha normál zenitkamerát
használnánk, akkor a következő lépés, már az álláspont koordinátáinak meghatározása
lenne. De mivel mi egy egyszerű zenitkamera méréseit szeretnénk feldolgozni, ezért több
képet kell készítettünk.
2.4.2. Képek tájékozása
A következő lépés az egyes képek tájékozásának meghatározása, vagyis az egyes
képek normálisainak számítása.
Ezt úgy oldjuk meg, hogy a mérőképre két másodfokú interpolációs felületet fektetünk
a két tengely irányába. Ezt a következőképpen írhatjuk fel Ress [1] alapján:
ߙሺߦ, ߟሻ = ܽଵ + ܽଶߦ +	ܽଷߟ +	ܽସߦଶ
+	ܽହߦߟ +	ܽ଺ߟଶ
(1.10)
ߜሺߦ, ߟሻ = ܾଵ + ܾଶߦ +	ܾଷߟ +	ܾସߦଶ
+	ܾହߦߟ +	ܾ଺ߟଶ
(1.11)
Célunk az ܽଵ,ܾଵ együtthatók meghatározása. Feltételezve azt, hogy több mérésünk van,
mint ahány ismeretlenünk, alkalmazhatjuk a legkisebb négyzetek módszerét a feladat
megoldásához. Amennyiben a csillag-fényforrás párosítások száma és az egyenletek az
alábbi módon alakulnak:
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
13. oldal
‫ܣ‬ =
‫ۏ‬
‫ێ‬
‫ێ‬
‫ێ‬
‫ێ‬
‫ێ‬
‫ۍ‬1 ߦଵ ߟଵ
1 ߦଶ ߟଶ
			
ߦଵ
ଶ
ߦଵߟଵ ߟଵ
ଶ
ߦଶ
ଶ
ߦଶߟଶ ߟଶ
ଶ
⋮ ⋮ ⋮
1 ߦ௜ ߟ௜
			
⋮ ⋮ ⋮
ߦ௜
ଶ
ߦ௜ߟ௜ ߟ௜
ଶ
⋮ ⋮ ⋮
1 ߦ௦ ߟ௦
			
⋮ ⋮ ⋮
ߟ௦ ߦ௦ߟ௦ ߟ௦
ଶ
‫ے‬
‫ۑ‬
‫ۑ‬
‫ۑ‬
‫ۑ‬
‫ۑ‬
‫ې‬
							‫ܣ‬ ∈ ࡾ௦×଺
(1.12)
݈ = ቈ
ߙଵ
ߙଶ
⋮
቉ ; ݉ = ൥
ߜଵ
ߜଶ
⋮
൩ 						݈, ݉ ∈ ࡾ௦
(1.13)
Végül az ismeretlenek vektora [7]:
ܽ = (‫ܣ‬்
‫)ܣ‬ିଵ
‫ܣ‬்
݈							ܽ ∈ ࡾ଺
(1.14)
ܾ = (‫ܣ‬்
‫)ܣ‬ିଵ
‫ܣ‬்
݉						ܾ ∈ ࡾ଺
(1.15)
Ahol a keresett értékek az	ܽ, ܾ vektorok első eleme. Így meghatároztuk a mérőképek
normálisainak irányát. Az i.-ik kép normálisának iránya:
ߙ௜,௡௢௥௠ = ߙଵ (1.16)
ߜ௜,௡௢௥௠ = ߜଵ (1.17)
Amennyiben a feladatot Gauss-eliminációval akarjuk megoldani, az alábbi
normálegyenlet megoldása a cél az 1.15 esetében:
(‫ܣ‬்
‫ܽ)ܣ‬ = ‫ܣ‬்
݈		 (1.18)
Az 1.18 képletben a normálmátrix egy 6x6-os mátrix, így bármilyen nagyszámú
csillag-fényforrás pár, egy ekkora méretű mátrix eliminációját jelenti.
2.4.3. Álláspont koordinátáinak meghatározása
Utolsó lépésként a forgástengely helyzetének meghatározása a cél, ugyanis ennek
iránya adja a szintfelületi koordinátákat. Mivel a kamerát a teodolit segítségével a
vízszintes körön (a limbuszkörön) forgattuk végig, és mivel a helyi függőleges és a kamera
optikai tengelye nem esik egybe, ezért a képek normálisainak egy kúp alkotójára kell esnie.
A kúp csúcsáról az alapra húzott legrövidebb egyenes (a magassága) lesz a forgástengely,
mely nem más, mint az álláspontunk szintfelületi koordinátái.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
14. oldal
A legegyszerűbb esetben az egyes képek normálisának átlaga képezi a
forgástengelyünket. Ekkor a koordinátákat a következő képlettel kaphatjuk meg k darab
kép esetén:
ߔ =
෌ ఈ೔,೙೚ೝ೘
ೖ
೔సభ
௞
(1.19)
߉ =
෌ ఋ೔,೙೚ೝ೘
ೖ
೔సభ
௞
(1.20)
A forgástengelyt meghatározhatjuk úgy is, hogy az egyes kép normálisok eltéréseit
vesszük egy adott forgástengelytől [1]. Ettől a tengelytől való eltérések szórását nézzük, és
ezt próbáljuk minimalizálni.
A kép normálisok eltérése egy adott forgástengelytől az alábbi:
ߠ௜ = arccos	(
௑೔௑೑ା	௒೔௒೑ା௓೔௓೑
|௘೔|ห௘೑ห
) (1.21)
ahol ܺ௜, ܻ௜, ܼ௜ az i.-ik kép normálisába mutató vektor koordinátái, ܺ௙, ܻ௙, ܼ௙ A
forgástengely vektora, valamint ݁௜, az i-ik kép egységvektora, ݁௙ a forgástengely
egységvektora, végül ߠ௜ az i-ik kép eltérése.
Ez után a forgástengely irányát kell meghatároznunk oly módon, hogy
ߪ = ට෌ (ఏá೟೗ିఏ೔)
ೖ
೔సబ
௞ିଵ
→ ݉݅݊ (1.22)
ahol ߠá௧௟ az eltérések átlaga, ݇	a képek száma, ߪ a minimalizálandó szórás érték.
Az 1.22 megoldására a dolgozatban egy ún. sztochasztikus hegymászó algoritmus
szolgál.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
15. oldal
3. Felhasználói dokumentáció
Az elméleti háttér bemutatása után, ez a szakasz a program használatát tárgyalja. A
bemutatás íve, egy feldolgozási folyamat. Az így létrehozott projekt fájl megtalálható a CD
mellékleten (sample.apj).
3.1. Rendszerkövetelmények
A program ajánlott hardver és szoftver követelményei a következőek:
• 2 GHz-es processzor
• 2 GB RAM operatív tár
• 1 MB HDD + a feldolgozáshoz szükséges képek (akár több száz MB)
• Legalább 20’’ képernyő a digitalizáláshoz
• Windows 7 operációs rendszer
• .NET 4.0 keretrendszer
Minimális rendszerkövetelmények a következőek:
• Pentium 233 MHz processzor
• 64 MB RAM
• 1 MB HDD
• Windows XP operációs rendszer
• .NET 4.0 keretrendszer
3.2. A feldolgozási folyamat áttekintése
Fontos a program bemutatása előtt a feldolgozási folyamat áttekintésével kezdeni.
Ennek elméleti háttere tárgyalásra került már a második fejezetben. A folyamatábra a 4.
ábra mutatja. A folytonos vonal a kötelező paraméter megadást jelenti, míg a szaggatott
vonal esetén a kockában lévő művelet végrehajtása nem szükséges.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
16. oldal
4. ábra - Mérés feldolgozásának folyamatábra
3.3. Program indítása
A szoftvert nem kell telepíteni. A programot Andromeda.exe fájllal indíthatjuk el.
Ekkor a nyelve az operációs rendszer alapértelmezett nyelve lesz. Amennyiben az
Andromeda – Magyar parancsikonnal indítjuk a nyelve mindenképpen a magyar lesz. Ha
magyar nyelvű operációs rendszerünk van, előfordulhat, hogy angolul kívánjuk elindítani a
programot. Ekkor az Andromeda – English parancsikont indítsuk el. A szoftver indításakor
egy üres projekt fájl kerül megnyitásra, mely egyelőre még nincs elmentve.
3.4. A program felépítése
A program a Windows programokhoz hasonló felülettel rendelkezik (5. ábra). Részei a
következőek.
1. Menü, mely segítségével az adatok betöltését, a számításokat, és az ablakok
elhelyezését szabályozhatjuk.
2. Eszköztár, melyen az adatbetöltési (projekt, kép, stb.) funkciók gyorsan
elvégezhetőek.
3. A projekt ablakon keresztül érhetjük el a képeket. Az ablak kontextus menüjében is
megtalálhatóak a leggyakrabban használt parancsok.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
17. oldal
4. Kép ablak, mely a képek megjelenítését végzi, Ugyancsak ennek az ablaknak a
segítségével végezhetjük el a digitalizálást.
5. A Csillagkatalógus ablaka teszi lehetővé a csillagok adatainak megjelenítését,
esetleg azokat meg is változtathatjuk.
5. ábra - A program felhasználói felülete
3.5. Fájlok kezelése
Első lépésként tekintsük át, hogyan tudjuk a projektet elmenteni, betölteni, illetve a
feldolgozáshoz szükséges képeket, valamint a csillagkatalógust betölteni.
3.5.1. Új projekt létrehozása
Parancs Hatás
Kattintsunk a File → New Project…
menüpontjára, vagy gyorsbillentyűt
használva a Ctrl+N, vagy az eszköztárat
használva a ikonra kattintva.
Ha már volt megnyitott projektünk a
program megkérdezi, hogy mentsük-e a
megnyitott állományt. Ha nem volt, az új
projekt létrejött.
Válasszuk a számunkra megfelelő opciót. Az új projekt létrehozásra került.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
18. oldal
3.5.2. Projekt mentése
A mentési folyamat sok kép esetén sokáig tarthat. Ennek oka, hogy a projekt fájlba
elmentésre kerülnek a képek is. Ennek köszönhetően a képeket nem kell magunkkal
hordozni, elég csak a projekt fájlt. A projekt mentése az alábbiak szerint történik.
Parancs Hatás
Kattintsunk a File → Save Project…
menüpontjára, vagy gyorsbillentyűt
használva a Ctrl+S, vagy az eszköztárat
használva a ikonra kattintva.
Megjelenik a Save project… dialógus ablak.
Adjuk meg a projekt mentésének helyét, és
nevét. Ezután kattintsunk a Save gombra.
Megjelenik egy folyamatjelző. A mentés
végén automatikusan bezáródik. A fájl APJ
kiterjesztéssel elmentésre kerül a megadott
helyre, a megadott névre.
3.5.3. Projekt megnyitása
Egy projekt betöltésének folyamata az alábbi.
Parancs Hatás
Kattintsunk a File → Open Project…
menüpontjára, vagy gyorsbillentyűt
használva a Ctrl+O, vagy az eszköztárat
használva a ikonra kattintva.
Megjelenik a Open project… dialógus
ablak.
Válasszuk ki a projekt betöltésének helyét
és nevét. A fájlra duplán kattintva, vagy a
fájlt kiválasztva az Open gombra kattintva a
betöltés elvégezhető.
Megjelenik egy folyamatjelző. A
megnyitási folyamat végén a folyamatjelző
automatikusan bezáródik. A fájl betöltődik a
programba, és ha már voltak betöltött
képek, azok a Projekt ablakba megjelennek.
3.5.4. Projekt mentése másként
Egy már elmentett projektet lehetőségünk van újra elmenteni, csak más néven. Ennek
menete a következő.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
19. oldal
Parancs Hatás
Kattintsunk a File → Save project as…
menüpontjára
Megjelenik a Save project… dialógus ablak.
Adjuk meg a projekt új helyét, és nevét. Megjelenik egy folyamatjelző. A mentési
folyamat végén a folyamatjelző
automatikusan bezáródik. A fájl más néven
a megadott helyre újra elmentése kerül.
3.5.5. Képek betöltése
Be kell töltenünk azokat a képeket a programba, amelyeket fel kívánjuk dolgozni. Ezt
az alábbi módon tehetjük meg.
Parancs Hatás
Kattintsunk a File → Load Image(s)…
menüpontjára, vagy a Project ablakon az
Images csomópontra jobb klikkel, majd a
Load Image(s) menüpontra, vagy az
eszköztár ikonjára.
Megjelenik a Load image(s)… dialógus
ablak.
Adjuk meg a betöltendő képet. A shift gomb
nyomva tartásával akár több képet is
kiválaszthatunk. Ezután kattintsunk az Open
gombra.
Megjelenik egy folyamatjelző. Itt
megtekinthetjük, ahogy a képek
betöltődnek. A folyamat végén az ablak
nem záródik be. Ekkor leellenőrizhetjük,
hogy minden kép sikeresen betöltődött-e.
Ezen kívül a betöltött kép(ek) megjelenek a
Projekt ablak Images csomópontja alatt.
3.5.6. Betöltött kép eltávolítása
Amennyiben a betöltés után még sincs szükségünk a képre, azt eltávolíthatjuk a
projektünkből a következő módon.
Parancs Hatás
Kattintsunk a Projekt ablakon az
eltávolítandó képre jobb gombbal.
Megjelenik a csomóponthoz tartozó
kontextus menü.
Válasszuk a Deattach Image menüpontot. A kiválasztott kép eltávolításra került a
projektből.
3.5.7. Csillagkatalógus betöltése
A program az XEphem programból kiexportált fájlt képes beolvasni. Erről az XEphem
program leírásában találhatunk további információt. A fájl felolvasásához a programban a
Name, RA, Dec, VMag, Type mezőket kell kiírnunk. A fájl felépítésének a 6. ábra szerint
kell kinéznie.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
20. oldal
6. ábra - XEphemből exportált fájl struktúrája
Figyelem, ügyeljünk oda, hogy a tizedes érték jelölése az operációs rendszerben
megadott beállításoknak megfelelő legyen!
A megadott struktúrájú fájlokat már betölthetjük a programba a következőekben
megadott módon.
Parancs Hatás
Kattintsunk a File → Load Catalogue…
menüpontjára, vagy a Project ablakon az
Catalogue csomópontra jobb klikkel, majd a
Load catalogue menüpontra, vagy az
eszköztár ikonjára.
Megjelenik a Load catalogue… dialógus
ablak.
Válasszuk ki a megfelelő TXT kiterjesztésű
fájlt.
A katalógus betöltődik a programban.
3.6. Digitalizálás végrehajtása
A digitalizálás végrehajtásához először meg kell jelenítenünk a betöltött képeket.
Ehhez kattintsunk kettőt a Projekt ablakon a megfelelő képre, vagy a megfelelő kép
csomópontjára jobb klikkel kattintva a kontextus menüből válasszuk ki Open in Window
menüpontot. Ekkor a kép megjelenik a Kép ablakban. A kép ablakban jobb egérkattintással
elérhetjük a szerkesztési funkciókat.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
21. oldal
7. ábra - Kép ablak és kontextus menüje
Az ablak fejlécében olvasható a fájl neve, illetve a kép méretaránya zárójelben. Az
állapotsoron az egér helyzetének képkoordinátái, illetve az aktív szerkesztő funkció
látható. A továbbiakban tekintsük át az egyes szerkesztő funkciókat.
3.6.1. Szerkesztő funkciók
A kontextus menü segítségével az alábbi szerkesztő funkciók érhetőek el.
Funkció
Gyors
billentyű
Mit csinálhatunk?
Pen Ctrl+C Egy csillagot jelölhetünk ki vele. A csillag kijelölésekor
annak adatai az ablak bal felső sarkában megjelenik. A
kijelölés eltávolításához kattintsunk a kép bármely,
csillagot nem tartalmazó részére.
Labels Ctrl+L Be-, illetve kikapcsolhatjuk a csillagok neveinek
feliratozását.
Refresh Ctrl+F A képterületet frissíthetjük.
Zoom→Zoom In A képbe nagyíthatunk (a funkció egérgörgővel is
elérhető), ehhez kattintsunk a kép azon pontjára, amit
középre kívánunk helyezni.
Zoom→Zoom Out A képen kicsinyíthetünk (a funkció egérgörgővel is
elérhető), ehhez kattintsunk a kép azon pontjára, amit
középre kívánunk helyezni.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
22. oldal
Funkció Gyors
billentyű
Mit csinálhatunk?
Zoom→	Zoom
Extents
Terjedelemre nagyíthatunk
Offset Ctrl+Space A képet eltolhatjuk, ehhez kattintsunk a kép azon
pontjára, amit középre kívánunk helyezni
Digitized Ctrl+D Csillag digitalizálása. Ehhez a csillagkatalógusban egy
csillagot ki kell választani.
Matching A fényforrások és a digitalizált csillagok
összeillesztése.
Show star in
catalogue
A kijelölt csillagot kiválasztja a csillagkatalógusban.
Ehhez a csillagkatalógusnak nyitva kell lennie.
3.6.2. Digitalizálás manuálisan
A következőekben ismertetésre kerül egy kép digitalizálásának folyamata. Ehhez a
korábbiak alapján be kell tölteni legalább egy képet és a csillagkatalógust. Továbbá legyen
nyitva a digitalizálásra kerülő kép egy a képablakban.
Parancs Hatás
Válasszuk a Calculation → Intensity
Maximums menüpontot
Megjelenik a Searching intensity maximums
parametrizing ablak.
Itt adjuk meg a lehetséges csillagok
körülbelüli értékét pixelben (Star size,
alapértelmezett érték: 20), valamint hogy
mekkora intenzitás érték felett tekintsük a
képpontot a csillag részének (Intensity edge,
alapértelmezett érték: 100). Az utóbbi
beállítás eldöntése érdekében a Calculate
gombra kattintva egy statisztikát
készíthetünk a képről, mely hisztogramot is
tartalmaz. Kattintsunk rá.
Megjelenik az folyamatjelző, mely mutatja
a feldolgozottság mértékét, majd eltűnik. A
statisztikai értékek és a hisztogram
megtekinthetőek a szövegdobozban.
Ez alapján adjuk meg az Intensity edge
értékét. Majd kattintsunk az OK gombra.
Megjelenik az folyamatjelző, melyen
végigkövethető a folyamat. Figyelem, ez
eltarthat egy darabig. A feladat végén a
folyamatjelző eltűnik, és a Kép ablakon
megjelenítésre kerülnek kék körrel a
maximumhelyek (fényforrások).
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
23. oldal
Parancs Hatás
Nyissuk meg a csillagkatalógust, oly
módon, hogy a Projekt ablak a katalógus
csomópontjára jobb egérkattintással
megjelenő legördülő menüből válasszuk ki a
Show Catalogue menüpontot, vagy
kattintsunk duplán a csomópontra.
Megjelenik a Csillagkatalógus ablaka.
Válasszuk ki a digitalizálandó csillagot a
Csillagkatalógus ablakában.
Kijelölésre került a megfelelő csillag.
Ezután térjünk vissza a Kép ablakra, és ott
jobb egérkattintásra megjelenő kontextus
ablakban (7. ábra) válasszuk a Digitize
menüpontot, vagy használjuk a Ctrl+D
gyorsbillentyűt.
Digitalizálás funkcióba kerültünk.
A szerkesztési funkciókkal (lásd korábban)
keressünk rá a csillag helyére a képen, és ott
nyomjunk bal egérgombot. Tipp: Ha elő-
ször csak körül belülre kattintunk a
csillagra, akkor a Matching
szerkesztőfunkcióval a program a csillagot
összeilleszti a fényforrással.
Egy piros kereszt jelzi a digitalizált
csillagot.
Az előző 3 pontot ismételve, digitalizáljuk
be az ismert összes csillagot. Ha elrontunk
egy bevitel, akkor a csillagot kiválasztva
kontextus menüből a Delete Star menüpont,
vagy a Del billentyű segítségével
törölhetjük a csillagot.
Bedigitalizáltuk az összes ismert csillagot.
A többi kép gyors digitalizálásához a
következőeket célszerű tenni. Nyissuk meg
a többi képet, de legfeljebb 6-ot (a
láthatóság érdekében) a korábbiak alapján.
Megnyílik 6 képablak.
A már bedigitalizált képen válasszunk ki
egy már digitalizált csillagot (váltsunk át
előtte Pen funkcióra)
Kiválasztásra kerül a csillag a már
digitalizált kép Kép ablakában.
Ezután válasszuk a kontextus menüből a
Show star in catalogue menüpontot.
Figyelem, a Csillagkatalógus ablaknak
nyitva kell lennie.
Kiválasztásra kerül a megjelölt csillag a
Csillagkatalógus ablakában.
A kiválasztott csillagot jelöljük ki a többi
ablakban.
A csillag a többi képen is digitalizálásra
került.
Hajtsuk végre az előző 3 pontot, amíg az
összes képet be nem digitalizáltuk.
Figyelem, a Kép ablak automatikusan
aktívvá válik, amint az egérrel fölé
megyünk.
A csillagok az egyes képeken be lettek
digitalizálva.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
24. oldal
8. ábra – Digitalizálási állapot képernyőképe
3.6.3. Digitalizálás vetített csillagokkal
A program képes a csillagkatalógus adatai alapján ún. előzetes kép elkészítésére, amely
olyan, mintha egy fiktív fényképet készítenénk az égboltról. Ezt a képet utána még forgatni
kell, illetve eltolni. Ahhoz, hogy ezt hogyan tehetjük meg, tekintsük a következő
folyamatot.
Parancs Hatás
A korábbiak alapján töltsünk be legalább
egy képet, és a csillagkatalógust. Ez után
nyissuk meg a kép Kép ablakát.
Megjelenik a Kép ablak.
A feldolgozáshoz ismerni kell bizonyos
a’priori értékeket (lásd 2.4.1.). Ehhez
válaszuk a Setting → Project properties…
menüpontot.
Megjelenik a Project properties ablak.
Itt töltsük ki a Station a’priori fi, Station
a’priori lambda, és A’priori camera const
mezőket. Ezeket a mérésekből ismerjük
(lásd. lásd 2.4.1.).). Az értékeket fokba
adjuk meg! Kattintsunk az OK gombra.
A mezők feltöltődnek a projektbe.
A csillagok megjelenítéséhez válasszuk a
Calculation → Put stars on image
menüpotját.
A csillagok megjelennek a Kép ablakban.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
25. oldal
Parancs Hatás
A korábbiak szerint keressük meg a
fényforrások helyét a Calculation →
Intensity Maximums menüpont
segítségével
Megjelennek a képen a fényforrások
helyei.
A csillagokat együttesen tudjuk
manipulálni. Ehhez válasszuk a
Calculation → Intensity Manipulate
Stars… menüpontot.
Megjelenik a Manipulate stars on image
dialógusablak.
Itt adjuk meg az elforgatási (Rotate angle),
és eltolási (Offset X, Offset Y) értékeket.
Kattintsunk az OK gombra.
A Kép ablakon a csillagok a megfelelően
megadott paraméterek alapján
elmozgatásra kerültek.
Az előző két lépést addig ismételjük, amíg
közelítőleg a csillagok a helyére nem
kerülnek.
A csillagok közelítőleg illeszkednek a
képre.
Azonosítsuk a fényforrásokat, és a
csillagokat a kontextus menü Matching
parancsával.
A csillagok a legközelebbi fényforrás
helyére ugranak.
Ellenőrizzük a megoldást.
3.7. Képek tájékozása
Miután azonosítottuk az egyes képeken a fényforrásokat a csillagokkal, következhet az
egyes képek tájékozása. Ennek elméleti hátterét az 2.4.2. rész tárgyalja. A kép
tájékozásához be kell állítanunk először az egyes képek elkészültének idejét. Utána
futathatjuk végig rajtuk a korábban ismertetett interpolációs módszert, mely tájékozza az
egyes képeket.
Ezek lépéseit nézzük meg most. A továbbiakban feltételezzük, hogy a csillagok
digitalizálása megtörtént. Figyelem, minden képen legalább 6 csillagot digitalizálni kell.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
26. oldal
Parancs Hatás
Kattintsunk arra a képre az egér jobb
gombjával, amelyiknek a készítésének az
idejét be akarjuk állítani.
Megjelenik a képhez tartozó kontextus
menü.
Válasszuk ki Properties… menüpontot. Ez
elérhető a Kép ablak kontextus menüjéből
is.
Megjelenik az Image Properties
dialógusablak.
A Time (GAST) mezőbe írhatjuk be az
időpontot óra formátumba, majd kattintsunk
az OK gombra.
A megadott időpont beállításra került.
Végezzük el a többi kép esetén is az
időbeállításokat.
Minden képnek adott a készítésének
időpontja GAST rendszerben.
Válasszuk ki a Calculation → Interpolation
menüpontját.
Megjelenik az Output ablak. Itt
megtekinthetőek az eredmények. Az Image
properties ablakba megtekinthetővé váltak
az egyes képek normálisának értékei.
Lehetőségünk van egyes képeket kivenni a
számításból. Ehhez a Projekt ablakon a
kiválasztott kép csomópontjára kattintsunk
jobb gombbal. A kontextus menüből
válasszuk ActivateDeactivate Image
parancsot.
A kép pirosra váltott. Ez jelzi, hogy a
feldolgozásba a kép már nem vesz részt.
Újból kiadva az ActivateDeactivate Image
parancsot a kép újra számításba kerül.
3.8. Álláspont koordinátáinak meghatározása
Álláspontunkat két fajta módszerrel tudjuk meghatározni. Mindkettő módszer a
Calculation menüpont segítségével érhető el. A továbbiakban nézzük meg ezt a két
módszert.
3.8.1. Álláspont meghatározása középképzéssel
A módszer elméleti hátterét az 2.4.3. alfejezet részletezi. A továbbiak feltételezik, hogy
a korábbi lépések már meghatározásra kerültek.
Parancs Hatás
Válasszuk ki a Calculation → Mean values
menüpontját.
Megjelenik az output ablak, mely a
számított eredményeket tartalmazza.
Tekintsük át, mit tartalmaz a kimenet. Megkapjuk először is az álláspontunk
szintfelületi földrajzi koordinátái fokban (1). Ezen kívül meghatározása kerültek az egyes
normálisok középértéktől való eltérések. A deklináció a (2), míg rektaszcenzió (3) eltérései
a keretekben láthatóak (9. ábra).
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
27. oldal
9. ábra - A közepeléses módszer kimenete
3.8.2. Álláspont meghatározása forgástengely keresésével
Ezzel a módszerrel a közepeléses módszerünk eredményét pontosíthatjuk. A
programban alkalmazott módszer, mellyel a forgástengely meghatározását a szoftver végzi
az 2.4.3. rész képletei alapján, egy sztochasztikus hegymászó algoritmus. Az algoritmus
kezdőértéknek a közepeléses módszer eredményét veszi. Ez egy nem determinisztikus
módszer. Ezért szükséges lehet többszöri futtatásra, hogy biztosak legyünk abban, hogy a
megoldásunk optimális.
Válasszuk ki a Calculation → Rotate axis… menüpontot. Megjelenik a Parametrizing
rotate axis menüpont (10. ábra).
10. ábra - A forgástengely keresése módszer paraméterező ablaka
Itt megadhatjuk az iterációk számának maximumát (1), továbbá a leállási feltételt (2),
mely a két egymást követő szórásérték különbségének felső határa. A részeredmények
kiíratását bizonyos iteráció számonként az Iteration number to write state megadásával
állíthatjuk be (3). Végül az egyes állapotok közötti lépésköz maximális értékét a Step value
mező segítségével szabályozhatjuk (4).
Az OK gombra kattintva az algoritmus elindul, és az eredmények az Output ablakban
kerülnek megjelenítésre.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
28. oldal
4. Fejlesztői dokumentáció
A fejezet a program készítésének folyamatát ismerteti, további fejlesztések
végrehajtásához kíván segítséget nyújtani. Az első szakaszban a program specifikációját,
az alkalmazott szoftverfejlesztési metodikát, az alkalmazott eszközöket, illetve ezek
használatának indoklását kívánjuk tárgyalni. Az ezt követő részben a program egységes
szerkezetét elemezzük. Utána az egyes programkomponensek ismertetésére kerül sor,
kitérve a főbb megoldásokra, algoritmusokra. A program készítése során felmerülő
kérdések elméleti hátterének megvilágítása, és megoldásuk a második fejezetben
olvasható, itt csupán azok megvalósítására kívánok koncentrálni. A fejezet végén a
tesztesetek, és további fejlesztési lehetőségeket tárgyalom.
4.1. Követelmény specifikáció
A programmal szemben támasztott követelményeket az alábbiakban foglalom össze.
• A szoftvernek kicsinek és kompaktnak kell lennie, hogy könnyen hordozható legye,
lehetőleg egy futtatható állomány létrehozása a cél. A feladat nem igényli egy
komplex program létrehozását.
• A programot két rétegre kell osztani. Egyrészről a logikai rétegnek kell
megvalósítania a matematikai, tárolási, feldolgozási megoldásokat. Továbbá az így
már implementálásra került részeknek grafikus felületet kell biztosítani, hogy a
felhasználó paraméterezni tudja azokat (felületi réteg).
• A programnak mindenképpen rendelkeznie kell grafikus felhasználói felülettel
(GUI), melynek segítségével az adatok betölthetőek, a képek mérése elvégezhető,
valamint az eredmények értékelhetőek, mind grafikusan, mind numerikusan.
• A több betöltött kép együttes szemléltetése végett MDI megoldást kell választani.
• A programot lehetőleg a legtöbb platformon tudni kell futtatni, nem függhet a
szoftver vagy hardver kialakításától.
• A programnyelv megválasztásánál fontos, hogy annak segítségével a program
fejlesztése hatékonyan és gyorsan történjen, tehát hogy megfelelő absztrakciós
szinten dolgozhassunk, lényegesebb futásidejű teljesítménycsökkenés nélkül.
• A programnyelv választása során figyelembe kell venni, hogy az rendelkezzen
kényelemes integrált fejlesztői környezettel (IDE).
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
29. oldal
• Objektum-orientált módszertant kell alkalmazni.
• Érdemes a programba nyelvi támogatást építeni.
4.2. Alkalmazott technológiák
A követelmény specifikáció alapján a döntés a .NET 4.0 keretrendszerben történő
megvalósítást indokolja. Ezen technológia segítségével a programfejlesztés gyors és
hatékony, számos függvénykészlet, fejlett grafikus eszköztár áll rendelkezésre. Ezen kívül
a keretrendszer elrejti előlünk a speciális hardver, szoftver megoldások speciális
tulajdonságait. A futtató környezetnek köszönhetően az elkészített program biztonságosabb
is, mintha natív kódot használnánk. A technológia teljes körűen a Microsoft operációs
rendszereken elérhető, bár létezik megoldásuk más platformokra is (Mono), de ezek nem
mindig támogatják a legfrissebb verziókat. E hátrány ellen szól, hogy a Microsoft
operációs rendszerei rendkívül elterjedtek (2011 piaci részesedés 92,2% [3]).
A fejlesztés nyelvének a C# nyelvet választottam, amelynek absztrakciós szintje
megfelelő a feladat végrehajtásához. A számos nyelvi elemkészlet segít a fejlesztés során.
Ilyenek az objektum-orientált fejlesztési lehetőségek, delegáltak, a dokumentációs
képességek, a párhuzamosság nyelvi támogatása, és egyéb számos tulajdonság.
Továbbá a technológiához és a programnyelvhez tartozik egy igen népszerű, és
rendkívül hatékony fejlesztői környezet, ez pedig a Microsoft Visual Studio. A
szakdolgozat készítése során a 2010-es verziót használtam, méghozzá az Ultimate diák
verzióját.
A követelményspecifikációban leírtak alapján MDI alkalmazás létrehozása szükséges.
A korábban eldöntött eszközök a Windows Forms alkalmazását teszi szükségessé. A
Windows Presentation Foundation (WPF) technológia nem nyújt támogatást direkten MDI
alkalmazások létrehozásához jelen verziójában.
Végül összefoglalásképpen tekintsük át az alkalmazni kívánt eszközöket:
• Technológia: .NET 4.0
• Programnyelv: C#
• Fejlesztő környezet: Visual Studio 2010 Ultimate
• Grafikus felhasználói felület létrehozása Windows Forms segítségével
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
30. oldal
• Elsődleges cél operációs rendszer: Windows 7
4.3. Alkalmazott szoftverfejlesztési módszertan
A fejlesztés során a gyors alkalmazásfejlesztés módszertanát használtuk (Rapid
Application Design, RAD). A módszert még a 80-as években dolgozták ki [4]. Ennek
során először egy gyors, előzetes rendszerterv készült. Ezután különböző prototípusokat
kerültek megvalósításra. Az egyes programverziókat konzultációk során pontosítottuk, a
felmerült igényekhez igazítottuk. Az egyes prototípusok során jelentkező problémákat
megvitattuk, majd megoldottuk. Így haladt a fejlesztés a végleges verzió felé. Azt elérve
megtörtént a program tesztelése, a jelen részletes dokumentáció elkészítése (11. ábra),
valamint a végleges megoldás előállítása.
A program által megoldott probléma igen fiatal, szakirodalma gyér. Ezért is volt
indokolt ennek a fejlesztési módszertannak a használata, ugyanis előre nem látható
problémák merültek fel. Továbbá e módszertant nagymértékben támogatják az alkalmazott
technológiák.
11. ábra - A gyors alkalmazásfejlesztés (RAD) logikája
4.4. Előzetes tervezés
Az előzetes tervezés során összeírásra kerültek azok a részfolyamatok, amelyeket a
felhasználónak a feladat végrehajtásához meg kell tennie, illetve milyen alternatív
lehetőségei vannak egy-egy részfeladat megoldásához. Ezt egy használati eset diagramban
került összegzésre.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
31. oldal
12. ábra - A program használati eset diagramja
Először a felhasználó a képeket, majd az időponthoz tartozó XEphem fájlt tölti be a
programba. Majd következhet a csillagok beazonosítása, mely kézi kijelöléssel
(digitalizálással) történik. Ezután lehet a képeket tájékozni. Ezt az interpolációs módszerrel
oldja meg a program. Egy kimeneten az eredményeket meg kell jeleníteni. Ha túl nagyok
már itt az eltérések, a felhasználó visszatérhet az előző részfeladathoz, és ellenőrizheti a
pontazonosítást. Ezt követően történhet meg az álláspont koordinátáinak a meghatározása.
Ennek során lehetőségünk van a közepeléses, vagy a forgástengely módszer alkalmazására.
Amennyiben a felhasználó nem elégedett a közepeléssel kapott eredménnyel, azt
pontosíthatja a másik módszerrel.
4.5. A program osztály szerkezetének áttekintése
A program két rétegre oszlik. Ezek a következőek:
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
32. oldal
• Logikai réteg: feladata kettős, egyrészről projekt összefogása, a projektben
található osztályok megvalósítása, ezen kívül a rajtuk elvégzendő műveletek
megvalósítása.
• Felületi réteg: feladata a logikai réteg osztályaiból létrehozott objektumok kezelése,
megjelenítés, a rajtuk végrehajtható műveletek paraméterezése.
A program osztályszerkezetének UML osztálydiagramját a 14. ábra, a
csomagkapcsolati diagramját a 13. ábra mutatja. Ebből kitűnik, hogy a logikai szint két
további névtérre oszlik. Egyrészről a Galaxy csomag valósítja meg az adattárolási
kérdéseket, ezen kívül néhány adatkeresési, elemzési algoritmust is implementál. Az
AndromedaMath névtér valósítja meg a matematikai objektumok osztályait. Ez az osztály
további két névteret tartalmazz. Egyrészről a Matrix névtérben került implementálásra a
mátrix osztályok, melyek tartalmazzák a feldolgozáshoz szükséges fontosabb mátrix
műveleteket. Az ArtificalIntelligencie osztály a mesterséges intelligenciára épülő osztályok
megvalósításait tartalmazza. A logikai réteg további statikus osztályokat tartalmaz a
gyakori feladatok végrehajtásához.
A logikai szinthez a felületi réteg a Project egy a MainForm osztályban példányosított
objektumával csatlakozik. Ezen Project objektumok segítségével éri el az adattárolási,
keresési és elemzési eljárásokat. A fő grafikus felület három típusú ablakot kezel
gyerekként. Ezek az ImageForm, mely a képek megjelenítéséért, a csillagok
digitalizálásért felel, a ProjectForm, melyeken a projektünket manipulálhatjuk, valamint a
StarForm-ot, mellyel a csillagkatalógust kezelhetjük. Főleg ezek segítségével hívhatunk
elő további ablakokat, melyek esetén egyes algoritmusokat paraméterezhetünk.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
33. oldal
13. ábra - Andromeda csomagkapcsolati diagramja
Az osztálydiagram nem tartalmazza a fő Program osztályt, illetve a betöltést és
mentést segítő dialógusablakokat mivel ezek számunkra nem lényegesek.
A továbbiakban az egyes osztályokat, és feladataikat részletezem az egyes rétegek
szerint csoportosítva.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
34. oldal
14. ábra - A program osztályszerkezete
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
35. oldal
4.6. A Logic névtér
Mint már említettem a logikai réteg feladata a program adattárolási logikájának
megvalósítási, illetve az esetenként rajtuk végrehajtandó keresési, manipulációs feladatok
végrehajtása. Az alábbi ábrán tekinthető meg azon osztályok, melyek nem egy belső
névtérhez tartoznak (15. ábra). Az UML diagramon nem lett feltüntetve az interfészből
örökölt függvények.
15. ábra - A Logic névtérben közvetlenül elérhető osztályok
A névtéren belül található a Project osztály, mely az adattárolást fogja össze. A
MainForm osztály – mely a főablakért felel – ezen osztályból példányosít egyet. Ezt a
példányt tudjuk manipulálni. A Project osztály továbbá példányosít egy Catalogue, és egy
StarImage listát, melyek a Galaxy névtér fő osztályai. Ezen kívül ennek az osztálynak a
feladata a háttértárra mentés is. Ez szerializációval lett megoldva. A Version mező
segítségével azonosíthatjuk, hogy melyik Project verziójú programot is használjuk. Ennek
előnye a későbbi fejlesztések esetén jelentkezhet. A mentés során a StarImage osztály
Image objektuma is kiírásra kerül. Ennek következtében, mivel egy kép viszonylag
nagyméretű (30 MB), az elmentett project fájl is nagyméretű lesz. Előnye, hogy nem kell
magunkkal hordozni a képek fájljait külön. Ez az osztály továbbá biztosítja az elmentett
fájlok visszatöltését is.
A névtérben található IWorker interfész egységes felületet biztosít azon osztályok
eljárásainak, melyek időigényes munkát végeznek. Ezen interfész megvalósítása esetén,
egy feladat hozzákapcsolható a később ismertetésre kerülő, és a felületi rétegben található
ProgressBarFormmal. A ProgressBarState tulajdonsággal a feldolgozottság mértékét
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
36. oldal
állíthatjuk, míg a StateMessage tulajdonsággal információkat közölhetünk a feladat
állapotáról.
Végül egy statikus osztály is implementálásra került Utilities néven. Ide azok az
általános eljárások kerültek, melyekkel gyakran kell dolgoznunk a program egyes
részeiben, de logikailag semmilyen más névtérbe nem sorolhatóak. Egyelőre egyetlen
eljárást valósít meg, mely a [fok:perc:másodperc] formátumot fokká konvertálja. A
későbbi esetleges fejlesztések esetén az osztály bővülhet.
A következőekben nézzük a logikai rétegben található további névtereket.
4.6.1. A Galaxy névtér
A Galaxy névtér UML diagramja az 16. ábra mutatja. Az ábrán feltüntettem a Project
osztályt is mivel ehhez a névtérhez kötődik. Az UML diagramon nem lettek feltüntetve az
interfészből örökölt függvények
16. ábra - A Galaxy névtér
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
37. oldal
A továbbiakban tekintsük át az egyes osztályok feladatait és fontosabb eljárásait.
A névtér szerkezete a következő: a StarImage osztály tartalmazza a betöltött fényképet,
és egy PreliminaryImage objektumot. Ezen objektum tartalmazza a bedigitalizált
csillagokat a képen. A StarImage osztály továbbá példányosítja a LightSource osztályt,
mely a fényforrások helyét tartalmazza. Ezen információkból előálló objektumot nevezzük
ezután csillagképnek. A fontosabb eljárások az alábbi táblázatban láthatóak.
Függvény név Rövid leírás
SearchIntensityMaximums A képen intenzitás maximumot keres
CalculateStatistics Statisztikai adatokat számítja ki
DeleteStarsInAImageDistance
Csillagok törlése, melyek egy bizonyos
környezetben nincsenek a képen
A képen az intenzitásmaximumok meghatározása két lépésben zajlik. Először
Végigmegyünk a kép pixelein, és kigyűjtjük egy listába azokat, amelyek intenzitásértékei
nagyobbak egy megadott értéknél, majd a listába összevonjuk az egy csillagnyi pixel
távolságra lévő elemeket úgy, hogy képkoordinátáikat a zöld sávbeli intenzitás értékeikkel
súlyozzuk.
A CalculateStatistics ugyancsak végigfut az összes pixelen, és átlagot számít:
hisztogramot készít a pixelek értékeiből. Ezek időigényes feladatok, ezért a StarImage
osztály implementálja az IWorker interfészt.
A LightSource osztály feladat a képen kijelölt fényforrások definiálása.
A StarCatalogue osztály tárolja a csillagokat egy listában. Az osztály ehhez egy
BidingList<> absztrakt osztályt valósít meg. Ennek segítségével később a megfelelő GUI
vezérlőhöz könnyen csatlakoztatható. Ezen kívül ugyanennek az absztrakt osztálynak
megvalósítja a rendezési funkcióját is, így később majd rendezhető is lesz az adathalmaz a
megfelelő oszlopnevek segítségével. Fontosabb eljárásai az alábbi táblázatban láthatóak.
Függvény név Rövid leírás
LoadStarsFromFile
Egy fájlból betölti a katalógust. A fájl az
XEphem kimenete Name, RA, Dec, VMag
formátumban
SearchStar Név alapján megkeres egy objektumot
A Star osztály valósítja meg egy egyedi csillag adatainak a tárolását. Itt kerül tárolásra
a csillag rektaszcenziója, deklinációja, a fényességének értéke.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
38. oldal
Egy csillag több képen is digitalizálásra kerülhet, de egy csillag csak egyszer fordulhat
elő a katalógusba, ezért a digitalizált csillag és a katalógusban található csillag között
kapcsolatot kell létesíteni. Az ImageStar osztály ezt a feladatot végzi el. Az Image
mezőjében lévő képen megadja a Star mezőjében található csillag képkoordinátáit.
PreliminaryImage az előzetes képek osztálya. Egy előzetes képhez (StarImage
objektum) egy csillagkép tartozik. Ez fogja össze a csillagok fényképre leképződő helyét a
fényképen, vagyis az ImageStar objektumokat. Ennek az osztálynak továbbá az is a
feladata, hogy a bennük lévő olyan objektumokat, melyek koordinátával rendelkeznek, egy
megadott képi koordinátarendszerbe helyezze el (lásd 2.4.1.). Ez főleg igaz a Calculation
eljárásra, mely a csillagkatalógus adatokból számítja a csillagok előzetes helyét. Tehát ez
az eljárás az egyes csillagoknak megfelelő képkoordinátákat egy képi
koordinátarendszerbe adja meg. Így lehetőségünk lesz ezt az objektumot is úgy kezelni,
mintha egy kép lenne, így nem a felületi rétegnek kell a transzformációkkal foglalkoznia.
Az osztály fontosabb eljárásai az alábbi táblázatban láthatóak.
Függvény név Rövid leírás
SearchStarOnImage
Az előzetes képen egy csillagot keres
meg egy adott ponttól bizonyos
távolságra
SearchStarByName Csillag keresése név alapján
Calculation
Előzetes kép számítása a
csillagkatalógus adatai alapján (lásd
második fejezet)
A Galaxy névtér ezen kívül tartalmaz még egy Calculation nevű statikus osztályt is,
mely a hagyományos megoldásokat alkalmazza a feldolgozás során. A két eljárásai és
leírásuk az alábbi táblázatban láthatóak.
Függvény név Rövid leírás
InterpolationMethod
Képek normálisának meghatározása
interpolációs módszerrel (lásd második
fejezet)
SolveStationCoordinateWithMeanMethod
Koordináták meghatározása
középképzéssel (lásd második fejezet)
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
39. oldal
4.6.2. Az AndromedaMath névtér
A névtér feladata a különböző számításokhoz a matematikai háttér biztosítása. A
névtér osztálydiagramját az 17. ábra mutatja. Az UML diagramon nem lett feltüntetve az
ősosztályokból, illetve interfészekből örökölt függvények.
A névtéren belül található másik Matrix névtér a mátrix osztályokat tartalmazza.
Biztosítja a program bővíthetőségét azáltal, hogy osztályhierarchiába van szervezve.
A legfelső osztály a Matrix absztrakt osztálya. Az tervezés alapelve az volt, hogy ez az
absztrakt osztály olyan műveleteket definiál – virtual kulcsszóval – melyek minden mátrix
esetén elvégezhetőek. Amit viszont egyáltalán nem valósít meg, az az adattárolási
kérdések. Ezt rábízza a belőle származó osztályokra.
17. ábra - AndromedaMath névtér osztálydiagramja
Ilyen osztály a DMatrix osztály. Itt az adattárolás úgy lett megvalósítva, hogy az egyes
elemek egy tömbbe kerülnek elhelyezésre. Az indexelés 1-től kezdődően lett megalkotva.
Az egyes sor és oszlop sorrendek egy-egy vektorba lettek eltárolva ( 18. ábra).
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
40. oldal
Így a transzponálás, sor-, és oszlopcserék csupán két érték cseréjét jelenti, és nem kell az
adatokat mozgatni.
18. ábra - DMatrix osztály sor- és oszlop hivatkozásai
Az SDMatrix osztály a DMatrix osztályból származik. A legtöbb tulajdonságát örökli.
Specializálja a mátrixot négyzetes mátrixszá. Így amikor egy DMatrix objektumból az
SDMatrix konstruktorán keresztül létre akarjuk hozni, akkor ellenőrzi, hogy a DMatrix
objektum négyzetes-e, és ha nem kivételt kapunk.
A következő névtér az ArtificalIntelligencie névtér, mely heurisztikákat tartalmazó
algoritmusokat gyűjt össze.
Legelőször tekintsük át a GradientMethod osztályt. Ennek a feladata az első fejezetben
leírt forgástengely meghatározása. Ahogy azt korábban láttuk, ez egy optimalizálási
feladat. Erre az osztály egy sztochasztikus hegymászó algoritmust használ. A módszer
nagyban hasonlít más metaheurisztikákra. A tabukeresés, és a szimulált hűtés, tekinthető e
módszer speciális változatának. A módszer használatának oka, hogy a kiértékelendő
függvény rendkívül bonyolult, más numerikus módszerekkel az optimum megtalálása
nehéz.
Az általam megvalósított algoritmus pszeudokódja az alábbiakban látható [8].
aktuális_állapot = egy a megoldáshoz közeli kezdőállapot
ciklus_számláló = 1
while(aktuális_állapot < min_eltérés vagy
ciklus_számláló<max_iterációszám)
szomszédok = aktuális_állapot-tól egy bizonyos környezetbe véltelenül
[min_szomszed, min_érték] = min(fitness_függvény(szomszédok))
if min_érték <fitness_függvény(aktuális_állapot) thencontinue
aktualis_állapot = min_szomszéd
end while
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
41. oldal
Először középérték segítségével meghatározza a program a kezdőállapotot. Majd
állapotról-állapotra halad. Egy iterációs ciklusban az adott állapot környezetében véletlenül
választ pontokat egy adott környezetben. Ezután meghatározza ezen szomszédok fitnesz
értékét, ami nem lesz más, mint a korábban tárgyalt szórás értéke, ugyanis ezt kell
minimalizálnunk. Amennyiben a legkisebb fitnesz értékű szomszéd kisebb szórással
rendelkezik, mint az aktuális állapot, akkor elfogadjuk azt jobb állapotnak, és ez lesz az új
aktuális állapot. Amennyiben a feltétel nem teljesül, elvetjük, mint lehetséges megoldást.
Az algoritmus egy aktuális állapotban az elérhető legkisebb irány felé lép el, ezért
mohó algoritmus. A módszer hátránya, hogy az optimum megtalálása nem garantált. A
módszer továbbfejleszthető úgy, hogy az előző állapotra ne lépjen vissza (tabukeresés),
vagy az a környezet csökkenthető a futás során, melyből az algoritmus a véletlenül
választott pontokat veszi (szimulált hűtés). Ezek segítségével elkerülhető az optimumba
ragadás. Mivel mi közel vagyunk a lokális minimumhoz, nincs szükség ilyen fajta
specializált megoldásokra.
Az osztály tulajdonságokat biztosít a megfelelő paraméterezéshez. Ezek a
következőek.
Függvény név Rövid leírás
MaximumNumberOfIteration Az iterációk maximális száma.
MinimumResidualValue
A két egymást követő lépésben a szórás
értékek különbsége ennél az értéknél
kisebb, akkor az algoritmus leáll.
StepValue
A folytonos térben a diszkrét lépés
mértéke.
PutStateInIteration
A megadott iterációként kerül kiírásara a
köztes állapot.
Az osztály lelke a SolveStationCoordinatesWithFindingRotateAxis eljárás. Ez
implementálja a korábban leírt algoritmust is. Az osztály továbbá megvalósítja az IWorker
interfészt, mely az időigényes feladatok esetén a köztes állapotok jelzésére szolgál.
A Galaxy névtér ezen osztályokon kívül még magába foglal egy általános matematikai
eljárásokat tartalmazó statikus osztályt, a MathUtility-t. Ez néhány nagyon fontos
matematikai eljárást valósít meg. Ezek a következőek.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
42. oldal
Függvény név Rövid leírás
Distance
Távolág meghatározása síkon, illetve
térben.
VectorNormL2 L2 vektor norma meghatározása.
GaussElimination Gauss elimináció végrehajtása.
DotProduct Skalár szorzat térben.
RotateMatrix
Forgatási mátrix előállítása térben
szögekből, illetve síkon.
A GaussElimination eljárás egy hagyományos Gauss eliminációt végez. A megoldandó
feladatok körére ez az eljárás megfelelő, értem ez alatt azt, hogy nem kell számítani
numerikus robbanásra a rosszul kondicionált egyenletrendszerek miatt, illetve, az az eset
sem fordulhat elő, hogy valamely főelem nulla lesz a futás során.
4.7. GUI névtér
19. ábra - GUI réteg osztálydiagramja
A korábban a logikai réteg által megvalósított eljárások, már alkalmasak arra, hogy
programozható módon végrehajtsuk a feldolgozási folyamatot. Erre alapozva el lehetett
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
43. oldal
készíteni a program grafikus felhasználói felületét. A névtér UML osztálydiagramja a 19.
ábra mutatja.
A GUI névtér minden osztálya a feldolgozási folyamatot támogatja. A legtöbb ablak
elérhető a főablakból. Pár ablak csupán más ablakokból érhető el. Ezek különböző
felhasználói eseteket jelentenek. Ezeket az alábbi diagram szemlélteti (20. ábra).
20. ábra - Az ablakok felhasználói eseteinek diagramja
4.7.1. A MainForm osztály
A névtér lelke a MainForm főablak osztály, amely egy MDI szülőablak. Ez
tartalmazza a ProjectForm osztályt, mely segítségével a projektben található képeket
tölthetünk be, zárhatunk le, és a StarForm osztályt, mely segítségével a csillagkatalógust
manipulálhatjuk. Az ő feladata továbbá a folyamatosan megnyitott ImageForm-ok
nyilvántartása is egy listában, melyeken digitalizálhatunk, azonosíthatjuk a csillagokat a
képeken. Erre azért van szükség, mert az egyes StarImage objektumok nincsenek
hozzákötve a megjelenítő ablakukhoz, hanem egy külön listában a Project objektumon
belül léteznek. Ennek köszönhetően az egyes ImageForm ablakok bezárhatóak, majd
megnyithatóak.
A korábban már részletezett feldolgozási folyamatot a MainForm úgy szabályozza,
hogy bizonyos menü elemeket akkor aktivizál, amikor egyes információk már
meghatározásra kerültek. Ezt szemlélteti az alábbi leegyszerűsített állapotdiagram (21.
ábra). Az interpolációs módszer menüpontja akkor elérhető, hogyha van olyan kép, ahol
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
44. oldal
van 6 digitalizált csillag. Az álláspont meghatározásának módszereihez tartozó
menüpontok, pedig csak 2 tájékozott képszám felett lehetséges, azaz ezek esetén az
alfaNorm és alfaDelta értékei nem null étékek.
21. ábra - A MainForm leegyszerűsített állapotdiagramja
A MainForm fontosabb eljárásai az alábbi táblázatban láthatóak.
Függvény név Rövid leírás
LoadImage Kép betöltése dialógus ablakon keresztül
AddNewStarImageWindow
Új csillag ablak létrehozása már betöltött
StarImage objektum segítségével
OpenStarCatalogue
Csillag katalógus ablak megnyitása
LoadCatalgoue
Katalógus betöltése dialógusablak
segítségével
ShowStarCatalogue Csillagkatalógus ablakát jeleníti meg
MappingEnableOptions
A GUI felületeken elérhetővé tesz olyan
opciókat, melyek elvégezhetőek
Az osztály tartalmaz továbbá egy LoadingImage nevű beágyazott osztályt.
Létrehozására azért volt szükség, mivel egy kép betöltése időigényes feladat, ezért azt egy
ProgressBarFormhoz kell kötni. A LoadingImage osztály ezért implementálja az IWorker
interfészt. A betöltési folyamatot az osztály tulajdonságai segítségével paraméterezhetjük
fel. Így a FileNames mező tárolja azt az információt, mely kép(eket) kívánjuk betölteni,
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
45. oldal
valamint a konstruktorba adhatjuk meg, melyik Project, és ProjectForm objektumot
frissítsük. A betöltési munkát a LoadingImageJob eljárás végzi.
4.7.2. Az ImageForm osztály
A következő fontos megjelenítési osztály az ImageForm, mely a képeken történő
csillagazonosítást teszi lehetővé. Az osztály feladatai közé tartozik a fénykép
megjelenítése, kicsinyítése, nagyítása, mindezt együtt a rajta levő digitalizált elemekkel,
vagyis az előzetes képpel. Itt a feladat nehézsége, a különböző koordinátarendszerek
egyesítése.
Amennyiben egy képet csak megjeleníteni kívánunk egy ablakban, akkor a kép és az
ablak koordinátarendszere azonos. Probléma akkor keletkezik, ha a képet eltoljuk
valamilyen irányban, illetve ha skálázzuk (22. ábra). Azzal kapcsolatban nincs feladatunk,
hogy a vetítési egyenletekként kapott képi koordinátákat a kép koordinátarendszerébe
transzformáljuk, mert azt a logikai réteg már megoldotta (lásd korábban). Így csupán az
eltolást és a skálázást kellett megoldani ebben az osztályban.
22. ábra – Kép és ablak koordinátarendszerek és kapcsolatuk
Lépjünk tovább az osztály biztosította szerkesztési funkciókra. Egy ImageForm
objektum a beállításoknak megfelelően különböző állapotokba kerülhet, attól függően,
hogy a felhasználó milyen műveletet akar végezni. Az egyes egérkattintásokat másként
kell értelmeznie. Ennek módját mutatja az alábbi állapotdiagram (23. ábra).
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
46. oldal
23. ábra - ImageForm szerkesztőfunkcióinak állapotdiagramja
A különböző szerkesztési állapotokat gyorsbillentyűkkel is elérhetjük.
Az osztály fontosabb eljárásai a következő táblázatban láthatóak.
Függvény név Rövid leírás
TransformWindowCoordinateTo
ImageCoordinate
Az eljárás feladata az ablak
koordinátarendszere és a kép koordináta
rendszere közötti kapcsolat megvalósítása.
TransformImageCoordinateTo
WindowCoordinate
Az eljárás feladata a kép
koordinátarendszere és az ablak koordináta
rendszere közötti kapcsolat megvalósítása.
Zoom
A rajz egy részére közelíthetünk.
Draw
Ablak megrajzolása, vagy annak egy
részének megrajzolása.
SelectStar Csillagot választhatunk ki a képernyőn.
MarkStar Egy csillagot jelölhetünk meg.
DrawPreliminaryImage
Csillagok látszóhelyét rajzolja ki az ablak
koordinátarendszerébe.
DrawLightSources
A fényforrások helyét jeleníti meg az ablak
koordinátarendszerébe.
Ezek közül még a Draw eljárást emelném ki, melynek feladata az ablak frissítése. Ez
egy túlterhelt metódus: lehetőségünk van a teljes kép, illetve a kép egy részének a
frissítésére. Ez nagyon előnyös, mivel gyakran csupán egy kis területet kell újra
rajzolnunk, és ha ekkor a teljes ablakot frissítenénk, akkor szaggatna a kép, pazarolnánk az
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
47. oldal
erőforrást. Esetünkben gyakran előfordul az az eset, hogy egy csillag kijelölését vagy
kiválasztását megszüntetjük. Ebben az esetben igen hasznos ez a funkció.
4.7.3. A ProgressBarForm osztály
A következő tárgyalandó osztály a ProgressBarForm. Ennek feladata az időigényes
eljárások futtatása, a futás során keletkező részeredmények megjelenítése. Ehhez
rendelkezésünkre áll egy állapotjelző (progressbar) és egy szövegmező (textbox). Minden
osztály mely megvalósítja az IWorker interfészt – mely a logikai rétegben került
definiálásra – az képes valamely feladatát hozzácsatolni ehhez az ablakhoz. Ezt úgy kell
megtenni, hogy először az ablak létrehozásakor a konstruktorba meg kell adni az
osztályunkat. Ezután a ProgressBarForm osztály MethodDelegate tulajdonságához
hozzárendelhető egy olyan függvényt, amelynek visszatérési értéke object típusú (vagy
valamely leszármazottja), és nincs bemenő paramétere. Ezután a Start metódus
segítségével indíthatjuk el a folyamatot. Ennek révén az ablak két szálat fog elindítani. Az
egyik a dolgozó szál lesz, amit a MethodDelegate tulajdonságában határoztunk meg, a
másik pedig egy megjelenítő szál, mely az ablak állapotjelzőjét és szövegmezőjét frissíti.
Ehhez az adatokat a hozzácsatolt osztály IWorker interfész implementált eljárásaiból veszi.
A StateMessage visszatérési értéke kerül a szövegmezőbe, míg a ProgressBarState az
állapotjelzőt frissíti. Ennek következtében a dolgozó szálnak, ezeknek az eljárásoknak a
visszatérési értékeit kell manipulálnia. Amennyiben a ProgressBarState értéke a felvehető
tartományon kívülre mutat (nincs 0 és 100 között), akkor az állapotjelző folyamatosan
mozog (Marquee). Amikor a feladat befejeződik a dolgozó szál Stop állapotba kerül, amit
a megjelenítő szál érzékel, és leállítja saját magát. Amennyiben az IsClosedWhenReady
tulajdonság értéke igaz, akkor az ablak bezáródik, különben nem. A dolgozó eljárásunk
visszatérési értéket a ProgressBarForm osztály ReturnValue tulajdonságán keresztül
kaphatjuk vissza. A folyamat szekvencia diagramja az alábbi ábrán látható (24. ábra).
Most nézzük meg azt a módszert, ahogyan a megjelenítő szál manipulálja az ablak
vezérlőit. A Window Forms vezérlők nem szál biztosak. Ezért őket az Invoke eljárásuk
segítségével szinkron módon kell meghívni. Ehhez az osztály egy nem publikus metódust
használ (SetControlPropertyValue), mely egy általános eljárás a vezérlők tulajdonságainak
beállításához szinkron módon. Az ott alkalmazott megoldást a .NET refractoring
képességeinek kihasználása tette lehetővé.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
48. oldal
Végül a ProgressBarState osztállyal kapcsolatban tekintsük át annak fontosabb
eljárásait.
Függvény név Rövid leírás
Start A feldolgozás elindítása
StartJob Dolgozó metódus, mint szál
DisplayValue Megjelenítő metódus, mint szál
SetControlPropertyValue Control szál biztos elérése
4.7.4. A StarForm osztály
A következőekben térjünk át a StarForm osztály ismertetésére. Ennek feladata a
csillagkatalógus megjelenítése, annak adatainak manipulálása. A megjelenítés a
dataGridView vezérlőben történik. Ebben jelenítjük meg a Project objektumunk Catalogue
tulajdonságát, ami StarCatalogue típusú. Mivel ez az osztály a BindingList<T> absztrakt
osztály leszármazottja, ezért annak megjelenítését már rögtön adhatjuk át a DataGridView-
nak. Ez a gyakorlatban csak annyit tesz, hogy a dataGridView objektum DataSource
tulajdonságát ráállítjuk a megfelelő StarCatalogue objektumra.
24. ábra - ProgressBarForm szekvencia diagramja egy feladat végrehajtása során
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
49. oldal
A megjelenítésen kívül a logikai szinten már a rendezés is megvalósításra kerül. Az
osztály a SelectedStar tulajdonságot biztosítja más objektumoknak a kijelölt csillag
lekérdezését illetve beállítását.
A kontextus menüből számos funkció elérhető a főmenüből is, így nagy részük már a
MainForm osztályba megvalósításra került. Ezért az osztály a parent tulajdonságán
keresztül a MainForm osztályt hívja a megfelelő parancs végrehajtásához. Az egyes
csomópontokhoz a különböző felhasználói interakcióknak megfelelően események lettek
hozzárendelve. Ezeket a parancsokat az alábbi táblázatba gyűjtöttem össze.
Esemény Külső hívás
Parancs
megnevezés
openInWindowToolStripMenuItem
_Click
MainForm.
OpenStarCatalogue
Kiválasztott kép
megnyitása
ablakban
loadImageToolStripMenuItem
_Click
MainForm.
LoadImage
Kép betöltése
fájlból
treeView
_DoubleClick
MainForm.
OpenStarImage
MainForm.
ShowStarCatalogue
Dupla klikkre
megnyitjuk a
csomópontnak
megfelelő elemet
closeImageToolStripMenuItem
_Click
MainForm.
DeattachStarImage
Bezárunk egy
képet
showCatalogueToolStripMenuItem
_Click
MainForm.
ShowStarCatalogue
Megnyitjuk a
katalógust
propertiesToolStripMenuItem
_Click
ImagePropertyForm()
Egy kép
tulajdonságait
jelenítjük meg.
4.7.6. A paraméterező ablakok
A továbbiakban azokkal az ablakokkal kívánok foglalkozni, melyek az egyes
algoritmusok paraméterezésére, illetve objektumok tulajdonságainak megváltoztatására
szolgálnak. Mindegyikben közös, hogy egyszerű konverziókat végeznek a megfelelő
szövegdoboz mező-objektum tulajdonságok között. A szövegdobozban adhatja meg a
felhasználó az új értékeket, vagy egy algoritmus számára a bemenő paramétereket.
Végeredménynek pedig a különböző objektumok változásait tekinthetjük. Továbbá egy-
egy algoritmus futása során információt jutathatunk a felhasználó számára. Ezeket az
ablakok ProgressBarForm és/vagy OutputForm segítségével valósíthatják meg.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
50. oldal
A GradientMethodParametrizeForm feladata a sztochasztikus hegymászó
algoritmusának paraméterezése. Miután ez megtörtént, az osztály lefutatja az algoritmust,
és a kimenetet OutputFormban jeleníti meg. A köztes állapotokról ProgressBarFrom
segítségével tájékoztat.
Az ImagePropertyForm feladata egy képhez tartozó információk megjelenítése. Itt
megtekinthető a tájékozási értékek, illetve a kép statisztikája. Mivel a statisztika számítása
időigényes, a felhasználóra bíztuk ennek számításának szükségességét. A megfelelő
gombra kattintva egy ProgressBarForm mutatja a feldolgozottság értékét, és végül az
eredmények szövegdobozba kerülnek megjelenítésre. Ehhez a megfelelő StarImage
eljárást kell meghívni (CalculateStatistics).
IntensityMaximumParamForm osztály segítségével paraméterezhetjük fel az
intenzitásmaximumokat kereső algoritmusunkat. A folyamatot egy ProgressBarForm
segítségével követhetjük nyomon. Ebben az osztályban is lehetőségünk van statisztika
számítására. Ehhez ugyancsak a megfelelő StarImage eljárást kell meghívni.
ProjectPropertyForm segítségével a Project objektum egyes tulajdonságait
módosíthatjuk. Itt megjelenítésre kerül az álláspont koordinátái is.
ManipulateStarsForm osztály segítségével a PreliminaryImage.Stars listában
módosíthatjuk együttesen a csillagok koordinátáinak értékeit. Itt megadható elforgatási és
eltolási értékekkel számítjuk az új koordinátákat. Ehhez az osztály a megfelelő
PreliminaryImage osztályhoz tartozó eljárásokat hívja (Rotate, Offset).
Az egyes ablakok és feladatainak összefoglalója az alábbi táblázatban láthatóak.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
51. oldal
Ablak
Mit állít be,
paraméterez fel?
Mi a kimenet?
Kimenet,
folyamat
megjelenítése
GradientMethod
ParametrizeForm
GradientMethod
objektumot
Meghatározott
álláspont
koordináták a
Project
objektumban.
ProgressBarForm
+ OutputForm
ImageProperty
Form
Egy StarImage objektum
tulajdonságait
Megváltozott
StarImage objektum.
nincs
IntensityMaximum
ParamForm
StarImage.
SearchIntensityMaximum
eljárást
A StarImage.
PreliminaryImage.
LightSources listát
feltölti.
ProgressBarForm
ProjectProperty
Form
Project objektum
tulajdonságait
Megváltozott Project
objektum.
nincs
ManipulateStars
Form
Rotate és Offset
függvényeket
Megváltozott
PreliminaryImage.
Stars objektumok.
nincs
4.8. Lokalizáció
A követelmény specifikációban rögzített többnyelvűség is megvalósításra került.
Ehhez a Visual Studio lokalizációs megoldását használtam. Így minden ablakhoz egy
külön nyelvi forrásfájl is létrejött. Az alapértelmezett nyelv az angol, ezen kívül, ha a
futtató szálhoz a „hu-HU” beállítás van megadva, akkor az egyes kontrolok magyar
nyelven kerülnek megjelenítésre. A beállítás megadható parancssori paraméterként is.
A kódba található szövegek lokalizációját úgy oldottam meg, hogy minden kiíratásra
kerülő szöveget a GUIStrings forrásfájlba tettem. Ennek előnye nemcsak az, hogy ezt a
forrásfájlt nyelv specifikussá lehet tenni, hanem az is, hogy az egyes gyakran használt
szövegrészletek egységesek, illetve könnyen módosíthatóak.
A lokalizáció révén a futatható állomány mellé egy DLL fájl is létrejött. Ezzel együtt
teljes a program.
4.9. Implementációs megkötések
A legnagyobb kihívást a program implementálása során a feldolgozási módszer gyér
szakirodalma volt. A módszer elmélete bár le volt írva, az egyes feladatok tényleges
megvalósítása ránk hárult. Így vizsgálni kellett, hogy például az interpolációs módszerrel
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
52. oldal
történő képtájékozás esetén a Gauss-eliminációval végzett meghatározása az
egyenletrendszernek elég stabil-e, vagy hatékonyabb, stabilabb numerikus módszerre van
szükség.
Nehézség volt tovább az egyes koordináta rendszerek közötti kapcsolatok feltárása: a
II. ekvatoriális rendszer, és álláspont transzformációk felírása, majd a vetítési
egyenletekből a képkoordináták előállítása, ez utána kép-ablak koordinátarendszerének
összefüggéseinek megteremtése. A képletek implementálása nem mindig járt sikerrel. Ezen
problémák leküzdéséhez a kódokat először MATLAB-ban állítottam elő. A program
segítségével a pontok térbeli koordinátáit is tudtam szemlélni, és következtetni az esetleges
hibákra, kihagyott összefüggésekre.
Másik probléma a heurisztikus algoritmus paraméterezésében volt. Ezek az
algoritmusok igen könnyen implementálhatóak, szakirodalmuk is nagy. Ellenben egy
feladat alkalmazásához azok jó paraméterezése elengedhetetlen. Ha nem találjuk meg
ezeket, akkor nem vezetnek megoldásra.
Gyakorlati problémaként még felmerült a megvalósítás során a vezérlők
szálbiztonságának hiánya. Ezt sikerült megoldani az Invoke eljárás használatával.
4.10. Tesztelés
A tesztelés célja a program helyes működésének vizsgálata volt. A tesztelés az egyes
prototípusok előállítása végén mindig megtörtént. Az egyes prototípusok és tesztelései az
alábbi táblázatban láthatóak. Az egymást követő megoldások kiegészítik egymást, és a
korábbi tesztelések is többnyire megismétlésre kerültek.
Prototípus és cél Tesztelés
1. prototípus: csillagok
digitalizálása, megjelenítése
A tesztelés során ellenőrzésre került a vetítési funkció
helyes működése fehérdoboz teszteléssel, az ImageForm
osztály szerkesztési és megjelenítési funkciói, valamint az
intenzitásmaximumok meghatározásának algoritmusa.
Integritási teszt a logikai és felületi rétegek között fehér
doboz teszteléssel.
2. prototípus:
csillagkatalógus beolvasása,
összekapcsolása
Az ImageForm osztály elemeinek és a StarCatalogue
összekapcsolásának tesztelése fekete doboz teszteléssel
valósult meg. Néhány teszteset: kiválasztott csillag
kijelölése a katalógusban, nincs kiválasztva csillag,
csillagadatok módosítása a katalógusban.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
53. oldal
Prototípus és cél Tesztelés
3. prototípus: matematikai
funkciók létrehozása,
mátrix osztályok
A korábbi matematikai eljárások tesztelése, mátrix
osztályok tesztelése fehérdoboz teszteléssel.
4. prototípus: felületi réteg
fejlesztése:
ProgrssBarForm,
ProjectForm
Fehér doboz teszteléssel a ProgressBarForm feldolgozási
folyamata lett ellenőrizve. Minden meghívásra megtörtént
ez a teszt. Néhány eset: rossz kép, projekt betöltése, az
ablak ne záródjon be a feldolgozás végén. A ProjectForm
tesztelése főleg fekete doboz tesztestekkel történt. Itt az
osztály integritását vizsgáltam a logikai szinttel, illetve a
főablakkal.
5. prototípus: álláspont
koordinátáinak
meghatározása,
interpoláció, középképzés
A digitalizált adatok alapján az egyes feldolgozási lépések
implementálásának tesztelése, megfelelő számú
csillagokkal, azok nélkül. Integritási tesztek a logikai és
felületi szintek között fekete doboz tesztesetekkel.
Funkcionális tesztelés fekete doboz teszteléssel, oly módon,
hogy az eredmény összehasonlításra került az ismert
megoldással.
6. prototípus:
metaheurisztikus
algoritmusok
Tervben volt egy evolúciós algoritmus implementálása,
mely automatikus csillag azonosítást tett volna lehetővé. A
megoldás a tesztelésen nem ment át. Ezen algoritmusok
paraméterezése nehézkes, ezt nem sikerült az adott időn
belül megoldani. A sztochasztikus hegymászó algoritmusa
fekete doboz tesztelésen eset át, az eredmények helyességét
az ismert megoldással hasonlítottam össze.
A továbbiakban a végső tesztelést kívánom részletezni.
A logikai réteg alapvető komponensein egységteszteket hajtottam végre. A teszteknek
külön osztályokat hoztam létre, és a teszteléshez a fejlesztői környezet támogatta
megoldást használtam. Ezen egységtesztek így megtekinthetőek a kódból.
Logikai szint egységtesztjei a következőek voltak:
• Mátrix osztályok egységtesztjei (DMatrixTest.cs, SDMatrixTest.cs)
o Adatfeltöltése, adatkiolvasás (DMatrixTestDataLoading)
o Átméretezés (DMatrixTestDataLoading)
o Mátrix műveletek ellenőrzése (DMatrixTestFunctions)
Transzponálás
Sor, oszlop csere
Mátrixszorzás
• MathUtility osztály egységtesztjei (MathUtilityTest.cs)
o Gauss elimináció ellenőrzése (GaussEliminationTest)
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
54. oldal
Létezik megoldás
Nem tudja megoldani az egyenletrendszert, de jelzi
Egy könnyű egyenletrendszer megoldása
Továbbá egységteszten eset át a lokalizációs megoldás is (Localization.cs).
Az integrációs tesztek során a grafikus interfész, és a logikai szint kapcsolatait
vizsgáltam többnyire fehér doboz teszteléssel.
A rendszertesztek során a felhasználói felületet teszteltem fekete doboz teszteléssel.
Továbbá a programot több különböző rendszeren kipróbáltam. A funkcionális tesztelés
során ismert mérési eredményeket hasonlítottam össze a program által szolgáltatott
eredményekkel. Ezeket az alábbi táblázat tartalmazza.
Eredmények
összehasonlítása
Program által
szolgáltatott érték
Irodalom alapján Elméleti hibátlan
Φ Λ Φ Λ Φ Λ
[o
] [o
] [o
] [o
] [o
] [o
]
I. mérési sor 47,482133 19,057891 47,485470 19,059337 47,484381 19,053321
II. mérési sor 47,481591 19,047834 47,484445 19,058619 47,484381 19,053321
Az irodalmi adatokat a [1] alapján vettem. Az eltérés abból adódik, hogy az irodalmi
példa, és a program megoldása más csillagok azonosítását, és más csillag-képkoordinátákat
tartalmazz. Azonban elmondható az, hogy az eltérés a módszer hibahatárán belül van. Így a
program funkcionálisan megfelelőnek nyilvánítható.
A tesztelés során felmerült hibák javítva lettek.
5. Összefoglalás
A szakdolgozat célja egy egyszerű zenitkamera méréseit feldolgozó program
elkészítése volt. Véleményem szerint ezt sikerült megoldanom. Egy jól használható
felhasználói interfész segítségével a képkoordináták kimérése egyszerűen megoldható,
valamint a beépített feldolgozó eljárások segítségével megkapható álláspontunk
szintfelületi földrajzi koordinátái. A tesztelés során bebizonyult, hogy a szolgáltatott
eredmények a megbízhatósági szinten megegyeznek az irodalomban közölt értékekkel.
Véleményem szerint a program készen áll az esetleges használatra.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
55. oldal
Az objektum-orientált megvalósításnak köszönhetően a program fejlesztése könnyen
folytatható. Ezzel kapcsolatban szükséges lenne másfajta pontazonosítás beépítésére. Ezen
kívül célszerű lenne a képkoordináták meghatározásának a szakirodalomba közölt, de nem
megvalósított más megoldásának implementálására. Célszerű lenne továbbá másfajta
forrásból származó csillagkatalógusok beolvasási lehetőségének biztosítása. Ennek
továbbfejlesztéseként a program akár számíthatná is a látszóhelyek koordinátáinak értékeit.
A programot ezen kívül fel lehetne készíteni arra is, hogy egy kamerával együtt dolgozva a
mérési folyamatot egyesítse a feldolgozási folyamattal.
Az egyszerű zenitkamerával végzett helymeghatározás kutatások tárgya. Sajnos ahhoz,
hogy az elérhető pontosságot növelni lehessen, jobb hardverelemekre van szükség,
amelyek viszont növelik a költségeket. A célunk pedig ennek minimalizálása. Talán a jobb
feldolgozási technikák növelik a szolgáltatott eredmények pontosságát. Remélem
dolgozatom is hozzá járult ehhez az eredményhez valamilyen módon.
Egyszerű zenitkamera mérőképeit feldolgozó szoftver
56. oldal
6. Irodalomjegyzék
[1] Ress Zsuzsanna: Csillagászati helymeghatározás gazdaságos zenitkamera-rendszerrel,
Tudományos Diakköri Konferencia, 2008., Konzulensek: Laky Sándor, Nagy Imre, [26]
[2] Laky Sándor: Using the differential evolution algorithm for processing star camera
measurements, Pollack Perodica, Vol. 5., 2010., [11]
[3] http://computerworld.hu/tovabb-csokkent-a-windows-piaci-reszesedese.html, 2011.
[4] http://hu.wikipedia.org/wiki/Gyors_alkalmaz%C3%A1sfejleszt%C3%A9s, 2011.
[5] Andrew Troelsen: C# 2008 és a .NET 3.5 – 2. kötet, Szak Kiadó, 2009, [976], ISBN
978 963 9863 10 1
[6] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Új
algoritmusok, Scolar Kiadó, 2009, [992], ISBN 978 963 9193 90 1
[7] Detrekői Ákos: Kiegyenlítő számítások, Tankönyvkiadó, 1991, [684], ISBN 963 18
3329 1
[8] Jelasity Márk: Mesterséges Intelligencia I., előadás jegyzet, http://www.inf.u-
szeged.hu/~jelasity/mi1/2008/papp-szep-15.pdf, 2011
[9] Tony Northrup, Shawn Wildermuth, Bill Ryan: .NET Framework 2.0 Application
Development Foundation, Microsoft Press, 2006 [1014], ISBN-13 978-0-7356-2277-7

Weitere ähnliche Inhalte

Was ist angesagt?

Значення хімічних процесів у природі
Значення хімічних процесів у природіЗначення хімічних процесів у природі
Значення хімічних процесів у природіOlexandr14
 
ข้อสอบ O net 48 ภาษาไทย ม 6
ข้อสอบ O net 48 ภาษาไทย ม 6ข้อสอบ O net 48 ภาษาไทย ม 6
ข้อสอบ O net 48 ภาษาไทย ม 6tata natt
 
Фізіологія вагітності. Методи обстеження вагітних.pptx
Фізіологія вагітності. Методи обстеження вагітних.pptxФізіологія вагітності. Методи обстеження вагітних.pptx
Фізіологія вагітності. Методи обстеження вагітних.pptxPaperDoctor
 
Monitoring vneleh
Monitoring vnelehMonitoring vneleh
Monitoring vnelehhi_bmb
 
транзиторні стани.pptx
транзиторні стани.pptxтранзиторні стани.pptx
транзиторні стани.pptxssuser5b7a12
 
Основи сенсорного аналізу
Основи сенсорного аналізуОснови сенсорного аналізу
Основи сенсорного аналізуkasynya
 
Газарзүй 10 Биомандал.pptx
Газарзүй 10 Биомандал.pptxГазарзүй 10 Биомандал.pptx
Газарзүй 10 Биомандал.pptxEnkh Tseba
 
Бэлчээр ашиглалтыг ургамлын сэргэх чадавхи болон ашиглагчдад суурилан зохион ...
Бэлчээр ашиглалтыг ургамлын сэргэх чадавхи болон ашиглагчдад суурилан зохион ...Бэлчээр ашиглалтыг ургамлын сэргэх чадавхи болон ашиглагчдад суурилан зохион ...
Бэлчээр ашиглалтыг ургамлын сэргэх чадавхи болон ашиглагчдад суурилан зохион ...GreengoldMongolia
 
лабораторна робота 1
лабораторна робота 1лабораторна робота 1
лабораторна робота 1shulga_sa
 
Terguulegchdiin togtool
Terguulegchdiin togtoolTerguulegchdiin togtool
Terguulegchdiin togtoolBuka King
 
Бэлчээр ашиглалтын гэрээний гарын авлага
Бэлчээр ашиглалтын гэрээний гарын авлагаБэлчээр ашиглалтын гэрээний гарын авлага
Бэлчээр ашиглалтын гэрээний гарын авлагаGreengoldMongolia
 
тема2 1тех мб
тема2 1тех мбтема2 1тех мб
тема2 1тех мбcdecit
 
амтлах сэрэл
амтлах сэрэл амтлах сэрэл
амтлах сэрэл MaRaLaa
 
метаболический с м
метаболический с мметаболический с м
метаболический с мArti Tyumencev
 
біль, лікування хр. ракового болю. лік. (2)
біль, лікування  хр. ракового болю. лік. (2)біль, лікування  хр. ракового болю. лік. (2)
біль, лікування хр. ракового болю. лік. (2)Sanprosvit
 

Was ist angesagt? (20)

Значення хімічних процесів у природі
Значення хімічних процесів у природіЗначення хімічних процесів у природі
Значення хімічних процесів у природі
 
ข้อสอบ O net 48 ภาษาไทย ม 6
ข้อสอบ O net 48 ภาษาไทย ม 6ข้อสอบ O net 48 ภาษาไทย ม 6
ข้อสอบ O net 48 ภาษาไทย ม 6
 
Фізіологія вагітності. Методи обстеження вагітних.pptx
Фізіологія вагітності. Методи обстеження вагітних.pptxФізіологія вагітності. Методи обстеження вагітних.pptx
Фізіологія вагітності. Методи обстеження вагітних.pptx
 
Monitoring vneleh
Monitoring vnelehMonitoring vneleh
Monitoring vneleh
 
транзиторні стани.pptx
транзиторні стани.pptxтранзиторні стани.pptx
транзиторні стани.pptx
 
Основи сенсорного аналізу
Основи сенсорного аналізуОснови сенсорного аналізу
Основи сенсорного аналізу
 
Ajliin bair negdesen dvn
Ajliin bair negdesen dvnAjliin bair negdesen dvn
Ajliin bair negdesen dvn
 
Газарзүй 10 Биомандал.pptx
Газарзүй 10 Биомандал.pptxГазарзүй 10 Биомандал.pptx
Газарзүй 10 Биомандал.pptx
 
тоосжилт
тоосжилттоосжилт
тоосжилт
 
Бэлчээр ашиглалтыг ургамлын сэргэх чадавхи болон ашиглагчдад суурилан зохион ...
Бэлчээр ашиглалтыг ургамлын сэргэх чадавхи болон ашиглагчдад суурилан зохион ...Бэлчээр ашиглалтыг ургамлын сэргэх чадавхи болон ашиглагчдад суурилан зохион ...
Бэлчээр ашиглалтыг ургамлын сэргэх чадавхи болон ашиглагчдад суурилан зохион ...
 
2018 ebs
2018 ebs2018 ebs
2018 ebs
 
лабораторна робота 1
лабораторна робота 1лабораторна робота 1
лабораторна робота 1
 
Terguulegchdiin togtool
Terguulegchdiin togtoolTerguulegchdiin togtool
Terguulegchdiin togtool
 
Бэлчээр ашиглалтын гэрээний гарын авлага
Бэлчээр ашиглалтын гэрээний гарын авлагаБэлчээр ашиглалтын гэрээний гарын авлага
Бэлчээр ашиглалтын гэрээний гарын авлага
 
тема2 1тех мб
тема2 1тех мбтема2 1тех мб
тема2 1тех мб
 
амтлах сэрэл
амтлах сэрэл амтлах сэрэл
амтлах сэрэл
 
метаболический с м
метаболический с мметаболический с м
метаболический с м
 
Лекція 7
Лекція 7Лекція 7
Лекція 7
 
біль, лікування хр. ракового болю. лік. (2)
біль, лікування  хр. ракового болю. лік. (2)біль, лікування  хр. ракового болю. лік. (2)
біль, лікування хр. ракового болю. лік. (2)
 
Пимафуцин
ПимафуцинПимафуцин
Пимафуцин
 

Andere mochten auch

Andere mochten auch (20)

Redes sociales.
Redes sociales.Redes sociales.
Redes sociales.
 
Práctica 8
Práctica 8Práctica 8
Práctica 8
 
Comune-Book n°1 Common Properties
Comune-Book n°1 Common PropertiesComune-Book n°1 Common Properties
Comune-Book n°1 Common Properties
 
TLF Magazine July 2015__Web
TLF Magazine July 2015__WebTLF Magazine July 2015__Web
TLF Magazine July 2015__Web
 
FYP
FYPFYP
FYP
 
немцы поволжья8
немцы поволжья8немцы поволжья8
немцы поволжья8
 
Vaccini: il caso Fluad (Italia, 2014)
Vaccini: il caso Fluad (Italia, 2014)Vaccini: il caso Fluad (Italia, 2014)
Vaccini: il caso Fluad (Italia, 2014)
 
Gratia Investor Deck
Gratia Investor DeckGratia Investor Deck
Gratia Investor Deck
 
Forthnet Απρίλιος 2013
Forthnet Απρίλιος 2013Forthnet Απρίλιος 2013
Forthnet Απρίλιος 2013
 
Programa festa major Juneda 1959
Programa festa major Juneda 1959Programa festa major Juneda 1959
Programa festa major Juneda 1959
 
Dibus
DibusDibus
Dibus
 
Cabos Vga
Cabos VgaCabos Vga
Cabos Vga
 
Minkult
MinkultMinkult
Minkult
 
Ppt on how to learn
Ppt on how to learnPpt on how to learn
Ppt on how to learn
 
Artikel ilmiah
Artikel ilmiahArtikel ilmiah
Artikel ilmiah
 
Crowdsourcing in der Marktforschung, GOR14
Crowdsourcing in der Marktforschung, GOR14Crowdsourcing in der Marktforschung, GOR14
Crowdsourcing in der Marktforschung, GOR14
 
конкурс викторина сказок
конкурс викторина сказокконкурс викторина сказок
конкурс викторина сказок
 
2012 Messages in the Media
2012 Messages in the Media2012 Messages in the Media
2012 Messages in the Media
 
Curso de hacking avanzado
Curso de hacking avanzadoCurso de hacking avanzado
Curso de hacking avanzado
 
資訊管理系統作業 Solomo
資訊管理系統作業 Solomo資訊管理系統作業 Solomo
資訊管理系統作業 Solomo
 

Szakdolgozat_ELTE

  • 1. EÖTVÖS LORÁND TUDOMÁNYEGYETEM INFORMATIKAI KAR PROGRAMOZÁSELMÉLET ÉS SZOFTVERTECHNOLÓGIAI TANSZÉK EGYSZERŰ ZENITKAMERA MÉRŐKÉPEIT FELDOLGOZÓ SZOFTVER Dr. Völgyesi Lajos egyetemi tanár BME ÉMK, Általános és Felsőgeodézia Tanszék Giachetta Roberto egyetemi tanársegéd ELTE IK, Programozáselmélet és Szoftvertechnológiai Tanszék, Koppányi Zoltán programtervező informatikus BSc Budapest, 2011
  • 2. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 2. oldal 1. Bevezetés.....................................................................................................................4 2. A módszer elméleti háttere .......................................................................................6 2.1. Módszer általános leírása .........................................................................................6 2.2. Bemenő és meghatározandó adatok .........................................................................7 2.3. Mérés végrehajtása ...................................................................................................8 2.4. Feldolgozás elméleti háttere.....................................................................................8 2.4.1. Csillagok azonosítása ....................................................................................9 2.4.2. Képek tájékozása.........................................................................................12 2.4.3. Álláspont koordinátáinak meghatározása....................................................13 3. Felhasználói dokumentáció.....................................................................................15 3.1. Rendszerkövetelmények.........................................................................................15 3.2. A feldolgozási folyamat áttekintése .......................................................................15 3.3. Program indítása.....................................................................................................16 3.4. A program felépítése ..............................................................................................16 3.5. Fájlok kezelése .......................................................................................................17 3.5.1. Új projekt létrehozása..................................................................................17 3.5.2. Projekt mentése ...........................................................................................18 3.5.3. Projekt megnyitása ......................................................................................18 3.5.4. Projekt mentése másként .............................................................................18 3.5.5. Képek betöltése ...........................................................................................19 3.5.6. Betöltött kép eltávolítása.............................................................................19 3.5.7. Csillagkatalógus betöltése ...........................................................................19 3.6. Digitalizálás végrehajtása.......................................................................................20 3.6.1. Szerkesztő funkciók.....................................................................................21 3.6.2. Digitalizálás manuálisan..............................................................................22 3.6.3. Digitalizálás vetített csillagokkal ................................................................24 3.7. Képek tájékozása....................................................................................................25 3.8. Álláspont koordinátáinak meghatározása...............................................................26 3.8.1. Álláspont meghatározása középképzéssel...................................................26 3.8.2. Álláspont meghatározása forgástengely keresésével...................................27 4. Fejlesztői dokumentáció..........................................................................................28 4.1. Követelmény specifikáció ......................................................................................28
  • 3. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 3. oldal 4.2. Alkalmazott technológiák.......................................................................................29 4.3. Alkalmazott szoftverfejlesztési módszertan...........................................................30 4.4. Előzetes tervezés ....................................................................................................30 4.5. A program osztály szerkezetének áttekintése.........................................................31 4.6. A Logic névtér........................................................................................................35 4.6.1. A Galaxy névtér...........................................................................................36 4.6.2. Az AndromedaMath névtér .........................................................................39 4.7. GUI névtér..............................................................................................................42 4.7.1. A MainForm osztály....................................................................................43 4.7.2. Az ImageForm osztály ................................................................................45 4.7.3. A ProgressBarForm osztály.........................................................................47 4.7.4. A StarForm osztály......................................................................................48 4.7.6. A paraméterező ablakok..............................................................................49 4.8. Lokalizáció .............................................................................................................51 4.9. Implementációs megkötések ..................................................................................51 4.10. Tesztelés ...............................................................................................................52 5. Összefoglalás ............................................................................................................54 6. Irodalomjegyzék ......................................................................................................56
  • 4. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 4. oldal 1. Bevezetés Az emberiség évezredekig a csillagok alapján tájékozódott. Mára a modern technika fejlettségnek köszönhetően a helymeghatározási technikák ezt a fajta helymeghatározási módot teljes mértékben kiszorították. Elég csak a GPS technikára gondolnunk. Akkor mégis mi értelme van egy olyan szoftver készítésének, mely ezt a problémát tűzi ki megoldásának? Ennek okát nem a GPS koordináták vízszintes, hanem magassági összetevőiben kell keresnünk. A magasság, bár mindennapjainkban geometriai mennyiségnek véljük, valójában fizikai mennyiség. Sokkal egyértelműbb a kérdés, hogyha úgy tesszük fel, hogy merre fele folyik a víz. Mindennapjainkban úgy válaszolnánk a kérdésre, hogy lefele. Ám a tudomány erre így válaszol: a nehézségi erőtér adott ponton átmenő potenciálfelületének az adott pontban vett gradiensének irányába. Ez pedig nem jelent mást, minthogy egy folyó folyási irányát egy nagyobb tömeg, például különböző földalatti tömegek eltéríthetik, ha kis mértékben is. A nagy távolságokon a kis eltérések jelentékeny összeget képezhetnek. Az a kérdés pedig, hogy merre fele folyik a víz, bármennyire is bagatellnek tűnik, valójában a mérnöki, és a természettudományos tevékenységekhez elengedhetetlen. Fizikai magasságainkat egy alapfelülethez viszonyítva adjuk meg, ez pedig a Föld elméleti alakja, a geoid. A geoid meghatározása ezért nagyon fontos. Meghatározásához többek között az ún. függővonal elhajlások értékeire van szükség. Ehhez ismerni kell az adott pont koordinátáit mind a geometriai, mind a fizikai rendszerben. Fizikai rendszerünket szintfelületi földrajzi koordinátarendszerben adhatjuk meg. Ebben a rendszerben adott koordinátákat pedig előállíthatunk zenitkamerákkal. A zenitkamerával az égboltról készített fényképek segítségével, a csillagok beazonosítása után, megfelelő eljárással megkaphatjuk a kép készítése helyének szintfelületi koordinátáit. Így tulajdonképpen visszajutottunk a csillagokra végzett mérésekhez, mint fontos helymeghatározási technikára. A szakdolgozat célja egy ún. zenitkamera által készített képek feldolgozásának támogatására program készítése.
  • 5. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 5. oldal A szakdolgozat elején rövid áttekintést adunk a feldolgozási eljárás matematikai, csillagászati összefüggéseihez. Erre szükség van a programkód megértéséhez, illetve a felhasználó számára is, hogy tudja, milyen feladatokat is hajt végre. Ezután a felhasználói dokumentáció a szoftver lehetőségeit mutatja be. Célja a program teljes körű bemutatása, melyet egy feldolgozási folyamat mentén kíván megtenni. A fejlesztői dokumentáció a fejlesztés során alkalmazott technológiákat, megoldásokat, a program szerkezetének bemutatását tartalmazza. Segítségével dokumentáltam az elvégzett munkát, illetve segítséget adunk a további fejlesztésekhez.
  • 6. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 6. oldal 2. A módszer elméleti háttere A fejezet célja a szoftver fejlesztése során felhasznált szakirodalom rövid áttekintése. Ezért a következőekben tárgyalom a feldolgozási folyamat lépéseit, azok matematikai, csillagászati összefüggéseit. Ennek ismerete nélkülözhetetlen a feladat elkészítéséhez, a program használatához. 2.1. Módszer általános leírása Zenitkamerákat az 1950-es évektől használták a koordináta meghatározáshoz. A későbbiekben a technikai fejlődés révén ezen eszközök is egyre pontosabbá váltak. 1. ábra - A zenitkamera alapelve1 Alapelvük, hogy a kamerát úgy állítjuk az égbolt felé, hogy annak irányvonala a helyi függőleges irányába essen (1. ábra). Ebben a pozícióban készítenek fényképet az égboltról. Az így készült képen az egyes csillagokat beazonosítva – megmérve – meghatározhatóvá válik a mérőkép készítésének helye, oly módon, hogy a csillagok helyzetét valamely koordinátarendszerben ismerjük. A nagy távolságok, Föld méretű értékek miatt a 1 forrás: Dr. Völgyesi Lajos
  • 7. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 7. oldal meghatározás egyes bemenő paramétereinek meghatározása során szélső pontossági igényekre kell törekedni. Ehhez speciális hardware kialakításra van szükség (megfelelő objektív, CCD mátrix, időmeghatározás kérdései, stb.), melyek az eszköz árát rendkívüli módon megnövelik, ezért nagyon kevés ilyen műszer létezik a világon. Ezen okoknál fogva indult kísérlet egy olcsóbb zenitkamera rendszer kifejlesztésére, mely már meglévő eszközök felhasználásával kívánja a feladatot megoldani. Hazánkban Laky és Ress [1][2] végeztek kísérletet ezzel kapcsolatban. Az ő munkáikra alapozva készítettem el a szakdolgozatot. 2.2. Bemenő és meghatározandó adatok A szakdolgozat témája a korábban említett mérések kiértékelésére szoftver fejlesztése. Ehhez meg kell határoznunk a bemenő adatok körét, mellyel a feladat végrehajtható, illetve milyen eredményeket kívánunk szolgáltatni a feldolgozásból. Itt csupán a bemenő és kimenő adatok körét elméleti szempontból kívánom tárgyalni. Először is rendelkezésre kell állnia a mérésből készített képeknek és a hozzájuk tartozó időpontoknak a GAST2 időrendszerben, másrészről szükséges a csillagok látszóhelyének ismerete azok azonosításához. Az előbbit mérések segítségével szerezhetjük be. Az utóbbi meghatározásához az XEphem program kitűnően használható. A Unix alapú rendszer oktatási és személyes használatra ingyenesen elérhető. A programban megadva az álláspontunk előzetes koordinátáit és az időpontot, a csillagok látszóhelyei rendelkezésünkre állnak az ún. II. ekvatoriális koordinátarendszerben. Ehhez a Hyparcos Tycho2 csillagkatalógust használja, mely a benne tárolt égi vonatkoztatási rendszerben adott csillagkoordináták és sajátmozgásaik, valamint egyéb modellek segítségével számítja a csillagok látszóhelyét. A bemenő adatok segítségével az elkészült programmal a képek kiértékelése már elvégezhető, a folyamat végeredményeképpen pedig az álláspontunk szintfelületi koordinátái állnak a rendelkezésünkre. Tehát tulajdonképpen két koordinátapár. 2 A GAST (Greenwich-i csillagidő, Greenwich Apperent Siderel Time) egy a föld forgásán alapuló időrendszer. Kapcsolata az UTC világidővel összetett, az alábbi szakirodalomban olvasható [1].
  • 8. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 8. oldal 2.3. Mérés végrehajtása A mérések végrehajtásának rövid leírását szükségesnek találtuk, mivel így kézzelfoghatóbbá válik a probléma bemenő adatainak értelmezése. A leírás [1] alapján készült. A szerzők egy Zeiss THEO010B teodolitra rögzítettek egy Canon EOS350D típusú digitális fényképezőgépet. Az állótengelyt a teodolit segítségével állították függőlegesbe, és a kamerához csatlakoztatott számítógép segítségével készítették el a képeket. A képek készítésének pontos idejét úgy határozták meg, hogy a számítógépet interneten keresztül szinkronizálták az UTC idővel. A képek készítésénél a következő hibahatásokat vették figyelembe: • A hardverkésést, amíg a fénykép expozíciója és a számítógépbe való beérkezése között eltelt. Ezt korábbi mérésekkel vették figyelembe. • Az állótengely és az optikai tengely közötti szögeltérést úgy vették figyelembe, hogy több képet készítettek. Az egyes pozíciókat 90 fokonként változtatták a vízszintes körön, így a hibahatás kiejthető. A mérés során olcsó, kézi GPS segítségével meghatározták az álláspontunk előzetes koordinátáit. A mérést követően az UTC időt a GAST időrendszerbe transzformálták az adott epochára vonatkozó földforgás paraméterek (EOP – Earth Oriented Parameters) és a megfelelő összefüggések segítségével. Így összeálltak a kiértékelendő kép-idő párok. A mérés pontos végrehajtását a továbbiakban nem részletezem, az a korábbi forrásokból elérhető [1]. 2.4. Feldolgozás elméleti háttere A feldolgozás menete 3 fázisra bontható. Ezek a következőek: • Csillag-fényforrás azonosítása. A fényképen lévő fényforrásokat azonosítani kell. A csillagok koordinátáit csillagkatalógusból vehetjük. Ebből meghatározhatjuk (természetesen nem pontosan) a fényképen található helyüket, ezáltal hatékonyabbá tehetjük a csillagok azonosítást, vagy akár automatizálhatjuk is azt. • Képek tájékozása. Az egyes képekhez meghatározandó azok normálisának iránya.
  • 9. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 9. oldal • Álláspont koordinátáinak meghatározása. A képek normálisai egy kúp alkotója mentén helyezkednek el. Ennek a kúpnak a meghatározása a feladatunk, mivel az jelöli ki az álláspontunk helyzetét. A továbbiakban tekintsük át az egyes lépéseket kitérve a matematikai leírásukra. 2.4.1. Csillagok azonosítása Az XEPhem fájlból nyert adatok a II. ekvatoriális koordinátarendszerben adottak ( 2. ábra). Ezt a rendszert a természet jelöli ki. Az egyik alapiránya a Föld forgástengelye (ω), az erre merőleges síkban található az égi egyenlítő síkja. Az égi egyenlítői sík az ekliptika síkjával (ez az a sík, amelyen a Föld a Nap körül kering) való metszése a csomóvonal. A csomóvonal két vége, két irányt jelöl ki: a Tavaszpont és az Őszpontot. A koordinátarendszerünk másik tengelyének iránya essen a Tavaszpont (Ύ) felé. A harmadik tengely úgy helyezkedik el az előzőekhez képest, hogy a tengelyeink hármasa jobbsodrású rendszert alkosson. Az origó ezután a Föld tömegközéppontjába (O) helyezve kapjuk a II. ekvatoriális koordinátarendszert. 2. ábra - II. ekvatoriális koordinátarendszer3 A koordinátarendszer ismeretében megadható egyes csillagok helyzete. Most helyezzük egy egységsugarú gömb középpontját a koordinátarendszerünk kezdőpontjába, 3 forrás: Dr. Völgyesi Lajos
  • 10. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 10. oldal valamint húzzuk be a csillagra mutató helyvektort. Ez a vektor a gömböt átdöfi. A döfésponton keresztül a gömbön rajzolhatunk egy az alapsíkra (egyenlítő síkjára) merőleges (meridián, vagy órakört), és vele párhuzamos kört (parallel kört). Ezeken a körökön mérve a döféspontunkat, két szöget kapunk (térbeli polár koordináták). Ezzel adjuk meg a csillagunk helyzetét. A paralelkörön mért szöget rektaszcenziónak, a meridiánkörön mért szöget hívjuk deklinációnak. Ilyen rektaszcenzió (α) és deklináció (δ) értékeket kapunk az XEphem fájlból a mérőkép készültének időpontjában. Továbbiakban tekintsük az álláspontunkat, ahol a mérőképek készültek. Tekintsük úgy, hogy ez a pont a Föld tömegközéppontjában van. Ezt megtehetjük a nagy távolságuk miatt, a szögek ebbéli változása olyan kismértékű, hogy a mérési pontatlanságunk jóval nagyobb. Így álláspontunk megegyezik a II. ekvatoriális rendszer origójával. A problémánk továbbá az, hogy a mérőképünk normálisa (ami a helyi függőleges, más néven zenit) nem egyezik meg a koordinátarendszer kezdő irányával (ami a forgástengely). Ezért az XEphem programból beolvasott értékeket át kell transzformálni. A transzformáció annyit jelent, hogy az álláspontunkat a gömbön addig forgatjuk, míg az a forgástengelyre nem esik. Ha az álláspontunk koordinátái ismertek a II. ekvatoriális koordinátarendszerben, akkor az alábbi egyszerű képlettel ez megtehető: ߙ′௖௦ = ߙ௖௦ + ߙ௣ (1.1) ߜ′௖௦ = ߜ௖௦ + ߜ௣ (1.2) ahol ߙ௖௦ a csillag rektaszcenziója, ߜ௖௦ a csillag deklinációja, ߙ௣ álláspontunk rektaszcenziója, ߜ௣, álláspontunk deklinációja, valamint ߙ′௖௦, ߜ′௖௦ a csillag rektaszcenziója, és deklinációja egy mérőkép normálisával megegyező koordinátarendszerben. Azonban ehhez ismerni kell az álláspontunk koordinátáit az ekvatoriális rendszerben. Ez azonban nem áll rendelkezésünkre. Helyette GPS mérést végezve (akár valamilyen olcsóbb készülékkel) megkaphatjuk az álláspontunk ún. a’priori (előzetes) koordinátáit. Ezzel az előzetes kép közelítőleg meghatározható. Ellenben a GPS rendszerben adott koordináták olyan rendszerben adottak, amelynek a tengelyirányai nem forognak együtt a Földdel. Ez a rektaszcenzióban okoz eltérést, amely meghatározható a Földnek a kezdőiránytól mért elfordulásával, vagyis időméréssel. Tehát szükségünk van a képek
  • 11. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 11. oldal készítésének időpontjára a GAST időrendszerben (τ). Ennek ismeretében az (1.1) egyenlet a következőképpen alakul: ߙ′௖௦ ൌ ߙ௖௦ ൅ ߙ௣ ൅ τ (1.3) Miután megkaptuk ebben a rendszerben a csillagok koordinátáit elő tudjuk állítani a mérőképre történő vetítés útján keletkező képeket. Ehhez először át kell térnünk térbeli polárkoordinátákról derékszögű koordinátákra a következő összefüggésekkel: ܺ ൌ cos ߜ௖௦ cos ߙ௖௦ (1.4) ܻ ൌ cos ߜ௖௦ sin ߙ௖௦ (1.5) ܼ ൌ sin ߜ௖௦ (1.6) Ezután a vetítést a 3. ábra alapján egyszerű aránypárokkal írhatjuk fel: ߦ ൌ ܿ ௑ ௓ (1.7) ߟ ൌ ܿ ௒ ௓ (1.8) ahol ߦ, ߟ a képkoordináták, ܺ, ܻ, ܼ a csillag térbeli derékszögű koordinátái, ܿ kameraállandó, melynek ismerete szükséges a feldolgozáshoz. A kameraállandó a fényképező kamerákra jellemző mérőszám, melyet kalibrációval tudunk meghatározni. 3. ábra - Vetítés a mérőképre egyik metszetben Az egyenletek felírásával megkaptuk a csillagkoordinátákból az ún. előzetes képet, melyet most a ténylegesen készített képre illeszthetünk. Az apriori jellemző értékekből, és
  • 12. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 12. oldal más hatásokból, melyeket nem vettünk figyelembe a két kép eltérést fog mutatni. Az egyik ilyen fontos eltérés, hogy nem tudjuk, milyen vízszintes szögben készültek a képek. Ez az eltérés egy vízszintes értelmű forgatást jelent. További hibahatás a kép eltolódása az előzetes képtől, ez annak köszönhető, hogy az álláspontunk koordinátái közelítőleg voltak csak pontosak. Végül a vetítési centrum helyzetének csupán közelítő ismerete okozhat méretarány torzulást. Ha manuálisan ezeket kezeljük, akkor gyorsan egy helyes elrendezést kaphatunk, melyekkel a csillagok képbeli helyzete azonosítható. Ezt úgy tehetjük meg, hogy az egyes képkoordinátákat elforgatjuk, illetve eltoljuk. Ezt a következő képlettel végezhetjük el: ൤ ߦ′ ߟ′ ൨ = ܴሺߙሻ ൤ ߦ ߟ ൨ + ൤ ߦ଴ ߟ଴ ൨ (1.9) ahol ߙ, a forgatás szöge, ߦ଴, ߟ଴ az eltolás mértéke, ߦ, ߟ az eredeti képkoordináták, valamint ߦ′, ߟ′ a transzformált koordináták. Ezzel befejeztük a képen található csillagok azonosítását. Ha normál zenitkamerát használnánk, akkor a következő lépés, már az álláspont koordinátáinak meghatározása lenne. De mivel mi egy egyszerű zenitkamera méréseit szeretnénk feldolgozni, ezért több képet kell készítettünk. 2.4.2. Képek tájékozása A következő lépés az egyes képek tájékozásának meghatározása, vagyis az egyes képek normálisainak számítása. Ezt úgy oldjuk meg, hogy a mérőképre két másodfokú interpolációs felületet fektetünk a két tengely irányába. Ezt a következőképpen írhatjuk fel Ress [1] alapján: ߙሺߦ, ߟሻ = ܽଵ + ܽଶߦ + ܽଷߟ + ܽସߦଶ + ܽହߦߟ + ܽ଺ߟଶ (1.10) ߜሺߦ, ߟሻ = ܾଵ + ܾଶߦ + ܾଷߟ + ܾସߦଶ + ܾହߦߟ + ܾ଺ߟଶ (1.11) Célunk az ܽଵ,ܾଵ együtthatók meghatározása. Feltételezve azt, hogy több mérésünk van, mint ahány ismeretlenünk, alkalmazhatjuk a legkisebb négyzetek módszerét a feladat megoldásához. Amennyiben a csillag-fényforrás párosítások száma és az egyenletek az alábbi módon alakulnak:
  • 13. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 13. oldal ‫ܣ‬ = ‫ۏ‬ ‫ێ‬ ‫ێ‬ ‫ێ‬ ‫ێ‬ ‫ێ‬ ‫ۍ‬1 ߦଵ ߟଵ 1 ߦଶ ߟଶ ߦଵ ଶ ߦଵߟଵ ߟଵ ଶ ߦଶ ଶ ߦଶߟଶ ߟଶ ଶ ⋮ ⋮ ⋮ 1 ߦ௜ ߟ௜ ⋮ ⋮ ⋮ ߦ௜ ଶ ߦ௜ߟ௜ ߟ௜ ଶ ⋮ ⋮ ⋮ 1 ߦ௦ ߟ௦ ⋮ ⋮ ⋮ ߟ௦ ߦ௦ߟ௦ ߟ௦ ଶ ‫ے‬ ‫ۑ‬ ‫ۑ‬ ‫ۑ‬ ‫ۑ‬ ‫ۑ‬ ‫ې‬ ‫ܣ‬ ∈ ࡾ௦×଺ (1.12) ݈ = ቈ ߙଵ ߙଶ ⋮ ቉ ; ݉ = ൥ ߜଵ ߜଶ ⋮ ൩ ݈, ݉ ∈ ࡾ௦ (1.13) Végül az ismeretlenek vektora [7]: ܽ = (‫ܣ‬் ‫)ܣ‬ିଵ ‫ܣ‬் ݈ ܽ ∈ ࡾ଺ (1.14) ܾ = (‫ܣ‬் ‫)ܣ‬ିଵ ‫ܣ‬் ݉ ܾ ∈ ࡾ଺ (1.15) Ahol a keresett értékek az ܽ, ܾ vektorok első eleme. Így meghatároztuk a mérőképek normálisainak irányát. Az i.-ik kép normálisának iránya: ߙ௜,௡௢௥௠ = ߙଵ (1.16) ߜ௜,௡௢௥௠ = ߜଵ (1.17) Amennyiben a feladatot Gauss-eliminációval akarjuk megoldani, az alábbi normálegyenlet megoldása a cél az 1.15 esetében: (‫ܣ‬் ‫ܽ)ܣ‬ = ‫ܣ‬் ݈ (1.18) Az 1.18 képletben a normálmátrix egy 6x6-os mátrix, így bármilyen nagyszámú csillag-fényforrás pár, egy ekkora méretű mátrix eliminációját jelenti. 2.4.3. Álláspont koordinátáinak meghatározása Utolsó lépésként a forgástengely helyzetének meghatározása a cél, ugyanis ennek iránya adja a szintfelületi koordinátákat. Mivel a kamerát a teodolit segítségével a vízszintes körön (a limbuszkörön) forgattuk végig, és mivel a helyi függőleges és a kamera optikai tengelye nem esik egybe, ezért a képek normálisainak egy kúp alkotójára kell esnie. A kúp csúcsáról az alapra húzott legrövidebb egyenes (a magassága) lesz a forgástengely, mely nem más, mint az álláspontunk szintfelületi koordinátái.
  • 14. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 14. oldal A legegyszerűbb esetben az egyes képek normálisának átlaga képezi a forgástengelyünket. Ekkor a koordinátákat a következő képlettel kaphatjuk meg k darab kép esetén: ߔ = ෌ ఈ೔,೙೚ೝ೘ ೖ ೔సభ ௞ (1.19) ߉ = ෌ ఋ೔,೙೚ೝ೘ ೖ ೔సభ ௞ (1.20) A forgástengelyt meghatározhatjuk úgy is, hogy az egyes kép normálisok eltéréseit vesszük egy adott forgástengelytől [1]. Ettől a tengelytől való eltérések szórását nézzük, és ezt próbáljuk minimalizálni. A kép normálisok eltérése egy adott forgástengelytől az alábbi: ߠ௜ = arccos ( ௑೔௑೑ା ௒೔௒೑ା௓೔௓೑ |௘೔|ห௘೑ห ) (1.21) ahol ܺ௜, ܻ௜, ܼ௜ az i.-ik kép normálisába mutató vektor koordinátái, ܺ௙, ܻ௙, ܼ௙ A forgástengely vektora, valamint ݁௜, az i-ik kép egységvektora, ݁௙ a forgástengely egységvektora, végül ߠ௜ az i-ik kép eltérése. Ez után a forgástengely irányát kell meghatároznunk oly módon, hogy ߪ = ට෌ (ఏá೟೗ିఏ೔) ೖ ೔సబ ௞ିଵ → ݉݅݊ (1.22) ahol ߠá௧௟ az eltérések átlaga, ݇ a képek száma, ߪ a minimalizálandó szórás érték. Az 1.22 megoldására a dolgozatban egy ún. sztochasztikus hegymászó algoritmus szolgál.
  • 15. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 15. oldal 3. Felhasználói dokumentáció Az elméleti háttér bemutatása után, ez a szakasz a program használatát tárgyalja. A bemutatás íve, egy feldolgozási folyamat. Az így létrehozott projekt fájl megtalálható a CD mellékleten (sample.apj). 3.1. Rendszerkövetelmények A program ajánlott hardver és szoftver követelményei a következőek: • 2 GHz-es processzor • 2 GB RAM operatív tár • 1 MB HDD + a feldolgozáshoz szükséges képek (akár több száz MB) • Legalább 20’’ képernyő a digitalizáláshoz • Windows 7 operációs rendszer • .NET 4.0 keretrendszer Minimális rendszerkövetelmények a következőek: • Pentium 233 MHz processzor • 64 MB RAM • 1 MB HDD • Windows XP operációs rendszer • .NET 4.0 keretrendszer 3.2. A feldolgozási folyamat áttekintése Fontos a program bemutatása előtt a feldolgozási folyamat áttekintésével kezdeni. Ennek elméleti háttere tárgyalásra került már a második fejezetben. A folyamatábra a 4. ábra mutatja. A folytonos vonal a kötelező paraméter megadást jelenti, míg a szaggatott vonal esetén a kockában lévő művelet végrehajtása nem szükséges.
  • 16. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 16. oldal 4. ábra - Mérés feldolgozásának folyamatábra 3.3. Program indítása A szoftvert nem kell telepíteni. A programot Andromeda.exe fájllal indíthatjuk el. Ekkor a nyelve az operációs rendszer alapértelmezett nyelve lesz. Amennyiben az Andromeda – Magyar parancsikonnal indítjuk a nyelve mindenképpen a magyar lesz. Ha magyar nyelvű operációs rendszerünk van, előfordulhat, hogy angolul kívánjuk elindítani a programot. Ekkor az Andromeda – English parancsikont indítsuk el. A szoftver indításakor egy üres projekt fájl kerül megnyitásra, mely egyelőre még nincs elmentve. 3.4. A program felépítése A program a Windows programokhoz hasonló felülettel rendelkezik (5. ábra). Részei a következőek. 1. Menü, mely segítségével az adatok betöltését, a számításokat, és az ablakok elhelyezését szabályozhatjuk. 2. Eszköztár, melyen az adatbetöltési (projekt, kép, stb.) funkciók gyorsan elvégezhetőek. 3. A projekt ablakon keresztül érhetjük el a képeket. Az ablak kontextus menüjében is megtalálhatóak a leggyakrabban használt parancsok.
  • 17. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 17. oldal 4. Kép ablak, mely a képek megjelenítését végzi, Ugyancsak ennek az ablaknak a segítségével végezhetjük el a digitalizálást. 5. A Csillagkatalógus ablaka teszi lehetővé a csillagok adatainak megjelenítését, esetleg azokat meg is változtathatjuk. 5. ábra - A program felhasználói felülete 3.5. Fájlok kezelése Első lépésként tekintsük át, hogyan tudjuk a projektet elmenteni, betölteni, illetve a feldolgozáshoz szükséges képeket, valamint a csillagkatalógust betölteni. 3.5.1. Új projekt létrehozása Parancs Hatás Kattintsunk a File → New Project… menüpontjára, vagy gyorsbillentyűt használva a Ctrl+N, vagy az eszköztárat használva a ikonra kattintva. Ha már volt megnyitott projektünk a program megkérdezi, hogy mentsük-e a megnyitott állományt. Ha nem volt, az új projekt létrejött. Válasszuk a számunkra megfelelő opciót. Az új projekt létrehozásra került.
  • 18. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 18. oldal 3.5.2. Projekt mentése A mentési folyamat sok kép esetén sokáig tarthat. Ennek oka, hogy a projekt fájlba elmentésre kerülnek a képek is. Ennek köszönhetően a képeket nem kell magunkkal hordozni, elég csak a projekt fájlt. A projekt mentése az alábbiak szerint történik. Parancs Hatás Kattintsunk a File → Save Project… menüpontjára, vagy gyorsbillentyűt használva a Ctrl+S, vagy az eszköztárat használva a ikonra kattintva. Megjelenik a Save project… dialógus ablak. Adjuk meg a projekt mentésének helyét, és nevét. Ezután kattintsunk a Save gombra. Megjelenik egy folyamatjelző. A mentés végén automatikusan bezáródik. A fájl APJ kiterjesztéssel elmentésre kerül a megadott helyre, a megadott névre. 3.5.3. Projekt megnyitása Egy projekt betöltésének folyamata az alábbi. Parancs Hatás Kattintsunk a File → Open Project… menüpontjára, vagy gyorsbillentyűt használva a Ctrl+O, vagy az eszköztárat használva a ikonra kattintva. Megjelenik a Open project… dialógus ablak. Válasszuk ki a projekt betöltésének helyét és nevét. A fájlra duplán kattintva, vagy a fájlt kiválasztva az Open gombra kattintva a betöltés elvégezhető. Megjelenik egy folyamatjelző. A megnyitási folyamat végén a folyamatjelző automatikusan bezáródik. A fájl betöltődik a programba, és ha már voltak betöltött képek, azok a Projekt ablakba megjelennek. 3.5.4. Projekt mentése másként Egy már elmentett projektet lehetőségünk van újra elmenteni, csak más néven. Ennek menete a következő.
  • 19. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 19. oldal Parancs Hatás Kattintsunk a File → Save project as… menüpontjára Megjelenik a Save project… dialógus ablak. Adjuk meg a projekt új helyét, és nevét. Megjelenik egy folyamatjelző. A mentési folyamat végén a folyamatjelző automatikusan bezáródik. A fájl más néven a megadott helyre újra elmentése kerül. 3.5.5. Képek betöltése Be kell töltenünk azokat a képeket a programba, amelyeket fel kívánjuk dolgozni. Ezt az alábbi módon tehetjük meg. Parancs Hatás Kattintsunk a File → Load Image(s)… menüpontjára, vagy a Project ablakon az Images csomópontra jobb klikkel, majd a Load Image(s) menüpontra, vagy az eszköztár ikonjára. Megjelenik a Load image(s)… dialógus ablak. Adjuk meg a betöltendő képet. A shift gomb nyomva tartásával akár több képet is kiválaszthatunk. Ezután kattintsunk az Open gombra. Megjelenik egy folyamatjelző. Itt megtekinthetjük, ahogy a képek betöltődnek. A folyamat végén az ablak nem záródik be. Ekkor leellenőrizhetjük, hogy minden kép sikeresen betöltődött-e. Ezen kívül a betöltött kép(ek) megjelenek a Projekt ablak Images csomópontja alatt. 3.5.6. Betöltött kép eltávolítása Amennyiben a betöltés után még sincs szükségünk a képre, azt eltávolíthatjuk a projektünkből a következő módon. Parancs Hatás Kattintsunk a Projekt ablakon az eltávolítandó képre jobb gombbal. Megjelenik a csomóponthoz tartozó kontextus menü. Válasszuk a Deattach Image menüpontot. A kiválasztott kép eltávolításra került a projektből. 3.5.7. Csillagkatalógus betöltése A program az XEphem programból kiexportált fájlt képes beolvasni. Erről az XEphem program leírásában találhatunk további információt. A fájl felolvasásához a programban a Name, RA, Dec, VMag, Type mezőket kell kiírnunk. A fájl felépítésének a 6. ábra szerint kell kinéznie.
  • 20. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 20. oldal 6. ábra - XEphemből exportált fájl struktúrája Figyelem, ügyeljünk oda, hogy a tizedes érték jelölése az operációs rendszerben megadott beállításoknak megfelelő legyen! A megadott struktúrájú fájlokat már betölthetjük a programba a következőekben megadott módon. Parancs Hatás Kattintsunk a File → Load Catalogue… menüpontjára, vagy a Project ablakon az Catalogue csomópontra jobb klikkel, majd a Load catalogue menüpontra, vagy az eszköztár ikonjára. Megjelenik a Load catalogue… dialógus ablak. Válasszuk ki a megfelelő TXT kiterjesztésű fájlt. A katalógus betöltődik a programban. 3.6. Digitalizálás végrehajtása A digitalizálás végrehajtásához először meg kell jelenítenünk a betöltött képeket. Ehhez kattintsunk kettőt a Projekt ablakon a megfelelő képre, vagy a megfelelő kép csomópontjára jobb klikkel kattintva a kontextus menüből válasszuk ki Open in Window menüpontot. Ekkor a kép megjelenik a Kép ablakban. A kép ablakban jobb egérkattintással elérhetjük a szerkesztési funkciókat.
  • 21. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 21. oldal 7. ábra - Kép ablak és kontextus menüje Az ablak fejlécében olvasható a fájl neve, illetve a kép méretaránya zárójelben. Az állapotsoron az egér helyzetének képkoordinátái, illetve az aktív szerkesztő funkció látható. A továbbiakban tekintsük át az egyes szerkesztő funkciókat. 3.6.1. Szerkesztő funkciók A kontextus menü segítségével az alábbi szerkesztő funkciók érhetőek el. Funkció Gyors billentyű Mit csinálhatunk? Pen Ctrl+C Egy csillagot jelölhetünk ki vele. A csillag kijelölésekor annak adatai az ablak bal felső sarkában megjelenik. A kijelölés eltávolításához kattintsunk a kép bármely, csillagot nem tartalmazó részére. Labels Ctrl+L Be-, illetve kikapcsolhatjuk a csillagok neveinek feliratozását. Refresh Ctrl+F A képterületet frissíthetjük. Zoom→Zoom In A képbe nagyíthatunk (a funkció egérgörgővel is elérhető), ehhez kattintsunk a kép azon pontjára, amit középre kívánunk helyezni. Zoom→Zoom Out A képen kicsinyíthetünk (a funkció egérgörgővel is elérhető), ehhez kattintsunk a kép azon pontjára, amit középre kívánunk helyezni.
  • 22. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 22. oldal Funkció Gyors billentyű Mit csinálhatunk? Zoom→ Zoom Extents Terjedelemre nagyíthatunk Offset Ctrl+Space A képet eltolhatjuk, ehhez kattintsunk a kép azon pontjára, amit középre kívánunk helyezni Digitized Ctrl+D Csillag digitalizálása. Ehhez a csillagkatalógusban egy csillagot ki kell választani. Matching A fényforrások és a digitalizált csillagok összeillesztése. Show star in catalogue A kijelölt csillagot kiválasztja a csillagkatalógusban. Ehhez a csillagkatalógusnak nyitva kell lennie. 3.6.2. Digitalizálás manuálisan A következőekben ismertetésre kerül egy kép digitalizálásának folyamata. Ehhez a korábbiak alapján be kell tölteni legalább egy képet és a csillagkatalógust. Továbbá legyen nyitva a digitalizálásra kerülő kép egy a képablakban. Parancs Hatás Válasszuk a Calculation → Intensity Maximums menüpontot Megjelenik a Searching intensity maximums parametrizing ablak. Itt adjuk meg a lehetséges csillagok körülbelüli értékét pixelben (Star size, alapértelmezett érték: 20), valamint hogy mekkora intenzitás érték felett tekintsük a képpontot a csillag részének (Intensity edge, alapértelmezett érték: 100). Az utóbbi beállítás eldöntése érdekében a Calculate gombra kattintva egy statisztikát készíthetünk a képről, mely hisztogramot is tartalmaz. Kattintsunk rá. Megjelenik az folyamatjelző, mely mutatja a feldolgozottság mértékét, majd eltűnik. A statisztikai értékek és a hisztogram megtekinthetőek a szövegdobozban. Ez alapján adjuk meg az Intensity edge értékét. Majd kattintsunk az OK gombra. Megjelenik az folyamatjelző, melyen végigkövethető a folyamat. Figyelem, ez eltarthat egy darabig. A feladat végén a folyamatjelző eltűnik, és a Kép ablakon megjelenítésre kerülnek kék körrel a maximumhelyek (fényforrások).
  • 23. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 23. oldal Parancs Hatás Nyissuk meg a csillagkatalógust, oly módon, hogy a Projekt ablak a katalógus csomópontjára jobb egérkattintással megjelenő legördülő menüből válasszuk ki a Show Catalogue menüpontot, vagy kattintsunk duplán a csomópontra. Megjelenik a Csillagkatalógus ablaka. Válasszuk ki a digitalizálandó csillagot a Csillagkatalógus ablakában. Kijelölésre került a megfelelő csillag. Ezután térjünk vissza a Kép ablakra, és ott jobb egérkattintásra megjelenő kontextus ablakban (7. ábra) válasszuk a Digitize menüpontot, vagy használjuk a Ctrl+D gyorsbillentyűt. Digitalizálás funkcióba kerültünk. A szerkesztési funkciókkal (lásd korábban) keressünk rá a csillag helyére a képen, és ott nyomjunk bal egérgombot. Tipp: Ha elő- ször csak körül belülre kattintunk a csillagra, akkor a Matching szerkesztőfunkcióval a program a csillagot összeilleszti a fényforrással. Egy piros kereszt jelzi a digitalizált csillagot. Az előző 3 pontot ismételve, digitalizáljuk be az ismert összes csillagot. Ha elrontunk egy bevitel, akkor a csillagot kiválasztva kontextus menüből a Delete Star menüpont, vagy a Del billentyű segítségével törölhetjük a csillagot. Bedigitalizáltuk az összes ismert csillagot. A többi kép gyors digitalizálásához a következőeket célszerű tenni. Nyissuk meg a többi képet, de legfeljebb 6-ot (a láthatóság érdekében) a korábbiak alapján. Megnyílik 6 képablak. A már bedigitalizált képen válasszunk ki egy már digitalizált csillagot (váltsunk át előtte Pen funkcióra) Kiválasztásra kerül a csillag a már digitalizált kép Kép ablakában. Ezután válasszuk a kontextus menüből a Show star in catalogue menüpontot. Figyelem, a Csillagkatalógus ablaknak nyitva kell lennie. Kiválasztásra kerül a megjelölt csillag a Csillagkatalógus ablakában. A kiválasztott csillagot jelöljük ki a többi ablakban. A csillag a többi képen is digitalizálásra került. Hajtsuk végre az előző 3 pontot, amíg az összes képet be nem digitalizáltuk. Figyelem, a Kép ablak automatikusan aktívvá válik, amint az egérrel fölé megyünk. A csillagok az egyes képeken be lettek digitalizálva.
  • 24. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 24. oldal 8. ábra – Digitalizálási állapot képernyőképe 3.6.3. Digitalizálás vetített csillagokkal A program képes a csillagkatalógus adatai alapján ún. előzetes kép elkészítésére, amely olyan, mintha egy fiktív fényképet készítenénk az égboltról. Ezt a képet utána még forgatni kell, illetve eltolni. Ahhoz, hogy ezt hogyan tehetjük meg, tekintsük a következő folyamatot. Parancs Hatás A korábbiak alapján töltsünk be legalább egy képet, és a csillagkatalógust. Ez után nyissuk meg a kép Kép ablakát. Megjelenik a Kép ablak. A feldolgozáshoz ismerni kell bizonyos a’priori értékeket (lásd 2.4.1.). Ehhez válaszuk a Setting → Project properties… menüpontot. Megjelenik a Project properties ablak. Itt töltsük ki a Station a’priori fi, Station a’priori lambda, és A’priori camera const mezőket. Ezeket a mérésekből ismerjük (lásd. lásd 2.4.1.).). Az értékeket fokba adjuk meg! Kattintsunk az OK gombra. A mezők feltöltődnek a projektbe. A csillagok megjelenítéséhez válasszuk a Calculation → Put stars on image menüpotját. A csillagok megjelennek a Kép ablakban.
  • 25. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 25. oldal Parancs Hatás A korábbiak szerint keressük meg a fényforrások helyét a Calculation → Intensity Maximums menüpont segítségével Megjelennek a képen a fényforrások helyei. A csillagokat együttesen tudjuk manipulálni. Ehhez válasszuk a Calculation → Intensity Manipulate Stars… menüpontot. Megjelenik a Manipulate stars on image dialógusablak. Itt adjuk meg az elforgatási (Rotate angle), és eltolási (Offset X, Offset Y) értékeket. Kattintsunk az OK gombra. A Kép ablakon a csillagok a megfelelően megadott paraméterek alapján elmozgatásra kerültek. Az előző két lépést addig ismételjük, amíg közelítőleg a csillagok a helyére nem kerülnek. A csillagok közelítőleg illeszkednek a képre. Azonosítsuk a fényforrásokat, és a csillagokat a kontextus menü Matching parancsával. A csillagok a legközelebbi fényforrás helyére ugranak. Ellenőrizzük a megoldást. 3.7. Képek tájékozása Miután azonosítottuk az egyes képeken a fényforrásokat a csillagokkal, következhet az egyes képek tájékozása. Ennek elméleti hátterét az 2.4.2. rész tárgyalja. A kép tájékozásához be kell állítanunk először az egyes képek elkészültének idejét. Utána futathatjuk végig rajtuk a korábban ismertetett interpolációs módszert, mely tájékozza az egyes képeket. Ezek lépéseit nézzük meg most. A továbbiakban feltételezzük, hogy a csillagok digitalizálása megtörtént. Figyelem, minden képen legalább 6 csillagot digitalizálni kell.
  • 26. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 26. oldal Parancs Hatás Kattintsunk arra a képre az egér jobb gombjával, amelyiknek a készítésének az idejét be akarjuk állítani. Megjelenik a képhez tartozó kontextus menü. Válasszuk ki Properties… menüpontot. Ez elérhető a Kép ablak kontextus menüjéből is. Megjelenik az Image Properties dialógusablak. A Time (GAST) mezőbe írhatjuk be az időpontot óra formátumba, majd kattintsunk az OK gombra. A megadott időpont beállításra került. Végezzük el a többi kép esetén is az időbeállításokat. Minden képnek adott a készítésének időpontja GAST rendszerben. Válasszuk ki a Calculation → Interpolation menüpontját. Megjelenik az Output ablak. Itt megtekinthetőek az eredmények. Az Image properties ablakba megtekinthetővé váltak az egyes képek normálisának értékei. Lehetőségünk van egyes képeket kivenni a számításból. Ehhez a Projekt ablakon a kiválasztott kép csomópontjára kattintsunk jobb gombbal. A kontextus menüből válasszuk ActivateDeactivate Image parancsot. A kép pirosra váltott. Ez jelzi, hogy a feldolgozásba a kép már nem vesz részt. Újból kiadva az ActivateDeactivate Image parancsot a kép újra számításba kerül. 3.8. Álláspont koordinátáinak meghatározása Álláspontunkat két fajta módszerrel tudjuk meghatározni. Mindkettő módszer a Calculation menüpont segítségével érhető el. A továbbiakban nézzük meg ezt a két módszert. 3.8.1. Álláspont meghatározása középképzéssel A módszer elméleti hátterét az 2.4.3. alfejezet részletezi. A továbbiak feltételezik, hogy a korábbi lépések már meghatározásra kerültek. Parancs Hatás Válasszuk ki a Calculation → Mean values menüpontját. Megjelenik az output ablak, mely a számított eredményeket tartalmazza. Tekintsük át, mit tartalmaz a kimenet. Megkapjuk először is az álláspontunk szintfelületi földrajzi koordinátái fokban (1). Ezen kívül meghatározása kerültek az egyes normálisok középértéktől való eltérések. A deklináció a (2), míg rektaszcenzió (3) eltérései a keretekben láthatóak (9. ábra).
  • 27. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 27. oldal 9. ábra - A közepeléses módszer kimenete 3.8.2. Álláspont meghatározása forgástengely keresésével Ezzel a módszerrel a közepeléses módszerünk eredményét pontosíthatjuk. A programban alkalmazott módszer, mellyel a forgástengely meghatározását a szoftver végzi az 2.4.3. rész képletei alapján, egy sztochasztikus hegymászó algoritmus. Az algoritmus kezdőértéknek a közepeléses módszer eredményét veszi. Ez egy nem determinisztikus módszer. Ezért szükséges lehet többszöri futtatásra, hogy biztosak legyünk abban, hogy a megoldásunk optimális. Válasszuk ki a Calculation → Rotate axis… menüpontot. Megjelenik a Parametrizing rotate axis menüpont (10. ábra). 10. ábra - A forgástengely keresése módszer paraméterező ablaka Itt megadhatjuk az iterációk számának maximumát (1), továbbá a leállási feltételt (2), mely a két egymást követő szórásérték különbségének felső határa. A részeredmények kiíratását bizonyos iteráció számonként az Iteration number to write state megadásával állíthatjuk be (3). Végül az egyes állapotok közötti lépésköz maximális értékét a Step value mező segítségével szabályozhatjuk (4). Az OK gombra kattintva az algoritmus elindul, és az eredmények az Output ablakban kerülnek megjelenítésre.
  • 28. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 28. oldal 4. Fejlesztői dokumentáció A fejezet a program készítésének folyamatát ismerteti, további fejlesztések végrehajtásához kíván segítséget nyújtani. Az első szakaszban a program specifikációját, az alkalmazott szoftverfejlesztési metodikát, az alkalmazott eszközöket, illetve ezek használatának indoklását kívánjuk tárgyalni. Az ezt követő részben a program egységes szerkezetét elemezzük. Utána az egyes programkomponensek ismertetésére kerül sor, kitérve a főbb megoldásokra, algoritmusokra. A program készítése során felmerülő kérdések elméleti hátterének megvilágítása, és megoldásuk a második fejezetben olvasható, itt csupán azok megvalósítására kívánok koncentrálni. A fejezet végén a tesztesetek, és további fejlesztési lehetőségeket tárgyalom. 4.1. Követelmény specifikáció A programmal szemben támasztott követelményeket az alábbiakban foglalom össze. • A szoftvernek kicsinek és kompaktnak kell lennie, hogy könnyen hordozható legye, lehetőleg egy futtatható állomány létrehozása a cél. A feladat nem igényli egy komplex program létrehozását. • A programot két rétegre kell osztani. Egyrészről a logikai rétegnek kell megvalósítania a matematikai, tárolási, feldolgozási megoldásokat. Továbbá az így már implementálásra került részeknek grafikus felületet kell biztosítani, hogy a felhasználó paraméterezni tudja azokat (felületi réteg). • A programnak mindenképpen rendelkeznie kell grafikus felhasználói felülettel (GUI), melynek segítségével az adatok betölthetőek, a képek mérése elvégezhető, valamint az eredmények értékelhetőek, mind grafikusan, mind numerikusan. • A több betöltött kép együttes szemléltetése végett MDI megoldást kell választani. • A programot lehetőleg a legtöbb platformon tudni kell futtatni, nem függhet a szoftver vagy hardver kialakításától. • A programnyelv megválasztásánál fontos, hogy annak segítségével a program fejlesztése hatékonyan és gyorsan történjen, tehát hogy megfelelő absztrakciós szinten dolgozhassunk, lényegesebb futásidejű teljesítménycsökkenés nélkül. • A programnyelv választása során figyelembe kell venni, hogy az rendelkezzen kényelemes integrált fejlesztői környezettel (IDE).
  • 29. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 29. oldal • Objektum-orientált módszertant kell alkalmazni. • Érdemes a programba nyelvi támogatást építeni. 4.2. Alkalmazott technológiák A követelmény specifikáció alapján a döntés a .NET 4.0 keretrendszerben történő megvalósítást indokolja. Ezen technológia segítségével a programfejlesztés gyors és hatékony, számos függvénykészlet, fejlett grafikus eszköztár áll rendelkezésre. Ezen kívül a keretrendszer elrejti előlünk a speciális hardver, szoftver megoldások speciális tulajdonságait. A futtató környezetnek köszönhetően az elkészített program biztonságosabb is, mintha natív kódot használnánk. A technológia teljes körűen a Microsoft operációs rendszereken elérhető, bár létezik megoldásuk más platformokra is (Mono), de ezek nem mindig támogatják a legfrissebb verziókat. E hátrány ellen szól, hogy a Microsoft operációs rendszerei rendkívül elterjedtek (2011 piaci részesedés 92,2% [3]). A fejlesztés nyelvének a C# nyelvet választottam, amelynek absztrakciós szintje megfelelő a feladat végrehajtásához. A számos nyelvi elemkészlet segít a fejlesztés során. Ilyenek az objektum-orientált fejlesztési lehetőségek, delegáltak, a dokumentációs képességek, a párhuzamosság nyelvi támogatása, és egyéb számos tulajdonság. Továbbá a technológiához és a programnyelvhez tartozik egy igen népszerű, és rendkívül hatékony fejlesztői környezet, ez pedig a Microsoft Visual Studio. A szakdolgozat készítése során a 2010-es verziót használtam, méghozzá az Ultimate diák verzióját. A követelményspecifikációban leírtak alapján MDI alkalmazás létrehozása szükséges. A korábban eldöntött eszközök a Windows Forms alkalmazását teszi szükségessé. A Windows Presentation Foundation (WPF) technológia nem nyújt támogatást direkten MDI alkalmazások létrehozásához jelen verziójában. Végül összefoglalásképpen tekintsük át az alkalmazni kívánt eszközöket: • Technológia: .NET 4.0 • Programnyelv: C# • Fejlesztő környezet: Visual Studio 2010 Ultimate • Grafikus felhasználói felület létrehozása Windows Forms segítségével
  • 30. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 30. oldal • Elsődleges cél operációs rendszer: Windows 7 4.3. Alkalmazott szoftverfejlesztési módszertan A fejlesztés során a gyors alkalmazásfejlesztés módszertanát használtuk (Rapid Application Design, RAD). A módszert még a 80-as években dolgozták ki [4]. Ennek során először egy gyors, előzetes rendszerterv készült. Ezután különböző prototípusokat kerültek megvalósításra. Az egyes programverziókat konzultációk során pontosítottuk, a felmerült igényekhez igazítottuk. Az egyes prototípusok során jelentkező problémákat megvitattuk, majd megoldottuk. Így haladt a fejlesztés a végleges verzió felé. Azt elérve megtörtént a program tesztelése, a jelen részletes dokumentáció elkészítése (11. ábra), valamint a végleges megoldás előállítása. A program által megoldott probléma igen fiatal, szakirodalma gyér. Ezért is volt indokolt ennek a fejlesztési módszertannak a használata, ugyanis előre nem látható problémák merültek fel. Továbbá e módszertant nagymértékben támogatják az alkalmazott technológiák. 11. ábra - A gyors alkalmazásfejlesztés (RAD) logikája 4.4. Előzetes tervezés Az előzetes tervezés során összeírásra kerültek azok a részfolyamatok, amelyeket a felhasználónak a feladat végrehajtásához meg kell tennie, illetve milyen alternatív lehetőségei vannak egy-egy részfeladat megoldásához. Ezt egy használati eset diagramban került összegzésre.
  • 31. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 31. oldal 12. ábra - A program használati eset diagramja Először a felhasználó a képeket, majd az időponthoz tartozó XEphem fájlt tölti be a programba. Majd következhet a csillagok beazonosítása, mely kézi kijelöléssel (digitalizálással) történik. Ezután lehet a képeket tájékozni. Ezt az interpolációs módszerrel oldja meg a program. Egy kimeneten az eredményeket meg kell jeleníteni. Ha túl nagyok már itt az eltérések, a felhasználó visszatérhet az előző részfeladathoz, és ellenőrizheti a pontazonosítást. Ezt követően történhet meg az álláspont koordinátáinak a meghatározása. Ennek során lehetőségünk van a közepeléses, vagy a forgástengely módszer alkalmazására. Amennyiben a felhasználó nem elégedett a közepeléssel kapott eredménnyel, azt pontosíthatja a másik módszerrel. 4.5. A program osztály szerkezetének áttekintése A program két rétegre oszlik. Ezek a következőek:
  • 32. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 32. oldal • Logikai réteg: feladata kettős, egyrészről projekt összefogása, a projektben található osztályok megvalósítása, ezen kívül a rajtuk elvégzendő műveletek megvalósítása. • Felületi réteg: feladata a logikai réteg osztályaiból létrehozott objektumok kezelése, megjelenítés, a rajtuk végrehajtható műveletek paraméterezése. A program osztályszerkezetének UML osztálydiagramját a 14. ábra, a csomagkapcsolati diagramját a 13. ábra mutatja. Ebből kitűnik, hogy a logikai szint két további névtérre oszlik. Egyrészről a Galaxy csomag valósítja meg az adattárolási kérdéseket, ezen kívül néhány adatkeresési, elemzési algoritmust is implementál. Az AndromedaMath névtér valósítja meg a matematikai objektumok osztályait. Ez az osztály további két névteret tartalmazz. Egyrészről a Matrix névtérben került implementálásra a mátrix osztályok, melyek tartalmazzák a feldolgozáshoz szükséges fontosabb mátrix műveleteket. Az ArtificalIntelligencie osztály a mesterséges intelligenciára épülő osztályok megvalósításait tartalmazza. A logikai réteg további statikus osztályokat tartalmaz a gyakori feladatok végrehajtásához. A logikai szinthez a felületi réteg a Project egy a MainForm osztályban példányosított objektumával csatlakozik. Ezen Project objektumok segítségével éri el az adattárolási, keresési és elemzési eljárásokat. A fő grafikus felület három típusú ablakot kezel gyerekként. Ezek az ImageForm, mely a képek megjelenítéséért, a csillagok digitalizálásért felel, a ProjectForm, melyeken a projektünket manipulálhatjuk, valamint a StarForm-ot, mellyel a csillagkatalógust kezelhetjük. Főleg ezek segítségével hívhatunk elő további ablakokat, melyek esetén egyes algoritmusokat paraméterezhetünk.
  • 33. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 33. oldal 13. ábra - Andromeda csomagkapcsolati diagramja Az osztálydiagram nem tartalmazza a fő Program osztályt, illetve a betöltést és mentést segítő dialógusablakokat mivel ezek számunkra nem lényegesek. A továbbiakban az egyes osztályokat, és feladataikat részletezem az egyes rétegek szerint csoportosítva.
  • 34. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 34. oldal 14. ábra - A program osztályszerkezete
  • 35. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 35. oldal 4.6. A Logic névtér Mint már említettem a logikai réteg feladata a program adattárolási logikájának megvalósítási, illetve az esetenként rajtuk végrehajtandó keresési, manipulációs feladatok végrehajtása. Az alábbi ábrán tekinthető meg azon osztályok, melyek nem egy belső névtérhez tartoznak (15. ábra). Az UML diagramon nem lett feltüntetve az interfészből örökölt függvények. 15. ábra - A Logic névtérben közvetlenül elérhető osztályok A névtéren belül található a Project osztály, mely az adattárolást fogja össze. A MainForm osztály – mely a főablakért felel – ezen osztályból példányosít egyet. Ezt a példányt tudjuk manipulálni. A Project osztály továbbá példányosít egy Catalogue, és egy StarImage listát, melyek a Galaxy névtér fő osztályai. Ezen kívül ennek az osztálynak a feladata a háttértárra mentés is. Ez szerializációval lett megoldva. A Version mező segítségével azonosíthatjuk, hogy melyik Project verziójú programot is használjuk. Ennek előnye a későbbi fejlesztések esetén jelentkezhet. A mentés során a StarImage osztály Image objektuma is kiírásra kerül. Ennek következtében, mivel egy kép viszonylag nagyméretű (30 MB), az elmentett project fájl is nagyméretű lesz. Előnye, hogy nem kell magunkkal hordozni a képek fájljait külön. Ez az osztály továbbá biztosítja az elmentett fájlok visszatöltését is. A névtérben található IWorker interfész egységes felületet biztosít azon osztályok eljárásainak, melyek időigényes munkát végeznek. Ezen interfész megvalósítása esetén, egy feladat hozzákapcsolható a később ismertetésre kerülő, és a felületi rétegben található ProgressBarFormmal. A ProgressBarState tulajdonsággal a feldolgozottság mértékét
  • 36. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 36. oldal állíthatjuk, míg a StateMessage tulajdonsággal információkat közölhetünk a feladat állapotáról. Végül egy statikus osztály is implementálásra került Utilities néven. Ide azok az általános eljárások kerültek, melyekkel gyakran kell dolgoznunk a program egyes részeiben, de logikailag semmilyen más névtérbe nem sorolhatóak. Egyelőre egyetlen eljárást valósít meg, mely a [fok:perc:másodperc] formátumot fokká konvertálja. A későbbi esetleges fejlesztések esetén az osztály bővülhet. A következőekben nézzük a logikai rétegben található további névtereket. 4.6.1. A Galaxy névtér A Galaxy névtér UML diagramja az 16. ábra mutatja. Az ábrán feltüntettem a Project osztályt is mivel ehhez a névtérhez kötődik. Az UML diagramon nem lettek feltüntetve az interfészből örökölt függvények 16. ábra - A Galaxy névtér
  • 37. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 37. oldal A továbbiakban tekintsük át az egyes osztályok feladatait és fontosabb eljárásait. A névtér szerkezete a következő: a StarImage osztály tartalmazza a betöltött fényképet, és egy PreliminaryImage objektumot. Ezen objektum tartalmazza a bedigitalizált csillagokat a képen. A StarImage osztály továbbá példányosítja a LightSource osztályt, mely a fényforrások helyét tartalmazza. Ezen információkból előálló objektumot nevezzük ezután csillagképnek. A fontosabb eljárások az alábbi táblázatban láthatóak. Függvény név Rövid leírás SearchIntensityMaximums A képen intenzitás maximumot keres CalculateStatistics Statisztikai adatokat számítja ki DeleteStarsInAImageDistance Csillagok törlése, melyek egy bizonyos környezetben nincsenek a képen A képen az intenzitásmaximumok meghatározása két lépésben zajlik. Először Végigmegyünk a kép pixelein, és kigyűjtjük egy listába azokat, amelyek intenzitásértékei nagyobbak egy megadott értéknél, majd a listába összevonjuk az egy csillagnyi pixel távolságra lévő elemeket úgy, hogy képkoordinátáikat a zöld sávbeli intenzitás értékeikkel súlyozzuk. A CalculateStatistics ugyancsak végigfut az összes pixelen, és átlagot számít: hisztogramot készít a pixelek értékeiből. Ezek időigényes feladatok, ezért a StarImage osztály implementálja az IWorker interfészt. A LightSource osztály feladat a képen kijelölt fényforrások definiálása. A StarCatalogue osztály tárolja a csillagokat egy listában. Az osztály ehhez egy BidingList<> absztrakt osztályt valósít meg. Ennek segítségével később a megfelelő GUI vezérlőhöz könnyen csatlakoztatható. Ezen kívül ugyanennek az absztrakt osztálynak megvalósítja a rendezési funkcióját is, így később majd rendezhető is lesz az adathalmaz a megfelelő oszlopnevek segítségével. Fontosabb eljárásai az alábbi táblázatban láthatóak. Függvény név Rövid leírás LoadStarsFromFile Egy fájlból betölti a katalógust. A fájl az XEphem kimenete Name, RA, Dec, VMag formátumban SearchStar Név alapján megkeres egy objektumot A Star osztály valósítja meg egy egyedi csillag adatainak a tárolását. Itt kerül tárolásra a csillag rektaszcenziója, deklinációja, a fényességének értéke.
  • 38. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 38. oldal Egy csillag több képen is digitalizálásra kerülhet, de egy csillag csak egyszer fordulhat elő a katalógusba, ezért a digitalizált csillag és a katalógusban található csillag között kapcsolatot kell létesíteni. Az ImageStar osztály ezt a feladatot végzi el. Az Image mezőjében lévő képen megadja a Star mezőjében található csillag képkoordinátáit. PreliminaryImage az előzetes képek osztálya. Egy előzetes képhez (StarImage objektum) egy csillagkép tartozik. Ez fogja össze a csillagok fényképre leképződő helyét a fényképen, vagyis az ImageStar objektumokat. Ennek az osztálynak továbbá az is a feladata, hogy a bennük lévő olyan objektumokat, melyek koordinátával rendelkeznek, egy megadott képi koordinátarendszerbe helyezze el (lásd 2.4.1.). Ez főleg igaz a Calculation eljárásra, mely a csillagkatalógus adatokból számítja a csillagok előzetes helyét. Tehát ez az eljárás az egyes csillagoknak megfelelő képkoordinátákat egy képi koordinátarendszerbe adja meg. Így lehetőségünk lesz ezt az objektumot is úgy kezelni, mintha egy kép lenne, így nem a felületi rétegnek kell a transzformációkkal foglalkoznia. Az osztály fontosabb eljárásai az alábbi táblázatban láthatóak. Függvény név Rövid leírás SearchStarOnImage Az előzetes képen egy csillagot keres meg egy adott ponttól bizonyos távolságra SearchStarByName Csillag keresése név alapján Calculation Előzetes kép számítása a csillagkatalógus adatai alapján (lásd második fejezet) A Galaxy névtér ezen kívül tartalmaz még egy Calculation nevű statikus osztályt is, mely a hagyományos megoldásokat alkalmazza a feldolgozás során. A két eljárásai és leírásuk az alábbi táblázatban láthatóak. Függvény név Rövid leírás InterpolationMethod Képek normálisának meghatározása interpolációs módszerrel (lásd második fejezet) SolveStationCoordinateWithMeanMethod Koordináták meghatározása középképzéssel (lásd második fejezet)
  • 39. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 39. oldal 4.6.2. Az AndromedaMath névtér A névtér feladata a különböző számításokhoz a matematikai háttér biztosítása. A névtér osztálydiagramját az 17. ábra mutatja. Az UML diagramon nem lett feltüntetve az ősosztályokból, illetve interfészekből örökölt függvények. A névtéren belül található másik Matrix névtér a mátrix osztályokat tartalmazza. Biztosítja a program bővíthetőségét azáltal, hogy osztályhierarchiába van szervezve. A legfelső osztály a Matrix absztrakt osztálya. Az tervezés alapelve az volt, hogy ez az absztrakt osztály olyan műveleteket definiál – virtual kulcsszóval – melyek minden mátrix esetén elvégezhetőek. Amit viszont egyáltalán nem valósít meg, az az adattárolási kérdések. Ezt rábízza a belőle származó osztályokra. 17. ábra - AndromedaMath névtér osztálydiagramja Ilyen osztály a DMatrix osztály. Itt az adattárolás úgy lett megvalósítva, hogy az egyes elemek egy tömbbe kerülnek elhelyezésre. Az indexelés 1-től kezdődően lett megalkotva. Az egyes sor és oszlop sorrendek egy-egy vektorba lettek eltárolva ( 18. ábra).
  • 40. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 40. oldal Így a transzponálás, sor-, és oszlopcserék csupán két érték cseréjét jelenti, és nem kell az adatokat mozgatni. 18. ábra - DMatrix osztály sor- és oszlop hivatkozásai Az SDMatrix osztály a DMatrix osztályból származik. A legtöbb tulajdonságát örökli. Specializálja a mátrixot négyzetes mátrixszá. Így amikor egy DMatrix objektumból az SDMatrix konstruktorán keresztül létre akarjuk hozni, akkor ellenőrzi, hogy a DMatrix objektum négyzetes-e, és ha nem kivételt kapunk. A következő névtér az ArtificalIntelligencie névtér, mely heurisztikákat tartalmazó algoritmusokat gyűjt össze. Legelőször tekintsük át a GradientMethod osztályt. Ennek a feladata az első fejezetben leírt forgástengely meghatározása. Ahogy azt korábban láttuk, ez egy optimalizálási feladat. Erre az osztály egy sztochasztikus hegymászó algoritmust használ. A módszer nagyban hasonlít más metaheurisztikákra. A tabukeresés, és a szimulált hűtés, tekinthető e módszer speciális változatának. A módszer használatának oka, hogy a kiértékelendő függvény rendkívül bonyolult, más numerikus módszerekkel az optimum megtalálása nehéz. Az általam megvalósított algoritmus pszeudokódja az alábbiakban látható [8]. aktuális_állapot = egy a megoldáshoz közeli kezdőállapot ciklus_számláló = 1 while(aktuális_állapot < min_eltérés vagy ciklus_számláló<max_iterációszám) szomszédok = aktuális_állapot-tól egy bizonyos környezetbe véltelenül [min_szomszed, min_érték] = min(fitness_függvény(szomszédok)) if min_érték <fitness_függvény(aktuális_állapot) thencontinue aktualis_állapot = min_szomszéd end while
  • 41. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 41. oldal Először középérték segítségével meghatározza a program a kezdőállapotot. Majd állapotról-állapotra halad. Egy iterációs ciklusban az adott állapot környezetében véletlenül választ pontokat egy adott környezetben. Ezután meghatározza ezen szomszédok fitnesz értékét, ami nem lesz más, mint a korábban tárgyalt szórás értéke, ugyanis ezt kell minimalizálnunk. Amennyiben a legkisebb fitnesz értékű szomszéd kisebb szórással rendelkezik, mint az aktuális állapot, akkor elfogadjuk azt jobb állapotnak, és ez lesz az új aktuális állapot. Amennyiben a feltétel nem teljesül, elvetjük, mint lehetséges megoldást. Az algoritmus egy aktuális állapotban az elérhető legkisebb irány felé lép el, ezért mohó algoritmus. A módszer hátránya, hogy az optimum megtalálása nem garantált. A módszer továbbfejleszthető úgy, hogy az előző állapotra ne lépjen vissza (tabukeresés), vagy az a környezet csökkenthető a futás során, melyből az algoritmus a véletlenül választott pontokat veszi (szimulált hűtés). Ezek segítségével elkerülhető az optimumba ragadás. Mivel mi közel vagyunk a lokális minimumhoz, nincs szükség ilyen fajta specializált megoldásokra. Az osztály tulajdonságokat biztosít a megfelelő paraméterezéshez. Ezek a következőek. Függvény név Rövid leírás MaximumNumberOfIteration Az iterációk maximális száma. MinimumResidualValue A két egymást követő lépésben a szórás értékek különbsége ennél az értéknél kisebb, akkor az algoritmus leáll. StepValue A folytonos térben a diszkrét lépés mértéke. PutStateInIteration A megadott iterációként kerül kiírásara a köztes állapot. Az osztály lelke a SolveStationCoordinatesWithFindingRotateAxis eljárás. Ez implementálja a korábban leírt algoritmust is. Az osztály továbbá megvalósítja az IWorker interfészt, mely az időigényes feladatok esetén a köztes állapotok jelzésére szolgál. A Galaxy névtér ezen osztályokon kívül még magába foglal egy általános matematikai eljárásokat tartalmazó statikus osztályt, a MathUtility-t. Ez néhány nagyon fontos matematikai eljárást valósít meg. Ezek a következőek.
  • 42. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 42. oldal Függvény név Rövid leírás Distance Távolág meghatározása síkon, illetve térben. VectorNormL2 L2 vektor norma meghatározása. GaussElimination Gauss elimináció végrehajtása. DotProduct Skalár szorzat térben. RotateMatrix Forgatási mátrix előállítása térben szögekből, illetve síkon. A GaussElimination eljárás egy hagyományos Gauss eliminációt végez. A megoldandó feladatok körére ez az eljárás megfelelő, értem ez alatt azt, hogy nem kell számítani numerikus robbanásra a rosszul kondicionált egyenletrendszerek miatt, illetve, az az eset sem fordulhat elő, hogy valamely főelem nulla lesz a futás során. 4.7. GUI névtér 19. ábra - GUI réteg osztálydiagramja A korábban a logikai réteg által megvalósított eljárások, már alkalmasak arra, hogy programozható módon végrehajtsuk a feldolgozási folyamatot. Erre alapozva el lehetett
  • 43. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 43. oldal készíteni a program grafikus felhasználói felületét. A névtér UML osztálydiagramja a 19. ábra mutatja. A GUI névtér minden osztálya a feldolgozási folyamatot támogatja. A legtöbb ablak elérhető a főablakból. Pár ablak csupán más ablakokból érhető el. Ezek különböző felhasználói eseteket jelentenek. Ezeket az alábbi diagram szemlélteti (20. ábra). 20. ábra - Az ablakok felhasználói eseteinek diagramja 4.7.1. A MainForm osztály A névtér lelke a MainForm főablak osztály, amely egy MDI szülőablak. Ez tartalmazza a ProjectForm osztályt, mely segítségével a projektben található képeket tölthetünk be, zárhatunk le, és a StarForm osztályt, mely segítségével a csillagkatalógust manipulálhatjuk. Az ő feladata továbbá a folyamatosan megnyitott ImageForm-ok nyilvántartása is egy listában, melyeken digitalizálhatunk, azonosíthatjuk a csillagokat a képeken. Erre azért van szükség, mert az egyes StarImage objektumok nincsenek hozzákötve a megjelenítő ablakukhoz, hanem egy külön listában a Project objektumon belül léteznek. Ennek köszönhetően az egyes ImageForm ablakok bezárhatóak, majd megnyithatóak. A korábban már részletezett feldolgozási folyamatot a MainForm úgy szabályozza, hogy bizonyos menü elemeket akkor aktivizál, amikor egyes információk már meghatározásra kerültek. Ezt szemlélteti az alábbi leegyszerűsített állapotdiagram (21. ábra). Az interpolációs módszer menüpontja akkor elérhető, hogyha van olyan kép, ahol
  • 44. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 44. oldal van 6 digitalizált csillag. Az álláspont meghatározásának módszereihez tartozó menüpontok, pedig csak 2 tájékozott képszám felett lehetséges, azaz ezek esetén az alfaNorm és alfaDelta értékei nem null étékek. 21. ábra - A MainForm leegyszerűsített állapotdiagramja A MainForm fontosabb eljárásai az alábbi táblázatban láthatóak. Függvény név Rövid leírás LoadImage Kép betöltése dialógus ablakon keresztül AddNewStarImageWindow Új csillag ablak létrehozása már betöltött StarImage objektum segítségével OpenStarCatalogue Csillag katalógus ablak megnyitása LoadCatalgoue Katalógus betöltése dialógusablak segítségével ShowStarCatalogue Csillagkatalógus ablakát jeleníti meg MappingEnableOptions A GUI felületeken elérhetővé tesz olyan opciókat, melyek elvégezhetőek Az osztály tartalmaz továbbá egy LoadingImage nevű beágyazott osztályt. Létrehozására azért volt szükség, mivel egy kép betöltése időigényes feladat, ezért azt egy ProgressBarFormhoz kell kötni. A LoadingImage osztály ezért implementálja az IWorker interfészt. A betöltési folyamatot az osztály tulajdonságai segítségével paraméterezhetjük fel. Így a FileNames mező tárolja azt az információt, mely kép(eket) kívánjuk betölteni,
  • 45. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 45. oldal valamint a konstruktorba adhatjuk meg, melyik Project, és ProjectForm objektumot frissítsük. A betöltési munkát a LoadingImageJob eljárás végzi. 4.7.2. Az ImageForm osztály A következő fontos megjelenítési osztály az ImageForm, mely a képeken történő csillagazonosítást teszi lehetővé. Az osztály feladatai közé tartozik a fénykép megjelenítése, kicsinyítése, nagyítása, mindezt együtt a rajta levő digitalizált elemekkel, vagyis az előzetes képpel. Itt a feladat nehézsége, a különböző koordinátarendszerek egyesítése. Amennyiben egy képet csak megjeleníteni kívánunk egy ablakban, akkor a kép és az ablak koordinátarendszere azonos. Probléma akkor keletkezik, ha a képet eltoljuk valamilyen irányban, illetve ha skálázzuk (22. ábra). Azzal kapcsolatban nincs feladatunk, hogy a vetítési egyenletekként kapott képi koordinátákat a kép koordinátarendszerébe transzformáljuk, mert azt a logikai réteg már megoldotta (lásd korábban). Így csupán az eltolást és a skálázást kellett megoldani ebben az osztályban. 22. ábra – Kép és ablak koordinátarendszerek és kapcsolatuk Lépjünk tovább az osztály biztosította szerkesztési funkciókra. Egy ImageForm objektum a beállításoknak megfelelően különböző állapotokba kerülhet, attól függően, hogy a felhasználó milyen műveletet akar végezni. Az egyes egérkattintásokat másként kell értelmeznie. Ennek módját mutatja az alábbi állapotdiagram (23. ábra).
  • 46. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 46. oldal 23. ábra - ImageForm szerkesztőfunkcióinak állapotdiagramja A különböző szerkesztési állapotokat gyorsbillentyűkkel is elérhetjük. Az osztály fontosabb eljárásai a következő táblázatban láthatóak. Függvény név Rövid leírás TransformWindowCoordinateTo ImageCoordinate Az eljárás feladata az ablak koordinátarendszere és a kép koordináta rendszere közötti kapcsolat megvalósítása. TransformImageCoordinateTo WindowCoordinate Az eljárás feladata a kép koordinátarendszere és az ablak koordináta rendszere közötti kapcsolat megvalósítása. Zoom A rajz egy részére közelíthetünk. Draw Ablak megrajzolása, vagy annak egy részének megrajzolása. SelectStar Csillagot választhatunk ki a képernyőn. MarkStar Egy csillagot jelölhetünk meg. DrawPreliminaryImage Csillagok látszóhelyét rajzolja ki az ablak koordinátarendszerébe. DrawLightSources A fényforrások helyét jeleníti meg az ablak koordinátarendszerébe. Ezek közül még a Draw eljárást emelném ki, melynek feladata az ablak frissítése. Ez egy túlterhelt metódus: lehetőségünk van a teljes kép, illetve a kép egy részének a frissítésére. Ez nagyon előnyös, mivel gyakran csupán egy kis területet kell újra rajzolnunk, és ha ekkor a teljes ablakot frissítenénk, akkor szaggatna a kép, pazarolnánk az
  • 47. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 47. oldal erőforrást. Esetünkben gyakran előfordul az az eset, hogy egy csillag kijelölését vagy kiválasztását megszüntetjük. Ebben az esetben igen hasznos ez a funkció. 4.7.3. A ProgressBarForm osztály A következő tárgyalandó osztály a ProgressBarForm. Ennek feladata az időigényes eljárások futtatása, a futás során keletkező részeredmények megjelenítése. Ehhez rendelkezésünkre áll egy állapotjelző (progressbar) és egy szövegmező (textbox). Minden osztály mely megvalósítja az IWorker interfészt – mely a logikai rétegben került definiálásra – az képes valamely feladatát hozzácsatolni ehhez az ablakhoz. Ezt úgy kell megtenni, hogy először az ablak létrehozásakor a konstruktorba meg kell adni az osztályunkat. Ezután a ProgressBarForm osztály MethodDelegate tulajdonságához hozzárendelhető egy olyan függvényt, amelynek visszatérési értéke object típusú (vagy valamely leszármazottja), és nincs bemenő paramétere. Ezután a Start metódus segítségével indíthatjuk el a folyamatot. Ennek révén az ablak két szálat fog elindítani. Az egyik a dolgozó szál lesz, amit a MethodDelegate tulajdonságában határoztunk meg, a másik pedig egy megjelenítő szál, mely az ablak állapotjelzőjét és szövegmezőjét frissíti. Ehhez az adatokat a hozzácsatolt osztály IWorker interfész implementált eljárásaiból veszi. A StateMessage visszatérési értéke kerül a szövegmezőbe, míg a ProgressBarState az állapotjelzőt frissíti. Ennek következtében a dolgozó szálnak, ezeknek az eljárásoknak a visszatérési értékeit kell manipulálnia. Amennyiben a ProgressBarState értéke a felvehető tartományon kívülre mutat (nincs 0 és 100 között), akkor az állapotjelző folyamatosan mozog (Marquee). Amikor a feladat befejeződik a dolgozó szál Stop állapotba kerül, amit a megjelenítő szál érzékel, és leállítja saját magát. Amennyiben az IsClosedWhenReady tulajdonság értéke igaz, akkor az ablak bezáródik, különben nem. A dolgozó eljárásunk visszatérési értéket a ProgressBarForm osztály ReturnValue tulajdonságán keresztül kaphatjuk vissza. A folyamat szekvencia diagramja az alábbi ábrán látható (24. ábra). Most nézzük meg azt a módszert, ahogyan a megjelenítő szál manipulálja az ablak vezérlőit. A Window Forms vezérlők nem szál biztosak. Ezért őket az Invoke eljárásuk segítségével szinkron módon kell meghívni. Ehhez az osztály egy nem publikus metódust használ (SetControlPropertyValue), mely egy általános eljárás a vezérlők tulajdonságainak beállításához szinkron módon. Az ott alkalmazott megoldást a .NET refractoring képességeinek kihasználása tette lehetővé.
  • 48. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 48. oldal Végül a ProgressBarState osztállyal kapcsolatban tekintsük át annak fontosabb eljárásait. Függvény név Rövid leírás Start A feldolgozás elindítása StartJob Dolgozó metódus, mint szál DisplayValue Megjelenítő metódus, mint szál SetControlPropertyValue Control szál biztos elérése 4.7.4. A StarForm osztály A következőekben térjünk át a StarForm osztály ismertetésére. Ennek feladata a csillagkatalógus megjelenítése, annak adatainak manipulálása. A megjelenítés a dataGridView vezérlőben történik. Ebben jelenítjük meg a Project objektumunk Catalogue tulajdonságát, ami StarCatalogue típusú. Mivel ez az osztály a BindingList<T> absztrakt osztály leszármazottja, ezért annak megjelenítését már rögtön adhatjuk át a DataGridView- nak. Ez a gyakorlatban csak annyit tesz, hogy a dataGridView objektum DataSource tulajdonságát ráállítjuk a megfelelő StarCatalogue objektumra. 24. ábra - ProgressBarForm szekvencia diagramja egy feladat végrehajtása során
  • 49. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 49. oldal A megjelenítésen kívül a logikai szinten már a rendezés is megvalósításra kerül. Az osztály a SelectedStar tulajdonságot biztosítja más objektumoknak a kijelölt csillag lekérdezését illetve beállítását. A kontextus menüből számos funkció elérhető a főmenüből is, így nagy részük már a MainForm osztályba megvalósításra került. Ezért az osztály a parent tulajdonságán keresztül a MainForm osztályt hívja a megfelelő parancs végrehajtásához. Az egyes csomópontokhoz a különböző felhasználói interakcióknak megfelelően események lettek hozzárendelve. Ezeket a parancsokat az alábbi táblázatba gyűjtöttem össze. Esemény Külső hívás Parancs megnevezés openInWindowToolStripMenuItem _Click MainForm. OpenStarCatalogue Kiválasztott kép megnyitása ablakban loadImageToolStripMenuItem _Click MainForm. LoadImage Kép betöltése fájlból treeView _DoubleClick MainForm. OpenStarImage MainForm. ShowStarCatalogue Dupla klikkre megnyitjuk a csomópontnak megfelelő elemet closeImageToolStripMenuItem _Click MainForm. DeattachStarImage Bezárunk egy képet showCatalogueToolStripMenuItem _Click MainForm. ShowStarCatalogue Megnyitjuk a katalógust propertiesToolStripMenuItem _Click ImagePropertyForm() Egy kép tulajdonságait jelenítjük meg. 4.7.6. A paraméterező ablakok A továbbiakban azokkal az ablakokkal kívánok foglalkozni, melyek az egyes algoritmusok paraméterezésére, illetve objektumok tulajdonságainak megváltoztatására szolgálnak. Mindegyikben közös, hogy egyszerű konverziókat végeznek a megfelelő szövegdoboz mező-objektum tulajdonságok között. A szövegdobozban adhatja meg a felhasználó az új értékeket, vagy egy algoritmus számára a bemenő paramétereket. Végeredménynek pedig a különböző objektumok változásait tekinthetjük. Továbbá egy- egy algoritmus futása során információt jutathatunk a felhasználó számára. Ezeket az ablakok ProgressBarForm és/vagy OutputForm segítségével valósíthatják meg.
  • 50. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 50. oldal A GradientMethodParametrizeForm feladata a sztochasztikus hegymászó algoritmusának paraméterezése. Miután ez megtörtént, az osztály lefutatja az algoritmust, és a kimenetet OutputFormban jeleníti meg. A köztes állapotokról ProgressBarFrom segítségével tájékoztat. Az ImagePropertyForm feladata egy képhez tartozó információk megjelenítése. Itt megtekinthető a tájékozási értékek, illetve a kép statisztikája. Mivel a statisztika számítása időigényes, a felhasználóra bíztuk ennek számításának szükségességét. A megfelelő gombra kattintva egy ProgressBarForm mutatja a feldolgozottság értékét, és végül az eredmények szövegdobozba kerülnek megjelenítésre. Ehhez a megfelelő StarImage eljárást kell meghívni (CalculateStatistics). IntensityMaximumParamForm osztály segítségével paraméterezhetjük fel az intenzitásmaximumokat kereső algoritmusunkat. A folyamatot egy ProgressBarForm segítségével követhetjük nyomon. Ebben az osztályban is lehetőségünk van statisztika számítására. Ehhez ugyancsak a megfelelő StarImage eljárást kell meghívni. ProjectPropertyForm segítségével a Project objektum egyes tulajdonságait módosíthatjuk. Itt megjelenítésre kerül az álláspont koordinátái is. ManipulateStarsForm osztály segítségével a PreliminaryImage.Stars listában módosíthatjuk együttesen a csillagok koordinátáinak értékeit. Itt megadható elforgatási és eltolási értékekkel számítjuk az új koordinátákat. Ehhez az osztály a megfelelő PreliminaryImage osztályhoz tartozó eljárásokat hívja (Rotate, Offset). Az egyes ablakok és feladatainak összefoglalója az alábbi táblázatban láthatóak.
  • 51. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 51. oldal Ablak Mit állít be, paraméterez fel? Mi a kimenet? Kimenet, folyamat megjelenítése GradientMethod ParametrizeForm GradientMethod objektumot Meghatározott álláspont koordináták a Project objektumban. ProgressBarForm + OutputForm ImageProperty Form Egy StarImage objektum tulajdonságait Megváltozott StarImage objektum. nincs IntensityMaximum ParamForm StarImage. SearchIntensityMaximum eljárást A StarImage. PreliminaryImage. LightSources listát feltölti. ProgressBarForm ProjectProperty Form Project objektum tulajdonságait Megváltozott Project objektum. nincs ManipulateStars Form Rotate és Offset függvényeket Megváltozott PreliminaryImage. Stars objektumok. nincs 4.8. Lokalizáció A követelmény specifikációban rögzített többnyelvűség is megvalósításra került. Ehhez a Visual Studio lokalizációs megoldását használtam. Így minden ablakhoz egy külön nyelvi forrásfájl is létrejött. Az alapértelmezett nyelv az angol, ezen kívül, ha a futtató szálhoz a „hu-HU” beállítás van megadva, akkor az egyes kontrolok magyar nyelven kerülnek megjelenítésre. A beállítás megadható parancssori paraméterként is. A kódba található szövegek lokalizációját úgy oldottam meg, hogy minden kiíratásra kerülő szöveget a GUIStrings forrásfájlba tettem. Ennek előnye nemcsak az, hogy ezt a forrásfájlt nyelv specifikussá lehet tenni, hanem az is, hogy az egyes gyakran használt szövegrészletek egységesek, illetve könnyen módosíthatóak. A lokalizáció révén a futatható állomány mellé egy DLL fájl is létrejött. Ezzel együtt teljes a program. 4.9. Implementációs megkötések A legnagyobb kihívást a program implementálása során a feldolgozási módszer gyér szakirodalma volt. A módszer elmélete bár le volt írva, az egyes feladatok tényleges megvalósítása ránk hárult. Így vizsgálni kellett, hogy például az interpolációs módszerrel
  • 52. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 52. oldal történő képtájékozás esetén a Gauss-eliminációval végzett meghatározása az egyenletrendszernek elég stabil-e, vagy hatékonyabb, stabilabb numerikus módszerre van szükség. Nehézség volt tovább az egyes koordináta rendszerek közötti kapcsolatok feltárása: a II. ekvatoriális rendszer, és álláspont transzformációk felírása, majd a vetítési egyenletekből a képkoordináták előállítása, ez utána kép-ablak koordinátarendszerének összefüggéseinek megteremtése. A képletek implementálása nem mindig járt sikerrel. Ezen problémák leküzdéséhez a kódokat először MATLAB-ban állítottam elő. A program segítségével a pontok térbeli koordinátáit is tudtam szemlélni, és következtetni az esetleges hibákra, kihagyott összefüggésekre. Másik probléma a heurisztikus algoritmus paraméterezésében volt. Ezek az algoritmusok igen könnyen implementálhatóak, szakirodalmuk is nagy. Ellenben egy feladat alkalmazásához azok jó paraméterezése elengedhetetlen. Ha nem találjuk meg ezeket, akkor nem vezetnek megoldásra. Gyakorlati problémaként még felmerült a megvalósítás során a vezérlők szálbiztonságának hiánya. Ezt sikerült megoldani az Invoke eljárás használatával. 4.10. Tesztelés A tesztelés célja a program helyes működésének vizsgálata volt. A tesztelés az egyes prototípusok előállítása végén mindig megtörtént. Az egyes prototípusok és tesztelései az alábbi táblázatban láthatóak. Az egymást követő megoldások kiegészítik egymást, és a korábbi tesztelések is többnyire megismétlésre kerültek. Prototípus és cél Tesztelés 1. prototípus: csillagok digitalizálása, megjelenítése A tesztelés során ellenőrzésre került a vetítési funkció helyes működése fehérdoboz teszteléssel, az ImageForm osztály szerkesztési és megjelenítési funkciói, valamint az intenzitásmaximumok meghatározásának algoritmusa. Integritási teszt a logikai és felületi rétegek között fehér doboz teszteléssel. 2. prototípus: csillagkatalógus beolvasása, összekapcsolása Az ImageForm osztály elemeinek és a StarCatalogue összekapcsolásának tesztelése fekete doboz teszteléssel valósult meg. Néhány teszteset: kiválasztott csillag kijelölése a katalógusban, nincs kiválasztva csillag, csillagadatok módosítása a katalógusban.
  • 53. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 53. oldal Prototípus és cél Tesztelés 3. prototípus: matematikai funkciók létrehozása, mátrix osztályok A korábbi matematikai eljárások tesztelése, mátrix osztályok tesztelése fehérdoboz teszteléssel. 4. prototípus: felületi réteg fejlesztése: ProgrssBarForm, ProjectForm Fehér doboz teszteléssel a ProgressBarForm feldolgozási folyamata lett ellenőrizve. Minden meghívásra megtörtént ez a teszt. Néhány eset: rossz kép, projekt betöltése, az ablak ne záródjon be a feldolgozás végén. A ProjectForm tesztelése főleg fekete doboz tesztestekkel történt. Itt az osztály integritását vizsgáltam a logikai szinttel, illetve a főablakkal. 5. prototípus: álláspont koordinátáinak meghatározása, interpoláció, középképzés A digitalizált adatok alapján az egyes feldolgozási lépések implementálásának tesztelése, megfelelő számú csillagokkal, azok nélkül. Integritási tesztek a logikai és felületi szintek között fekete doboz tesztesetekkel. Funkcionális tesztelés fekete doboz teszteléssel, oly módon, hogy az eredmény összehasonlításra került az ismert megoldással. 6. prototípus: metaheurisztikus algoritmusok Tervben volt egy evolúciós algoritmus implementálása, mely automatikus csillag azonosítást tett volna lehetővé. A megoldás a tesztelésen nem ment át. Ezen algoritmusok paraméterezése nehézkes, ezt nem sikerült az adott időn belül megoldani. A sztochasztikus hegymászó algoritmusa fekete doboz tesztelésen eset át, az eredmények helyességét az ismert megoldással hasonlítottam össze. A továbbiakban a végső tesztelést kívánom részletezni. A logikai réteg alapvető komponensein egységteszteket hajtottam végre. A teszteknek külön osztályokat hoztam létre, és a teszteléshez a fejlesztői környezet támogatta megoldást használtam. Ezen egységtesztek így megtekinthetőek a kódból. Logikai szint egységtesztjei a következőek voltak: • Mátrix osztályok egységtesztjei (DMatrixTest.cs, SDMatrixTest.cs) o Adatfeltöltése, adatkiolvasás (DMatrixTestDataLoading) o Átméretezés (DMatrixTestDataLoading) o Mátrix műveletek ellenőrzése (DMatrixTestFunctions) Transzponálás Sor, oszlop csere Mátrixszorzás • MathUtility osztály egységtesztjei (MathUtilityTest.cs) o Gauss elimináció ellenőrzése (GaussEliminationTest)
  • 54. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 54. oldal Létezik megoldás Nem tudja megoldani az egyenletrendszert, de jelzi Egy könnyű egyenletrendszer megoldása Továbbá egységteszten eset át a lokalizációs megoldás is (Localization.cs). Az integrációs tesztek során a grafikus interfész, és a logikai szint kapcsolatait vizsgáltam többnyire fehér doboz teszteléssel. A rendszertesztek során a felhasználói felületet teszteltem fekete doboz teszteléssel. Továbbá a programot több különböző rendszeren kipróbáltam. A funkcionális tesztelés során ismert mérési eredményeket hasonlítottam össze a program által szolgáltatott eredményekkel. Ezeket az alábbi táblázat tartalmazza. Eredmények összehasonlítása Program által szolgáltatott érték Irodalom alapján Elméleti hibátlan Φ Λ Φ Λ Φ Λ [o ] [o ] [o ] [o ] [o ] [o ] I. mérési sor 47,482133 19,057891 47,485470 19,059337 47,484381 19,053321 II. mérési sor 47,481591 19,047834 47,484445 19,058619 47,484381 19,053321 Az irodalmi adatokat a [1] alapján vettem. Az eltérés abból adódik, hogy az irodalmi példa, és a program megoldása más csillagok azonosítását, és más csillag-képkoordinátákat tartalmazz. Azonban elmondható az, hogy az eltérés a módszer hibahatárán belül van. Így a program funkcionálisan megfelelőnek nyilvánítható. A tesztelés során felmerült hibák javítva lettek. 5. Összefoglalás A szakdolgozat célja egy egyszerű zenitkamera méréseit feldolgozó program elkészítése volt. Véleményem szerint ezt sikerült megoldanom. Egy jól használható felhasználói interfész segítségével a képkoordináták kimérése egyszerűen megoldható, valamint a beépített feldolgozó eljárások segítségével megkapható álláspontunk szintfelületi földrajzi koordinátái. A tesztelés során bebizonyult, hogy a szolgáltatott eredmények a megbízhatósági szinten megegyeznek az irodalomban közölt értékekkel. Véleményem szerint a program készen áll az esetleges használatra.
  • 55. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 55. oldal Az objektum-orientált megvalósításnak köszönhetően a program fejlesztése könnyen folytatható. Ezzel kapcsolatban szükséges lenne másfajta pontazonosítás beépítésére. Ezen kívül célszerű lenne a képkoordináták meghatározásának a szakirodalomba közölt, de nem megvalósított más megoldásának implementálására. Célszerű lenne továbbá másfajta forrásból származó csillagkatalógusok beolvasási lehetőségének biztosítása. Ennek továbbfejlesztéseként a program akár számíthatná is a látszóhelyek koordinátáinak értékeit. A programot ezen kívül fel lehetne készíteni arra is, hogy egy kamerával együtt dolgozva a mérési folyamatot egyesítse a feldolgozási folyamattal. Az egyszerű zenitkamerával végzett helymeghatározás kutatások tárgya. Sajnos ahhoz, hogy az elérhető pontosságot növelni lehessen, jobb hardverelemekre van szükség, amelyek viszont növelik a költségeket. A célunk pedig ennek minimalizálása. Talán a jobb feldolgozási technikák növelik a szolgáltatott eredmények pontosságát. Remélem dolgozatom is hozzá járult ehhez az eredményhez valamilyen módon.
  • 56. Egyszerű zenitkamera mérőképeit feldolgozó szoftver 56. oldal 6. Irodalomjegyzék [1] Ress Zsuzsanna: Csillagászati helymeghatározás gazdaságos zenitkamera-rendszerrel, Tudományos Diakköri Konferencia, 2008., Konzulensek: Laky Sándor, Nagy Imre, [26] [2] Laky Sándor: Using the differential evolution algorithm for processing star camera measurements, Pollack Perodica, Vol. 5., 2010., [11] [3] http://computerworld.hu/tovabb-csokkent-a-windows-piaci-reszesedese.html, 2011. [4] http://hu.wikipedia.org/wiki/Gyors_alkalmaz%C3%A1sfejleszt%C3%A9s, 2011. [5] Andrew Troelsen: C# 2008 és a .NET 3.5 – 2. kötet, Szak Kiadó, 2009, [976], ISBN 978 963 9863 10 1 [6] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Új algoritmusok, Scolar Kiadó, 2009, [992], ISBN 978 963 9193 90 1 [7] Detrekői Ákos: Kiegyenlítő számítások, Tankönyvkiadó, 1991, [684], ISBN 963 18 3329 1 [8] Jelasity Márk: Mesterséges Intelligencia I., előadás jegyzet, http://www.inf.u- szeged.hu/~jelasity/mi1/2008/papp-szep-15.pdf, 2011 [9] Tony Northrup, Shawn Wildermuth, Bill Ryan: .NET Framework 2.0 Application Development Foundation, Microsoft Press, 2006 [1014], ISBN-13 978-0-7356-2277-7