深度图与彩色图对齐算法


符号说明:

K d : 深 度 摄 像 头 内 参 {K}_{d} : 深度摄像头内参 Kd:
K c : 彩 色 摄 像 头 内 参 {K}_{c} : 彩色摄像头内参 Kc:
T w 2 d : 世 界 坐 标 系 转 换 到 深 度 摄 像 头 坐 标 系 的 外 参 矩 阵 {T}_{w2d} :世界坐标系转换到深度摄像头坐标系的外参矩阵 Tw2d:
T w 2 c : 世 界 坐 标 系 转 换 到 彩 色 摄 像 头 坐 标 系 的 外 参 矩 阵 {T}_{w2c} : 世界坐标系转换到彩色摄像头坐标系的外参矩阵 Tw2c:
T d 2 c : 深 度 摄 像 头 坐 标 系 转 换 到 彩 色 摄 像 头 坐 标 系 的 外 参 矩 阵 {T}_{d2c} :深度摄像头坐标系转换到彩色摄像头坐标系的外参矩阵 Td2c
P d c : 深 度 图 下 某 点 在 深 度 摄 像 头 坐 标 系 下 的 三 维 点 坐 标 {P}_{dc} :深度图下某点在深度摄像头坐标系下的三维点坐标 Pdc
P u , v d : 深 度 图 下 某 点 在 深 度 图 像 坐 标 系 下 的 二 维 点 坐 标 {P}_{u,v}^{d} :深度图下某点在深度图像坐标系下的二维点坐标 Pu,vd
P ˙ d c : 深 度 图 下 某 点 像 素 还 原 到 深 度 坐 标 系 下 的 空 间 点 \dot{P}_{d c} : 深度图下某点像素还原到深度坐标系下的空间点 P˙dc:
P c c : 彩 色 图 下 某 点 在 彩 色 摄 像 头 坐 标 系 下 的 三 维 点 坐 标 {P}_{cc} :彩色图下某点在彩色摄像头坐标系下的三维点坐标 Pcc
P u , v c : 彩 色 图 下 某 点 在 彩 色 图 像 坐 标 系 下 的 二 维 点 坐 标 {P}_{u,v}^{c} :彩色图下某点在彩色图像坐标系下的二维点坐标 Pu,vc
P ˙ c c : 由 世 界 坐 标 系 转 换 到 彩 色 坐 标 系 下 的 空 间 点 \dot{P}_{c c} : 由世界坐标系转换到彩色坐标系下的空间点 P˙cc:
P w : 深 度 图 转 换 到 世 界 坐 标 系 下 的 点 {P}_{w} : 深度图转换到世界坐标系下的点 Pw:


像素坐标系、图像坐标系、相机坐标系、世界坐标系的转换:


z c [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R T 0 1 ] [ X w Y w z w 1 ] = [ f x 0 u 0 0 0 f y v 0 0 0 0 1 0 ] [ R T 0 → 1 ] [ X w Y w Z w 1 ] z_{c}\left[\begin{array}{l}{u} \\ {v} \\ {1}\end{array}\right]=\left[\begin{array}{ccc}{\frac{1}{d x}} & {0} & {u_{0}} \\ {0} & {\frac{1}{d y}} & {v_{0}} \\ {0} & {0} & {1}\end{array}\right]\left[\begin{array}{cccc}{f} & {0} & {0} & {0} \\ {0} & {f} & {0} & {0} \\ {0} & {0} & {1} & {0}\end{array}\right]\left[\begin{array}{cc}{R} & {T} \\ {0} & {1}\end{array}\right]\left[\begin{array}{c}{X_{w}} \\ {Y_{w}} \\ {z_{w}} \\ {1}\end{array}\right]=\left[\begin{array}{cccc}{f_{x}} & {0} & {u_{0}} & {0} \\ {0} & {f_{y}} & {v_{0}} & {0} \\ {0} & {0} & {1} & {0}\end{array}\right]\left[\begin{array}{cc}{R} & {T} \\ {\overrightarrow{0}} & {1}\end{array}\right]\left[\begin{array}{c}{X_{w}} \\ {Y_{w}} \\ {Z_{w}} \\ {1}\end{array}\right] zcuv1=dx1000dy10u0v01f000f0001000[R0T1]XwYwzw1=fx000fy0u0v01000[R0 T1]XwYwZw1

