Briswell Tech Blog

ブリスウェルのテックブログです

Pythonで観る宇宙

桜が見頃になってきましたね!
ついこの間咲き始めたと思ったら、いつの間にやらもう満開。季節の巡りは早いものです。

今回は天体観測をします。
春の夜には早々と消えていきますが...
私の大好きなオリオン座の星雲を観てみます。

赤外線天文衛星「あかり」などの望遠鏡によって撮影された写真をいじってみたり - Qiita

こちらの記事を参考にさせていただきました。ありがとうございました。

Astroqueryというモジュールを使うことで、SkyViewの天文写真をPythonで取得することができます。望遠鏡を覗き込まずに、プログラムから天体観測ができるなんてとても素敵です。

では、いってみましょう。

1. モジュールのインポート

import numpy as np #数値計算用
import matplotlib.pyplot as plt #描画用
from astroquery.skyview import SkyView #天文写真取得用
from astropy import units as u #取得範囲設定用
from astropy.wcs import WCS #天球座標変換用
from astropy.visualization import ZScaleInterval,ImageNormalize #画像補正用

astropyは天文データ解析用のパッケージです。

2. 設定値

target = 'M42' #オリオン大星雲
survey = ['2MASS-K','2MASS-H','2MASS-J'] #近赤外線波長域での天文観測プロジェクト
radius = 30*u.arcmin #取得する写真の範囲
pixels = 600 #取得する写真の大きさ
figsize = [6,6] #画像表示エリアのサイズ

オリオン座の散光星雲を取得する場合は、targetに「NGC 2024」を設定します。

3. 天文写真取得

hdu = SkyView.get_images(target,survey=survey,radius=radius,pixels=pixels) #天文写真を取得
wcs = WCS(hdu[0][0].header) #WCS座標を取得
plt.figure(figsize=figsize).gca(projection=wcs,title=target) #取得した座標をプロットする
plt.imshow(np.stack([ImageNormalize(hdu[i][0].data,interval=ZScaleInterval())(hdu[i][0].data) for i in range(3)], axis=2)) #強調化・合成して画像を表示 
plt.savefig(target + '.jpg') #画像保存
plt.close() #クローズ

天体の天球上の位置は、WCS座標で表すことができます。

4. 結果

感動です。