幀間、幀內像素塊預測

一、像素塊預測

H.264/ AVC標準中的基本預測技術是基于塊,而不是基于對象的。它的編碼器是利用混合的編碼方案來提高編碼效率,這些方案包括高級的預測技術和有效熵編碼技術。在運動預測中它使用不同的塊的大小進行預測,以樹結構的方式來組織預測模式。其主要的特點也包含在多參考幀預測方式和通用B幀的概念上。H.264像素塊預測編碼包括幀內塊預測和幀間塊預測,而幀內塊預測在H.264中占有極重要的地位。在圖像信號壓縮編碼中,由于亮度信號和色差信號是分別進行處理的,因此,預測又可分亮度信號預測和色差信號預測。下面就兩種不同預測方式分別加以討論。

1. 幀內預測

在H.264/AVC中采用的預測編碼方法與在14496-2標準的MPEG-4視頻編碼規范不同,幀內預測是在變換編碼之前進行的。在 H.264/AVC標準的幀內預測中,當前塊的抽樣值總是利用鄰塊的抽樣值來獲取。這樣也許會因為在相鄰的幀間編碼的宏塊的運動補償誤差而引起圖像誤差的擴散。因此,在圖像編碼過程中還有一種限制幀內編碼模式,此時只允許相鄰的幀內預測宏塊為已知才可以作為其他當前宏塊的參考宏塊。

H.264根據相鄰像素可能有相同的性質,利用相鄰像素的相關性,采用了新的幀內(Intra)預測模式。通過當前像素塊的左邊和上邊的像素(已編碼重建的像素)進行預測。只對實際值和預測值的差值進行編碼,這樣就能用較少的比特數來表達幀內編碼的像素塊信息。在H.264標準中,亮度塊可以有9種4×4塊和4種16×16塊的幀內預測模式,而色度8×8塊的4種模式與亮度的4種16×16塊的模式相同。對于每個4×4塊(除了邊緣塊特別處置以外),每個像素都可用17個最接近的先前已編碼的像素的不同加權和(有的權值可為0)來預測,即此像素所在塊的左上角的17個像素。顯然,這種幀內預測不是在時間上,而是在空間域上進行的預測編碼算法,可以除去相鄰塊之間的空間冗余度,取得更為有效的壓縮。如圖1所示,4×4方塊中a、b、…、p 為16個待預測的像素點,而A、B、…、P是已編碼的像素。按照所選取的預測參考的點不同,亮度共有9類不同的模式,但色度的幀內預測只有1類模式。

4×4幀內預測方法用于對圖像細節部分進行編碼,它的基本思路是從不同的方向計算、比較塊中各個像素之間的亮度差值,即梯度值。通過選擇具有最小預測誤差的方向作為最佳的預測方向。下面對其中的預測模式舉例說明。如圖1所示,其中4×4塊中16個抽樣值(a~p)是由先前解碼鄰近宏塊抽樣值(A~Q)利用各種預測模式預測得來。這種預測模式共有8個方向,加上各像素作平均計算共9種模式。

2. 4×4幀內預測模式編碼過程

每個4×4塊的幀內預測模式的選擇一定會告知解碼器,這可能需要很多比特。然而,附近的4×4塊的幀內模式是非常相關的。舉例來說,如果圖 2里的先前編碼的4×4塊A和B是使用模式2預測的,塊C(當前塊)的最佳模式很有可能也是模式2。對于每個當前塊C,編碼器和解碼器計算最合適的模式 most_probable_mode。如果A和C都在4×4幀內模式中編碼,且都在當前的slice層中,最合適的模式(most_probable_mode)是A和C預測模式的最小量;否則most_probable_mode 被設定成模式2(直流預測)。

編碼器為每個4×4塊發送一個flag標志,使用最合適的模式use_most_probable_mode。如果flag是“1”,采用參數most_probable_mode。如果flag是“0”,發送另外的一個參數remaining_mode_selector,來指出模式變化。如果remaining_mode_selector比當前的most_probable_mode小,那么預測模式被設定為 remaining_mode_selector;否則預測模式被設定為 remaining_mode_selector+1。這樣,remaining_mode_selector只需用8個數值(0到7)表示目前的幀內模式(0到8)。

