深度图无损压缩——RVL算法

深度图无损压缩——RVL算法

RVL算法(Run length encoding and Variable Length encoding)是微软自研的深度图无损压缩算法。论文下载

算法流程

差分编码
正负数重映射
游程编码
变长编码

差分编码

编码规则

d [ t ] = x [ t ] − x [ t − 1 ] d[t]=x[t]-x[t-1] d[t]=x[t]x[t1]

数据还原

x [ t ] = d [ t ] + x [ t − 1 ] x[t]=d[t]+x[t-1] x[t]=d[t]+x[t1]

在这里插入图片描述
  用相邻两个数据的差取代原先的序列,对于平滑的数据,可以大幅压缩其动态范围,如上图所示。

算法细节

  传统图像存储是如下图第一幅图所示,扫描换行时会从头开始,由于深度数据具有局部性,换行会出现距离值的跳跃,增加动态范围。第二幅、第三幅图是对应的优化方式,将深度图以折回扫描的形式“拉直”成一维数据序列,或者从左上到右下的扫描方式。
在这里插入图片描述

正负数重映射

  由于负数对后面无损压缩算法处理不友好,会造成压缩效率下降,所以需要通过某一方法将负数映射到正数。

映射算法

核心思想:将正数映射到偶数,将负数映射到奇数
u = { 2 d , d ≥ 0 − 2 d − 1 , d < 0 u=\left\{ \begin{aligned} 2d, &&{d\ge0} \\ -2d-1,&&{d<0} \end{aligned} \right. u={2d,2d1,d0d<0

//映射代码
int u = (d << 1) ^ (d >> 31)
//反映射代码
int d = (u >> 1) ^ -(u & 1)

游程编码——Run Length Encoding(RLE)

核心思想:检测重复的比特或字符序列,并用它们的出现次数取而代之

传统游程编码

以ASCLL文本压缩为例:
  原始文本:aaaaabbbcdeeeeeeef
  RLE编码:5a3b1c1d7e1f

RVL中的游程编码

在这里插入图片描述

变长编码

编码规则

从低位开始,每3bit位一组,映射成4bit一组的序列,具体如下:

  • 当高位还有数据时,第4bit记录位1
  • 当高位没有数据时,第4bit记录位0

编码示例

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值