根据以上公式,可得出像素坐标系(u,v)到相机坐标系的三维点( x c , y c , z c x_{c},y_{c},z_{c} xcyczc)之间的转换关系为:

{ x c = z c ⋅ ( u − u 0 ) ⋅ d x / f y c = z c ⋅ ( v − v 0 ) ⋅ d y / f z c = z c \left\{\begin{array}{l}{x_{c}=z_{c} \cdot\left(u-u_{0}\right) \cdot d x / f} \\ {y_{c}=z_{c} \cdot\left(v-v_{0}\right) \cdot d y / f} \\ {z_{c}=z_{c}}\end{array}\right. xc=zc(uu0)dx/fyc=zc(vv0)dy/fzc=zc
其中,fx =f/dx ,为u轴上的尺度因子,即u轴上的归一化焦距。


(1)第一步,将深度图的像素点还原到深度坐标系下
P ˙ d c = Z K d − 1 P u , v d \dot{P}_{d c}=Z K_{d}^{-1} P_{u, v}^{d} P˙dc=ZKd1Pu,vd
(2)第二步:将深度空间坐标系的深度点转换到世界坐标系下

P w = T w 2 d − 1 P ˙ d c P_{w}=T_{w 2 d}^{-1} \dot{P}_{d c} Pw=Tw2d1P˙dc
(3)第三步:将世界坐标系的深度点转换到彩色摄像头坐标系

P ˙ c c = T w 2 c P w \dot{P}_{c c}=T_{w 2 c} P_{w} P˙cc=Tw2cPw
(4)第四步:将彩色摄像头坐标系下的深度点映射到Z=1的彩色平面上

P u , v c = K c ( P ˙ c c / z ) P_{u, v}^{c}=K_{c}\left(\dot{P}_{c c} / z\right) Pu,vc=Kc(P˙cc/z)
​ 其中, ( P ˙ c c / z ) \left(\dot{P}_{c c} / z\right) (P˙cc/z) 表示按z轴归一化,即该点的xyz都分别除以z值
(5)以上四步,就完成了深度平面图的点转换到彩色平面上,给彩色平面上的像素点增加一个信息通道{深度}

(6)实际处理中,一般把第二第三步直接结合起来,即获取一个从深度摄像头坐标系到彩色摄像头坐标系的欧氏变换矩阵。具体推算如下:
P ˙ c c = T w 2 c P w = T w 2 c T w 2 d − 1 P ˙ d c \dot{P}_{c c}=T_{w 2 c} P_{w}=T_{w 2 c} T_{w 2 d}^{-1} \dot{P}_{d c} P˙cc=Tw2cPw=Tw2cTw2d1P˙dc

T d 2 c = T w 2 c T w 2 d − 1 = [ R w 2 c R w 2 d − 1 t w 2 c − R w 2 c R w 2 d − 1 t w 2 d 0 1 ] T_{d 2 c}=T_{w 2 c} T_{w 2 d}^{-1}=\left[\begin{array}{cc}{R_{w 2 c} R_{w 2 d}^{-1}} & {t_{w 2 c}-R_{w 2 c} R_{w 2 d}^{-1} t_{w 2 d}} \\ {0} & {1}\end{array}\right] Td2c=Tw2cTw2d1=[Rw2cRw2d10tw2cRw2cRw2d1tw2d1]

有了这个,就可以直接将深度摄像头空间坐标系下的点转换到彩色摄像头空间坐标系下了。

你可能感兴趣的:(深度图与彩色图对齐算法)