3. 亮度信號16×16幀內預測

16×16預測方式是基于在16×16塊的基礎上,用于對圖像中的相對不變的部分進行編碼。它只有四種預測方式,分別為垂直預測方式、水平預測方式,直流預測方式和平面預測方式。用一個4×4亮度分量的可選模式,可預測一個宏塊的整個16×16亮度分量,有4種模式。

模式0:(垂直預測)由上面的抽樣值插補(H);

模式1:(水平預測)由左邊的抽樣值插補(V);

模式2:(直流預測)由上面的和左側的抽樣值平均數插補(H+V);

模式4:(平面預測)由上面的和左側的抽樣值插補。

線性“平面”可設置由上面和左側的抽樣值H和V插補, 這在平滑的亮度區域效果較好。

4. 色度信號的幀內預測

一個宏塊的每個8×8色度分量借助于上面的和左面的已被編碼、重建的色度分量抽樣值進行預測。由于色度在圖像中是相對平坦的,其預測方法與 16×16亮度信號幀內預測相似方式進行。因此也有四種幀內預測模式:垂直預測(模式0),水平預測(模式1),直流預測(模式2)和平面預測(模式 3)。

5. 幀間預測

幀間預測是利用先前已編碼幀的圖像作為參考圖像對當前圖像進行預測的一種方式。它把參考圖像的抽樣點通過運動矢量的補償作為當前圖像抽樣值的參考值。H.264/AVC標準中使用了從H.261標準以來主要標準中使用的塊結構運動補償。然而,它與早期標準最大區別在于:①支持多種塊結構的預測;②運算精度能精確到1/4像素。

在H.264/AVC標準中還使用了H.263標準中曾使用過的多幀預測的方法,主要思想是增加運動矢量中時間軸的估計參考幀數。在宏塊的級別上,允許選擇一個或幾個前面視頻幀作為參考幀。用于運動補償的多幀預測方式在大多數情況下會明顯改善預測增益。

下面我們就以在兩種不同類型的片(slice)中使用的幀間預測方式進行討論。在說明它們之前我們首先介紹樹結構的運動補償,其中主要簡述了宏塊的分塊。

幀間預測用于降低圖像的時域相關性,通過采用多幀參考和更小運動預測區域等方法,對下一幀精確預測,從而減少傳輸的數據量。每個亮度宏塊被劃分成形狀不等的區域,作為運動描述區域。如圖4所示,其劃分方法有16×16,16×8,8×16,8×8 共4種。當選用8×8方式時,可以進一步劃分成8×8,8×4,4×8和4×4共4個子區域。每個區域包含自己的運動向量,每個運動向量和區域選取信息必須通過編碼傳輸。因此,當選用較大區域時,用于表示運動向量和區域選取的數據量減少,但運動補償后的殘差會增大;當選用小區域時,殘差減少,預測更精確,但用于表示運動向量和區域選取的數據量增大。大區域適合反映幀間同質部分,小區域適合表現幀間的細節部分。

在H.264中,運動預測的精度也有所改進,對QCIF(144×176像素)格式的圖像,使用1/4像素精度;對CIF(288× 352 像素)格式的圖像,使用1/8 像素精度。其中,1/4 像素插值是先使用一個6抽頭濾波器進行水平和垂直濾波得到半像素插值點,然后對其進行線性插值;而1/8 像素插值是直接使用一個8抽頭濾波器進行水平和垂直濾波。

在幀內編碼模式下,H.264 對空間系數進行雙向預測,而不是對變換后的系數進行預測(見H.263+的先進幀內預測模式)。另外,與H.263+的附錄N類似,H.264支持參考幀可選模式,即在編碼后續圖像時,可以從編碼緩存中選擇使用前面的參考幀(多于一幀)進行運動估值。

