Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Structure from Motion
2018/09/20 arXivTimes勉強会
株式会社 ALBERT
山内隆太郎
Structure from Motion (SfM)とは
• 二枚(またはそれ以上)の画像から3次元情報を復元する技術
SfMの流れ
1. 特徴点の抽出およびマッチング(今回は省略)
2. カメラ姿勢の推定
3. 三角測量による3次元点の復元
4. カメラ位置と3次元点の位置の最適化(今回は省略)
カメラモデル
• 空間上の点から画像平面への投影をモデル化したもの
• 以下の式で書ける
𝜆
𝑢
𝑣
1
= 𝐾(𝑅
𝑋
𝑌
𝑍
+ 𝐭)
ただし
𝑢
𝑣
は画像座標系、
𝑋
𝑌
𝑍
はワールド座標系上の点
 𝐾はカメラ内部行列(camera intrinsic matrix)
 𝑅, 𝐭 はそれぞれ回転と平行移動を表す(𝑅, 𝐭 合わせてカメラ外部行列と呼ぶことも)
※本来、上の式は同次座標を使って表現するのが普通ですが、慣れるまでは
分かりづらいので、今回は素朴に書いてます
カメラモデル ピンホールカメラモデル
• ピンホールカメラでは、点を出発した光はピンホールを通って画像平面
(スクリーン、フィルムなど)に当たる
• 一般のカメラはレンズがあるので実態はもっと複雑だが、カメラ内部行列
𝐾(後述)にレンズの性質を押し込むことで、ピンホールカメラと同じよ
うに扱うことができる
画像平面
仮想画像平面
3次元オブジェクト
焦点距離
𝑓
カメラモデル 登場する座標系の紹介
• カメラモデルではワールド座標系、カメラ座標系、画像座標系
という3つの座標系を考える。
• ワールド座標系:基準となる座標系。3次元
• カメラ座標系 :カメラの焦点を原点とする座標系。Z軸方向がカメラ
の見ている向き。3次元
• 画像座標系 :画像平面上の座標系。単位はピクセルなど。2次元
• カメラモデルでは、ワールド座標系上の点→カメラ座標系上の
点→画像座標系上の点という流れでカメラをモデル化する
カメラモデル 各座標系の関係
z
x
y
Y
X
Z
ワールド座標系
カメラ座標系
空間上の点
画像平面上の点
画像座標系
正規化画像座標系
カメラモデル ワールド座標系→カメラ座標系
• ワールド座標系からカメラ座標系への変換は次のように書ける
𝑥
𝑦
𝑧 𝐶
= 𝑅
𝑋
𝑌
𝑍 𝑊
+ 𝐭
 𝑅 =
𝑟11 ⋯ 𝑟13
⋮ ⋱ ⋮
𝑟31 ⋯ 𝑟33
は3次元の回転行列、𝐭 =
𝑡 𝑥
𝑡 𝑦
𝑡 𝑧
は平行移動を表すベクトル
(ワールド座標系上の点
𝑋
𝑌
𝑍
はカメラ座標系では
𝑥
𝑦
𝑧
と表される 、という意味)
カメラモデル カメラ座標系→画像座標系
• 画像平面 𝑧 = 1 への投影は簡単
• 投影先を正規化画像座標系という
𝑥
𝑦
𝑧
→
𝑥
𝑧
𝑦
𝑧
1
• しかしコンピュータ上では画像はピクセルの配列として扱われ
るので、投影先はピクセル座標で表されているとありがたい
• ここで出てくるのがカメラ内部行列 𝐾
𝑥
𝑦
𝑧
𝑧 = 1
z
x-y
カメラモデル カメラ内部行列
• カメラ内部行列𝐾を
𝐾 =
𝑓𝑥 0 𝑐 𝑥
0 𝑓𝑦 𝑐 𝑦
0 0 1
とすると、カメラ座標上の点から画像座標系への投影は
𝜆
𝑢
𝑣
1
= 𝐾
𝑥
𝑦
𝑧
と書ける。
• 𝐾 を推定することをカメラキャリブレーションという
 ただし 𝑓𝑥, 𝑓𝑦 は焦点距離、𝑐 𝑥, 𝑐 𝑦 は画像中心の座標。どちらもピクセル単位である点に注意
 ここでは 𝜆 = 𝑧 である
