카메라 자 코비안을 도출하는 방법

Nov 20 2020

저는 Kalman Filter 상황을 다루고 있습니다. 카메라를 사용하여 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} $카메라 행렬 의 위쪽 두 행입니다 . $K$, $R_{3x3}$는 카메라에 대한 세계 좌표 프레임의 회전을 설명하는 회전 행렬입니다. 과$\vec{T}_{3x1}$ 카메라를 기준으로 세계 좌표 프레임의 위치를 ​​설명하는 변환입니다.

이 형태가 정말 좋겠어요

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

나는 이것을 보았다 $H$"관찰 행렬"이라고하며 다른 경우에는 "야 코비안"이라고합니다. 그러나 Jacobian은 다음과 같은 구조를 의미합니다.

$$ \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$ 내 변환을 Kalman 필터가 처리 할 수있는 형태로 만들려면?

  • 대신 동종 좌표 (일부 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}) $? 그러면 이것이 Jacobian과 어떤 관련이 있습니까?

답변

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$ wrt 세계 프레임.

이것은 만든다

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

질문에서 내가 남긴 야 코비 방정식을 따르면 (매우 신중하게, wrt $x$ 그리고 친구보다는 $x'$ 그리고 다른 친구들) 미적분의 반을 통해 선형 대수를 단순화하면 결국 결국

$$ 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$ 세 번째 행입니다 $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)$, 그러나 후속 줄에서는 Jacobian $H$ 평가 $x$. 마찬가지로 업데이트 단계에서 우리가 사용$f(x)$ 시스템을 발전시키고 $F$ 평가 $x$ 공분산을 업데이트합니다.

이제 내 질문에 구체적으로 대답하십시오.

  • 당신은 단 하나를 얻지 않습니다 $H$; 둘 다 필요합니다$H(\vec{x})$$h(\vec{x})$, 평가 $\vec{x}$ 비선형 성 때문에 모양이 장소에 따라 달라지기 때문입니다.

  • 아니요, 동종 좌표를 사용하지 마십시오. 이것은 실제로 매우 비선형 적입니다.$z'$) 어쨌든 Jacobian을 사용해야 할 것입니다. 상태 변수를 고정 상태로 유지하기 위해 필터를 신뢰할 수 있는지 확실하지 않습니다. 그 변수에 잡음이없고 업데이트 방정식이 그랬다면 아마도? 지금 여기서는 관련이 없습니다.

  • 그 뺄셈이 아니에요.

  • 나는 선형성이 실제로 그 덧셈 용어에 의해 위반되지 않는다고 생각합니다. 그러나 여기서는 결국 선형성 위반됩니다.