H.264 除了支持I 幀、P 幀和B 幀外,還提出了一種新的圖像類型SP 幀,SP幀也是預測編碼幀,根據需要可以改變用于該幀預測的圖像。SP幀可用于信道速率的改變、視頻比特流的切換和碼流隨機接入等操作,在時變無線信道上的視頻通信和流媒體傳輸中有廣泛的應用前景。

二、運動補償

1. 樹結構的運動補償

H.264采用了不同大小和形狀的宏塊分割與亞分割的方法。一個宏塊的16×16亮度值可以按照16×16、16×8、8×16或8×8進行分割;而如果選擇了8×8分割,還可以按照8×8、8×4、4×8或4×4進行亞分割,如圖5所示。這些宏塊分割與亞分割的方法將會使得每個宏塊中包含有許多不同大小塊。利用各種大小的塊進行運動補償的方法我們將稱為樹結構的運動補償(tree structured motion compensation)。宏塊分割與亞分割所產生的每一個亮度塊都有自己獨立的運動矢量。對于宏塊中色度值,分割方法是和亮度一樣的,但是由于 4∶2∶0采樣的關系,色度分割塊的大小是亮度分割塊的一半,而且當色度塊在利用運動矢量時,必須要將它各個分量除以2。其次,H.264可以達到1/4 像素的運動精度,這是通過利用整像素點的亮度值進行內插得到的。內插過程先是通過6抽頭的濾波器來獲得半像素精度,然后用線性濾波器來獲得1/4像素的精度。又由于4∶2∶0采樣的關系,色度的運動精度就達到1/8像素,這也是通過線性濾波器插值得到的。由于運動矢量之間也有一定的相關性,所以H.264 就利用已經編碼塊的運動矢量對當前未編碼塊的運動矢量進行預測,最后只需要編碼和傳輸實際運動矢量與預測值的差值即可。

再次,H.264還可以采用多參考圖像(最多前向和后向各5幀)來進行運動預測,這樣可以對周期性運動,平移封閉運動和不斷在兩個場景間切換的視頻流有效果非常好的運動預測。使用了多參考圖像,H.264不僅能夠提高編碼效率,同時也能實現更好的碼流誤碼恢復,但需要增加額外的時延和存儲容量。

最后,H.264也在B圖像中利用后向運動預測,這和以前的標準是一致的,但不同的是B圖像通過加權也能作為其他圖像的參考圖像。

在H.264/AVC標準中獲得運動補償的塊結構大小不再局限于在宏塊的基礎上,可以從宏塊的分塊或子分塊中獲取運動矢量。

每個運動矢量都將會被編碼、傳送,另外分塊方式也必須被編碼在數據流中。選擇大的分塊方式(16×16、16×8或8×16)也許只需要傳送很少的比特用于說明運動矢量和分塊方式,但是運動補償后抽樣點差值也許將會比較大。選擇小的分塊方式(8×4或4×4)也許能得到很小運動補償后抽樣點差值,但是要花費很多比特去傳輸運動矢量和分塊方式。因此對于分塊的選擇將會對壓縮效果有著重大的影響。通常,大的分塊方式用于幀內均勻的部分,而小的分塊方式將有利于圖像中細節描述,每個色度塊將按照亮度的分塊方式進行分塊。由于宏塊中色度分辨率是亮度分辨率的一半,因此色度塊的大小不管在水平還是垂直方向上都只是亮度塊的一半。同時,色度塊上垂直運動向量和水平運動向量也只是亮度塊的一半。

2. 在P類型片中的幀間預測

以往,一般的視頻壓縮的最高運動估計精度為半像素(half pixel),比如在14496-2標準(即MPEG-4視頻編碼部分)中的基本補償技術就是采用半像素精度,采用的內插方法也是簡單的雙線性內插法,其補償的質量也是相對于較低的。與上述不同的是,在H.264/AVC標準中的運動估計精度要求達到1/4(quarter pixel)精度。

