原文地址html
目前,我正在作的H.264视频信号解码相关的一些研究工做。因此,我决定个人第一篇献给色彩模型。由于若是咱们抛开一切没必要要的(如今)的信息 - 咱们将看到,解码视频信号将规约为一个问题:如何从比特流中提取出像素颜色?spa
什么是数字信号?就像在数字世界中的一切 - 这是位序列。它能够储存,复制,传播或压缩。code
视频是一组图片,每个图片是由像素组成的。和每个像素具备其本身的色彩和/或亮度,并以数字形式存储此值。让咱们看看,咱们怎么能够存储色彩值。这经过色彩模型(色彩空间)来实现的.什么是色彩模型?它是一个数学模型,经过数字序列来表示色彩。让咱们先从最流行 的一种开始。视频
看看下面的图片,这是众所周知的RGB合成模型。htm
任何颜色能够在三个数字来表示。例如(255,0,0)表示红色。很清楚,但不是很实用:咱们须要知道全部三个数字以重建颜色。咱们确定须要更高效的模型,而且存在这种模型。blog
那么,如何更有效地用数字表明色彩?
假设咱们用luminance代码色彩亮度,那么咱们能够用RGB来表示,图片
Y = krR + kgG + kbB
其中 Y – luminance (luma),
k – 权重 (described in ITU-R BT.601-7 recommendation)get
接下来计算计算色度(色差)表示的色彩信息:数学
Cr = R - Y Cg = G - Y Cb = B - Y
如今咱们能够从ITU-R BT.601-7 recommendation得到权重,跳过一些数学计算,获得如下公式:it
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(亮度),奇数列有两个色差值.咱们仍然能够在减少数据量的同时得到相同的质量.咱们甚至能够这样作:
这一个是真正的低成本二次抽样,而且质量依旧优良.能够没有质量显著损失的状况下大大下降图片的大小。