カメラモデル
• 以上をまとめると、
𝜆
𝑢
𝑣
1
= 𝐾(𝑅
𝑋
𝑌
𝑍
+ 𝐭)
となる
ちなみに同次座標で表現すると
𝜆
𝑢
𝑣
1
= 𝐾 𝑅 𝐭 ]
𝑋
𝑌
𝑍
1
= 𝑃
𝑋
𝑌
𝑍
1
※ 𝑃 を射影行列と呼ぶ
エピポーラ幾何
𝑥1 𝑥2
𝑋
𝑋?
𝑋?
𝑂1 𝑂2
エピポール 𝑒1
エピポール 𝑒2
エピポーラ線 𝑙2
• エピポーラ平面:カメラ中心 𝑂1, 𝑂2 及び3次元点 𝑋 を通る平面
• エピポーラ線 :エピポーラ平面と画像平面の交わる線
• エピポール :直線𝑂1 𝑂2 と画像平面の交わる点
同じ 𝑋 を映した点
エピポーラ幾何
• 画像平面上1の点𝑥1に対応する3次元点𝑋は、カメラ中心𝑂1と𝑥1
を結んだ直線上にある
• 直線 𝑂1 𝑥1を 画像平面上2に投影した直線をエピポーラ線と呼ぶ。
三次元点𝑋はこのエピポーラ線上のどこかに映されていなくて
はならない
→この関係をエピポーラ拘束という
エピポーラ拘束と基礎行列
• 2つの画像に写された同一の空間上の点が満たすべき拘束条件
• 𝐱1 =
𝑢1
𝑣1
1
をカメラ𝐶1の画像平面上の点、 𝐱2 =
𝑢2
𝑣2
1
をカメラ𝐶2の画像平面
上の点とすると、エピポーラ拘束は以下の式で表される。
𝑢2 𝑣2 1
𝑓11 𝑓12 𝑓13
𝑓21 𝑓22 𝑓23
𝑓31 𝑓32 𝑓33
𝑢1
𝑣1
1
= 𝐱2
⊤
𝐹𝐱 𝟏 = 0
F を基礎行列という。
• 𝐹は𝐶1と𝐶2それぞれのカメラの内部行列𝐾1, 𝐾2及び2カメラ間の位置関係
(𝑅, 𝐭)の情報を含む
• 𝐥 𝟐 = 𝐹𝐱 𝟏はエピポーラ線である。実際、𝐱 𝟐
⊤
𝐥 𝟐 = 0 は直線のベクトル方程式
であり、 𝐱 𝟐が満たさねばならない条件を表している
基礎行列 𝐹 を求める
• エピポーラ拘束の式は以下の線形方程式に書き直せる
𝑢2
1
𝑢1
1
𝑢2
1
𝑣1
1
𝑢2
1
𝑣2
1
𝑢1
1
𝑣2
1
𝑣1
1
𝑣2
1
𝑢1
1
𝑣1
1
1
⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮
𝑢2
𝑛
𝑢1
𝑛
𝑢2
𝑛
𝑣1
𝑛
𝑢2
𝑛
𝑣2
𝑛
𝑢1
𝑛
𝑣2
𝑛
𝑣1
𝑛
𝑣2
𝑛
𝑢1
𝑛
𝑣1
𝑛
1
𝑓11
𝑓12
⋮
𝑓33
= 𝐴𝑓 = 0
• 𝐹は8自由度なので8つの対応点があれば解が求まる(8点アル
ゴリズム)
スケールが任意なため
• 8つ以上の対応点がある場合はSVDなどを用いた最小二乗法で
基礎行列 𝐹 を求める意味
• アウトライヤ(間違った対応点)を取り除くことができる
• RANSAC アルゴリズム:ランダムに8組の対応点を選び、基礎行列
𝐹’ を求めて、インライヤ(一定の誤差以内でエピポーラ線上にある
点)の割合を計算する。これを繰り返して、最もよい 𝐹’ のすべてのイ
ンライヤを使って最終的な 𝐹 を求める。
• 基本行列 𝐸(後述)を求めることができる
• ただし𝐹を使わずに𝐸を求めることもできる
基本行列 𝐸
• 基礎行列𝐹にたいして𝐸 = 𝐾2
⊤
𝐹𝐾1を基本行列という
• 𝐹 から求める方法と、直接求める方法(5点アルゴリズム)が
ある
• 𝐸は𝑅と𝐭の情報のみを含んでおり、𝐸を分解することでカメラの
移動を推定できる
𝐸の分解にはSVDを使う。𝐸にはいくつかの性質があり、それを加味す
ると解を4つに絞れる。三次元点𝑋はカメラの前方にあるという制約
からそれをさらに1つに絞る
詳しくは参考文献[2]のEpipolar Geometry and the Fundamental
Matrixの章を参照のこと
結局のところ𝐸, 𝐹とは何か
• カメラ座標系𝐶1から𝐶2への変換が 𝐱′ = 𝑅𝐱 + 𝐭 で書けるとすると、 𝐶1の原点 𝑂1 は𝐶2上で
は 𝐭 で、 𝐶1の画像平面上の点 𝐱 𝟏 は𝐶2上では 𝑅𝐱 𝟏 + 𝐭 で表される。
 注意:画像平面上の点は正規化画像座標系で考える