在H.264/AVC標準中,對于P類型的片編碼時可以采用多幀運動補償預測,也就是超過一個先前編碼幀可作為當前幀運動補償的參考幀。

多幀預測需要解碼器和編碼器在緩沖中存貯多幀圖像作為參考幀。解碼器則利用比特流中參數設置信息內存管理控制操作(memory management control operation)去復制編碼器相同的多幀緩沖。同時對于每個運動補償的16×16、16×8、8×16或8×8塊及其子塊需傳送參考索引參數,用于確定該塊或子塊參考幀在緩存中的位置。P類型片預測方式是與宏塊中塊相對應的,也即是與前面所介紹宏塊中分塊相對的。在P類型片中預測模式不僅僅只有表中所描述6種類型,還可以包括幀內預測模式。另外對于P_8×8類型預測方式,它是對應于8×8塊的預測,還可以有子分塊上預測模式。

對于P幀中不同預測模式分類可見JM中函數interpret_mb_mode_P,在其中它把當前宏塊的分塊方式及其模式存入到 currMB數據結構中,以便在函數readMotionInfoFromNAL獲取當前塊的運動矢量,在 readCBPandCoeffsFromNAL函數中獲得預測差值。

3. 在B類型的片中幀間預測

與先前圖像編碼標準相比,在H.264/AVC標準中B類型片的概念得到推廣,最大特點是由B類型片所組成B幀可以作為其他圖像的參考幀。 B類型片與P類型片最本質的區別是在B類型片中宏塊或其子塊的預測值是通過兩個不同運動補償值加權平均后取得的。B類型片使用兩組不同參考圖像,分別為 list0(前向參考圖像集)和list1(后向參考圖像集)。

在B類型片中,四組不同的宏塊預測方式將支持下面四種模式:①直接方式(direct mode):這種方式不需要傳送運動矢量等附加信息(side information)。②單向預測方式(inter mode):只需傳送1個宏塊預測信息。③多假設預測方式(multihypothesis mode):需傳送兩個宏塊預測信息。④幀內預測方式(intra mode)。下面我們分別具體介紹直接預測方式和多假設預測方式。

(1)直接預測方式(direct mode)

直接方式使用雙向預測方式,傳送預測差值。這種方式前向和后向運動矢量(mv0,mv1)是通過隨后的參考圖像(RL1)上公共確定宏塊(co-located macroblock)的運動矢量(mvc)計算得到的。使用直接預測方式的宏塊與公共確定宏塊應具有相同的分塊。

其中MV0為前向運動矢量,MV1為后向運動矢量,MVC代表著隨后幀間圖像公共確定塊運動矢量。對于先前B幀概念而言,TDD為當前幀前一幀與后一幀相差的時間。TDB為當前B幀圖像與前一幀的時差。當使用多幀預測后,這種概念發生變化。TDB為當前幀與其前向參考幀RL0之間的時差,而TDD為前向參考幀RL0與后向參考幀RL1之間的時差。在H.264/AVC標準中,直接預測方式因對預測信號進行混合加權運算,比先前標準中使用平均加權方式得到改善。這種技術最適合音樂電視和電影結尾的使用,它們通常是場景慢慢衰弱的。特別是在電影的結尾,場景逐漸衰弱成黑幕。在先前標準中沒有好的壓縮方式這種情況很難編碼。如果把這種現象編碼成PBBB模式,由于平均加權將使得第一和第三個B幀相對于周圍的幀內、幀間幀及第二個B幀有較大的圖像惡化,而基于幀間相對距離的混合加權方式卻可以大大改善。

其中c為當前B幀中宏塊或塊中抽樣值,cp為前向參考圖像預測宏塊或塊中抽樣值,cs為后向參考圖像預測宏塊或塊中抽樣值。

(2)多假設預測方式(multihypothesis mode)

