ほしぞloveログ

天体観測始めました。

タグ:スタック

太陽画像の処理をしているのですが、AutoStakkertの画像選別がいまいち信用できていません。

最近は1ms程度の露光時間で、そう多くない200フレーム程度を撮影し1ショットとし、この1ショットを30秒ごとに撮影して、1時間とか2時間とか長時間の連続撮影しています。その中で統計的に飛び抜けてシーイングのいい時間帯を探すと、そのショットはたのショットに比べて平均的にシーイングがいいので、そのうちの上位90%とかを使うことにしています。

その対極の方法が、1ショットを数千フレーム、時には万のオーダーのフレーム数で撮影して、スタック時にその中から上位フレームを数%とかのかなり少数を選んでスタックすることでしょうか。

後者の方法でやっていたこともあるのですが、そもそも平均的にシーイングがイマイチな時間を撮影している限り劇的によくなることはないことは、ここ1ヶ月くらいで理解できました。それはそれとして、上位フレームを選ぶのにAutoStakkertを使っていますが、長時間ファイルから少数を選んでもスタック結果を見る限りきちんと上位フレームを選べている実感があまりなく、この結果がいまいち信用できなかったのです。

少なくともこれまで、きちんとしたフレームが選ばれるという確認を自分では取ったことがなかったので、今回少し検証してみました。


PIPPを使ってAutoStakkertの画質評価を検証

かなり昔にインストールしたserファイルの事前処理アプリのPIPPを最近再び使うようになってきて、思ったより色々できそうなことを再認識できたので、ちょっと面白そうな実験をしてみました。

PIPPの機能の一つとして「複数のserファイルを結合する」ということができます。serファイルの読み込みの「Source Files」のタブで複数のserファイルを読み込んだ状態で、同じ画面内の「Multiple Soure Files:」で「Join mode」を選ぶことで、結合された動画ファイルを生成する処理となります。


1:
ここに2つのserファイルを用意します。一つは A:シーイングがいい時間帯のもので、分解能がよく出るとわかっているserファイルです。Aのファイルを実際に90%スタックして、ImPPGで細部出しをしたものが以下の画像になります。分解能も出ているのでシーイングが良かったことがわかります。
12_05_56_lapl2_ap3965_out

もう一つは、B:シーイングが悪い時間帯のもので、分解能が出ないとわかっているもので、同条件でBを細部出しまでしても、以下の画像のようにかなりボケボケです。
12_12_43_lapl2_ap3955_out

これらA、Bの2つのserファイルを、PIPPを使って特に余分な処理を何もせずに、そのまま単純に結合します。結合の順序は、分解能が出ていないBを先、分解能が出ているAを後としました。これはAutoStakkertではいいと判断されたコマが先に持ってこられるので、きちんと順序づけできているかどうか、元ファイルの先にいいものがあるか、後にいいものがあるのかで不公平が出ないようにチェックするためです。

結合したseeファイルをAutoStakkert!4で読み込み、解析だけすると、各コマの質の評価がされます。
スクリーンショット 2025-05-09 110155_cut1

評価されたグラフの灰色の線で結果を見ると、ファイルの先に記録されているほぼ半分のコマは評価が低く、後半半分のコマの評価が高いです。緑色の線はこの評価を利用していい順に並べ替えた後の結果なので、ここでは無視してください。これはPIPPで指定したように、前半はシーイングが悪いB、後半はシーイングがいいAという順序の通りになっていて、AS!4でもきちんと評価できていることがわかります。

AS!4ではその後、この評価結果の通りにいいものから先に並べかえてしょりをすることになります。一番最初に来ているコマを見てみると次のように分解能がいいAからのものが来ていて、
スクリーンショット 2025-05-09 110155_cut2

一番後ろに来ているコマを見てみると、ボケボケのBからきているのものになっていることがわかります。
スクリーンショット 2025-05-09 110242_cut2

