Zpracování série snímků úplného zatmění Slunce

Michal Švanda, 2. ročník, fyzika

Úplné zatmění Slunce je jev, který se nekoná každým rokem a obyčejný smrtelník jen obvykle nevidí vícekrát než jednou za život (zda-li pak vůbec). Astronomové pořádají za tímto zázrakem nebeské mechaniky hromadné výjezdy, protože jen tak lze získat ze Země pozorování vnější části sluneční atmosféry - koróny.
11. srpna 1999 jsme měli příležitost vidět tuto událost nedaleko našich hranic. Proto jsme neváhali a vyrazili směrem k maďarskému Balatonu, kde jsme také úplné zatmění odpozorovali a vyfotografovali (viz reportáž).

Cílem většiny expedic je získat sérii snímků koróny pořízených v různých expozičních časech - dle délky expozice se tak zabere jen určitá část koróny. Abychom získali povšechnou informaci, snímky v závěru skládáme. Lze to udělat ručně v každém pořádném programu pro zpracování obrazu na PC (např. v Adobe Photoshopu), ale je to práce únavná a člověk navíc neví, co přesně vlastně dělá.
Rozhodl jsem se tedy využít některých schopností IDL a především toho, že vím, co se snímkem provádím a tedy tuším, co dostávám jako výsledek.

Princip:

Princip zvýraznění koronárních struktur je asi následující (mnohokrát osvědčená metoda): každý snímek se rozmázne (ve Photoshopu se to dělá např. radiálním rozostřením, což podle mne preferuje radiální směry v koróně, což není úplně přesně to, co bychom potřebovali; já jsme použil mediánový filtr s velikostí buňky 7 pixelů, která se osvědčila). Získáme snímek, který ukazuje jakési pozadí. Odečtením pozadí od původního snímku získáme výrazné struktury - tedy koronární paprsky, o které nám jde především.
Tímto způsobem získám sadu koronárních paprsků - každá délka expozice zabere určitou část z nich, takže kolem slunečního disku vytvoří jakýsi radiální pás - ostatní části snímku jsou v důsledku odečtu vyhlazeny. Sérii takto získaných struktur posčítáme a tím vlastně pokryjeme celou nafotografovanou korónu. Protože jsou získané výsledky nekontrastní, je potřeba je vytáhnout, což znamená aplikaci nějakého filtru na celý obrázek.
Po mnoha pokusech se mi jako nejlepší filtr pro zvýšení kontrastu osvědčil arcusinus. Před jeho použitím je ale třeba obrázek normovat (tedy jej vydělit maximálním prvkem, protože arcusinus je definován pouze do jedničky). Samozřejmě filtrační funkci lze měnit zásahem do zdrojového kódu.
Je jasné, že aby sčítání fungovalo tak, jak má, je zapotřebí, aby všechny obrázky měly stejný rozměr (použil jsem 550×350 bodú - lze měnit zásahem do zdrojového kódu) a aby se na nich Slunce vyskytovalo pokaždé na stejném místě a mělo stejný rozměr (ideálně aby bylo uprostřed a kulaté :-) ). Pokud při pozorování používáte hodinový stroj, tak se vám to zcela jistě podaří zajistit samo. V opačném případě je nutné snímky vycentrovat. Bohužel tuto proceduru neumím v IDL napsat a musel jsem to nakonec udělat ručně ve Photoshopu :-(. Bádal jsem nad algoritmem hledání centra měsíčního disku několik dní a nepřišel jsem zhola na nic. Problém je o to složitější, že obraz nebude přesně kruhový (záleží na přesnosti skeneru) a krom toho se budou projevovat nejrůznější světelné jevy. V zásadě ani ve Photoshopu neexistuje žádné jednoznačné řešení, pouze tvrdé manuální přeměřování souřadnic.

Jak program vypadá?

Jak se tedy ovládá program? Prostředí vypadá zhruba stejně, jako na následujícím obrázku:

Celý proces probíhá interaktivně za spolupráce uživatele. Uživatel rozhoduje, které z obrázků do sčítání zahrne (tlačítko Add...; načítají se obrázky ve formátu BMP rozměru 550×350 pixelů - jinak je generována chyba programu). Některé detaily dovede již sama od sebe zvýraznit změna barevné škály (tlačítko Change palette). Po změně palety je nutné obrazovku překreslit (tlačítko Refresh, které volá proceduru, jež přepočítá všechny snímky a celkový součet - volat přepočet lze tedy v libovolném okamžiku). Výsledný složený snímek lze uložit ve formátu BMP ( Save as BMP...), GIF (Save as GIF...) nebo vytisknout (Print...).
V okně panelu jsou tři kreslící plochy, z nichž každá má svůj význam - vlevo nahoře je zobrazen poslední načtený snímek, vpravo nahoře pak z téhož snímku vygenerované pozadí (funkcí median) a vpravo dole je zobrazen výsledný složený snímek (lze otevřít zvětšený do jiného okna tlačítkem Zoom). Program lze samozřejmě korektně ukončit stiskem tlačítka Exit.

Jak program funguje?

Programováno pomocí widgetů IDL (generování pomocí editoru IDL). Celý program je řízen událostmi, které rozlišuje jádro IDL a volá v pravou chvíli příslušné procedury, které jsou základem celého programu. Jedná se především o proceduru Prekresli, jejíž hlavní součástí je for cyklus, který pro všechny snímky vypočítá pozadí a přičte je do výsledného snímku (proměnná Celek), který je dále filtrem (normalizace a aplikace arcussinu) upraven do výsledného tvaru do proměnné b.
Data jsou uchovávána ve statickém trojrozměrném poli Struktura - první rozměr značí pořadí obrázku, druhý a třetí pak jejich velikost (pevně 550×350; lze měnit zásahem do zdrojového kódu). A to je vlastně vše. Ostatní procedury jen odpovídají na volání příslušných událostí (stisky tlačítek) a zajišťují tak tisk na tiskárně, ukládání výsledku v různých formátech...

Program mnou napsaný je VELMI POMALÝ*pozn., ukládání pomocí statického pole zřejmě není nejlepší volbou, bohužel programovat v IDL příliš neumím, využíval jsem především znalostí nabitých na přednáškách. Pravdou je, že bych toho mohl do programu zavést více - volitelná velikost rozměru mediánu, výběr ukládání a načítání v jiných formátech i rozměrech atd., dokonce jsem se tím pokoušel zabývat (viz zakomentované řádky ve zdrojovém textu), ale obvykle jsme nad tím strávil odpoledne bez jediného pozitivního výsledku. Je to můj úplně první program v IDL, tak na to prosím berte alespoň trochu ohled :-).

Ke stažení

Ke stažení jsou k dispozici:
zdrojový text widgetů
zdrojový text eventů
ukázková data

Program je distibuován pod licencí GNU-GPL, nedělám si na něj žádné právní nároky. K jeho spuštění potřebujete jádro IDL pro Windows verze 5.2 nebo vyšší (po papřičných zásazích ve zdrojovém kódu by snad mělo fungovat i pod jiným operačním systémem a s jinou verzí, která umí widgety). Přeji vám hodně úspěchů při vylepšování. :-)


*Poznámka L.Přecha

Rychlost programu ovlivnilo několik prohřešků proti filozofii programů v IDL:
(c) Copyright 2001 by Michal Švanda
http://www.asu.cas.cz/~svanda
svanda@asu.cas.cz
ICQ 56160132