Siril 画像処理の私的なメモ

Siril

これは、Siril を用いた天体画像処理の一例です。

以下に、Siril 1.5や VeraLux 向けに、Siril Python Script コードを追い、その仕組みをメモしています。
記載と編集を随時行っています。画像処理の仕方以外の記事が多いと感じるでしょう。

NGC2685

NASAが公開する画像の様に、極リング内部を強調した処理を行いました。

Name: NGC 2685
Date: 2026-03-20T19-36, 2026-03-21T20-56
SQM: 21.64 mag/arcsec2 (Yamanashi)
Optics: Takahashi TS-160, HEUIB-II
Camera: ASI533MC Pro, gain 100, offset 20, -20deg
Exposure: 180s x 118 (total 5h54m)

NGC2685画像処理
勾配補正、色校正、 SyQon Starless 恒星分離, MTF Stretchを用いて分離:銀河星雲分離, IHSを用いて分離
Deconvolution:GraXpert
ノイズ除去:SyQon Prism
恒星と銀河星雲を再合成:VeraLux Star Composer

SyQon を多様すると今までの作風と、ちょっと色合いが変わっていく感じがしてます。

Arp 273

Name: Arp 273
Date: 2026-01-11T22-45, 2026-01-12T19-30, 2026-01-16T19-04, 2026-01-17T19-03
SQM: 21.64 mag/arcsec2 (Yamanashi)
Optics: Takahashi TS-160, HEUIB-II
Camera: ASI533MC Pro, gain 100, offset 20, -15deg
Exposure: 180s x 196 (total 9h48m)

Arp273画像処理
勾配補正、色校正、分離:StarNet CLI tools
ノイズ除去:SyQon Prism
Deconvolution:GraXpert
恒星と銀河星雲を再合成:VeraLux Star Composer

Pythonスクリプト機能が導入されてからは、Sirilから行えることが広がっています。

Siril 画像処理の流れの例

  • 勾配補正、色校正など
    • Astrometry: 天体位置
    • Crop: トリミング
    • Auto Gradient Removal 、 VeraLux Nox (Background Extraction)、(又は GraXpert BE): 勾配補正
    • SPCC (Gaia Spectrum): 恒星スペクトルデータを用いた色校正
    • Cosmetic Correction (CFAあり): 必要に応じて
    • 別名でファイル保存
  • 恒星処理
    • Desaturate Stars: 必要に応じて
    • Aberrations Remover: 必要に応じて
    • Deconvolution: Cosmic Clarity Sharpening, Stellar Only (Stellar Amount: 0.16 、0.32など)
    • 恒星除去:恒星部分を分離
      • StarNet CLI tools
      • SyQon Starless
        • Stretch Options
          Method: MTF Stretch (MTF = Midtone Transfer Function)
          Median Target:

          例)MTF Stretch
             Linked stretch (preserve star colors) → ON
             Median Target → 0.050 ~ 0.2

          経験則から、以下の記述をしています。
          Median = 0.050, 0.075
          弱いストレッチ:淡い構造のコントラストが強調された。恒星状になってしまう。

          Median = 0.15 以上
          強いストレッチ:ガス塊や星雲の細かく淡い構造は保護された。
        • Statistical Stretch:統計的ストレッチ
  • 銀河星雲処理
    • Deconvolution: 対象銀河星雲付近の恒星からDynamic PSF、FITSデータからCDELT1,2を、この2つの値から、PSF値を求める。
      • GraXpert (Strength=0.80など)
      • Cosmic Clarity Sharpening, Object
    • ノイズ除去(VeraLux Silentium、若しくは、DeepSNR denoising)
      • VeraLux Silentium:線形処理に設計された、AI非依存のノイズ除去
      • SyQon Prism (Strength=0.32, Taget Softなど)
      • DeepSNR denoising :
    • 恒星除去:銀河星雲部分を分離
      • StarNet CLI tools
      • SyQon Starless
        • IHS
    • ストレッチ:
      • GHS (Stretch factor, Local stretch intensityを高める場合もある)
      • VeraLux Hyper Metric Stretch (HMS)
    • Wavelets Transformation
    • ノイズ除去:2度目のノイズ除去(VeraLux SilentiumはGHS後なので条件に合わない)
      • SyQon Prism (Strength=0.32, Taget Softなど)
      • GraXpert Denoising (Strength=0.16, 0.32 など)
    • 色相補正(Siril: Color saturation, threshold 1.00は未使用)
      • VeraLux Curves:Akima補間法を用いて、RGB、Lab、LCH、HSVのコントラストを輝度構造と色の強度を個別に調整
      • VeraLux Vectra:LCH(明度、彩度、色相)色空間での補正
    • ストレッチ
      • GHS : BP Shift (Black Point Shift)
  • 恒星、銀河星雲再合成
    • VeraLux Star Composer(以前は、Star recomposition)
  • 色相補間
    • LCh色空間: VeraLux Vectra

