備忘録 Siril 1.4.0 操作手順(スクリプト編)
それでは Siril 操作手順のスクリプト編になります。
前回は「自動前処理編」と言いましたが、「スクリプト編」とした方が良い内容になってきたのでタイトルを変えました。
Siril スクリプトを使用方法についてのブログはそこそこありますが、スクリプトの中身を扱うブログは少ないと思います。
スクリプトは自分向けにカスタマイズすれば利便性が格段に上がりますが、GUI操作に比べてハードルは高めです。
と言うことで、簡単ですがスクリプトの解説を含めた内容にしました。
備忘録と銘打っていますが、二の足を踏んでいた人の背中を押すことが出来たら嬉しいです。
2025.7.11追記
スクリプトの公開方法に問題がある可能性があった為、githubにてライセンスを明確にして再公開しました。
なお、本ページで記載しているスクリプトはSiril公式のスクリプトを元に、tomが非公式に改良したものです。
元スクリプトの配布元は下記のリンク先にあります。
元のスクリプトは GNU General Public License v3(GPL v3) に基づいて公開されており、自由に利用・改変・再配布が可能です。
ただし、再配布の際には同じライセンスを適用する必要がありますので、私の改良版もまたGPL v3に基づいて公開しています。
著作権は元スクリプト作者である Cyril Richard氏に帰属します。
改良後のスクリプトになります。
追記終了
あくまでも「tomが使っているスクリプト」の備忘録なので、もっと良い方法があるかもしれません。
こういうやり方もあるんだ程度の軽いノリで読んで頂ければと思います。
Siril のバージョンは1.4.0 beta2です。
前提は前回から太字の所を加えます。
バイアスについては、バイアスフレームではなく合成バイアスを使っています。
撮影条件によってバイアスフレームを準備するのも大変なので、条件を変えて撮影したバイアスフレームから合成バイアスを算出します。
算出についても説明します。
その後、マスターフラット、マスターダークを作成して、最後に天体写真の前処理を行います。
合成バイアスの算出
この合成バイアスを使うメリットとしては、1度算出してしまえば数式で持っておけるので、マスターバイアスの画像データを持っておく必要が無くなります。
デメリットとしては、ピクセル毎のバイアス値の違いを反映できないため、厳密なバイアスではありません。
ただし、ライトフレームはダーク減算をしているので問題はありません(ダークにはバイアスの情報も含まれているため)
ダーク減算とバイアスの詳しい話はsamさんのほしぞloveログに書いてあります。
では、何故バイアスを算出するかというと、フラットの曲率合わせの為にフラットフレームからバイアス減算を行うとの事です。
こちらもSiril documentationに詳しい説明があります。
早速始めていきます。
カメラにキャップをした状態で、ISOもしくはオフセットを何段階か変えて、露光時間はカメラの最短で撮影します。
tomは ISO = 100, 200, 400, 800, 1600, 3200, 6400, 12800で各1枚撮影しました。
こんなに広い範囲で撮影する必要はありません。撮影に使うISOを含む範囲で5点程度でOKと思います。
CMOSカメラの場合はオフセットをゼロを除く何点かで撮影する様にとの事です。
撮影データを適当な新規フォルダに保存します。
Sirilのホームボタンを押し、上記のフォルダを指定します。
ここからコマンドラインの操作になります。
画像の入力枠に下のコマンドを入力してエンターを押します。
convert offset
これでfitsファイルに変換してシーケンスファイルが生成されました。
続いて下のコマンドを入力してエンターを押します。
seqstat offset offset.csv basic
そうすると、このフォルダにoffset.csvというファイルが出来上がります。
このcsvファイルを開きます。
Officeソフトを持っていなければ、google driveやmicrosoftのonedriveで開く事が出来ます。
すると、こんな表が出てきます。ISOの値は後で入力しました。
ここのMedianの値がバイアスです。
ZV-E10ではISOの値によらず512でした。
デジカメは2のべき乗になっている事が多いそうなので、2のべき乗に近い値が出てきたら2のべき乗にしてしまっていいと思います。
CMOSカメラはオフセットを変数とする1次関数になっているそうです。
この関数の傾きが重要で、バイアス = 傾き × オフセット です。
例えば傾きが64だった場合のバイアスは = 64 * offset という書き方になります。
これで合成バイアスが求められました。
この値はカメラ固有なので、同じカメラなら何度でも使い回せます。
ちょっと余談ですが、バイアスは輝度値がバラツキによってゼロ以下にならないように意図的に輝度値の底上げを行なっている値です。
上の表のminを見て頂くと分かる通り、ISO 6400と12800はバイアスで底上げしてもゼロになるピクセルが僅かながら発生しています。
ISOが6400以上になるとバイアスで底上げした値以上に輝度がバラついてしまうという意味です。
つまり、このカメラでは最大でもISO3200まで抑えていた方が良いと考えています。
(この備忘録を書いていて初めて気づきました。データの見直しは重要ですね)
マスターフラットの作成
バイアスを算出したので、マスターフラットを作成します。
では、ここからスクリプトを使っていきます。
まず前準備として、スクリプトを実行するためのフォルダを新規作成します。これをワーキングディレクトリと呼びます。
ワーキングディレクトリを複数スクリプトで共用してしまうと、ファイルが誤って混入してしまったり、完成した画像が上書きされてしまう事があるので、スクリプト毎に新規でフォルダを作成した方が精神衛生上良いと思います。
ワーキングディレクトリの中に、「flats」というフォルダを作り、フラットフレームのraw画像を入れてください。flatsの s を忘れないように注意してください。
これで前準備は完了です。
続いてgithubにあるOSC_Prepocessing_Make_Master_Flat.ssfをダウンロードします。
このssfファイルを 適当なフォルダに保存します。
そしてsirilを起動し、右上の三本線 → スクリプトを入手をクリックします。
スクリプトの中身は下の通りです。
############################################ # # OSC_Prepocessing_Make_Master_Flat.ssf # # Script for Siril 1.2.0 # ########### PREPROCESSING SCRIPT ########### # # Copy flat files in your working folder: # # flats/ # # Output file : new_pp_flat_stacked.fit in /masters folder # ############################################ requires 1.2.0 # Convert Flat Frames to .fit files cd flats convert flat -out=../process cd ../process # Calibrate Flat Frames calibrate flat -bias="=512" # Stack Flat Frames to pp_flat_stacked.fit stack pp_flat rej 3 3 -norm=mul -out=../masters/pp_flat_stacked cd .. close
ひとつずつ説明します。
行の最初に#がついている行はコメントです。
コメントは処理に一切関与しないので、気にしなくてokです。
スクリプトを実行すると、#の行がSirilのコンソールに表示される文字になります。
では、処理の説明に入ります。
cd flats
flatsというフォルダに移動する
convert flat -out=../process処理画面右側の「変換タブ」で行っていた処理のコマンドです。
flatsというシーケンス名でファイルを変換し、processというフォルダに出力という意味です。
(processフォルダが無い場合は、自動で新規作成されます)
cd ../process
calibrate flat -bias="=512"
続いて「calibrationタブ」で行う処理のコマンドです
flatというシーケンス名のファイルについて、バイアスの値"512"で減算するという意味です。
この512はカメラによって変わるので、使用しているカメラのバイアスに合わせて修正してください。
固定値でなく、傾きがあった場合(例:傾き=64)は下の通りになります。
calibrate flat -bias="=64*$OFFSET"
続いて「重ね合わせタブ」の処理になります。
stack pp_flat rej 3 3 -norm=mul -out=../masters/pp_flat_stacked
pp_flatというシーケンス名(先ほどバイアス減算を行ったファイル)を、
上限と下限を3σでσクリッピングし、multiplicativeで正規化してスタックし、
mastersというフォルダにpp_flat_stackedというファイル名で保存するという意味になります。
これでマスターフラットを作成するスクリプトの説明は終わりです。
処理に戻ります。
左上の家マークをクリックして前準備で用意したワーキングディレクトリを指定します。
続いてスクリプトのボタンからSirilスクリプトファイルを選ぶと先ほど保存した「OSC_Prepocessing_Make_Master_Flat.ssf」が出てきます。
これでマスターフラットは完成です。
マスターダーク作成
マスターフラット同様にマスターダークのスクリプトをgithubからダウンロードして下さい。
マスターダーク用のフォルダを新規作成し、その中にdaksというフォルダを作ってください。
darksの中にダークの画像を保存します。
スクリプトは以下の通りです。
############################################ # # OSC_Prepocessing_Make_Master_Dark.ssf # # Script for Siril 1.2.0 # ########### PREPROCESSING SCRIPT ########### # # Copy dark files in your working folder: # # darks/ # # Output file : dark_stacked.fit in /masters folder # ############################################ requires 1.2.0 # Convert Dark Frames to .fit files cd darks convert dark -out=../process cd ../process # Stack Dark Frames to dark_stacked.fit stack dark rej 3 3 -nonorm -out=../masters/dark_stacked cd .. close
見方は先ほどのフラットと同じですが、calibrationがありません。
前回の手作業でもcalibrationは行っていない(ダークはcalibrationがいらない)のがそのまま反映されています。
また、ダークは正規化を行わないので -nonorm という指示を書いています。
(フラットは-norm=mulでした)
これを実行すればマスターダークも完成です。
ライトフレームの処理
とうとうライトフレームの処理になります。
githubから OSC_Preprocessing_MFD_BayerDrizzle.ssf をダウンロードします。
このスクリプトはSiril公式の「OSC_Preprocessing_BayerDrizzle.ssf」がベースになっています。
tomはこのスクリプトから5点変更しています。
①バイアス、フラット、ダークは前もって個別に作っているため各種マスターを作成する行は削除し、出来上がったマスターを読み込みだけにしている
バイアスは合成バイアスを算出するだけですし、私はフラットもダークも個別にマスターファイルを作って使い回しています。
既にマスターファイルがあるのにライトフレームの処理時に毎回各種マスターを処理するのは無駄なので、作成したマスターファイルを読み込むだけにしました。
②cosmetic correctionを行わない
③シグマクリップをMADクリップに変更
DrizzleではMADクリップを推奨すると書いておきながら、公式のスクリプトはシグマクリップになっているのは何故でしょうね?
④fwhmでの重みづけを追加
⑤処理をやり直した際、同じファイル名で上書きされる事を防ぐため、保存時の日付と時間をファイル名に入れている
という事で早速ですがスクリプトの中身です。
############################################ # # OSC_Preprocessing_MFD_BayerDrizzle.ssf # Script for Siril 1.4 # December 2024 # (C) Cyril Richard # ########### PREPROCESSING SCRIPT ########### # # Script for color camera preprocessing # aligning using Bayer Drizzle # # Needs 2 sets of RAW images and 2 master images in the working # directory, within 2 directories: # masters/ # lights/ # ############################################ requires 1.3.4 # Convert Light Frames to .fit files cd lights convert light -out=../process cd ../process # Calibrate Light Frames calibrate light -dark=../masters/dark_stacked -flat=../masters/pp_flat_stacked -cfa -equalize_cfa # Align lights with Drizzle register pp_light -drizzle -scale=1.0 -pixfrac=1.0 -kernel=square -flat=../masters/pp_flat_stacked # Stack calibrated lights to result.fit #スタンダード(MADクリップ、wfwhmあり) stack r_pp_light rej a 3 3 -weight=wfwhm -norm=addscale -output_norm -rgb_equal -32b -out=result # and flipping if required load result mirrorx -bottomup save ../result_drizzle_$DATE:dt$ cd .. close
ひとつずつ解説します。
convertはフラット、ダークと同じなので省略します。
calibrate light -dark=../masters/dark_stacked -flat=../masters/pp_flat_stacked -cfa -equalize_cfa
calibrrationはダーク減算、フラット除算をします。
元のスクリプトでは、-flat=../masters/pp_flat_stackedと -cfa の間に cosmetic correction の指示である「-cc=dark」が入っていますが、私は削除しています。
必要な方はここに -cc=dark を入れます。
無指定で3σとなり、偏差を指定したい場合は -cc=dark 5 5 という風に記載します。
続いて -cfa でカラーカメラの外観補正、-equalize_cfaでフラットのRGBの平均強度を均一化させます(グレーのフラットにさせるため)。
フラットはRGBで均一化させない方が良いと複数のブログで言及されているので、-equlaize_cfaは本当に必要かどうか後日検証の予定です。
特に私はQBPフィルターを使っていて、カラーバランスがニュートラルでは無いため、悪影響が出る可能性があります。
続いてregisterです。
register pp_light -drizzle -scale=1.0 -pixfrac=1.0 -kernel=square -flat=../masters/pp_flat_stacked
これが整列タブで処理する内容になります。
pp_lightというシーケンス名のファイルをscale=1.0、pixfrac=1.0、kernel=squareでDrizzleします。この際、マスターフラットを使って重みづけするという意味の処理です。
Drizzleはマスターフラットで重みづけした方が僅かに良い結果になるそうです。
前回はマスターフラット無しという前提だったので処理に入れていませんでした。
ただし、結果の差は僅からしいので、フラットが面倒なら入れる必要はなさそうです。
続いてスタッキングです。
この行は、特に自身のやり方で差が出ると思います。
少しですが、カスタマイズも例示してみました。
stack r_pp_light rej a 3 3 -weight=wfwhm -norm=addscale -output_norm -rgb_equal -32b -out=result
rej a 3 3は、MADクリップを使って上限下限共に3σでクリッピング
wfwhmを使って重みづけ、正規化はaddscaleでスタッキングするという意味です。
例えば、rej a 3 3 をrej 3 3 に変更すればシグマクリップに変わりますし、rej a 5 3 に変更すればMADクリップの下限側を5σ、上限側を3σでクリッピングします。
-weight=wfwhmは前回記載しましたが、fwhmによって重み付けするため、星が流れてしまったフレームも気にせずスタックできると思っています。
これを、wfwhmを用いずにfwhmの上位95%だけでスタックしたい場合は -filter-fwhm=95% という書き方に変更します。
自分の好みに合わせて簡単にカスタマイズして下さい。
-output_norm、-rgb_equal、-32bは前回のスタッキング時のチェック項目3つを表しています。
これでスタッキングが完成しました。
その後、次の3行があります
load result mirrorx -bottomup save ../result_drizzle_$DATE:dt$
スタッキング結果をロードして、画像の天地を入れ替えて、rezult_drizzle_日時というファイル名で出力します。
※追記※
この時間はGMTで表示されます。日本時間とは異なるので注意してください。
あくまでも、再処理したファイルが同じ名前になって上書き保存されてしまうのを防ぐための手段です。
これでスクリプトの説明は終わりです。
なお、スクリプトの#で囲った所にも記載していますが、ワーキングディレクトリの中に「lights」と「masters」というフォルダが必要です。
lightsフォルダには天体を撮影したファイルを、mastersフォルダには先ほど作成したマスターダークとマスターフラットを保存します。
この時、マスターダークとマスターフラットのファイル名は変えないでください。
(それぞれ dark_stacked と pp_flat_stacked という名前のはずです)
これで、Sirilの右上の家マークでワーキングディレクトリを選択し、スクリプトを実行すれば天体の画像が出来上がります。
スクリプトの変更について
スクリプトは単純ですが、処理の指示の書き方が初心者には分かり辛いです。
実際、私もかなり苦労しました。
ただ、理解できれば本当に便利な機能なので触ってみる価値はあると思います。
もっと内容を弄りたい、知りたいという場合はSiril公式のcommands referenceを参照してトライしてみてください。
おわりに
これでスクリプト編も終了です。
続いて加工編に進みたいところですが、tomは加工に使う機能を理解していない所が多いです。
そこで、Siril 1.4.0の新機能を使いつつ、初心者がそれなりの画像を出せる所に特化したいと思います。
と言いながら、これを書いている最中に晴れました!
備忘録を書いてる暇があったら撮影をせねば…
と言うことで、加工篇に進む前に約1ヶ月ぶりの撮影結果になります。
土日の間にはアップしたかったのですが、加工に苦労していて完成していません。
のんびりいきます。
コメント
コメントを投稿