上の2枚の比較はよく見ないとわからないかもしれません。スタックして細部を出した後にものすごい差が出るとしても、動画の状態での一コマの比較ではこのように最良コマと最悪コマで見たとしても、わずかこの程度の差に過ぎません。もし元々撮った一つのserファイルを、AutoStakkert!4でいい悪いを評価してもらったとしても、見える差は非常に小さくて、それが本当にいいのか悪いのか、少なくとも私の眼力でははっきり見分けることができません。

それでも上の結果だけ見ると、AutoStakkert!4の順位づけは正しく使えるという評価になりますが、それは本当なのでしょうか?


では明るさが違うと?

2:
では次に少し意地悪をして、C: シーイングは良かったけれども少し暗く撮影したserファイルと、D: シーイングは悪かったけれども明るく撮影できたファイルを用意します。2つのserファイルC、Dを同様にPIPPで単純に結合します。ちなみに、それぞれ細部出しまでした画像が以下になります。

C: 分解能が出ていても、全体的に暗い
12_02_14_lapl2_ap3963_out

D: 分解能が出ていないが、全体的に明るい:
12_30_03_lapl2_ap3859_out

今回はserファイルの結合順序を、シーイングがいいCを先、シーイングが悪いDを後とします。結合したserファイルをAutoStakkert!4で読みこんで同様に解析にかけます。シーイングをきちんと評価しているなら、前半がいい評価で、後半が悪い評価になるはずです。

結果は以下のようになります。
スクリーンショット 2025-05-09 110740_cut1

ここでも灰色の線を見ます。はい、期待とは全く逆で、前半のシーイングがいいCを悪く評価し、後半のシーイングが悪いDを良く評価してしまっています。

これは、判断基準の一つに「明るさ」というものを使っているからかと思われます。しかもこの明るさが違う場合の評価の差が、先の明るさが同等くらいの時の評価の差よりもはるかに大きくなっているので、シーイングの差よりも明るさの差の方をはるかに重要視しているというまずい結果なのかと推測できます。

ここら辺がAutoStakkert!4での評価が信頼できないところの一つです。

(2025/5/10: 追記) 記事公開後、ASで上位10%を選択してスタックしたものと、Ninoxで上位10%選択してASで100%スタックしたもので差が出るかという質問があったので、試してみました。私はあまり差が出ないと予測していたのですが、結果は思ったより差が出ました。細部出しまでふくめて、同じ条件で処理した結果を示します。

まずはAutoStakkert4で上位10%選んだものです。
12_12_06_lapl2_ap3983_IP

次はNinoxで上位10%選択してAutoStakkert4で100%スタックしたものです。
12_12_06_pipp_lapl2_ap3944_IP

かなりわかりにくいので、わかりやすいところを一部拡大して並べて見ます。左がAutoStakkert4で上位10%選んだもの、右がNinoxで上位10%選択してAutoStakkert!4で100%スタックしたものです。
スクリーンショット 2025-05-10 170954_cut
特に黒点や、その右上は明らかに右のNinoxの方がいいかと思います。

別の個所を比較します。同じく左がAutoStakkert!4で上位10%選んだもの、右がNinoxで上位10%選択してAutoStakkert4で100%スタックしたものです。
スクリーンショット 2025-05-10 172527_cut

こちらの比較は左のASの方が細部まで出ています。どうやら得意不得意があるみたいで、まだどちらがいいのかちょっと迷っていますが、今現在の判断は、最細部がASの方が出ているとすると、ASの方に傾いていますでしょうか。

1つ目の比較だけで判断していた時はNinoxを使えばいいという判断弟でしたが、2つ目の比較でASの方がいいとなったので、どちらのアルゴリズムを選んだ方がいいのか迷うことになります。serファイル内に明るさの変化がある場合はNinox、変化がない場合はASでしょうか。結構面倒です。もう少し検証例を増やした方がいいのかもしれません。(追記終わり)


