超快速2倍有损音频/图像压缩算法?

时间:2019-02-02 13:53:33

标签: compression image-compression

我正在寻找一种音频或图像压缩算法,该算法可以压缩16位样本的洪流

  • 相当可预测的数量(2-3倍)
  • 非常快(例如,每个样本最多60个周期:> 100MB / s)
  • 有损是可以接受的,但当然是不希望的

我的数据具有图像和音频的特征(二维,在两个维度上都是相关的,并且在一个维度上具有类似音频的特征),因此音频或图像的算法可能都适用。

一个明显的尝试是这种一维算法:

  • 将数据分成64个样本的片段
  • 测量这些样本之间的值范围(例如,一个段中样本可能介于3101和9779之间,相差6678)
  • 再使用2到4个字节来编码范围
  • 将该段中的每个16位样本线性下采样为8位。

例如,我可以在16位中存储3101,并在8位中存储缩放因子ceil(6678/256) = 27,然后将每个16位样本转换为s8 = (s16 - base) / scale的8位,其中{{1} },其明显的解压缩“算法”为base = 3101 + 27>>1, scale = 27。)压缩率:128/67 = 1.91。

为了避免除法运算,我想出了一些主意,但是现在还没有人发明一种比保真度更好的超快算法吗?

注意: this page表示,FLAC以s16 = s8 * 27 + 3101的速度每秒压缩2200万个样本(44MB / s),这相当不错(假设其实现仍然是单一的-threaded),如果对于我的应用程序来说还不够的话。 Another page表示,FLAC具有与其他3个编解码器类似的性能(在3.4GHz i3-3240,-q5上为40MB / s),具体取决于质量水平。

1 个答案:

答案 0 :(得分:1)

看看PNG filters,以获取如何梳理相关性的示例。最明显的过滤器是“ sub”,它简单地减去连续的样本。差异应更集中在零附近。然后,您可以通过lz4之类的快速压缩程序运行该文件。如果其他过滤器选择可以在其他维度的相关性中找到优势,则可能会导致零附近的聚类更好。

对于有损压缩,您可以先压缩差异,然后再压缩一些低位,直到获得所需的压缩,然后仍然保留要保留的数据的特征。