Skip to main content

Photometric Stereo

Photometric Stereo は、camera と object は固定したまま照明方向を変えて複数 image を撮影し、surface normal や shape を推定する method です。Multi-view geometry が視点差を使うのに対して、Photometric Stereo は shading の変化を使います。

Lambertian model

最も基本的な定式化では、surface は Lambertian reflectance を持つと仮定します。Pixel intensity IiI_i は、albedo ρ\rho、light direction si\mathbf{s}_i、surface normal n\mathbf{n} によって次のように表されます。

Ii=ρsinI_i = \rho\, \mathbf{s}_i^\top \mathbf{n}

複数の lighting condition i=1,,mi = 1, \dots, m があれば、normal と albedo を least squares で推定できます。

Surface normal から shape へ

Photometric Stereo は、まず dense な surface normal map を推定します。その後、normal field を integrate して depth や height field を復元します。

Normal から depth への integration では、noise や non-integrable な normal field への対処が必要です。

Multi-view stereo との違い

観点Multi-View StereoPhotometric Stereo
使う情報視点差と correspondence照明変化と shading
得意なことGlobal geometry、depthFine surface detail、normal
苦手なことTextureless / specular surfaceUnknown lighting、non-Lambertian surface

両者は相補的です。MVS で global shape を得て、Photometric Stereo で fine detail を補う構成もあります。

難しいケース

  • Non-Lambertian reflectance
  • Specular highlight
  • Cast shadow
  • Unknown light direction
  • Spatially varying material
  • Interreflection

数式で見る normal 推定

Lambertian model では、各 pixel の観測 intensity を並べると線形方程式として書けます。

i=Sg,g=ρn\mathbf{i}=\mathbf{S}\mathbf{g}, \qquad \mathbf{g}=\rho\mathbf{n}

ここで、i=(I1,,Im)\mathbf{i}=(I_1,\ldots,I_m)^\topmm 個の照明条件での intensity、S\mathbf{S} は各行に light direction si\mathbf{s}_i^\top を持つ行列、g\mathbf{g} は albedo と normal をまとめた vector です。g=ρn\mathbf{g}=\rho\mathbf{n} と置くことで、albedo ρ\rho と unit normal n\mathbf{n} の積を一つの未知量として扱えます。

照明方向が既知で、m3m\geq 3 であれば、least squares によって次のように推定できます。

g^=(SS)1Si\hat{\mathbf{g}}=(\mathbf{S}^\top\mathbf{S})^{-1}\mathbf{S}^\top\mathbf{i}

その後、albedo と normal は次のように分離します。

ρ^=g^,n^=g^g^\hat{\rho}=\|\hat{\mathbf{g}}\|, \qquad \hat{\mathbf{n}}=\frac{\hat{\mathbf{g}}}{\|\hat{\mathbf{g}}\|}

この式の気持ちは、「照明方向を少なくとも三方向から変えると、shading の変化から surface normal の三成分を解ける」ということです。Shadow や specular highlight がある場合は Lambertian model から外れるため、robust loss や shadow mask を使うことがあります。

Normal map から height field z(x,y)z(x,y) を復元する場合、normal n=(p,q,1)/p2+q2+1\mathbf{n}=(-p,-q,1)^\top/\sqrt{p^2+q^2+1} に対して、p=z/xp=\partial z/\partial xq=z/yq=\partial z/\partial y を満たすように積分します。Noise がある場合は、次のような least squares として解きます。

minz(zxp)2+(zyq)2dx\min_z \int \left(\frac{\partial z}{\partial x}-p\right)^2+ \left(\frac{\partial z}{\partial y}-q\right)^2\,d\mathbf{x}

関連ページ

主なソース