Sirilを邪悪にしてみた
先日、最後のコスミカット法が完成し挑戦に成功しました!
これで私のSirilがちょっと邪悪になりました!笑
3手法全てにおいてSiril標準の機能では実現不能で、pythonを利用して初めて実現可能になります。
なぜPythonかというと、SirilでpythonスクリプトがサポートされたのでSirilに無い機能を自由に作ることが出来るようになったからです。
ちなみに、tomはプログラミングがほぼ出来ません。
本業で必要に駆られてVBAを軽くかじっただけです。
(ループ処理がやっと書ける程度の万年初心者です)
なのでコードは全てAIで書いています。
主にGeminiで、たまにCopilotを使っています。
プログラミングが出来ない人でも、AIを使う事でやりたい処理のスクリプトを作り上げることが出来ます!
では、それぞれどのようにして実現したかの話に移ります。
ソフトウェアピクセルマッピング
ロジックの詳細はあぷらなーとさんの記事を参照してください。
邪崇帝主とステライメージ10にしか無い機能だと思うので、当然Sirilで出来るものではありません。
ピクセルマッピングを行うアプリを作る必要があります。
なお、出来上がったマップデータをSirilの処理の時に使用するだけので、Sirilのpythonスクリプトを使う必要はありません。
単独のアプリとして作成する方が楽です。
処理の流れは次の通りです。
①ダークフレームを取り込んで各ピクセル毎にメジアンと標準偏差を算出し、散布図にする。
②散布図からホットピクセルの所を選択して、この座標データをSirilで読み込む形に変換する。
Sirilで読み込む形式はdocumentationの通りです。
①は指示次第ですが意外とすぐ作れました。
処理に必要なライブラリはGeminiが勝手に選定してくれます。
②は指示の難易度が上がるのと、処理が重くなりやすいので出来るだけ簡単なGUIを検討した方が良いです。
なんせ、この散布図の中には画素数と同じ数のドットがプロットされているので下手に組むとフリーズしまくります。
私はメジアンの上限下限のパーセンタイル指定と、2点のXY座標を指定するROI選択の2点を組み合わせて選ぶようにしました。
注意点として、Sirilでfitsデータを読み込むとY軸が反転するので、不良ピクセルの座標データもY座標を反転させてから出力する必要があります。
当然このプログラムを作るために文字だけで指示しないといけないので、結構大変でした。
デバッグはエラーコードをコピペしてGeminiに修正させるという流れです。
何度かやり取りすると上限に引っ掛かるので、次の日まで待機という事を何度も繰り返しています。
あとは、作成した座標データをcalibtate時に読み込むだけです。
コマンドでいえば -cc=bpm を利用します。
不良ピクセルマップを指定してcosmetic correctionを実行するオプションです。
左側がダーク減算のみ、右側がピクセルマッピング適用です。
クールファイル補正法
これも詳細はあぷらなーとさんの記事から。
この処理は手順が複雑な上に、この手順をSirilの作法に則って処理しなければならないので結構悩みました。
特に、先ほど作成したソフトウェアピクセルマッピングを適用した上で、クールファイル補正法を適用する必要があります。
この処理順序を組み立てるのが一番苦労した所です。
私が組んだSirilでの処理フローは以下の通りです。
①各ライトフレームに対し、calibrateでダーク減算と-cc=bpmを実行して保存
(ここでソフトウェアピクセルマッピング適用)
②出来上がったライトフレームを位置合わせなしでスタックして保存
③ ②で出来上がった画像にfind_cosme_cfaを適用して別名で保存
④ numpyを使って③から②を減算したものを保存
⑤ numpyを使って①の各ライトフレームに④を加算して保存
⑥ ⑤をcalibrateで-debayerして保存。続きはコスミカットへ。
Sirilにはcosmetic correctionが複数あり、どれをどのタイミングで使うのかがクールファイル補正法の肝になると思います。
処理フローが完成するまでは「どうやってcosmetic correctionを2回も実行させるの?」とか「処理は走ったのに何も補正されていない…」という感じで数日間悩みました。
何度か処理フローを変えて、上記の形に落ち着きました。
また、④と⑤はSirilで処理できないので、pythonで計算します。(④はダーク減算を利用すれば可能ですが、pyhtonを使った方が相当楽です)
Geminiにはnumpyを使って記述してと明示的に指示しました。
コードは下記のとおりです。
注意点はfind_cosme_cfaでの補正の閾値の設定です。
クールファイル補正法なのでcold sigmaに目が行きがちですが、hot sigmaも結構重要です。
ピクセルマッピングを逃れたホットピクセルに効果がありますが、コスミカットで消すべき突発ノイズが巻き添えになる可能性があります。
(実際、コスミカットで処理するまでそれに気付かず、コスミカットで過補正が起きたと勘違いして焦りました)
値を変えて、何度か処理をして効果を確認する必要があります。
左がピクセルマッピング補正後、右がクールファイル補正後の画像です。
ピクセルマッピングを逃れたホットピクセル(赤矢印)と、画面全体にある縮緬ノイズが消えているのが分かります。
コスミカット法
こちらもロジックの詳細はあぷらなーとさんの記事をご覧ください。
コスミカット法はとてもシンプルですが、これもSiril標準の機能では実現出来ません。
というのも加算スタックの仕様として、計算はfloat64で行いますが、保存時にNormalizeとfloat32への変換が強制的に入るためです。
このファイルに比較明合成したファイルを減算すると、真っ黒な画像が出来上がってしまいます。
このロジックは加算スタックから比較明合成したファイルで減算するまでfloat64で処理して、その後でfloat32に変換し保存する必要があります。
ということで、コスミカット法は全てpythonで記述します。
まさかの6行というシンプルな処理です。
この後、Normalizeとfloat32で保存というコードが入っています。
左側がクールファイル補正後、右側がコスミカット補正後です。
これで突発ノイズも消えました。
色味が違っているのは、RGB equlizeがSirilのロジックと合わせられ無かった為です。
あとで色合わせするので、ひとまずこれで良しとしておきます。
これで3種類のノイズ補正ロジックが全て揃いました!
GUIの作成
これら3種類のコードを実行する毎にスクリプトを書き換えては面倒なので、GUIで操作できるようにして完成です。
ここは自分の思う様にAIに指示を出せば、わりと綺麗にまとめてくれます。
各条件に応じた処理フローの分岐も「このGUIに対応した分岐フローを作成して」的な雑な指示でもやってくれます。
AIでコードを書くにあたって
ソフトウェアピクセルマッピングはただのpythonなのでAIに指示さえできれば完成します。
実際にピクセルマッピングのアプリは結構前に作れていました。
しかし、クールファイル補正法とコスミカット法は「pythonスクリプトを書いて」と指示しても、全く動かないスクリプトが出来上がります。
最初の壁はこれでした。
pythonスクリプトが実装されたと知っても、動くスクリプトが作れなかったんです。
理由は、SirilpyというpythonモジュールAPIの情報をAIは持っていないためです。
どうするかと言うと、SirilのdocumentationをpdfでダウンロードしてAIに読み込ませ、これを元にコードを作成させます。
こういう使い方があるんだと分かった時は本当に嬉しかったです。
Gemini 2.5flashだとコーディング能力が足りないですし、 コーディング能力では2.5proより遥かに強力なGemini CLIもPDFがサイズ上限を超えていて読めないと言われました。
Gemini 2.5proなら70MBを超える巨大PDFを読んで作業してくれます。
他社のAIは試していませんが、GeminiでSirilのpythonスクリプトを作るなら2.5proがベストです。
最後に
実は私の使用しているカメラ(ZV-E10)はピクセルマッピングが丁寧に行われているみたいで、今回の処理対象になるノイズは発生しにくいです。
完全に好奇心だけでトライしてみました。
本当に楽しかった!
pythonのおかげで、Sirilが自由に何でも出来るようになっていると感じました。
また何か便利機能を実装出来ないか、考えていきます。
この検討ばかりしていたので、撮影した画像の処理が滞っています(笑)
処理を進めねば…
コメント
コメントを投稿