幀間預(yù)測是利用視頻時域的相關(guān)性娇斩,使用鄰近已編碼圖像像素預(yù)測當(dāng)前圖像的像素窗轩,以達到有效去除視頻時域冗余的目的。由于視頻序列通常包括較強的時域相關(guān)性敦第,因此預(yù)測殘差通常是“平坦的”争群,即很多殘差值接近于“0”回怜。將殘差信號作為后續(xù)模塊的輸入進行變換、量化换薄、掃描及熵編碼玉雾,可實現(xiàn)對視頻信號的高效壓縮。
幀間預(yù)測包含兩塊內(nèi)容:
1.運動估計:為當(dāng)前圖像的每個像素塊在之前已編碼圖像中尋找一個最佳匹配塊轻要。
2.運動補償:根據(jù)運動矢量和幀間預(yù)測方法复旬,求得當(dāng)前幀的估計值。
1.運動估計
運動估計(ME)就是指提取當(dāng)前圖像運動信息的過程冲泥。
基于像素的運動表示法
由于在圖像中準(zhǔn)確分割出運動物體的背景是很困難的驹碍,目前大多數(shù)運動估計算法都是基于像素值進行的壁涎。這類方法中,最直接的方法是為每個像素指定一個運動 向量志秃,稱為基于像素的運動表示法怔球。該方法普遍適用,但是它需要估計出大量的未知量浮还,而且其解通常并不能反映場景中物體真實的運動情況竟坛。此外,該方法需要為每一個像素附加傳送一個MV钧舌,數(shù)據(jù)量很高担汤。
基于區(qū)域的運動表示法
對于包含多個運動物體的場景,更適用的方法是把一幅圖像分為多個區(qū)域洼冻,使得每個區(qū)域恰好表征了一個完整的運動物體崭歧,這稱為基于區(qū)域的運動表示法,每個區(qū)域中的像素具有相同的運動形式碘赖。然而驾荣,由于運動物體的形狀往往不規(guī)則,因此區(qū)域護劃分需要大量的信息來表征普泡,而且準(zhǔn)確的劃分方式需要大量的計算才能確定,因而基于區(qū)域的表示法在實際中較少使用审编。
基于塊的運動表示法
為了降低基于區(qū)域的運動表示法的復(fù)雜度撼班,可以講圖像分為不同大小的像素塊,只要塊大小選擇合適垒酬,則各個塊的運動形式可以看成是統(tǒng)一的砰嘁,同時每個塊的運動參數(shù)可以獨立地進行估計,這就是常用的基于塊的運動表示法勘究。這種方法兼顧了運動估計精度和復(fù)雜度矮湘,在二者之間進行了一個較好的這種,因此該方法是視頻編碼國際標(biāo)準(zhǔn)的核心技術(shù)口糕。
1.1 運動估計準(zhǔn)則
常用的匹配準(zhǔn)則有MSE(Mean square error),MAD(mean absolutie difference )和SAD(Matching-Pixel Count)等缅阳。為了簡化計算,一般用SAD(Sum of absolute difference)來代替MAD景描。因為SAD不含乘除法十办,且便于硬件實現(xiàn),因而使用最為廣泛超棺。SAD準(zhǔn)則僅考慮了殘差的大小向族,未考慮編碼運動信息所需的比特數(shù)。在運動估計過程中使用了拉格朗日率失真優(yōu)化的方法來選擇MV棠绘,編碼器為每個運動失真計算拉格朗日待機件相。
J = SAD(x,y)+λ (motion)* R(motion)
1.2搜索算法
常用的搜索算法有:全搜索算法再扭,二維對數(shù)搜索算法,三步搜索算法等夜矗。H.265/HEVC官方測試編碼器給出了兩種搜索算法:一種是全搜索算法霍衫;另一種是TZSearch算法。
全搜索算法:對搜索框內(nèi)所有可能的未知計算兩個塊的匹配誤差侯养,所得的最小匹配誤差對應(yīng)的MV一定為全局最優(yōu)的MV敦跌。然而,全搜索算法復(fù)雜度極高逛揩,無法滿足實時編碼柠傍。
TZSearch算法:
1.確定起始的搜索點:AMVP技術(shù)來確定其實搜索點,AMVP會給出若干個候選預(yù)測MV辩稽,編碼器從中選擇失真代價最小的作為預(yù)測MV惧笛,并用其所指向的位置作為起始搜索點。
2.搜索: 以步長1開始逞泄,在搜索范圍內(nèi)進行搜索患整,其中步長以2的整數(shù)次冪的形式題贈,選出率失真代價最小的點作為該步驟的搜索結(jié)果喷众。
3.做二點搜索:若步驟2中得到的最優(yōu)點對應(yīng)的步長為1各谚,則需要在該點周圍做兩點搜索,其主要目的是補充搜索最優(yōu)點周圍尚未搜索的點到千。
4.在遠距離的點做一定范圍的全局搜索:若步驟2得到的最優(yōu)點對應(yīng)的步長大于某個閾值昌渤,則以該最優(yōu)點為中心,在一定范圍內(nèi)做全搜索(搜索范圍內(nèi)的所有點)憔四,選擇率失真代價最小的最為該步驟的最優(yōu)點膀息。
5.重復(fù):以步驟4得到的最優(yōu)點為新的起始搜索點,重復(fù)步驟2~4了赵,細化搜索潜支。當(dāng)相鄰兩次細化搜索得到的最優(yōu)點一致時停止細化搜索。此時搜索時間比較結(jié)果柿汛。
2.亞像素精度運動估計
在實際場景中冗酿,由于物體運動的距離并不一定是像素的整數(shù)倍,因此需要將運動估計的精度提升到亞像素級別苛茂。H.265/HEVC沿用了上一代標(biāo)準(zhǔn)使用的1/4像素精度運動估計已烤,并進一步發(fā)展了其亞像素差值算法。相比于H.264/AVC中的6抽頭濾波器(用于半像素精度)以及兩點內(nèi)插(用于1/4像素精度)方法妓羊,H.265/HEVC使用了更多的鄰近像素點進行亞像素精度插值胯究。
1.亮度分量插值算法
亮度插值示意圖中不同顏色框出來的表示不同像素位置的點。Ao,o和Do,o為1/4像素點躁绸;Bo,o和Ho,o為半像素點裕循;Co,o和No,o為3/4像素點臣嚣。H.265/HEVC標(biāo)準(zhǔn)規(guī)定,亮度分量半像素位置的值由基于離散余弦變換的8抽頭濾波器生成剥哑,1/4和3/4像素位置的值由基于離散余弦變換的7抽頭濾波器生成硅则。
亞像素插值的過程,分為兩步驟:
1.對整像素所在的行或列進行插值株婴。
2.對剩余亞像素位置進行插值怎虫,對于不在整像素行或列位置的像素。
具體的做法可以參考: HEVC 幀間預(yù)測技術(shù)總結(jié)
2.色度分量插值算法
由于亮度分量運動估計達到了1/4像素精度困介,因此色度分量運動搜索需要達到1/8像素精度大审,因此色度分量運動搜索需要達到1/8精度(對于YCbCr 4:2:0而言)。色度分量亞像素差值如下圖(只是簡單表示了一下)黑色填充的區(qū)域為整像素點座哩,紅框內(nèi)的其余的點都為亞像素點徒扶。標(biāo)準(zhǔn)規(guī)定色度亞像素插值使用基于離散預(yù)先變換的4抽頭濾波器。
色度分量亞像素插值方法與亮度分量類似根穷,也是先對整像素所在的行或列進行插值姜骡,再利用其結(jié)果對其余位置進行插值。
亞像素位置 | 抽頭系數(shù) |
---|---|
1/8 | {-2, 58, 10, -2} |
2/8 | {-4, 54, 16, -2} |
3/8 | {-6, 46, 28, -4} |
4/8 | {-4, 36, 28, -4} |
5/8 | {-4, 28, 46, -6} |
6/8 | {-2, 16, 54, -4} |
7/8 | {-2, 10, 58, -2} |
3.MV預(yù)測技術(shù)
補充知識:在HEVC的針尖預(yù)測編碼中屿良,每一個幀間預(yù)測單元PU都含有一組運動參數(shù):運動矢量殘差圈澈、參考幀索引和幀間預(yù)測標(biāo)記等。運動矢量差(MVD)用于表示當(dāng)前編碼PU的運動矢量和參考幀中最匹配PU的MV之間的差值管引。
HEVC定義了三種幀間預(yù)測模式:幀間模式(Inter mode)士败、跳過模式(Skip mode)和合并模式(Merge mode)。為提高運動矢量預(yù)測和編碼的壓縮效率褥伴,對這三種模式都采用了運動矢量競爭(MVC)機制,從所給的包含諸多空域和時域運動候選的候選列表中選擇一個最佳的運動候選漾狼。
空域上相鄰塊的MV具有較強的相關(guān)性重慢;同時,MV在時域上也具有一定的相關(guān)性逊躁。若利用空域或者時域上相鄰塊的MV對當(dāng)前塊的MV進行預(yù)測似踱,僅對預(yù)測殘差進行編碼,則能夠大量節(jié)省MV的編碼比特數(shù)稽煤。H.265/HEVC在MV的預(yù)測方面提出了兩種新的技術(shù)——Merge技術(shù)和AMVP技術(shù)核芽。
Merge和AMVP技術(shù)都使用了空域和時域MV預(yù)測的思想,通過建立候選MV列表酵熙,選取性能最優(yōu)的一個作為當(dāng)前PU的預(yù)測MV轧简。
二者的區(qū)別主要表現(xiàn)在以下兩個方面:
1.Merge可以看成一種編碼模式,在該模式下匾二,當(dāng)前PU的MV直接有空域(或時域)上鄰近的PU預(yù)測得到哮独,不存在MVD拳芙;而AMVP可以看成一種MV預(yù)測技術(shù),編碼器只需要對實際MV與預(yù)測MV的差值進行編碼皮璧,因此是存在MVD的舟扎。
2.二者候選MV列表長度不同,構(gòu)建候選MV列表的方式也有所區(qū)別悴务。
3.1 Merge模式
Merge模式會為當(dāng)前PU建立一個MV候選列表睹限,列表中存在5個候選MV(及其對應(yīng)的參考圖像)。通過遍歷5個候選MV讯檐,并進行率失真代價計算羡疗,最終選取率失真代價最小的一個作為該Merge模式的最優(yōu)MV。若編/解碼端依照相同的方式建立該候選表裂垦,則編碼器只需要傳輸最優(yōu)MV在候選列表中索引即可顺囊,這樣大幅節(jié)省了運動信息的編碼比特數(shù)。
Merge模式建立的MV候選列表中包含了空域和時域兩種情形蕉拢;而對于BSlice,還包含組合列表的方式特碳。
(1)空域候選列表的建立
空域最多提供4個候選MV,即最多使用圖中5個候選塊中的4個候選塊的運動信息晕换,列表按照A1-B1-B0-A0-(B2)的順序建立午乓,其中B2為替補,當(dāng)A1闸准,B1益愈,B0,A0中只有一個或多個不存在時夷家,需要使用B2的運動信息蒸其。
為了防止虛化(指什么),對于N2N库快,nL2N和nR2N模式的第二個PU的候選位置A1是不可用的摸袁,這種情況下的選取順序為B1->B0->A0->B2。同理义屏,對于2NN靠汁,2NnU和2NnD模式第二個PU的候選位置B1是不可用的,這種情況下的選取順序是A1->B0->A0->B2闽铐。HEVC視頻編碼框架
(2)時域候選列表的建立
利用當(dāng)前PU在鄰近已編碼圖像中對應(yīng)位置PU(同位PU:和當(dāng)前幀中當(dāng)前塊處于相同的空間位置)的運動信息蝶怔。與空域情況不同,時域候選列表不能直接使用候選塊的運動信息兄墅,而需要根據(jù)參考圖像的位置關(guān)系做相應(yīng)的比例伸縮調(diào)整踢星。
cur_PU表示當(dāng)前PU,col_PU表示同位PU察迟,td和tb分別表示當(dāng)前圖像cur_pic斩狱、同位圖像col_pic與二者參考圖像cur_ref耳高、col_ref之間的距離,則當(dāng)前PU的時域候選MV為:curMV = (td/tb)*colMV
(3)組合列表的建立
對于B Slice中的PU而言所踊,由于存在兩個MV泌枪,因此其MV候選列表也需要提供兩個預(yù)測MV。H.265/HEVC標(biāo)準(zhǔn)將MV候選列表中的前4個候選MV進行兩兩組合,產(chǎn)生了用于BSlice組合列表秕岛。
3.2 AMVP模式(Inter 模式)
高級運動向量預(yù)測(Advanced Motion Vector Prediction, AMVP)利用空余碌燕、時域上運動向量的相關(guān)性,為當(dāng)前PU建立了候選預(yù)測MV列表继薛。編碼器從中選出最優(yōu)的預(yù)測MV修壕,并對MV進行差分編碼;解碼端通過建立相同的列表遏考,僅需要運動向量殘差(MVD)與預(yù)測MV在該列表中的序號即可計算出當(dāng)前PU的MV慈鸠。
類似于Merge模式,AMVP候選MV列表也包含空域和時域兩種情形灌具,不同的是AMVP列表長度僅為2青团。
AMVP候選列表構(gòu)建流程中空域的5個位置和merge模式下空域的5個位置完全相同,但最終選擇的是兩個最優(yōu)位置咖楣,其中一個來自上邊塊督笆,另一個來自左邊塊。而時域運動矢量的選取是利用兩個不同預(yù)測方向的時域相鄰預(yù)測單元的運動矢量作為測量值诱贿,并選取最優(yōu)的一個作為時域運動矢量娃肿。當(dāng)時域和空域候選子集選取完成后,首先去除重復(fù)的運動矢量珠十,其次檢查運動矢量的總數(shù)是否為2料扰,若大于2則保留前兩個即去除索引值大于1的,若小于2則添加零運動矢量焙蹭。
空域運動矢量最多有2個預(yù)測運動矢量记罚,是從空域候選列表的建立圖中5個位置中選取的。預(yù)測運動矢量選取順序為:
1.左相鄰塊:A0->A1->縮放的A0->縮放的A1壳嚎。
2.上相鄰塊:B0->B1->B2->縮放的B0->縮放的B1->縮放的B2。
左候選子集和上候選子集均有四種處理預(yù)測運動矢量的方式末早,且可以劃分為兩類:運動矢量不縮放情形和運動矢量縮放情形烟馅。而且總是先處理不縮放情形靶病,再處理縮放情形曲秉。對于兩種情形的規(guī)定如下:
1.不需要縮放的情形:
(1)使用同一個參考列表啥箭,同一個參考圖像索引谓媒。
(2)使用不同參考列表妒茬,同一個參考圖像索引。
2.需要縮放的情形:
(1)同一個參考列表祖驱,不同參考圖像索引按咒。
(2)不同參考列表,不同參考圖像索引梭纹。
因此躲惰,具有相同圖像參考索引的不需要進行縮放操作,其他情況要進行縮放操作变抽。時域運動矢量候選的選取方式與merge模式的時域候選方式相同础拨,且對于空域縮放過程和時域縮放過程相同。