RGB 图像上的游程压缩

问题描述 投票:0回答:2

假设我有一个 3 位颜色深度的 RGB 图像,如下所示。因此,在我的情况下,我的未压缩图像大小将是

width * height * color depth
200 * 200 * 3 = 120000
位。

如果使用游程压缩,图像大小是多少?假设长度使用 1 个字节存储。

这就是我尝试解决它的方法,但我不确定我的解决方案是否正确:

20 * (1 + 3) + 160 * (1 + 3 + 1 + 3 + 1 + 3) + 20 * (1 + 3) = 2080
位。

因此,在我的情况下,压缩比为

uncompressed / compressed = ratio
120000 / 2080 = 57.69

image compression run-length-encoding
2个回答
0
投票

提供的解决方案是正确的。


0
投票

您走在正确的轨道上,但尽管您说过您的 RLE 计数器将是一个字节,但您只分配了一位。 s/1 +/8 +/ 解决了这个问题:

“如果使用行程压缩,图像大小是多少?假设长度使用 1 个字节存储。”

20 * (8 + 3) + 160 * (8 + 3 + 8 + 3 + 8 + 3) + 20 * (8 + 3) = 5720 位

还有另一个小问题,您还需要能够识别比特流何时是颜色索引以及何时是计数器。有两种常见的方法可以做到这一点。最明显的是用 0 位作为颜色索引的前缀,即 0rgb,并用 1 位 1bbbbbbbb 为计数器添加前缀,然后给出

20 * (9 + 4) + 160 * (9 + 4 + 9 + 4 + 9 + 4) + 20 * (9 + 4) = 6760 位

对于具有 4 个或更少颜色的图像,另一种获胜或收支平衡的方法是使用颜色索引本身的两个副本在计数器中转义。因此,对于您的测试图像和 8 个调色板,给出

20* (8 + 6) + 160 * (8 + 6 + 8 + 6 + 8 + 6) + 20 * (8 + 6) = 7280 位

假设要存储 24 位 RGB 调色板颜色,图像中的每种不同颜色还需要 24 位,另外 3 位用于计数器来表示使用了多少个颜色。真实的图像标题包含更多信息。

维基百科有一篇关于 RLE

的好文章

示例图像的压缩比介于 16.5 到 20 之间。

顺便说一句,您的示例图像仅使用两种不同的颜色,因此可以对每个像素进行 1 位编码。 (然后通过重复一种颜色在柜台中逃脱效果相当好)

© www.soinside.com 2019 - 2024. All rights reserved.