前回の6Dのユニティーゲインの記事ですが、難しいという話を聞いたので、できるだけわかりやすく解説してみようと思います。




コンバージョンファクター


IMG_2032

何はともあれ、まず重要なのはコンバージョンファクター (conversion factor) とか、gain (ややこしいのですがISOに相当するgainとは全然の別の意味です。以下区別するために、コンバージョンファクターの意味ではgainやゲインという言葉は使わず、ISOの意味でのみgainもしくはゲインと書きます。)とか呼ばれている、センサーで発生する電子の数と出力信号のカウント数を変換する係数で、単位は[e/ADU]になります。eは電子1個の単位、ADUはADC (Analog to Digital Converter) でカウントする1カウントの単位です。発生する電子の数は後で書きますが、検出される光子の数と比例するので、ここではとりあえず光子の数と言ってしまうことにします。

このページの結果によるとEOS 6Dの場合、例えば、ISO100のとき、コンバージョンファクターは5.6413 [e/ADU]で、光子が6個近くセンサーの1素子に入ってやっとADCのカウントが1増えます。6Dの場合14bit = 16384なので、5.6413 x 16384 = 92427個の光子が1素子に入ると、その素子のカウントは一杯になり「飽和」状態になります。このブログでは「サチる」とか、「サチった」とかいう表現をしています。これは「飽和」の英語Saturationから来ています。

例えば、ISO400のとき、コンバージョンファクターは1.4178 [e/ADU]となり、光子が1.5個くらい入るとADCのカウントが1増えます。

この表から考えると、ISO575くらいが実現できるなら、コンバージョンファクターは1 [e/ADU]となり、光子が1個入るとADCのカウントが1増えます。このときのゲインをその名の通り、ユニティーゲイン(unity gain)と呼びます。ユニティーは1という意味ですね。ISOなので、ユニティーISOとか読んでもいいでしょう。呼び方はまあどうでも良くて、重要なのはセンサーで検出される光子1個がADCを1カウント増やすという、1対1の関係です。

CMOSセンサーの解析はこのコンバージョンファクターの値を求めるところから全てが始まります。


コンバージョンファクターの原理

ではコンバージョンファクターを求めるためにはどうしたらいいのでしょうか?まずは原理式を理解してみましょう。CMOSセンサーをある出力ゲインに固定して測定した信号\(S\mathrm{[ADU]}\)とそのときのノイズ\(N\mathrm{[ADU]}\)には以下の関係があります。

\[(N\mathrm{[ADU]})^2=\frac{S\mathrm{[ADU]}}{f_{\mathrm{c}}\mathrm{[e-/ADU]}}+\frac{(N_{\mathrm{read}}\mathrm{[e-]})^2}{(f_{\mathrm{c}}\mathrm{[e-/ADU}])^2}\]

このとき\(N_{\mathrm{read}}\mathrm{[e-]}\)は読み出しノイズ、\(f_{\mathrm{c}}\mathrm{[e-/ADU]}\)がコンバージョンファクターです。

右辺2項目の読み出しノイズは十分小さい仮定として、簡単に

\[(N\mathrm{[ADU]})^2=\frac{S\mathrm{[ADU]}}{f_{\mathrm{c}}\mathrm{[e-/ADU]}}\]
を考えます。

画像を撮影して、その1ピクセルの明るさ\(S\mathrm{[ADU]}\)を測り、その1ピクセルの明るさがどれくらいバラけているかを多数プロットしてやればいいのです。

この式自身の証明はこのページの最後のおまけの部分を見てください。ちょっととっつきにくいと思うかもしれませんが、ショットノイズの関係式だけから数学的に綺麗に出てくるので、話としては至極単純です。逆にこの関係式があるので、多数の点数をとってくれば統計的にコンバージョンファクターが確定するというわけです。多数の点をとってくるのは、画像ファイルが多数の点でできていることを考えると十分可能で、アイデア次第で多くのサンプルを取り出すことができるわけです。この関係式をものすごくうまく利用してますよね。

多くのサンプルを取り出すのはいろいろな方法があります。
  1. 一画面内に暗いところから明るいところまで写っている、同じ画角の景色などを多数枚撮影し、ある位置のピクセルに注目し、その平均値とバラけ具合を多数枚にわたって見る。多数のピクセルに対して同じことをする。
  2. フラットに近い画像を露光時間を変えて何枚か撮り、一枚のある100x100くらいのエリアの平均値とそのバラけ具合を見る。露光時間ごとにプロットする。
  3. 星などの適当な画像を2枚撮影し、その2枚の画像の差を取り(信号を消して、ノイズの2乗和のルートをとるということ)、その中の明るさが一定のエリアの平均値とバラけ具合を見る。明るさの違う領域で、同じことをしてプロットする。