勾配補正

Auto Gradient Removal

背景除去は、その役割上、常に大スケールのコントラストを除去します。そのため、暗い領域が平坦化されていると感じる場合は、通常、モデルが柔らかすぎて実際の信号を削り取っていることを意味します。

その場合は、「Scale」を高くするか、「structure protection」をオンにしたままにするか、あるいは低度の「simplified model」に切り替えてください。
経験則として、実際に目に見える勾配をまだ除去できる範囲で、最も硬いモデルを使用することをお勧めします。
https://www.facebook.com/groups/841870683930320/posts/1490938619023520/

作者であるCyril Richardさんのコメントです。

Auto Gradient Removal は、数値を変更後は、繰り返して、[Apply]を押して行います。
画像を初めに戻す必要はありません。

Cyril Richardさんのコメントにある『最も硬いモデル』は、Model degreeの数値を上げる事かな。

  • Scale: マルチスケールモデルの平滑化半径、ピクセル数。初めは、”5″です。
    • 数値が大きほど、広範囲の大きな勾配のみ除去される。
    • 数値が小さいと、小さく局所な変化を追える。
    • 光害のにじみや局所なグラデーションがあるならば、数値を上げる。
  • Smoothness: 追加のぼかし処理。
    • 数値が大きいと滑らかで穏やかになる。
    • 補正後の背景に斑点状のアーティファクトが見られるならば、数値を下げます。
  • Simplefied model: 背景が無い画像、例えば画像いっぱいの銀河などに有効です。
    • Model degree: 初めは2です。
  • Structure protection: 星雲や銀河など広範囲の明るい部分を検出し、それらを勾配補正から外す。
    • Protection threshold: 初めは、”0.05″です。
      数値が低いほど感度が高くなり保護効果が高くなる。
      数値が高いと明るい天体のみ保護される。暗い星雲は背景とされ、差し引かれるかもしれない。
    • Protection amount: 初めは、”0.50″です。保護マスクの広がり。数値が大きと広範囲。
      補正後に明るい恒星や星雲周辺にかすかなリング状やハロー状のアーティファクトが見られるならば、 
  • Downsample: 初めは、”4″です。
    • プレビューを手早く見たいときや、フルサイズの画像処理を早く行うなどの場合は”8″にします。
  • Mode : 減算を行うか、加算を行うか。減算は光害、月の明かり、霧などの補正に通常は使います。

収差補正

Aberrations Remover

このモデルは、バックグラウンド除去、及び、色補正後の線形画像を対象としています。
最良の結果を得るためには、デコンボリューションやノイズ低減処理を行う前に適用して下さい。

通常、これらのパラメータを調整する必要はありません。
strength: 収差補正の強度を調整します。
Dark ringing reduction: 強力な補正の副作用として明るい星の周囲に現れる可能性のあるダークリンギングアーティファクトを抑制するために、追加のフィルターを適用します。このオプションは、そのようなアーティファクトが確認できる場合にのみ有効にして下さい。
Protect Background: ARの適用を背景以外のピクセルに限定し、信号レベルの低い領域での過剰な処理を防ぎます。

