【CG】OpenCVにあるHDR合成×トーンマップの全組み合わせを試す【C/C++】

Pocket
email this

 OpenCVに直接触れる機会がなかなかなかったのですが、HDR合成機能を試してみたかったのでやってみました。

 早速。公式のサンプルに毛が生えただけのコードですが一通り作成してみます。


OpenCVにあるHDR機能あれこれ

HDRキャリブレーション

2つありました。以後「カメラ応答関数」と呼んでいます。
(用語を完璧に覚えていなくてごめんなさい。復習+勉強中です。)

  • Debevec(デベベック)
  • Robertson(ロバートソン)

HDR合成

3つ方法がありました。

  • Debevec(デベベック)
  • Robertson(ロバートソン)
  • Mertens(マーテンズ)

トーンマップ

4つアルゴリズムがありました。

  • Durand(デュラン)
  • Drago(ドラゴ)
  • Reinhard(ラインハルト)
  • Mantiuk()

あと「トーンマップ処理しない」って選択肢もあります。HDR合成して32bitにしてから8bitに戻すだけ。という選択肢もある。

 このへんまで読んだ時点で、これ、プログラミングできる人だったらPhotomatixほぼ要らないってことになりますよね。それは言い過ぎだったか・・・Luminance HDRと同等の加工はできると言ったほうがいいか、訂正します。自分でコーディングしてスライダとかプレビュのUIつければいけちゃう。作るより買ったほうが絶対安いけどいい勉強にはなるかと。


実行

1.HDR合成処理とカメラ応答関数

HDR合成時にカメラ応答関数を指示します。ただしOpenCVはカメラを応答関数はなくても一応処理はできます。

HDR合成処理3つ × カメラ応答関数3つ = 9通りのHDR合成画像

が作れますね。

2.トーンマップのアルゴリズム

今回はデフォルト設定でやります。こちらもやらないという選択肢があるので、計5つ。ということは、

9通りのHDR × トーンマップ5つ = 45通りの画像

が作れますね。


3.入力画像

次の4枚にしました。-4、-2、0、+2です。場所は富山県立美術館の2階。
個人的な経験則ですが、OpenCVで重み付けをせずにデフォルト値でやるときは、-4~+4とかでやるよりも、入力画像にちょっと暗い画像を多くしておくと上手くいきやすいです。

-4
-2
0
+2
           

これを入力情報ファイルのlist.txtにシャッタースピードとともに書いておきます。

 あとはOpenCVライブラリにあるサンプルソースをちょっと改造したプログラムを用意します。じゃあやってみましょう。(ソースは最後に載せています。)

出力結果に続きます。



Pages: 1 2



コメントを残す