カメラヤコビアンを導出する方法

Nov 20 2020

私はカルマンフィルターの状況を扱っており、カメラを使用して3Dでポイントを追跡しようとしています。各カメラは、次のように3Dポイントを2D投影として表すことができます。

$$ \begin{bmatrix} u \\ v \end{bmatrix} = \begin{bmatrix} \alpha_x & \gamma & u_0 \\ 0 & \alpha_y & v_0 \end{bmatrix} \cdot R_{3\times3} \cdot \begin{bmatrix} x \\ y \\ z \end{bmatrix} + \begin{bmatrix} \alpha_x & \gamma & u_0 \\ 0 & \alpha_y & v_0 \end{bmatrix} \cdot \vec{T}_{3\times1} $$

どこ $u$ そして $v$ カメラフレーム内のポイントのピクセル座標です。 $ \begin{bmatrix} \alpha_x & \gamma & u_0 \\ 0 & \alpha_y & v_0 \end{bmatrix} $カメラマトリックスの上の2行です $K$$R_{3x3}$カメラに対するワールド座標フレームの回転を表す回転行列である。そして$\vec{T}_{3x1}$ は、カメラに対するワールド座標フレームの位置を表す平行移動です。

本当にこれを形にして欲しい

$$ \vec{y} = H \vec{x} $$

私はこれを見ました $H$「観測行列」と呼ばれ、その他の場合は「ヤコビ行列」と呼ばれます。しかし、ヤコビアンは次のような構造を意味します

$$ \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \frac{\partial y_1}{\partial x_2} & \frac{\partial y_1}{\partial x_3} \\ \frac{\partial y_2}{\partial x_1} & \frac{\partial y_2}{\partial x_2} & \frac{\partial y_2}{\partial x_3} \end{bmatrix} $$

そして、これが実際にあなたに与えるかどうかは私には明らかではありません $\vec{y}$ から $\vec{x}$

だから私はいくつかの質問があると思います:

  • どうすればシングルを導き出すことができますか $H$ カルマンフィルターが処理できる形式に変換を配置するには?

  • 代わりに同次座標(いくつかの1をタック)を使用する必要がありますか?カルマンフィルターが状態に更新されると、最後のエントリが1のままになりますか?

  • 私は $\vec{y} = \begin{bmatrix} u \\ v \end{bmatrix} - \begin{bmatrix} \alpha_x & \gamma & u_0 \\ 0 & \alpha_y & v_0 \end{bmatrix} \cdot \vec{T}_{3\times1}$、しかしこれは本当に私が望むものではありません。

  • 加法項を右側に保つと、これは非線形になりますか? $\vec{y} = H_{2\times3} \vec{x} + K_{2\times3}\vec{T}_{3\times1} \rightarrow \vec{y} = \tilde{H}(\vec{x}) $?では、これはヤコビアンとどのように関係していますか?

回答

PavelKomarov Nov 21 2020 at 03:21

私はいくつかの進歩を遂げました。

まず、私のカメラの方程式は間違いなく間違っていました。オブジェクトへの範囲による除算がありませんでした。このビデオが私に光を見させた理由です。本当に:

$$ \begin{bmatrix} u \\ v \end{bmatrix} = K_{2\times3} \cdot \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix}/z' $$

どこ

$$ \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} = R_{3\times3} \cdot \begin{bmatrix} x \\ y \\ z \end{bmatrix} + T \tag{1}$$

プライム($'$)変数は、カメラの参照フレームでカメラに投影しようとしているものの座標を表し、プライミングされていない変数は、ワールドフレームの座標を表します。私は見つけようとしています$H$ ワールドフレームを作成します。

これは

$$ u = \frac{\alpha_x x'}{z'} + u_0 $$ $$ v = \frac{\alpha_x x'}{z'} + u_0 $$

私が質問で上に残したヤコビ行列に従う場合(非常に注意深く、導関数をとる $x$ と友達ではなく $x'$ および他の友人)1ページ半の微積分と線形代数を単純化することで、最終的には

$$ Jacobian_{2\times3} = \frac{KR}{z'} - \frac{K\vec{x'} \otimes R_3}{z'^2} $$

どこ $ \vec{x'} = \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} $$R_3$ の3行目です $R$ 行列、および $\otimes$ 外積です。

オプションで、回転前の平行移動を式(1)に含めることができます。これは、導関数に違いがないためです。 $x$$y$、および $z$ 翻訳用語には表示されません。

第二に、システムの進化と観測機能とヤコビアンの間には区別があります。線形の場合、ヤコビアンを乗算することは関数を評価することと同じであるため、これらは一緒にぼやける傾向があります。例を見てください$y_1 = ax_1 + bx_2$$y_2 = cx_1 + dx_2$。次に、システムを次のように記述できます。

$$ \begin{bmatrix} y_1 \\ y_2 \end{bmatrix} = \begin{bmatrix} a & b \\ c & d \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} $$

だけでなく

$$ \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \frac{\partial y_1}{\partial x_2} \\ \frac{\partial y_2}{\partial x_1} & \frac{\partial y_2}{\partial x_2} \end{bmatrix} = \begin{bmatrix} a & b \\ c & d \end{bmatrix} $$

これは、両方を見つける必要がある場合に便利です $\vec{y}$ から $\vec{x}$の周りのプロジェクト共分散行列のような他のことを行いますが、非線形システムでは、これらのことを別々の方法で行います。

最初の行が使用していることに注意してください $h(x)$、ただし、後続の行ではヤコビアンを使用します $H$ で評価 $x$。同様に、更新ステップで使用します$f(x)$ システムを進化させ、 $F$ で評価 $x$ 共分散を更新します。

今、私の質問に具体的に答えるために:

  • あなたはただシングルを手に入れるだけではありません $H$; 両方が必要です$H(\vec{x})$ そして $h(\vec{x})$、で評価 $\vec{x}$ 非線形性により、形状が場所ごとに異なるためです。

  • いいえ、同次座標は使用しないでください。これは実際には非常に非線形です(による除算のおかげで$z'$)とにかくヤコビアンを使用する必要があることは間違いありません。状態変数を静止状態に保つためにフィルターが信頼できるかどうかはわかりません。その変数にノイズがなく、更新式がちょうどそうだった場合、多分?今ここでは無関係です。

  • その減算は..いいえではありません。

  • それは単なるオフセットであるため、線形性は実際にはその加法項によって違反されていないと思います。しかし、結局のところ、ここで直線性侵害されています。