前言
前一段时间忙着秋招和修改论文意见反稿,就没有接着做关于Azure Kinect DK相关的探索总结,现在有时间就慢慢补起来。上一篇是利用PP-Humanseg模型分割出color图和深度图中的人像,这一篇紧接着上一篇的工作,从人像分割后的图像结果获得人体的点云数据(也可以直接先生成点云再作点云的分割,等后续探索)。
一、深度图转点云
1.1 原理
关于这部分的原理很多博客和文章都已经有详细的叙述,这里就作一个简单的记录。
首先,我们需知道相机成像原理中的一些映射过程:
上图中有四个坐标系分别为世界坐标系( X w X_w Xw, Y w Y_w Yw, Z w Z_w Zw),相机坐标系( X c X_c Xc, X c X_c Xc, X c X_c Xc),像素坐标系( u u u, v v v)和图像物理坐标系( x x x, y y y)。
图像中任意一个像素点m在世界坐标系坐标为( x w x_w xw, y w y_w yw, z w z_w zw),在摄像机坐标系坐标为( x c x_c xc, y c y_c yc, z c z_c zc),在像素坐标系坐标为( u m u_m um, v m v_m vm),在图像物理坐标系坐标为( x m x_m xm, y m y_m ym)。
图像物理坐标系的原点在图像坐标系中的原点为( u 0 u_0 u0, v 0 v_0 v0),图像上每个点在 x x x, y y y轴方向上的物理尺寸是 d x d_x dx, d y d_y dy。则图像中任意一个像素点m在( u u u, v v v)坐标系中满足如下关系:
[ u m v m 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x m y m 1 ] \begin{bmatrix} u_m \\ v_m \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{1}{d_x}&0&u_0 \\ 0&\frac{1}{d_y} &v_0 \\ 0&0&1 \end{bmatrix} \begin{bmatrix} x_m \\ y_m \\ 1 \end{bmatrix} ⎣
⎡umvm1⎦
⎤=⎣
⎡dx1000dy10u0v