Operator PackbitsRLE

Operator Library: Prototype

[Caution] 免责声明

Library: Prototype

此模块是 Prototype 库的一部分。 它处于完全初步的状态,可能会发生重大更改甚至被移除。 因此,不得将此模块用于生产设计。 它仅包含在内用于测试目的。

PackbitsRLE 算子使用 packbits 算法对输入链路 I 处的图像流执行游程编码压缩 (RLE)。 Packbits 最初由 Apple 引入,是可用于 TIFF 文件无损压缩的 RLE 压缩算法之一。

Packbits 算法

光栅图像文件由一个标头(包含图像尺寸、色彩深度等信息) 和描述每个像素颜色的数据组成。 数据按顺序写入,即像素颜色信息必须被解释为从左到右、 从上到下的像素行。

在未压缩模式下,相同颜色的 n 个相邻像素的颜色信息会写入 n 次。这会导致冗余。

示例:

该图表示一个 4 像素乘 4 像素的黑白图像。 在未压缩格式中,像素表示如下(B=黑色,W=白色): BBWWWBBBBBBWWWWW 这种冗余通过 packbits 压缩得以减少。

packbits 数据流由带有单字节标头后跟数据的包组成。 标头是有符号字节。

数据用一个字节描述每个像素。如果标头包含值 n {-127 到 -1},则标头后面的字节 在解压输出中重复 -n+1 次。 因此,冗余信息(相同的像素颜色)与 Counter(标头)一起存储一次。 例如,BBBBBB 将存储为 -6B。 对于另一种颜色的第一个像素,会生成一个新的标头。

如果标头包含值 n {0 到 127},则标头后面的 n+1 个字节将保持未压缩状态(按字面意思复制)。

可以压缩的最长像素系列由 128 个字节组成。

使用 packbits 压缩后,上面的示例图像 (BBWWWBBBBBBWWWWW) 变为 -2B-3W-6B-5W,即可以用 8 个符号(字节)而不是 16 个来表示。

[重要] 效率

Packbits 用于灰度图像、调色板图像和双色调图像。 连续颜色相同的像素数量越多,算子压缩数据的效率就越高。 双色调(例如黑白)图像可实现最佳压缩效果。

(非常简单的)packbits 算法的优点在于其速度快,并且 对 Memory(256 字节)和处理能力的需求极低。

I/O Property

Property 值
Operator Type M
Input Link I,数据输入
Output Link O,数据输出

Supported Link Format

Link Parameter Input Link I Output Link O
Bit Width [4, 12] as I
Arithmetic {unsigned, signed} as I
Parallelism 1 as I
Kernel Columns any as I
Kernel Rows any as I
Img Protocol VALT_IMAGE2D as I
Color Format any as I
Color Flavor any as I
Max. Img Width any as I1
Max. Img Height any as I

1

输出图像宽度不得超过 2^31 - 1。

参数

无

使用示例

以下示例展示了 PackbitsRLE 算子的使用: