3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

instantNeRFで遊ぶAdvent Calendar 2022

Day 14

RealityCapture intrinsic / extrinsicパラメータ

Last updated at Posted at 2022-12-13

「instantNeRFで遊ぶ Advent Calendar 2022」の14日目です。

今日は「RealityCaptureのregistrationデータを流用する検討」の課題2として、RealityCapture intrinsic / extrinsicパラメータについて調べました。

業務外の個人的な検討活動です。
間違っていても責任はとれません。
間違っていたらできましたらご指摘ください。

テストデータ

sketchfabのNefertiti statueを使用させていただきました。ありがとうございます。

objファイルをBlenderへ取り込み、所定の位置に配置したカメラの画像をrenderしました。

14-1.png

6枚の画像をRealityCaptureに取り込み、カメラの焦点距離と座標を入力しました。

カメラの座標はカメラを選んでいるときの1Dsに出るPrior poseのAbsolute poseをpositionにして入力しました。
14-3.png

intrinsic

RealityCaptureが出力するカメラの内部パラメータは焦点距離、主点位置、歪係数です。
ここで焦点距離は画角からフルサイズセンサに換算した値(単位はmm)、主点距離はセンサ中心からのずれ(単位はmm)、歪係数はcamera modelの設定に対する値(単位は無次元)です。

主点距離の変化を確認するため、X, Y軸方向に150, 50pixずらした画像をRealityCaptureに入力しRegistrationを出力しました。
cam1.png

なお、今回の2Kサイズ画像6枚の使用料は4cregit $0.01、約2円でした。
14-8.png

ここで気が付いたのはpx, pyの値が画面の1Dsの表示と異なることです。
2.48 / 36 = 0.0692なので画面に表示されている数字をフルサイズの横幅36で割るとexportの値になるようでした。

14-9.png

焦点距離と主点位置をpixel単位に変換した検算結果がこちらです。

14-10.png

同じ画像群をCOLMAPへ入力した焦点距離と主点位置の解析結果と検算結果がこちらです。
誤差があるので今後の課題です。

COLMAPの結果 images.txt
14-11.png

extrinsic

カメラの座標はCatpturingRealityのフォーラムに記載してありました。右手座標系のようです。
ただGizmoは回転中に反転するので注意が必要です。

軸の向きは(上から見たとき)。Yは北を向いており、緑の矢印、Xは東を向いており、青の矢印、Zは上を向いており、赤の矢印です。
(DeepLで翻訳しました https://www.deepl.com/translator)

Gizmoを見ていると回転中に前後が分からなくなったので、NumPADの数字で指定した3Dsのビューを見てカメラの向きの変化を判断しました。上段左が"2"のTopビュー、下段の左から"7","4","6"を押したときのsideビューです。この図ではsideをfront, right, backに分けました。

14-2.png

Registrationを押してカメラパラメータをexportしたところ、カメラの座標の出力結果はRealityCapture内のカメラの座標とほぼ同じでした。
14-4.png

次にカメラの向きについて、回転する軸と順番を調べました。

公式のFAQに説明にあったBlenderでの設定の仕方も参考にしました。

次にBlenderで回転モードを "YXZ Euler "に設定します。
X = pitch, Y = roll, Z = negative heading
(DeepLで翻訳しました https://www.deepl.com/translator)

ここでBlenderの回転モードの表記の順番は実際に回転させる順番と反対でしたので、YXZモードの場合はZ,X,Yの順番に回転させるようです。

これら(Euler rotation)のモードは、軸のアルファベットを順番に使って命名されており、階層の一番下にある軸から始まって、一番上にある軸で終わります。
(DeepLで翻訳しました https://www.deepl.com/translator)

以下、ポップアップの表記とは異なる結果になりましたが、挙動を調べた画面の様子です。

回転1番目 yaw Z軸・右ねじの逆方向

14-5.png

回転2番目 pitch X軸・右ねじの順方向

14-6.png

回転3番目 Roll Y軸・右ねじの順方向

14-7.png

閑話休題 Euler角の説明図

Euler角の説明図を探すと飛行機を例にしているものが多く見つかりましたが、回転の名前をカメラに当てはめようとすると混乱するかもしれません。
飛行機の場合は進行方向をXにして尾翼が伸びている方向をZとするのに対して、カメラの場合は画像の右方向をXと下方向をYとするとレンズが向いている方向をZにすることになります。
回転は飛行機のrollは進行方向がX軸、pitchがY軸、yawがZ軸になります。
対してカメラの場合のrollはレンズの方向のZ軸、pitchはX軸、yawはY軸になります。

14-12.png

このBlenderのモデルのCamera(視錐台)は組み合わせるときに座標を反転・回転させています。

まとめ

  • 座標系はCOLMAPと同じ 右手系
  • intrinsicは単位がmm COLMAPと合わせるためにはフルサイズのセンササイズを使って換算する必要がある
  • extrinsic
    • カメラの向きはZXY軸の順番 内因性のオイラー角 ただしZだけは逆回転
    • カメラの位置は座標の値そのまま
3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?