GPUによるステレオ視 アルゴリズムの高速化 独立行政法人産業技術総合研究所 デジタルヒューマン研究センター 研究員 山崎 俊太郎 shun-yamazaki@aist.go.jp http://staff.aist.go.jp/shun-yamazaki/ GPUとは Graphics Processing Unit 「3Dグラフィックスアクセラレータ」から「GPU」へ 演算性能の向上 3次元座標変換(4x4行列演算) ラスター処理(サンプリング・フラグメント処理) SIMD型計算機 処理の柔軟性の向上 プログラム可能 IEEE 32bit 浮動小数点演算 CPU vs GPU 後藤弘茂氏のWebサイトより http://pc.watch.impress.co.jp/docs/2004/0421/kaigai085.htm CPU vs GPU Pentium4 (Prescott) 3.4GHz∼ 総トランジスタ数=125M ロジック用=68M GeForce6800 (NV40) 400MHz∼ 総トランジスタ数=222M GPU = SIMDプロセッサ 後藤弘茂氏のWebサイトより http://pc.watch.impress.co.jp/docs/2004/0421/kaigai085.htm GPUを用いた汎用計算 GPUを演算器として利用 CPUと比べて各種の制限がある 座標変換行列・テクスチャとしてデータを入力 フレームバッファの内容を主記憶に読み出す 動的な分岐・反復の計算コストが高い メモリアクセス・レジスタ数・命令長に制限がある 汎用計算アルゴリズムの実装 線型代数演算 物理シミュレーション・衝突判定 ビジョンアルゴリズム 参考サイト: GPGPU(http://www.gpgpu.org/) ステレオ視による立体復元 入力 同一物体を撮影した2つの画像 画像を計測したカメラの姿勢,レンズ歪み 出力 1つの画像の各画素に対する物体の深度 または画像間の対応点 アルゴリズム 1次元の領域探索 エピポーラ拘束 ステレオ視アルゴリズムの分類 大域最適化 高精度 計算量が多い・データ依存 オクルージョンの扱いなど高度な処理が可能 例) Scan-line DP, Graph Cut Minimization, など 局所最適化 精度は必ずしも良くない 計算量が少ない・計算速度を一定にできる 実時間アルゴリズムは画素相関を用いる方法が主流 ステレオ視の高速化 専用ハードウェアを利用する方法 CPU内臓のDSP演算機能を利用する方法 MMX,SSE,SSE2,SSE3など CPUの資源を食い尽くしてしまう 認識など他の処理を行う必要があるとき不都合 GPUを用いる方法 CPUの負荷は非常に小さい CPUで行うより高速! GPUを用いた実時間ステレオ法 今回は2眼ステレオを扱う 多視点への拡張は比較的容易 参考にした論文 R. Yang, M. Pollefeys, H. Yang, G. Welch, "A Unified Approach to Real-Time, Multi-Resolution, Multi-Baseline 2D View Synthesis and 3D Depth Estimation using Commodity Graphics Hardware", International Journal of Image and Graphics (to appear), 2004 J. Woetzel and R. Koch, "Real-time multi-stereo depth estimation on GPU with approximative discontinuity handling", 1st European Conference on Visual Media Production (CVMP), 2004 処理の流れ 1. 2. 3. 4. 5. 準備 レクティフィケーション 対応コストの計算 対応コストの集合化 対応点の決定 GPUの準備 1. 2画像をテクスチャTref,Tobjとして読み込む 2. 四角形ポリゴンを画像と同サイズで描画 描画先は別のテクスチャ ポリゴンにテクスチャを割り当てる 3. マルチテクスチャを利用 ポリゴンと画像がちょうど重なるようにテクスチャ座標を設定 レクティフィケーション カメラの主軸の平行化 対応点の探索範囲を画像の走査線方向と一致させる x軸(横軸)方向とする レンズ歪みの除去 GPUによるレクティフィケーション カメラの平行化=3x3行列変換(ホモグラフィ) 射影テクスチャマップを利用 Vertex Shaderでテクスチャ座標を前処理 レンズ歪みの除去 ポリゴンをグリッドに分割し変形 依存テクスチャマップを利用 1. 2. 3. 1つの画像読み込みのためにテクスチャを2つ準備 テクスチャ1から歪みを取得 それをテクスチャ座標としてテクスチャ2( Tref,Tobj )から画素を取得 平行化された画像の画素に対応するフラグメントを生成 対応コストの計算 Tref の座標(x,y)における画素に対し Tref から (x,y) の画素 tref を取得 Tobj から (x+d,y) の画素 tobj を取得 AD = | tref - tobj | を取得 (AD = Absolute Distance ) 以上を N 個の d に対して行う N disparity hypothesis N 個の対応コストを元に対応点を決定 GPUによる対応コストの計算 座標(x,y)におけるフラグメントに対し (d:視差) 以上をN種類の d に対して行う Tref から (x,y) の画素 tref を取得 Tobj から (x+d,y) の画素 tobj を取得 | tref - tobj | を取得 ポリゴンをN回描画する テクスチャに書き出す(ADテクスチャ) テクスチャのRGBAチャネルを使った高速化 4個の異なる d に対する AD を同時に評価 画像のRGB値に対する AD を同時に評価 対応コストの集合化 画素単位のADは信頼性が低い ノイズの影響 画像のサンプリングの影響 近傍画素の対応コストの和(SAD)を用いて処理を頑健化 領域窓を用いたコスト関数 窓サイズの決定が困難 オクルージョン領域で誤差が拡大 階層的な対応点探索 適応的な窓形状の変形 (SAD = Sum of AD) GPUを用いた階層的な探索 階層化 テクスチャのMIPMAP(4分木による多重解像度表現)を利用 ADテクスチャのMIPMAP = 階層的SADテクスチャ MIPMAPの生成は高速 領域窓の位置やサイズの自由度は小さい 2のべき乗の位置にある座標でのみ正確なSADが得られる その他の位置での値はSADテクスチャを線型補間 GPUを用いた適応的窓形状選択 窓形状の選択 1. 2. 3. 2. フラグメントごとにコストを計算し, ADテクスチャに書き出す テクスチャの双線型補間を用いて 4x4領域のコストの和を取得(4x4-SADテクスチャ) 隣接する4つの領域のうち 3. 4x4-SADが最小の2つを選択して中央に加える (適応的SADテクスチャ) 6種類の窓形状に対応 対応点の決定 領域窓内のSADが最小となる視差dを選択 GPUによる視差の選択 視差dをフラグメント色として描画 対応コストをフラグメントの「Z値」として描画 Zバッファ法を用いて最小のdを得る 計算結果の正当性の評価 交差テスト Tref,Tobjを入れ替えて視差を計算 対称にならない画素の対応は不定とする 画素 GPUによる交差テスト 視差 SADテクスチャをそれぞれ作成 テクスチャを右図のように比較 TrefのSAD TobjのSAD 実験結果 Pentium4 2.8GHz 512MB RAM Radeon9800 XT 256MB VRAM OpenGL + ARB extensions disparity estimation / sec CPU 80 M GPU 289 M その他のビジョンアルゴリズム Visual Hull Ming Li, Marcus Magnor, Hans-Peter Seidel, "Improved Hardware-Accelerated Visual Hull Rendering", VISION, MODELING, AND VISUALIZATION 2003 (VMV2003) Space Carving Ming Li, Marcus Magnor and Hans-Peter Seidel, "Hardware-Accelerated Rendering of Photo Hulls", EUROGRAPHICS 2004
© Copyright 2024 Paperzz