スタッキングは実際どう働くのか(そして枚数が多ければ良いとは限らない理由)
スタッキングは写真を平均することではない。それは特定の失敗パターンを持つ S/N 比の議論であり、フレームを足し続けてもやがて効かなくなる。
なぜ天体写真をスタックするのかと聞けば、たいてい「ノイズを減らすため」と返ってきます。正しいのですが、あまり役に立ちません。何枚必要か、なぜ自分の 200 枚スタックが他人の 60 枚スタックより悪く見えるのか、なぜもう 1 時間足しても何も変わらないことがあるのか、どれも教えてくれないからです。
実際の理屈は短く、一度わかれば、スタッキングの判断のほとんどはそこから決まります。
信号は足し算される。ノイズはされない
望遠鏡を星雲に向けて露光します。各ピクセルはある数の光子を受け取ります。この数は固定ではありません。光子の到着はランダムで、露光ごとにおよそ自分自身の平方根だけ変動します。100 個集めればフレーム間の変動は約 10。10,000 個なら約 100。
ここで N 枚をスタックします。信号(対象からの実際の光子数)は線形に足し算され、N 倍になります。ノイズはランダムで一部打ち消し合うため、N の平方根でしか増えません。
したがって信号対ノイズ比は √N で改善します。
この一つの関係で、目にすることの大半が説明できます。
- 4 枚は 1 枚の 2 倍良い。
- 16 枚は 4 枚の 2 倍良い。
- 64 枚は 16 枚の 2 倍良い。
品質を倍にするたびに 4 倍の枚数がかかります。だから 10 枚と 40 枚の差は劇的で、200 枚と 260 枚の差は見えません。後者にがっかりしても、何かを間違えたわけではありません。30 % 多くのフレームを足して 14 % の改善を得たのであり、14 % は目が確実に気づく範囲を下回ります。
200 枚スタックから目に見えて一段上げるには、800 枚前後が必要です。
だから読み出しノイズがサブ露光時間を決める
こうは振る舞わない第二のノイズ源があります。センサーを読み出すたびに、電子回路は固定のペナルティを加えます。これは露光時間に依存せず、5 秒フレームも 500 秒フレームもそれぞれ一回ずつ払います。
つまり同じ総積算時間でも、それを何枚に分割するかに比例して読み出しノイズを抱えます。90 分を 10 秒サブ 540 枚で撮れば 540 回払い、同じ 90 分を 5 分サブ 18 枚で撮れば 18 回です。
長いサブ露光を勧める理由はこれに尽きます。総時間が同じでも、淡い対象でガイド付き機材がスマート望遠鏡を引き離すのもこのためです。ガイド機材がより多くの光を集めているわけではありません。センサーを読み出す回数が 30 分の 1 なのです。
一方で、長いサブには良い追尾が必要で、流れた 300 秒フレームには何の価値もありません。正しいサブ長は、架台が確実にこなせる最長のもので、これは処理ではなく機械の問題です。
スタックが実際に失われるのは位置合わせ
√N の議論は、すべてのフレームが同じ信号を同じピクセルに寄与すると仮定しています。それにはフレームが正確に重なっている必要があり、がっかりするスタックの大半はここで失敗しています。
フレームは露光の間に動きます。架台のドリフト、地平線近くの大気差、たわみ、そして経緯台(スマート望遠鏡はすべてこれに含まれます)では視野回転。1 時間もあれば、最初と最後のフレームは互いに数十度回転していることがあります。
平行移動しか扱わない位置合わせでは対応できず、しかも失敗が目立ちません。エラーメッセージは出ず、すべてがわずかにぼやけたスタックができるだけです。ピント不良やシーイング不良に見えるので、間違った問題を一シーズン追いかけることになります。
正しい位置合わせは星そのものから出発します。各フレームの明るい星から三角形を作り、辺の比で記述します。辺の比は平行移動、回転、拡大縮小で変わりません。一致する三角形がどの星がどの星に対応するかを投票し、外れ値に強いフィッティングが食い違う票を捨て、仕上げのパスで結果をサブピクセル精度まで追い込みます。
この最後の段階が重要です。スタック全体に一貫した半ピクセルの誤差があると、シーイングがわずかに悪かった場合と同じだけの細部を失います。
除去:平均ではできないことを取り除く
平均はランダムなノイズを扱います。ランダムでないもの、つまり人工衛星、飛行機、宇宙線、視野を横切る車のヘッドライトは扱えません。
100 枚を平均して、うち 1 枚に衛星の軌跡があれば、軌跡は 1 % の強さでまだ残ります。淡いとはいえ暗い空を背景にすれば見え、ストレッチしても消えません。
除去は、各ピクセルでスタック全体を見渡し、そこにふさわしくない値を捨てることでこれを取り除きます。手法は「ふさわしくない」の意味で異なり、どれを選ぶかには理由があります。
シグマクリッピング は各ピクセルの平均と標準偏差を取り、閾値を超える値を落とします。よく機能し、既定になっているのにも理由がありますが、すべてのフレームが同じ分布をサンプリングしていると仮定しています。
ウィンザー化シグマクリッピング は外れ値を除くのではなく、大多数の側へ引き寄せます。浅いスタックではこちらが安全です。8 サンプルから標準偏差を推定して値を捨てると、本物の信号まで捨てがちだからです。
線形フィット・クリッピング は別の問いを立てます。各ピクセルの値をスタック全体で並べ、直線を当てはめます。夜の間に透明度が変わることで生じるような滑らかな広がりは、このモデルでは想定内でコストがかからず、衛星の軌跡は相変わらず直線から遠く外れた一つの値です。
この違いは思った以上に効きます。薄雲が入ってきたり、対象が光害ドームの方へ沈んだりすると、フレームは実際に異なります。そのばらつきはノイズではなく実データです。シグマクリッピングは範囲の両端のフレームを外れ値と見なして捨て始めますが、暗い側の端はたいていそのセッションで最も澄んだフレームです。間違いだと決めつけた手法に、最良のデータを奪われることになります。
見るべきなのは、フレームごとの空の明るさがどれだけ変動するかです。安定していればシグマクリッピングが正解。数パーセント以上動くなら線形フィットの方がうまくいきます。Akastroid はこの変動を計測し、およそ 8 % を超えると自動で切り替えます。
浅いスタックには別の扱いが必要
8 枚では分布を推定できません。どの除去法もサンプルが少なすぎ、積極的なクリッピングは外れ値を除くつもりで本物の信号を除いてしまいます。
およそ 8 枚未満なら、単純平均か中央値の方がたいてい無難です。8〜15 枚ならウィンザー化。それ以上で本来のクリッピングが安全になります。
この失敗は気づきにくいものです。浅いスタックに積極的な除去をかけると、きれいに見えるのに淡い細部が静かに失われた画像になります。壊れては見えず、少し物足りなく見えるだけで、画面上にはその理由を示すものが何もありません。
枚数を増やしても効かなくなるとき
次の 1 時間が何ももたらさない場合が三つあります。
読み出しノイズ。 非常に短いサブでは、ノイズフロアは空の光子ではなく読み出しで決まります。スタックはまだ効きますが、枚数では取り除けない固定コストと戦っています。長いサブなら取り除けます。
淡い対象での空の明るさ。 明るい空の下では背景が支配的で、対象の淡い外縁はそもそもそれを超えないかもしれません。S/N は √N で改善し続けますが、かろうじて検出できるものの √N は、やはりかろうじて検出できる程度です。暗い空やナローバンドフィルターならこれを変えられます。時間を足しても変わりません。
位置合わせ。 レジストレーションが半ピクセルの誤差を残しているなら、フレームを足すとわずかにずれたデータが増えるだけです。スタックは滑らかになっても、シャープにはなりません。空のせいにする前に確認してください。
実用的な答え
- サブ長:架台が確実に追尾できる最長。これで読み出しノイズが決まり、淡い対象では読み出しノイズが支配的になる。
- 枚数:4 倍単位で考える。目に見える改善が欲しいなら 4 倍にする計画を立てる。
- レジストレーション:経緯台では回転を扱えること。
- 除去:スタックの深さと夜の安定度に合わせる。
- 限界を知る:読み出しノイズ、空の明るさ、位置合わせ。枚数が効くのは前の二つだけで、それもゆっくりとしか効かない。
どれも √N 以上の数学は要りません。それでも、不満の残るスタックがなぜそうなったのかは説明でき、たいていはスライダーをもう一つ増やすより役に立ちます。
英語の原文を読む · 他の言語 Čeština · Dansk · Deutsch · Ελληνικά · Español · Suomi · Français · Hrvatski · Magyar · Italiano · Norsk bokmål · Nederlands · Português (Brasil) · Română · Slovenčina · Slovenščina · Srpski · Svenska · Українська · 繁體中文