【发布时间】:2018-05-17 02:38:13
【问题描述】:
我正在寻找一些图像压缩操作,最好是本质上简单的,它们提供适度的压缩比,同时保留图像中的边缘。
请注意,像 JPEG 这样打包多个操作的算法不适用(很遗憾)。
【问题讨论】:
-
您有什么要求?您需要以编程方式进行吗?您需要支持的格式吗?你是如何存储它的?
-
PNG 压缩是无损的。
标签: compression image-compression
我正在寻找一些图像压缩操作,最好是本质上简单的,它们提供适度的压缩比,同时保留图像中的边缘。
请注意,像 JPEG 这样打包多个操作的算法不适用(很遗憾)。
【问题讨论】:
标签: compression image-compression
如果你使用的是 numpy,建议你看看 scipy.misc.imsave 方法
https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.misc.imsave.html
您可以轻松地将数据存储在 png 中而不会造成任何损失,并且压缩比在您在评论中提到的范围内,例如,
rgb = np.zeros((255, 255, 3), dtype=np.uint8)
rgb[..., 0] = np.arange(255)
rgb[..., 1] = 55
rgb[..., 2] = 1 - np.arange(255)
imsave('/tmp/rgb_gradient.png', rgb)
在评论 1 后编辑: 由于缺乏细节,这个问题真的很难回答。
在内存中保留图像的压缩版本肯定会减慢您的处理速度,因为您需要在每次操作中对图像的相关部分进行解码和编码,或者您需要使用非常具体的算法来允许您访问和修改压缩域中的像素值(例如,http://ieeexplore.ieee.org/document/232097/)。
现在,要回答您的问题,我能想到的最简单的方法是使用霍夫曼编码 (https://www.geeksforgeeks.org/greedy-algorithms-set-3-huffman-coding/) 并将代码字存储在内存中。您可能需要将像素组编码在一起,以便代码字的每个字节产生多个像素(因此您可以进行任何真正的压缩)。否则,您需要找到一种有效地将小代码字(例如 2 或 3 位)打包在一起的方法,这肯定会妨碍您读取和写入单个像素值的能力。
【讨论】: