低熵图像的良好压缩算法
Posted
技术标签:
【中文标题】低熵图像的良好压缩算法【英文标题】:Good compression algorithm for low entropy image 【发布时间】:2016-05-11 12:24:29 【问题描述】:我目前正在尝试进一步压缩一个非常简单的图像。该图像使用 2 组颜色以及每个“像素”1 个字符。每组颜色可能是 16 个选项中的 1 个。因此,我已经将两种颜色组合成每个像素 1 个字节,代表它们。我已经实现了 MTF 和 BWT 编码方法来协助 RLE。我很肯定我可以从中获得更多的压缩,但是我不确定要使用什么算法。我已经尝试过霍夫曼,但是因为图像往往已经很小,并且由于缺乏熵,RLE 压缩了大部分图像,霍夫曼一半时间通过将其解码表添加到文件来增加大小。请注意,这也将在较慢的系统上运行,因此任何非常繁重的算法也可能无法正常工作。
【问题讨论】:
是否可以选择使用定制的压缩算法?这似乎是一个非常特定于用例的问题。 这可能是一个选项,是的,但是我没有这方面的专业知识来专门为此创建自定义算法。 我不明白“使用 2 组颜色”——您的意思是每个像素有 2 种颜色,每种颜色是 16 种可能性中的一种吗?或者每个像素都有一个单一的颜色,要么来自 #1 集,要么来自 #2 集(总共有 32 种可能性)?如果是后者,你只需要 5 位而不是一个完整的字节。 每个像素都是由“背景颜色”和“字符颜色”创建的,背景和字符都可以单独着色。此图像的全色表为 16 色。所以前者是正确的。 澄清一下,由于数据的可预测性,低熵意味着高可压缩性,您的意思是高熵(即完全随机的数据)吗?如果是这样,请注意不可能对高熵(随机或近随机)数据进行任何压缩。 【参考方案1】:首先,听起来您应该分别压缩背景和字符彩色图像。其次,您说“颜色在像素之间不会经常变化”。某些颜色是否比其他颜色“更接近”?即,当颜色从颜色 x 变化时,是否更有可能变为剩余颜色的一小部分?如果是这样,您可以将颜色映射为更接近它们可能更改的颜色,并在编码之前获取差异。然后相同颜色的运行变成零运行,而“下一个”颜色的变化变成一。
一旦你有一个很好的表示为一系列具有大量运行和字节值出现概率倾斜的字节,例如大量的 0 和 1,然后应用 zlib 或 gzip 以利用明显的冗余和偏差。
【讨论】:
您能解释一下分别压缩两种颜色的原因吗?据我所知,在尝试任何主要算法之前,将它们组合在一起可以保证至少 50% 的压缩率 我没看过图片,但从“背景”和“人物”的描述来看,它们听起来不相关。如果它们不相关,那么单独压缩比混合压缩更有效。至于打包成字节,这就是 zlib 的用途。仅包含 0..15 值的字节序列将被 zlib 压缩为每个字节大约 4 位。 并不是说它们不相关。 “字符”在每个像素上覆盖“背景”。因为每个都可以是 16 个字符中的 1 个。因为最多是 15 或 1111 位,那么它们一起最多可以是 11111111 或单个字节。由于这两者往往会一起改变,因此将它们组合在一起可以节省我当前的 RLE 方法。至于 zlib,不幸的是,我在一个没有实现当前压缩方法的平台上执行此操作,因此我必须自己实现或重新实现所有内容。 “相关”意味着背景和角色图像在相同位置具有彼此相似的特征。例如。彩色照片中的红色、绿色和蓝色图像是相关的,因为它们看起来都像是彼此的阴影。 你所说的“因为这两者都倾向于一起改变”是什么意思?以上是关于低熵图像的良好压缩算法的主要内容,如果未能解决你的问题,请参考以下文章
图像压缩基于matlab香农熵和差分进化算法多级图像阈值图像压缩含Matlab源码 2035期
图像压缩基于matlab香农熵和差分进化算法多级图像阈值图像压缩含Matlab源码 2035期
图像压缩基于matlab香农熵和差分进化算法多级图像阈值图像压缩含Matlab源码 2035期