信源编码(1):色彩空间及音频编码

1.RGB与YUV
     RGB是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统通道之一。
     YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号B-Y(即U)、R-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的

2.YUV和RGB的转换:

       Y = 0.299 R + 0.587 G + 0.114 B
 
      U = -0.1687 R - 0.3313 G + 0.5 B + 128                           (+128将取值范围从-128~127映射到0~255)
 
      V = 0.5 R - 0.4187 G - 0.0813 B + 128


 
      R = Y + 1.402 (V-128)

       G= Y - 0.34414 (U-128) - 0.71414 (V-128)

       B= Y + 1.772 (U-128)

3.YUV(YCbCr)采样格式:

    主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。其中YCbCr 4:1:1 比较常用,其含义为:每个点保存一个 8bit 的亮度值(也就是Y值), 每 2 x 2 个点保存一个 Cr和Cb值, 图像在肉眼中的感觉不会起太大的变化。所以, 原来用 RGB(R,G,B 都是 8bit unsigned) 模型, 每个点需要 8x3=24 bits, 而现在仅需要 8+(8/4)+(8/4)=12bits, 平均每个点占12bits。这样就把图像的数据压缩了一半。

上边仅给出了理论上的示例,在实际数据存储中是有可能是不同的,下面给出几种具体的存储形式:

      (1) YUV 4:4:4

  YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。

  下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  存放的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

      (2) YUV 4:2:2

  每个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率只是4:4:4的一半。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存(例如下面映射出的前两个像素点只需要Y0、Y1、U0、V1四个字节)。

  下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  存放的码流为: Y0 U0 Y1 V1 Y2 U2 Y3 V3

  映射出像素点为:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]

      (3)YUV  4:2:0

  4:2:0并不意味着只有Y,Cb而没有Cr分量。它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是2:1,所以可以说色度的抽样率是4:1。对非压缩的8比特量化的视频来说,每个由2x2个2行2列相邻的像素组成的宏像素需要占用6字节内存。

下面八个像素为:

    [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  [Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]

存放的码流为:

    Y0 U0 Y1 Y2 U2 Y3

  Y5 V5 Y6 Y7 V7 Y8

映射出的像素点为:

    [Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]

    [Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]


4.转换公式代码

  1. void rtRGB2YUV(RtScalar rgb, RtScalar& yuv)    
  2. {        
  3.     yuv.val[0] = 0.299*rgb.val[0] + 0.587*rgb.val[1] + 0.114*rgb.val[2]; // y    
  4.     yuv.val[1] = -0.147*rgb.val[0] - 0.289*rgb.val[1]+ 0.436*rgb.val[2]; // u    
  5.     yuv.val[2] = 0.615*rgb.val[0] - 0.515*rgb.val[1] - 0.1*rgb.val[2]; // v    
  6. }    
  7.     
  8. // YUV转换为RGB    
  9. void rtYUV2RGB(RtScalar yuv, RtScalar& rgb)    
  10. {    
  11.     rgb.val[0] = yuv.val[0] + 1.14*yuv.val[2]; // r    
  12.     rgb.val[1] = yuv.val[0] - 0.39*yuv.val[1] - 0.58*yuv.val[2];     
  13.     rgb.val[2] = yuv.val[0] + 2.03*yuv.val[1];     

5.WAV

       从信息论的观点来看,描述信源的数据是信息和数据冗余之和,即:数据=信息+数据冗余。音频信号在时域和频域上具有相关性,也即存在数据冗余。将音频作为一个信源,音频编码的实质是减少音频中的冗余。
       自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。
       这是一种古老的音频文件格式,由微软开发。WAV是一种文件格式,符合 RIFF (Resource Interchange File Format) 规范。所有的WAV都有一个文件头,这个文件头包含了音频流的编码参数。WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。很多朋友没有这个概念,我们拿AVI做个示范,因为AVI和WAV在文件结构上是非常相似的,不过AVI多了一个视频流而已。我们接触到的AVI有很多种,因此我们经常需要安装一些Decode才能观看一些AVI,我们接触到比较多的DivX就是一种视频编码,AVI可以采用DivX编码来压缩视频流,当然也可以使用其他的编码压缩。同样,WAV也可以使用多种音频编码来压缩其音频流,不过我们常见的都是音频流被PCM编码处理的WAV,但这不表示WAV只能使用PCM编码,MP3编码同样也可以运用在WAV中,和AVI一样,只要安装好了相应的Decode,就可以欣赏这些WAV了。
       WAV文件通常采用的音频编码方式是脉冲编码调制(PCM)。因为WAV格式源自windos/intel环境,因而采用的Little Endian字节顺序存储。
       WAV文件容量=(采样频率 ×采样位数 ×声道)×时间/8 (1字节=8bit)
       WAV文件由若干个帧组成。按照在文件中的出现位置包括:RIFFWAVE帧、Format帧、Fact帧(可选)、Data帧。
信源编码(1):色彩空间及音频编码_第1张图片

除了Fact帧外,其他3个帧都是必须的。每个帧有各自的ID,位于该帧最开始位置,均为4个字节。紧跟在ID后面的是帧的大小,大小为4字节(小端方式)。

  (1)RIFF WAVE

名称

长度

具体内容

ID

4 Bytes

‘RIFF’

Size

4 Bytes

FileLen-8, 整个文件大小-8

Type

4 Bytes

‘WAVE’

  (2)Format

此帧一般情况下为16字节,此时最后附加信息没有;如果为18字节,则最后,多了两个字节的附加信息。

名称

字节数

具体内容

ID

4

fmt

Size

4

1618(数值),

18则最后有附加信息

FormatTag

2

编码方式,一般为0x0001

Channels

2

声道数目,1-单声道,2-

SamplesPerSec

4

采样频率

AvgBytesPerSec

4

每秒所需字节数

BlockAlign

2

数据块对齐单位(每个采样需要的字节数)

BitsPerSample

2

每个采样需要的bit

附加信息

2

附加信息(可选,通过Size判断有无)

  (3)Fact

WAV文件是由某些软件转化而成时可能包含的帧。

名称

所占字节数

具体内容

ID

4

“fact”

Size

4

数值4

data

4

“WAVE”

  (4)Data

保存WAV音频数据的地方。

名称

所占字节数

具体内容

ID

4

“data”

Size

4

 

data

 

WAV音频数据







你可能感兴趣的:(信源编码(1):色彩空间及音频编码)