この記事の内容
スマート望遠鏡であるSeestarによって撮影した変光星の画像をAstroImageJによって測光して以下のような変光曲線をプロットするまでの手順を書きます。また、観測データから極小時間を推定する方法も書いています。
きっかけ
Seestarで変光星を観測できるということは日本変光星研究会で出しているこの記事で知りました。私も試したのですが、使われているマカリィやdigphot4というソフトがWindowsでしか動かないので、Linux環境で生きている私にはどうにも使いにくい。できればLinuxでも動くAstroImegeJ(以下AIJで略すことがあります)で測光したいものだと思いました。
ところが、実際に使ってみるとAstroImegeJは使い方が難解で、すぐめげました。そうしてほっぽらかして2年ほどたちましたが、今は生成AIの助けがあるので以前は使えなかったソフトも使えるようになりました。今回はClaudeを使ってます。
そこで、せっかく使えるようになったのでSeestar+AstroImageJでの変光星観測の手順をまとめようと思います。上記の日本変光星研究会の記事と重複する部分が多いので、その部分は記事の引用でごまかします。なお、今回は単周期変光星で有名なカシオペア座のRZ星(以下RZ Cas)を例にします。
環境
上述のとおり、Linux環境、特にUbuntuを前提に進めますが、端末でスクリプトを実行する部分はWindowsユーザもWSL上にUbuntuを入れれば同じことができるはずです。AstroImegeJはWindows版でも同じUIだと思います。
変光星のデータを得る
目的とする変光星の極小時間と変光星図を取得するため、AAVSOの検索ページに行きます。
Nameに変光星の名前(この例ではRZ Cas)を入れて右下の「Search」をクリックします。
変光星の詳細画面になります。ここで右下の「Ephemeris」(天体歴の意味)をクリックすると別ウインドウで近い日時の極小時間が表示されます。
Startが食の開始、Endが終了、Midが極小時間です(星によっては極小の時間しか示されないこともあります)。これはUTCなので9を足して日本時間にしてください。
戻って、詳細画面を下にスクロールして、「External Links」の「Location」のプルダウンメニューから「AAVSO Variable Star Plotter」を選んで右のGoをクリックします。
比較星の光度が入った変光星図が表示されます。
このままではSeestarの撮影イメージに合わないので「Plot Another Chart」をクリックします。
「Choose a Chart Orientation」は「CCD」にします。こうしないと鏡像反転してしまいます。また「Choose a Predefined Chart Scale」は「D (60arcmin)」(FOV=1.0°)くらいにしておきます。
本当は「C (120arcmin)」(FOV=2.0°)のほうがSeestar S50には都合がいいと思いますが、なぜかこういうエラーになりました。ここはAAVSOのサイトの混み具合によるのか、うまく行ったり行かなかったりします。ただし、他の星ではCでうまく行くのでRZ Casだけの問題かもしれません。
なお、Seestar S30 Proの場合は「Choose a Predefined Chart Scale」ではなく、Advanced Optionsのほうにある「FIELD OF VIEW」を「210.0」にしておくといいです。この場合、FOVは3.5°になります。このとき、光度のリミットをもっと明るくしろと言ってくることがありますので、指示に従ってMagnitude Limitを12等などに明るくしてください。
「Plot Chart」をクリックしてSeestar用の変光星図を出力します。
後で必要になるのでPNGとしてセーブしておきましょう。
Seestarでの導入と撮影方法
先程得た極小時間の前後を狙ってSeestarで撮影します。導入と撮影方法は日本変光星研究会のページをごらんください。なお、今回の例ではS50を使いましたが、他のSeestarファミリーでも手順はほぼ同じです。
SeestarからFITファイルを持ってくる
日本変光星研究会のページをごらんください。
G画像を抽出する
日本変光星研究会のページでもマカリィでファイルを開く(G画像の抽出)という部分がありますが、カラーカメラで撮った画像からはグリーン部分を抽出して使うのが変光星観測での作法です。ここではマカリィではなく、Claudeが書いたスクリプト、extract_green.pyで抽出することにします。ダウンロードはこちらから。
必要であれば
pip install astropy numpy
などで要るものを入れてください。
以下このスクリプトの使い方です。subsというディレクトリにSeestarから持ってきたサブフレームを格納していて、subsGというディレクトリにG抽出したFITファイルを書くとします。
for fit in subs/*.fit; do
echo "$fit";
python3 extract_green.py "$fit" "subsG/$(basename "$fit" '.fit').fit";
done
などとします。extract_green.pyを別の場所に置いたときはパスを指定してください。
座標解決しておく
Seestarで撮った画像は1枚1枚で多少は位置がずれています。追尾の誤差もありますし、そもそもSeestarはディザリングによって意図的に撮影位置をずらす手法を使っているので1枚ずつ星の位置がずれるのは普通です。このままでは最初の1枚で指定したターゲット星や比較星の位置は2枚め以降ではずれてしまいます。そこで必要なのがWCSです。World Coordinate Systemの略ですが、ようは画像上のピクセル座標と赤経・赤緯を対応づけることです。これをやっておくことにより、画像内の位置がずれてもターゲット星や比較星の場所を特定できるのです。
実はAstroImageJからでもこれはできます。あとでもっと詳しく見せますが、サブフレームを読み込んで出てくるこのウインドウのメニューの右上のWCSメニューから実行できます。
ただし、これは一枚ごとにastrometry.netに問い合わせするので、サブフレームが何百枚もあるときは数時間かかってしまいます。
そこで今回はClaudeが書いたスクリプト、stack_and_solve.pyを使います。ダウンロードはこちらから。
以下このスクリプトの使い方です。subsGというディレクトリにG抽出したFITファイルがあるとして、subsG_wcsに座標解決済みのFITファイルを書くとします。
python3 stack_and_solve.py --input-dir subsG \
--output-dir subsG_wcs --pattern "Light_*.fit" \
--group-size 5 --scale-low 3.74 --scale-high 5.74 \
--scale-units arcsecperpix \
--backend-config /etc/astrometry.cfg --verbose-align
stack_and_solve.pyを別の場所に置いたときはパスを指定してください。
なお、上はS50用で、S30 Proの場合は
--scale-low 6.6 --scale-high 8.1
無印S30の場合は
--scale-low 7.2 --scale-high 8.8
S50 Proは実機がないので推定ですが、
--scale-low 4.14 --scale-high 5.06
としてください。
上の実行前にaptで必要なパッケージを入れます。上で参照している /etc/astrometry.cfg もこのパッケージに入っています。
sudo apt install astrometry.net
実行中に
[group 0068+0069] 解決失敗 (2.20秒, 10枚) → 次のグループ(0070)と合体して再挑戦(15枚)
基準フレーム: 3番目
frame[0] shift=(-0.10, +2.00)
(中略)
frame[13] shift=(-3.70, +2.90)
frame[14] shift=(-3.70, +2.20)
位置合わせ: 最大シフト量 79.10px (15枚)
[group 0068+0069+0070] 解決失敗 (2.32秒, 15枚) → 次のグループ(0071)と合体して再挑戦(20枚)
基準フレーム: 3番目
frame[0] shift=(-0.10, +2.00)
frame[1] shift=(-0.10, +0.90)
(中略)
位置合わせ: 最大シフト量 79.10px (20枚)
[group 0068+0069+0070+0071] 解決失敗 (2.16秒, 20枚: Light_vw cep_10.0s_IRCUT_20260924-203524.fit 〜 Light_vw cep_10.0s_IRCUT_20260924-203947.fit) → これ以上合体できないため断念
などと出ることがあります。雲などで星の数が少ないフレームでこうなることがありますが、無視して続けましょう。
事前の準備はここまでです。AstroImageJで測光してみましょう。
AstroImageJのインストール
ここからプラットフォームに合わせて入れてください。
AstroImageJの起動
起動するとこんな細長いウインドウが出ます。
FITシーケンスのインポート
次に、FileメニューからImport → ImageSequence...と選びます。
ここで、座標解決したFITを入れているディレクトリを指定します。
すべてデフォルト設定のままOKを押します。このようなウインドウが開きます。
ここで左下の再生ボタンみたいなやつ
を押すと順々にフレームを表示していきます。曇ったりで極端に星が少ないフレームや、強風で星像が大きくぶれているフレームは再生を止めてから左上の✖を押して削除しておきましょう。
チェックが終わったら最初のフレームに戻っておきます。
アパーチャの設定
測光する星を囲むアパーチャ(aperture 通常はカメラの絞りの意味ですが、ここでは測光する星の光を集める円形領域)の大きさを決定するために、ターゲット星の近くを拡大して
ターゲット星をポイントしてALTを押しながら左クリックします。こういうウインドウが現れます。
このグラフで「Radius 4.00」「Back> 8.00」「<Back 15.00」の4.00, 8.00, 15.00という数値を覚えておきましょう。
フレームが表示されているウインドウの上部の中央付近にある、二重丸の下にSETとあるアイコン(change aperture settings)をクリックします。
こういうウインドウが開きます。
この上部に先程の数値を入れます。Radius of object apertureとInner radius of background annulusは先程の値+2くらいのほうが安全かもしれません。
他はデフォルトの設定でいいのでOKを押してウインドウを閉じます。
測光を開始する
ここでAAVSOのサイトで取ってきた変光星図を並べて表示します。
このとき、AIJのフレーム画面では左上の「display as image negative」をオンにしておいたほうが見やすいです。
変光星図と比較できるようにある程度拡大しましょう。
上部中央近くにある二重丸が二つの「perform multi-aperture photometry」をクリックします。
このような設定ウインドウが出ます。
注意すべきはアパーチャが先程設定した三つの値になっていることと、「Auto Variable Apertures from each image T1 FWHMJ」と「Place all new apertures」と「Use RA/Dec to locate aperture position」にチェックが入ってることです。「Auto Variable Apertures from each image T1 FWHMJ」はFWHM(星像の大きさ)の変動に追従するためで、「Use RA/Dec to locate aperture position」はディザリングなどで位置がずれても追跡するためのものです。
右下の「Place Apertures」をクリックして測光を開始します。ショートカットキーのヘルプウインドウが出ます。
まず変光星図にしたがってターゲット星をクリックします。
アパーチャが緑色に変わります。
次に最初の比較星を変光星図から選び、クリックします。
比較星の光度を入れるウインドウが開くので、変光星図の「94」から9.4と入れます。
光度が反映されます。
同様にふたつ目の比較星をクリックして光度を入れます。
RZ Casの場合、付近にこれら以外の適当な比較星がないので、Returnを押して分析を開始します。
たくさんのウインドウをが現れるので面食らうでしょうが、まず見るのはMeasurementsテーブルです。
ここでは「Saturated」の列を注目してください。ここが0.0以外だと撮影したターゲット星が飽和しているので正しい観測はできません。飽和している行がないことを確認しておきます。
次に「Source_AMag_T1」列を注目します。この列にターゲット星の光度を比較星と比べて算出した値が入っています。期待した変光範囲に入っている値が並んでいればOKです。
さて、このターゲット星の光度をプロットしたいのですが、ここが私にとってAIJの最大の難関でした。これがわからないので今まで何度もめげました。
出てるウインドウが多すぎて混乱しますが、「Multi-plot Y-data」という名のウインドウだけに注目しましょう。
最初の「Data Set」デフォルトではたくさんありますが、ここでは一つだけに減らしておきましょう。
そして以下の設定をします。
- Plot をチェック
- Auto Scale をチェック
- Input in Mag のチェックを外す
- X-data でJ.D.-2400000を選ぶ
- Y-data でSource_AMag_T1を選ぶ
- Y-operand でJD_UTCを選ぶ
- Fit Mode をoffに
- Norm/Mag Ref をoffに
- Out MAg のチェックを外す
これでこのようなグラフが表示されれば成功です(この記事の冒頭に示したものです)。
見やすくする
AIJのグラフの横軸はユリウス日です。変光星界隈ではこれが標準なのでいいのですが、ローカルタイムで表示したいところですが、どうもやりかたがわからないのでClaudeにスクリプトを書いてもらってGnuPlotで表示してしまいました。
MeasurementsテーブルのFileメニューの「Save As...」でTable.tblというファイルに落としておきます。これはコンマではなく空白で区切られたCSVと同じです。これからローカルタイムに変換したテーブルを作るスクリプト、tbl_to_csv.rbをClaudeが書いてくれました。ダウンロードはここから。(PythonのスクリプトとRubyのスクリプトが混在してすみません)
ruby tbl_to_csv.rb Table.tbl rzcas.csv --jst
のようにします。なお、測光処理のときに
のようなエラーが出ることがあります。このフレームを見ると
のように強風等でぶれている画像かもしれません。こういうフレームは処理する前に削除しておくべきですが、すりぬけてしまったときは、tbl_to_csv.rb に
--exclude-frame "20260918-003923"
のようにフレームの時刻で指定して除くことができます。たくさんあるときは、一行ずつファイルに書いて --exclude-frame-file で渡します。
実際にはこのように exclude しなくても変な光度にはならないようですが。
さて、このローカルタイムにしたテーブルからプロットするためには gnuplot を使って
gnuplot -persist -e "csvfile='rzcas.csv'; plot_title='RZ Cas Light Curve' xformat='%m-%d %H:%M'" plot_lightcurve.gp
とします。plot_lightcurve.gp はここからダウンロードしてください。X軸に年を入れたい場合は「xformat='%Y-%m-%d %H:%M'」です。xformatオプションを省くと時:分だけ表示されます。
結果はこうなります。
さらに、このローカルタイムのテーブルからフィッティングで極小時間を推定することができます。fit_minimum.pyというスクリプトをここからダウンロードしてください。
python3 fit_minimum.py rzcas.csv --window-minutes 25 --target-name "RZ Cas"
のように使います。fit_minimum.png という画像が生成されます。
「minimum (absolute clock time) t0=01:44:05」から極小は01:44頃と推定されます。
この記事の最初のほうにある「Ephemris for RZ Cas」の表を見てください。Midが「17 Sep 2026 16:52」です。9を足して日本時間にすると18日の01:52になります。したがって今回の測定結果から若干のズレがありますね。実際にずれているのか観測のしかたが悪いのかは再度RZ Casを観測して検討します。
VSOLJ(日本変光星観測者連盟)に観測データを報告する
私はまだ報告したことがないのですが、観測データをVSOLJに報告するときは日本変光星研究会の観測報告のページを参考にしてください。大変そうですけど。










































