★MATLABで始めたノイズ解析遊びひょんなことから突然始めたMATLABによるノイズ解析ごっこですが、前回は「宇宙線二次粒子のヒットと思われるノイズ」の弁別とその特徴について考察ごっこしました。
今回はその続きです。
★標準偏差がゼロ・・・だと?
ダークファイル中の各ピクセルの輝度値は、大なり小なり揺らいでいるのが普通です。ところが、前回ダークファイルの解析をしていた際に奇妙なピクセルを発見しました。

これは
ASI1600MM-Proをー10℃ゲイン300で30秒露光したダークファイルを32コマ分解析したものですが、上記のように
最低輝度側と最高輝度側に輝度揺らぎの標準偏差がゼロのデータが見られます。標準偏差がゼロということは、要するに常に一定輝度値を吐いているということになるのですが、本当にそうなのかを確かめるため、この
『異常ピクセル』の座標を特定するためのコードをMATLABで書いて走らせてみました。
やっていることは単純です。
まず、読み込んだFITSファイルから輝度値を読み込み、それぞれのピクセル毎に輝度メジアンと輝度揺らぎの標準偏差を演算します。
次に、標準偏差がゼロになるデータを弁別し、そのピクセル座標を特定します。
通常の言語なら、X座標やY座標でループを回して条件に合う座標値を収集しないといけないのですが、MATLABの場合は上記のように非常にシンプルなコードで演算が可能でした。(ある意味、RDBのクエリ処理に近いと言えるかもしれません)
得られた座標値をそれぞれ変数に格納したところでプログラムは終了。ここからが個人的にMATLABの好きなところで、MATLABはインタープリタなので、コードを走らせた後でもコード中の変数をコマンドラインから呼び出して中身を見たりグラフにしたりすることができるのですよー。
学生時代にFORTRANで観測データの解析をしていた時には(解析したデータを全部書き出しておかないと)後から「しまった。あの変数も考察に必要だった!!」などと再解析に陥りがちでした。特に解析演算に数日から数週間かかるようなデータの場合だと致命的で、学会前によく慌てたものです。その点、MATLABならコードを走らせた後でも変数の中身が見られます。

たとえば、輝度メジアンが100未満で標準偏差がゼロのピクセルのX座標(行列変数のYインデックス)をJ2という変数に格納しておけば、後からコマンドラインで「L2」と打つだけで、上記のようにその中身が吐き出されます。うーん。素晴らし過ぎる。
さらに該当座標のピクセルについて、その輝度変化を撮影コマ毎に追ってみると、

このように、
常に最大輝度を出力しているピクセルと・・・・

このように、
常に最低輝度を出力しているピクセルがあることが分かりました。
つまり、標準偏差がゼロになっているピクセルは
①常に最高輝度値になっている『狭義のホットピクセル』
②常に最低輝度値になっている『狭義のクールピクセル』
の2群に分かれていると言えます。
★実際の画像と比較してみる
さて上記のように解析した結果、手元のASI1600MM-Proについて
『狭義のホットピクセル』は9個
『狭義のクールピクセル』は67個
あることが判明しました。
その位置を散布図にしてみると

こんな感じです。
むう・・・・。ホットピクセルの分布は良いとして、クールピクセルの分布はちょっと気色悪い(中央に集まりすぎてる)なぁ・・・。まあ、でもこれは仕様でしょうから仕方ありません。
では、実際のライトフレーム中でどのように写っている物が上記に該当しているのかを見てみましょう。
今回は、SE120+Hα+ASI1600MMーProで撮影した30秒露光の画像120コマを位置合わせ無しで加算平均コンポジットしたものを題材にします。もちろん、ダークやフラットは補正していません。
散布図からおよその位置にアタリをつけて画像を拡大し、ピクセル座標を追い込んでいきます。
すると・・・
ででん!!


おお、
ダークの解析から特定したホットピクセルとクールピクセルが、ライトフレーム中の白点と黒点に見事に一致しました。
いやまあ一致して当然と言えばそうなのですが、今回の収穫は「書いたコードにバグが無い事が確かめられた」ことに尽きます。
これらの「常に光りっぱなし」な狭義のホットピクセルと「常に消えっぱなし」な狭義のクールピクセル(むしろデッドピクセル)に関しては、ダーク補正やクールファイル補正、あるいは画像処理ソフトのフィルタ処理をするまでもなく「そもそも使い物にならない」ピクセルですから、ピクセルマッピング処理を施して常に除外したいなぁ・・・・。
という訳で、不良ピクセルの座標を特定に成功したことで、『ソフトウェアピクセルマッピング』の実現に向けて確実に一歩前進しましたよー♪