structured-light方式デプスセンサのキャリブレーションと測定原理

#概要
Microsoft Kinect V1, PrimeSense Xtion, Apple iPhone X True Depthカメラなどに用いられている**1台のプロジェクタと1台のカメラを用いたstructured-light方式デプスセンサ**のキャリブレーションと測定原理について述べる。
この方式では通常のステレオカメラと同様に三角測量に基いて距離を測定する。プロジェクタはカメラではないため撮像することはできないが、**プロジェクタ視点の画像を仮想的に生成することで三角測量を行う**。
本稿は主に[^1][^2]を参考にした。

#測定
後述するキャリブレーションによってカメラとプロジェクタのintrinsic及びextrinsic parameterが推定済みであるとする。
**プロジェクタで投影するパターンをプロジェクタ視点のカメラで撮像した画像として扱い**、カメラで撮像した画像との間で三角測量を行う。
<img width="683" alt="グラフィックス1.png" src="https://qiita-image-store.s3.amazonaws.com/0/250024/8aa9cffd-f126-75db-2bfe-5cb56a7b5f3f.png">

#キャリブレーション
カメラのintrinsic parameterはZhangの手法[^3]で推定することができる。
問題はプロジェクタのintrinsic parameterとプロジェクタとカメラの間のextrinsic parameterの推定である。
そこでプロジェクタ視点の仮想カメラで撮像したキャリブレーションボードの画像を以下のフローで生成する。

1. カメラから見えかつプロジェクタのパターンが投影される位置にキャリブレーションボードを固定する。またパターンがよくカメラから見えるように、キャリブレーションボードの色、光源の色、パターンの色を事前に調節しておく。
<img width="631" alt="グラフィックス2.png" src="https://qiita-image-store.s3.amazonaws.com/0/250024/a2d67ecb-726b-f3ec-8ca6-f607821f34e3.png">

2. プロジェクタからパターンを投影する。**プロジェクタから投影したパターンと、カメラで撮像したキャリブレーションボード上に投影されたパターンでマッチングを行い、ピクセル単位でのマッピングを求める**(マッピングの方法としてはキャリブレーションボードの平面性を利用したhomographyが使える。[^4]では非線形なdistortionを反映させるために、キャリブレーションボード全体ではなく点（チェスボードであればコーナー、ドットパターンであれば中心）周辺の局所的なhomographyを用いることが提案されている)。**このマッピングによりカメラで撮像した画像をプロジェクタ視点の仮想カメラで撮像した画像に変換できる。**なおこのマッピングはキャリブレーションボードの姿勢に依存するため、キャリブレーションボードを移動するたびに推定する必要がある。
<img width="631" alt="グラフィックス3.png" src="https://qiita-image-store.s3.amazonaws.com/0/250024/b45b0601-e542-c199-c086-7a65d2124706.png">

3. プロジェクタの投影を切りカメラでキャリブレーションボードを撮像する。2で求めたマッピングに基いて、プロジェクタ視点で撮像したキャリブレーションボードの画像を得る。（実際には画像全体をマッピングする必要はなく点（チェスボードであればコーナー、ドットパターンであれば中心）の位置のみでよい。）
<img width="631" alt="グラフィックス4.png" src="https://qiita-image-store.s3.amazonaws.com/0/250024/2f485a93-c226-b844-0b8a-f5d19bde0dc7.png">


以上のフローによりプロジェクタ視点の仮想カメラで撮像したキャリブレーションボードの画像を得られる。プロジェクタ（視点の仮想カメラ）のintrinsic parameterと、プロジェクタ（視点の仮想カメラ）とカメラの間のextrinsic parameterの推定を通常のステレオカメラと同様に行うことができる。
このフローは一般的なものであり、任意の投影パターン（時間的パターン：正弦波、空間的パターン：グレイコード、ランダムドットなど）、任意のカメラモデル（ピンホール、魚眼など）に適用できる。

#Appendix？
以上の説明ではプロジェクタで投影するパターンはデジタル画像であると仮定していた。しかし本稿の冒頭で列挙したような商用の安価なセンサではIRレーザーをDOE[^5]に照射することによりパターンを投影しているらしい。この場合プロジェクタで投影するパターンのサイズはピクセルではなくDOEの実世界でのサイズになる？が、intrinsic parameter (focal length, principal point) はピクセル単位で扱いたいため都合が悪い。この場合でも実世界のサイズと縦横比が同一の適当なピクセル単位の画像サイズを用いれば問題ない？

#参考文献

[^1]: [Zhang, Song, and Peisen S. Huang. "Novel method for structured light system calibration." Optical Engineering 45.8 (2006): 083601.](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.838.117&rep=rep1&type=pdf)
[^2]: [岡谷貴之 , "プロジェクターカメラシステムの基礎と校正方法", 光学 = Japanese journal of optics : a publication of the Optical Society of Japan, the Japan Society of Applied Physics 43(10), 457-463, 2014-10応用物理学会分科会日本光学会](https://annex.jsap.or.jp/photonics/kogaku/public/43-10-kaisetsu2.pdf)
[^3]: [Zhang, Zhengyou. "A flexible new technique for camera calibration." IEEE Transactions on pattern analysis and machine intelligence 22.11 (2000): 1330-1334.](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr98-71.pdf)
[^4]: [Moreno, Daniel, and Gabriel Taubin. "Simple, accurate, and robust projector-camera calibration." 3D Imaging, Modeling, Processing, Visualization and Transmission (3DIMPVT), 2012 Second International Conference on. IEEE, 2012.](https://www.researchgate.net/profile/Gabriel_Taubin/publication/262204503_Simple_Accurate_and_Robust_Projector-Camera_Calibration/links/5563449f08ae8c0cab35c44e.pdf)
[^5]: [DIFFRACTIVE OPTICAL ELEMENTS (DOE)](https://holoeye.com/diffractive-optics/)