【问题标题】:Compress image using Huffman coding in Java在 Java 中使用 Huffman 编码压缩图像
【发布时间】:2013-12-02 03:48:04
【问题描述】:

所以,我一直对“图像”的霍夫曼编码压缩感到头疼。

我知道霍夫曼的工作原理并且能够在文本上实现,但是,我不明白如何进一步处理图像。

我有一个灰度图像,我将其转换为二进制字符串,即 1 和 0 现在我可以对字符串执行霍夫曼编码,但是如何压缩图像?

有人可以帮我完成步骤吗?

说将图像转换为字节数组,然后转换为二进制字符串并执行霍夫曼编码,然后再转换回字节并转换为图像,但我不知道该怎么做。

在整个互联网上,我可以在文本上找到霍夫曼编码,他们正在用它制作一棵霍夫曼树,但我不想要一棵树,我想压缩图像。 :(

非常感谢任何与算法相关的帮助。

谢谢(如果您需要更多信息,请告诉我)

【问题讨论】:

  • 你有代码吗?到目前为止,您尝试了什么,具体遇到了什么问题?
  • 所以,我将图像转换为byte array,然后将其转换为binary string,所以我的图像数据为 0 和 1,我被卡住了。我不确定如何对二进制字符串执行压缩并将其转换回图像
  • 所以你已经压缩了文件,你问如何解码呢?
  • 到目前为止,我已经成功地将文件转换为二进制字符串,它没有被压缩。我想学习如何压缩我拥有的二进制字符串,例如1111000110 然后将其转换回图像。 PS:我不确定通过将图像转换为二进制字符串是否正确
  • 如果您可以将您现在拥有的代码添加到您的帖子中,那将非常有帮助。我过去用于霍夫曼编码的方法涉及创建一个二进制堆来表示每个相应值的频率。这样,二进制代码将成为用于遍历堆并找到适当值的模式。

标签: java image image-compression huffman-code


【解决方案1】:

每个像素有多少位?我猜是八只需将每个像素放在一个字节中,然后像使用 Huffman 编码压缩文本一样进行压缩,其中文本也只是一系列字节。

这不会产生很好的压缩效果,除非有大片相同的像素。改进的下一步是进行差异编码。用它和最后一个像素的差异替换每个像素(第一个像素除外)。现在如果图像相对平滑,你应该得到更好的压缩。

然后您可以尝试改进的预测器。请参阅PNG filters,其中上述过滤器称为“sub”。

【讨论】:

  • 每个像素都有一个 8 位灰度的十六进制值。应用霍夫曼编码后,如何保存新的值数组?因为如果我们取整数值,值会很小,但每个值仍然是 8 位,不是吗?
猜你喜欢
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 2014-08-09
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
相关资源
最近更新 更多