色彩空间与图像/视频编码

视频工作者倾向于把色彩空间当作视频的内在属性,而图像工作者更多地把它们当作编码工具。Vimeo 的首席视频工程师 Derek Buitenhuis 将介绍色彩空间与图像/视频编码的渊源,包括当前的主流色彩转换方式,未来有趣的方向,并讨论了使用色彩空间作为编码工具的利与弊。

这次演讲的灵感来自于 Jon Sneyers 的一条推特,他是 JPEG-XL 的作者之一。他很正确地指出,视频工作者倾向于把色彩空间当作视频的内在属性,而图像工作者更多地把它们当作编码工具。在这个讲座中,Vimeo 的首席视频工程师 Derek Buitenhuis 将介绍色彩空间与图像/视频编码的渊源,包括:

  • 色彩空间在压缩方面的简要历史和背景
  • 色彩空间目前在压缩方面的用途
  • 未来的用途:有趣的想法、论文,以及一个几乎所有人都会讨厌的想法
  • 在现代编解码器时代,使用色彩空间作为编码工具的利与弊–它到底有没有用?

色彩空间

下面将快速介绍色彩空间在压缩中的历史和背景,特别是 YIQ 和 YUV(并非 YCbCr)色彩空间,分别来自北美和欧洲。两个色彩空间的 Y 都是基于 CIE Illuminant C 标准,它代表模拟中的标准日光。在 YUV 中,色度(U/V)是相对Y 的归一化色差。然而,YIQ 将 U 和 V 旋转了 33 度,因为 RCAI 的一项观察研究结论是,在这个空间里,它可以进一步降低色度信号。至少有一篇论文声称,选择 33 度是为了密切配合图像上的 PCA,但他们自己的引用甚至都没有支持这个说法,讲者也找不到任何其他东西来支持这一点。我们今天所知道的 YCbCr 就起源于此,至少在视频领域我们一直在使用 YCC 色彩空间。

在图像领域,有可能使用 RGB 输入,因此在存储内容上有更多的余地,可以更灵活地选择编码的颜色空间。有三种色彩转换的方式,有损且非比特精确的 XYB,有损且比特精确的 YCoCg,以及可逆的 JPEG2000-RCT、YCoCg-R 和 mRCT。

有损且比特精确:YCoCg

YCoCg 可能是使用最多的基于压缩的色彩空间。尽管名字里有“Y”,但 YCoCg 中的“Y”与人类视觉完全无关,而是与最大的去相关平面有关。Co 和 Cg 被这样命名,和它们大致留下的橙色和绿色相关。

YCoCg 纯粹是基于作者认为最适合压缩的方法:最大限度地对 R、G 和 B 平面进行去相关。这是通过从柯达的 24 张自然标清 RGB 图像中推导出 KLT(Karhunen Lòeve Transform)来实现的。然后,从 KLT 中得到的 3×3 矩阵被修改了一下,以使其可以通过一些整数操作来实现。因此,它是位精确的,但不是可逆的。它在 JPEG-XR 中使用,并且在 CICP(ISO/IEC 23001-8151)/H.273 中可用。

尽管 KLT 与色彩空间没有直接关系,但这次演讲中的很多东西最终都会以某种方式基于 KLT。它是现代三角变换如 DCT 的鼻祖,它被认为是最大限度对一组数据去相关的黄金标准。如前所述,为每个输入生成不同的矩阵。输入可以是一组帧,而不一定是一个颜色空间,它可以是一个频域变换。

KLT 基于统计学,为每个输入生成一个不同的转换矩阵,基于输入数据协方差矩阵的归一化特征向量,按特征值排序。其中,协方差矩阵是一个对称的 NxN 矩阵(对 RGB 来说是 3×3),包含每对数据的 Pearson 相关系数(R<->G,R<->B,等等)。归一化的特征向量提供了一个正交基,也就是说,得到的向量是相互正交的且归一化的。之所以按特征值排序,是因为它们对应于成分之间最大的协变性。例如,在一个颜色空间中,我们希望 Y 包含大部分的数据,而在频率变换中,我们希望它是 DC 值。

YCoCg 使用 KLT 的方式是相当直接的,但也是相当取巧的。他们对这 24 张 RGB 图像进行了计算,得出了 KLT 矩阵,并将其取整到相近的分数。然后他们对分母进行了一些修改,使得它们都是 2 的幂,并创造了一个非常有计算效率的变换。

