Wie man Camera Jacobian ableitet
Ich habe es mit einer Kalman-Filter-Situation zu tun und versuche, Punkte in 3D mit Kameras zu verfolgen, von denen jede einen 3D-Punkt als 2D-Projektion darstellen kann.
$$ \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} $$
Wo $u$ und $v$ sind die Pixelkoordinaten eines Punktes im Kamerarahmen; $ \begin{bmatrix} \alpha_x & \gamma & u_0 \\ 0 & \alpha_y & v_0 \end{bmatrix} $ist die oberen beiden Zeilen der Kameramatrix $K$, $R_{3x3}$ist eine Rotationsmatrix, die die Rotation des Weltkoordinatenrahmens relativ zur Kamera beschreibt; und$\vec{T}_{3x1}$ ist eine Übersetzung, die die Position des Weltkoordinatenrahmens relativ zur Kamera beschreibt.
Ich möchte wirklich, dass dies in der Form ist
$$ \vec{y} = H \vec{x} $$
Ich habe das gesehen $H$nannte die "Beobachtungsmatrix" und in anderen Fällen den "Jacobian". Aber Jacobian würde eine Struktur wie implizieren
$$ \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} $$
und es ist mir nicht klar, dass dies Ihnen tatsächlich geben würde $\vec{y}$ von $\vec{x}$.
Ich habe wohl ein paar Fragen:
Wie kann ich eine einzelne ableiten? $H$ Um meine Transformation in eine Form zu bringen, die ein Kalman-Filter verarbeiten kann?
Sollte ich stattdessen homogene Koordinaten verwenden (einige Einsen anheften)? Würde der Kalman-Filter, der auf den Status aktualisiert wird, seinen letzten Eintrag dann zuverlässig auf 1 setzen?
Ich könnte meine machen $\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}$, aber das ist wirklich nicht was ich will.
Macht es dies nichtlinear, wenn der additive Term rechts gehalten wird? $\vec{y} = H_{2\times3} \vec{x} + K_{2\times3}\vec{T}_{3\times1} \rightarrow \vec{y} = \tilde{H}(\vec{x}) $? Wie hängt das dann mit dem Jakobianer zusammen?
Antworten
Ich habe einige Fortschritte gemacht.
Erstens war meine Kameragleichung definitiv falsch: Mir fehlte eine Division nach Reichweite zum Objekt. Dieses Video hat mich dazu gebracht, das Licht zu sehen. Ja wirklich:
$$ \begin{bmatrix} u \\ v \end{bmatrix} = K_{2\times3} \cdot \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix}/z' $$
wo
$$ \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} = R_{3\times3} \cdot \begin{bmatrix} x \\ y \\ z \end{bmatrix} + T \tag{1}$$
Die grundierten ($'$) Variablen repräsentieren Koordinaten des Objekts, das Sie im Referenzrahmen der Kamera in die Kamera projizieren möchten, und die nicht grundierten Variablen repräsentieren Koordinaten im Weltbild. Ich versuche zu finden$H$ wrt den Weltrahmen.
Das macht
$$ u = \frac{\alpha_x x'}{z'} + u_0 $$ $$ v = \frac{\alpha_x x'}{z'} + u_0 $$
Wenn Sie der Jacobi-Gleichung folgen, die ich oben in der Frage gelassen habe (sehr sorgfältig, nehmen Sie Ableitungen wrt $x$ und Freunde eher als $x'$ und andere Freunde) durch anderthalb Seiten Kalkül und Vereinfachung der linearen Algebra erhalten Sie schließlich
$$ Jacobian_{2\times3} = \frac{KR}{z'} - \frac{K\vec{x'} \otimes R_3}{z'^2} $$
wo $ \vec{x'} = \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} $, $R_3$ ist die dritte Reihe der $R$ Matrix und $\otimes$ ist ein äußeres Produkt.
Beachten Sie, dass Sie optional die Translation vor der Rotation in Gleichung (1) aufnehmen können und dies für die Ableitungen keinen Unterschied macht, da $x$, $y$, und $z$ erscheinen nicht im Übersetzungsbegriff.
Zweitens gibt es eine Unterscheidung zwischen Systementwicklung und Beobachtung gemacht werden Funktionen und die Jacobi. Diese neigen dazu, miteinander zu verschwimmen, da im linearen Fall das Multiplizieren mit dem Jacobi dasselbe ist wie das Bewerten der Funktion. Nehmen Sie das Beispiel$y_1 = ax_1 + bx_2$, $y_2 = cx_1 + dx_2$. Dann können wir das System schreiben als:
$$ \begin{bmatrix} y_1 \\ y_2 \end{bmatrix} = \begin{bmatrix} a & b \\ c & d \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} $$
Aber auch
$$ \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} $$
Dies ist praktisch, wenn Sie beide finden müssen $\vec{y}$ von $\vec{x}$und andere Dinge wie Projektkovarianzmatrizen herum tun , aber in einem nichtlinearen System tun Sie diese Dinge mit getrennten Methoden:
Beachten Sie, dass die erste Zeile verwendet $h(x)$, aber in den folgenden Zeilen verwenden wir den Jacobian $H$ ausgewertet bei $x$. Ebenso verwenden wir beim Update-Schritt$f(x)$ das System zu entwickeln und $F$ ausgewertet bei $x$ Kovarianz aktualisieren.
Um nun speziell meine Fragen zu beantworten:
Sie bekommen nicht nur eine einzige $H$;; du brauchst beides$H(\vec{x})$ und $h(\vec{x})$, ausgewertet bei $\vec{x}$ weil die Nichtlinearität die Form von Ort zu Ort variieren lässt.
Nein, verwenden Sie keine homogenen Koordinaten. Dies ist eigentlich so nichtlinear (dank dieser Division durch$z'$), dass du den Jacobian auf jeden Fall brauchen wirst. Ich bin mir nicht sicher, ob einem Filter jemals vertraut werden kann, um eine Statusvariable stationär zu halten. Wenn diese Variable kein Rauschen enthält und die Aktualisierungsgleichungen nur so sind, vielleicht? Hier jetzt irrelevant.
Diese Subtraktion ist nicht ... nein.
Ich denke, dass die Linearität durch diesen additiven Begriff nicht wirklich verletzt wird, da dies nur ein Versatz ist. Aber Linearität wird hier schließlich verletzt.