algorithm - 反向 "jpeg"压缩算法?

标签 algorithm compression intel-ipp

我必须编写一个工具来管理非常大的数据集(好吧,对于普通工作站来说很大)。我基本上需要一些与 jpeg 格式相反的东西。我需要数据集在磁盘上完好无损,它可以是任意大的,但是当它在内存中读取时需要进行有损压缩,并且只有在任何给定时间使用的子部分需要在飞行中解压缩。我已经开始研究 ipp(Intel Integrated Performance Primitives),但目前还不清楚我是否可以将它们用于我需要做的事情。 谁能指出我正确的方向?

谢谢。

最佳答案

鉴于您的数据的性质,您似乎正在处理某种原始样本。 因此,最简单和最通用的“有损”技术将是降低较低的位,降低精度,直到达到您想要的水平。

请注意,您需要“舍弃低位”,这与“舍入到 10 的下一个幂”完全不同。计算机以 2 为基数工作,您希望所有低位都为“00000”,以便尽可能好地执行压缩。该方法假设所选压缩算法将使用可预测的 0 位模式。

另一种更复杂、更具体的方法可能是将您的值作为索引转换到表中。优点是您可以在需要的地方“定位”精度。明显的缺点是该表将特定于分布模式。

最重要的是,您也可以不存储值本身,而是存储值与其前一个值的增量(如果它们之间存在任何类型的关系)。这也有助于压缩。

对于要压缩的数据,您需要将它们按适当大小(例如 64KB)的数据包“分组”。在单个字段上,没有任何压缩算法会给您合适的结果。反过来,这意味着每次您想要访问一个字段时,您都需要解压缩整个数据包,因此最好根据您要对其执行的操作进行调整。在这种情况下,顺序访问更容易处理。

关于压缩算法,由于这些数据将是“实时的”,您需要非常快的东西,以便访问数据的延迟影响非常小。

有几种开源替代品可用于该用途。为了更轻松地进行许可证管理,我建议使用 BSD 替代方案。由于您使用 C++,因此以下内容看起来很合适: http://code.google.com/p/snappy/http://code.google.com/p/lz4/

关于algorithm - 反向 "jpeg"压缩算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8857851/

相关文章:

CUPS 状态更改订阅

java - 重建哈夫曼树进行解码

javascript - 将数字添加到给定的N中时找到最大值(JavaScript)

Tomcat 7 GZIP 压缩不起作用

java - 在 Java 中序列化和压缩对象的性能成本

video - 压缩来自智能手机的视频

opencv - 如何通过在频域中指定感兴趣区域来加速 DFT

java - 当我实现快速排序方法时堆栈溢出

arrays - 需要一种算法来找到数组中 5 个整数的所有子集,其总和在给定范围内

c - 如何使用 IPP 将 RGB 转换为 NV12 颜色空间