Navodila za obdelavo slik
Back
Python: branje FITS datotek in izračun centroida zvezde
Viewing page version #3
(Restore this version)
(Restore this version)
Modified: 22 November 2018, 2:50 PM User: Bojan Dintinjana →
Pri obdelavah FITS slik (datotek) lahko uporabimo zelo močno programsko orodje python in modul astropy. Kako to naredimo je prikazano v primeru izračuna centroida zvezde. Program je tudi v mapi za izmenjavo.
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# to je glava python programa in nastavljen utf-8, da lahko tipkam čžš
# tudi naredim izvršljiv program z ukazom v bash konzoli:
# chmod a+x mojfits.py
#
#
# Program za branje FITS datotek in izračun centroida
#
# Bojan Dintinjana
# nov. 2018
import math
from astropy.io import fits
# odprem mojo fits sliko:
hdulist = fits.open('Caecilia_V_300.fts')
# izpis informacije o sliki
hdulist.info()
# branje headerja in izpis časa posnetka
# slike Vega imajo samo en HDU (Header Data Unit)
# zato indeks [0]
hdr = hdulist[0].header
print hdr['DATE-OBS']
#zdaj branje podatkov v 2D array
data = hdulist[0].data
# približne začetne koordinate moje zvezde za meritev, ki jih dobim recimo v ds9,
# kjer gledam koordinati physical X, Y
x,y=903,1021
# izberenm si kvadratek 15x15 okoli zvezde, lahko bi dal tudi manj
# tudi upoštevam, da ima prvi piksel v ds9 ali v IRAFu koordinate (1,1) to je levo spodaj
# in upoštevam, da ima python prvi piksel data[0,0] in običajno levo zgoraj
# izračunam meje kvadratka;
x1 = x - 7
x2 = x + 8
y1 = y - 7
y2 = y + 8
# izpis za kontrolo tako, zapis je [y,x] koordinati sta zamenjani,
# x hitrejša os, ki je v fits glavi NAXIS1 je v pythonu na drugem mestu
#
#data[1020-5:1020+6,903-5:903+6]
# izračunam centroid zvezde
# najprej nastavim vsote na 0.
M = 0.
Sx= 0.
Sy= 0.
# zanka teče po y in x in računam
for j in range(y1, y2):
for i in range(x1, x2):
# lep izpis matrike za kontrolo
print ("%5d "% data[j,i]),
M += data[j,i]
Sx += data[j,i] * i
Sy += data[j,i] * j
# končni izračun
Rx = 1./M * Sx
Ry = 1./M * Sy
# in izpis
print "M =%7.0f"%M
print "Sx=%7.0f Sy=%7.0f"%(Sx,Sy)
print "Rx=%7.3f Ry=%7.3f"%(Rx,Ry)
in dobimo;