https://github.com/riccardoalberghi/abberation_models/releases/tag/2.0.1

作者は、 Riccardo Alberghiさん。 彼は、『天文学に情熱を注いでいます。深宇宙天体の撮像を専門としており、GraXpertやSirilの収差除去ツールなど、AIに基づくオープンソースの画像処理ツールの開発にも貢献しています。』

Strenght: 強度。1のままで良いらいしです。

Dark riging reduction: 恒星の周りに、黒い輪が見られる場合に使用します。

Protect background: ピクセルをマスクで覆い隠し、保護された領域には補正を施しません。

Deconvolution

GraXpert, Deconvolution (Objects), PSF Sizeの数値は?

Siril, Dynamic PSF
https://siril.readthedocs.io/en/latest/Dynamic-PSF.html

FWHM𝑥および FWHM𝑦:

FWHMx=2σx2log⁡2\text{FWHM}_x = 2\sigma_x\sqrt{2\log 2}
FWHMy=2σy2log⁡2\text{FWHM}_y = 2\sigma_y\sqrt{2\log 2}

σx は、x方向の星像のGaussian(ガウス分布)の標準偏差
σy はy方向

恒星独自のFWHM
https://siril.readthedocs.io/en/latest/photometry/quickphotometry.html

https://siril.readthedocs.io/ja/latest/_images/3D-StarPSF.png

Siril Dynamic PSFの値を見てみます。例えば、

Siril Average Moffat PSF
N: 3 stars (0 saturated and excluded)
B: 0.000749
A: 0.003588
Beta: 3.38
FWHMx: 4.27″
FWHMy: 4.11″
r: 0.963
Angle: 80.89 deg
rmse: 3.413e-05

Moffat PSF
測定星数 => 3


Beta = > 3.38
FWHMx => 4.27秒角
FWHMy = > 4.11秒角
Roundness:丸み => 0.963
Angle = > 80.89°

4.27″ や 4.11″ は pixel ではなく arcsecです。角度の単位としての秒は、分の1/60の角度です。

Graxpertは、PSF Sizeの単位は、ピクセルです。なので、単純にFWHMx:とFWHMy:の平均値を入れても単位が違うので意味を成しません。

画像の1 pixelが、空の上で何秒角(arcsec)に相当するかを求める必要があります。

FITSデータの、”CDELT1″, “CDELT2″に注目します。

CDELT1: X軸(横方向、一般的には赤経 :RA 側)の1ピクセルあたりの変化量
CDELT2: Y軸(縦方向、一般的には赤緯 :Dec 側)の1ピクセルあたりの変化量
単位は 度(degree) が使われます。

例えば、

CDELT1 = -0.000216049837916824
CDELT2 = 0.000216165447682517
CDELT1: X方向:|−0.0002160498379|*3600 = 0.7777794"/pixel
CDELT2: Y方向:  0.0002161654477 *3600 = 0.7781956"/pixel
X方向 => 0.7778"/pixel
Y方向  => 0.7782"/pixel

1 pixel は、約 0.778 arcsec です。

X方向:FWHMx=4.27" → 4.27"/0.7778"/pixel = 5.49 pixel → FWHMx 約 5.49 pixel
Y方向:FWHMy=4.11" → 4.11"/0.7782"/pixel = 5.28 pixel → FWHMy 約 5.28 pixel

ここでのPSFは、r: 0.963で円形に近いので、単純に平均します。
FWHM平均 → (5.49 pixel + 5.28 pixel)/2 = 5.385 pixel

GraXpert, Deconvolution (Objects), PSF Size に入れる値は、[5.4] になります。