图片
YCoCg 的转换矩阵与导出

你可能注意到,中间一排的负号换了边。这是因为在自然图像上,人们注意到负号可能在左边或右边一列,没有特别偏好。YCoCg 论文说它使用的是柯达数据集,讲者根据该数据集生成了 KLT,讲者怀疑他们实际上是从他们引用的一篇论文中复制了 KLT,而不是自己进行计算。

可逆变换:YCoCg-R 与 JPEG2000-RCT

作为编码工具使用的颜色变换的一个理想属性是无损的,也就是说,可以在没有舍入误差的情况下转换回输入的色彩空间。显然,与非可逆变换相比,效率会有轻微损失。这通常是通过使用提升(Lifting)方案来实现的,也就是说,不使用蝶形(),而是使用修改过的 Haar 变换()。因此,我们需要将色度放大 2 倍,使其动态范围增加 1 比特。

基于提升的 YCoCg 被称为 YCoCg-R,被 HEVC-SCC、JPEG-XL 的无损模式和 VVC 使用。YCoCg-R 实际上在 CICP 中,但以一种混乱的方式:如果色度和亮度的位深不同,就会应用它。VVC 实际上放弃了对不同色度/亮度深度的支持,因为它有自己的基于 YCoCg-R 的色彩转换。但 VVC 似乎因为在 RGB 空间进行预测而搞砸了代码实现,也许是一个 VTM bug。JPEG2000-RCT 是类似的,但它是 CCIR 601 的近似值,而不是 KLT。

图片
YCoCg-R 的转换矩阵

这就是 YCoCg-R 的巧妙之处,它的反变换非常有效。它完全基于整数,可以把它变成一种使用蝴蝶的形式。

有损且非比特精确:XYB

像 JPEG-XL 这样的编解码器不想被色彩空间的历史所困扰,简单地做他们认为对压缩和 PQ 最好的色彩空间,比特精确性是该死的,使用浮点数就好。JPEG-XL 的有损模式使用了一个他们称之为 XYB 的色彩空间,它是基于 LMS 色彩空间的。

LMS 是基于人眼中三个锥体在长(L)、中(M)、短(S)波段的敏感性。XYB 色彩空间:X=L+M,Y=L-M,B=S(蓝色)。由于 JPEG-XL 也有色度从低到高的特点,B 在实践中更接近于一个色差通道。没有子采样,但 B 被更多地量化,因为人眼 S 受体的空间密度较小。这似乎是通过浮点完成的,而不是定点计算。作为谷歌的一项发明,似乎没有任何关于 XYB 的具体文献发表。

未来路径

PLHaar 可逆色彩变换

几乎所有使用提升方案的可逆颜色变换都需要动态范围扩展,而 PLHaar 则不需要。它是一个在空间旋转的 Haar 变换,而不是在空间旋转的普通 Haar 变换。这意味着它是连续的,并一对一地映射到自身。这种连续的性质提供了一个很好的属性,即当转换后的数据被量化修改时,该数据的重建应该接近于原始数据,这使得它适合被用来做颜色转换。讲者的测试表明它在无损情况下的效果不如 YCoCg-R 好,但可以尝试有损编码的表现。

这篇论文并没有提供一种方法来直接构建一个色彩空间,但它提供了伪代码。

图片
PLHaar 的伪代码

三角矩阵分解

任何非结构化的线性变换都可以通过三角矩阵分解实现整数可逆,这是一个相当复杂的过程。这个过程可以在线完成,例如,在计算完一个 KLT 之后直接在线完成。虽然是整数可逆的,但其动态范围的扩展是与图像相关的。因此,虽然它可能去相关更好,但这些收益可能会丢失。一个典型的 RGB 图像据说需要扩展 2 个亮度比特来保持无损,而色度没有位深扩展。这里的主要好处是有损编码时解码器的性能:客户端能够使用整数进行色彩转换。尽管如此,这个方法有趣的一点是,对任何非结构化的 NxN 矩阵变换都是可用的。

RDgDb,LDgEb 和 LDgDb

Roman Starosolski 提出了三个新的简单颜色空间,还有基于模数而不是提升方案的可逆的 n 位到 n 位的变体。

  • RDgDb->R=R,Dg=R-G,Db=G-B
  • LDgEb->基于 L 和 M 锥体,是可逆的:L=(R+G)/2,Dg=R-B,Eb=B-L。Eb 代表“过量的蓝色”,使用了一个提升方案。
  • LDgDb->亮度来自 RDgDb,色度来自 LDgEb。

