OpenGVの用語

OpenGV公式ドキュメントのHow to useを読んでるんだけど、出てくる用語が独特なのと、図はあるけど、抽象的過ぎてとても分かりづらいので苦戦している。



もう思いっきりこの記事に触発されたよね。
https://code.facebook.com/posts/697469023742261/360-video-stabilization-a-new-algorithm-for-smoother-360-video-viewing/


スポンサーリンク


とりあえず、Vocabularyのところだけでも理解しておきたいので以下翻訳メモ。

How to use

このページでは、OpenGV使い方、インターフェイスやサンプルの解説も合わせて紹介します。より詳しい情報は”OpenGV: A unified and generalized approach to real-time calibrated geometric vision“に記載されています。
しかし、OpenGVの機能やドキュメントの内容を十分理解していただくためには、最初にここで使われる用語の意味を明確に定義しておく必要があります。


スポンサーリンク

Vocabulary(用語)

Bearing vector:
bearing vectorは、camera reference frame(カメラの投影面)から空間上の3D点へ向かうベクトルを正規化した3次元の単位ベクトルと定義します。
このベクトルは2自由度で、この自由度はカメラ投影面における方位角と仰角にあたります。bearing vectorは2自由度しか無いため、ここではほとんど2次元の情報として扱っています。通常、bearing vectorはカメラ投影面上で表されます。

Landmark:
ここでのlandmarkとは、3D空間上の点を表します。(通常、landmarkはworld reference frameと呼ばれる固定されたフレーム上で表されます)

Camera:
OpenGVはキャリブレーション済みの状態を想定しており、Landmarkの位置座標は常にカメラ投影面上のbearing vectorの形で与えられます。したがって、cameraはカメラ投影面と、原点から各landmarkへのbearing vectorのセットを表します。
以下の図は、camera cとbearing vector(赤)を表しています。bearing vectorは全て、cameraを中心とした単位球面上になります。

central

Viewpoint:
コードのドキュメントでは、とても頻繁にcameraの代わりにviewpointについて語っていることに気づくかもしれません。OpenGVの利点の1つは、centralとnon-centralなケースの両方を透過的に扱えることです。

viewpointとは、cameraを一般化した概念で、viewpointには任意の数のcameraと、それぞれのcameraが持つlandmarkの座標値(例えばbearing vector)を含むことができます。

viewpointの具体例としては、撮影画像と関連する測定値(完全なキャリブレーションの元で測定)のセット、同期したカメラによる剛性のマルチカメラリグ、静止画なら一連の(複数)のスナップショットと言えます。(つまりviewpoint)

各cameraはそれぞれが独自にviewpoint frameへのtransformationを持っています。centralの場合、viewpointには単純に1つのカメラと唯一のtransformationが含まれています。

最も一般化したケースで言うと、cameraを一般化するとviewpointで記述することができます。すると、それぞれのbearing vectorも、自身のcameraと、関連するtransformationを持つことになります。したがって、このようにcameraを一般化すると、網羅的なマルチカメラシステムとして表すことができます。

以下の画像は、viewpoint vp(青)と、それぞれ独自のbearing vectorを含む3つのcamera c, c’, c”を示しています。

noncentral

Pose:
world reference frameと呼ばれる固定のreference frame上のPose、あるいは別のviewpointに対する相対的なPoseのいずれかでviewpointの位置と向きを表せます。

Absolute Pose:
absolute poseは、world reference frame上でのviewpointのposeを表します。

Relative Pose:
relative poseは、別のviewpointに対する相対的なposeとしてviewpointのposeを表します。

Correspondence:
correspondenceは、別々のviewpoint上で同一のlandmarkを指しているbearing vectorのペア(2D-2D correspondence)、bearing vectorとそれが指す3次元座標のペア(2D-3D correspondence)、または、異なるframe間で同一のlandmarkを表している座標のペア(3D-3D correspondence)の対応関係を記述します。

OpenGVでbearing vectorと呼ばれるものは、カメラの原点から投影面を通過して3次元空間上の点(landmark)へ向かう3次元方向ベクトルのことだというのは理解できた。レイトレーシングで言うところのrayみたいなものですね。

viewpointの件は未だ十分理解にできてないな。centralとnon-centralってのもまだピンと来ない。
まずreference frameって言葉の意味を教えてほしいところ。ここで出てくるframeってのは「空間」とか「座標系」みたいな意味だろうか。


スポンサーリンク

関連記事

ArUco:OpenCVベースのコンパクトなARライブラリ
JavaScriptとかWebGLとかCanvasとか
WordPressの表示を高速化する
池袋パルコで3Dのバーチャルフィッティング『ウェアラブル クロージング バイ アーバンリサーチ』
Unity ARKitプラグインサンプルのドキュメントを読む
読みやすくて高速なディープラーニングのフレームワーク『Caffe』
HerokuでMEAN stack
Raspberry PiでIoTごっこ
Point Cloud Consortiumのセミナー「3D点群の未来」に行ってきたよ
Raspberry Pi 2を買いました
Mitsuba 2:オープンソースの物理ベースレンダラ
Mitsuba 3:オープンソースの研究向けレンダラ
iPhone x ロボットハッカソン~RomoのiPhone用SDKで目覚ましアプリを作る~
スクレイピング
Mechanizeで要認証Webサイトをスクレイピング
OpenCV 3.3.0 contribのsfmモジュールのサンプルを動かしてみる
オープンソースのプリント基板設計ツール『KiCad』
機械学習に役立つPythonライブラリ一覧
OpenCLに対応したオープンソースの物理ベースレンダラ『LuxRender(ルクスレンダー)』
Managing Software Requirements: A Unified Approach
AndroidもopenGLも初心者さ (でもJavaは知ってるよ)
iPhoneアプリ開発 Xcode 5のお作法
Multi-View Environment:複数画像から3次元形状を再構築するライブラリ
組み込み向けのWindows OS 『Windows Embedded』
OpenCVで平均顔を作るチュートリアル
Webサイトのワイヤーフレームが作成できるオンラインツール
C++ 標準テンプレートライブラリ (STL)
3Dスキャンに基づくプロシージャルフェイシャルアニメーション
Raspberry Pi
UnityでTweenアニメーションを実装できる3種類の無料Asset
Unity ARKitプラグインサンプルのチュートリアルを読む
Pythonの自然言語処理ライブラリ『NLTK(Natural Language Toolkit)』
Mayaのシェーディングノードの区分
SegNet:ディープラーニングによるSemantic Segmentation手法
動的なメモリの扱い
PeopleSansPeople:機械学習用の人物データをUnityで生成する
iPhone・iPod touchで動作する知育ロボット『ROMO』
Faceshiftで表情をキャプチャしてBlender上でMakeHumanのメッシュを動かすデモ
Kaolin:3Dディープラーニング用のPyTorchライブラリ
OpenCVで顔のモーフィングを実装する
Windows10でPyTorchをインストールしてVSCodeで使う
OpenMayaRender

コメント