視頻中的率失真優化

轉載自:http://blog.csdn.net/nb_vol_1/article/details/53288937
一、率失真優化的目標就是:
1、在一定的碼率(碼率也表現爲數據壓縮的程度,碼率越低,數據壓縮的越厲害)限制下,減少視頻的失真(減少失真就會提高視頻的主觀質量,看的人就會喜歡o(*≧▽≦)ツ)!
2、在允許一定的失真下,把視頻壓縮到最小!

二、編碼器的率失真優化的工作主要是按照某種策略選取最優的編碼參數,以實現最優的編碼性能

三、率失真函數RD 是在假定信源在給定的情況下,在用戶可以容忍的失真度內再現數據消息所必需獲得的最小平均互信信息,直白一點說,就是在允許的失真內,數據可以壓縮的極限!我們對數據的壓縮不能超過這個極限,否則,數據在解碼端就不能再現了!因此我們的工作就是,在不超過這個極限的前提下,儘量使數據壓縮得更小!

四、在多種候選編碼參數中選擇最優的編碼參數!
1、視頻失真的度量:ssd、sad、mse、psnr都可以度量失真度!
2、使用一組特定的編碼參數對視頻進行編碼的時候,我們可以獲得該編碼參數的條件下的碼率和失真,即率失真性能(R,D)
3、遍歷所有可行的編碼參數組合就可以得到所有的(R,D),在滿足一定的碼率限制(R)的情況下,找到是的失真(D)最小的一組參數!即最優的參數
4、拉格朗日方法就是率失真優化中最常用的優化工具
5、根據目標碼率,先確定量化參數QP,然後根據QP確定出拉格朗日參數λ!然後根據λ和一組編碼參數計算失真

五、率失真優化在編碼器中不同層次(CTU級、CU級、PU級、TU級等)的運用。附:CTU可以劃分成爲CU、CU在預測的時候被劃分成爲PU、CU在變換量化的時候被劃分成爲TU
1、在CTU級的應用。在總比特數R受限的情況下選擇一個CU(CU從8x8到64x64)的劃分模式,使得一個CTU的總失真D最小。
2、在CU級的應用。在總比特數R受限的情況下,適當的選擇選擇PU劃分模式和TU(TU從4x4到32x32)劃分模式,使得一個CU的總失真D最小。
3、在PU級的應用。對於幀內預測,就是從35中幀內模式中選出最優的一種,使得PU的失真D最小;對於幀間預測,選出最優的運動模式(包括運動矢量、參考圖像、預測權值等)使得PU的失真D最小
4、在TU級的應用。在最優的PU的模式下,選取最優的TU模式。

六、HM實際的優化方式
1、對於CTU。
(1)遍歷所有的CU劃分模式,確定最優的CU劃分模式
(2)對於確定的CU,遍歷所有的PU模式和TU模式的組合,確定最優的PU模式和TU模式
(3)對於其中的每一個PU,遍歷所有的預測模式,選取最優的預測模式
2、對於變換。採用Hadamard變換代替實際的DCT/SDT變換。
3、其他快速的策略
(1)提前終止策略(Early_CU)
如果當前CU的最優編碼模式是MODE_SKIP模式,那麼終止該CU後續四叉樹劃分和模式判決
(2)早期跳出模式(Early_Skip)
如果CU的PU劃分模式是PART_2Nx2N,預測模式是MODE_INTER,運動矢量差MVD是(0,0),且預測殘差不包含非零變換系數(就是變換系數全是0),就判定當前模式是最優模式,跳過剩餘的模式,直接進行下一步的四叉樹分割及子CU模式判決。
(3)快速CBF策略(CBF_Fast)
如果CU的預測模式是MODE_INTER,其對應的預測殘差不包含非零的變換系數,就跳過該CU的其餘候選模式,當前模式爲最優模式,且直接進行下一步的四叉樹分割
(4)縮減AMP模式
依據兩個參數來判斷是否縮減當前AMP模式。具體是利用在進行AMP模式判決當前的最優分割模式,以及父親節點CU內採用的分割模式和預測模式,來確定候選編碼中可使用的AMP模式。

