Error Concealment by Post-processing at the decoder
3.6 在 compressed domain 進行錯誤隱藏的概念與設計
根據之前的認識,我們可以理解 MPEG-4 錯誤隱藏的多數作法是 在 pixel domain 操作。接下來要介紹的是利用 compressed domain 的 資訊而發展的 Error Concealment 演算法。
由於目前這套多媒體串流系統所使用的 MPEG-4 CODEC,
SP_Encore.lib 和 SP_Decore.lib 並不支持 Video Packet,在解碼器遇到 解碼錯誤時,是以整張畫面為單位進行捨棄。此時使用 compressed
domain 的 error concealment algorithm 是有必要的。Pixel domain 的 error concealment algorithm 難以即時地進行補救,它需要大量的運算 量和運算時間。由於目前中央處理器的能力已到達極限,無法縮短運 算時間,這意謂在多媒體串流系統上使用 compressed domain error concealment algorithm,客戶端有較大的機會提供一個重建畫面。
MPEG 和 H.26x 編碼系統的特色是藉由 motion estimation 和 motion compensation 等技術進行影像壓縮。在影像壓縮的過程中,motion vector 保留了物體移動的資訊。這些 motion vector 資訊就是所謂的 compressed domain 的資訊。
2nd-order motion field image processing:
由於最新畫面的解碼失敗,不進行重建的結果是後續來到的
MPEG-4 video frame 會因為對應到不屬於自己的 reference frame,造 成 motion compensation 時,motion vector 指向的 macroblock 或 block 不是對應於自己的 macroblock 或 block,這會造成畫面的混亂。
我的作法是重建一張照片(create a new image)。在 new image 上,
以 block by block 的方式重建。Block 的來源是根據已解碼的畫面而 得,new image 的 block 和已解碼的畫面關係最密切的就是最新解碼 完的畫面,在此稱作 previous frame。New image 和 previous frame 之
間的關係就是 motion vector,因此要重建畫面,首先就是要找到 new image 的 block 的 motion vector。
[14]中的構想:如果解碼最新的畫面失敗,便利用最後一次解碼 成功的圖片(previous frame)所持有的 motion vector,進行 motion forward projection。
Forward motion projection 的意義是利用 motion vector 的
magnitude,和相反的方向(inverse direction),進行 block projection 的 動作。
只使用 previous frame 的 motion vector 進行 forward motion projection 可能還不足夠。如果能利用兩張以上的 frame 的 motion vector 資訊,經過處理後再進行 forward motion projection,得到的重 建畫面應該更能讓大多數使用者感到滿意。
由於 motion vector 在 MPEG 之類的影像編碼技術中代表的意義是 block 在 frame 之間移動的位移,若是把每一個 block 都視作一個 object(物體),或是將 object 視作 block,那麼 motion vector 就是 object 的 velocity。Object 的移動不只是看當時 velocity 的計算結果,還需要 加上 acceleration 的影響。在這個演算法裡,object 就是 block,velocity
就是 motion vector,那麼 acceleration 就是相鄰畫面間的同一 object 的 motion vector difference。
考慮到 object 在連續畫面之間的連續性,在 new image 之前的兩 張畫面 previous frame 和 2nd previous frame 必然擁有著 new image 內 的 object。使用 previous frame 和 2nd previous frame 的 motion vector 可以估計 object trajectory(物體軌跡)。根據 object trajectory,我可以 推算出 new image 的特定 object 的位置。目前的 object 是以 block 為 單位出發,那麼找出相鄰 frame 的同一 object 的作法就是找出相鄰 frame 的同一 block,這稱作 block correspondence for object
association。更精確地講,要找出相鄰 frame 的同一 object,就是要找 出相鄰 frame 的同一 block 的位置。能夠找到同一個 block 的位置就 能找到它的 motion vector,這也意謂我可以計算 object 的 acceleration。
如果在 previous frame 中得到 block correspondence,意謂在 2nd previous frame 中能得到一個 corresponding block 代表同一個物體 (object association)。Corresponding block 不一定座落於以 8 為倍數的 座標上,無法持有 motion vector,但考慮到 block 所攜帶的 motion vector 就是 object 的移動資訊,如果 corresponding block 和 2nd previous frame 中某一塊 adjacent block 的有很高程度的重疊,那麼這一塊
adjacent block 極有可能攜帶了 corresponding block 的資訊,也就是 motion vector,這一塊 adjacent block 的 motion vector 可以視作 corresponding block 的 motion vector。圖示請參考 figure xx。
Previous Frame 2nd Previous
Frame
MV in PreVOP MV in PreVOP2
Corresponding block
Figure 3.2 – Block Correspondence
得到 adjacent block 的 motion vector 便能進行 acceleration 計算,
也就是能得到 object 在 new image 中會以什麼 motion vector 出現。
Object 在 new image 中的 motion vector 就是 previous frame 中的 motion vector 加上 acceleration。根據這個計算結果,將 motion vector 進行 forward motion projection。每一個投射的 block 並不會精準地落在以 8 為倍數的座標上。New image 上的 block 投影通常會佔據四個 adjacent blocks。如同之前的概念,block 的 motion vector 承載的是 object 的位 移,如果它和 object 的重疊程度很高,那麼它所承載的 motion vector
就會是 object 的 velocity。進行 forward motion projection 之後,每個
new image 中的 block 會決定它要承載哪個 block 的 motion vector,決 定的基準是面積重疊度。New image 中的大部份 block 藉此成為 new image 中的 corresponding block。圖示請參考 figure xx。
由於從 previous frame 進行 forward motion projection 時,有些 new image 的 block 並沒有得到 object 的投影,意思是它們無法代表任何 object,這些 new image 的 block 不屬於 new image 的 corresponding blocks,我將這些 block 當作是不存在於 previous frame 的 static background(背景)。因為,當這些 block 和物體有關時,它們必然會是 corresponding block 中的一員,當這些 block 屬於 previous frame 的 background,它們得到的 motion vector 是 0。造成這種現象的主要原 因是因為 previous frame 中,這些 block 的位置存在著一個 moving
object,當這個 moving object 在 new image 中移動到新的地點時,被 遮蔽的背景(background)就顯露出來。
對於這些 new image 中不屬於 corresponding block 的 background,
直覺的處理方式就是從 2nd previous frame 中複製同樣位置的內容 (content)。因此,new image 中,被投射的 block 和沒被投射的 block 都得到了解決。
Candidate Motion Vector
New Image Previous
Frame
Figure 3.3 – forward motion projection
由 motion vector 的建立,和 2nd previous frame 的 copied content,new image 便能順利的建立。
藉