Cara mendapatkan Camera Jacobian

Nov 20 2020

Saya berurusan dengan situasi Filter Kalman, mencoba melacak titik dalam 3D menggunakan kamera, yang masing-masing dapat mewakili titik 3D sebagai proyeksi 2D menurut:

$$ \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} $$

Dimana $u$ dan $v$ adalah koordinat piksel suatu titik dalam bingkai kamera; $ \begin{bmatrix} \alpha_x & \gamma & u_0 \\ 0 & \alpha_y & v_0 \end{bmatrix} $adalah dua baris atas dari matriks kamera $K$, $R_{3x3}$adalah matriks rotasi yang menggambarkan rotasi bingkai koordinat dunia relatif terhadap kamera; dan$\vec{T}_{3x1}$ adalah terjemahan yang menjelaskan posisi bingkai koordinat dunia relatif terhadap kamera.

Saya sangat ingin ini dalam bentuk

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

Saya telah melihat ini $H$disebut "matriks observasi" dan dalam kasus lain "Jacobian". Tapi Jacobian akan menyiratkan struktur seperti

$$ \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} $$

dan tidak jelas bagi saya bahwa ini akan benar-benar memberi Anda $\vec{y}$ dari $\vec{x}$.

Jadi saya kira saya punya beberapa pertanyaan:

  • Bagaimana saya bisa mendapatkan satu $H$ menempatkan transformasi saya dalam bentuk yang dapat ditangani oleh filter Kalman?

  • Haruskah saya menggunakan koordinat homogen (paku pada beberapa 1) sebagai gantinya? Akankah pembaruan filter Kalman ke status tetap mempertahankan entri terakhirnya 1?

  • Saya bisa membuat saya $\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}$, tapi ini bukan yang kuinginkan.

  • Apakah menjaga suku aditif di sebelah kanan membuat ini nonlinier? $\vec{y} = H_{2\times3} \vec{x} + K_{2\times3}\vec{T}_{3\times1} \rightarrow \vec{y} = \tilde{H}(\vec{x}) $? Bagaimana ini kemudian berhubungan dengan Jacobian?

Jawaban

PavelKomarov Nov 21 2020 at 03:21

Saya telah membuat beberapa kemajuan.

Pertama, persamaan kamera saya benar-benar salah: Saya kehilangan pembagian berdasarkan rentang ke objek. Video inilah yang menyebabkan saya melihat cahaya. Betulkah:

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

dimana

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

Prima ($'$) variabel mewakili koordinat benda yang Anda coba proyeksikan ke kamera dalam bingkai referensi kamera, dan variabel yang tidak diprioritas mewakili koordinat dalam bingkai dunia. Saya mencoba untuk menemukan$H$ wrt bingkai dunia.

Ini membuat

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

Jika Anda mengikuti persamaan Jacobian yang saya tinggalkan di atas dalam pertanyaan (sangat hati-hati, mengambil turunan wrt $x$ dan teman, bukan $x'$ dan teman-teman lainnya) melalui satu setengah halaman kalkulus dan menyederhanakan aljabar linier, akhirnya Anda akan mendapatkannya

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

dimana $ \vec{x'} = \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} $, $R_3$ adalah baris ketiga dari $R$ matriks, dan $\otimes$ adalah produk luar.

Perhatikan bahwa Anda dapat secara opsional menyertakan terjemahan sebelum rotasi dalam persamaan (1), dan tidak ada bedanya dengan turunannya karena $x$, $y$, dan $z$ tidak muncul dalam istilah terjemahan.

Kedua, ada perbedaan yang harus dibuat antara evolusi sistem dan fungsi observasi dan Jacobian. Ini cenderung kabur bersama karena dalam kasus linier mengalikan dengan Jacobian sama dengan mengevaluasi fungsi. Ambil contoh$y_1 = ax_1 + bx_2$, $y_2 = cx_1 + dx_2$. Kemudian kita dapat menulis sistem sebagai:

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

Tetapi juga

$$ \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} $$

Ini nyaman jika Anda berdua perlu mencari $\vec{y}$ dari $\vec{x}$dan melakukan hal-hal lain seperti matriks kovarian proyek , tetapi dalam sistem nonlinier Anda melakukan hal-hal ini dengan metode terpisah:

Perhatikan penggunaan baris pertama $h(x)$, tetapi pada baris berikutnya kami menggunakan Jacobian $H$ dievaluasi pada $x$. Begitu juga pada langkah update yang kita gunakan$f(x)$ untuk mengembangkan sistem dan $F$ dievaluasi pada $x$ untuk memperbarui kovarians.

Sekarang untuk menjawab pertanyaan saya secara khusus:

  • Anda tidak hanya mendapatkan satu pun $H$; Anda membutuhkan keduanya$H(\vec{x})$ dan $h(\vec{x})$, dievaluasi pada $\vec{x}$ karena nonlinier membuat bentuk berbeda dari satu tempat ke tempat lain.

  • Tidak, jangan gunakan koordinat homogen. Ini sebenarnya sangat nonlinier (berkat pembagian itu oleh$z'$) bahwa Anda pasti perlu menggunakan Jacobian. Tidak yakin apakah filter bisa dipercaya untuk menjaga variabel status tetap. Jika tidak ada gangguan dalam variabel itu dan persamaan pembaruan hanya begitu, mungkin? Tidak relevan di sini sekarang.

  • Pengurangan itu tidak..tidak.

  • Saya pikir linieritas sebenarnya tidak dilanggar oleh istilah aditif itu, karena itu hanya offset. Tapi linearitas yang dilanggar di sini setelah semua.