深度图像压缩到最大允许误差

jap*_*iss 10 compression algorithm image data-structures

有关图像压缩的文章通常侧重于在给定固定压缩比的情况下生成最佳图像质量(PSNR).我很好奇在给定最大允许的每像素误差的情况下获得最佳压缩比.我的本能是贪婪地删除转换数据中的最小系数,跟踪我引起的错误,直到我不能删除任何更多而不传递最大错误.但是我发现没有任何文件可以证实.谁能指点我对这个问题的参考?


编辑

让我提供一些细节.我正在尝试从3D扫描仪压缩深度图像,而不是常规图像.颜色不是一个因素.深度图像往往具有大的平滑斑块,但精确的不连续性是重要的.某些像素将为空 - 在扫描仪范围之外或低置信度 - 并且不需要压缩.

在此输入图像描述

该算法需要快速运行 - 最佳速度为30 fps,如Microsoft Kinect,或至少在100毫秒区域内的某个位置.该算法将包含在我分发的库中.我更喜欢最小化依赖性,因此我可以在相当少量的代码中实现自己的压缩方案.

Kag*_*nar 1

这个答案不能满足您的参考要求,但作为评论发布太长了。

首先,计算机生成图像的深度缓冲区压缩可能适用于您的情况。通常这种压缩是在硬件级别通过透明接口完成的,因此它通常设计得简单而快速。鉴于此,可能值得您花时间搜索深度缓冲区压缩

使用基于变换的压缩器(DCT、小波等)时遇到的主要问题之一是,没有简单的方法可以找到满足最大硬性误差标准的紧凑系数。(您最终遇到的问题看起来很像线性规划。小波可以在大多数基本向量中具有局部行为,这可以有所帮助,但仍然相当不方便。)为了达到您想要的精度,您可能需要添加另一个细化步骤,但这也会增加更多的计算时间和复杂性,并且会引入另一层不完美的熵编码,从而导致压缩效率的损失。

您想要的是更类似于无损压缩而不是有损压缩。有鉴于此,一种方法是简单地丢弃低于错误阈值的位:如果最大允许错误是 X 并且深度表示为整数,则将深度整数除以 X,然后应用无损压缩。

您面临的另一个问题是深度的表示 - 根据您的情况,它可能是浮点数、整数,也可能位于投影坐标系中,甚至更奇怪。

考虑到这些限制,我推荐像BTPC这样的方案 ,因为它允许更容易适应的类似小波的方案,其中错误更清晰地定位并且更容易理解和解释。此外,BTPC 对多种类型的图像表现出很强的抵抗力,并且能够以较低的保真度损失处理连续梯度和锐利边缘,这正是您正在寻找的特征。

由于 BTPC 是预测性的,因此深度格式的存储方式并不重要——您只需修改预测器以考虑坐标系和数字类型(整数与浮点)。

由于 BTPC 不做太多数学运算,因此它在通用 CPU 上也可以运行得相当快,尽管它可能不像您希望的那样容易矢量化。(听起来您可能正在做低级优化的游戏编程,所以这可能是您认真考虑的问题。)

如果您正在寻找更简单的实现方法,我建议您使用“过滤器”类型的方法(类似于PNG)并绑上Golomb-Rice编码器。您可以编码到“足够好”的程度,而不是完美地编码增量以最终实现无损压缩。与量化然后无损编码风格压缩器相比,这样做的优点是您可以保持更多的连续性。