などがあります。私が一番最初に学んだ方法は1.でした。SharpCapは2.の方法をとっています。最初に紹介したページ(大元はこのページです)やPixInsightでは3.を使っています。3.が撮影枚数が2枚と少なく、一番簡単でしょうか。工夫次第でまだ測定方法はいろいろ考えることができると思います。

PixInsightでの測定方法はNiwaさんが秀逸なタイトルをつけて詳しく解説してくれています。




実際の測定例

実際に信号とそのバラつきをプロットしたグラフを見てみましょう。まずは2.の例のSharpCapで測定した場合です。6Dの計測の時にグラフを写真に取り損なったので、ASI294MCの測定の時の写真を示します。

IMG_3262

一番右が、横軸明るさS、縦軸ノイズNの2乗でプロットしたものになります。測定点を結ぶと一本の線になり、その傾きの逆数がコンバージョンファクターになります。この場合、横軸が5000くらいの時に縦が1300くらいなので、傾きは0.26、その逆数は1/0.26=3.85[e/ADU]くらいになります。すなわち、光子3.85個入って、やっとADCのカウントが1進むということです。

次の例は自分で画像を撮影して測定した時の結果です。SharpCapがやる過程をマニュアルでやったような形になります。すなわち、同じゲインで露光時間を変えて何枚か撮影し、あるエリアの明るさとバラけ具合を測定すると言うものです。画像解析はMaltabを使ってやりました。Matlabを使ったのは、画像読み込みが楽なのと、平均や分散などの統計解析が揃っているからです。別に一枚一枚Photoshopとかで解析しても原理的にはできるはずです。センサーはASI290MMでモノクロのCMOSカメラです。モノクロはきちんとメーカー値とも合うのですが、いまだにカラーの場合でうまく計算できたことがないので、もうここ2年ほど悩み続けています。

Conversion_Factor_ASI290MM_std

同様に横軸が明るさで縦軸がノイズの2乗のN^2になります。測定点が一直線で近似できるのがわかると思います。そのグラフの傾き0.306の逆数1/0.306=3.26がコンバージョンファクターになります。

一眼レフカメラの例は、このページに出てますね。「Details of measurements at each ISO setting」のところからの一連のグラフになります。このようにISO(出力ゲイン)を変えて、順次ISOごとのコンバージョンファクターを測定していきます。コンバージョンファクターが1になるところが「ユニティーゲイン」「ユニティーISO」「ユニティーゲインの時のISO」(言葉だけを知っていても意味がないです、逆に意味をきちんと理解していれば、言葉が多少違っても通じますね)ということになります。

ところが上にも書きましたが、SharpCapではISO(ゲイン)を変えて各コンバージョンファクターを測定することをサボっています。どうせ、コンバージョンファクターはゲインに比例するので、一番低いISOのコンバージョンファクターだけを測って、あとは出力ゲインで割ってやることで、測定回数を劇的に減らしています。これは測定の自動化をするために考えた苦肉策(良く言えば簡単に測定できる方法)といえるでしょう。


読み出しノイズ

これまでのどのグラフでもそうですが、傾きの逆数がコンバージョンファクターになり、信号Sが0の時の切片がその時のISOの読み出しノイズになります。ただし、読み出しノイズに関してはこのページでも書いてあるように
but, for the readout noise it is preferable to measure directly the deviation on a bias image - the result is more precise
と書いてあるように、バイアスファイルから直接測定せよと書いてます。奇しくも、ノイズ会議の時に議論したバイアスと読み出しノイズは同じかというというに対する回答になっていて、やはりバイアス(オフセットとかいう概念と同じ)ファイルで測定されるノイズは読み出しノイズと考えて良さそうです。

読み出しノイズの測定は、カメラにキャップをして最小光量で、時間と共に大きくなるダークノイズを無視するために最小時間で撮影した画像を使います。やはりバイアスの撮影と同じですね。こうやって撮影された画像は読み出しノイズに支配されています。読み出しノイズの直接的な測定についてはこのページを参照してください。
 


測定からいろいろなことがわかる

一連の測定の結果から、非常に重要な幾つかの結論が出ます。例えば、このページで言っている主要なことは
  • Unity gainはISO575のところにある。
  • これは個々のISOについてコンバージョンファクターを測定した結果から来ている。
  • コンバージョンファクターの測定方法は、各ISOで2枚撮影して、その差分から明るさとノイズの関係を評価した。
  • 読み出しノイズはISO6400までは減ってきていて、それ以上のISOでは一定値。なので、暗い天体はISO6400を使うのがベスト
  • 飽和容量は13235ADUと考える(と書いてあが、根拠は不明。14bitだから16348ADUと思ったら、それより小さいので何かかから測定したのか?)。
  • ダイナミックレンジはISO400までは一定で、それ以降は減り始める。なので明るい天体はISO400以下で撮影するのがいい
  • 中間ISOは使うな!例えばISO1000はISO800と同じ読み出しノイズでかつダイナミックレンジは小さい。