讲者的有限测试表明,在有损和无损模式下,这些色彩空间有时比 YCoCg(-R)要好很多,这取决于不同的图像块。

有趣的一点是,每种色彩空间都包含一个 n 位到 n 位的变体,所以在亮度和色度中没有动态范围的扩展,他们使用基于模数的算术变换而非提升机制。它是基于 JPEG LS 标准中的 mRCT。前向变换使用等距模 2 的 N 次方,在反向变换中只应用常规模 2 的 N 次方。这里的编码效率显然受到了打击。但它仍然相当有趣,因为不是所有东西都能支持动态范围扩展。

图片
RDgDbd 的转换计算

RDLS

Roman 的另一篇论文提到了 RDLS,在所有可逆色彩空间中用一个去噪的提升步骤取代提升步骤,这意味着不是用源平面作为输入,而是用去噪后的源平面作为输入。这个过程是完全可逆的,不过需要在比特流中传输一些数据,告诉解码器如何去噪。

在论文中,他们使用了一组 11 个简单的加权线性平均滤波器,需要发送两个四位数字。在每一步,他们测试所有 11 个滤波器,并根据中值预测和“无记忆熵”选择“最佳”的一个。在真正的编码器中会有实际的成本估算和更好的搜索方式,以及比论文中更好的滤波器。它在编码和解码方面都比较慢,但主要是编码。它可以适用于任何基于提升的变换,而且严格来说是更好的。

图片
RDLS 的转换计算

邪恶的方法

现在有一个邪恶的方法,没有人会去做,但讲者觉得必须把它包括进去。只要在比特流、帧或 tile 层面上将浮点 KLT 传送出去就可以了。大多数正常的色彩空间转换都发生在 GPU 着色器中,它们可以毫无问题地进行 3×3 浮点矩阵转换。这使得在客户端正确渲染颜色变得更加困难,而客户端已经做得不好了。这也将正确渲染颜色的问题转移到了输入过程中的编码器上,这肯定会是一个无休止的赌博。如果编码器的输入内容是 RGB,则效果最好。只要把每个多媒体管道和摄像机都转换为使用 RGB 就可以了。这就是那种会让你在酒吧打架的提议。

不那么邪恶的方法

回顾一下,YCoCg 和 YCoCg-R 是基于自然图像的 RGB 值的 KLT。一个有趣的想法是,对多种类型的图像,如合成图像(桌面,CG 等)重新导出 KLT 矩阵。在编码器中选择编码工具时,在 RGB、YCoCg(-R)和这些新衍生色彩空间中选择一个成本较低的。HEVC-SCC、VVC 和 JPEG-XL 已经有这样的编码路径,用于 RGB 和 YCoCg-R。在开发这些产品的过程中,是否已经尝试过这样的做法?讲者尚未发现相关文章,因为如果你不是 MPEG 的成员,基本上不可能发现。

最终思考

我觉得我们已经放弃了在现代编解码器上使用色彩空间作为编码工具的做法,如果能看到更多新的方法,比如 JPEG-XL 的 XYB,那就更棒了。请使用这些幻灯片结尾处整理的引文(未放出)作为进一步的阅读材料。讲者不清楚追求“最大去相关”在现代编解码器中是否特别有用,因为从跨分量预测到跨分量的熵编码等都是如此。

就像许多编码工具一样,在许多情况下,一个图像/视频/区块/等等用一种颜色变换比另一种更好,看到一个编解码器像这样利用多个颜色空间会很有趣。屏幕编解码器已经这样做了很长时间,或者会有一种基于 ML 的颜色转换。

来源:Global Video Tech Meetup
主讲人:Derek Buitenhuis
内容整理:冯冬辉

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(1)

相关推荐

发表回复

登录后才能评论

评论列表(2条)

  • 8013的头像
    8013 2023年6月24日 下午9:41

    看到您分享的“色彩空间与图像/视频编码”这篇文章,总结的非常好,我刚好也研究这方面的问题,我对Derek Buitenhuis的演讲视频很感兴趣,可以分享一下吗?我做图像的无损压缩,最近刚好在看彩色转换,希望您能提供他的视频,谢谢您的分享。