視覚追跡および平面マーカーの段階的なカメラポーズ推定


21

私は拡張現実のカメラポーズ推定と視覚追跡アプリケーションのトピックにしばらく取り組んでおり、タスクに関する詳細な情報はたくさんありますが、依然として多くの混乱と誤解があると思います。

次の質問は、段階的な詳細な回答に値すると思います。

  • カメラの組み込み機能とは何ですか?
  • カメラ外部機能とは何ですか?
  • 平面マーカーからホモグラフィを計算するにはどうすればよいですか?
  • ホモグラフィを使用している場合、カメラポーズを取得するにはどうすればよいですか?

私はあなたが行う繰り込みにあいまいです。1. Hは、何らかの手順(SVDなど)を使用してデータから見つかったホモグラフィです。2. inv(K)* H = Aは、ここで使用するものです。次に、回転行列の正規直交列としてq1 = a1 / norm(a1)およびq2 = a2 / norm(a2)を作成し、q3 = q1xq2 ...を作成します。次に、t /(何か)を使用して変換ベクトルを取得します。q1とq2を異なるもので分割するだけで、tをどのように分割するのですか?または、SVDプロシージャとinv(K)による乗算が何かに近いものの、完全に直交/正規の回転行列ではないという考えがあるので、th
user2600616

しかし、どうすれば3Dポイント(X、Y、1)を取得できますか?
waschbaer 16

回答:


19

ここでの唯一の問題は外部パラメータを取得することであることを理解することが重要です。カメラの組み込み関数はオフラインで測定でき、そのためのアプリケーションがたくさんあります。

カメラの組み込み機能とは何ですか?

カメラ固有のパラメーターは通常、カメラキャリブレーションマトリックスと呼ばれます。私たちは書くことができますK

K=[αusu00αvv0001]

どこで

  • 及び α vが でスケールファクタでありおよび方向の座標、および焦点距離に比例するカメラの:及び。およびは、および方向の単位距離あたりのピクセル数です。αuαv、V fはα U = kはuと fはα V = k個のV F K uがk個のV UのVuvfαu=kufαv=kvfkukvuv

  • c=[u0,v0]Tは主点と呼ばれ、通常は画像の中心の座標です。

  • uはVsはスキューで、とが非垂直の場合にのみゼロではありません。uv

組み込み関数がわかっている場合、カメラは較正されます。これは簡単に行うことができるため、コンピュータービジョンの目標ではなく、オフラインの些細なステップです。

カメラ外部機能とは何ですか?

カメラ外部または外部パラメーターは、ワールド座標系からカメラ座標系へのユークリッド変換に対応するマトリックスです。 は回転行列を表し、は平行移動を表します。3 × 4 R 3 × 3 t[R|t]3×4R3×3t

コンピュータービジョンアプリケーションは、このマトリックスの推定に重点を置いています。

[R|t]=[R11R12R13TxR21R22R23TyR31R32R33Tz]

平面マーカーからホモグラフィを計算するにはどうすればよいですか?

ホモグラフィは、3D平面とその画像投影に関連する同種の行列です。平面がある場合、点をこの平面にマッピングするホモグラフィと、投影下の対応する2D点は3×3Z=0HM=(X,Y,0)TmP=K[R|t]

m~=K[R1R2R3t][XY01]

=K[R1R2t][XY1]

H=K[R1R2t]

ホモグラフィを計算するには、ワールドカメラのポイントペアが必要です。平面マーカーがある場合、その画像を処理して特徴を抽出し、シーン内のそれらの特徴を検出して一致を取得できます。

Direct Linear Transformを使用してホモグラフィを計算するには、4つのペアが必要です。

ホモグラフィを使用している場合、カメラポーズを取得するにはどうすればよいですか?

ホモグラフィとカメラポーズには同じ情報が含まれており、簡単に渡すことができます。両方の最後の列は平行移動ベクトルです。ホモグラフィの列1と2つのも、カメラポーズマトリックスの列1と2つのです。これは3つのだけ左の列であり、の、そしてそれは列1および2ののCrossProductとして計算することができる直交でなければならないように。HK[R|t]H1H2R1R2R3[R|t]

R3=R1R2

冗長性のため、たとえば行列の要素[3,4]で分割するを正規化する必要があります。[R|t]


4
キャリブレーションは「簡単で、CVの目標ではない」と言うのは誤解を招くと思います。通常の場合、歪みパラメータも推定する必要があります。自己キャリブレーションの代わりに、平面キャリブレーション(Zhang-カメラキャリブレーションのための柔軟な新しい手法)をお勧めします。これは、個別のキャリブレーション手順を実行できる場合により柔軟になるためです。また、「ホモグラフィを使用している場合、どうすればカメラのポーズを取得できますか?」の小さなエラーもあります。アカウントを考慮しないため、キャリブレーション(H_ {calib} = K ^ -1H)。
buq2

3
ホモグラフィのカメラポーズが間違っています。それを行うにはいくつかの方法があります。それらのいくつかは非常に重要です。
mirror2image

なぜ間違っているのかわかりません。この方法で計算して動作します。なぜそれが間違っていると言うのですか?
Jav_Rock

3
前のセクションでH ^ 1とR ^ 1で等しいと書きましたが、3番目のセクションではH = K [RT]と記述しています。これは、R ^ 1が実際にはK ^ -1H ^ 1であることを意味します。しかし、これは厳密には当てはまりません。Hが無限に存在し、方程式を満たし、R ^ 1、R ^ 2、およびT(未知のスケール)を解くときに問題を引き起こすからです。あなたの答えはロバストな固有のキャリブレーションと歪みのキャリブレーションを無視しており、いくつかの方程式は間違っているため、これは質問に対する良い答えではありません。
buq2

はい、コードからこれを取得し、コードの異なる関数でKを乗算するため、ステップ3でキャリブレーションマトリックスが欠落していました。
Jav_Rock

3

2次元の場合を非常によく説明していますが、Jav_Rockによって提案された答えは、3次元空間でのカメラポーズの有効なソリューションを提供していません。この問題には複数の解決策が存在することに注意してください。

このホワイトペーパーでは、ホモグラフィを分解するための閉じた式を示しますが、式はやや複雑です。

OpenCV 3は、まさにこの分解(分解HomographyMat)を既に実装しています。ホモグラフィと正確にスケーリングされた組み込み行列が与えられると、この関数は4つの可能な回転と平行移動のセットを提供します。

この場合の組み込み行列は、ピクセル単位で指定する必要があります。つまり、主点は通常(imageWidth / 2, imageHeight / 2)、焦点距離は通常focalLengthInMM / sensorWidthInMM * imageHeightです。


正しくスケーリングされた組み込み行列とは何ですか?
ギグ

1
回答を更新しました。上記をご覧ください。
エミスウェルト

ちょっと@Emiswelt、焦点距離ではないfocalLengthInMM / sensorWidthInMM * imageWidthですか?代わりに高さを選択する理由は何ですか?
エルマース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.