多假設預測方式需要疊加由兩個運動矢量所預測兩個宏塊預測值。我們把每個塊預測值稱為假設(hypotheses)。最后預測塊通過兩個假設的運動矢量得到的預測值平均后得到。多假設預測與雙向預測方式不同。雙向預測方式只允許前后向預測對線性組合而成。見圖8。而多假設預測方式取消這種限制,它可以一個方向上預測對來獲取最終的預測值。可以(前向,前向)或(后向,后向)進行預測。

當第一個假設來源于先前參考圖像而第二個假設來源于后向參考圖像時,多假設預測方式也可以成為雙向預測方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455476.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455476.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455476.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高性能mysql 第10章 復制

復制功能不僅能夠構建高可用的應用,同時也是高可用性,可擴展性,災難恢復,備份以及數據倉庫等工作的基礎。 mysql支持兩種復制方式:基于語句的復制和基于行的復制。基于語句的復制(也成為邏輯復制&#xff0…

vb6在后臺將窗體保存到圖片_如何將寺庫網多個商品圖片一鍵分類保存到一個目錄...

寺庫網是全球最大的奢侈品網上在線購物平臺,那么我們怎樣可以從寺庫網上一鍵批量采集到多個寶貝商品圖片,并分類保存到電腦呢?今天小編給大家帶來一款專業電商圖片鏈接采集軟件【載圖助手】,它支持平臺高達141個,均可支…

Java筆記07-List、Set、數據結構、Collections

Java筆記07-List、Set、數據結構、Collections 主要內容 數據結構List集合Set集合Collections 第一章 數據結構 2.1 數據結構有什么用? 當你用著java里面的容器類很爽的時候,你有沒有想過,怎么ArrayList就像一個無限擴充的數組&#xff…

Apache安裝問題:configure: error: APR not found . Please read the documentation

參考:http://cuisuqiang.iteye.com/blog/2068794 http://www.cnblogs.com/Anker/p/3355573.html pcre: https://ftp.pcre.org/pub/pcre/ http://www.linuxidc.com/Linux/2012-06/62289.htm 1. 不贊成去卸載httpd的東西。 2. server上可以存在多個apache。一個是rpm&…

浮動與定位

2019獨角獸企業重金招聘Python工程師標準>>> 一.浮動:float:一個元素浮動時,其他內容會"環繞"該元素. 浮動元素的外邊距不會合并浮動的元素不能超出其包含快的內邊界浮動元素彼此會避免重疊浮動元素的頂端不能比之前所有浮動元素或塊級元素的頂端更高如果…

驅動級的自動按鍵_Aqara全自動智能推拉鎖D100,體驗全自動開門的便捷

大家好,我是夢想是個豬,今天為大家帶來的是一篇智能門鎖的使用體驗。前言家里的這張門陸陸續續的換了好幾把智能門鎖了,也體驗了好幾種不同的開鎖方式。最開始開發商給安裝的是一把指紋和把手分離的那種款式,開鎖的時候需要先輸入…

碼率問題

幀率影響的是每幀的額定比特數 我說的幀率是編碼幀率,不是采集幀率。對于一個采集后的序列,MAD 只跟參考幀有關。而編碼幀率與參考幀無關,因此編碼幀率不影響 MAD。 ———————————————————————————————————…

Java筆記08-Map詳解

第一章 Map集合 1.1 概述 現實生活中,我們常會看到這樣的一種集合:IP地址與主機名,身份證號與個人,系統用戶名與系統用戶對象等,這種一一對應的關系,就叫做映射。Java提供了專門的集合類用來存放這種對象…

Node.js的helloworld 程序

用文本編輯器,如npp,鍵入例如以下代碼,存儲成hello.js console.log(hello) console.log(hello %s->%d,jeapedu, 1941847311) cmd進入dos。切入hello.js所在文件夾。運行node.js程序 node hello.js執行結果例如以下所看到的: C:\nodeS>n…

深度學習綜述

摘要: 深度學習可以完成需要高度抽象特征的人工智能任務,如語音識別、圖像識別和檢索、自然語言理解等。深層模型是包含多個隱藏層的人工神經網絡,多層非線性結構使其具備強大的特征表達能力和對復雜任務建模能力。訓練深層模型是長期以來的難…

mac svn工具_Cornerstone 4 for mac(svn管理工具)

Cornerstone 4 for mac是全新版本的svn管理工具,使用cornerstone for mac 特別版建立的版本控制更利于使用,而且cornerstone 4 特別版全面支持Subversion的功能,這里準備了最新版本的cornerstone for mac 特別版,無需激活&#xf…

I幀、B幀和P幀的特點和編碼的基本流程

I幀、B幀和P幀的特點: I幀:幀內編碼幀I幀特點:1.它是一個全幀壓縮編碼幀。它將全幀圖像信息進行JPEG壓縮編碼及傳輸;2.解碼時僅用I幀的數據就可重構完整圖像;3.I幀描述了圖像背景和運動主體的詳情;4.I幀不需要參考其他畫面而生成;5.I幀是P幀和B幀的參考幀(其質量直接影響到同組…

Java筆記11-【異常、線程】

主要內容 異常、線程 第一章 異常 1.1 異常概念 異常,就是不正常的意思。在生活中:醫生說,你的身體某個部位有異常,該部位和正常相比有點不同,該部位的功能將受影響.在程序中的意思就是: 異常 :指的是程序在執行過程中,出現的…

摘抄自知乎的redis相關

1.知乎日報的基礎數據和統計信息是用 Redis 存儲的,這使得請求的平均響應時間能在 10ms 以下。其他數據仍然需要存放在另外的地方,其實完全用 Redis 也是可行的,主要的考量是內存占用。就使用經驗而言,Redis 的數據結構很豐富&…

Java微信開發_00_資源匯總貼

1.微信公眾平臺技術文檔(https://mp.weixin.qq.com/wiki?tresource/res_main&idmp1445241432) 2.微信企業號開發接口文檔(http://qydev.weixin.qq.com/wiki/index.php?title%E4%B8%BB%E5%8A%A8%E8%B0%83%E7%94%A8) 3.企業微…

webgl獲取鼠標形狀_三模無線搭配對稱手型設計,游戲致勝利器,ROG烈刃2無線鼠標...

要想有效地提升游戲體驗,我認為除了電腦主機本身的硬件配置要盡可能的硬核之外,玩游戲時所選配的鼠標、鍵盤等外設的作用也是不可忽視的,所以很多比較注重游戲體驗的游戲愛好者都會選擇一款自己用著比較順手的游戲外設裝備。我這次入手的華碩…

牛人學習h264運動估計的方法

轉載自:http://bbs.chinavideo.org/forumdisplay.php?fid29 Chinavideo,一個非常棒的學習論壇 從答辯結束(2008-12-13)起就想寫一篇文章給學習運動估計的朋友們,因為我知道有很多正在寫論文的朋友們,特別是正在入門的朋友們&…

Java筆記11-軟件開發流程設計原則

今天內容: 1.常用的設計原則2.常用的設計模式3.常用的查找算法4.常用的排序算法 1.常用的設計原則(記住) 1.1軟件的開發流程 軟件開發授權-投標 -> 100萬 1. 編寫需求分析文檔 > 2. 概要設計文檔(架構) > 3. 詳細設計文檔(類圖) > 4. 編碼(項目經理分具體任…

magnify.m —— 圖像局部放大鏡工具函數

magnify.m 函數下載地址:magnify - File Exchange - MATLAB Central; magnify.m 函數在執行時,是一種交互式處理。 簡單演示如下: clear, clc% 加載圖像到內存,如讀取matlab自帶的圖像,并將其顯示出來 I i…

【大數據系列】hadoop單節點安裝官方文檔翻譯

Hadoop: Setting up a Single Node Cluster. HADOOP:建立單節點集群 PurposePrerequisites Supported PlatformsRequired SoftwareInstalling SoftwareDownloadPrepare to Start the Hadoop ClusterStandalone OperationPseudo-Distributed Operation Configuration…