先日の志摩での観望会で、Kさんと話をしている時に、ダークフレームは何枚必要かという話になりました。私はライト画像と同程度の枚数が必要なのではと話したのですが、Kさんはもっと少なくてもいいのではということです。で、色々考察してみました。
目的はダーク減算による改善ではなく、ダーク減算をした時に何枚くらい使えばダークフレームからのノイズでライトフレームが汚されないかを見積もることです。例えば何十枚とコンポジットしたライトフレームではノイズが平均化されて滑らかになるのですが、その際のダーク減算をザラザラの一枚だけでやってしまったら、せっかく綺麗にするはずのライトフレームの滑らかさを逆に汚すのではないかとか、そういうことです。
今回ノイズを無相関に出てくる「ランダムなノイズ」と、相関を持って同じように出てくる「コヒーレントなノイズ」に分けて考えます。
ランダムなノイズとは統計的な信号のゆらぎのことを指し、例えば光に関して言うと「カメラの画素に光を入れた時に、単位時間あたりの光量が一定でないために、ある時間露光して積分した時に一つの画素に溜まる光の量にばらつきがある」ということをいいます。また、一つの画素のADCの読み取りにも統計的にランダムな読み取り誤差が存在するので、それらも画像になった時には結果としてノイズとなります。これらのランダムノイズは時間的に無相関であるために時間的に平均化してやると時間のルートに比例して小さくなっていきます。
一方コヒーレントなノイズは、例えば光害のように、何回撮影しても同様に相関を持って入ってくる光です。センサー温度が高い時に画面の一部が明るくなるアンプノイズも相関があるノイズです。これらのノイズは相関があるため時間とともに足し合わさっていくだけなので、時間に比例して一次で増えていくノイズです。
あといくつか仮定ですが、ダークフレームもライトフレームも同じカメラで同じISO、同じ露光時間で撮影するとします。センサーの温度も変わらないとします。
さてまずダーク一枚で考えてみます。基本的に光は入れていないので、センサーに流れる暗電流で決まるようなノイズです。この一枚あたりの無相関なランダムノイズをN_darkとします。これらをn_d枚コンポジットします。コンポジットは加算して枚数で割って平均化すると言う過程なので、
sqrt( n_d x N_dark^2 ) / n_d = N_dark / sqrt( n_d)
となって枚数のルートでノイズが減っていきます。
次にライトフレームの信号をSとすると、ライトフレームのノイズN_lightは統計的に信号のルートに比例するので
N_light ∝sqrt(S)
と書くことができます。ライトフレームもコンポジットしてn_l枚を重ねるとすると上と同様に
N_light / sqrt( n_l)
というノイズが残ります。
通常はライトフレーム一枚に対しコンポジットしたダークフレームで補正します。ダーク補正は差に相当するので、無相関なノイズにとっては2乗和のルートになるので、その場合のS/N比は
S / sqrt( N_light^2 + N_dark^2 / n_d)
となります。このダーク補正したライトフレームをコンポジットするので、信号は
n_l x S
ノイズは
sqrt( n_l x N_light^2 + n_l^2 x N_dark^2 / n_d )
となります。ここで、N_light / sqrt( n_l)は各ライトフレームに適用されているので、無相関ではなく正の相関を持っているコヒーレントノイズになり、そのまま和になることに注意です。なのでn_lの2乗で足してあります。
これらをn_l枚で平均化するので、信号は
n_l x S / n_l = S
ノイズは
sqrt( n_l x N_light^2 + n_l^2 x N_dark^2 / n_d ) / n_l = sqrt( N_light^2 / n_l + N_dark^2 / n_d )
となるため、S/N比は
S / sqrt( N_light^2 / n_l + N_dark^2 / n_d )
となります。
やっと式ができました。この式を具体的に考察します。
まず、ライトフレームをダークに近いくらい暗い空で撮るとか、そもそも非常に低いISOとか短い露光時間でとったりして、ライトフレームのノイズとダークノイズが非常に近い場合には
N = N_light = N_dark
とおいて、さらにライトもダークも同じn枚撮るとするとS/N比は
S / sqrt( N^2 / n + N^2 / n ) = S / ( sqrt (2) x N/sqrt(n) )
となり、sqrt(2)倍だけノイズが大きくなってしまいます。すなわちこのようにライトの背景とダークが近い場合はダークの枚数をライトの枚数よりも増やしてやらないとルート2倍損をしてしまいます。
ちなみにルート2倍損をすると言う意味は、ライトフレームの撮影枚数が半分になったことと等価ですので、ずいぶん勿体無いですね。
一方、ライトフレームのノイズがダークノイズよりも十分に大きい場合(十分に明るい場合ということ)にはダークの枚数を減らしていいことになります。例えば、ライトフレームが十分に明るくて、明るさに起因するショットノイズが問題になる様な状況を考えてみます。具体的にはライトフレーム一枚あたりのショットノイズがダークノイズの10倍大きいような状況を仮定してみましょう。このショットノイズをダークノイズと同じくらいの大きさにするためには、ショットノイズを10分の1くらいにする、すなわち100枚撮影してショットノイズをsqrt(100) = 10で10分の1にする必要があります。言い換えると、100枚ライトを撮ってコンポジットした時のショットノイズと一枚だけダークを取った時のノイズがやっと同等になるくらいで、この場合ダークノイズがあまり効いてこないのでダークの枚数を増やしてもこうかがあまりないことになります。例えば、上記の状況で100枚ライトを取り1枚だけ撮ったダークで補正して、やっと上と同じ様にルート2倍損することになります。式で書くと、ライトフレームのノイズをNとすると
S / sqrt( N^2 / 100 + (N/10)^2 / 1 ) = S / (sqrt( (N^2 + N^2)/100 ) = S / (sqrt(2) x N/10)
となります。
こんな場合でも高々ダークを10枚とってやれば
S / sqrt( N^2 / 100 + (N/10)^2 / 10 ) = S / (sqrt(1+1/10) x N/10)
となり、sqrt(1.1) ~1.05なので、5%くらいの悪化で抑えることができます。
さて、ライトフレームの背景のノイズとダークノイズの実際の比は一体どれくらいなのでしょうか?先日撮った馬頭星雲の画像で比べてみます。Photoshopには便利な機能があって、選択したエリアの輝度のばらつきを標準偏差で示してくれます。これで直接比較ができるはずです。
ライトフレームの何も写っていない背景部分(光害のため背景が十分に明るくショットノイズがダークノイズに比べて大きいと思われるような領域)の標準偏差は10くらい、ダークフレームの同程度の領域の標準偏差は3くらいです。比は3.3程度と、思ったより小さいです。
ライトフレームは36枚撮影していて、ダークは30枚"も"使ったので、
S / sqrt( N^2 / 36[枚] + ((N/3.3[倍])^2) / 30[枚] ) = S / (sqrt(1+1/10/30x36) x N/sqrt(36) )
となります。
sqrt(1+1/10/30x36) = 1.05
なので、約5%の悪化となります。36枚のライトフレームをもし33枚しか取らなかったら約4-5%の悪化になるので、この場合ダーク補正がなかったら33枚で同等のノイズを出せたことになります。
一応確認ですが、ダーク補正の元々の目的は「ダークフレームを多数取ることでダークフレームの揺らぎを小さくし、それでも残った各ダークフレームに残った共通の、言わば真のダークノイズをライトフレームから取り除くこと」です。今回議論したのは、「ダークフレームの揺らぎの部分の残りがどれだけライトフレームに影響するか」ということです。ダーク補正の最大の効果である、真のダークノイズの除去のことについては何の言及もしていません。
真のダークノイズが存在するならそれを取り除くことはもちろん効果があります。さりとてそれも、他のライトフレーム内のノイズなどと相対的に議論すべきで、もちろんダーク補正はした方がいいですが、絶対必要だとか、絶対いらないという議論にはならず、あるライトフレームがあった時にダーク補正は有効であるかということを考えながらやると、効率的に進めることができると思います。例えば、昼間の明るいい写真にダーク補正をする人は誰もいませんね。
というわけで、またかなり長い記事になってしまいましたが、結論としては、ダークフレームのノイズとライトフレームの背景のノイズの比が重要で、空が暗くてダークに近ければ近いほど枚数が多い方がいいが、空が明るくてショットノイズなどの他のノイズが多い場合は少なくてもいいということになりそうです。志摩観望会で間違ったことを言ってしまったことになります。Kさんごめんなさいm(_ _)m。
目的はダーク減算による改善ではなく、ダーク減算をした時に何枚くらい使えばダークフレームからのノイズでライトフレームが汚されないかを見積もることです。例えば何十枚とコンポジットしたライトフレームではノイズが平均化されて滑らかになるのですが、その際のダーク減算をザラザラの一枚だけでやってしまったら、せっかく綺麗にするはずのライトフレームの滑らかさを逆に汚すのではないかとか、そういうことです。
今回ノイズを無相関に出てくる「ランダムなノイズ」と、相関を持って同じように出てくる「コヒーレントなノイズ」に分けて考えます。
ランダムなノイズとは統計的な信号のゆらぎのことを指し、例えば光に関して言うと「カメラの画素に光を入れた時に、単位時間あたりの光量が一定でないために、ある時間露光して積分した時に一つの画素に溜まる光の量にばらつきがある」ということをいいます。また、一つの画素のADCの読み取りにも統計的にランダムな読み取り誤差が存在するので、それらも画像になった時には結果としてノイズとなります。これらのランダムノイズは時間的に無相関であるために時間的に平均化してやると時間のルートに比例して小さくなっていきます。
一方コヒーレントなノイズは、例えば光害のように、何回撮影しても同様に相関を持って入ってくる光です。センサー温度が高い時に画面の一部が明るくなるアンプノイズも相関があるノイズです。これらのノイズは相関があるため時間とともに足し合わさっていくだけなので、時間に比例して一次で増えていくノイズです。
あといくつか仮定ですが、ダークフレームもライトフレームも同じカメラで同じISO、同じ露光時間で撮影するとします。センサーの温度も変わらないとします。
さてまずダーク一枚で考えてみます。基本的に光は入れていないので、センサーに流れる暗電流で決まるようなノイズです。この一枚あたりの無相関なランダムノイズをN_darkとします。これらをn_d枚コンポジットします。コンポジットは加算して枚数で割って平均化すると言う過程なので、
sqrt( n_d x N_dark^2 ) / n_d = N_dark / sqrt( n_d)
となって枚数のルートでノイズが減っていきます。
次にライトフレームの信号をSとすると、ライトフレームのノイズN_lightは統計的に信号のルートに比例するので
N_light ∝sqrt(S)
と書くことができます。ライトフレームもコンポジットしてn_l枚を重ねるとすると上と同様に
N_light / sqrt( n_l)
というノイズが残ります。
通常はライトフレーム一枚に対しコンポジットしたダークフレームで補正します。ダーク補正は差に相当するので、無相関なノイズにとっては2乗和のルートになるので、その場合のS/N比は
S / sqrt( N_light^2 + N_dark^2 / n_d)
となります。このダーク補正したライトフレームをコンポジットするので、信号は
n_l x S
ノイズは
sqrt( n_l x N_light^2 + n_l^2 x N_dark^2 / n_d )
となります。ここで、N_light / sqrt( n_l)は各ライトフレームに適用されているので、無相関ではなく正の相関を持っているコヒーレントノイズになり、そのまま和になることに注意です。なのでn_lの2乗で足してあります。
これらをn_l枚で平均化するので、信号は
n_l x S / n_l = S
ノイズは
sqrt( n_l x N_light^2 + n_l^2 x N_dark^2 / n_d ) / n_l = sqrt( N_light^2 / n_l + N_dark^2 / n_d )
となるため、S/N比は
S / sqrt( N_light^2 / n_l + N_dark^2 / n_d )
となります。
やっと式ができました。この式を具体的に考察します。
まず、ライトフレームをダークに近いくらい暗い空で撮るとか、そもそも非常に低いISOとか短い露光時間でとったりして、ライトフレームのノイズとダークノイズが非常に近い場合には
N = N_light = N_dark
とおいて、さらにライトもダークも同じn枚撮るとするとS/N比は
S / sqrt( N^2 / n + N^2 / n ) = S / ( sqrt (2) x N/sqrt(n) )
となり、sqrt(2)倍だけノイズが大きくなってしまいます。すなわちこのようにライトの背景とダークが近い場合はダークの枚数をライトの枚数よりも増やしてやらないとルート2倍損をしてしまいます。
ちなみにルート2倍損をすると言う意味は、ライトフレームの撮影枚数が半分になったことと等価ですので、ずいぶん勿体無いですね。
一方、ライトフレームのノイズがダークノイズよりも十分に大きい場合(十分に明るい場合ということ)にはダークの枚数を減らしていいことになります。例えば、ライトフレームが十分に明るくて、明るさに起因するショットノイズが問題になる様な状況を考えてみます。具体的にはライトフレーム一枚あたりのショットノイズがダークノイズの10倍大きいような状況を仮定してみましょう。このショットノイズをダークノイズと同じくらいの大きさにするためには、ショットノイズを10分の1くらいにする、すなわち100枚撮影してショットノイズをsqrt(100) = 10で10分の1にする必要があります。言い換えると、100枚ライトを撮ってコンポジットした時のショットノイズと一枚だけダークを取った時のノイズがやっと同等になるくらいで、この場合ダークノイズがあまり効いてこないのでダークの枚数を増やしてもこうかがあまりないことになります。例えば、上記の状況で100枚ライトを取り1枚だけ撮ったダークで補正して、やっと上と同じ様にルート2倍損することになります。式で書くと、ライトフレームのノイズをNとすると
S / sqrt( N^2 / 100 + (N/10)^2 / 1 ) = S / (sqrt( (N^2 + N^2)/100 ) = S / (sqrt(2) x N/10)
となります。
こんな場合でも高々ダークを10枚とってやれば
S / sqrt( N^2 / 100 + (N/10)^2 / 10 ) = S / (sqrt(1+1/10) x N/10)
となり、sqrt(1.1) ~1.05なので、5%くらいの悪化で抑えることができます。
さて、ライトフレームの背景のノイズとダークノイズの実際の比は一体どれくらいなのでしょうか?先日撮った馬頭星雲の画像で比べてみます。Photoshopには便利な機能があって、選択したエリアの輝度のばらつきを標準偏差で示してくれます。これで直接比較ができるはずです。
ライトフレームの何も写っていない背景部分(光害のため背景が十分に明るくショットノイズがダークノイズに比べて大きいと思われるような領域)の標準偏差は10くらい、ダークフレームの同程度の領域の標準偏差は3くらいです。比は3.3程度と、思ったより小さいです。
ダークフレーム一枚のノイズを標準偏差で見てみる。
「明るさ」で変化させると平均値と標準偏差は比例するので、
この標準偏差は変なこと(例えば暗すぎて片側が欠けているとか)が起きていない生きた値です。
「明るさ」で変化させると平均値と標準偏差は比例するので、
この標準偏差は変なこと(例えば暗すぎて片側が欠けているとか)が起きていない生きた値です。
ライトフレームは36枚撮影していて、ダークは30枚"も"使ったので、
S / sqrt( N^2 / 36[枚] + ((N/3.3[倍])^2) / 30[枚] ) = S / (sqrt(1+1/10/30x36) x N/sqrt(36) )
となります。
sqrt(1+1/10/30x36) = 1.05
なので、約5%の悪化となります。36枚のライトフレームをもし33枚しか取らなかったら約4-5%の悪化になるので、この場合ダーク補正がなかったら33枚で同等のノイズを出せたことになります。
一応確認ですが、ダーク補正の元々の目的は「ダークフレームを多数取ることでダークフレームの揺らぎを小さくし、それでも残った各ダークフレームに残った共通の、言わば真のダークノイズをライトフレームから取り除くこと」です。今回議論したのは、「ダークフレームの揺らぎの部分の残りがどれだけライトフレームに影響するか」ということです。ダーク補正の最大の効果である、真のダークノイズの除去のことについては何の言及もしていません。
真のダークノイズが存在するならそれを取り除くことはもちろん効果があります。さりとてそれも、他のライトフレーム内のノイズなどと相対的に議論すべきで、もちろんダーク補正はした方がいいですが、絶対必要だとか、絶対いらないという議論にはならず、あるライトフレームがあった時にダーク補正は有効であるかということを考えながらやると、効率的に進めることができると思います。例えば、昼間の明るいい写真にダーク補正をする人は誰もいませんね。
というわけで、またかなり長い記事になってしまいましたが、結論としては、ダークフレームのノイズとライトフレームの背景のノイズの比が重要で、空が暗くてダークに近ければ近いほど枚数が多い方がいいが、空が明るくてショットノイズなどの他のノイズが多い場合は少なくてもいいということになりそうです。志摩観望会で間違ったことを言ってしまったことになります。Kさんごめんなさいm(_ _)m。
コメント
コメント一覧 (2)
その時にブログを最初から読ませていただいていると記したのですが、ようやく一通り読み終えることができました。
おかげさまで経験の少ない私ですが大変勉強になりました。
今は読み進めるにときに理解できなかったところを読み返しています。
唐突ですがこの記事でとても感動しましたので、お礼を言わせてください。
ありがとうございました。
元はこの記事の中で「無相関ではなく正の相関を持っているコヒーレントノイズになり…」というところの式が理解できなかったのですが、分散の斉次性ということにようやく気付きました。
最終的に導かれているS / sqrt( N_light^2 / n_l + N_dark^2 / n_d )という式について、結果だけ見るとN_darkにはn_dしか効いていないという一見当たり前のように思えます。
しかし、導出途中では撮影枚数n_lが含まれていて、最終的に分散の斉次性が効いてシンプルになっていることにとても感動しました。
最新の記事でノイズを話題にされていて2017年12月17日の記事に言及されているのですが、ちょうどこの記事にも理解できていないところがあるので解決できなければコメントさせていただくかもしれません。
式の導出でおおっ!となったのは人生でほとんどなかったと思います。
ありがとうございました。
そんなに読み込んでいただけるとは感動です。むしろこちらからお礼を言いたいくらいです。どうもありがとうございます。
2枚の画像を足し合わせた時に、ノイズが完全に正の相関(ホットピクセルとか、周辺減光とか、センサーについた埃のあとなど)だとそのまま足して2倍に増え、ノイズが完全に負の相関(天体写真だとあまり例を思いつきません)だと引いて0になります。逆にダーク補正のように画像を引いた時には正の相関だとうまく消えてくれて、負の相関のものは大きくなってしまいます。このように対象によって上手い処理方法が確立しています。天体写真では多くのノイズはランダムで無相関なので、枚数を増やすごとにS/Nで得をしていくというわけです。
もしわからないところがあれば、遠慮なく聞いて下さい。このブログのコメントでもいいですし、Twitterで「ほしぞloveログ」で検索していただいてダイレクトメール(DM)でも構いません。でも最近DMでトラブルがあって届かなかったこともあったので、もしDMを出してしばらく返事がない場合はこのブログで言って下さい。ブログのコメントはすぐにメールが来るのでわかるようになっています。
とくに、コンバージョンファクターのところはものすごく頭のいいやり方だと思います。私も最初にこのやり方を見た時「うーん」と唸ってしまいました。式の導出の仕方も簡易的ですがこのブログに書いています。理解するとこちらも感動すると思います。