• 𝐶2において 𝑅𝐱 𝟏 + 𝐭 は 𝜆𝐱 𝟐 と 𝐭 を結んだ線分上にある。すなわち
𝑅𝐱 𝟏 + 𝐭 = 𝑠𝜆𝐱 𝟐 + (1 − 𝑠)𝐭 ⇔ 𝑅𝐱 𝟏 = 𝑠𝜆𝐱 𝟐 − 𝑠𝐭
これは 𝑅𝐱 𝟏, 𝐭, 𝐱 𝟐 が同一平面上にあることを意味する
 𝐱 𝟐は 𝐱 𝟏に対応する𝐶2の画像平面上の点
• 𝐭 × =
0 −𝑡 𝑧 𝑡 𝑦
𝑡 𝑧 0 𝑡 𝑥
−𝑡 𝑦 −𝑡 𝑥 0
とすると 𝐭 × 𝐯 は任意のベクトル 𝐯 と 𝐭 の外積
• したがって𝐱 𝟐
⊤
𝐭 × 𝑅𝐱 𝟏 = 𝟎. (𝐱 𝟐 と 𝐭 × 𝑅𝐱 𝟏 は直交するため)
• 𝐸 = 𝐭 × 𝑅 である。このため𝐸は(スケールを除いて5自由度)
• Fはこれに正規化画像座標系と画像座標系の間の変換(つまり𝐾)を加えたもの
3次元点の復元
• カメラ間の姿勢の変化と特徴点の対応が求まれば、三角測量に
より3次元点の位置を復元することができる
• 以下の式を解けば良い
𝑃1 −𝐱 𝟏 0
𝑃2 0 −𝐱 𝟐
𝑋
𝜆1
𝜆2
= 𝟎
※ 𝑃𝑖 は射影行列, 𝐱 𝒊 はそれぞれのカメラの画像座標形状の点
射影行列について
• カメラ内部行列が既知の場合 𝐸 が推定できるので、これを分解
して 𝑅, 𝐭 を求めればそれぞれのカメラの射影行列が定まる
• カメラ内部行列が未知の場合は、6点法によって焦点距離 𝑓 と
基礎行列 𝐹 を推定し、バンドル調整によって正確な値を求める
バンドル調整:再投影誤差を最小化することで各パラメタを修正する
こと
• また複数のカメラのうち1つのカメラ内部行列が既知の場合は、
それと 𝐹 を用いて他のカメラの射影行列を計算できる
• この辺のアルゴリズムにはいろいろあるらしい
• 参考文献[4]あたりに載ってる予感
まとめ
• SfM の流れ
対応点を求める 基礎行列𝐹を求める カメラの移動を推定 三角測量で空間復元
• 特徴点抽出 • 8点アルゴリズムな
どを使う
• アウトライヤの除去
• 基本行列Eを分解
• 内部行列が未知の場
合はそれも頑張って
推定する(𝐹のみから
は不可能)
• 最終的に射影行列を
求める
• 連立方程式を解く
• 推定された空間点を
再度射影し、再投影
誤差を最小化するこ
とでパラメタを最適
化(バンドル調整)
感想
• SfM の大まかな流れは共通だが、要素アルゴリズムに幅があり、
全体像を把握するのに苦労した(というかまだ出来ていない)
• ベストプラクティスを紹介できればよかったのですが…
• 座標系が多すぎて混乱する
• 特に画像座標系と正規化画像座標系
• 近いうちに自前で実装してみたい
参考文献
• コンピュータビジョン: 広がる要素技術と応用[1]
• Multiple View Geometry in Computer Vision Second Edition[2]
• http://www.robots.ox.ac.uk/~vgg/hzbook/
• 【コンピュータビジョン】ネコと学ぶエピポーラ幾何[3]
• https://qiita.com/ykoga/items/14300e8cdf5aa7bd8d31
• Structure from Motion & Camera Self-Calibration[4]
• https://www.researchgate.net/publication/272819947_Structure_from_Motion_Ca
mera_Self-Calibration

More Related Content

Structure from Motion