H.264 探索 第一部分 色彩模型
目前,我正在做的H.264视频信号解码相关的一些研究工作。所以,我决定我的第一篇献给色彩模型。因为如果我们抛开一切不必要的(现在)的信息 - 我们将看到,解码视频信号将规约为一个问题:如何从比特流中提取出像素颜色?
什么是数字信号?就像在数字世界中的一切 - 这是位序列。它可以储存,复制,传播或压缩。
视频是一组图片,每一个图片是由像素组成的。和每一个像素具有其自己的色彩和/或亮度,并以数字形式存储此值。让我们看看,我们怎么可以存储色彩值。这通过色彩模型(色彩空间)来实现的.什么是色彩模型?它是一个数学模型,通过数字序列来表示色彩。让我们先从最流行 的一种开始。
1.RGB模型
看看下面的图片,这是众所周知的RGB合成模型。
任何颜色可以在三个数字来表示。例如(255,0,0)表示红色。很清楚,但不是很实用:我们需要知道所有三个数字以重建颜色。我们肯定需要更高效的模型,并且存在这种模型。
2.YCbCr色彩模型
那么,如何更有效地用数字代表色彩?
假设我们用luminance代码色彩亮度,那么我们可以用RGB来表示,
Y = krR + kgG + kbB
其中 Y – luminance (luma),
k – 权重 (described in ITU-R BT.601-7 recommendation)
接下来计算计算色度(色差)表示的色彩信息:
Cr = R - Y
Cg = G - Y
Cb = B - Y
现在我们可以从ITU-R BT.601-7 recommendation获得权重,跳过一些数学计算,得到以下公式:
Y = 0.299R + 0.587G + 0.114B
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y - 0.344Cb - 0.714Cr
现在我们可以用亮度和两个色差来代表任何色彩。
所以,我们有什么?代表一种颜色在YCbCr模型我们需要3个数字。代表相同颜色的RGB模型我们需要…等一下- 3数字。但是为什么YCbCr应该更有效率呢?
要回答这个问题,让我们视频分割成图片,检查其中一张图片。这张照片由像素组成。像这样:
图片由一个像素集合组成:
技巧在于:我们可以不牺牲视觉损失的情况下减少色差值。例如,我们可以这样表示我们的图片:
一行里的每个像素都luma(亮度),奇数列有两个色差值.我们仍然可以在减小数据量的同时获得相同的质量.我们甚至可以这样做:
这一个是真正的低成本二次抽样,并且质量依旧优良.可以没有质量显著损失的情况下大大降低图片的大小。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。