Edited at

Pythonによるfitsファイルの読み込みと書き込み(メモ)


はじめに

fitsファイルとは探査データや天文データに使われる画像ファイル形式で、ヘッダーと言われる時刻や姿勢様々な情報を含む部分と、画像サイズ(例えば1024x1024)の配列の部分からなる。

キューブ状のfitsファイルも存在していて、その場合にはn個のヘッダーと画像配列から構成される。

https://ja.wikipedia.org/wiki/FITS

Pythonのライブラリastropy.io.fitsを使ったfitsデータの読み込み、表示について。

fitsのビューアーとしてはDS9などがある。


PDS

Planetary Data System

NASAの探査データアーカイブ。誰でも無料で使うことができます。ここからデータをダウンロードすれば好きな惑星の画像を見ることができる!fitsファイル形式で画像が公開されています。

例えば、Hayabusaのデータはこちら。Hayabusaが撮ったすべての画像データが公開されています。


astropyのインストール

anacondaでインストールする。

conda install astropy


fitsファイルの読み込み

0番目のデータを読み込む。画像はヘッダー+画像配列からなる。

import astropy.io.fits as fits

import matplotlib.pyplot as plt
hdulist=pyfits.open('file.fits')
hdu=hdulist[0]
data=hdu.data #data=fits.getdata('file.fits',0)でもできる。
header=hdu.header
plt.imshow(data)
plt.show()

ヘッダーの項目、例えばTI_0を取り出す場合には、

print header["TI_0"]

X、Y番目のピクセルの指定は

data[Y][X]


fitsファイルの新規作成

hdu = fits.PrimaryHDU(im)

hdulist = fits.HDUList([hdu])
hdulist.writeto('new.fits',overwrite=True)

fitsはヘッダーと画像配列で1セット(hdu)。hdu = PrimaryHDU(data, header)で構成される。多数のエクステンションを使用する場合には、fits.ImageHDUで二つ目以降のhduを複数作成し、HDUList([hdu1,hdu2,hdu3])とかいった感じで一つのファイルにする。つまり、複数の画像を一つのファイルに保存することが可能である。

overwrite=Trueとすることによって上書きできる。


キーワードの追加

hdu.header['NEWKEYWORD']='something'