【发布时间】:2018-07-22 23:02:08
【问题描述】:
我正在从事一个我想做很久的项目。我想制作一个全能的霍夫曼压缩器,它不仅在理论上适用于各种类型的文件,而且我正在用 python:
编写它文本 - 出于显而易见的原因,这是最容易实现的文本,已经完成,效果非常好。
图像 - 这是我苦苦挣扎的地方。我不知道如何处理图像以及如何以简单的方式阅读它们,它实际上可以帮助我轻松地压缩它们。 我试过逐个像素地读取它们,但不知何故,它实际上放大了图片而不是压缩它。
我尝试过的: 使用 Image(PIL) 逐像素读取图像,获取列表中的所有像素,创建一个频率表(为每个像素),然后对其进行加密。 问题是,imo,我正在读取每个像素并试图从中制作一个频率表。这样一来,我得到的符号太多了,这导致了太多冗长的霍夫曼代码(超过 8 位)。
我认为我可以通过读取更大的像素集或类似的任何东西来解决这个问题,因为这样我就会有一个更小的代码表,因此哈夫曼代码的长度也会更短。如果我保持这样,理论上我可以得到 255^3 大小的代码表(因为每个像素都是 (0-255, 0-255, 0-255))。
有没有什么方法可以一次读取大量像素(>1 个像素),或者在只需要压缩的情况下有更好的方法来处理图像吗?
感谢大家到目前为止的阅读,特别感谢任何试图伸出援手的人。
已编辑:如果 huffman 是一种非常糟糕的图像压缩算法,您还能想到更好的算法吗?如果需要,我正在做的项目可以针对不同的文件类型采用不同的算法。
【问题讨论】:
-
您的意思是您读取了一个整个像素,在其完整的 24 位荣耀中,并且您正在从中制作频率表吗?
-
@harold 我想是的。我在 python 中使用库 PIL,并通过 img[i, j] 访问每个所谓的“像素”
标签: image compression huffman-code