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

Posted

技术标签:

【中文标题】运行长度编码运行是不是可以超越像素数据行【英文标题】:Is it ok for Run length encoding runs to transcend rows of pixel data运行长度编码运行是否可以超越像素数据行 【发布时间】:2015-05-27 11:15:26 【问题描述】:

这个问题是关于用于压缩图像的 RLE 算法(在这种情况下封装在一个 DICOM 文件中)

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

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

复制运行(相同字节的序列) - 编码为两字节代码 在哪里 count = 运行中相同的字节数(2

Literal Run(非重复的字节序列) - 编码为两字节代码 在哪里 count = 序列中的字节数 (1

问题:

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

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

【问题讨论】:

当然@CodeCaster - 我想应该可以将图像视为一维字节流,以便 RLE 编码 - 解码。 RLE 似乎不依赖于图像的二维属性。这两个维度在渲染时或可能与考虑这些维度的那些压缩有关,但对 RLE 编码解码没有影响。但是,我试图了解是否由于我看不到的某些事情而存在事实上的做法。 【参考方案1】:

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

图像的每一行都要单独编码,不能跨行 边界。

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

【讨论】:

以上是关于运行长度编码运行是不是可以超越像素数据行的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中,使用 rle(运行长度编码)的结果,包括命名的行和列标题

使用 Tensorflow 数据集解码 RLE(运行长度编码)掩码

运行长度或连续相同值编码的 SQL 查询

有啥方法可以计算字符串的像素长度?

运行长度编码二维数组

Python 的运行长度编码输出