前回の6Dのユニティーゲインの記事ですが、難しいという話を聞いたので、できるだけわかりやすく解説してみようと思います。
コンバージョンファクター
何はともあれ、まず重要なのはコンバージョンファクター (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ピクセルの明るさがどれくらいバラけているかを多数プロットしてやればいいのです。
この式自身の証明はこのページの最後のおまけの部分を見てください。ちょっととっつきにくいと思うかもしれませんが、ショットノイズの関係式だけから数学的に綺麗に出てくるので、話としては至極単純です。逆にこの関係式があるので、多数の点数をとってくれば統計的にコンバージョンファクターが確定するというわけです。多数の点をとってくるのは、画像ファイルが多数の点でできていることを考えると十分可能で、アイデア次第で多くのサンプルを取り出すことができるわけです。この関係式をものすごくうまく利用してますよね。
多くのサンプルを取り出すのはいろいろな方法があります。
- 一画面内に暗いところから明るいところまで写っている、同じ画角の景色などを多数枚撮影し、ある位置のピクセルに注目し、その平均値とバラけ具合を多数枚にわたって見る。多数のピクセルに対して同じことをする。
- フラットに近い画像を露光時間を変えて何枚か撮り、一枚のある100x100くらいのエリアの平均値とそのバラけ具合を見る。露光時間ごとにプロットする。
- 星などの適当な画像を2枚撮影し、その2枚の画像の差を取り(信号を消して、ノイズの2乗和のルートをとるということ)、その中の明るさが一定のエリアの平均値とバラけ具合を見る。明るさの違う領域で、同じことをしてプロットする。
PixInsightでの測定方法はNiwaさんが秀逸なタイトルをつけて詳しく解説してくれています。
実際の測定例
実際に信号とそのバラつきをプロットしたグラフを見てみましょう。まずは2.の例のSharpCapで測定した場合です。6Dの計測の時にグラフを写真に取り損なったので、ASI294MCの測定の時の写真を示します。
一番右が、横軸明るさ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年ほど悩み続けています。
同様に横軸が明るさで縦軸がノイズの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以上は使っても意味がない。暗い天体は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のカウント数とセンサーで出てくる電子数の関係は内部回路のゲインに依存してしまうため、便利でないのです。
と表すことができます。通常はシステム効率は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測定を続けてみたいと思います。他の結果と矛盾がないのか、それとも何か間違っているのか?どのような設定で撮影すればいいかの根拠になっていくので、これはこれでかなり楽しいです。




コメント
コメント一覧 (10)
ノイズとゲインの解説ありがとうございました。ダイナミックレンジの計算方法について教えてください。ダイナミックレンジDRは
DR = ( FW[e] / Read noise )
か(あるいは単位がdBだから,これの対数を取ったもの?)であると聞きました。FWは電子の数で数えたフルウェルです。
わからないのはフルウェルをリードノイズで割ることの意味です。すでに別記事で解説済みであったらすみません。
DR = ( FW[e] / Read noise )
で正しいです。これをdBで表しただけです。
http://hoshizolove.blog.jp/archives/27988787.html
に少し計算過程も書いています。
前記事での6Dのときの実測で計算してみます。ISO100の場合は、読み出しノイズが27.18[e]で飽和容量が93144[e]で既に単位がeの電子になっています。
ダイナミックレンジとは2通りあって、一つはカメラの読み取りに分解のを表す16bitとか14bitとかのキリのいい数字です。でも実際に意味のある信号が取れる範囲というと考えると、ノイズに埋もれないような少なくとも読み出しノイズよりも上の信号から、飽和しないADCの取れる最大範囲までということになるので、その比になります。なので、飽和容量を読み出しノイズで割ることになります。これが今回言っているダイナミックレンジになります。
93144/27.18 = 3247
3247は2^11=2048と2^12=4096の間なので、11ビット強とわかります。正確にはこれを基底2のlogで表してやると、例えばExcelだとどこかのマスに
=LOG(3236.9,2)
と書いて計算させてやると11.66と、測定値の11.74と少しずれますが、まあ丸め誤差の範囲内でしょう。
さらに3236.9をdBで表してやると、同様にエクセルで
=20*LOG(3236.9)
とかやってやると70.7dBとかになります。
輝度の最小信号をリードノイズの大きさであるとして,輝度の最大値との比を取って,それをDRと定義しているのですね。
それが最大になるISOを選んで撮影するという考え方は,それで良いのだろうと思いますが,明るい対象の撮影においての飽和しにくさを問題にするなら,必ずしもその定義のDRを参考にするのではなく,光子を飽和せずにどれだけたくさんためられるか?でISOを選ぶ(HIROPONさんがやっている様に)ことになるということですね。
そうです。その通りです。
東京のような超光害地では飽和の方が問題になるのかと思います。
I can write N*P=T where P is a photon, N is number of photons, T is exposure time. Since P=h*f where h is plancks constant and f frequency of given light we can consider P as constant for given frequency of light source.
So now T=h*f*N
Now say time T leads to value of 255 so again I may write
T*g=255 where g is a constant of circuit or ISO or gain.
We can plot various value of pixel (x axis) w.r.t exposure time (y axis) for a particular value of g. I have not done it but it seems like a straight line parallel to x axis will come up with slope being zero.
My question is, can I write
N*h*f= 255 (for unity gain)
N=355/(h*f)
And thus determine number of photons hitting a given pixel?
You have to think so called the system efficiency that is a ratio between the number of photon form the astronomical target and the number of electron produced by the sensor. The system efficiency is a constant number which does not depend on things after the sensor, such as gain of analog circuit.
Your P is energy of photon, and your T is total energy.
However it is convenient to think the number of photon as a base if we think the system efficiency. This is because the number of photon is proportional the number of electron at the sensor, not energy base.
Of course if the wave length is higher, the total energy is higher if the numbers of photon are the same.
So the number of photon can be converted to ADU, but it does not mean saturation (here 255) you pointed out. Still I am not sure why you think saturation. Saturation makes everything unclear. You can use just the counted number in ADU under saturation, I think.
I guess that you want to count the number of photon from ADU. In that case, if you know the unity gain, you can know the number of procured electron from the counted ADU, and if you know the system efficiency, you can know the number of photon from the number of electron.
In any case, you have to measure the system efficiency from the expected (calculated) number of photon of know astronomical target and the known unity gain.
So only thing missing in above equation is effeciency?
If I plug that in
N*h*f*e=255 (unity gain)
N=255/(h*f*e)
255 is just a value of pixel which I took because it's the highest value only for calculation purpose. Was thinking like slowly increase the exposure time till the value of pixel reaches 255. Now note down this time (T).
Will try this out and will update you. It seems like it would be a fun to know camera. Iam excited to know that it's possible calculate number of photons hitting the camera, a photon !!
I think so.
ADC count is related to photon number directly, so I don't think you need to concentrate on energy if you are interested in photon number.
知りたい情報を詳しく論理的に説明下さりありがとうございます。
明るい対象はISO400以下、暗い対象はダイナミックレンジを犠牲にしても淡いところを出しに行くのが美味しい使い方ですね。
現在6DはISO1600をメインで、ナローフィルター時は3200で撮っています。ISO6400まで上げても良さそうですね。
また星の飽和を改善するために短時間露光を加えていますが、その際のISOは400以下で撮った方がより効果的ですね?
また、中心部が明るく広いダイナミックレンジが必要な対象、例えばオリオン大星雲とかアンドロメダ銀河などは、ISO400とISO3200等のISO2本立てで撮影するのも面白いかと思いました。
6Dの14bitの件ですが、Canonの14bitは実際にはもう少し少ないビット数と聞きました。
最近、恒星が飽和してもいいのではないかと思うようになってきました。いくつか理由があって、
・DSOに2−4等クラスの明るい星が入るとどうせ飽和すること。
・飽和させないように気を使って画像処理をすればするほど、恒星の鋭さがなくなってもっさりした仕上がりになること。
・例え飽和して平らになっても、画像処理でピークを足すことはできること。
などです。それでもトラペジウムみたいな極端に明るさが違っても階調を再現したいようなところは、やはり別撮りが必要だと思います。でもその時はISOは同じにして、露光時間を縮めるかもしれません。そうすることでバイアスとフラットは共通化できるからです。
飽和容量が実質の生の(読み出しノイズとの比という意味でない)ダイナミックレンジを表していて、14bitよりやはり小さいですね。でもダイナミックレンジのほとんどは恒星部に使われるので、サチることを厭わなければもしかしたらそこまで気にすることはないのかもしれません。それよりも、淡くて暗い星雲部分をいかに階調がいい範囲に持ってくるかの方が大事なような気がしています。