深度图和点云的数据存储(体像素、八叉树、Kd树、三角剖分)
PLY数据文件格式
3D相机数据的数据存储形式是二维数组,元素值为物体距离像平面距离Z或者视线距离d。
点云数据存储形式是二维数组,但只有三列 ( X , Y , Z ) (X,Y,Z) (X,Y,Z),行存储次序任意。
将带检测空间点的坐标平移,使得原点盒体像素空间立方体最小坐标顶点对齐。
将坐标除以小立方体边长并进行舍入,得到对应体素在3D数组内的存储位置。
查询数组对应元素即可得到空间是否被占用信息。
需要很大的空间存储3D数组。
量化的精度越高,划分的体像素的格子越多,存储空间越大。
体像素一使 用空间的均匀分割
八叉树一 对空间非均匀分割(按需分割)
具体讨论8叉树之前,我们先从4叉树说起
●2D数据的4叉树表示
●3D数据的8叉树表示
如下图所示的情况,如果使用上面的方法构建4叉树,树会很深,浪费空间。针对这种情况,提出三种改进方式。
1 拆分的停止条件可以改成空间内点的数量小于给定正整数K。
2 拆分的停止条件可以改成节点对应空间立方体边长小于门限。
3 叶节点存放的多个点的坐标数据。
分割平面有三个方向可以选择:垂直于x轴,垂直于y轴,垂直于z轴。
树的不同层使用不同的方向,例如:树第一层使用垂直于x轴分割,树第二层使用垂直于y轴分割。
k 近邻与最近邻搜索算法思想相同,只是 k 近邻搜索中,使用优先级队列保存k个近邻。
准则:1 空圆;2 最大化最小角。
曲面的局部看成近似平面,将采样点投影到拟合平面上,进行三角划分。
使用近似的方法,从任一局部小三角形出发,不断“蔓延”, 期间用LOP进行局部优化。
结合SDF函数的marching Cube算法。
以深度图平面上的均匀采样格点直接做三角化。
注:顶点间可以拼凑成“米”字形。
1 用多个平面片(三角形或者四边形)描述空间几何体表面
2 有ASCII和二进制2种格式(这里只介绍ASCII格式)
3 平面片描述拆分为:
1)顶点描述;
2)构成平面片的顶点序号
平面的法向量方向:右手法则。平面三个坐标点的顺序即为食指绕行方向。
法向量方向会影响渲染出来3D平面的颜色。如果平面法向量朝内,渲染出的平面颜色不是彩色而是灰色。