天天看點

信源編碼學習(一)彩色空間及音頻信号初入門第一章節 音頻語音圖像視訊的初入門

第一章節 音頻語音圖像視訊的初入門

1. 顔色空間及YUV詳解

參考自:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html以及

               http://blog.csdn.net/decisiveness/article/details/52301629

     RGB和YUV都是色彩空間,用于表示顔色,兩者可以互相轉化。 YUV(亦稱YCrCb)是被歐洲電視系統所采用的一種顔色編碼方法(屬于PAL)。YUV主要用于優化彩色視訊信号的傳輸,使其向後相容老式黑白電視。與R GB視訊信号傳輸相比,它最大的優點在于隻需占用極少的帶寬(RGB要求三個獨立的視訊信号同時傳輸)。

中”Y”表示明亮度(Lumina nce或Luma),也就是灰階值;是個基帶信号。而”U”和”V”表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顔色。U和V不是基帶信号,它倆是被正交調制了的。

    “亮度”是通過RGB輸入信号來建立的,方法是将RGB信号的特定部分疊加到一起。”色度”則定義了顔色的兩個方面-色調與飽和度,分别用Cr和CB來表 示。其中,Cr反映了RGB輸入信号紅色部分與RGB信号亮度值之間的差異。而CB反映的是RGB輸入信号藍色部分與RGB信号亮度值之同的差異。。通過運算,YUV三分量可以還原出R(紅),G(綠),B(蘭)。

     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)

    YCbCr

         YCbCr 是在世界數字組織視訊标準研制過程中作為ITU - R BT1601 建議的一部分, 其實是YUV經過縮放和偏移的翻版。其中Y與YUV 中的Y含義一緻, Cb , Cr 同樣都指色彩, 隻是在表示方法上不同而已。在YUV 家族中, YCbCr 是在計算機系統中應用最多的成員, 其應用領域很廣泛,JPEG、MPEG均采用此格式。一般人們所講的YUV大多是指YCbCr。

YCbCr與RGB的互相轉換

     Y=0.299R+0.587G+0.114B

     Cb=0.564(B-Y)

     Cr=0.713(R-Y)

     R=Y+1.402Cr

     G=Y-0.344Cb-0.714Cr

       B=Y+1.772Cb

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]

轉換公式代碼:

void rtRGB2YUV(RtScalar rgb, RtScalar& yuv)  
{      
    yuv.val[0] = 0.299*rgb.val[0] + 0.587*rgb.val[1] + 0.114*rgb.val[2]; // y  
    yuv.val[1] = -0.147*rgb.val[0] - 0.289*rgb.val[1]+ 0.436*rgb.val[2]; // u  
    yuv.val[2] = 0.615*rgb.val[0] - 0.515*rgb.val[1] - 0.1*rgb.val[2]; // v  
}  
  
// YUV轉換為RGB  
void rtYUV2RGB(RtScalar yuv, RtScalar& rgb)  
{  
    rgb.val[0] = yuv.val[0] + 1.14*yuv.val[2]; // r  
    rgb.val[1] = yuv.val[0] - 0.39*yuv.val[1] - 0.58*yuv.val[2];   
    rgb.val[2] = yuv.val[0] + 2.03*yuv.val[1];   
}  
           

2.音頻

          音頻編碼

         從資訊論的觀點來看,描述信源的資料是資訊和資料備援之和,即:資料=資訊+資料備援。音頻信号在時域和頻域上具有相關性,也即存在資料備援。将音頻作為一個信源,音頻編碼的實質是減少音頻中的備援。

根據編碼方式的不同,音頻編碼技術分為三種:波形編碼、參數編碼和混合編碼。一般來說,波形編碼的話音品質高,但編碼速率也很高;參數編碼的編碼速率很低,産生的合成語音的音質不高;混合編碼使用參數編碼技術和波形編碼技術,編碼速率和音質介于它們之間。

通常我們采用的是脈沖代碼調制編碼,即PCM編碼。PCM通過抽樣、量化、編碼三個步驟将連續變化的模拟信号轉換為數字編碼。

簡單講,其實就是将采集到的音頻模拟信号,經過一定的轉換,變成友善在信道中傳輸的數字信号。在不同的使用場景,也許會使用不同的編碼方式,那麼音頻品質、碼率、安全系數等都不一樣。

          Wav

    Wav全稱是Wave,就是将音頻檔案的波形完整記錄。而波形的存在,可以想象為是折線圖一般的東西。想記錄波形,就需要兩個最基本的參數:

     1.1 采樣率:我們以怎樣的頻率記錄波形的變化。44.1KHz,意味着每秒選取44100個采樣點;

 出于曆史原因,所有CD一律采用44.1KHz,而DVD/BD視訊音軌一律采用48KHz。是以不出意外,你聽到的那些音樂都是44.1KHz,而你看的視訊,它們的音頻一般都采用48KHz的采樣率。原則上更高的采樣率更為精準,但是一般認為44.1KHz就接近人耳極限了。

1.2深度,我們用多少位元組的儲存量來儲存音頻波形。下圖是在圖像領域16色深和4色深的差別,音頻領域同樣适用。一般采用的是16bit,及更高的24bit,再高的深度意義不大。

轉自:http://blog.csdn.net/pi9nc/article/details/12570841

wav是微軟開發的一種音頻檔案格式.

它符合它符合RIFF(Resource Interchange File Format)檔案規範,用于儲存Windows平台的音頻資訊資源,

被Windows平台及其應用程式所廣泛支援。

标準化的wav檔案都是44.1k的采樣率,采用16位的數字表示。

但是我們的成了裡面采樣率是16k的,采用16為的數字表示。

wav檔案分為兩個部分,第一個部分是wav頭檔案,第二個部分是PCM編碼的音頻資料部分。

wav頭檔案詳解

下面是摘抄在維基百科的關于riff檔案的定義

RIFF檔案由一個簡單的表頭(header)跟随着多個 "chunks"所組。其格式完全跟IFF一樣,除整數的儲存方式不一樣以外。

表頭(Header)

4 位元組(bytes):固定為"RIFF".

4 位元組:little-endian 32-bit 正整數,整個檔案的大小,扣掉辨識字元和長度,共8個位元組。

4 位元組:這個檔案的型态字元,例如:"AVI " 或 "WAVE".

接下來是區塊(Chunks),每個區塊包含:

4 位元組:此區塊的ASCII識别字,例如:"fmt " 或 "data".

4 位元組:little-endian 32-bit 正整數,表示本區塊的長度(這個正整數本身和區塊識别字的長度不算在内).

不固定長度字段:此區塊的資料,大小等同前一欄之正整數。

假如區塊的長度不為偶數,則填入一個 byte。

信源編碼學習(一)彩色空間及音頻信号初入門第一章節 音頻語音圖像視訊的初入門
信源編碼學習(一)彩色空間及音頻信号初入門第一章節 音頻語音圖像視訊的初入門

繼續閱讀