5

我正在研究将多个 JPEG图像作为一个更大的图像存储在一起时减少存储空间的问题。基本直觉是图像往往具有一些相似性(例如在相同位置或大约相同时间点拍摄的图像),我们可以利用这种相似性来节省空间吗?

整体流程是:输入JPG图像 -> 将每个图像转换为RGB图像块 -> 将相似RGB的块重新组织在一起 -> 再次转换为JPG格式。自然,在检索图像时,我们需要反转该过程。

使用 Y 分量的 DC 系数作为平铺重组的相似性度量,我为 10 幅图像节省了约 8% 的空间。当我为 100 张图像执行此操作时,节省的费用减少到 ~3%。

  • 如何在拼贴重组后节省成本 - 即 JPEG 编码过程的哪一部分利用了这种图像拼贴重组?

  • 除了 Y 分量的 DC 系数,还有其他一些您能想到的指标可以更好地被 JPEG 编码利用吗


修改:

在聚合多个图像时,除了 JPG 之外,还有其他图像格式可以更好地利用这种相似性吗?例如像PNG?

4

2 回答 2

5

您很可能正在使用 JFIF 进行编码。

我不确定您希望这种方法如何工作。如果我理解正确,您将图像拆分为图块,将它们聚合成一个巨型图像,“相似”图块彼此靠近排列。

AFAIK,JPEG 实现对图像中的每个 8x8 瓦片执行单独的 DCT,称为宏块。换句话说,JPEG 不能利用相邻宏块之间的一致性(这似乎是您的压缩技术的基本假设)。

如果您自己的图块大于宏块,则除了节省图像标题空间之外,您不会看到任何改进。

例如:将 10 个 JPG 图像标题替换为 1 将为您节省 90% 的空间,但仅在 header 中。当您查看整个文件时,标题只是整个文件的一小部分,因此您节省的空间是微不足道的。将 100 个图像标题替换为 1 时,您可以节省 99%,但同样只是在标题上。在这两种情况下,所有宏块仍然像以前一样被编码和存储。

于 2013-03-07T13:27:38.887 回答
2

您将在两个方面看到好处:

首先,当您将相似区域彼此相邻放置时(特别是如果图像的边缘完美匹配且没有不连续性 - 尽管这种情况非常罕见),jpeg 算法的 DCT(频率空间)部分通过逐步逼近大-ish 区域(不确定最大的大小是多少),然后查看大区域和多个较小区域的近似之间的误差,并产生更多的定位校正。

我怀疑这种影响很小,除非您的图像非常相似或非常小(因此它们的边缘与它们的面积成比例)。

其次,jpeg 压缩的Huffman 编码部分将受益,因为相同的位模式会出现在多个子图像中,并使用相同的(短)令牌进行压缩)。

这方面不会取决于您压缩图像的排列方式 - 只要它们在同一个图像中。

于 2013-03-07T13:06:56.267 回答