【連載】

機械の目が見たセカイ -コンピュータビジョンがつくるミライ

8 カメラを用いた3次元計測(2) - ステレオカメラ

樋口未来  [2016/02/09]

8/15

「第6回 カメラを用いた3次元計測(1)」の続きです。今回はSubaruのEyeSightで採用されているステレオカメラ(パッシブステレオ法)にフォーカスを当て、OpenCVに実装されている一般的な手法について説明します。

ステレオカメラによる3次元計測は、下記の要素技術に大別できます。

  • カメラキャリブレーション
  • レクティフィケーション
  • 対応点探索(ステレオマッチング)

カメラキャリブレーションとレクティフィケーション

ステレオカメラでは、図1に示すとおり視点の異なる2台(または3台以上)を用いて、三角測量の原理で距離を求めます。たとえば、実空間中の3次元点P1CameraLCameraRで撮影すると、CameraLで撮像された点の座標pLと、CameraRで撮像された点の座標pRにズレが生じます。この見え方の差(視差)から距離を計測する手法です。

視差を求めるためには、CameraLの画像中の点に対応する点をCameraRの画像中から見つけ出す必要があります(対応点探索、ステレオマッチング)。そして、視差から3次元座標を計算するためには、CameraLCameraRの内部パラメータ、歪係数、さらにカメラAとカメラB間の外部パラメータが必要となります。これらのパラメータを求める処理がステレオカメラに必要なカメラキャリブレーションです。

これらのパラメータが求まっていれば、エピポーラ幾何と呼ばれる幾何学的な拘束条件により、対応点探索を効率的に行うことができます。CameraLCameraRを結ぶ直線と画像平面との交点はエピポール(eL , eR)と呼ばれています。また、3次元点P1CameraLの位置、CameraRの位置は同一平面上に存在し、その平面と画像平面が交わる直線pR-eRがエピポーラ線です。点P1, P2,……,P5 は、CameraLの画像では同一の点pLに投影されます。一方、点pLに対応するCameraRの画像上の点pRはエピポーラ線上に必ず存在することになります(図1)。つまり、対応点探索はエピポーラ線上のみを処理すれば良いわけです。

図1 エピポーラ幾何

エピポーラ幾何の拘束条件を用いることで、対応点探索はエピポーラ線上のみで良いのですが、エピポーラ線は多くの場合、画像上で斜めになってしまい、メモリアクセスやエピポーラ線の計算の効率が良くありません。そこで、カメラを平行に設置した平行ステレオ視が一般的に用いられます。カメラキャリブレーションにより求めた内部パラメータ、外部パラメータ、歪係数を用いることで画像を平行化できます(図2)。平行化処理は、レクティフィケーションと呼ばれています。レクティフィケーション後の画像では、エピポーラ線が画像の横軸と平行になるため、高速に対応点探索を行えるわけです。

図2 画像の平行化(レクティフィケーション)

対応点探索

対応点探索には、小領域毎に視差を求めるテンプレートマッチングによる方法、画像全体で最適な解を求めるグローバルマッチングによる方法、注目画素の周辺のみで最適な解を求めるセミグローバルマッチングによる方法があります。リアルタイム性を重視するのであれば、テンプレートマッチングによる方法が良いでしょう。リアルタイム性を重視しないのであればセミグローバルマッチングやグローバルマッチングを用いることもできます。

コーディング

OpenCVでは、“opencv/sources/samples/cpp/”にサンプルコード
“stereo_calib.cpp”と“stereo_match.cpp”が用意されていますので参考にしてみてください。ステレオカメラのカメラキャリブレーションでは、2台のカメラでキャリブレーションパターンを同時に撮影し、その画像セットをcv::stereoCalibrate(魚眼レンズの場合はcv::fisheye::stereoCalibrate、全方位カメラの場合はcv::omnidir::stereoCalibrate)の入力として、2台のカメラの内部パラメータ、歪係数、カメラ間の外部パラメータを求めることができます。そして、画像を平行化するレクティフィケーション処理は、cv::StereoRectify
(魚眼レンズの場合はcv::fisheye::StereoRectify、全方位カメラの場合はcv::omnidir::StereoRectify)で平行化するためのパラメータを求め、cv::initUndistortRectifyMap(魚眼レンズの場合はcv::fisheye::initUndistortRectifyMap、全方位カメラの場合はcv::omnidir::initUndistortRectifyMap)を用いて画素毎の変換テーブルを作成し、cv::remapで画像を補正します。

図3は、ステレオカメラの処理フローと処理結果です。Disparity Map(視差マップ)は、近くを白、遠くを黒として可視化したものです(テンプレートマッチングによる手法で求めた結果)。レクティフィケーションにより、2台のカメラにより撮像した画像を平行化できていることがおわかりいただけるかと思います。

図3 ステレオカメラの処理フローと処理結果

著者プロフィール

樋口未来(ひぐち・みらい)
日立製作所 日立研究所に入社後、自動車向けステレオカメラ、監視カメラの研究開発に従事。2011年から1年間、米国カーネギーメロン大学にて客員研究員としてカメラキャリブレーション技術の研究に携わる。

現在は、日立製作所を退職し、東京大学大学院博士課程に在学中。一人称視点映像(First-person vision, Egocentric vision)の解析に関する研究を行っている。具体的には、頭部に装着したカメラで撮影した一人称視点映像を用いて、人と人のインタラクション時の非言語コミュニケーション(うなずき等)を観測し、機械学習の枠組みでカメラ装着者がどのような人物かを推定する技術の研究に取り組んでいる。また、大学院での研究の傍ら、フリーランスとしてコンピュータビジョン技術の研究開発に従事している。

専門:コンピュータビジョン、機械学習

8/15

インデックス

連載目次
第15回 コンピュータビジョン分野における機械学習(3) - 識別器
第14回 コンピュータビジョン分野における機械学習(2) - 顔検出・人検出
第13回 コンピュータビジョン分野における機械学習(1) - 導入編
第12回 コンピュータビジョン分野の市場分析(1) - 自動車編
第11回 コンピュータビジョン分野で活躍する企業・フリーランサー インタビュー(2)
第10回 カメラを用いた3次元計測(4) - Structure from Motion
第9回 カメラを用いた3次元計測(3) - サブピクセル推定
第8回 カメラを用いた3次元計測(2) - ステレオカメラ
第7回 コンピュータビジョン分野で活躍する企業・フリーランサー インタビュー(1)
第6回 カメラを用いた3次元計測(1)
第5回 意外と知らないカメラキャリブレーション
第4回 ハードウェアの基礎知識
第3回 コンピュータビジョンの要素技術と応用範囲(後編)
第2回 コンピュータビジョンの要素技術と応用範囲(前編)
第1回 普及期に入ったコンピュータビジョン

もっと見る



IT製品 "比較/検討" 情報

特別企画 PR

人気記事

一覧

イチオシ記事

新着記事

[本郷奏多]実写版「ハガレン」へ気合 エンヴィー役でビジュアル「近づけるんじゃ」
[14:08 5/29] エンタメ
東国原英夫、上西議員を猛批判「税金の無駄遣い」「即刻クビ」
[14:03 5/29] エンタメ
東京と千葉の境、江戸川に浮かぶ謎の島へドライブに行ったら…
[14:00 5/29] エンタメ
明石家さんまの"落ち込まない思考法"「己を過信せず、今日が己の頂点」
[13:58 5/29] エンタメ
日本最大級のコスプレ専用スタジオに潜入『マツコ会議』
[13:40 5/29] エンタメ

特別企画 PR