1)
3.1
u以像素单位,
u
∈
[
0
,
640
]
×
[
0
,
480
]
u \in [0,640] \times [0,480]
u∈[0,640]×[0,480]
2)
3.2 注意这里
R
k
(
u
)
R_k(u)
Rk(u)和
D
k
(
u
)
D_k(u)
Dk(u)的单位, Kinnect采回来的数据是以millimeter (mm), 在论文中没有考虑单位问题, 实际编程的时候,是要考虑的, kinnect采集的时候存成的是mm,
http://wiki.ros.org/depth_image_proc
然后我们算vertex map 和 normal map的时候用meter为单位
所以 R k ( u ) R_k(u) Rk(u)和 D k ( u ) D_k(u) Dk(u)用mm为单位, V k ( u ) V_k(u) Vk(u), N k ( u ) N_k(u) Nk(u)用m为单位
所以公式(3)在我们这里为
V
k
(
u
)
=
K
−
1
u
˙
D
k
(
u
)
1000
V_k(u) = K^{-1}\dot{u}\frac{D_k(u)}{1000}
Vk(u)=K−1u˙1000Dk(u)
3)
3.3
t
g
,
k
t_{g,k}
tg,k 为第k帧相机的位置
1
/
λ
1/ \lambda
1/λ converts the ray distance to
p
p
p to a depth
λ
=
∥
K
−
1
x
˙
∥
\lambda = \|K^{-1}\dot{x} \|
λ=∥K−1x˙∥
这里
x
˙
\dot{x}
x˙以像素为单位
k
=
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
k = \begin{bmatrix}f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}
k=⎣⎡fx000fy0cxcy1⎦⎤
k
−
1
=
[
1
/
f
x
0
−
c
x
/
f
x
0
1
/
f
y
−
c
y
/
f
y
0
0
1
]
k^{-1} = \begin{bmatrix}1/f_x & 0 & -c_x/f_x \\ 0 & 1/f_y & -c_y/f_y \\ 0 & 0 & 1 \end{bmatrix}
k−1=⎣⎡1/fx0001/fy0−cx/fx−cy/fy1⎦⎤
公式(8)
π
(
K
T
g
,
k
−
1
p
)
=
π
(
K
p
k
)
=
π
(
u
˙
D
(
u
)
/
1000
)
=
u
\pi(KT^{-1}_{g,k}p)=\pi(Kp_k)=\pi(\dot{u}D(u)/1000)=u
π(KTg,k−1p)=π(Kpk)=π(u˙D(u)/1000)=u
注意u是以pixel为单位
4)
T
~
k
−
1
,
k
z
\tilde{T}^z_{k-1,k}
T~k−1,kz 其中z为pyramid level,从第
k
k
k帧的camera view转到第
k
−
1
k-1
k−1帧的camera view
T
~
k
−
1
,
k
z
=
T
g
,
k
−
1
−
1
T
~
g
,
k
z
\tilde{T}^z_{k-1,k}=T^{-1}_{g,k-1}\tilde T^z_{g,k}
T~k−1,kz=Tg,k−1−1T~g,kz
注意
T
~
g
,
k
z
\tilde T^z_{g,k}
T~g,kz会从初值迭代逐步优化
-
u ~ = π ( K T ~ k − 1 , k V ˙ k ( u ) ) \tilde{u} = \pi(K\tilde{T}_{k-1,k}\dot{V}_k(u)) u~=π(KT~k−1,kV˙k(u)), 这个是从第k帧的image space 转到第k-1帧的image space. 注意加上一点是齐次坐标下的等价表达
-
V ~ k g ( u ) = T ~ g , k z − 1 V ˙ k ( u ) \tilde V^g_k(u) = \tilde T ^ {z-1}_{g,k}\dot{V}_k(u) V~kg(u)=T~g,kz−1V˙k(u)
这里 V ~ k g ( u ) \tilde V^g_k(u) V~kg(u)为 z − 1 z-1 z−1层的全局坐标 -
公式(16) V k − 1 V_{k-1} Vk−1, N k − 1 N_{k-1} Nk−1都是在第k-1帧的坐标系下的坐标, V k V_k Vk是在k帧坐标系下的坐标,但是右上角有个g, 说明在不同的坐标系下, 最终都会转到global坐标系下面.
公式(20)求第 z z z层的全局坐标
[ 1 α − γ t x − α 1 β t y γ − β 1 t z ] ∗ [ x y z 1 ] = [ 0 − z y 1 0 0 z 0 − x 0 1 0 − y x z 0 0 1 ] ∗ [ β γ α t x t y t z ] + [ x y z ] \begin{bmatrix}1 & \alpha & -\gamma & t_x \\ -\alpha & 1 & \beta & t_y\\ \gamma & -\beta & 1 & t_z \end{bmatrix} * \begin{bmatrix}x\\ y\\ z\\ 1 \end{bmatrix}=\begin{bmatrix}0 & -z & y & 1 & 0 & 0 \\ z & 0 & -x & 0 & 1 & 0\\ -y & x & z & 0 & 0 & 1 \end{bmatrix} * \begin{bmatrix}\beta\\ \gamma\\ \alpha\\ t_x \\ t_y\\ t_z \end{bmatrix} +\begin{bmatrix}x\\ y\\ z \end{bmatrix} ⎣⎡1−αγα1−β−γβ1txtytz⎦⎤∗⎣⎢⎢⎡xyz1⎦⎥⎥⎤=⎣⎡0z−y−z0xy−xz100010001⎦⎤∗⎣⎢⎢⎢⎢⎢⎢⎡βγαtxtytz⎦⎥⎥⎥⎥⎥⎥⎤+⎣⎡xyz⎦⎤
注意这里求相机的pose, 不是用的ICP的最近点, 而是将当前的帧的image空间转到前一帧的Image空间然后转到前一帧camera空间, 然后找到当前帧的camera空间中的点(位置,法向量)与前一帧空间中的一点(位置,法向量),通过公式(24)来求该点的变换。