CU PU TU劃分以及PU最佳預測模式選擇
在HM對CU進行劃分(CU模式判別)、PU模式選擇(劃分)、以及PU預測模式劃分的程序總算有點理解,現對整個程序進行詳細介紹,
HM進行塊劃分和模式選擇主要的作業是:
一、分層遞回所有CU劃分模式,
二、對每一個CU遍歷所有PU(劃分)模式,選出最優劃分模式,與此同時也完成了最優TU模式的選擇,
三、對每一個PU遍歷所有的預測模式(intra,inter等,對幀內幀間都遍歷一遍比較選出最優模式,記錄預測資料,選擇最優預測模式,
劃分程序中并不是按一二三的順序進行的,為并不是把CU劃分好了再進行PU模式選擇和預測模式選擇,是后者在CU劃分的程序中進行了,畫了兩個圖便于理解如下圖所示:


首先關于CU劃分講解:
①把CTU作為CU(LCU),計算此CU (這個CU已完成了二跟三)的RDCost,此時出為64 * 64,深度為0,記錄預測資料,包含分割資料split_flge,
②對64 * 64的CU進行四叉樹劃分,得到四個32 * 32的CU ,計算這四個小CU的RDCost,相加得到RDCost和,并且得到四個分別的最佳預測模式和預測資料并記錄,
③對32 * 32的CU繼續劃分,得到四個16 * 16的CU ,同樣的重復②中操作,
④達到最深深度8 * 8的CU同樣進行②的操作,用四個8 * 8的CU率失真代價之和與被拆分的16*16的CU進行比較作為反饋,決定是否拆分(若小的小則確實該拆分,若大的小則不必進行分四叉樹),
⑤進行向上的比較,確定是否四叉樹劃分,
這樣就是所謂的遍歷一遍,也就是說一個LCU被劃分為64個最小CU后才能完成最后的CU劃分,我們必須等劃分到8x8才能決定CU的劃分到底是什么樣的,即是選擇8x8還是16x16,待16x16完成以后,就選擇16x16還是32x32,待32x32完成以后,就決定是32x32還是64x64,所以只有8x8CU劃分完畢才能做后續CU劃分的決定,不管CU的大小多大,每一個CU預測完成(即確定了當前pu劃分層次的pu預測模式)之后,都會有物件的物件來存盤和當前CU所有有關的預測資料(最佳預測模式,預測資料,預測殘差),
下面對PU模式選擇的講解:
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模式
下面對PU模式選擇進行講解:
在對每一個PU的模式選擇,都會對幀內和幀間進行遍歷,待比較RDCost之后再選擇此PU塊選擇幀內模式還是幀間模式,
1)幀間預測模式,
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像素精度運動矢量
2)幀內預測模式,
①遍歷所有的預測模式,得到每種模式下的殘差信號,再對殘差信號進行Hadamard變換計算SATD值
②利用SATD值計算每種預測模式的率失真代價,選取率失真代價最小的幾種模式(與PU大小相關)為預測模式集
③將已編碼相鄰塊的預測模式補充到預測模式集中
④遍歷模式集合中的所有模式,并對殘差信號進行正常編碼(熵編碼),計算率失真代價
⑤選取最優的預測模式作為該PU的最優模式
⑥當亮度塊的模式確定之后,把該模式以及DC、planar、水平方向模式、垂直方向模式作為色度塊的候選模式,選取最優的模式即可
以上的程序都是在函式TEncCu::xCompressCU中實作,
以上是學習筆記,僅供于學習,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/280990.html
標籤:其他
