PixInsightのImageContainerで呼び出したStarNet2のstar_maskを自動的に保存するスクリプトを試作してみた
PixInsightのImageContainerでStarNet2を実行するとstar_maskを自動的に保存する方法がないですよね?
C/2023 A3 紫金山・アトラス彗星 の処理をするときに、彗星基準の星なし画像と、恒星基準の星あり画像を分けて処理しようと考えたのですが、StarNet2だとstar_maskを自動的に保存してくれません。
ちなみにStarXTerminaterは星なし側はブロック状の色むらができ、星あり側の画像が星以外にいろんなものがくっついてきたので使い物になりませんでした。
そこで StarNet2とstar_maskを保存するスクリプトをProcessContainerに登録してImageContainerから呼び出せば対処できる!
ということで作ってみました。
それにしてもPixInsightのスクリプトはクラスのリファレンスなどが公開されていないので調べながら作るのが結構面倒でした。
私自身JavaScriptに詳しいわけではないし・・・
方針
お試しで作ったのでこんな感じの方針です。
- とりあえずGUIなしのスクリプトのみ作る
- 使いにくくても気にしない
- エラーハンドリングもしない
スクリプト
スクリプトはこんな感じ
SaveStarMaskOfStarNet2.js というファイル名で適当な場所に保存します。
--- ここから ---
//
// StarNet2 で生成された star_mask を保存する。
// ProcessContainer での利用を想定する。
//
// Script Parameters:
// starMaskDir
// - star_mask の保存先のディレクトリパス
// - パスはフルパスで記述する。
// - パスの区切りは / を使用する。
// - パスの末尾に / を付与する。
function main()
{
// parameters から starMaskDir (star_maskの保存先のパス)を取得する。
const starMaskDir = Parameters.getString("starMaskDir");
// view 'star_mask' の ImageWindow を取得する。
var win = ImageWindow.windowById("star_mask");
// ImageWindow が存在するかをチェックします
if ( win.mainView.image.height > 0 )
{
const pathArray = Parameters.targetView.window.filePath.split("/"); // 元のファイルを / 区切りで分割する。
const filename = pathArray[pathArray.length-1]; // pathArray の最後の要素をファイル名とする
const dotPos = filename.lastIndexOf("."); // ファイル名の拡張子の位置を調べる
const basename = filename.substring(0, dotPos); // 拡張子なしのファイル名
const extension = filename.substring(dotPos); // 拡張子
// star_mask のファイル名
const newFileName = starMaskDir+basename+"_star_mask"+extension;
// star_mask を保存する。
win.saveAs(newFileName, false, false, false, false);
// 新しい名前をコンソールに表示します
console.writeln("A 'star_mask' view has been saved as: " + newFileName);
// star_mask view を閉じる
win.forceClose();
}
else
{
// 指定したIDのViewが見つからない場合
console.writeln("Can't find View: " + viewID);
}
}
main();
--- ここまで ---
使い方
これがちょっと面倒
- ID star_mask のwindowがあるなら閉じておく。
- ▲ボタンのある適当なスクリプトを開く。私は Script>Utilities>CorrectmagentaStars を使いました。
- ▲ボタンをデスクトップにドロップしてアイコンを作成。
- アイコンを開きFile pathに保存したスクリプトを指定、MD5 checksumを削除、設定されていたScript Parametersを削除し新たにstarMaskDirパラメータでstar_maskの保存先フォルダをフルパスで指定する。パスの区切りは /、末尾は / で終了する必要があります。

- StarNet2と先ほど作成したProcessの▲ボタンをProcessContainerにドロップ。

- ImageContainerに処理対象のファイルと、Output directoryを設定。
- ImageContainerの▲ボタンをProcessContainerの下部にドロップすると、ImageContainerに登録したすべての画像ファイルに対してStarNet2が実行されstar_maskがstarMaskDirで指定したフォルダに保存される。

つくったProcessContainerはIcon化して保存しておくと使いまわしができてよいですよ。




















































最近のコメント