七、率失真優化全流程
1、分層遞歸遍歷所有的CU劃分模式,選取最優的CU劃分模式,這個過程稱爲CU劃分模式判別
2、對於其中的每一個CU,遍歷所有的PU模式,選取最優的PU模式,並在此基礎上選擇最優的TU模式
3、對於其中的每一個PU,遍歷所有的預測模式,選取最優的預測模式,這個過程稱爲預測模式判別
(1)幀內預測模式。
①遍歷所有的預測模式,得到每種模式下的殘差信號,再對殘差信號進行Hadamard變換計算SATD值
②利用SATD值計算每種預測模式的率失真代價,選取率失真代價最小的幾種模式(與PU大小相關)爲預測模式集
③將已編碼相鄰塊的預測模式補充到預測模式集中
④遍歷模式集合中的所有模式,並對殘差信號進行正常編碼(熵編碼),計算率失真代價
⑤選取最優的預測模式作爲該PU的最優模式
⑥當亮度塊的模式確定之後,把該模式以及DC、planar、水平方向模式、垂直方向模式作爲色度塊的候選模式,選取最優的模式即可
(2)幀間預測模式。
HEVC採用了Merge和AMVP技術,更加高效地表示幀間預測參數,但是這兩種方式有比較大的區別,因此幀間預測可以分成Merge幀間預測模式和非Merge幀間預測模式(採用AMVP技術),分別選取最優的Merge幀間預測模式和非Merge幀間預測模式,然後從中選取最優的模式。
對於Merge幀間預測模式,遍歷所有的候選模式,計算率失真代價,選擇率失真代價最小的模式爲最優模式。當採用merge幀間預測模式I按摩,且預測殘差信號的編碼比特數爲零時,只需要編碼skip標識和merge索引兩個語法元素,此時該模式稱爲MODE_SKIP模式
對於非Merge幀間預測模式(採用AMVP技術)
①根據AMVP技術確定MVP列表,計算每個MVP的率失真代價,得到最優的MVP
②以最優MVP爲起始點,進行整像素運動預測,得到最優的整像素運動矢量
③以整像素運動矢量爲中心,進行半像素搜索,從周圍的8個點確定最優的半像素精度運動矢量
④以半像素精度矢量爲中心,進行1/4像素精度的運動搜索,確定最優的1/4像素精度運動矢量
(3)PU模式判別
①計算2Nx2N模式的率失真代價,將其作爲最優代價,如果預測殘差的編碼比特數爲零,那麼滿足CBF_Fast,直接跳至⑪,並將2Nx2N作爲最優的PU模式
②如果CU的深度已經取得最大值,且inter_4x4_enabled_flag是1,那麼執行③,否則執行④
③計算NxN模式的率失真,更新最優代價和模式,如果預測殘差的編碼比特數爲零,那麼滿足CBF_Fast,直接跳至⑪,並將NxN作爲最優的PU模式
④計算Nx2N模式的率失真代價,更新最優代價和模式,如果預測殘差的編碼比特數爲零,那麼滿足CBF_Fast,直接跳至⑪,並將Nx2N作爲最優的PU模式
⑤計算2NxN模式的率失真代價,更新最優代價和模式,如果預測殘差的編碼比特數爲零,那麼滿足CBF_Fast,直接跳至⑪,並將2NxN作爲最優的PU模式
⑥如果TestAMP_Hor爲1,當前CU執行水平方向上的AMP模式,否則執行本步驟。計算2NxnU模式的率失真代價,更新最優代價和模式,如果預測殘差的編碼比特數爲零,那麼滿足CBF_Fast,直接跳至⑪,並將2NxnU作爲最優的PU模式;否則計算2NxnD模式的率失真代價,更新最優的代價和模式,如果預測殘差的編碼比特數爲零,那麼滿足CBF_Fast,直接跳至⑪,並將2NnD作爲最優的PU模式
⑦如果TestAMP_Ver爲1,當前CU執行垂直方向上的AMP模式,否則執行本步驟。計算nLx2N模式的率失真代價,更新最優模式和代價,如果預測殘差的編碼比特數爲零,那麼滿足CBF_Fast,直接跳至⑪,並將nLx2N作爲最優的PU模式;否則計算nRx2N模式的率失真代價,更新最優模式和代價,如果預測殘差的編碼比特數爲零,那麼滿足CBF_Fast,直接跳至⑪,並將nRx2N作爲最優的PU模式
⑧注意上面的都是幀間的模式,現在需要計算幀內2Nx2N模式的率失真代價,更新最優模式和代價
⑨如果當前CU深度爲最大值,計算幀內NxN模式的率失真代價,更新最優模式和代價
⑩如果當前CU大於或等於PCM模式所允許的最小單元,並且代價大於PCM模式,那麼更新最優模式和代價
⑪結束搜索,得到最優的PU模式。注意對於每一種PU模式,都要夯實不同的TU劃分,選取最優的TU模式,因此最優的PU模式包含了最優的TU模式
(4)CU劃分模式判決
①把CTU作爲CU,計算率失真代價(最優PU模式時),此時應包含CU分割標誌(split_flag)的編碼比特數
②對CU進行四叉樹劃分,計算每個子CU的最小率失真代價,並對所有子CU的率失真代價求和,得到該CU的率失真代價
③爲每個子CU作爲CU重複②
④重複③直到編碼的最大深度
⑤從最大的編碼深度,比較4個子CU與CU的率失真代價,一次選出最優的劃分方式。
⑥碎語每個CU,如果其幀間2Nx2N模式爲MODE_SKIP,則滿足Early_SKIP條件,直接結束該CU的進一步劃分
4、結束!
最後放上一個常用的率失真優化模型
這裏寫圖片描述
J就是率失真的代價

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