1. 程式人生 > 實用技巧 >點雲的幀間預測2(m42521)

點雲的幀間預測2(m42521)

目錄

一、前言

這篇部落格是我寫的一個筆記總結,主要是對MPEG的m42521提案做的簡單總結,該提案是有關於點雲幀間預測,寫了如何來得到最佳運動向量(MV)。

二、架構

在提案m42520中描述瞭如何使用生成的預測點集(此處使用幀間預測)。預測點集可能使用的一般框架如下圖所示。基本上,預測點將有助於壓縮與代表當前幀的幾何結構的樹的每個節點(TM3中的八叉樹)相關的佔用資訊。

在這裡插入圖片描述

上圖的左側部分包含了對用於生成預測點集的編碼模式(Pu樹和運動向量)的輔助資訊進行編碼,以使得解碼器也能夠以與編碼器相同的方式生成該預測點集並驅動算術編碼。

而m42521這篇提案將展示如何獲得好的運動向量和PU樹結構以構造幀間預測器。

三、技術方案

3.1、LPU/PU結構

點雲中的點無處不在,這是相對於所有畫素都被佔用的視訊而言的根本區別。我們提議將3D空間劃分為最大的預測單元(Largest Prediction Units),這些最大的預測單元是由規則網格形成的長方體,接下來我們會介紹了填充LPU(populated LPU)未填充LPU(non-populated LPU) 的概念。

通過一個標誌來指示是否正在被填充,該標誌可以由參考幀或已編碼的相鄰LPU推斷得來。

在這裡插入圖片描述

LPU可以進一步分為預測單元(PU),然後可以為其確定運動向量。

對於預測單元的八叉樹結構,它的根節點是佔用的最大預測單元(LPU),然後以八叉樹結構劃分到一個固定的PU最大深度(這裡圖示是2,現在也基本上只劃分到2),用一個標誌位來表示對於當前深度(小於最大深度)是否還繼續進行劃分,用另一個標誌位來表示這個預測單元(PU)是否被佔用。

在這裡插入圖片描述

如上圖所示,第一幅圖表示的是LPU,它的split flag = 0,表示當前單元還未進行劃分,因為LPU只有被佔用了才會選擇是否進行劃分,所以不用表示pop flag = 1。第二幅圖是對LPU進行一次八叉樹劃分後的結果(為了表達簡單清楚,這裡舉例用的是劃分為四塊,實際上是使用的八叉樹劃分),它的split flag = 1 0000,其中第一個1代表對最大預測單元LPU進行了劃分,後面四個0代表對於劃分後的PU還沒有進行劃分,pop flag = 1000(順序是從左到右,從上到下)代表第一個劃分後的PU被佔用(有點),而其餘三個PU沒有被佔用。第三幅圖表達的是對LPU進行了兩次八叉樹劃分後的結果。它的split flag = 1 1010,第一個1表示進行了劃分,後面的1010表示第一個PU和第三個PU進行了進一步劃分,而第二和第四個PU還沒有進行進一步劃分。它的pop flag = 01 1001 1000,其中 01 表示未進行劃分的兩個PU,他們的佔用情況第一個沒有點,第二個有點,而 1001 和 1000表示兩個進一步劃分後的PU的點的佔用情況。

下圖主要展示了LPU劃分為PUs的過程,其中包括了第二層劃分的多種劃分模式。

在這裡插入圖片描述

3.2、PU中基於RDO的運動向量選擇

運動向量(motion vector) V將已編碼點的3D塊從參考幀的搜尋視窗W移位到當前幀,進入到要預測和編碼的當前塊B(=預測單元)。

在這裡插入圖片描述

對於每個PU,通過運動搜尋(motion search) 來測試許多的候選運動向量。運動搜尋的過程是這樣的,如下圖所示:

在這裡插入圖片描述

首先在點雲參考幀搜尋視窗W中確定一個起始點,然後從這個起始點沿著預測方向移動一個運動步長。(3D點雲中預測方向為 3 * 3 * 3的立方體 除去八個頂點和一箇中心點外剩餘的18個塊的方向,運動步長由量化引數QP決定。圖示中為了簡單用2D進行闡述)然後計算每一個到達的塊與要預測塊的拉格朗日代價,取代價最小的兩個(圖示中是三個)作為下一次運動搜尋的起始點,然後減小運動步長,從新的起始點繼續執行上一個步驟,如下圖所示:

在這裡插入圖片描述

然後再從所有新的位置中計算拉格朗日代價,繼續減小步長,重複上訴步驟,直到達到預測精度。

在這裡插入圖片描述

最後選取拉格朗日代價最小的MV作為最終預測的運動向量。

在這裡插入圖片描述
其中D是當前塊B的點與候選區域性預測器P(W,V)的點之間的幾何失真(geometrical distortion),也就是用來表達P(W,V)和B之間的相似度,一種可行的方法是計算B距離P多遠,即將當前塊B對映到區域性預測器P中,計算當前塊B中每個點在P中與它最近點的距離然後將其求和得到幾何失真。該預測器P(W,V)是通過運動向量V轉換屬於參考幀W的點而獲得的。幾何失真可以通過以下公式得到:

在這裡插入圖片描述

使用log是為了估計八叉樹編碼錯誤的位數。

類似於HEVC,可以使用標誌(用於符號和零值)和exp-Golomb碼的混合來獲得用於編碼運動向量V的速率R(V)。因為運動向量V中出現0和1的概率較大,所以分別用兩個單獨的標誌來表示0和1,對於大於0和1的情況,則將其減去2之後再進行編碼。(對於符號位單獨用一個位元進行表示)。

在PU樹結構中,可以使用代價的累加性一起確定最佳運動向量和結構,通常,λ是拉格朗日引數。

C= ∑i [D(B, P(W,Vi)) + λR(Vi)] + λR(split flags)+λR(pop flags)

這樣,將某個結構的全域性代價降至最低即可選擇該結構及其關聯的MV。

在這裡插入圖片描述

四、總結

通過引入LPU以及填充和未填充PU的概念,將預測單元從視訊到點雲壓縮。同時引入了一種新的簡單失真度量,以在RDO競爭過程中通過3D運動搜尋為每個PU選擇最佳運動向量。

當與提案m42520結合使用基於MV的預測器時,第二類點雲和第三類點雲的壓縮均獲得了可觀的收益。