点云压缩测试模型TMC2的编码框架

一.  GenerateGeometryVideo

1. Segmenter.compute

I. KDTree.build:将输入的点云帧构建k-d树;

II. NormalsGen.compute:

A. computeNormals:对点云中的每个点,用k-D树查找它的16个最近邻,再由这16个点计算得到一个协方差矩阵,对协方差矩阵对角化,就可以得到每个点的初始法向量;

B. smoothNormals: 将上一步得到的每个点的法向量做一个平滑,具体过程是将初始法向量和 他与邻近点的点积的累加和求一个加权值,该加权值即为平滑后的法向量;

C. orientNormals:这里其实没做啥,只是将满足条件的一些点的法向量的正负极性反了一下,这个步骤结束则每个的点的法向量就计算完毕了;

 III. Initialsegmentation:将每个点法向量与立方体6个面的法向量分别做点积,点积最大的一个面的索引被作为该点的类索引,其实就是将所有点归类到6个面上;

IV. Refinesegmentation:对于每个点,计算两个score,一个是该点的法向量与6个面的法向量的乘积,一个是该点的邻近点的类索引与六个面的类索引相等的数量,将这两个score求加权和,然后取加权和最大的时候对应的面的索引作为该点最后的类索引;

V. sehmentPatches:对于一个点,将它放进连通分支,并标记为已遍历,查找到它的邻近点作该连通分支的备选部分,如果邻近点的索引与该点的索引一样并且该邻近点没有被遍历过,就将该邻近点也放进此连通分支,并且将此邻近点的邻近点也放进备选部分。所有点都被遍历完,还要判断连通分支里的点的个数是否大于16,大于16才能成为一个正真的连通分支。连通分支划分完毕,则一个连通分支对应一个patches,为每个patch计算bounding  box和两层深度;

2.    GenerateOccupancyMap:对于每个patch上的每个点,根据他的深度得到该点的occupancyMap,若该点的深度小于infiniteDepth,则该点的occupancymap为1,f否则为0。因为在sehmentPatches里将不存在的点和一些不符合深度条件的点的深度设为了infiniteDepth。

3. GenerateIntraImage:layer中的第一层,对于每个patch上的每个点,根据他的深度得到该点的occupancyMap,若该点的深度小于infiniteDepth,则给几何图像上的对应点赋值,即深度值;

4. PredictGeometryFrame:layer中的第二层,以上一步过程生成的几何图像作为参考图像,将得到的值与参考图像中对应位置的值做差,将此差重新赋给第二层几何图像。

5.    Dilate:如果一个16*16的块中非零像素的个数为0 ,则分三种情况进行填充:

I.如果有参考图像,则用草考图像对应位置的值进行填充;

II. 如果没有参考图像且该块不在第一列,就用水平方向上的前一个点的值进行填充。

III.如果没有参考图像且该块不在第一行,就用竖直方向上的前一个点的值进行填充。

如果非零像素的个数大于零且小于16*16,则用4个邻近点的均值尽心填充。

二.   videoGeometry.compress

直接调用外部encoder.exe进行编码;

三.   CompressOccupancyMap

1.对于每个patch,编码基准位置和占用的起始T*T块的位置;编码前后两个patch的T*T块的跨度之差;编码该patch的面索引;

2.为patch构造候选列表,对于每个T*T块,为其对应的patch索引在候选列表找到其位置,对此位置进行编码;如果没有找到,则直接编码该块对应的patch索引;

3.将T*T块分成16个4*4的子块,并定义四种扫描方式。对于每个T*T块,如果他对应的patch索引值不为0,则判断他16个4*4子块的占用情况,对于4*4中的16个点来说,只要有一个点的occupancymap是等于1,就将此子块称为full,否则为non-full;如果一个16*16块中full的子块个数为16,则将此块的occupancy赋为1,并将1进行编码,否则,此块的二进制值赋为0,对0进行编码,除此之外,还要在四种遍历顺序种选择一种使runlength的个数最小的遍历顺序对子块的二进制值进行遍历。Run指的是在遍历序列中连续1或者连续0的长度。编码最优遍历顺序的索引,编码第一个子块的occupancy,编码每一个runlenth.

四.  GeneratePointCloud

对于每个patch,对于patch中的每个T*T块,对于每个T*T块中的每个像素,如果该像素的occupancymap的值为1,则恢复出其对应的在点云中的位置;

五.  SmoothPointCloud

对于在上一步生成的点云中的每个点,寻找其邻近点,统计其邻近点中dist2小于平滑半径的点数,并将这些邻近点的位置信息进行累加,如果邻近点中有点的类索引和该点的类索引不一致,并且符合一个距离条件,则将前面累加的邻近点的位置信息求均值,将此均值更新为该点的位置信息,否则不更新位置信息。

六.  ColorApproximation

好像是利用输入的点云帧对上一步平滑后的点云的颜色赋值,看不大懂

七.  GenerateTextureVideo

对于经过上一步处理得到的点云中的每一个点,得到其在二维图像上的对应位置,并将其颜色值覆盖该位置;

八.  Dilate

同几何image中的Dilate;

九.VideoTexture.compress

    同几何image中的compress


 

 


  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值