HEVC代碼學習18:運動估計和運動補償總結

經過了這段時間對幀間預測部分代碼的學習,算是大體上了解了其工作原理。只看理論不看代碼,體會不深刻,在看了代碼後,有了一種恍然大悟的感覺,很多算法實現和看原理時理解的不一樣。下面來整理一下之前寫的博客,總結一下運動估計和運動補償具體的代碼實現思路,主要談一下代碼處理的思路,

運動估計

運動估計實際就是當前塊在參考圖像中搜索找到匹配塊的處理過程。在實際代碼中入口函數是xMotionEstimation,然後分爲整像素搜索xPatternSearchxPatternSearchFast和亞像素搜索xPatternSearchFracDIF
詳見http://blog.csdn.net/lin453701006/article/details/70860150

整體思路:整像素搜索後會得到一個整像素單位的最優MV,這個MV值作爲新的起始點進行亞像素搜索。亞像素搜索中先後又進行了1/2像素搜索,找到1/2像素單位的最優MV作爲起始點,進行1/4像素搜索,最終得到了1/4像素單位的最優MV。最終得到的有用數據是1/4像素單位的MV和對應的參考幀索引。

在搜索中,由於亞像素位置是沒有值的,因此就需要對參考圖像進行插值,得到了整像素、1/2、1/4像素位置的圖像,存放在了m_filteredBlock[4][4]中。
詳見http://blog.csdn.net/lin453701006/article/details/73188458

整個搜索過程是個逐步找最優的過程。

整像素搜索的入口函數是xPatternSearchxPatternSearchFastxPatternSearch進行的是全局搜索,xPatternSearchFast進行的是快速算法,一般情況下使用的是xPatternSearchFast
詳見http://blog.csdn.net/lin453701006/article/details/70860150
xPatternSearchFast將會使用TZ search,進行菱形搜素搜索,得到一個最優的整像素MV。
詳見http://blog.csdn.net/lin453701006/article/details/77089786

亞像素搜索的入口函數是xPatternSearchFracDIF,可以分爲插值和搜索兩個部分。插值分爲1/2像素插值xExtDIFUpSamplingH和1/4像素插值xExtDIFUpSamplingQ,使用插值濾波器得到亞像素位置的參考塊。xPatternRefinement是在以前一步得到的最優MV指向的像素爲中心的3x3的像素塊中,搜索計算RD cost,找最優匹配塊,進一步計算最優MV。
詳見http://blog.csdn.net/lin453701006/article/details/70156817

運動補償

在運動估計之後,得到的是MV和參考幀索引,運動補償就是通過這些信息來構造預測圖像,實際代碼中,運動補償主要進行亞像素位置插值補償,生成預測圖像。運動補償的入口函數爲motionCompensation,其中分爲單向預測xPredInterUni、雙向預測xPredInterBi和加權預測xWeightedPredictionUnixWeightedPredictionBi
詳見http://blog.csdn.net/lin453701006/article/details/72677630

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章