視頻壓縮知識介紹(一)——評價標準及算法原理

1.1   視頻壓縮評價標準

             評價視頻壓縮算法的壓縮效果,信噪比是一個非常有效的指標,它非常客觀。一般來說,同等碼率下,解碼後圖像與原始圖像的信噪比高的那個碼流,圖像效果更好些。

             不過,視頻壓縮的效果也不能只關注信噪比,它還需要考慮人眼的一些視覺特性,畢竟,人是通過眼睛在看圖象,而人眼不是僅僅在計算信噪比。對於視頻壓縮的這一特性,我取了個名字,叫做“騙眼睛”。關於視覺特性在編碼中的應用,最現成的例子就是所謂的YUV420格式數據。從數據量來說,YUV420是 YUV444的一半,但是,實際上人在看這兩組圖像的時候,視覺感受其實相差不大。究其原因,是因爲人眼對顏色不是太敏感,而對亮度卻很敏感。420和 444數據在亮度上完全一下,而顏色數據相差卻很大,可是,人眼的感覺卻並不明顯。我們採用420的數據來存儲圖像數據,僅此一項,就節省了一半的存儲空間!


1.2   視頻壓縮算法原理

             視頻壓縮是有損壓縮,一般說來,視頻壓縮的壓縮率都很高,能夠做到這麼高的壓縮率是因爲視頻圖像有着非常大的時間和空間的冗餘度。所謂的時間冗餘度指的是兩幀相鄰的圖像他們相同位置的像素值比較類似,具有很大的相關性,尤其是靜止圖像,甚至兩幀圖像完全相同,對運動圖像,通過某種運算(運動估計),應該說他們也具有很高的相關性;而空間相關性指的是同一幀圖像,相鄰的兩個像素也具備一定的相關性。這些相關性是視頻壓縮算法的初始假設,換句話說,如果不滿足這兩個條件(全白噪聲圖像,場景頻繁切換圖像等),視頻壓縮的效果是會很差的。

             去除時間相關性的關鍵算法是運動估計,它找出當前圖像宏塊在上一幀圖像中最匹配的位置,很多時候,我們只需要把這個相對座標記錄下來,就夠了,這樣就節省了大量碼字,提高了壓縮率。視頻壓縮算法中,運動估計永遠是最關鍵最核心的部分。

             去除空間相關性是通過DCT變換來實現的,把時域上的數據映射到頻域上,然後對DCT係數進行量化處理,基本上,所有的有損壓縮,都會有量化,它提高壓縮率最明顯,模數轉換也是靠量化吧?。

             當然,一些在無損壓縮中非常好用的壓縮算法,視頻壓縮裏面也有采用,比如霍夫曼編碼等。

             基本上視頻壓縮的核心就這些,當然,這些裏面的具體實現還非常複雜,也有很多學問,但是大的方面基本上就是去除相關性了。抓住這兩點,再去理解壓縮標準中的具體算法就不難了。

1.3   H.261   簡要介紹

H.261   協議又被稱爲p64,是第一個視頻壓縮標準,主要應用於視頻會議行業。從壓縮技術上來說,與後來的壓縮技術相比,它的算法最簡單,自然,壓縮的效果也比較差。對於研究視頻壓縮技術的工程師而言,從H.261開始研究,有種事半功倍的感覺,因爲後來的壓縮算法基本思想都和H.261差不多,只是在細節上更加高效了。

前面介紹過了,視頻壓縮的關鍵就是運動估計、DCT變換、量化和反量化。H.261除了這些,還有一個環路濾波器,用來消除塊效應。下面,我們一一介紹。

運動估計(ME)

我們經常可以碰到這樣的情況,兩個不同的產商,他們都支持H.261,設置的碼率也一樣,可是實際跑起來的時候,兩個產商的編碼效果差別卻很大,這裏面,主要的原因就是運動估計算法不同。

最簡單的運動估計算法是所謂的全搜索,可是實際的產品中,幾乎沒有採用這種算法的,爲什麼?因爲全搜索太慢了,對視頻編碼的算法選擇而言,永遠是在編碼效率和算法性能上找平衡點。事實上,有很多算法在性能上可能是全搜索的10%左右,但是,編碼效率可能只比全搜索稍差,對於實時應用的編碼器而言,選擇一個適合CPU運算特點的優化算法是關鍵。這裏插一句,如果是非實時應用的話,採用全搜索是個非常好的注意。

H.261協議裏面其實並沒有定義如何運動估計,因爲,協議一般只定義解碼器,它不管你如何編碼,只要你最後得到的碼流符合它的協議就夠了。與運動估計對應的解碼過程叫運動補償(MC),H.261運動補償主要特點有:1   它的搜索範圍是   -16到15;2   只支持整像素搜索;3     每個宏塊只有一個運動向量,並不支持到塊級運動估計;4   只支持P幀,並不支持雙向預測幀(B幀)。

與後來的協議相比較,個人的看法,運動估計的範圍-16到15基本上是夠用了,再大的話,一方面性能可能做不到,另一方面,實際應用中,運動超過這個範圍的宏塊還是很少的。與整像素搜索對應的是半像素、四分之一像素等搜索精度,這個算法應該說非常有效,個人感覺H.263比H.261算法好的最關鍵因素就是這裏。運動向量只到宏塊一級其實差不多,不過支持4mv的話,有些場合碼率可能可以節省5%到15%,這是我以前mpeg-4編碼器測試的結論,當然,爲了追求這10%左右的效率,性能上運動估計大約要增加30%以上的運算量(看選擇的算法)。B幀也是很重要的算法,以前的測試結論大約是可以節省15% 左右,不過H.261也不支持。

在H.261的編碼幀中,分爲I幀和P幀。I幀也被稱爲關鍵幀,而P幀則被稱爲預測幀。I幀裏的宏塊全部由幀內編碼宏塊組成,並沒有運動估計。實際上I幀的編碼算法和jpeg壓縮算法很類似,可以說就是使用了jpeg壓縮技術。I幀的壓縮效果比P幀差很多,同等圖像質量的話,I幀的碼率可能是P幀的十倍,從這裏可以看出來運動估計對於視頻壓縮的巨大作用。也正是因爲I幀壓縮效果差,因此,很多編碼器算法都有一個叫做關鍵幀間隔的參數,這個值比較流行設置爲 100,也就是大概4秒鐘出現一次I幀。很多實時編碼的算法,經常會過幾秒,畫面給人的感覺是刷了一下,這就是關鍵幀在刷新。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章