実践!照度差ステレオ<シミュレーション編>
照度差ステレオとは
照度差ステレオ(photometric stereo)は陰影を情報として画像の法線情報を得ることができる手法です。Woodhamが提案したランバート面における照度差ステレオ*1は、3つの異なる平行光源で撮影された3枚の画像から法線マップを求めることができます。
単位光源ベクトルを、物体表面の単位法線ベクトルを、物体表面の反射率をとするとき、その点での明るさは以下のように表せられます。
3つの異なる光源で撮影するとき、明るさは以下のような行列式で書き表すことができます。
この式を解くことにより法線ベクトルと反射率を求めることができます。
また3つ以上の光源で撮影された画像を用いる場合は、以下の式を最小二乗法で解くことによって求めることもできます。
データセットの準備
照度差ステレオのデータセットはPOV-Rayを使って合成しました。今回対象とする物体は下の図のような、2つの木の球がくっついたような物体です。地面に対して垂直となる方向から物体を撮影した画像をデータセットとして使いました。
2次元画像での法線の取り扱いについて
2次元画像における法線の取り扱いについて説明します。法線マップはRGBの3チャンネルに対して法線方向xyzを対応させています。下の画像は球の法線マップです。法線方向が-1.0から1.0の値を法線マップでは0から255に変換しています。
光源方向の推定
光源方向の推定を行い、光源ベクトルを求めます。推定には鏡面反射成分を持つ球使います。
撮影した球の画像から画像中のハイライトの位置を求めます。球の形状は既知なので中心位置と半径がわかれば、画像中の球の各点での法線が求まります。ハイライトの位置の法線ベクトルを、撮影した方向を表す視線ベクトルをとすると、光源ベクトルは以下の式で求めることができます。
視線ベクトルはカメラの方向なのでとなります。
結果
下のシーンで照度差ステレオをやってみました。データセットに8つの光源で撮影した8枚の画像を使いました。
法線マップです。
反射率マップです。(修正(2018/12/22):グレイスケールだったので、カラーに差し替えました)
プログラム
使用したプログラムをGitHubに置いておきます.
参考資料
http://pages.cs.wisc.edu/~lizhang/courses/cs766-2008f/syllabus/10-09-shading/shading.pdf
コンピュータビジョン最先端ガイド5 (CVIMチュートリアルシリーズ)
- 作者: 松下康之,古川泰隆,川崎洋,古川亮,佐川立昌,八木康史,斎藤英雄
- 出版社/メーカー: アドコム・メディア
- 発売日: 2012/12/05
- メディア: 単行本
- この商品を含むブログ (1件) を見る
コンピュータビジョン: 広がる要素技術と応用 (未来へつなぐデジタルシリーズ)
- 作者: 米谷竜,斎藤英雄
- 出版社/メーカー: 共立出版
- 発売日: 2018/06/28
- メディア: 単行本
- この商品を含むブログを見る