颜色空间 - RGB和YCbCr问题

3

我现在正在尝试了解JPEG编码的工作原理,除了颜色转换部分之外,一切都很顺利。

在尝试进行JPEG算法中的DCT之前,图像被转换为YCbCr颜色空间。对我来说,这基本上意味着我们只是(与最初的RGB图像相比)取一块颜色信息并在应用RGB -> YCbCr变换时将其丢弃。

因此,我们的编码步骤通常看起来像RGB -> YCbCr -> DCT -> Huffman。解码意味着反转这个过程。

我的问题是 - 为什么图像(例如,创建并导出到JPEG)在颜色方面保持不变,尽管我们必须进行反向YCbCr -> RGB转换。丢弃的颜色信息部分从哪里来或如何处理?

2个回答

3
对我来说,这基本上意味着我们只需(与初始RGB图像相比)取一块颜色信息并在应用RGB-> YCbCr转换时将其处理掉。
变换本身不会丢失任何信息。从数学意义上讲,该变换是可逆的。例如,如果您将颜色转换为YCbCr并将结果转换回RGB,则会得到相同的颜色。在完美的世界中,毕竟如此。
实际上会有信息损失。假设您从RGB开始有三个字节。如果您转换为YCbCr,则会得到三个值,其中两个即Cb和Cr不再适合8位。从技术上讲,两种表示RGB和YUV具有不同的色域(参见http://en.wikipedia.org/wiki/Gamut
幸运的是,这种信息损失很少是可见的。重要的侧面注释:这种色域问题是一种不需要使用YCbCr的选择而产生的不良副作用。
使用YCbCr的目的是,存储在Y中的数据最重要。它是亮度或灰度值。Cb和Cr中的数据是颜色信息,其中亮度被减去。现在我们的眼睛不太擅长挑选颜色的微小差异,但对强度的阴影很敏感。为了利用这一点,在jpeg中,只存储了Cb和Cr的低分辨率图像,而Y以完整分辨率存储。有不同的方法来做到这一点,其中最常见的方法是在x和y中从Cb和Cr中留出每个其他像素。这将使Cb和Cr的空间要求减少四倍。
“丢弃的颜色信息来自哪里或如何处理它”
它不会神奇地回来。信息永远丢失。然而,由于该信息并不那么重要,因此我们看不到太多伪影。
在jpeg中,Cb和Cr平面的遗漏像素通过再次放大Cb和Cr平面来近似。有些解码器只是通过选择邻居来复制缺失的像素,而其他解码器则进行线性插值。

1

RGB转YCbCr是一种确定性、可逆的数学变换。因此,没有“disposed”部分。

换句话说——一个RGB像素与同样信息的YCbCr像素相同,就像“A”和“01000001”是相同信息的两个不同编码方式。

澄清:常见情况是在YCbCr -> DCT变换之间进行色度下采样,这种情况下会丢失信息,但根据所用算法(质量设置),下采样步骤可能是“无”的。


在颜色转换和DCT之间还有量化阶段,如果给定了全1的DQT段,它可以是无损的。 - matja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接