3D-HEVC編碼框架
3D-HEVC編碼結構是對HEVC的擴展,每個視點紋理及深度圖編碼主要采用HEVC編碼框架,但在其基礎上增加了一些新的編碼技術,使其更有利於深度圖和多視點的編碼。

圖1 3D-HEVC編碼結構
如上圖所示,3D-HEVC編解碼結構和MVC類似。圖中所有輸入的視頻圖像和深度圖像是同一時刻,不同拍攝位置的場景,這些圖像組成一個存取層。在同一個存取層中,首先對獨立視點(基准視點)編碼,接着是該視點的深度圖,再編碼其他視點視頻圖像和深度圖。原理上來說,每個視點的圖像,包括視頻圖像和深度圖像,均可以利用HEVC編碼框架進行編碼,輸入的所有比特流復合形成3D比特流。
對於獨立視點,利用未修正的HEVC編碼結構,由於該視點的編碼是獨立的,不依賴於其他視點,因此其對應的比特流可以單獨提取出來形成2D比特流,從而恢復出2D視頻。由此可見,3D-HEVC兼容了2D視頻的編解碼。而其他視點和深度圖采用修正的HEVC編碼結構。如圖中紅色箭頭表明可以利用視點間相似信息來去除視點間冗余,提高編碼性能。
非獨立視點編碼技術
3D-HEVC在編碼非獨立視點時,除了使用獨立視點編碼所用的所有工具外,還用到了HEVC關於3D擴展的編碼技術,使其更有利於多視點的編碼。比如利用已編碼的獨立視點的信息來預測當前編碼視點的信息,從而降低視點間冗余,提高編碼效率。其中涉及的擴展技術主要是視差補償預測,視點間運動預測和視點間冗余預測。
視差補償預測
視差補償預測(DCP)是非獨立視點編碼中一個重要的編碼技術,視差補償和運動補償具有相似概念,均可理解為幀間預測的一種方法,但兩者的參考幀存在本質區別。運動補償預測(MCP)的參考幀是不同時刻,同一視點的編碼幀,而DCP參考的是同一時刻,不同視點的已編碼幀。由於DCP和MCP類似,因此DCP被添加到MCP列表中,作為MCP的一種預測模式。在宏塊級的語法和解碼過程中均沒有修改,僅對高級語法元素進行了改進,從而可以將同一存取層已編碼的視點圖像加入到參考列表中。

圖2 視差補償預測和運動補償預測
如上圖所示,引用圖像索引(R值)來區別MCP和DCP,即當R=1時表示DCP,其余表示MCP。
視點間運動預測
多視點視頻是在同一時刻同一場景下,多個camera從不同角度拍攝的視頻,不同視點呈現的物體運動具有相似性。因此可以利用同一時刻已編碼視點的運動信息來預測當前視點的運動信息。
關於視點間運動預測的一種方法是一幀圖像的所有塊均使用恆定的視差矢量。為了更有效確定當前塊與參考視點中相應塊之間的關系,還可以利用深度圖信息更准確的預測當前視點和參考視點之間的關系。

圖3 基於參考視點的運動參數推導當前編碼視點的運動參數
如上圖所示,假設當前圖像的深度圖已給出或能夠估計出,則將當前編碼塊的最大深度值轉化成視差矢量。對於當前塊的中心位置X加上已得到的視差矢量,從而得到參考視點中的位置XR,若XR是利用運動補償預測進行編碼的,則相關的運動矢量可以用作當前視點編碼塊運動信息的參考。同理,利用當前塊的最大深度值推導出的視差矢量可以用於DCP。
視點間冗余預測
同一存取層的已編碼圖像的運動信息和冗余信息可以用來提高非獨立視點的編碼性能。為了利用視點間的冗余信息,在編碼塊之間的語法元素中添加一個標志信息用來表示該預測塊是否利用了視點間冗余預測。視點間冗余預測過程和視點間運動矢量預測過程類似:
1.首先根據圖3中的最大深度轉化為視差矢量。
2.然后根據視差矢量確定在參考視點中的位置,得到該位置的冗余信息。
3.最后將當前塊的冗余和預測的冗余差進行編碼。若冗余信息是基於分像素的,則應該對參考視點的冗余信息進行插值濾波。

圖4 視差冗余預測結構
如上圖所示,Dc表示當前視點(View1)編碼塊,Bc和Dr分別表示同一時刻(Tj)參考視點(View0)對應的塊和不同時刻(Ti)同一視點(View1)中對應的塊,且VD是Dc和Dr之間的運動信息。由於Bc和Dc分別是同一時刻下,不同視點同一個物體的投射,因此兩個塊的運動信息應該是相同的。所以Bc的時域預測塊Br可以通過VD進行確定,反之Bc的冗余信息和運動信息VD也可以通過加權因子映射到Dc。
深度圖編碼
一般而言,所有用於視頻圖像的編碼技術均可用作深度圖編碼,但是HEVC的設計目的是視頻序列編碼最優,對深度圖的編碼並不是最優。而與視頻序列相比,深度圖的特征是具有大塊相同區域以及尖銳的邊緣信息。
3D-HEVC的深度圖幀內編碼在視頻編碼的基礎上增加了四種模式,分為兩類:用直線分割的楔形分割法(Wedegelets)和用任意形狀分割的輪廓分割法(Contours)。深度圖編碼將一個深度塊分割為兩個非矩形區域,每個區域用一個常數表示。為了能夠表示出分割信息,至少應該確定兩個元素參數,分別用於表示屬於哪個區域的參數以及該區域恆定的常數。

圖5 楔形分割模式
如上圖所示,楔形分割和輪廓分割的主要區別在於分割的方式不同。對於楔形分割,一個深度塊的兩個區域是通過一條直線分割的,分割的兩個區域分別為P1和P2,分割線由起始位置S和終止位置E表示。從圖5中可得,對於模擬信號(左圖),可以采用線性函數來表示分割線。而中間圖則描述了離散信號的分割,該塊是一個uB*vB大小的采樣矩陣,起始點S和結束點E對應於采樣矩陣的邊界值,用於表示分割線的位置。對於編碼過程中的楔形分割,分割模式將被存儲下來,其存儲的信息包括uB*vB大小的一個矩陣,矩陣中的每個元素是一個二進制信息,表示當前塊的采樣值屬於P1還是P2。右圖表示為分割好的預測塊,其中白色部分表示P1區域,黑色部分表示P2區域。

圖6 輪廓分割模式
如上圖所示,輪廓分割法的分割線不能像楔形分割法一樣能夠用一個幾何函數表示出來。而P1和P2可以是任意形狀的,甚至可以分成多個部分。同時在分割方式上,輪廓分割和楔形分割很大程度上是相似的。
除了分割信息需要傳輸,還要求傳送第i個分割號的區域深度值,每個分割的區域深度值是一個固定的數,該值最好的選擇應該是該區域原始深度值的均值。
因此根據分割模式和傳輸信息不同,深度圖新增的幀內編碼模式分為四種方法:
1.明確的楔形法:在編碼端確定最佳匹配的分割,並且在比特流中傳輸分割信息,利用傳輸的分割信息,解碼端可以重建該塊的信號。
2.幀內預測楔形法:通過相鄰已編碼的幀內塊預測當前塊的楔形分割,傳輸一個修正值。
3.元素間楔形法:當前塊的分割信息通過重建塊的co-located塊,即該塊和當前編碼塊在同一圖像中,推導得到。
4.元素間輪廓法:通過重建的co-located塊推導得到兩個任意形狀的區域分割。