今まで単純にSiril Dynamic PSF, Moffat PSF の値を入れていましたが、FWHMとPSFの関係が分かったようです。Moffat PSF値である 4.2、や、PSF平均値である 5.4を入れて Deconvolutionを行っても大きな差が見られない感じがしています。

さらに深掘りするならば、
$ find /usr/local/share/GraXpert-linux -iname ‘deconv’ -o -iname ‘onnx’
/usr/local/share/GraXpert-linux/lib/graxpert/deconvolution.pyc
このファイルを逆コンパイルして ↓

decompyle3 を用いて逆コンパイル(は、行っていません)

decompyle3を使う仮想環境を作ります。

python3.12 -m venv /tmp/decompyle-env
source /tmp/decompyle-env/bin/activate
pip install decompyle3
decompyle3 \
  /usr/local/share/GraXpert-linux/lib/graxpert/deconvolution.pyc \
  > /tmp/deconvolution.py
# Unsupported bytecode in file /usr/local/share/GraXpert-linux/lib/graxpert/deconvolution.pyc
# Unsupported Python version, 3.11, for decompilation
file /usr/local/share/GraXpert-linux/lib/graxpert/deconvolution.pyc
/usr/local/share/GraXpert-linux/lib/graxpert/deconvolution.pyc: Byte-compiled Python module for CPython 3.11

python 3.11が必要か…

恒星除去

StarNet CLI tools

SyQon Starless

Stretch Options, Method: MTF Stretch

M82の画像を、SyQon Starless, Zenith Model を用いて分離した。その際にMTF Stretchを使った結果が下画像です。

MTF = 0.2
ガス塊や星雲の細かく淡い構造は保護された。

MTF = 0.05
淡い構造のコントラストが強調された。恒星状になってしまう。

MTF Stretch / Median

  • MTF Stretch / Median
    MTF = Midtone Transfer Function
    Median Targetは、MTF Stretch後の画像の「中央値(Median)」をどの明るさにするかを指定します。
    0.1 → 中央値を10%程度
    0.2 → 中央値を20%程度
    0.3 → 中央値を30%程度

    例)MTF Stretch
       Linked stretch (preserve star colors) → ON
       Median Target → 0.1~0.2

    Median = 0.050, 0.075
    弱いストレッチ :銀河の淡い構造をできるだけ守りたい
    星も銀河も比較的暗い状態のままZenithに渡されます。
    明るい星 → 認識できる
    暗い星 → 認識されにくくなる可能性
    淡い銀河の腕 → 保護されやすい
    淡いハロー → 保護されやすい
    星の除去 → やや控えめ

    Median = 0.15 以上
    強いストレッチ:星をできるだけ徹底的に除去したい
    暗い部分までかなり持ち上げます。
    明るい星 → よく認識
    暗い星 → 認識しやすくなる
    微小な星 → より検出される可能性
    淡い銀河構造 → 星と誤認されるリスクが増える
    星除去 → より積極的
  • Statistical Stretch:統計的ストレッチ
    画像の統計情報(主に中央値や分布)を解析して、Zenithが星を認識しやすい明るさまで自動的にストレッチする方式
  • IHS

ノイズ除去

VeraLux Silentium

  • Noise intensity (Log S) : 強度
  • Detail guard
  • Adaptive noise model
  • Enabled chroma noise
  • Chroma strength
  • Deep space smoothness:輝度に関係なく、構造のぼやけを防ぎます。
  • Shadow smoothness
  • Starfield handling
  • Use findstar
  • Auto starless detection

Aggressive ‘Shadow Authority’ for the deep background.
Features a Hard Cutoff: it automatically shuts down on signal (>25%),preventing blur on structures regardless of intensity.

VeraLux — Silentium
Linear-Phase Noise Suppression Engine