画像評価のアルゴリズム

少しAutoStakkert!4の画像評価のアルゴリズムを示しておきます。元々は私自身も、AS4!でどんな評価アルゴリズムが使われているのか全然知らなかったのですが、いつも非常に的確な意見を言ってくれる薜くんが、X上でCloudy Nightsで議論の情報をくれました。このページの中の2つ目のリンク先を開き、その中のさらに2つのリンクをたどると、元の論文と思われるものにたどり着きます。特に2つ目のリンクが具体的にどんな太陽の画像を使っているかも示してあり、Gram  matrix Gijと呼ばれる評価関数を使っていることが示されています。Gram  matrixは

(1) The size of the Gram matrix depends only on the number of feature maps instead of the image size.(2) The Gram matrix is only related to texture features of an image, not itsstructural content.

とのことなので、画像の特徴を表すことに適しているようです。これらを利用して、Lqualityを求め、そのLqualityがPE (perception evaluation)そのもので、そのPEとPSF (point spread functionsを表すD/r0との関係をFigure 6で示してくれています。AutoStakkertはこれを利用しているということなので、適当に評価しているわけでは全くなく、かなりしっかり評価しているようです。

その一方、ここまでしっかり評価しているのなら、高々明るさだけの違いでシーイングの評価が、ひどいレベルで完全にひっくり返ってしまうのは何なんだというのが、今の個人的な感想です。

(2025/5/10: 追記)
tentaiさんの情報によると、結局AutoStakkertはLaplacian、下に出てくるNinoxはGradientという、かなり一般的なシンプルなアルゴリズムで処理されていて、リンク先の論文にあるPE (perception evaluation)を求めるような、複雑な判別はしていないことが判明してきました。
シンプルなアルゴリズムでは、例えば輝度に依存するというような実際に判断したいものとは違う基準で判別されることも十分にありうるのかと思います。

複雑な判別とはどれくらいのものなのか、試しにサンプルコードを走らせてみました。太陽表面のHαのサンプル画像が付いていて、PE (perception evaluation)を計算してくれるみたいです。結果は0.239とかいう数字が出てきました。数字そのものの評価はまだよくわかっていませんが、問題は計算時間で、付属の1024x1024ピクセルの小さな画像でも1枚計算するのにM1 Macで1分以上かかりました。実際に撮影する数百枚や、千枚を超える画像を評価する必要があるので、トータルではちょっと計算時間がかかりすぎ、毎回これだとさすがに実用的ではなくなってくるので、結局は今のシンプルなLaplacianやGradientが現実的なのかもしれません。

記事にコメントを書いてくれたほんのり光芒さんのASの評価記事の中でがJUN1WATAさんのLaplacianを利用したserファイルのフィルターを書いた記事がリンクされていました。4月の記事で私も読んでいるはずですが、その時はまだ重要性を認識できていなかったと思います。今読むとものすごく面白くて、OpenCVを利用したコードを公開してくれているので、もし判別のためのフィルターを組みたくなったらここを参考にさせてもらうことになるかと思います。

徐々に理解が進んできていて楽しいです。コメントや情報など参考にさせて頂いたHIROPONさん、OHZAKIさん、tentaiさん、ほんのり光芒のみゃおさん、JUN1WATAさん、ありがとうございました。
(追記終り)


PIPPのNinoxアルゴリズム

ASの明るさ判断に文句ばっかり言っても仕方がないので、ここでもう一つ試します。すぐ上で試したCとDのserファイルの結合時に、PIPPの方で画質評価を適用してやります。


3:
PIPPには「Quality Options」とうタブがあり、その中の「Quality Algorithm Selection」で画質を何通りかで評価でき、各コマをその評価に従っていいものから順に並べ替えてserファイルを再度作ることができます。複数のserファイルを扱う場合でも、複数ファイルに含まれる全コマを並べ替えます。

まずはデフォルトの「Default PIPP Quality Algorithm」というのを選択して再結合したserファイルを作ります。実際にできたserファイルをSER Playerで見てみると、明るくて分解能の悪い画像が前半に来ていて、暗い分解能のいい画像が後半に来ているので、AutoStakkert!4の場合と同じような結果になっています。実際、AS!4で解析してみると、
スクリーンショット 2025-05-09 112004_cut
のように、先に分解能の悪いDから来たと思われる明るいコマをいいと評価し、後半に分解能のいいCから来た暗いコマを悪いと評価してしまっています。これを見る限り、PIPPのDefault PIPP Quality AlgorithmとAutoStakkert!4のアルゴリズムはよく似ているのかと思われます。


4:
次に、PIPPで「Quality Options」の「Quality Algorithm Selection」で「Original Ninox Quality Algorithm」を選んで、2つのserファイルC、Dから再結合したserファイルを作ります。
スクリーンショット 2025-05-09 112357_cut3

できたserファイルをSER Playerで見てみます。おっ!、今度はきちんと暗くても分解能がいいコマが先に来ていて、明るくても分解能が悪いコマが後半にきています。AutoStakkert!4でも解析してみると、
スクリーンショット 2025-05-09 112357_cut1
の灰色の線を見てもわかるように、やはり間違えて分解能のいい前半を悪いと評価して、分解能の悪い後半をいいと評価してしまっています。明るさが優先されてしまっているのがわかります。


結論

「Original Ninox Quality Algorithm」できちんと評価して、必要ない部分はPIPPの方で枚数制限をしてserファイルにして、AutoStakkert!4ではそのいいコマだけを100%利用するようにすれば、変な評価をする可能性のあるAutoStakkert!4の評価を、避けてスタックすることができます。

今回、すくなくとも、「Original Ninox Quality Algorithm」は分解能に対して期待した正しい評価を下してくれることがわかりました。まだこれが完璧なのかどうかの評価ではありませんが、今後はAutoStakkertの評価をそのまま使うことはせずに、きちんと上位画像を選択したいときは少し手間ですが、事前にPIPPの「Original Ninox Quality Algorithm」を通すことにしたいと思います。

ちなみに、Cloudy Nightsの議論一つ目のリンクがNinoxについて書いてあるとのことなのですが、見る限りリンク先は何も表示されません。興味深いのでとても残念です。


まとめ

自分で実際に確かめてみて、やっと少しスタック時の画像選択評価についてあるていど納得できてきました。

AutoStakkertでの画質評価で、いいものがを選択できるという意見も聞きますが、国内国外問わず、AutoStakkertの画像仕分けは信用できないという意見は随所に散見します。

私自身もこれまでAutoStakkertでの画質評価において明るさが関係することは、以前皆既月食で雲があり明るさが変わる悪条件のときに試したので定性的には知っていました。でもきちんとした検証はできていませんでした。実際には、今回のように撮影している最中にも明るさが変化することは十分あり得るはずで、少なくとも今回の結果で、AutoStakkertの明るさの評価が効きすぎていて、他の重要な評価が無視されることがある得るということがよくわかりました。

今回、「分解能」と「明るさ」があらかじめはっきり区別できる撮影ファイルを使うことで、PIPPの「Original Ninox Quality Algorithm」が、見かけの明るさのには惑わされずに、分解能をきちんと見て評価しているらしいことがわかりました。これは、今後も役立つ、大きな確認事項になると思います。

ただこれ以上の評価は、順位付けされたserファイル内のコマを見ても、自信をもってはっきりとどれがいいとは言えないので、なかなか難しいと思います。また余裕があったら、はっきり傾向のわかるserファイルの数を増やして、もう少し検証してみるのもいいのかもしれません。






ここしばらくは別の記事でしたが、再び実画像のノイズ解析です。前回の記事はこちらになります。


ここまでで、画像1枚の中にある各ノイズの貢献度が定量的にわかるようになりました。


また天体部分の信号にあたる大きさも定量的に評価でき、S/Nが評価できるようになりました。


S/Nは1枚画像では評価しきれなかったので、スタック画像で評価しましたが、あくまで簡易的な評価にすぎません。簡易的という意味は、ダーク補正はフラット補正でノイズの貢献度がどうなるかをまだ評価できていないということです。

今回の記事では、ダーク補正やフラット補正で画像の中にあるノイズがどうなるかを評価し、他数枚をインテグレートしたときに信号やノイズがどうなるのかを議論してみたいと思います。


スタック(インテグレーション)

そもそも、天体写真の画像処理で言うスタック(PixInsightではインテグレーションですね)とはどういったことなのでしょうか?

基本的には以下のように、重ね合わせる枚数に応じて、信号SとノイズNで、それぞれ個別に考えることができます。
  1. 画像の天体などの「信号部分」Sに関しては、多数枚の画像同士で相関がある(コヒーレントである)ので、そのまま足し合わされるために、信号Sは枚数に比例して増えます。
  2. 画像の天体以外の「ノイズ部分」Nに関しては多数枚の画像同士で相関がない(インコヒーレントである、コヒーレンスが無い)ので、統計的には2乗和のルートで重なっていきます。例えば5枚のノイズNがあるなら、sqrt(N^2 + N^2 + N^2 + N^2 + N^2) = sqrt(5) x Nとなるので、√5倍となるわけです。
そのSとNの比(S/N、SN比、SNR (Signal to Noise ratio))を取ることで、スタックされた画像がどれくらいの質かを評価することができます。S/N等は技術用語ですが、ある特殊分野の技術単語というわけではなく、かなり一般的な単語と言っていいかと思います。

n枚の画像をスタックすると、1の信号Sのn倍と、2のノイズNの√n倍の比を取ると、
  • S/N = n/sqrt(n) = sqrt(n)
と√n倍改善されるということです。

よくある誤解で、スタックすることでノイズが小さくなるという記述を見かけることがあります。ですが上の議論からもわかるように、ノイズが小さくなっているわけではなく、実際には大きくなっています。ノイズの増加以上に信号が増えるのでS/Nがよくなるということです。また、スタックするという言葉の中には、足し合わせた輝度をスタックした枚数で割るという意味も含まれていることが多いです。S/Nが良くなった画像をスタックした枚数で割ることで1枚画像と同じ輝度にした結果、1枚画像と比較してノイズが小さい画像が得られたということです。

もちろん、こういったことをきちんと理解して「スタックすることでノイズが小さくなる」と略して言うことは全く構わないと思います。ただ、定性的にでもいいので、どういった過程でスタックが効いてくるのかは、理解していた方が得することが多いと思います。


ダーク補正

天体写真の画像処理でも一般的な「ダーク補正」。一番の目的はホットピクセルやアンプグローなど固定ノイズの除去です。ホットピクセルは、センサーがある温度の時に撮影すると、いつも決まった位置に飽和状態に近い輝度のピクセルが現れることです。ホットピクセルの数は温度とともに多くなると思われます。アンプグローはセンサーの回路の配置に依存するようです。これが温度とどう関係があるかはほとんど記述がなく、よくわかっていません。ホットピクセルやアンプグローなどは、どのような過程、どのような頻度で出るのかなど、カメラに依存するところも多くあり、私自身あまりよくわかっていないので、今回は詳しくは扱いません。いつか温度とホットピクセルの関係は実測してみたいと思います。

ダーク補正でダークノイズは「増える」:
これまたよくある誤解が、ダーク補正をするとダークノイズが小さくなると思われていることです。ここで言うダークノイズとは、ダークカレント(暗電流)がばらつくことが起因で出てくるノイズのことです。ダークカレントとは、センサーに蓋をするなどしていくら真っ暗にしても出てくる一定の電流からの信号のことで、センサーの温度によって単位時間あたりの大きさが決まります。この信号のバラツキがダークノイズとなります。最近はメーカのカメラのところにデータが掲載されているので、そこからダークカレントを読み取ることができ、これまでもその値からダークノイズを計算し、実測のダークノイズと比較して正しいかどうか検証してきました。

何が言いたいかというと、ダーク補正をするとホットピクセルは除去できるが、ダーク補正ではどうやってもダークフレームが持っているダークノイズ(ホットピクセルでないラインダムなノイズの方)は消すことができなくてむしろ必ず増えるということです。

さらにいうと、個々のダークファイルには当然読み出しノイズ(Read noise)も含まれているので、ダーク補正時に読み出しノイズも増やしてしまうことにも注意です。読み出しノイズの増加については、次回以降「バイアスノイズ」という記事で、独立して説明します。

コヒーレンス(相関)があるかないか:
ホットピクセルは、個々のダークファイルに全て(ほぼ)同じ位置、(ほぼ)同じ明るさで出てくる、輝度が飽和しかけているピクセルのことです。アンプグローもカメラが決まれば同じ位置が光ます。どのファイルにも同じように明るく出てくるので、ばらつき具合は(中間輝度を基準とすると)全て正の方向で、互いに正の相関があり ( =「相関がある」、「コヒーレンスがある」、「コヒーレント」などとも言う)、全て足し合わされます。

一方、ダークカレンと起因のダークノイズはランダムなノイズです。個々のダークファイルのある一つのピクセルに注目して、全てのファイルの同じ位置のピクセルの値を見てみると、全ファイルのそのピクセルの輝度の平均値を基準として、個々のファイルの輝度の値は正負がバラバラになります。このことを相関がない ( =「無相関」、「コヒーレンスがない」、「インコヒーレント」などとも言う)といい、それらの値を全て足し合わせると正負なのである程度打ち消しすことになります。

ノイズの数学的な定義:
個々のダークファイルの画像のある面積を考えてみましょう。その面積の中の輝度も、平均値を中心に正負がバラバラで、その大きさも「ばらつき」があります。この「ばらつき具合」がノイズそのものです。数学的には面積内の各ピクセルの値から平均値を引いて、2乗して足し合わせたものを統計用語として「分散」と呼び、そのルートを「標準偏差」と呼びます。この標準偏差をここではノイズと呼ぶことにしましょう。

ここで注意ですが、ある面積を選ぶ時にはホットピクセルやアンプグローを含めてはいけません。ホットピクセルやアンプグローは背景のダークに比べて格段に明るく、特にホットピクセルは飽和気味の場合も多いのでで、そもそもここで考えている統計に従いません。ホットピクセルやアンプグローなどの明るい固定ノイズを除いた領域でダークノイズを測定する必要があります。ちなみに、飽和気味のホットピクセルを含んで測定してしまうと、とんでもなくばらついているようなものなので、結果はノイズがとんでもなく大きく出てしまうということは、言うまでもありませんね。

ノイズの重ね合わせの直感的なイメージ:
あるダーク画像1枚のある面積のノイズがNだったとします。他のダーク画像も同様にノイズNがあるとします。このダーク画像を例えば2枚足し合わせると、個々のピクセルは正負バラバラなのである程度打ち消します。その打ち消し具合は統計的には無相関の場合は「2乗和のルート」で合わさることになります。この場合2枚なので、
  • sqrt(N^2+N^2) = √2 x N
とルート2倍になります。正負で打ち消すということで、2倍にはならずに、元から減ることもなく1倍以下にもならなくて、結局その中間くらいということは直感的にイメージできるかと思います。

負の相関について:
あと、負の相関も考えておきましょう。ある画像で特徴的な形で明るい部分があるとします。もう一枚の画像では同じ形ですが、1枚目の明るさを打ち消すようにちょうど逆の暗い輝度を持っているとします。2枚の画像を足し合わせると、正負で、しかも明るさの絶対値は同じなので、ちょうど打ち消すことができます。このようなことを互いに「負の相関がある」と言います。でも天体写真の画像処理の範疇ではあまりない現象なのかと思います。


ダーク補正の定量的な扱い:
実際の画像処理では、ダーク補正というのはライト画像からマスターダーク画像引くことです。マスターダークファイルとは、個々のダークファイルを複数枚重ねて、輝度を元と同じになるように枚数で割ったものですから、 個々のダークノイズをNとして、n枚重ねて、輝度を枚数nで割ったとすると、マスターダークファイルのダークノイズ
  • N_ masterはsqrt(n x N^2) / n = 1/√n x N
となり、元のノイズのルートn分の1になります。

各ライトフレームにも当然ダークノイズは含まれています。ダーク補正をする際に、各ライトフレームのダークノイズと、マスターダークファイルに含まれるダークノイズは、ここまでの議論から2乗和のルートで「増える」ことになります。

1枚のライトフレームのダーク補正:
個々のライトフレームがマスターダークファイルで補正されると、補正後のダークノイズは
  • sqrt(N^2+N_ master^2) = sqrt(N^2+(1/√n x N)^2) = N x sqrt(1+1/n)
となり、sqrt(1+1/n) 倍にごく僅か増えます。

ダーク補正されたライトフレームのスタック:
これらのダーク補正されたライトフレームをスタックします。スタックの際、ライトフレームに元々あったダークノイズは個々の補正されたライトフレームでランダムに(無相関に)存在するので2乗和のルートで合わさり、輝度を揃えるために最後にライトフレームの枚数で割るとします。

マスターダークファイルで足された(ルートn分の1の小さい)ダークノイズは、スタックされる際に「(同じマスターダークファイルを使い続けるために)正の相関を持っている」ことに注意です。

2枚のスタック:
  • sqrt([sqrt(N^2+N^2)]^2 + [N/sqrt(n)+N/sqrt(n)]^2) = N sqrt(sqrt(2)^2 + [(2/sqrt(n)]^2) = N sqrt(2 + (2^2)/n) 
大外のsqrtの中の、1項目が無相関で2乗和のルートで足し合わさるノイズ。2項目が正の相関を持ってそのまま足し合わさるノイズ。それぞれがさらに2乗和となり大外のsqrtでルートになるというわけです。

3枚のスタック:
  • sqrt([sqrt(N^2+N^2+N^2)]^2 + [N/sqrt(n)+N/sqrt(n)+N/sqrt(n)]^2) = N sqrt([sqrt(3)^2 + (3/sqrt(n)]^2) = N sqrt(3 + (3^2)/n)

ライトフレームの枚数をnl枚として、
nl枚をスタックすると:
  • N sqrt([sqrt(nl)^2 + (3/sqrt(nl)]^2) = N sqrt(nl + (nl ^2)/n)

スタックされたライトフレームの輝度を、1枚の時の輝度と合わせるためにnlで割ると、上の式は少し簡単になって:
  • N sqrt(nl + (nl ^2)/n) /nl = N sqrt(1/nl + 1/n)
と ライトフレームの枚数nl分の1とダークフレームの枚数n分の1の和のルートで書ける、直感的にもわかりやすい形となります。

簡単のため、個々のライトフレームの枚数と、個々のダークフレームの枚数は同じnとしてみましょう。
n枚のスタックは:
  • N sqrt([sqrt(n)^2 + (n/sqrt(n)]^2) = N sqrt(n + (n^2)/n) = N sqrt(n + n) = N sqrt(2n)

となり、結局は「1枚当たりのライトフレームのダークノイズNがn枚」と「1枚当たりのダークフレームのダークノイズNがn枚」合わさったものと同じで、√2n倍のノイズとなります。

マスターダークを考えずに、ダーク補正をまとめて考える:
これは直接「n枚のライトフレーム」と「n枚のダークフレーム」のダークノイズを全て足し合わせたものを考えることと同等で、実際に計算してみると
  • sqrt(n x N^2 + n x N^2) =  N sqrt(2n)
と、1枚1枚処理した場合と同じなります。数学的には
  1. 事前にマスターダークを作ってから個々のライトフレームに適用しても、
  2. 全てのダークノイズをライトフレーム分とダークフレーム分を一度に足しても
同じ結果になるということです。これは直感的にわかりやすい結果ですね。

重要なことは、たとえ頑張ってライトフレームと同じ枚数のダークフレームを撮影して補正しても、補正しない場合に比べてノイズは1.4倍くらい増えてしまっているということです。もっと言うと、補正しない半分の数のライトフレームで処理したものと同等のダークノイズになってしまういうことです。ホットピクセルを減らすためだけに、かなりの犠牲を伴っていますね。

枚数が違うダークフレームでの補正:
例えばある枚数のライトフレームを枚数が違うダークフレームで補正する場合を具体的に考えてみます。

例えば10枚のライトフレームと、同じ露光時間とゲインのダークフレームが10倍の100枚あるとするとします。ダークノイズ起因のS/Nはライトフレームは1/√10=0.316となり、ダークフレームでは1/√100 =1/10となります。ダーク補正したライトフレームは
  • sqrt(1/10+1/100)=sqrt(11/100)=√10/10=0.332
となり、ダーク補正する前の0.316よりほんの少し悪くなる程度に抑えることができます。同様の計算で、2倍のダークフレームだと約4分の1のノイズ増加、3倍のダークフレームがあれば約10分の1のノイズ増加に抑えられます。

では闇雲にダークフレームの数を増やせばいいかというと、それだけでは意味がなくて、他のノイズとの兼ね合いになります。画面のノイズがダークノイズで制限されていいればどの通りなのですが、例えば明るい空で撮影した場合にはノイズ全体がスカイノイズに支配されていることも多く、こんな場合にはダークフレームの枚数は少なくても、それによるノイズの増加は無視できるということです。


フラット補正

フラットフレームは一般的にライトフレームと同じゲインですが、露光時間は異なることが普通です。そのためフラット補正を真面目に計算すると、ダーク補正よりもさらに複雑になります。

ただし、ライトフレームの輝度はライトフレームの背景よりもはるかに明るいことが条件として挙げられるので、補正の際にフラットフレームの輝度を、ライトフレームの背景の輝度に合わせるように規格化する(割る)ので、ノイズに関してもその分割られて効きが小さくなると考えられます。

その比はざっくりフラットフレームの露光時間とライトフレームの露光時間の比くらいになると考えていいでしょう。最近の私の撮影ではライトフレームが300秒露光、フラットフレームが最も長くても10秒露光程度で、通常は1秒以下です。ノイズ比が30分の1以下の場合、2乗和のルートとなると1000分の1以下となるので、実際にはほとんど効いてきません。さらにフラットファイルも多数枚をスタックするので、スタックされたライトフレームと比べても、効きは十分小さく、無視できると考えてしまっていいでしょう。

ただし、暗い中でフラットフレームを作る場合はその限りではなく、ノイジーなフラットフレームで補正をすることと同義になるので、注意が必要です。ここでは、フラットフレームは十分明るい状態で撮影し、フラット補正で加わるノイズは無視できるとします。


まとめ

スタックとダーク補正でノイズがどうなるか計算してみました。理屈に特に目新しいところはないですが、式で確かめておくと後から楽になるはずです。

今回は計算だけの記事で、しかもスタックを1枚づつ追って計算しているので、無駄に長く見えるような記事になってしまいました。でもこの計算が次のバイアス補正のところで効いてきます。ちょっと前にX上で黒天リフさんがバイスについて疑問を呈していましたが、そこらへんに答えることができればと思っています。










このページのトップヘ