ほしぞloveログほしぞloveログ天体観測始めました。昨日の記事の続きです。なんとか形になりました。ノイズを標準偏差で評価するか、平均偏差で評価するか迷っていたのですが、Twitteでガウス分布から外れているのなら飛んだ値が多いはずなので、(飛んだ値に影響されにくい)平均偏差の方がいいのではという意見をもらいました。考えてみればその通りで、標準偏差と平均偏差にすでに無視できないような有意な差があるということは、いいかえてみればガウス分布から外れた値も多いということが言えるのではと思います。Fits画像のhistogramというわけで実際にヒストグラムで分布を見てみました。debayerなど何の処理もしていないRAW画像です。見ての通り、ガウス分布からかなり外れていることがわかります。これはRGBでそれぞれ反応が違うために山がいくつもできるのかと思われます。次に、同じ画像をdebayerしてRed、Green、Blueに分けたヒストグラムものを示します。Red:次にGreen:最後にBlue:不思議なのは、RGBに分離しても山がいくつも見えることです。debayerの際に周りのピクセルの状況も読み込んでいるからなのか、もしくは画面の中で場所によって明るさに違いがあって、それが山になっているのかもしれません。RGBを合わせてもRAWの山の形になりそうもないことも不思議です。一瞬違う画像を処理したかと思ってしまったのですが、きちんと確認しても同じRAW画像から分離したものです。debayerもそんなに単純でないようです。最後に、その中の50x50ピクセルを取り出してきた場合のヒストグラムです。山がいくつもあるようなことはなくなり、大まかな形としてはガウス分布にだいぶん近づきます。それでもサンプル数が少ないことによるばらつきがあるのも確かなので、ここでは平均偏差でいくのが良いと考えることにします。Factorさて、実際にコンバージョンファクターを求めてみました。サンプル数を多くするために画像中心付近の100x100ピクセルを選んで解析しています。結局今回はPythonで平均偏差を求めるルーチンをを自前で書いて、各ピクセルごとに計算しています。書き忘れてましたが上のヒストグラムも全部Pythonで書いています。Pythonでの画像解析に慣れてきました。結果ですが、以下のようになります。ここまでくることができました。123となり、メーカー値の117とわずか0.6dB、1.07倍の誤差くらいの範囲で求めることができました。検証もう少し検証してみます。上のようなSharpCapでの自動測定の結果のグラフと比べると、自動測定の測定値を伸ばしていくと0点近くに行きますが、自分で測定したものは0点に向かわずに、y切片で-352くらいのところにあたります。本当にきちんと測定しようとするならバイアスノイズをのぞいたり、フラット補正をすべきなのですが、今回は省いています。それでもSharpCapもそれ専用の測定はしていないように見えるので、うまくy切片が0になるような補正をかけているものと考えられます。一点、自動測定の場合、測定点がいくつか重なっているように見えます。これはRGBと分解した3点が重なっていると推測されるのですが、それにしても横軸(ADU)が一致しすぎています。普通に測定すると、自分で測定した時みたいにRGBで光源も違えばセンサーのフィルター特性も違うはずなので、ずれるはずです。これもSharpCapの自動測定では何らかの補正をしているものと思われます。まとめ結局、上の結果を得るまでに2週間くらいかかりました。苦労しましたが得たものも多く、まずPythonでの画像解析の環境がだいぶ揃いました。既存ライブラリに頼らない、ピクセルごとに解析する手法もある程度得ることもできました。統計的にどのようにアプローチすればいいのかも少し学ぶことができました。6Dのユニティーゲインを求めることでしょうか。あー、ホントはCP+行きたかったです。11:40こんにちは。本質的なところに切り込まれたのですねぇ。仰るとおり、カラーカメラだと色ごとの特性が異なるので解析方針の模索には難儀しますね。個人的には、ディベイヤーしてしまうと画素補完の影響が不可避なので、大元の特性が崩れると解釈しています。そこでディベイヤー前のデータから直接色分離して、解析するようにしています。12:14>>1なるほど、確かにdebayerするより素性が良さそうですね。結局今はastropyでfitsを読んでいるのですが、まだdebayer前のピクセル単位での扱いがよくわかっていません。カラーってなかなか厄介です。研究用のライブラリだと基本的にはモノクロのみの扱いが多いので、カラー関連の機能が極端に少なかったりします。見てみることにします。20:15samさん、こんばんは。debayer前のピクセルデーターは例えばrggb型であれば先頭行がrgrgrg..の繰り返しで次の行がgbgbgbの繰り返しだと思います。プログラムで読み込むときはシーケンスに展開されているいるのでwidthで割って行番号を判断しr行かb行かが判断できます。fitsデータを扱うにはsfitsioライブラリー(https://www.ir.isas.jaxa.jp/~cyamauch/sli/index.ni.html)が便利です。c言語ですがマニュアルもあるし、プログラム例もあるのでおすすめです。20:53>>3Yamanoさん、情報ありがとうございます。Array)分離ができました。Cより遅いですが、しばらくはpythonで我慢します。結果を見るとdebayerした時よりもばらつきが大きくなります。何か間違いでもあるかと思って、SharpCapでもマニュアル解析しましたが、同様にdebayerした時よりもCFAでsplitした時の方がばらつきが大きいです。間違いというわけでもなく、なにかきちんとした理屈がありそうです。いうわけで、今の所はdebayerで平均偏差を取ったきのみがメーカー値に近い値を出せています。SharpCapの測定は任意のカメラでメーカー値が出るので、よほどうまくやっているのがよくわかります。Proの性能評価の一環で、全ての測定の元になるADUからeへの変換のコンバージョンファクターの測定についてです。結論から言いますと、SharpCapの自動測定機能での結果と、SharpCapでマニュアルで一枚一枚撮影しその画像を自分で解析した結果がどうしても合いません。この記事は多分ほとんどの人にはめんどくさい話で、よほどでない限り興味がないことと思いますし、しかもうまく結果が出なかったものなので、公表するかどうかも迷っていたのですが、それでも自分のメモがわりに書いておこうと思います。動機もともとダークノイズを評価する過程の一環で進めているのですが、今回の測定の動機は2つあります。ダークノイズの測定は多岐に渡るので、まずは解析環境をpythonで整えようとするのにちょうどいい練習になる天体用CMOSカメラだけでなく、一眼レフカメラの性能評価もできないかと思ったからです。6Dのユニティーゲイン(ADUとeの比が1になるゲイン)、引いてはコンバージョンファクターの測定まで自前でできたらなと目論んでいたのですが、今のところ見事に失敗。撮影はSharpCapで撮影します。50温度15度程度(コントロールなし)となります。この状態で露光時間を変更して10枚程度の画像を撮影します。上記設定や露光時間はSharpCapでのセンサー性能を測る時のパラメーターを参考にしています。いうか、最初適当に設定していたのですが、結果が全然合わないので、最後はコンバージョンファクターを測る時の状況に限りなく合わせるようにしました。ゴールとしては下の写真(SharpCapのセンサー性能測定機能で自動測定した場合)の右のようなグラフが得られればOKです。横軸(各ピクセルの明るさ)が10000程度の時に縦軸(ノイズの2乗)が2500程度です。グラフの傾きは0.25程度、その傾きの逆数が今回求めたいコンバージョンファクターになり、普通に測定すると1/0.25=4程度になるはずです。この値はZWOが示している値ともほぼ一致しています。コンバージョンファクターはちょっと理解が大変かもしれませんが、関係式と意味についてはこのページの1のところに、式の証明についてはこのページの一番最後のおまけのところに書いてあります。測定結果ところが自分で測定してみた結果は散々なものです。普通に画像を撮影してそのまま何も考えずに解析すると、そもそもDebayerもされていなかったりするので、ノイズが大きく出すぎてしまいます。結果を見せるのもあほらしいのですが、のようになり、SharpCapの結果にカスリもしないくらいノイズが大きく出てしまっています。傾きが30くらい、コンバージョンファクターは0.03とかで、メーカー値の100分の1以下です。ここから苦難のノイズハンティングの道が始まりました。(画像全体だと周辺減光などの影響で、ばらつきが大きく出てしまう)4番まで進めた時のグラフがのようになりますが、まだ傾きが10程度、コンバージョンファクターにして0.1程度しかありません。5番目の中心部分のみを解析するようにして、やっと下のグラフくらいにまでなりました。それでも結局傾きが0.35程度、コンバージョンファクターが1/0.35で3程度になり、どうしてもまだ4近くにまでなりません。考察と今後なぜこの差が縮まらないか、もう少し検証します。横軸(各ピクセルの明るさ)が10000の時に縦軸(ノイズの2乗)が2500くらいになるためには、ノイズはそのルートの50程度でなければなりません。deviation)をとればいいと思われます。この標準偏差を求めるのに今回は天文研究でよく使われているirafを使いました。ところが、明るさ10000程度の50x50ピクセルの明るさのばらつきの標準偏差をirafで測定すると60程度になってしまいます。グラフの横軸でいうと2乗なので3600程度になってしまうわけです。ここでirafを疑いました。何か間違った結果が出ているのではと思ったのです。そこでPixInsightの統計ツールで測定したのですが、標準偏差はやはり60程度とでます。それどころか、SharpCapでも画像の選択したあるエリアの各色の標準偏差をリアルタイムで測定できるのですが、それもやはり60程度なのです。SharpCapで測定しても60とでるならば、SharpCapの自動センサー性能測定の測定はどうやってやっているのでしょうか?何か特別なことをやって50と出しているのか、それともまだ私が何か勘違いをしているのか。PixInsightの統計ツールで少しヒントになるようなものを見つけました。deviationという値を出すことができるのですが、この値がちょうど50程度になるのです。deviation(avgDev)が50切るくらいになっているのがわかると思います。mean)というらしくて日本語では単純に平均偏差というらしいです。̅⎷に対して平均偏差は各値から平均値を引いたものの絶対値の総和を総数で割ったもの1N∑i=0N(Xi−M)となります。median)というのもありますが、こちらは平均値を引く代わりに中心値を引きます。平均偏差となるそうで、確かに標準偏差より小さい値になっていて納得です。平均偏差を使えば、メーカー値もしくはSharpCapで測定した値に近い結果が出るはずなのですが、そもそも平均偏差を使っていいものなのか?やはり普通に考えると標準偏差を使った方が、あとの統計的な評価が簡単になりそうで、素直な気がします。irafなどの一般的な解析ツールでは平均偏差を出すことができるものが少ないので、グラフまで出せるくらいにきちんと解析するのなら自前で統計処理の部分のコードを書く必要があります。そんなこんなで、今pythondで書いているのですが、果たしてこの方向が正しいのかどうか?まだ色々迷っています。00:45>>岩井さん、こんばんは。一年近く前の話なので思い出す必要があるのですが、これ多分もっと簡単な話で、モノクロからカラーにどうやって変換するかということに行き着くのだと思います。結局ノイズもダークノイズまでたどりついていないので、また時間があったらいろいろ再開してみたいと思っているものの一つです。10:04なるほど・・解決済みだったのですね。10:15>>いえ、まだ解決してません...。バイアスノイズ続きバイアスノイズで少しやり残したことがあるので、試しておきます。バイアスフレームをマスターバイアスで補正してみたら?前回、バイアスフレームを何枚かスタックしてリードノイズを求めてみましたが、枚数のルートで減っていくはずのリードノイズが実際には理論通りに減っていきませんでした。すべてのバイアスフレームに載っている共通のノイズがあると考えられたからです。それでは、多数のバイアスフレームをスタックして最後に残った共通のバイアスノイズ(PixInsight用語では「マスターバイアス」というそうです)で、各バイアスフレームを補正してから、改めて何枚もスタックしたらどうなるのでしょうか?面白そうなので試してみましょう。単純に考えるとこんな予想ができます。前回の測定で、最後まで残った全バアスフレームに共通にあるノイズがさっぴかれるので、理想的に枚数のルートに比例してノイズが少なくなっていく。最終的にはあるオフセット(一定の輝度という意味)を持った、のっぺりした画像になる。この予想は、実際に試す前に頭だけで考えたものです。本当にそうなるのか、もし違ったとしても実際にどこまで迫れることやら。測定さて、実際に試してみましょう。マスターバイアスは再現性もチェックするために、前回撮影したのとは別に新たに撮影し直しました。枚数ですが、できる限りノイズの少ないものということで、1024枚重ね(て平均し)たものにします。このマスターバイアスで各バイアスフレームを先に補正してから1024枚スタックします。それでもノイズは単に理想的なものを1024枚重ねたものより、(マスターバイアスが足し合わさった分)ルート2倍大きくなるはずです。その分だけ理想的な枚数のルートでノイズが改善されるというのからはずれてくると思います。(と、ここら辺のズレくらいまで実際の測定前に頭の中で考えました。)また、バイアスフレームも新たに撮影しました。マスターバイアスを作った際の1024枚でもいいのかと思ったのですが、それだと同じものから同じものを引いただけになってしまい、本来残って欲しいノイズもゼロになってしまうかと思ったからです。今回も1、4、16、64、256、1024枚の比較です。青色の理想的な場合と、緑色のマスターバイアスで補正されたもの、赤色のマスターバイアスで補正されていない(前回と同じ)ものを載せています。あと、わかりやすいように縦軸をlogスケールにしました。理想的だとグラフは直線になります。考察さて、結果を改めて見てみます。マスターバイアスで補正したものは明らかに理想的なラインに近づいています。1024枚の時は同じ程度の(相関のない)ランダムなノイズを2回足し合わせていることになるので、理想的な場合に比べてルート2倍程度大きくなるはずです。無相関なノイズは足しても引いても2乗和のルートになるので、ルート2倍ということです。1.4倍くらいのはずが、実際には1.8倍くらいなので、それでも理論値より少しだけ大きい値になっているようです。256枚のところにも少なからずその影響が出ています。計算上は1.25のルートなので、1.18倍ですが、実際には1.24倍です。マスターバイアスの枚数を増やせば1024枚のところでももっと理想的なラインに近づいてくるでしょう。1枚重ねで単純にマスターバイアスを引くことを試したのですが、平均値が同じものを差っ引くことになってしまうので、ADU(輝度)が0付近に行ってしまい、その影響で標準偏差も0に近い小さな値になってしまうことがわかりました。そのため次のようにして解決しています。マスターバイアスの平均値の半分の輝度を持ち、標準偏差0の全くのっぺりした画像を、PixInsightのNewImageで作成します。それをマスターバイアスから引くことで、マスターバイアスの平均値を半分にしました。やって作ったマスターバイアスを、それぞれのバイアスフレームから引きます。その結果、平均値が輝度0より十分に大きな、マスターバイアスで補正されたバイアスフレームを作り出しました。この過程を経て初めて正しそうな結果を得ることができました。一つ、実際に処理した画像を比べてみましょう。左上の奥のがマスターバイアス補正をしていないもの、右下の手前の画像がマスター補正をしたもの。ともに1024枚スタックした時の画像で、輝度は揃えてありますす。PCの画面を直接撮影したので、モアレが少し残ってしまっています。見にくいところもあると思うのですが、それでもマスターバイアスで補正をすると残っていた縦線が明らかに消えているのがよくわかると思います。まとめ今回わかったことまとめておきます。全バイアスフレームに載っている共通のコモンノイズが存在する。そのノイズは、多数枚のバイアスフレームをスタックして作ったマスターバイアスを使って、補正することができる。オフセットごと補正してしまうことに注意。バイアスコモンノイズをさっ引いたバイアスフレームはかなり理想的なランダムノイズに近い。言ったところでしょうか。うーん、今回はかなり予想通りにいったので、結構満足です。予測できなかったところは、マスターバイアスで単純に補正すると平均値が0になってしまい、ばらつきも少なくでしまうことでした。これは通常の画像処理でいう、オフセットをあげて暗い部分を切ることに相当します。いうわけで、画像処理は嘘をつかないということがかなりわかってきました、、、と言いたいところなのですが、すでに少しダークノイズを試していて、こちらはなかなか一筋縄ではいかないみたいです。余裕ができたらまとめます。それはそうと、今回新たにバイアスファイルを2000枚ほども撮影してしまいました。合計3000枚、あぷらなーとさんにだんだん迫ってきてしまいました。やばい、これはやばい。まっとうな道を行きたかったのに(笑)。実用レベル(バイアス減算後)に残存する読み出しノイズ量の考察ですね!!これは興味深いです。このあたりは(色々と書き方を悩んでいるのですが)要するにバイアス減算でカットしうるノイズとコンポジットによって軽減しうるノイズの2種類が存在しているということで、実際の撮影戦略にも大きく影響する部分ですよねぇ。こちらは、別な『謎』について一歩を踏み出しました。20:55>>1あぷらなーとさんが示してくれた2種類のガウス分布に従うノイズがどういうふうに効いているのか興味があります。したら一方が減算で減るもので、もう一方がコンポジットで減るものだったりするのでしょうか?あぷらなーとさんのブログも見ました。あとでそちらにコメントさせてください。私の方もダークノイズに突入しました。測りたいことがありすぎなので、何をどれくらい測定すればいいか考えながらやっています。Proのバイアスフレームについて色々検証してみました。面白い結果が出たのでまとめておきます。はじめに昨日の昼間、めずらしくものすごい快晴。これはと思い、早速夜からカモメ星雲を撮影しようと準備をして、やっと撮影を始めたらわずか数枚で雲がもくもく。Proの評価の続きです。大きな目的としては、前回の課題の一つダークノイズがどれくらい撮影に影響があるかですが、今回はその前々段階くらいにあたる、リードノイズのいろいろなテストです。実はあぷらなーとさんの解析に触発され、自分でももう少し泥臭い検証をしてみたくなりました。バイアスフレーム一枚からのリードノイズの算出あぷらなーとさんが自作ツールでバイアスフレームを解析し、見事メーカーが公表しているリードノイズと値が一致しました。Analysis機能を使うことで、メーカー値と同じ値を確認したのですが、もう少し自由に測定できないか試したくなりました。それでも独自ツールを作るのは大変なので、今回はPixInsightの「ImageInspection」の「Statistics」を使いってリードノイズを求めたいと思います。Proのバイアスフレームを撮影します。それをPixInsightで読み込み、Statisticsツールを起動し、開いた画像を選択します。[0,16383]」を選び「Normalized」にチェックを入れます。その時のavgDevの値を読みます。この場合、2.1でした。単位はADUなので、eに変換するためにコンバージョンファクターを使います。前回の測定からゲイン121のところ見ると、0.88とあります。[e]なのでほぼ正しい値が出ているようです。(UG、eとADUが同じになるゲインのこと、すなわちコンバージョンファクターが1ということ)から求めても同じことです。メーカーによるとUGが117とのことです。[e/ADU]となります。[e/ADU]とは少し違いますが、UGをメーカー値としたためこれくらいのズレはあり得るでしょう。[e]となりますが、それでもそれほどのズレではないです。7.17294だけで、あとは全て計算値です。Gainをかけてみると、全てのゲインで65484.6(上の表は小さな桁を丸めてあるので少しずれます。)と同じ値になり、さらにこれにゲイン0の時のe/ADUの値3.996863906をかけるとぴったりと14bitで整数値の16384になることなどでわかります。Wellは本来サチルくらいの光量をカメラに入れて測定から求めるべきなのですが、SharpCapは14bitの最大値をサチった値と仮定して簡易的に求めていることもわかります。ZWOのメーカー値もどうやら同じように測定されているみたいなので、これはこれでありなのかもしれません。一例としてゲイン120の場合で計算してみましたが、他のゲインはどうでしょうか?他のゲインの値も、実際に撮影した画像からPixInsightを使ってリードノイズの値を求めてみたので、グラフにしてみます。Analysis機能で測定した線、青がPixInsightを使って一枚一枚マニュアルで求めた線です。グラフを見ても、SharpCapとマニュアル測定の差はほとんど誤差の範囲だとわかります。いうわけで、PixInsightを使うことで、リードノイズの値を画像からいつでも求めることができるという手法を手に入れたということになります。バイアス画像を多数枚スタックするとどうなるか?とりあえず、簡単にリードノイズを測定することができるようになったので、色々やってみたいと思います。これらバイアスフレームを多数枚スタックするとどうなるのでしょうか?スタックするとばらつきが平均化されるので、もしバイアスフレームに存在するノイズが完全にランダムなら、理想的には枚数のルートに比例してノイズが小さくなっていくはずです。2、4、16、256、1024枚と、枚数を増やして、上と同様にPixInsightで実測したリードノイズの値を求めてみました。その結果をグラフに示します。理想の場合(青線)と、実際にスタックした場合(赤線)での比較になります。スタックはPixInsightのIntegration機能を使いました。Proでスタックした場合4144x2822の16bitのfits画像1024枚でスタック時間は7分くらいでした。これくらいなら待つことができます。グラフを見るとわかりますが、理想的なノイズの減り方に比べて、実測の方が明らかにノイズの減り具合が悪いです。これはなぜなのでしょうか?実際のスタックしたバイアス画像を見比べてみるこの謎を解決するために、実際にスタックした画像を見比べてみましょう。左上の奥の画像から1、4、16枚、最後の右下手前の画像が256枚重ねたものです。輝度は1枚ときの画像に全て合わせているので、直接見比べることができます。見てわかるのは、枚数が多くなると明らかにノイズが滑らかになっていることでしょうか。これを見る限りは理想的にはどんどんノイズ(ばらつき具合)は少なくなっていってもいいはずです。次に、同じ画像で輝度を256枚重ねた画像に合わせてみましょう。前は綺麗に見えていた256枚画像も、実は完全にランダムなノイズではないことがわかります。縦線みたいなものが残っています。逆に1枚の時には横線が目立っています。これは横線に関してはランダムに近いノイズで、枚数を重ねることで滑らかになっていくのですが、それでも全枚数に共通に存在する縦縞のノイズが残ってしまい、それがグラフでの理想値との差を生むと推測されます。実際に1枚重ねだけの画像を何枚も見比べてみると、横線がてんでバラバラに入っていることがわかります。多数のバイアスフレームを使うのは、バイアスフレームのランダムに存在するノイズを減少させるため。バイアスフレームでライトフレームを補正するのは、スタックしたバイアスでさえも残った、バイアスフレーム全てが持つ共通のノイズを除くため。いうことが言えるのではと思います。まとめはあ、ババーッとまとめてさすがに疲れたので、今日はこれくらいにします。面白いことはあるのですが、さすがに書くスピードの方が追いつきません。単体のバイアスフレームから、リードノイズを見積もることができる。SharpCapも全部のゲインで全部の測定をしているわけでなく、一部を測定して、あとは計算で出している。バイアスフレームをスタックすると、ノイズは減っていくくが、無限に小さくなるわけではない。バイアスフレーム全てに共通するノイズが存在し、それらはバイアス補正でライトフレームから差っ引くことができる。いったところでしょうか。ちなみに、あぷらなーとさんはバイアス解析だけ1万枚も撮影するというような、言わずと知れた変な人です。私はたかだか千枚ほどしか撮影していないので、あぷらなーとさんに比べて10分の1くらいしか変でないということがわかってもらえると思います。11:30すごい!2種類のツールを用いて測定した値がほぼ一致するという検証記事は珍しいので勉強になります。バイアスフレームをスタックした場合のノイズ減少量が(ランダムノイズを仮定した場合の)理論値とズレているという結果も興味深いですね。ある程度発生位置が固定化されたノイズ(ホットピクセルのような)が混在しているということですね。次の休みには私ももう一歩解析ごっこを先に進めてみようと思います。19:48>>1ありがとうございます。今回はあぷらなーとさんに触発されました。バイアスノイズを試して、次はダークノイズかと思っています。試したいことがいっぱいあります。らなーとさんの結果も楽しみにしています。珍しく数値で測れるかなり定量的な評価だと思うのですが(笑)。05:47私には、良い写真をとるには大変!ということがわかる程度です。12:07>>3りっくんさん、こんにちは。いやいや1000枚は許容範囲ですが、10000枚は変です(キリッ!)。あ、でも今日また追加で1000枚取ることになりそうです。やばい、だんだん変になってきます。珍しく数値で測れるかなり定量的な評価これは一本取られました。ぐうの音も出ません(笑)冗談はさておき、実は「ゲイン」「撮像温度」「ADCの作動モード」をそれぞれ変えながら各128コマずつ撮像していると約10000コマにもなってしまったという訳です。12:12>>4あぷらなーとさん、こんにちは。ゲインのことを考えると本当に際限がなくなってきます。今ダークも考えているのです、こちらはさらに露光時間も関わってきます。できるだけ効果のわかる試験をできるだけシンプルにするのかが勝負かと思っています。ダークも合わせたら10000枚くらい本当に行きそうです。残念ながら変な方に仲間入りしてしまうかもしれません。その時はどうかよろしくお願いします。23:35>>7nakさん、今日はお疲れ様でした。いえいえ、リニアだろうが対数だろうが、一桁は一桁です(キリッ)。あ、でも今はもう差は3倍くらいしかありませんが...。