ということです。


コンバージョンファクターやユニティーゲインは何の役に立つのか?

答えを一言で言うなら、コンバージョンファクターという(ゲイン依存の)変換係数があるおかげで、ADCの値を読むだけでありとあらゆるものを電子の数で考えることができるようになるので、「単位が揃って便利」だということです。

例えば飽和電子容量(full well)です。本来の飽和電子容量の測定の仕方は、十分にサチレーションを起こすくらい明るい光をカメラに入射し、その時のADCの値の平均値を読み取り、それをコンバージョンファクターで電子の数に変換してやります。コンバージョンファクターが分からなけれが飽和「電子」容量とは言えずに、飽和「ADC」容量とかになってしまいますね。

読み出しノイズの測定もそうです。バイアスファイルは読み出しノイズに支配されています。この時の各素子の明るさのばらつき具合が読み出しノイズになるのですが、当然のことながらこれらの測定は全てADCの出力を見ているので単位は [ADU] で出てきます。こんな時に先に測定したコンバージョンファクターがあると、あーら不思議!なんと電子の数 に変換することができ、普通の読み出しノイズの単位[e-]になります。

逆に言えば、どれだけ画像ファイルからADCでカントされた数を数えることができても、コンバージョンファクターがないと、電子、光子のところまで持っていくことができません。と言うわけでコンバージョンファクターがいかに大切かおわかりいただけましたでしょうか?

では、ユニティーゲインがどうして必要かと言うと、実はそこまで重要な値ではないんですよね。ADU1カウントと測定された電子1個が等しいと言うくらいです。まあ、目安ですね。


電子数と光子数の関係

さらに光子の数sと、センサーで数える電子の数nが、定数で変換できます。この定数をシステム効率ηなどと呼び
\[\eta=\frac{n}{S}\]
と表すことができます。通常はシステム効率は1以下の値をとりますが、ここでは簡単のため1としています。

ポイントはこのシステム効率が内部回路のゲインや積分時間などによらないということです。なので、出てきた電子の数を数えるということは、幾つ光子が入ってきたかが直接わかるため、重宝されるというわけです。

その一方、ADCのカウント数とセンサーで出てくる電子数の関係は内部回路のゲインに依存してしまうため、便利でないのです。

ISOと実ゲインの関係

前回測定していまだに腑に落ちないISOと実ゲインの測定ですが、同様の測定例がどこを探しても見つかりません。ISOとコンバージョンファクターのグラフはすぐに見つかります。これってもしかしたらISOの線形性がほとんどないから出回らないのでしょうか?だとしたら、前回示したグラフは何か失敗しているかと思ったのですが、逆に貴重なのかもしれません。

自分でも各ISOのコンバージョンファクターを測ってみるのが次の課題でしょうか?少なくとも3種類の測定の仕方は考えられるので、それぞれで違いが出るかとかも興味があります。そこで測られたコンバージョンファクターは、やはり実ゲインに比例しているはずなので、もし前回の測定結果のように実ゲインがISOに比例しないなら、どこに矛盾があるか突き止めていくのもまた面白そうです。


おまけ: Unity gainで撮影する意味

unity gainで撮影することには、ほとんど何の意味もないです。これは測定される電子数とADCのカウントの比を表している単なる係数に過ぎません。

たまにunity gainで撮影することが有利だとかいう話を聞くことがありますが、根拠が全くありません。その際によく話されるのが、ADCの1カウント以下で電子(光子でもいい)を測定できないからとかだとかが理由とされますが、そもそも光子を1個だけ数えるのは(量子力学で考えるとあたりまえですが)原理的に不可能です。多数の(単位時間あたりに数にばらつきのある)光子が測定され、統計的に平均値をとると何個の光子が来ていたと言えるだけです。

なので、unity gainに拘らずにISOを決めていいのですが、原理的に考えると最適なISOはDynamic Rangeを損なわない最大のISOということになります。もちろんこれは対象の明るさによってきちんと考えるべきで、明るいもの(昼間の景色や恒星など)がサチるのを避けたいならばISOを下げたほうがいいですし、暗いものを撮影するときはダイナミックレンジを犠牲にしてでもISOをあげた方がいい時があります。


まとめ

コンバージョンファクターについて、できうる限り簡単に書いてみました。みなさん理解できましたでしょうか?わかりにくいところとかありましたら、コメント欄にでもお書きください。

もう少し6D測定を続けてみたいと思います。他の結果と矛盾がないのか、それとも何か間違っているのか?どのような設定で撮影すればいいかの根拠になっていくので、これはこれでかなり楽しいです。