取樣壓縮性-九游会j9娱乐平台
a. 關於文件高壓縮率的問題
很簡單。 mpeg=運動圖像專家組(moving picture experts group)的簡稱。90年7月到94年11月,一群老頭在國際標准化組織(iso)和國際電工委員會(iec)聯合技術委員會(jtc)經過乏味而冗長的技術討論後制定了這一標准。iso授權發布,所以作為全球公認的行業標准得到業內遵守。
mpeg可以完成對視頻和音頻的壓縮。這里我們當然只談視頻壓縮部分
實際上壓縮要乾的事情就是去除訊息源的3重冗餘度。包括:空間冗餘度、時間(動態)冗餘度、結構(靜態)冗餘度
同一幀訊源圖像中相鄰像素之間的幅度值相近,即同一行上的相鄰像素之間幅值相近,相鄰行之間同樣位置上的像素幅值相近。這被稱為圖像的空間冗餘度;
相鄰兩幀訊源圖像同一位置上像素幅度值相近,體現了訊源圖像的時間(動態)冗餘度;
訊源圖像上每個像素所用bit數的多少表示了比特結構,多用的比特數為冗餘量,體現了靜態(結構)冗餘度。
mpeg是怎樣去除這些冗餘度的呢?它主要從兩個方面入手:
1、利用圖像信號的統計特性進行壓縮
也就是:
採用運動補償(mc)去除時間冗餘度;
採用離散餘弦變換(dct)和遊程長度編碼(rlc)去除空間冗餘度;
採用可變長度編碼(vlc)去除靜態(比特結構)冗餘度
這3種計算的具體實現我等一下會講到。現在你只需要明白,它們其實並不太復雜,至少不像它們的名字那樣讓人望而生畏
2、利用人的視覺生理特性設計壓縮
人眼對構成圖像的不同頻率成分、物體的不同運動程度等具有不同的敏感度,這是由人眼的視覺生理特性所決定的,如人的眼睛含有對亮度敏感的柱狀細胞1.8億個,含有對色彩敏感的椎狀細胞0.08億個,由於柱狀細胞的數量遠大於椎狀細胞,所以眼睛對亮度的敏感程度要大於對色彩的敏感程度。據此,可控制圖像適合於人眼的視覺特性,從而達到壓縮圖像數據量的目的。例如,人眼對低頻信號的敏感程度大於對高頻信號的敏感程度,可用較少的bit數來表示高頻信號;人眼對靜態物體的敏感程度大於對動態物體的敏感程度,可減少表示動態物體的bit數;人眼對亮度信號的敏感程度大於對色度信號的敏感程度,可在行、幀方向縮減表示色度信號的bit數;人眼對圖像中心信息的敏感程度大於對圖像邊緣信息的敏感程度,可對邊緣信息少分配bit數;人眼對圖像水平向及垂直向信息敏感於傾斜向信息,可減少表示傾斜向信息高頻成分的bit數等。在實際工作中,由於眼睛對亮度、色度敏感程度不一樣,故可將其分開處理。(這一段引用2003年度北京廣播學院電視工程專業教材)
所以我們將單元分量rgb改變為yuv(或ycrcb)全局分量,在編碼時強調亮度信息,可去掉一些色度信息,如4:4:4變為4:2:2,這就意味著改變了視頻的比特結構。去處掉的就是所謂的靜態(比特結構)冗餘度了。
引用教才部分所說的這個辦法,把結構冗餘信息去除(rgb->yuv),就可以實現適度的壓縮。去除結構冗餘度對圖像質量無影響,所以可以稱作"無損壓縮"。但是無損壓縮的壓縮比不高,壓縮能力有限。為了提高壓縮比,mpeg標准採用了對圖像質量有損傷的"有損壓縮"技術,即上面說的去除時間和空間的冗餘度。這些是要付出代價的----但這個帳很劃算
仔細說說上面那幾個演算法吧~ 可能需要一點點離散數學/高等數學基礎,您才能較好理解 不過就算不是很明白也無所謂,您只需要了解這些處理所起的作用就ok了~
首先說運動補償預測。這個好像是這里和ccf的會員們最熟悉的一環了,懂得人多我更要小心描述了
什麼叫運動補償呢?將前一圖像幀的相應的塊(microblock)按求得的運動矢量進行位移,這就是運動補償過程。為了壓縮視頻信號的時間冗餘度,mpeg採用了運動補償預測(motion compensated prediction)。
運動補償預測假定:通過把畫面以一定的提前時間(pre)平移,可以局部地預測當前畫面。這里的局部意味著在畫面內的每個地方位移的幅度和方向可以是不相同的。採用運動估值的結果進行運動補償,以便盡可能地減小預測誤差。運動估值包括了從視頻序列中提取運動信息的一套技術,該技術與所處理圖像序列的特點決定著運動補償性能的優劣。
所謂預測,實際上是由前一(n-1)圖像幀導出當前(n)幀所考慮像素的預測值,而後由運動矢量編碼傳輸n幀的實際像素值與其預測值之間的差值。例如,設宏塊(mb)為m×n的矩形塊,將(n-1)幀的宏塊與n幀的宏塊進行比較。這實際上是一個進行宏塊匹配的運動補償過程,即將n幀中16×16像素的宏塊與n-1幀中限定搜索區(sr)內全部16×16像素的宏塊進行比較。這一過程試圖判斷在n-1幀的那個mb到n幀中運動到了哪裡。若n-1幀圖像亮度信號為f [n -1 (i , j)],n幀圖像亮度信號為f [ n (i , j)],其中(i , j)為n幀的m×n宏塊的任意位置,並將n幀中的一個m×n的宏塊看作是從n-1幀中平移而來的,而且規定同一個宏塊內的所有像素都具有同樣的位移值(k,l) 。這樣,通過在n-1幀限定搜索區(sr)內進行搜索,總可以搜索到某一宏塊,使得該宏塊與n幀中要匹配的宏塊的差值的絕對值達到最小,並得到運動矢量的運動數據,在n-1幀和運動數據的控制下,獲得n幀的一個相應的預測值。照此辦理,直到n幀的m×n宏塊的任意位置(i , j)的像素全部通過n-1幀的像素預測出來。大家都知道,不緊緊是n和n-1這樣相鄰的兩幀可以進行mcp,實際上mpeg-1和mpeg-2可以當前幀之前若干幀的某一幀為基準進行mcp。
為了改善預測效果,可以採用分場預測。這一點在silky sama的聖經里說的很清楚了。
需要說明的是:mpeg定義了基於幀、基於場及雙場的圖像預測,也定義了16×8的運動補償。
對逐行掃描方式,可以採用基於幀的圖像預測;隔行掃描方式,也可以採用基於場的圖像預測。因此,mpeg-2編碼器要對每個圖像先判斷是幀模式壓縮還是場模式壓縮。在隔行掃描方式下:運動少的場景時,採用基於幀的圖像預測,因為基於幀的圖像兩相鄰行間幾乎沒有位移,幀內相鄰行間相關性強於場內相關性,從整個幀中去除的空間冗餘度比從個別場中去除得多;劇烈運動的場景時,採用基於場的圖像預測,因為基於幀的相鄰兩行間存在1場延遲時間,相鄰行像素間位移較大,幀內相鄰行間相關性會有較大下降,基於場的圖像兩相鄰行間相關性強於幀內相鄰行間相關性,在1幀內,場間運動有很多高頻分量(silky重點提過),從場間去除的高頻分量比從整個幀中去除的多。由上述可見,選擇基於幀的圖像預測還是基於場的圖像預測的關鍵是行間相關性。所以,在進行dct之前,要作幀dct編碼或場dct編碼的選擇,對16×16 的原圖像或亮度進行運動補償後所獲得的差值作幀內相鄰行間和場內相鄰行間相關系數的計算。若幀內相鄰行間相關系數大於場內相鄰行間相關系數,就選擇幀dct編碼,反之選場dct編碼。
mpeg採用了ahmed(一個巨牛的數學家)等人於70年代提出的離散餘弦變換(dct-discrete cosine transform)壓縮演算法,降低視頻信號的空間冗餘度。
dct將運動補償誤差或原畫面信息塊轉換成代表不同頻率分量的系數集,這有兩個優點:其一,信號常將其能量的大部分集中於頻率域的1個小范圍內,這樣一來,描述不重要的分量只需要很少的比特數;其二,頻率域分解映射了人類視覺系統的處理過程,並允許後繼的量化過程滿足其靈敏度的要求。
關於這一點在我手頭的教程中有詳盡的描述,讓我直接引用:
視頻信號的頻譜線在0-6mhz范圍內,而且1幅視頻圖像內包含的大多數為低頻頻譜線,只在占圖像區域比例很低的圖像邊緣的視頻信號中才含有高頻的譜線。因此,在視頻信號數字處理時,可根據頻譜因素分配比特數:對包含信息量大的低頻譜區域分配較多的比特數,對包含信息量低的高頻譜區域分配較少的比特數,而圖像質量並沒有可察覺的損傷,達到碼率壓縮的目的。然而,這一切要在低熵(entropy)值的情況下,才能達到有效的編碼。能否對一串數據進行有效的編碼,取決於每個數據出現的概率。每個數據出現的概率差別大,就表明熵值低,可以對該串數據進行高效編碼。反之,出現的概率差別小,熵值高,則不能進行高效編碼。視頻信號的數字化是在規定的取樣頻率下由a/d轉換器對視頻電平轉換而來的,每個像素的視頻信號幅度隨著每層的時間而周期性地變化。每個像素的平均信息量的總和為總平均信息量,即熵值。由於每個視頻電平發生幾乎具有相等的概率,所以視頻信號的熵值很高。熵值是一個定義碼率壓縮率的參數,視頻圖像的壓縮率依賴於視頻信號的熵值,在多數情況下視頻信號為高熵值,要進行高效編碼,就要將高熵值變為低熵值。怎樣變成低熵值呢?這就需要分析視頻頻譜的特點。大多數情況下,視頻頻譜的幅度隨著頻率的升高而降低。其中低頻頻譜在幾乎相等的概率下獲得0到最高的電平。與此相對照,高頻頻譜通常得到的是低電平及稀少的高電平。顯然,低頻頻譜具有較高的熵值,高頻頻譜具有較低的熵值。據此,可對視頻的低頻分量和高頻分量分別處理,獲得高頻的壓縮值。
由上面的引用可見,碼率壓縮基於變換編碼和熵值編碼兩種演算法。前者用於降低熵值,後者將數據變為可降低比特數的有效編碼方式。在mpeg標准中,變換編碼採用的是dct,變換過程本身雖然並不產生碼率壓縮作用,但是變換後的頻率系數卻非常有利於碼率壓縮。 實際上壓縮數字視頻信號的整個過程分為塊取樣、dct、量化、編碼4個主要過程進行-----首先在時間域將原始圖像分成n(水平)×n(垂直)取樣塊,根據需要可選擇4×4、4×8、8×8、8×16、16×16等塊,這些取樣的像素塊代表了原圖像幀各像素的灰度值,其范圍在139-163之間,並依序送入dct編碼器,以便將取樣塊由時間域轉換為頻率域的dct系數塊。dct系統的轉換分別在每個取樣塊中進行,這些塊中每個取樣是數字化後的值,表示一場中對應像素的視頻信號幅度值。
dct和它解壓時的反運算的具體演算法如下。
當u,v = 0 時,離散餘弦正變換(dct)後的系數若為f(0,0)=1,則離散餘弦反變換(idct)後的重現函數f(x,y)=1/8,是個常數值,所以將f(0,0)稱為直流(dc)系數;當 u,v≠0時,正變換後的系數為f(u,v)=0,則反變換後的重現函數f(x,y)不是常數,此時正變換後的系數f(u,v)為交流(ac)系數。
dct轉換的一個具體應用見下面這個圖:(偶們作員工培訓的一張幻燈片,剛好合適)
http://pic.zingking.com/rzhy/kean/dctpro.jpg
看上圖變換原理可察覺兩點:其一,dct後的64個dct頻率系數與dct前的64個像素塊相對應,dct前後都是64個點,它只是1個本身沒有壓縮作用的無損變換過程。其二,單獨1場圖像的全部dct系數塊的頻譜幾乎都集中在最左上角的系數塊中,僅從該塊的頻譜中就可以形成1幅壓縮圖像;dct輸出的頻率系數矩陣最左上角的直流(dc)系數幅度最大,圖中為315,由於代表了x軸和y軸上的dc分量,所以它表示了輸入矩陣全部幅度的平均值;以dc系數為出發點向下、向右的其它dct系數,離dc分量越遠,頻率越高,幅度值越小,圖中最右下角為-0.11,即圖像信息的大部分集中於直流系數及其附近的低頻頻譜上,離dc系數越來越遠的高頻頻譜幾乎不含圖像信息,甚至於只含雜波。顯然,dct本身雖然沒有壓縮作用,卻為以後壓縮時的"取"、"舍" 奠定了必不可少的基礎。