OpenGVのライブラリ構成

引き続きOpenGV公式ドキュメントのHow to useを読んでいる。


OpenGVの用語
OpenGV公式ドキュメントのHow to useを読んでるんだけど、出てくる用語が独特なのと、図はあるけど、抽象的過ぎてとても分かりづらいので苦戦している。 もう思いっきりこの記事に触発されたよね。


前回は用語の解説まで読んだので、次はOrganization of the library(ライブラリの構成)とInterface(インターフェイス)の項目を訳してみる。


スポンサーリンク

ライブラリの構成

このライブラリは、名前空間、またはディレクトリ階層で扱えるように構造を最適化してあります(名前空間とディレクトリ階層が一致しています):

  • opengv:
    ライブラリ全体に渡って使用される型など、汎用的なものが含まれています。
  • opengv/math:
    主にルート探索や相対的な回転のアルゴリズムなどで使用される数学の関数群が含まれています。
  • opengv/absolute_pose:
    絶対的なposeに関するメソッドが含まれています。methods.hppは、メソッドの宣言を含むメインのヘッダーファイルです。また、アルゴリズムのインターフェイスとなるadapter群(次セクションで解説)もここにあります。サブフォルダモジュールには、内部メソッドの宣言が含まれています。
  • opengv/relative_pose:
    相対的なposeに関するメソッドが含まれています。methods.hppは、メソッドの宣言を含むメインのヘッダーファイルです。また、アルゴリズムのインターフェイスとなるadapter群(次セクションで解説)もここにあります。サブフォルダモジュールには、内部メソッドの宣言が含まれています。
  • opengv/point_cloud:
    点群のalignmentアルゴリズムのメソッドが含まれています。これまでと同様に、methods.hppにはメソッド宣言が含まれ、同フォルダにインターフェースとなるadapter群があります(後述)。
  • opengv/triangulation:
    三角測量のメソッドが含まれています。
  • opengv/sac:
    sample-consensusメソッド・問題の基底クラスが含まれています。RANSACアルゴリズムはここだけに実装されています。
  • opengv/sac_problems:
    基底クラスから継承したsample-consensus問題が含まれています。点群のalignment、centralとnon-central、絶対・相対的なpose推定のためのサンプル共通の問題が実装されています。

う、う~ん?Adapterパターンはデザインパターンの1つだよな。そっちの復習しないと理解できんな。(実装の知識が乏しい)

RANSAC(RANdom SAmple Consensus)って手法名があるってことは、”sample-consensus“で1つの用語なのかな?
“problems”を「問題」と訳すのがそもそも無理があるのかも。

インターフェイス

OpenGVの全てのメソッドが、引数としてadapterと呼ばれる変数を使用していることに気づくはずです。OpenGVは、Adapterパターンに基づいて設計されています。
OpenGVの”adapter”は、全てのgeometric visionメソッドのvisitorとして使われています。adapterは、landmark、bearing vector、pose、correspondenceなどを含み、異なったメソッドへの入力(あるいは、似た参照)として使用され、それぞれの要素へ共通のインターフェイスでアクセスできるようになります。adapterは統一されたインターフェイスの基底クラスを継承しています。そして、adapterには、bearing vector、camera-transformation、viewpoint-poseなどへアクセスするための関数を実装する必要があります。
OpenGVには以下3つのadapter基底クラスがあります:


スポンサーリンク
  • AbsoluteAdapterBase:
    絶対的なposeメソッドのための2D-3D correspondencesを保持するadapterの基底クラス
  • RelativeAdapterBase:
    相対的なposeメソッドのための2D-2D correspondencesを保持するadapterの基底クラス
  • PointCloudAdapterBase:
    点群のalignmentメソッドのための3D-3D correspondencesを保持するadapterの基底クラス

継承したadapterによって、ユーザー定義フォーマットのデータをOpenGVの型へ変換することができます。これにより、ライブラリは大きな柔軟性を提供しています。ユーザー定義のデータ・フォーマットに対応したadapterの組を実装するだけで、ライブラリの全ての機能にアクセスすることができます。
現在OpenGVには、単にOpenGVの型への(変換不要な)参照を保持するadapterに加え、Matlabインターフェイスで使用されるmexArrayへのadapterが含まれています。さらにadapterは、例えばOpenCVのカメラモデルを含む特徴点やmatch-typeのためのadapterなども想定しています。これにより、特徴点を都度正規化するか、それとも全てまとめて正規化するかを最初に選択できるようになり、sample-consensus問題を効率化できます。

