ダークフレーム減算を自前実装 with OpenCV | Nature | Photography | Music | Art

Nature | Photography | Music | Art

日々好奇心の趣くまま

サイト内の写真の使用ならびに無断転用を禁じます。

星撮りや暗いもの好きの人以外には無用な内容ですが。

ダークフレーム減算とは

https://en.wikipedia.org/wiki/Dark-frame_subtraction

原理は簡単で、同じカメラに生じる定常的・定位置的なノイズはダークフレーム(要はレンズキャップを被せて撮った黒い写真)も同じノイズを持っているので元の写真からこれを減算してやればノイズが消えるだろうというもの。

普通に昼間の写真を撮っている限りではこの手のノイズに関しては無視していいものだが、星とかその他暗いものを撮り出すとこれが非常に厄介者になってくる。

一般的にデジカメで撮影した画像を目で見る際はデジカメセンサで捉えた画像そのままではなく、ガンマ補正によって暗い部分のデータの大部分がより明るい部分に振り分けられていて、本当に暗い部分のダイナミックレンジは非常に狭いのです。
これが画像の暗い部分にノイズが多く載る原因の一端となっているわけです。

余談ながら、これをカバーする手法のひとつとしてETTR(Exposure to the right)というものがあるんですが、これに関しては現在勉強中なので後日全貌を理解して使いこなせるようになったら書きたいと思います。

ダークフレーム減算の話に戻りますが、このあたりの処理は天体屋さん達が使うのがほとんどなので有料の専用ソフトを使うのが定番のようです。
Photoshopとかでも工夫すればできるそうですが。

しかしながら、個人的には天体写真ほど高度な処理は行わず、そもそもの原理は簡単なので勉強と研究ついでにOpenCV & Boost C++を使ってプログラムを自作してみました。

https://github.com/delphinus1024/dark_frame_sub

ビルド・詳細な使い方はreadmeを参照いただくとして。

基本的に撮影の前後に同じ条件(SS,F,ISO,環境温度)でダークフレームを複数枚(これらを平均すると本当のノイズパターンになるはずなので)撮影するのが基本のようです。

個人的に特に困っているのが上で書いたようなノイズというよりホットピクセルといわれるもの。
長時間露光によるセンサー温度の上昇が主な原因となっているようで、カメラが古くなるとより多く発生するらしくこんな感じ。



おそらくカメラの種類によっても異なるのだろうが、明らかに星とは別の色や写り方なのが分かるかと思います。

とりわけウチのご老体の5D2とかで真夏に星など撮ったりするとこのホットピクセルがワンサカ載って賑やかなこと…(汗)
ダークフレーム減算はこのホットピクセルにも有効で、手作業での修正に時間をかけるのがイヤなので今回のプログラム作成に至ったわけです。

ご参考までにこのプログラムでの処理前・処理後はこんな感じ。





綺麗にホットピクセルが消滅しているかと思います。その他の種類のノイズは正直あまり変化はわかりませんでした。