1. 程式人生 > >視訊壓縮的基本原理,一些常見壓縮演算法的概念

視訊壓縮的基本原理,一些常見壓縮演算法的概念

對於演算法研究而言,本身就是要先知道哪個地方可以努力,哪些地方行不通。這些原理,就是指明方向的。

一.視訊壓縮的可行性

1.空間冗餘

一幅靜態影象,比如人臉。背景,人臉,頭髮等處的亮度,顏色,都是平緩變化的。相鄰的畫素和色度訊號值比較接近。具有強相關性,如果直接用取樣數來表示亮度和色度資訊,資料中存在較多的空間冗餘。如果先去除冗餘資料再編碼,表示每個畫素的平均位元數就會下降,這就是通常說的影象的幀內編碼,即以減少空間冗餘進行資料壓縮。

2.時間冗餘

視訊是時間軸方向的幀影象序列,相鄰幀影象的相關性也很強。通常用降低幀間的方法來減少時間冗餘。採用運動估計和運動補償的技術滿足解碼重建影象的質量要求。

3.符號冗餘

用相同碼錶示概率不同的符號,會造成位元數的浪費。比如10,11,13三個數,如果我們都用1bytes來表示,就是3bytes(即3×8 = 24bits),但是如果我們表00b表示10,01b表示11,02b表示13,這樣,三個數合起來才用了6bits,較之前可以節省18bits。

可變長編碼技術的原理就如此,概論大的用較短的碼字,概率小的用較長的碼字。

4.結構冗餘

對於影象內部,各個部分也存在某種關係。我們可以通過這種關係,減少資訊的碼字表達。比如:分形影象編碼

5.視覺冗餘

1),人眼對彩色訊號的亮度解析度高於色彩解析度,比如rgb-->yuv就是這個原理

2),人眼對靜止影象的空間的解析度大於運動影象的解析度。

3),人眼對亮度的細小變化不敏感

4),中心敏感,四周不敏感。

其實我們雖然知道了這些,我們知道有冗餘,但是如何把這些冗餘找出來,是個很複雜的過程。也是我們的演算法不斷追求的過程。

上面的一段,是所有視訊壓縮標準的基石。mpeg2,mpeg4,h264,h265這些標準,與其說他們是標準,不如他們提供了一些演算法的組合,或簡單或複雜,當然簡單的演算法壓縮掉的冗餘小,複雜的壓縮掉的冗餘大。通過演算法找到冗餘資訊在哪,然後壓縮掉,實現資料量的減小。這就是我們的目錄。

更近一步的說,就是我們如何找出資料的相關性

二,常見演算法的名詞解釋

大的分類有兩種,一個變換,一個是編碼

先說變換

我們要找出訊號的相關性,時間上不好找怎麼辦,變換到另外一個空間上去。這就是我們在訊號與系統,數字訊號處理,高等數學得到的結論

變換

傅立葉變換

walsh-hadamard(沃爾什哈達瑪變換)

正弦變換

餘弦變換----應用最廣

斜變換

哈爾變換

k-L變換

小波變換

對於這些變換來說,很多東西只在數學上有意義,對於工程來說,或者沒有快速演算法,或者變換後相關性比較低,或者其他原因。只有餘弦變換是最最廣泛的,為了減小我們的學習壓力(當然如果你是要對比其中的差異的另當別論),我們只掌握餘弦變換就可以了。

編碼

又分無失真編碼與限失真編碼,從名字上我們就可以看出差異了。呵呵,不多解釋

無失真編碼的種類:

哈夫曼編碼,算術編碼,遊程編碼

限失真編碼

預測編碼,變換編碼,向量量化,基於模型的編碼。

對於編碼這塊,上述的演算法,基本要全部掌握才行。

jpeg/mpeg2先用了遊程編碼減小的0這個數佔用的位元位,然後用了哈夫曼壓縮。

h264用了算術編碼來做最後一道壓縮工序

運動補償與運動估計,用到預測編碼。

mpeg4用到了基於模型的編碼

變換完成後,進行了向量量化。