補足
adapterの名前に”central”タグが含まれているものは、単一のcameraのためのadapterです。(つまり、唯一のtransformationを持つcameraを1つだけ保持したview-point)

adapterの名前に”noncentral”タグが含まれているものは、複数のcameraで構成されたview-pointを想定したものです。(例:マルチカメラシステムや一般化したcamera)

上記の基底クラスについてdoxygenのドキュメントをお読みください。adapterを適切に実装するためのオーバーロード関数について重要な情報が記載されています。

まだ解るようで解らない感じ。この分野の基本的な説明がもうちょっとほしい。

10月下旬に「3次元コンピュータビジョン計算ハンドブック」という書籍が出るようなのでちょっと期待している。

3次元コンピュータビジョン計算ハンドブック

内容紹介

OpenCVやWeb上のプログラムなど,コンピュータビジョンを行ううえでのツールは充実していますが,これらを改良したり,自分の問題のために書き換えるのは,一筋縄ではいきません.
本書では,コンピュータビジョン,とくに画像からの3次元解析の代表的な手法について,それらの計算手順(アルゴリズム)を詳細に解説することで,こうした問題を解決するヒントを提供します.

〈本書の特徴〉
・「計算手順」→「解説」という順序で解説
→理論の詳細を追わなくても学べる.

・アルゴリズムの適用例を示し,それぞれの精度と処理速度を評価
→高精度・高速な処理を行うために,アルゴリズムの何をどのように工夫すればよいかがわかる.

・この分野の第一人者である著者らが,各手法について,歴史的概観を交えて参考文献を紹介
→今後の学習の指針,分野の概観が得られる.

なお,実装を容易にするために,代表的な手順のサンプルコードと,行列・ベクトル演算ライブラリEigenの解説を森北出版のWeb サイトで公開しています.


スポンサーリンク

関連記事

第1回 3D勉強会@関東『SLAMチュートリアル大会』
Unityで画面タッチ・ジェスチャ入力を扱う無料Asset『TouchScript』
写真に3Dオブジェクトを違和感無く合成する『3DPhotoMagic』
Paul Debevec
UnityでTweenアニメーションを実装できる3種類の無料Asset
オープンソースの顔の動作解析ツールキット『OpenFace』
iOSで使えるJetpac社の物体認識SDK『DeepBelief』
WordPressの表示を高速化する
COLMAP:オープンソースのSfM・MVSツール
手を動かしながら学ぶデータマイニング
WordPress on Google App Engineを1週間運用してみて
Deep Learningとその他の機械学習手法の性能比較
Model View Controller
SegNet:ディープラーニングによるSemantic Segmentation手法
Unityの薄い本
Webスクレイピングの勉強会に行ってきた
UnityでShaderの入力パラメータとして行列を渡す
人間の顔をそっくりそのままCGで復元する『Digital Emily Project』
オープンソースの取引プラットフォーム
PSPNet (Pyramid Scene Parsing Network):ディープラーニングによ...
Web経由でRaspberry PiのGPIOを操作したい
CGレンダラ研究開発のためのフレームワーク『Lightmetrica (ライトメトリカ)』
OpenCV 3.3.0-RCでsfmモジュールをビルド
オープンソースのIT資産・ライセンス管理システム『Snipe-IT』
OpenCVで顔のモーフィングを実装する
MFnMeshクラスのsplit関数
OpenCV 3.1とopencv_contribモジュールをVisual Studio 2015で...
海外ドラマのChromaKey
FCN (Fully Convolutional Network):ディープラーニングによるSema...
Unity MonoBehaviourクラスのオーバーライド関数が呼び出される順番
チャットツール用bot開発フレームワーク『Hubot』
libigl:軽量なジオメトリ処理ライブラリ
BlenderでPhotogrammetryできるアドオン
Faceshiftで表情をキャプチャしてBlender上でMakeHumanのメッシュを動かすデモ
動的なメモリの扱い
オープンソースの顔認識フレームワーク『OpenBR』
なんかすごいサイト
OpenCVの三角測量関数『cv::triangulatepoints』
顔追跡による擬似3D表示『Dynamic Perspective』
MB-Lab:Blenderの人体モデリングアドオン
Mitsuba 3:オープンソースの研究向けレンダラ
Google XML Sitemap Generatorプラグインを3.4.1へダウングレード

コメント