运行 长度编码运行是否可以超越像素数据行

Is it ok for Run length encoding runs to transcend rows of pixel data

这个问题是关于用于压缩图像的 RLE 算法(在本例中是封装在 DICOM 文件中)

假设我有一个 50 x 50 像素的像素数据。它表示具有 8 位单一颜色分量的灰度图像(基本上一个字节是单个 8 位像素......这个假设只是为了简单起见,但实际上与问题无关 - 也适用于彩色图像)

要执行此图像的 运行 长度编码,"runs" 定义如下 (按照标准)

复制运行(相同字节序列) - 编码为两字节代码 < -count + 1 > 在哪里 count = 运行 ( 2 <= count <= 128 )

中相同字节的数量

Literal 运行(不重复的字节序列) - 编码为两字节代码 在哪里 count = 序列中的字节数 (1 <= count <= 128 )

题目:

  1. 复制运行文字运行能否超越行和列界限?我是说。在像素数据 50X50 像素的示例中 - 如果我们有前两行白色像素。将前两行编码为 100 字节的副本 运行(-99,<白色像素的值>)是合法的 RLE - 或者它们应该分成两个 运行,每个 50 像素?

  2. 是否有任何事实上的协议在每一行上开始一个新的 运行?

根据 DICOM PS 3.5 2015-b §G.3.1 The RLE Encoder,您不应跨越行边界:

Each row of the image shall be encoded separately and not cross a row boundary.

现在这是对编码器的限制,如果您正在实现通用的 RLE 解码器,请注意某些供应商不执行此限制。这使得在流式传输 RLE 编码 DICOM 文件(=特定区域的部分解码)时处理起来特别痛苦。