我正在寻找一些图像压缩操作,最好是简单的,提供适度的压缩比,同时保留图像中的边缘。
请注意,包含多个操作的JPEG等算法不适用(不幸的是)。
答案 0 :(得分:0)
如果你正在使用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位)打包在一起的方法,这肯定会妨碍您读取和写入单个像素值的能力。