—– 使い方 —–
1. 前提条件:画像は(伸長処理を行う前に)必ずリニアでなければなりません。
2. 設定:
– PSF保護機能を活用するために、「Use findstar」にチェックが入っていることを確認してください。
-「Adaptive Noise Model」を選択してください(デフォルトでオン)。
3. 輝度キャリブレーション:
– 「Noise Intensity」:一般的な粒状感低減のための全体的なしきい値を設定します。
– 「Detail Guard」:微弱な構造を保護します。この値を上げると、背景ノイズを再導入することなく、微細なディテールのマイクロコントラストを復元します。
-「Shadow Smoothness」:背景に対して、対象を特定した強力なノイズ除去を行います。
4. プレビュー操作:
– 全体表示:クリックして領域を1:1で確認します。
– ルーペモード(1:1):ドラッグしてパンします。クリック(ドラッグせずに)すると全体表示に戻ります。
5. 処理:[PROCESS] をクリックして、フル解像度の画像に適用します。

概要

• 理論的根拠:定常ウェーブレット変換(SWT)及び、ドブシーウェーブレット(Daubechies Wavelets)
• ロジック:「シャドウ・オーソリティ」適応型マスキングおよび相対ペデスタル検出
• 天体写真の信号対雑音比の最適化(リニアステージ)

Silentiumは、恒星の形状や星雲の微細な構造を損なうことなく、物理信号から確率的ノイズを分離するように設計された線形位相ノイズ抑制エンジンです。

Silentiumは、低信号領域(背景)の処理と高信号構造の処理を分離することで、線形処理における新たなパラダイムを確立します。「シャドウ・オーソリティ」ロジックと「フィジックス・アウェア」アーキテクチャを通じて、深宇宙の背景ノイズに対して数学的に強力なクリーニングを適用しつつ、星や星雲の周囲には透過しない保護シェルを形成し、データの本来の測光的完全性を維持します。

  • 定常ウェーブレット変換(SWT):
    Daubechies(db2)ウェーブレットを用いた非デシメーション型マルチスケール分解を採用しています。このシフト不変の手法により、位相シフトゼロかつエイリアシングのない正確な周波数分離が保証され、標準的なDWTと比較して優れたテクスチャ品質を実現します。
  • 測光信号ゲーティング:
    本エンジンは、線形データ解析(中央値+シグマ閾値)から導出された統計的な「信号確率マップ」を利用しています。これにより、画像を厳密に異なる処理領域に分離し、背景の平滑化と構造のシャープ化の間の相互干渉を防止します。
  • シャドウ・オーソリティおよびエクスクルージョン・ゲート:
    背景除去のために厳格な「ウィナー・テイク・オール」ロジックを実装しています。シャドウ スムースネス・エンジンは、信号構造が検出されると直ちに
    ノイズ除去の強度をゼロに強制するハードな測光カットオフ(エクスクルージョン・ゲート)を備えています。
    これにより、保護設定にかかわらず、ハイライト部分の「ぼやけ」を防ぎます。
  • PSF補正付き構造ガード:
    ディテールガードは、線形信号確率と形態学的拡張、およびシーイング補正を組み合わせています。局所的なFWHMに応じて構造保護を線形にスケーリングし、大気によるぼやけで光学的に柔らかく見えるフィラメントの侵食を防ぎ、ノイズ除去の圧力をバランスさせます。
  • ルーペUX:
    グローバルビューは静的(表示のみ)です。クリックすると1:1の「ルーペモード」にズームインし、ピクセル単位での詳細確認が可能になります。ドラッグするとルーペをパンできます。
  • シャドウレポート:
    処理完了時に、ノイズ低減、SNRの向上、およびペデスタルの保持状況に関する統計的な内訳を提供します。

(c) 2025 Riccardo Paterniti
SPDX-License-Identifier: GPL-3.0-or-later
https://gitlab.com/free-astro/siril-scripts/-/blob/main/VeraLux/VeraLux_Silentium.py

VeraLux_Silentium.pyにある説明とコードから、ノイズ除去を追ってみます。

ノイズ除去を行う前工程で、ウェーブレットを行います。
ウェーブレット変換では、画像を「大きな構造 ← → 小さな構造」に分解できます。

天体画像
大きな構造 : 星雲の大まかな濃淡 ← 中くらいの構造 : 星雲の細かな模様 → 小さな構造 : 星,細部,ノイズ

天体画像では、構造はピクセルの集まりと表現できます。
天体画像での構造を、ピクセルの集まりとし、その大きさをスケールと表現すると、

  • 大きいスケール: 数十~数百ピクセル以上の変化 → 星雲の大まかな形、背景の勾配など
  • 中間スケール: 数~数十ピクセル程度の構造 → 星雲の細かなフィラメントなど
  • 小さいスケール → 1~数ピクセル程度の細かな変化 → ノイズ、細かい星、微細なディテール

天体画像での、ノイズ除去は以下の順序で行われます。

  1. ドブシーウェーブレットを用いて画像を異なるスケールの成分(ウェーブレット係数)に分解
  2. 各スケールの係数を分析して、ノイズと判断される成分を弱める
  3. 逆変換によって画像を再構成することでノイズ除去を行う。

597行目辺りの

        """
        SWT implementation (Stationary Wavelet Transform).
        Shadow Exclusion Gate (Hard Cutoff at 25% Signal)
        """
        max_levels = 4
        wavelet = "db2"

        # Pad image for SWT requirements
        padded_channel, (ph, _, pw, _) = SilentiumCore._pad_for_swt(channel, max_levels)

        # Decompose using Undecimated Wavelet Transform (SWT)
        coeffs = pywt.swt2(padded_channel, wavelet=wavelet, level=max_levels)

ノイズとして扱ってよい領域を先に限定し、その領域だけWavelet係数を強く削る

                 ┌─ Noise Map  ──────┐
                 │                          │
Linear Image ──┼─ Signal Map ──────┤
                 │                          │
                 ├─ Edge Map ───────┤
                 │                          │
                 └─ PSF/FWHM Map ─────┘
                            │
                            ▼
                    Adaptive Threshold
                            │
                            ▼
                 SWT / db2 / 4 levels
                            │
                            ▼
                    Soft Thresholding
                            │
                            ▼

再合成

VeraLux Star Composer

https://www.youtube.com/watch?v=Pen9aOy2NmA
Rich Stevensonさんが解説しています。

  • 1.Input: どちらかを好みで使っても良いようです。
    • Linear Add
      Linear Add(線形加算)を使用するとコントラストが最も高くなりますが、背景が非常に明るい場合、ハイライトが飽和するかもしれません。
    • Screen (Safe)
      Screen Safeは、中心部がかなり明るい銀河に適用するのが最適で、その明るさを抑えるのに役立ちますが、その一方でコントラストも低下してしまいます。
  • 2.Sensor Profile
  • 3.VeraLux Stretch
    • Star Intensity (Log D)
    • Profile Hardness (b)
    • Adaptive Anchor
  • 4.Physics (Hybrid)
    • Color Grip (Blend)
      Physics
      Color Grip (Hybrid Blend):
      Controls blending between per-channel (Scalar) and luminance-driven (Vector) mapping.
      0% (Scalar): Per-channel tone mapping. Stronger white cores, higher perceived sharpness.
      100% (Vector): Luminance-based mapping with RGB ratio preservation.
      More chromatic fidelity, slightly softer cores.
      カラーグリップ(ハイブリッドブレンド):
      チャンネルごとの(スカラー)マッピングと、輝度に基づく(ベクトル)マッピングのブレンド比率を調整します。
      0%(スカラー):チャンネルごとのトーンマッピング。白のコアが強調され、シャープさがより強く感じられます。
      100%(ベクトル):RGBの比率を維持する、輝度ベースのマッピング。
      色再現性が高く、白のコアがやや柔らかくなります。
    • Shadow Conv (Hide Aetifacts)
  • 5.Star Surgery
    • Core Rejection(LSR)
    • Reduction(Erosin)
    • Optical Healing(Halos)

コメント