Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Structured Light

Teppei Kurita
November 26, 2019

Structured Light

Depth取得技術の1つであるStructured Light(光切断、Patterned Stereo)についてまとめました。
SlideShare: https://www.slideshare.net/teppeikurita/structured-light-197842865

Teppei Kurita

November 26, 2019
Tweet

More Decks by Teppei Kurita

Other Decks in Technology

Transcript

  1. 三角測量によるDEPTH計測 • 三角測量法はDepth計測技術の中で一番歴史が長い • Passive(光を照射しない)とActive(光を照射する)の2方式がある • Passive • 各カメラのマッチング画素を探索 •

    各カメラの光学中心と各マッチング画素を結ぶ線を交差させて計算 • Active → Structured Light (光切断、Patterned~など) • カメラと光源のマッチング画素を探索 • 各カメラ/光源の光学中心と各マッチング画素を結ぶ線を交差させて計算 • 用途:高精度な計測が必要となるものが多い • デバイス:Kinect v1、Hand-Heldレーザスキャナ、iPhoneなど
  2. STRUCTURED LIGHTを搭載した製品例 - REAL SENSE • Active三角測量 - Structured Light

    (Patterned Stereo) R200 (Rear) F200 (Front) Depthは両方VGA RGB:1080p FHD F200→R200(Stereo)での変化 • IRのステレオ化 • ベースラインをより長く ※ 2015年時点での情報
  3. STRUCTURED LIGHT 技術整理 Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning

    Stripe Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  4. 光源・カメラの幾何学モデル • 光源のモデル • 点光源 • 光源の前に2次元Arrayが配置 • Olは光源中心 •

    これがそのままプロジェクターのモデルとなる • 実は光源とカメラは同じようなモデル • 光源 • 2次元平面を3次元空間上(実世界)に 投影 (a) • カメラ • 3次元空間(実世界)の画像を2次元平 面上に写像 (b) • ゆえに光源は「Inversed Camera」と呼ばれる 光源とカメラのモデル
  5. POINT SCANNING Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning Stripe

    Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  6. POINT SCANNING - 基本理論 • Ol,Oc:光源とカメラの光学中心 • b:各光学中心を結ぶ線(ベースライン) • S:光源とカメラからの光線が交差する点

    • pc:Oc-Sの光線を示す単位ベクトル • d:SとOc間の距離(これが求めたいDepth)、以下の式で求まる • = 𝑡𝑡𝑡𝑡𝑡𝑡 𝑠𝑠(𝑡𝑡𝑡𝑡𝑡𝑡+𝑡𝑡𝑡𝑡𝑡𝑡) • 、はカメラの内部パラメータ、相対位置によって決定される • これを決定するプロセスを幾何学的キャリブレーションと呼ぶ • キャリブレーションは1回行えば良い • Sの三次元位置は以下で決定される • = + 1つの光線を用いたアクティブ三角測量
  7. POINT SCANNING - 実用 • 前ページの処理で1画素のDepth(3次元位置)は取得可能 • 画像全体のDepthを取得するために角度αをフレーム毎に変化させる • 取得画像のスタックを(

    , , )とする • ̂ を光線が照射した時刻とすると , , ̂ がその時刻での画素値 • ̂ を時刻を横軸にとった輝度のプロファイルのピークを見つけることで得る • ̂ = argmax 𝑡𝑡 ( , , ) • 画像全体のdepthは以下の式で求まる • , = (̂ 𝑡𝑡) 𝑡𝑡𝑡𝑡𝑡𝑡 (,) 𝑠𝑠 (,) 𝑡𝑡𝑡𝑡𝑡𝑡 ̂ 𝑡𝑡 +𝑡𝑡𝑡𝑡𝑡𝑡 (,) 画像全体に対するPoint Scanning (a):取得画像 (b):時刻を横軸にとった輝度のプロファイル
  8. POINT SCANNING - 実装方法等 • Point Scanningはレーザ光とミラーによって実装可能 • 2つのミラーをx,y軸中心に回転 →

    画像全体に照射 • 当然プロジェクターでも実装可能 • 1フレームにつき1画素を明るく照射する(でも無駄が多い) • Point Scanningは画像1つにつき1点しかDepthを得られない • 画像全体のdepthを得るためにはdepth解像度と同じ枚数の 画像を取得しなければならない • Depth解像度が640x480だったら300000以上の画像が必 要 • 30fpsで3時間以上かかる • あまり実用的な方法とはいえない Point Scanningのハードウェア実装例
  9. STRIPE SCANNING Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning Stripe

    Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  10. STRIPE SCANNING - 基本理論 • 光切断法とも呼ばれる • 照射光の2次元平面(Light Plane)と物体が交差すると1次元曲線(Stripe)が形成される •

    Ol,Oc:光源とカメラの光学中心 • S:光源とカメラからの光線が交差する点 • pc:Oc-Sの光線を示す単位ベクトル • d:SとOc間の距離(これが求めたいDepth)、以下の式で求まる • = −−1 • = :Light Planeを表現する • + + + 1 = 0 • Sの三次元位置は以下で決定される • = + Light Planeを使った三角測量
  11. STRIPE SCANNING – 実用 • 前ページの操作で1StripeのDepth(3次元位置)は取得可能 • 画像全体のDepthを取得するためにLight Planeをフレーム毎に変化させる •

    取得画像のスタックを( , , )とする • ̂ を光線が照射した時刻とすると , , ̂ がその時刻での画素値になる • ̂ は時刻を横軸にとった輝度のプロファイルのピークを見つけることで得られる • ̂ = argmax 𝑡𝑡 ( , , ) • 画像全体のdepthは以下の式で求まる • , = − ̂ 𝑡𝑡 −1 (̂ 𝑡𝑡)
  12. STRIPE SCANNING - 実装方法等 • Stripe Scanningは1次元レーザと多角形ミラーによって実装可能 • 多角形ミラーを回転させレーザを拡散させることでStripeが画像全体を横断する •

    当然プロジェクターでも実装可能 • 1フレームにつき1列を明るく照射する • 必要な画像数はプロジェクターのColumns(列)数 • 640x480の解像度だったら480枚必要 • まだ多いがPoint Scanningに比べると圧倒的に実用的 Stripe Scanningのハードウェア実装例
  13. 非同期センサーを使用した高速スキャン • Stripe ScanningはPoint Scanningよりは速いがまだまだ必要画像数が多い • 各画像で1次元のStripeしか情報をもっておらず冗長 • Asynchronous(非同期) Stripe

    Scanningという手法がある • 通常のセンサーで全画素を同時にかつ連続的に取得する代わりに、非同期のセンサーを使い、受光信 号が閾値を超えた画素のみ値を返すようにする • データ量が少なくなるので高速化が可能になる(1000fps以上) 非同期センサーでの高速なStripe Scanning
  14. シャドウを利用することで低コスト化 • Shadow Scanning • Occuluder(細い棒)を光源の前に置き動かす • 明るく照射されるStripeを使う代わりに、暗く生成されるShadowを使う • 精密な光源のシステムがいらないので安価な方法

    • 取得画像のスタックを( , , )とする • ̂ を時刻を横軸にとった輝度のプロファイルの「負の」ピークを見つけることで得る • ̂ = argm 𝑡𝑡 ( , , ) • ():Shadow Plane • ℎ :水平面 • 𝑎𝑎、 ︓()とℎ が交差する線上で見える画素 • 、(): 𝑎𝑎、 の3次元世界での写像元 • 、()はℎ 上にあるのでOcから 𝑎𝑎、 への延長線とℎ の交差する点を 求めることで得られる • ()は 、()とOlの3点にフィットする平面を求めることで得られる Shadowを使った低コストなStripe Scanning
  15. BINARY CODING Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning Stripe

    Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  16. BINARY CODING - 基本理論 (1) • これまでの手法は1時刻において1つのLight Plane (Point) を照射するものであり、画像全体の

    Scanningをするのに非常に時間がかかる • 多数のLight Planeを同時に照射する手法を使うと高速性が実現できる • ただ多数のLight Planeが同時にある場合、マッチングはどうすればよいのか? • 各Light Planeに独自のバイナリコードを割り当てることで解決できる(次ページから詳細) Binary Coded Structured Light 投影時刻t 投影列xl 各列でコードが被らないように投影する → ビット圧縮
  17. BINARY CODING - 基本理論 (2) • コードの長さ(=必要画像数)は Log2 となる •

    (c)あるPixelにおいて取得された(d)輝度プロファイルを使いマッチングする(b)投影パターンを探索する • このプロセスをDecodingと呼ぶ • 𝑖𝑖 � :列� における投影パターン(Onの場合は1) • 𝑖𝑖 : における画像の輝度値 • , � : において投影列� で照射したときの輝度値 • ( ) : における環境光の輝度値 • 𝑖𝑖 = , � 𝑖𝑖 � + ( ) • Decodingの問題設定 • 観測された𝑖𝑖 から𝑖𝑖 � を決定する( , � , ( )は未知) Binary Coded Structured Lightでの投影パターンと取得画像
  18. BINARY CODING - 基本理論 (3) • 全列照射ONと全列照射OFFの2画像を取得する • 閾値 を2画像の平均で得る

    • もし画素値が閾値を超えていたらその時刻でのビットを立てる • ある画素の全時間からなるビットシーケンスと一致する投影列を同定する
  19. BINARY CODING - 実装方法等 • Binary Codingはカメラとプロジェクターを用いて実装可能 • プロジェクターとカメラの内部・外部パラメータをキャリブレーションをしなければならない •

    約10~20の画像が必要 • 最近のプロジェクターは60~120fps出るので、5~10fpsの3Dフレームレートは出る • Binary Codeの投影パターンは多くあるがGrayCodingという手法が良く使われている • 隣接する列間のHamming距離を1とする方法(隣接するコードは1ビットの違い) • 従来のBinary Codeでは隣接するコードのHamming距離はlog2(N)以上だった • 隣接コード間の距離を小さくすることによって高いロバスト性を実現
  20. K-ARY CODING Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning Stripe

    Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  21. K-ARY CODING - 基本理論 • K-Ary CodingはBinary Codingの一般化したもの • 投影パターンの輝度値で2階調以上を設定する

    • コードの長さ(=必要画像数)は Log となる • 例えば、投影列が512かつ8階調で投影する場合、3つ画像を取得すれば良い • 画像の輝度値は右式で与えられる • 全列照射ONと全列照射OFFの2画像を取得する • マッチングする列のコードは右式で得られる(正規化)
  22. K-ARY CODING - Kをどのように設定するか • 結局は「ロバスト性(精度)」と「速度」のトレードオフ • Kを増加させれば必要画像は少なくなるが、階調が増えれるのでノイズに弱くなる • Kを少なくするとノイズ耐性は上がるが、必要画像が多くなり速度が遅くなる

    • Kの最適化は、シーン、センサ、プロジェクタの各特性に依存する • 安いセンサとプロジェクタを使うならKは小さくした方が良い • 逆に高品質のセンサとプロジェクタを使えるならばKは大きくできる • シーンやセンサーの特性を事前に測定することによって、シーンに動的に対応してKを選択 することも可能
  23. K-ARY CODING - 投影パターンの設計 • N列の各コードは長さL = Log のベクトル •

    ロバスト性の最大化はL次元空間内の点間の距離を最大化するN点の配置問題と考えることが可能 • ただし、この問題の最適解を導出するのは困難 • ヒルベルト曲線でL次元空間を埋めると準最適な結果が得られる • 曲線上の点が順次投影列に割り当てられる • 縦軸が照射強度となる 2次元ヒルベルト曲線(L=2) N=16,K=4の場合に使用 1枚目1列 value=0 1枚目2列 value=0 1枚目3列 value=1 1枚目4列 value=1 1枚目5列 value=2 1枚目6列 value=3 1枚目7列 value=3 0 0 1 1 2 3 3 2 2 3 3 2 1 1 0 0
  24. K-ARY CODING - COLOR CODING • カラーが出力できるプロジェクターを使う • 情報量の次元が上がるのでKが小さくても取得画像は少なくて済む •

    128列を照射しようとしたとき、K=2(Binary)でも3つの画像でOK • 欠点 • シーンをグレーとして解いているので普通の環境では使えない • 可視光前提 Color Coding
  25. K-ARY CODING - プロジェクターのキャリブレーション • Binary Codingは2値だったので単純な閾値処理でDecodingできた • K-Ary(Color)Codingは階調が多い →

    エラーが多い • vの輝度値をプロジェクターが照射するとき、実際にはR(v)という物理的変換がなされる • R(・)はプロジェクターの放射応答と呼ばれる • 非線形変換でありエラーの原因となる • 非線形応答を補償するためプロジェクターのキャリブレーションを前処理で行う必要がある • つまりR(・)を測定し、逆関数R^-1(・)を乗算し、真の値を投影する
  26. 連続関数を利用したCODING • Binary(K-ary) Codingは「不連続な」Coding手法に属する • プロジェクターが有限の解像度を持ち不連続なLight Planeを投影していく • 計測可能なDepth値はLight Planeの数と一致する

    • Depth解像度はLight Plane数によって制限される • 個々にコード化されたLight Planeを照射できる光源(Analog Slide Projector等) は「連続的な」Coding手法と呼ばれる • 各投影パターンにおける輝度のプロファイルは連続的で微分可能な関数になる(シグモ イド等) • Light Planeの連続性を利用できるため、連続的な手法は十分なDepth解像度を得 られる
  27. INTENSITY RATIO Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning Stripe

    Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  28. INTENSITY RATIO • 2つのパターンP0,P1を必要とする • P0は全画面で一様な(P0(x)=1)パターン • P1は0~1に線形増加するランプ関数 • 1

    = ( − 1) × Ψ , Ψ = 1 −1 • 上記2パターンは順次投影されキャプチャされる • 各パターンに対応する輝度I0,I1は以下で与えられる • 0 = , � + • 1 = , � � − 1 Ψ + ( ) • � はPixel とマッチングするプロジェクターの列である • もし環境光Aが0であると仮定できるのならば、シーン依存の定数αは除算を取ることで除去可能である • 𝑟𝑟𝑟𝑟𝑟𝑟 = 1() 0() = ( − 1)Ψ • 上記比率画像は列xlのみに従って変化している • マッチングプロジェクター列は右式で計算できる: � = () Ψ + 1
  29. SAWTOOTH CODING Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning Stripe

    Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  30. SAWTOOTH CODING - 不確定性の取り扱い • 多数のランプ波を用いるとマッチング推定の際に不確定性が生まれる • 解くためには階層的な手続きを取る必要がある • まず最もランプ波が多いパターンでマッチングをとる(最も不確定性があるパターン)

    • そうすることで、複数の結果を得ることができる • 結果を持ち越し、よりランプ波の数が少ないパターンでマッチングを取る • 候補が絞り込まれる • 以上を1つの解にしぼられるまで再帰的に繰り返していく
  31. RAINBOW RANGE FINDER • 単一輝度のランプ波を使う代わりに、波長情報を持ったランプ波を用いる方法がある • これは白色光源をプリズムのような分散要素を通らせることで得られる • 各画素は1つの波長を受光する •

    これは照射元のLight Planeの波長と同じである • 故に得られた波長を推定すればマッチングが出来る • センサの前に2種類の波長フィルタをつけ比率を得る • センサの画素アレイ上に異なる2種類のフィルタを貼りつけることで1枚の画像でDepth が得られる • 欠点は、グレーカラーのシーンにしか適用できないこと
  32. PHASE SHIFTING Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning Stripe

    Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  33. PHASE SHIFTING – DECODING処理 (1) • = , � �

    + ( ) • = + cos( ) を代入すると • = , � + ( ) + , � cos( ) • これは以下の形に省略することができる • = ( ) + cos(� ) • と は未知である(センサや環境光、シーンに依存する) • マッチング対称の列� は位相項� にエンコードされ • 未知数が3つ( 、 、� )あるので、異なる投影パターンの3画像が必要 • 全ての投影パターンは異なる初期位相の正弦波 • 𝑖𝑖 = + cos + 2 𝑖𝑖−1 3 , 1 ≤ ≤ 3 • 各パターンが水平方向にシフトしているのでPhase Shiftingと呼ばれる
  34. PHASE SHIFTING – DECODING処理 (2) • 3つの取得画像は以下で表される • = (

    ) + cos(� + 2 𝑖𝑖−1 3 ) • この式は線形の行列演算として簡潔に書ける • = (Xが未知) • = 1 2 3 , = 1 cos(0) −sin(0) 1 cos(2 3 ) −sin(2 3 ) 1 cos(4 3 ) −sin(4 3 ) , 𝐗𝐗 = cos(� ) sin(� ) • Xは単純な逆行列𝐗𝐗 = − で求まる • Xが求まったら� は以下の式で得られる • � = arccos 2 2 2+3 2
  35. PHASE SHIFTING – 不定性の解消 • arccos(・)は0~πを返す • 真の位相値は0~2πなので不定性が生まれる • この不定性は以下の演算をして位相を求めることで解決できる

    • � = arccos 2 2 2+3 2 , 3 ≥ 0 2 − arccos 2 2 2+3 2 , 𝑜𝑜𝑜𝑜 • 最終的なマッチングするxlは以下の式で求めた位相から得られる • � = � 2
  36. HIGH FREQUENCY PHASE SHIFTING Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point

    Scanning Stripe Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  37. HIGH FREQUENCY PHASE SHIFTING (1) • Phase Shiftは単位周波数の正弦波を使っている • 投影パターンが1画面で1周期である

    • 測定誤差が乗りやすい • マッチングの誤差はω(パターンの空間周波数)に比例するため(右式) • 高周波のパターンを使うことでこの問題を解決できる • 通常のPhase Shiftingと同じように、高周波のPhase Shiftingも3つのパターンを投影する • ωは正弦波の空間周波数であり、 = 2 であり位相を示す • カメラの各画素の位相は通常と同じ方法で計算される
  38. HIGH FREQUENCY PHASE SHIFTING (2) • 高周波のPhase Shiftingは画像の中でいくつもの正弦波が繰り返し現れる • これが不定性を生む

    • 各画素で計算された位相から求まるプロジェクターの列は多数の候補がある • これを「ラップ位相問題」と呼ぶ、位相が2π後に回り込むため • この不定性解消のプロセスは位相のアンラップと呼び、TOFなど他の技術分野でも同じような問題 設定があり、多くのアンラップのアプローチが存在している • 1. path-following • 画像内で位相は一定にShiftするという仮定を置いて解く • 滑らかな表面ではうまくいくが、不連続なエッジが多いシーンでは難しい • 2. 多重周波数(高周波と低周波など)の位相を計算する • Fの異なる周波数が使われたら3Fの画像が必要(2だったら6枚必要) • 高周波位相は正確に求まるけど不確定性が多い、低周波位相は不確定性を解くために使 われる(Saw-toothの階層的なアプローチと同じ)
  39. HIGH SNR PHASE SHIFTING Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point

    Scanning Stripe Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  40. HIGH SNR PHASE SHIFTING • L個の画像を投影するStructured Lightの手法はL 次元空間上の点で表現できる • 各点はプロジェクター列の輝度コードを表現している

    • 各点を繋ぐ曲線を「Coding Curve」と呼ぶ • 従来の3画像位相ShiftのCoding Curveは円型 • 半径はap√3/2で、apは正弦波の振幅 • Structured Lightの精度はCoding Curve上の 点間の距離に比例する • つまり、より長いCoding Curveが良い • エッジパターンというパターンが良さそう
  41. HIGH SPEED PHASE SHIFTING • Phase Shiftingは3つ以上の画像を必要とするので動的なシーンには弱い • カラーで正弦波を表現すれば1枚ですむ •

    ただし対象がグレーであるという仮定が必要で一般的なシーンはNG • 高速のバイナリを照射できるDLPプロジェクターを使うという方法がある • Phase Shiftでは正弦波を投影する必要あり • どのようにしてバイナリパターンから生成するか • プロジェクターのデフォーカスを使う
  42. SINGLE-SHOT CODING Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning Stripe

    Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  43. SINGLE-SHOT CODING • Single-Shot Codingは1パターンを投影するだけですむので動的なシーンに対応できる • 投影パターンは各Pixelの位置で空間輝度コード(SIC)を持つように設計される • SICは近傍の画素の情報 (5x5など)

    • 直観的には、Multi-Shot Coding(BinaryやPhase Shift)では時間的な輝度コードを持って いるのと対照的に、空間的な輝度コードを持っているイメージ • 最もポピュラーなものとしてDe Bruijin Codingがある • De Bruijin sequenceを ,𝑛𝑛 とする、これはk-Aryであり、シーケンス内に長さnの連続したサ ブシーケンスが1回確実に表れる • K=2とすると 2,𝑛𝑛 はバイナリとなり、M-sequenceと呼ばれる • De Bruijin Codingは列の輝度が 2,𝑛𝑛 のシーケンスである投影パターン • 各投影列がn行のサイズの空間輝度コードを保持する
  44. SINGLE-SHOT CODING – DECODING (1) • 「画素周辺のパターンと投影列周辺のパターンは似ている」という経験則からDecodingをする • パターンを比較することで最もマッチングした列が投影列として返される •

    投影列Xlにおける空間輝度コードをSIC、IをPixel周りの輝度とする、コードのサイズはnである • Depthと反射率が局所的に一定であり、画像がRectificationされていると仮定すると、IはSICをスケーリ ングしてオフセットを乗せたものと近似できる • α:シーンの反射率と表面の陰影に依存するスケーリングファクター • A:一定の環境光に依存するオフセット
  45. SINGLE-SHOT CODING – 不連続な表面の取り扱い • Decodingでは暗黙のうちに取得画像輝度パターンが投影パターンと同じであると仮定し ている • シーンが急激なDepthの不連続性を持っていたら破綻する場合がある •

    このようなシーンを取り扱うために動的計画法(DP)ベースのマッチングアルゴリズムなどが提 案されている • 局所情報のみでのマッチングの代わりに、画像全体の情報も加味してマッチングをする • パッシブでステレオDepthを求めるアルゴリズムではよく用いられる
  46. 他に提案されているSINGLE-SHOTのパターン (1) • binary grids and zone plate patterns [Will

    and Pennington 1972] • 1D color De Bruijn codes [Zhang et al. 2002; Yamazaki et al. 2011] → 図(a) • sparse set of 1D stripes with random cuts [Maruyama and Abe 1993] • multiple sets of 1D stripes for all-round 3D scanning [Furukawa et al. 2010] • sparse 2D grid of lines [Salvi et al. 1998; Proesmans et al. 1996b; 1996a] • 2D color encoded grids [Boyer and Kak 1987; Sagawa et al. 2009] → 図(b) • grid patterns with spacings that follow a De Bruijn sequence [Ulusoy et al. 2009] • 2D pseudo-random binary code[Vuylsteke and Oosterlinck 1990] → 図(c) • 2D random dots (used in the first generation Microsoft Kinect depth sensing cameras)
  47. 他に提案されているSINGLE-SHOTのパターン (2) • 2次元の空間輝度コードを用いる手法はマッチングでも2次元のWindowを使う • シーンに応じて投影パターンを変える手法なども提案されていて、高いロバスト性を達成し ている • The stripe

    boundary codes • 1DStripeの多数のパターンが順次投影される • 輝度値でのマッチングの代わりに空間的な勾配で マッチングをとる • 多数のパターンを投影しているので厳密には Single-Shotではない • 「時空間両方」を使ってマッチングをしているので 動的なシーンにも強い
  48. 解像度と速度のトレードオフ • Single ShotのアプローチはシーンのDepthが局所的に滑らかであると仮定している • 結果として、求められたDepthも滑らかになり、細かいディテールは欠ける • Structured Lightで得られる時空間の解像度はトレードオフがある •

    Single Shotは低い空間解像度だが高速である • Multi Shotは高い空間解像度だが低速になりやすい • 各投影パターンがSingle Shotのコードパターンを持つようなハイブリットな手法が開発されている • 各パターンを集めたものはMulti Codingの機能を持つ • Decodingでは下記のように、領域に従い方法を変化させることで、動被写体に対応しながら、 静止部ではディテールが復元される • 動被写体部:Single Shot Decoding • 静止部:Multi Shot Decoding
  49. STRUCTURED LIGHTを用いたSTEREO • 今までは空間的にコード化された光源と1つのカメラを使用して、カメラの光線とマッチングする投影線/面を 求めることでDepthを復元してきた • Stereo with structured light(SwSL)というコード用光源と2つのカメラを使用する方法がある

    • 「Patterned Stereo(パターンドステレオ)」などとも呼ばれる • DepthはPassive Stereoと同じくカメラ同士のPixel間の三角測量で求める • Passive StereoはシーンにテクスチャがなければDepthが求まらない • SwSLはパターンを投影することで解決する • パターンはテクスチャとして振る舞うためである • 単一カメラのSLと比べてSwSLが良い点 • 光源をキャリブレートしなくて良いのでHW実装が楽 • 投影パターンの正確な構造を知る必要がない • 高解像度のDepthを得やすい(カメラの解像度に準じるため)
  50. SINGLE-SHOT STEREO Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning Stripe

    Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  51. SINGLE-SHOT STEREO – 投影パターン • SwSLにおいてマッチング推定がうまくいくかは近傍の空間的なテクスチャを各画素が保持しているか次第 • テクスチャは投影パターンから得られ、パターンは局所的に独自性を持っていなければならない • De

    Bruijinシーケンスは局所的なサブパターンが独自性を持っていることを補償しており、SwSLでも使用 可能 • 当然他のパターンも使われる(企業などは知財リスク回避のために独自パターンを使うことが多い) • a pattern with color stripes [Chen et al. 1997] • random dots texture [Nishihara 1984] • random frequency modulated sinusoidal pattern [Kang et al. 1995] • 2D binary patterns that are resistant to noise and camera defocus blur [Konolige 2010]
  52. 商用製品の投影パターン Microsoft Kinect v1 Google Tango v1 Intel RealSense Single

    Shot Coding方式 Binary Coding方式 random dot random dot binary stripe binary Coding RealSenseはBinary CodingとSingle Shot Coding方式の Hybrid構成を採用している?
  53. MULTI-SHOT STEREO Depth fps@ 120fpsカメラ ロバスト性 (ノイズ耐性) Point Scanning Stripe

    Scanning Binary Coding K-Ary Coding Intensity Ratio Phase Shifting Single-Shot Stereo Multi-Shot Stereo 各Pixelが周囲と同一表面上にあるという 仮定を立てて解いている =急進なDepth変化に弱い High Freq Phase Shifting Sawtooth Coding 11 1280 921600 6 4 3 2 1 High SNR Phase Shifting 10.9 0.1 0.0001 20 30 40 60 120 必要フレーム枚数 2眼カメラ RealSense(時間方向) Single-Shot Coding Kinect v1 Google Tango v1 RealSense(空間方向)
  54. MULTI-SHOT STEREO (1) • Multi-ShotのSwSLでは、プロジェクターは多数のパターンを順次照射し、各カメラが全て取得する • パターン例 • Single sweeping

    line stripe [Davis and Chen 2001; M. et al. 2008] • The binary Gray coded sequence [Scharstein and Szeliski 2003] → 図(a) • High frequency random binary patterns [Zhang et al. 2003] → 図(b) • Temporally varying laser speckle patterns [Schaffer et al. 2014]
  55. MULTI-SHOT STEREO (2) • マッチングについてはSingle-Shotとほぼ同じ • 違いは、空間的だけでなく時間的なWindow内で輝度を比較するところ • Iは空間・時間方向のWindow •

    Windowサイズと形状はシーン中の物体の動きによって決定される • 動きが小さい場合はWindowは空間的には小さく、時間的に長いものが使われる • 動きが大きい場合は反対
  56. MULTI-SHOT STEREO – 関連研究 • Multi-Shot Stereoは多眼システムと組み合わされて、工芸品等の高精度な測定に使 われている • Active光源はマッチングをより信頼できるものにするために使われ、Passiveでは制御でき

    ない自然光があるシーンでも測定できる • 例えば、水中は光が反射し揺れ動き、時間的に光の当たり方が激しく変化する • これを利用した水中でのDepth推定方法も研究されている
  57. DEPTH FROM ILLUMINATION DEFOCUS (1) • Depth from illumination defocus(DfID)という手法で「Missing

    parts problem」を回避できる • カメラとプロジェクターは垂直に、ビームスプリッター(入射光の半分を反射し、残りを透過するハーフミ ラー)を45°の角度で配置する • カメラとプロジェクタの投影面を仮想的に一致させることができる • Depthはプロジェクターのデフォーカスを利用して計算する • 大きなアパーチャのプロジェクターは被写界深度が浅くなり、投影パターンは焦点面のみで完全にピントが 合う • 焦点面以外ではパターンはデフォーカスされブラーがかかる • デフォーカス量がScene Pointと焦点面間の距離に比例する
  58. DEPTH FROM ILLUMINATION DEFOCUS (2) • 円状のアパーチャならば画像中で円状のパッチになる • 円状のパッチは投影点のブラーがかかったものであり、「Blur Circle」とも呼ばれる

    • ピンホールアパーチャだった場合、 Blur Circleの直径は以下で示される • r:プロジェクターの半径 • u:プロジェクターレンズからScene Pointまでの距離 • ufoc:プロジェクターレンズから焦点面までの距離 • 𝑓𝑓𝑓𝑓 = 𝑓𝑓𝑓𝑓 − :Scene Pointから焦点面までの距離とすると、Bは𝑓𝑓𝑓𝑓 に対する単調増加関数 となる • Blur Circleのサイズを推定することでDepthを得る
  59. DEPTH FROM ILLUMINATION DEFOCUS - 不定性解消 • 焦点面より後ろ、前(等距離)にあるScene Pointをそれぞれ考える •

    ブラーサークルは同じサイズになるので不定性が生まれる • 焦点面を極端に近くするか遠くすれば不確定性は避けられるがDepth解像度は減る • 非対称なアパーチャを使用することで不定性を解消できる • たとえばT形のアパーチャを使用すると、焦点面の後ろでは逆さまにブラーが写るのに対して、焦点面の前 ではブラーが直立する • 結果、Depth解像度を2倍にすることができる
  60. DEPTH FROM ILLUMINATION DEFOCUS – DFD • PassiveなDepth From Defocus(DfD)に対する利点

    • Passive Stereoと同じく、PassiveなDfDはテクスチャが無いシーンには対応ができな かった • DfIDでは空間的にコード化された照明とカメラのデフォーカスを使いDepthを推定する ため、テクスチャがないシーンにも対応できる • これはPassive Stereoでの補助光としてActive光を使うMulti Shot Stereoと同等 である
  61. MULTI-SHOT DFID (1) • DfIDは1つの画像のみ取得する • 各投影パターンは画像中のブラーサークルが被らないようにある程度離しておかなければならない • 結果、得られるDepthもスパース(低解像度)になる •

    Multi-Shot DfID • 多数の画像で投影し取得することでPixel毎にブラーサイズを推定 • バイナリパターンを投影する(例えばStripe) • 1シーンにつき1画素水平方向にシフトさせる • バイナリなので時間的なプロファイルは四角い波になる • 焦点面から離れると輝度がデフォーカスカーネルの 畳み込みになるので、ブラーがかかったようになる
  62. MULTI-SHOT DFID (2) • 輝度プロファイルLs(t)は、照射される輝度P(t)と時間的なデフォーカスカーネルBs(t)の 畳み込みとなる • 空間的なデフォーカスブラーは時間的なブラーとなって現れる • Bs(t)の幅はScene

    Pointから焦点面への距離に比例 • 時間的な周波数空間でLs(t)を解析することでDepthを推定する • 大体20-25枚の画像が必要 • Single-Shotと比べて高精度なdepthが推定できるのは良い
  63. MULTI-SHOT DFID (3) • カメラとプロジェクターの投影面が同じでもScene Pointの3次元位置は決定できる • 物体の360°3Dスキャンの需要は高い • 回転するターンテーブル上に物体を置き、順次スキャンすることでキャプチャできる

    • ここのスキャンではIterated Closest Point(ICP)等のレジストレーションアルゴリズムを 使う事で互いにスティッチが可能 • ただしリアルタイム可で困難 • リアルタイムをやりたいのだったら、いくつもの同期させたプロジェクターとカメラを使って一 気に撮るか、ミラーで工夫して一気に撮るか、をすればできる
  64. 各手法の比較 必要画像数 輝度の階調 画素毎の推定 連続的なCoding オクルージョン対応 Point Scanning O(MN) 2

    〇 〇 × Stripe Scanning O(N) 2 〇 〇 × Binary Coding O(log2N) 2 〇 × × K-ary Coding O(logkN) ≧2 〇 × × Intensity Ratio ≧2 ≧2 〇 〇 × Phase Shifting ≧3 ≧2 〇 〇 × Single Shot Coding 1 2 or それ以上 × × × SwSL 1 2 or それ以上 × × × Multi Shot SwSL ≧2 2 or それ以上 〇 × × DfID 1 2 × - 〇 Multi Shot DfID ≧3 2 〇 - 〇
  65. 必要画像数 • 速度は必要とされる画像数に比例する • Point Scanningは精度は高いが遅い • Binary、K-ary、 Intensity ratio、Phase

    Shiftingは比較的少ない画像で可能 • これらの手法で高速な取得はやれないことはないが、非常に速い動きがあるシーンにはまだこれらでも不十分 • Single Shotは動的なシーンを扱え、HW実装が楽 必要画像数 輝度の階調 画素毎の推定 連続的なCoding オクルージョン対応 Point Scanning O(MN) 2 〇 〇 × Stripe Scanning O(N) 2 〇 〇 × Binary Coding O(log2N) 2 〇 × × K-ary Coding O(logkN) ≧2 〇 × × Intensity Ratio ≧2 ≧2 〇 〇 × Phase Shifting ≧3 ≧2 〇 〇 × Single Shot Coding 1 2 or それ以上 × × × SwSL 1 2 or それ以上 × × × Multi Shot SwSL ≧2 2 or それ以上 〇 × × DfID 1 2 × - 〇 Multi Shot DfID ≧3 2 〇 - 〇
  66. 輝度の階調 • プロジェクターとカメラの輝度レベルをキャリブレートする必要があるかを決定する • バイナリパターンの場合はキャリブレーションは必要ない 必要画像数 輝度の階調 画素毎の推定 連続的なCoding オクルージョン対応

    Point Scanning O(MN) 2 〇 〇 × Stripe Scanning O(N) 2 〇 〇 × Binary Coding O(log2N) 2 〇 × × K-ary Coding O(logkN) ≧2 〇 × × Intensity Ratio ≧2 ≧2 〇 〇 × Phase Shifting ≧3 ≧2 〇 〇 × Single Shot Coding 1 2 or それ以上 × × × SwSL 1 2 or それ以上 × × × Multi Shot SwSL ≧2 2 or それ以上 〇 × × DfID 1 2 × - 〇 Multi Shot DfID ≧3 2 〇 - 〇
  67. 画素毎の推定が可能か • Single Shotでは画素周りの空間的なマッチングをする • これらの手法はwindow内が同じDepthと反射率を持っていることを暗黙の内に仮定している • 高周波のテクスチャやDepth変化が強いシーンではこの仮定が成り立たないことがあり、ボケた推定値になりがち • Multi

    Shotは各画素で独立してDepthを推定する • 時間的な輝度プロファイルのみを使う事で、マッチングする画素を計算しDecodeする • 空間的な仮定を置いていないので任意のテクスチャやDepthを持つシーンを扱うことができる 必要画像数 輝度の階調 画素毎の推定 連続的なCoding オクルージョン対応 Point Scanning O(MN) 2 〇 〇 × Stripe Scanning O(N) 2 〇 〇 × Binary Coding O(log2N) 2 〇 × × K-ary Coding O(logkN) ≧2 〇 × × Intensity Ratio ≧2 ≧2 〇 〇 × Phase Shifting ≧3 ≧2 〇 〇 × Single Shot Coding 1 2 or それ以上 × × × SwSL 1 2 or それ以上 × × × Multi Shot SwSL ≧2 2 or それ以上 〇 × × DfID 1 2 × - 〇 Multi Shot DfID ≧3 2 〇 - 〇
  68. 連続的なCODINGか • Depth解像度を決定する • Binary Coding/K-ary Codingは光源が不連続なLight Planeを照射しなければならない • 得られるDepth解像度を制限する

    • Intensity RatioやPhase Shiftingは連続的なLight Planeを照射する光源と相性が良い • 高いDepth解像度を持つ 必要画像数 輝度の階調 画素毎の推定 連続的なCoding オクルージョン対応 Point Scanning O(MN) 2 〇 〇 × Stripe Scanning O(N) 2 〇 〇 × Binary Coding O(log2N) 2 〇 × × K-ary Coding O(logkN) ≧2 〇 × × Intensity Ratio ≧2 ≧2 〇 〇 × Phase Shifting ≧3 ≧2 〇 〇 × Single Shot Coding 1 2 or それ以上 × × × SwSL 1 2 or それ以上 × × × Multi Shot SwSL ≧2 2 or それ以上 〇 × × DfID 1 2 × - 〇 Multi Shot DfID ≧3 2 〇 - 〇
  69. オクジュージョンへの対応 • オクルージョンを取り扱えるか • Defocusベースの手法はカメラとプロジェクターが同一位置にあるとみなせるのでオクルージョンがなくなる 必要画像数 輝度の階調 画素毎の推定 連続的なCoding オクルージョン対応

    Point Scanning O(MN) 2 〇 〇 × Stripe Scanning O(N) 2 〇 〇 × Binary Coding O(log2N) 2 〇 × × K-ary Coding O(logkN) ≧2 〇 × × Intensity Ratio ≧2 ≧2 〇 〇 × Phase Shifting ≧3 ≧2 〇 〇 × Single Shot Coding 1 2 or それ以上 × × × SwSL 1 2 or それ以上 × × × Multi Shot SwSL ≧2 2 or それ以上 〇 × × DfID 1 2 × - 〇 Multi Shot DfID ≧3 2 〇 - 〇
  70. 参考文献 Gupta, M., Nakhate, N. Geometric Perspective on Structured Light

    Coding, ECCV, 2018 Gupta, M., Agrawal, A., Veeraraghavan, A., and Narasimhan, S. G. 2013. A practical approach to 3d scanning in the presence of interreflections, subsurface scattering and defocus. International Journal of Computer Vision 102, 1-3, 33–55. Gupta, M. and Nayar, S. K. 2012. Micro phase shifting. In Proc. IEEE CVPR. Gupta, M., Nayar, S. K., Hullin, M., and Martin, J. 2015. Phasor Imaging: A Generalization of Correlation Based Time-of-Flight Imaging. ACM Transactions on Graphics. Gushov, V. I. and Solodkin, Y. N. 1991. Automatic processing of fringe patterns in integer interferometers. Optics and Lasers in Engineering 14, 4-5. Hartley, R. and Gupta, R. 1993. Computing matched-epipolar projections. In IEEE CVPR. 549–555. Matsuda, N., Cossairt, O., and Gupta, M. 2015. MC3D: Motion Contrast 3D Scanning. In IEEE International Conference on Computational Photography.