2015年3月26日木曜日

CMOSイメージセンサーのノイズ除去テクニック(2)


前回はノイズの種類に2つあることを記事にした。

今回は固定パターンノイズを除去してランダムノイズはどういうものかについて考察してみる。

ランダムノイズを累積した画像(左)、原画(右)

左側は時間軸で見て動いた値を累積した画像です。
すでに固定パターンノイズは除去済みで左右共に64枚画像を合成・平均化したものになります。
右側は合成しただけあってノイズが全然みえないです。iphoneアプリと同じ効果がでてますね。

ノイズ画像側を見るとヘッドホンが文字までハッキリと写っているのが分かる。
つまりランダムノイズって輪郭となるエッジに吸い寄せられるように集まってくるのか?と思って時間軸フィルタを作ってみたり色々ノイズ除去のアイデアを実施してみたがうまくいかない。

なぜだと原点に立ち戻ってみると、

 Y(出力値) = A(CMOS特性) * (Xランダムノイズ + K理論値) +  B(固定パターンノイズ)


もうここの時点で間違いだったという事に気づいた。


固定パターンノイズは蚊帳の外だと思って 固定パターンノイズ と ランダムノイズを分けて考えるにはちょっと早くて


 Y(出力値) = A(CMOS特性) * {(X理論値 + ランダムノイズ) +  B(固定パターンノイズ)}

Y(出力値) = A(CMOS特性) * {理論値+ノイズ}

なので、まず最初にやるべきことは出力値をCMOS特性で割って {理論値+ノイズ}の値を求めなくてはいけなかったことだ。

 A(CMOS特性)はカメラで黒と白の画像を撮影して検量線{入力値ー出力値}の1次間数が求めておいて次の計算式を解く。


 値{(Y/A) - B} = Xランダムノイズ + K理論値


ここまで来てやっと固定パターンノイズを無視してランダムノイズのみを対処できるようになる。

何を間違っていたかというと

 {(Y - B) / A} = X理論値 + Zランダムノイズ


最初に出力値から固定パターンノイズを引いていた所である。

これだと何がいいかというと Aを求めるときにBを含める事ができるので

 Y / A = X理論値 + Zランダムノイズ

というようにできる点。

結果の違いは微々たるものだけど、間違いは正しておく必要があるので書き残しておく。


ここから前回と今回の成果をまとめると

●検量線作成
・ダーク撮影 =暗電流測定
・白背景撮影 =ホワイト =何枚か撮影して最小値を測定して、ランダムノイズ=0の白画像を取得したら平均値Mを計算する。

●画素単位のCMOS特性Aを求める
1画素単位にAを求める。該当画素をWとするとW/M

(入力値、出力値)(0, 0)(M, W)を通る線がAとなることから、Aの値は

 A=W/M

以降の計算で逆数になるので、計算しやすいように逆数にする
 A'=M/W

●得た値から本来の色を求める式を導出
この時点でY=AX+Bを計算式で求まるようになっていることから

式を変形させ

 X=(Y-B)/A

 X=(Y-B)*A'

本来はランダムノイズZがあるので付加する。

X+Z=(Y-B)*A'

K=X+Zとしたとき


 固定パターンノイズ除去画像K=(取得した画像Y - 黒画像B) * (CMOS特性画像A')

となる。


ランダムノイズの手がかりは画像Kしかないのでそこからランダム・ノイズ画像を作成して

X = K - Z(ランダムノイズZ)

を求めると答えになる。


ランダムノイズはNLMeanフィルタやBilateralフィルタでノイズ除去でZを消す手法が一般的だけど

もう少し画素単位でランダムノイズを除去する手法がないか模索してみる。


バックナンバー
 CMOSイメージセンサーのノイズ除去テクニック

0 件のコメント:

Androider