本發(fā)明主張在2014年11月20日提出的申請?zhí)枮?2/082,222的美國臨時專利申請的優(yōu)先權(quán);主張在2015年3月2日提出的申請?zhí)枮?2/126,969的美國臨時專利申請的優(yōu)先權(quán);以及主張在2015年6月22提出的申請?zhí)枮?2/182,685的美國臨時專利申請的優(yōu)先權(quán)。本發(fā)明還涉及于2014年2月21日提交的申請?zhí)枮?1/942,819的美國臨時專利申請;涉及于2014年3月17日提交的申請?zhí)枮?1/954,181的美國臨時專利申請;涉及于2014年9月1日提交的申請?zhí)枮?2/044,385的美國臨時專利申請。因此在全文中合并參考這些專利申請案。
技術(shù)領(lǐng)域
本發(fā)明是有關(guān)于包括幀內(nèi)塊復(fù)制(Intra-block copy,IntraBC)模式和幀間預(yù)測模式的多個編碼模式的視頻編碼,特別是有關(guān)于在幀間預(yù)測模式中編碼的切片中處理自適應(yīng)運(yùn)動向量分辨率塊的技術(shù)和處理用于屏幕內(nèi)容編碼或視頻編碼的幀內(nèi)塊復(fù)制編碼模式的塊向量的技術(shù)。
背景技術(shù):
高效率視頻編碼(High Efficiency Video Coding,以下簡稱為HEVC)是近年來已經(jīng)開發(fā)的新的編碼標(biāo)準(zhǔn)。在高效率視頻編碼系統(tǒng)中,H.264/AVC中固定尺寸的宏塊由稱為編碼單元(coding unit,CU)的靈活塊替換。編碼單元中的像素共享相同的編碼參數(shù)以提高編碼效率。編碼單元可從最大編碼單元(largest CU,LCU)開始,其在HEVC中也被稱為編碼樹單元(coded tree unit,CTU)。除了編碼單元的概念,預(yù)測單元(PU)的概念也被引入HEVC中。一旦編碼單元分層樹的分割完成,則根據(jù)預(yù)測類型和預(yù)測單元分割,將每個葉編碼單元進(jìn)一步分割成一個或多個預(yù)測單元(PU)。
在高效率視頻編碼標(biāo)準(zhǔn)的屏幕內(nèi)容編碼(screen content coding)的當(dāng)前發(fā)展中,已經(jīng)采用了對屏幕內(nèi)容的編碼效率的改進(jìn)的一些工具。對于幀內(nèi)塊(Intra block),使用基于來自相鄰塊的重建像素的預(yù)測,來執(zhí)行根據(jù)現(xiàn)有方法的幀內(nèi)預(yù)測。幀內(nèi)預(yù)測可從一組幀內(nèi)模式中選擇一個幀內(nèi)模式,這組幀內(nèi)模式包括垂直模式,水平模式和各種角度預(yù)測模式。對于HEVC屏幕內(nèi)容編碼來說,已使用稱為幀內(nèi)塊復(fù)制(幀內(nèi)塊復(fù)制)的新的幀內(nèi)編碼模式。最初由Budagavi在AHG8中提出幀內(nèi)塊復(fù)制技術(shù)(Budagavi等人,AHG8:Video coding using Intra motion compensation,Joint Collaborative Team on Video Coding(JCT-VC)of ITU-T SG16WP3and ISO/IEC JTC 1/SC 29/WG11 13th Meeting:Incheon,KR,18–26Apr.2013,Document:JCTVC-M0350)(以下稱為JCTVC-M0350)。根據(jù)JCTVC-M0350的示例在圖1中示出。其中使用幀內(nèi)運(yùn)動補(bǔ)償(motion compensation,MC)對當(dāng)前編碼單元(CU,110)進(jìn)行編碼。預(yù)測塊(120)的位置來自當(dāng)前編碼單元和位移向量(112)。在該示例中,搜索區(qū)域限于當(dāng)前編碼樹單元(coding tree unit,CTU),左側(cè)編碼樹單元和左側(cè)第二個編碼樹單元。從已經(jīng)重建的區(qū)域獲得預(yù)測塊。然后,對位移向量(也稱為塊向量(block vector,塊向量))和當(dāng)前編碼單元的殘差進(jìn)行編碼。眾所周知,HEVC采用編碼樹單元和編碼單元塊結(jié)構(gòu)作為用于編碼視頻數(shù)據(jù)的基本單元。每個圖像被分成多個編碼樹單元,并且每個編碼樹單元被劃分成編碼單元。在預(yù)測階段期間,每個編碼單元可以被劃分為多個塊,稱為預(yù)測單元(prediction units,PU),用于執(zhí)行預(yù)測處理。在針對每一編碼單元形成預(yù)測殘差之后,將與每一編碼單元相關(guān)聯(lián)的殘差劃分為稱為變換單元(TU)的多個塊以應(yīng)用變換。
在JCTVC-M0350中,至少在如下方面,幀內(nèi)運(yùn)動補(bǔ)償不同于用于幀間預(yù)測的運(yùn)動補(bǔ)償。
·運(yùn)動向量被限制為1維(即水平或垂直)以用于幀內(nèi)運(yùn)動補(bǔ)償,而幀間預(yù)測使用2維運(yùn)動估計。
·二值化(Binarization)為固定長度以用于幀內(nèi)運(yùn)動補(bǔ)償,而幀間預(yù)測使用指數(shù)哥倫布(exponential-Golomb)。
·幀內(nèi)運(yùn)動補(bǔ)償引入新的語法元素以發(fā)信號指示運(yùn)動向量為水平還是垂直。
基于JCTVC-M0350,Pang等在Non-RCE3中做了一些修改(Intra Motion Compensation with 2-D MVs,Joint Collaborative Team on Video Coding(JCT-VC)of ITU-T SG 16WP 3and ISO/IEC JTC 1/SC 29/WG 11,14th Meeting:Vienna,AT,25July–2Aug.2013,Document:JCTVC-N0256(在下文中記做JCTVC-N0256))。首先,幀內(nèi)運(yùn)動補(bǔ)償被擴(kuò)展以支持2維運(yùn)動向量,以使得運(yùn)動向量分量可以同時為非0。對于幀內(nèi)運(yùn)動補(bǔ)償來說,這將比原來的方式提供更大的靈活性,其中原來的方式中運(yùn)動向量被限制為嚴(yán)格地水平或垂直。
在JCTVC-N0256中,揭示兩種運(yùn)動向量編碼方法:
·方法1:運(yùn)動向量預(yù)測。左側(cè)或上方的運(yùn)動向量被選擇作為運(yùn)動向量預(yù)測子,以及得到的運(yùn)動向量差值(motion vector difference,MVD)被編碼。一個標(biāo)志用于指示運(yùn)動向量差值是否為0。當(dāng)運(yùn)動向量差值不為0,則指數(shù)哥倫布編碼的第三位指數(shù)被使用以編碼運(yùn)動向量差值的剩余絕對水平。另一個標(biāo)志被使用以編碼運(yùn)動向量差值的符號。
·方法2:無運(yùn)動向量預(yù)測。使用用于HEVC中的運(yùn)動向量差值的指數(shù)哥倫布碼,編碼運(yùn)動向量。
在JCTVC-N0256中揭示的其他差異是,2維幀內(nèi)運(yùn)動補(bǔ)償被進(jìn)一步與管線(pipeline)友好的方式結(jié)合:
1.不使用插值濾波器,
2.運(yùn)動向量搜索區(qū)域被限制。分兩種情況進(jìn)行討論:
a搜索區(qū)域?yàn)楫?dāng)前編碼樹單元和左側(cè)編碼樹單元或者
b搜索區(qū)域?yàn)楫?dāng)前編碼樹單元和左側(cè)編碼樹單元的最右邊4列采樣。
在JCTVC-R0309(Pang,et al.,Non-SCCE1:Combination of JCTVC-R0185and JCTVC-R0203,Joint Collaborative Team on Video Coding(JCT-VC)of ITU-T SG16WP3and ISO/IEC JTC 1/SC29/WG11,18th Meeting:Sapporo,JP,30June–9July 2014,Document:JCTVC-R0309)中,塊向量編碼被修改為利用相鄰塊向量和已編碼的塊向量作為塊向量預(yù)測子。塊向量預(yù)測子技術(shù)在SCM 2.0(高效率視頻編碼屏幕內(nèi)容編碼測試模型2.0)中被采用。塊向量預(yù)測子以與在HEVC中的先進(jìn)運(yùn)動向量預(yù)測(advanced motion vector prediction,AMVP)的方法相似的方式來得到。根據(jù)圖2所示的優(yōu)先順序,通過先檢查空間相鄰塊A1和B1處的塊向量的可用性,預(yù)測子候選列表被構(gòu)建。若空間相鄰塊均不包括塊向量或者空間相鄰塊中的一個不包括塊向量,則最后兩個已編碼的塊向量或最后兩個已編碼的塊向量的其中一個被用于填充塊向量候選列表。替代的塊向量利用(-2*CU_width,0)和(-CU_width,0)來初始化。為避免需要線緩沖器,在當(dāng)前編碼樹單元之外的上方塊向量被視為不可用。最后兩個編碼的塊向量被重置為(0,0)以用于每一個編碼樹單元來避免數(shù)據(jù)依賴。
在美國臨時專利申請序列號62/044,385中,公開了一種用于幀內(nèi)塊復(fù)制模式的合并模式的方法,其中合并索引指向幀內(nèi)塊復(fù)制編碼的合并候選。在某些情況下,塊向量預(yù)測子可能指向無效塊。圖3A示出指向無效塊的塊向量預(yù)測子的一個示例。如圖3A所示,塊向量預(yù)測子312從顯示為實(shí)心正方形的先前處理塊314指向如虛線正方形所示的參考塊316。如果當(dāng)前塊向量322使用塊向量312作為預(yù)測子,則顯示為實(shí)心正方形的當(dāng)前塊324將指向被顯示為虛線正方形的參考區(qū)域326。如圖3A所示,用于當(dāng)前塊的參考塊326的一半在當(dāng)前塊中,其尚未重建。圖3B示出指向無效塊的塊向量預(yù)測子的另一示例。如圖3B所示,塊向量預(yù)測子332從顯示為實(shí)心矩形的先前處理塊334指向顯示為虛線矩形的參考塊336。如果當(dāng)前塊向量342使用塊向量332作為預(yù)測子,則顯示為實(shí)線矩形的當(dāng)前塊344將指向被顯示為虛線矩形的參考區(qū)域346。如圖3B所示,參考塊346的一半在尚未處理的區(qū)域中。
因此,應(yīng)該對塊向量預(yù)測子施加一些約束,以確保有效塊向量用于當(dāng)前幀內(nèi)塊復(fù)制的塊。特別地,塊向量預(yù)測子的x軸分量和/或y軸分量應(yīng)滿足一些要求。
近來,已經(jīng)由Li等人在HEVC平面內(nèi)容編碼中提出了一種稱為自適應(yīng)運(yùn)動向量分辨率的技術(shù),該技術(shù)記載于JCTVC-S0085中(Li et al.,Adaptive motion vector resolution for screen content,Joint Collaborative Team on Video Coding(JCT-VC)of ITU-T SG 16WP 3and ISO/IEC JTC 1/SC 29/WG 11,19th Meeting:Strasbourg,FR,17–24Oct.2014,Document:JCTVC-S0085),其中使用切片層標(biāo)志來指示用于幀間編碼的預(yù)測單元的運(yùn)動向量的分辨率是否是整數(shù)精度或是1/4像素精度。在美國臨時專利申請序列號61/942,819和序列號61/954,181中,當(dāng)前圖像被視為幀內(nèi)塊復(fù)制操作的參考圖像之一。該當(dāng)前圖像被放置在參考圖像列表中,或者替換列表中的一個現(xiàn)有參考圖像。
如前所述,在當(dāng)前的HEVC屏幕內(nèi)容編碼測試模型中,塊向量總是使用整數(shù)分辨率,而運(yùn)動向量可以是整數(shù)分辨率和四分之一像素分辨率。塊向量與運(yùn)動向量之間的推導(dǎo)過程存在差異。塊向量和運(yùn)動向量的推導(dǎo)的相應(yīng)文本如表1A,表1B和表1C所示。
表1A
表1B
如上所述的mvLX[0]和mvLX[1]的值將始終在-215至215-1的范圍內(nèi),包括端值。在表1A和表1B中,predFlagLX是指示相應(yīng)塊的預(yù)測是否可以從參考圖像列表L0或參考圖像列表L1導(dǎo)出的標(biāo)志。當(dāng)predFlagLX等于1時,表示相應(yīng)塊的預(yù)測可以從參考圖像列表L0或參考圖像列表L1導(dǎo)出。表1A對應(yīng)于幀間預(yù)測編碼塊的運(yùn)動向量的推導(dǎo)。表1B對應(yīng)于幀內(nèi)塊復(fù)制的編碼塊的塊向量的推導(dǎo)。由于整數(shù)值的塊向量以四分之一像素分辨率而存儲,因此塊向量必須右移2位,以在塊向量用作表1B所示的預(yù)測子之前導(dǎo)出整數(shù)值。在以上表格中,mvpLX[0]和mvpLX[1]對應(yīng)于與運(yùn)動/塊向量預(yù)測子相關(guān)聯(lián)的運(yùn)動/塊向量分量,mvdLX[0]和mvdLX[1]對應(yīng)于列表LX中的當(dāng)前運(yùn)動/塊向量和運(yùn)動/塊向量預(yù)測子之間的運(yùn)動/塊向量差值,其中X等于0或1。
在應(yīng)用插值之前,如表1C所示,當(dāng)整數(shù)分辨率被選擇用于幀間預(yù)測編碼塊時,導(dǎo)出的運(yùn)動向量被剪切。
表1C
運(yùn)動向量的分辨率由標(biāo)志“use_integer_mv_flag”表示。標(biāo)志use_integer_mv_flag的語法表被并入切片頭中,如下所示。
if(motion_vector resolution_control_idc==2)
use_integer_mv_flag
語法元素motion_vector_resolution_control_idc在序列參數(shù)集(SPS)中被發(fā)送以指示運(yùn)動向量分辨率模式。定義了三種模式。當(dāng)模式為0時,序列中的所有運(yùn)動向量均為1/4像素分辨率。當(dāng)模式為1時,序列中的所有運(yùn)動向量都以全像素分辨率(即整數(shù)分辨率)進(jìn)行編碼。此外,語法元素motion_vector_resolution_control_idc等于2,指示在切片頭處標(biāo)志use_integer_mv_flag會被發(fā)送以自適應(yīng)地選擇整數(shù)像素分辨率或四分之一像素分辨率。標(biāo)志use_integer_mv_flag等于1,指示當(dāng)前切片的解碼過程中運(yùn)動向量分辨率為整數(shù)。標(biāo)志use_integer_mv_flag等于0,指示當(dāng)前切片的解碼處理中運(yùn)動向量分辨率是四分之一像素。當(dāng)不存在時,推斷標(biāo)志use_integer_mv_flag的值等于語法元素motion_vector_resolution_control_idc。
當(dāng)標(biāo)志use_integer_mv_flag等于1時,切片中的所有運(yùn)動向量將以整數(shù)分辨率解碼,并以整數(shù)像素分辨率存儲。當(dāng)標(biāo)志use_integer_mv_flag等于0時,切片中的所有運(yùn)動向量將以四分之一像素分辨率解碼并以四分之一像素分辨率存儲。當(dāng)整數(shù)運(yùn)動向量被用于切片時,所有存儲的運(yùn)動向量將在運(yùn)動補(bǔ)償(插值)階段之前左移兩位。在解碼濾波器階段可能會出現(xiàn)問題,其中運(yùn)動向量用作邊界強(qiáng)度(BS)決策的參數(shù)。要求解塊(deblocking)中的塊的運(yùn)動向量是四分之一像素分辨率。另外,當(dāng)存儲的運(yùn)動向量用作運(yùn)動向量預(yù)測的預(yù)測子時,預(yù)測的運(yùn)動向量及其預(yù)測子可能不具有相同的分辨率。因此,由于自適應(yīng)運(yùn)動向量分辨率,存在分辨率不匹配的問題。
在高級語法中,在參考圖像列表構(gòu)造的初始化期間,將當(dāng)前圖像放置在所有短期(short term)參考圖像和所有其他長期(long term)參考圖像之后。列表0的相關(guān)描述如下所示。類似的過程可應(yīng)用于列表1。
在每個切片的解碼處理開始時,用于P切片的參考圖像列表RefPicList0以及用于B切片的參考圖像列表RefPicList0和RefPicList1如下所示:
表2
在表2中,標(biāo)志curr_pic_as_ref_enabled_flag等于1,指示參考序列參數(shù)集(SPS)的圖像可以被包括在圖像本身的參考圖像列表中。標(biāo)志curr_pic_as_ref_enabled_flag等于0,指定參考序列參數(shù)集的圖像從不包括在圖像本身的任意參考圖像列表中。當(dāng)不存在時,推斷標(biāo)志curr_pic_as_ref_enabled_flag的值等于0。
在初始化之后,參考圖像列表RefPicList0被構(gòu)造如下:
for(rIdx=0;rIdx<=num_ref_idx_l0_active_minus1;rIdx++)
RefPicList0[rIdx]=ref_pic_list_modification_flag_l0?
RefPicListTemp0[list_entry_l0[rIdx]]:RefPicListTemp0[rIdx]
然而,當(dāng)活躍參考圖像的數(shù)量(即,num_ref_idx_l0_active_minus1+1)小于與存儲當(dāng)前圖像的RefPicListTemp0陣列相關(guān)聯(lián)的列表(NumRpsCurrTempList0)中的參考圖像的數(shù)量時,當(dāng)前圖像可能不包含在活躍參考圖像列表中。
在基于現(xiàn)有HEVC的編碼系統(tǒng)中,存在與幀內(nèi)塊復(fù)制的解碼圖像緩沖器(Decoded Picture Buffer,DPB)管理相關(guān)聯(lián)的問題。當(dāng)使用幀內(nèi)塊復(fù)制時,當(dāng)前圖像的重建部分可以用作參考圖像以預(yù)測當(dāng)前圖像。幀內(nèi)塊復(fù)制的參考圖像被稱為“當(dāng)前圖像的未過濾版本”。另一方面,最終將通過諸如解塊和采樣自適應(yīng)偏移(SAO)之類的過濾操作的當(dāng)前圖像的版本被稱為當(dāng)前圖像的過濾版本。
參考圖像必須處于解碼圖像緩沖器(DPB)中,以便由當(dāng)前圖像使用。解碼圖像緩沖器的大小被限制為MaxDpbSize,如表3所示。
表3
在表3中,MaxLumaP是最大亮度圖像尺寸,maxDpbPicBuf是最大解碼圖像緩沖器尺寸,例如6。然而,當(dāng)使用幀內(nèi)塊復(fù)制時(當(dāng)前圖像作為參考圖像),當(dāng)前解碼圖像緩沖器管理操作存在一些問題。
期望開發(fā)一種技術(shù),以解決當(dāng)切片中的塊被編碼于幀內(nèi)塊復(fù)制模式和幀間預(yù)測模式時,與自適應(yīng)運(yùn)動向量分辨率相關(guān)的問題。
技術(shù)實(shí)現(xiàn)要素:
根據(jù)本發(fā)明的實(shí)施方式,揭示了一種視頻編碼方法。該視頻編碼方法利用用于圖像的包括幀內(nèi)塊復(fù)制模式和幀間預(yù)測模式的多個編碼模式。在一個實(shí)施方式中,當(dāng)選擇自適應(yīng)運(yùn)動向量分辨率以允許自適應(yīng)使用整數(shù)分辨率或分?jǐn)?shù)像素分辨率時,具有對應(yīng)于使用用于所有運(yùn)動向量和所有塊向量的整數(shù)分辨率的值的分辨率指示符在當(dāng)前為切片中被發(fā)送。此外,若當(dāng)前圖像為用于當(dāng)前切片唯一參考圖像,在已編碼的比特流中與當(dāng)前切片相關(guān)的分辨率指示符具有對應(yīng)于使用用于當(dāng)前切片的所有運(yùn)動向量和所有塊向量的整數(shù)分辨率的值。當(dāng)參考序列參數(shù)集的當(dāng)前圖像被允許包括在當(dāng)前圖像的參考圖像列表中時,序列參數(shù)集中的分辨率控制指示符不能被設(shè)置為允許包含當(dāng)前切片的序列的分?jǐn)?shù)像素分辨率的數(shù)值。或者,如果當(dāng)前圖像是當(dāng)前切片的唯一參考圖像,則跳過發(fā)送分辨率指示符。示范性的分辨率指示符對應(yīng)于語法元素use_integer_mv_flag,其中語法元素use_integer_mv_flag等于1,指定整數(shù)分辨率,以及語法元素use_integer_mv_flag等于0,指定分?jǐn)?shù)像素分辨率。
在其他實(shí)施方式中,系統(tǒng)接收已編碼的運(yùn)動向量或塊向量以用于已編碼的塊。若已編碼的塊被編碼于幀間預(yù)測模式或幀內(nèi)塊復(fù)制模式,若用于已編碼的塊的分辨率指示符指示整數(shù)分辨率,已編碼的運(yùn)動向量或塊向量被轉(zhuǎn)換為具有分?jǐn)?shù)像素分辨率的已轉(zhuǎn)換的運(yùn)動向量或塊向量,以用于中間存儲和計算。然后,系統(tǒng)存儲已轉(zhuǎn)換的運(yùn)動向量和塊向量以用于候選塊的編碼或解碼。分?jǐn)?shù)像素分辨率的轉(zhuǎn)換可通過將已編碼的運(yùn)動向量或塊向量左移N位而實(shí)現(xiàn),例如N=2。在已轉(zhuǎn)換的運(yùn)動向量或塊向量被存儲之前,已轉(zhuǎn)換的運(yùn)動向量或塊向量被進(jìn)一步剪切。當(dāng)已轉(zhuǎn)換的運(yùn)動向量或塊向量用作預(yù)測子以用于與幀間預(yù)測或幀內(nèi)塊復(fù)制已編碼的當(dāng)前塊相關(guān)的當(dāng)前運(yùn)動向量或塊向量時,在已轉(zhuǎn)換的運(yùn)動向量或塊向量被用作預(yù)測子之前,已轉(zhuǎn)換的運(yùn)動向量或塊向?qū)⑾缺晦D(zhuǎn)換為整數(shù)分辨率。已轉(zhuǎn)換的運(yùn)動向量或塊向量可通過右移N位而被轉(zhuǎn)換為整數(shù)分辨率,例如,N=2。此外,在右移N位之后,在已轉(zhuǎn)換的運(yùn)動向量或塊向量被用于預(yù)測子以用于當(dāng)前運(yùn)動向量或塊向量之前,結(jié)果被剪切至有效的范圍。
在又一實(shí)施方式中,若當(dāng)前塊是以幀內(nèi)塊復(fù)制模式或幀間預(yù)測模式而被編碼,則無論當(dāng)前向量對應(yīng)于一個運(yùn)動向量還是一個塊向量,使用相同的分辨率對當(dāng)前向量進(jìn)行編碼或解碼,或者無論當(dāng)前向量是對應(yīng)于一個運(yùn)動向量還是一個塊向量,根據(jù)當(dāng)前向量的當(dāng)前塊利用相同的分辨率而被編碼或解碼。此外,若用于當(dāng)前塊的分辨率指示符指示整數(shù)分辨率,當(dāng)前向量被轉(zhuǎn)換為分?jǐn)?shù)像素分辨率,以及已轉(zhuǎn)換的向量被存儲以用于編碼或解碼后續(xù)塊或后續(xù)塊向量。
在又一實(shí)施方式中,若當(dāng)前圖片是用于當(dāng)前圖像的唯一參考圖像,則隱式地確定當(dāng)前圖像的分辨率指示符而不用發(fā)送分辨率指示符,其中分辨率指示符指示是否對在當(dāng)前圖像中的運(yùn)動向量和塊向量使用整數(shù)分辨率或分?jǐn)?shù)像素分辨率。分辨率指示符被推斷為具有指示整數(shù)分辨率的值。
在又一實(shí)施方式中,根據(jù)分辨率指示符和分辨率控制指示符,確定同一切片中的幀內(nèi)塊復(fù)制編碼塊以及幀間預(yù)測編碼塊的運(yùn)動向量和塊向量的單一的分辨率。其中,分辨率控制指示符指定固定分辨率或自適應(yīng)分辨率,以及當(dāng)分辨率控制指示符指示自適應(yīng)分辨率時,分辨率指示符指示是否使用整數(shù)分辨率或分?jǐn)?shù)像素分辨率以用于運(yùn)動向量。分辨率控制指示符可對應(yīng)于第一語法元素use_integer_mv_flag,以及分辨率控制指示符可對應(yīng)于第二語法元素motion_vector_resolution_control_idc。舉例來說,如果當(dāng)前圖像是切片的唯一參考圖像,則單一的分辨率總是被確定為整數(shù)分辨率。在一個示例中,分辨率指示符被設(shè)置為指示使用整數(shù)分辨率?;蛘?,如果當(dāng)前圖像是切片的唯一參考圖像,跳過發(fā)送分辨率指示符。
附圖說明
圖1示出了根據(jù)幀內(nèi)塊復(fù)制模式的幀內(nèi)運(yùn)動補(bǔ)償?shù)氖纠?,其中水平位移向量被使用?/p>
圖2示出了用于導(dǎo)出幀內(nèi)塊復(fù)制模式的運(yùn)動向量預(yù)測子的相鄰塊配置的示例。
圖3A-圖3B示出了無效塊向量預(yù)測子的示例。
圖4示出了包含本發(fā)明的實(shí)施例的示例性編碼系統(tǒng)的流程圖,其中系統(tǒng)使用包括用于圖像的幀內(nèi)塊復(fù)制模式和幀間預(yù)測模式的多個編碼模式。
圖5示出了包含本發(fā)明的實(shí)施例的另一示例性編碼系統(tǒng)的流程圖,其中系統(tǒng)使用包括用于圖像的幀內(nèi)塊復(fù)制模式和幀間預(yù)測模式的多個編碼模式。
具體實(shí)施方式
如上所述,自適應(yīng)運(yùn)動向量分辨率可以用于幀間預(yù)測。在具有包括幀間預(yù)測模式和幀內(nèi)塊復(fù)制模式的多個編碼模式的編碼系統(tǒng)中,運(yùn)動向量或塊向量可以具有與運(yùn)動向量或塊向量預(yù)測子不同的分辨率。為了克服這個問題,這里公開了各種技術(shù)。
使用整數(shù)向量的信令
在一個實(shí)施例中,對于每個切片,使用標(biāo)志來通知該切片中的運(yùn)動向量是否使用整數(shù)分辨率。當(dāng)當(dāng)前圖像被視為參考圖像時,在編碼或解碼當(dāng)前圖像(例如,序列的第一張圖像)期間,當(dāng)前圖像在某些情況下可能是唯一參考圖像。在這種情況下,根據(jù)本實(shí)施例,如果當(dāng)前圖像是用于當(dāng)前編碼/解碼圖像的唯一參考圖像,則不再用信號通知使用整數(shù)運(yùn)動向量。相反,推斷使用整數(shù)運(yùn)動向量。換句話說,在這種情況下,總是使用整數(shù)運(yùn)動向量(塊向量)。
塊向量/運(yùn)動向量預(yù)測之間的相互作用
在現(xiàn)有的運(yùn)動向量預(yù)測中,如果空間/時間候選位置中的塊以幀內(nèi)塊復(fù)制模式被編碼,則該位置被認(rèn)為對于運(yùn)動向量預(yù)測目的是不可用的。本發(fā)明的實(shí)施例使用來自空間/時間相鄰候選位置的塊向量,來預(yù)測當(dāng)前塊的運(yùn)動向量。該塊向量以幀內(nèi)塊復(fù)制模式編碼。
類似地,對于塊向量預(yù)測,如果空間/時間候選位置中的塊中的塊在幀間模式中被編碼,則該位置被認(rèn)為對于塊向量預(yù)測目的是不可用的。本發(fā)明的實(shí)施例使用來自空間/時間相鄰候選位置的運(yùn)動向量,來預(yù)測當(dāng)前塊的塊向量。該塊向量以幀內(nèi)塊復(fù)制模式編碼。
如果在當(dāng)前切片中僅整數(shù)運(yùn)動向量的使用被禁用,則運(yùn)動向量的表示是子像素精度(sub-pel accuracy)。在這種情況下,本發(fā)明的實(shí)施例使用用于預(yù)測塊向量或運(yùn)動向量的縮放處理,該縮放處理用于塊向量或運(yùn)動向量的預(yù)測。例如,來自相鄰塊的運(yùn)動向量可以用于預(yù)測當(dāng)前塊的塊向量。在這種情況下,運(yùn)動向量被右移N位,以便在用于預(yù)測當(dāng)前塊的塊向量之前轉(zhuǎn)換為整數(shù)精度。N是諸如N=2的整數(shù)值,以將1/4像素分辨率轉(zhuǎn)換為整數(shù)分辨率。在另一示例中,來自相鄰塊的塊向量用于預(yù)測當(dāng)前塊的運(yùn)動向量。在這種情況下,在預(yù)測當(dāng)前塊的運(yùn)動向量之前,將塊向量左移N以對子像素精度進(jìn)行調(diào)整。N是諸如N=2的整數(shù)值,以將1/4像素分辨率轉(zhuǎn)換為整數(shù)分辨率。
在運(yùn)動向量預(yù)測過程中,如果相鄰塊的參考圖像不同于當(dāng)前塊的參考圖像,則來自該相鄰塊的運(yùn)動向量預(yù)測子可能在用于預(yù)測之前可能需要縮放。當(dāng)使用運(yùn)動向量來預(yù)測塊向量時,根據(jù)本發(fā)明的實(shí)施例應(yīng)用運(yùn)動向量縮放方法。需要考慮參考圖像和當(dāng)前圖像之間的距離。距離可以根據(jù)兩張照片之間的圖像序列號(POC,picture order count)的差值進(jìn)行評估。在一個實(shí)施例中,在預(yù)測當(dāng)前塊向量之前,運(yùn)動向量被縮放,好像是當(dāng)前幀內(nèi)塊復(fù)制的已編碼塊的參考圖像是按照圖像序列號的值在當(dāng)前圖像右邊的圖像。在這種情況下,“DiffPicOrderCnt”的值被分配,以表示在兩圖像之間的圖像序列號的差值。表示當(dāng)前圖像與其“參考圖像”之間的圖像序列號的差值的currPocDiff被設(shè)置為+1或-1,而不是0。在一個實(shí)施例中,如果相鄰塊的參考圖像的圖像序列號大于包含相鄰塊的圖像的圖像序列號,currPocDiff設(shè)置為+1。否則,如果相鄰塊的參考圖像的圖像序列號小于包含相鄰塊的圖像的圖像序列號,則currPocDiff被設(shè)置為-1。
該值(即+1或-1)用于在運(yùn)動向量縮放過程中計算縮放值(distScaleFactor)。在相鄰塊的參考圖像依照圖像序列號恰好在當(dāng)前圖像旁邊的情況下,不需要運(yùn)動向量的縮放處理。在另一個實(shí)施例中,對于指向任何參考圖像的運(yùn)動向量,不需要縮放。
當(dāng)使用塊向量來預(yù)測運(yùn)動向量時,可以施加約束。例如,當(dāng)當(dāng)前塊的參考圖像是每個參考列表中的第一個參考圖像(即L0和/或L1中的索引=0)時,塊向量只能用于預(yù)測當(dāng)前塊的運(yùn)動向量。否則,相鄰塊將被標(biāo)記為運(yùn)動向量預(yù)測“不可用”。
當(dāng)使用運(yùn)動向量來預(yù)測塊向量時,可以施加約束。例如,僅當(dāng)相鄰塊的參考圖像是每個參考列表中的第一個(即,在L0和/或L1中的索引=0)時,才可以使用運(yùn)動向量。否則,相鄰塊將被標(biāo)志為塊向量預(yù)測“不可用”。
塊向量剪切
當(dāng)使用塊向量作為當(dāng)前塊的塊向量的預(yù)測子時,如果塊向量不是有效值,塊向量預(yù)測子被剪切為有效值。剪切可以擴(kuò)展到使用運(yùn)動向量作為當(dāng)前塊的塊向量的預(yù)測子的情況。如果預(yù)測子不指向有效的參考塊區(qū)域,則應(yīng)用剪切操作將運(yùn)動向量剪切為有效值。無效參考塊區(qū)域可以對應(yīng)于參考塊的一部分不可用或在當(dāng)前編碼樹單元邊界之外的情況。請注意,這里的運(yùn)動向量可以是根據(jù)上述本發(fā)明的實(shí)施例的用于運(yùn)動補(bǔ)償?shù)?、相鄰塊使用的原始運(yùn)動向量,或者縮放運(yùn)動向量。
在2015年2月在日內(nèi)瓦舉行的第20次JCT-VC會議上,同意將幀內(nèi)塊復(fù)制與幀間編碼模式進(jìn)行統(tǒng)一,其記載于JCTVC-T0227中(Pang等人,Non-CE2Test1:Intra block copy and inter signalling unification,Joint Collaborative Team on Video Coding(JCT-VC)of ITU-T SG 16WP 3and ISO/IEC JTC 1/SC 29/WG 11,20th Meeting:Geneva,CH,10–18Feb.2015,Document:JCTVC-T0227)。根據(jù)JCTVC-T0227,當(dāng)前圖像被視為參考圖像并插入到一個或兩個參考圖像列表中。執(zhí)行與幀間運(yùn)動向量預(yù)測和編碼相同的塊向量預(yù)測和編碼。統(tǒng)一簡化了編解碼器設(shè)計。但是還有一些問題。因?yàn)楫?dāng)前HEVC屏幕內(nèi)容編碼測試模型中的塊向量總是使用整數(shù)分辨率,而運(yùn)動向量可以自適應(yīng)地使用整數(shù)分辨率和四分之一像素分辨率,出現(xiàn)了一個問題。自適應(yīng)運(yùn)動向量分辨率下的四分之一像素和整數(shù)分辨率之間的選擇在切片層切換,如JCTVC-S0085所述。為了解決這個問題,在如下所述的應(yīng)用中公開了幾種解決方案。
自適應(yīng)運(yùn)動/塊向量分辨率控制
在當(dāng)前屏幕內(nèi)容編碼草案標(biāo)準(zhǔn)中,在每個切片頭中發(fā)送標(biāo)志“use_integer_mv_flag”,以指定切片頭中的運(yùn)動向量是整數(shù)還是四分之一分辨率。語法和語義如表4所示。
表4
在表4中,標(biāo)志use_integer_mv_flag等于1,指定當(dāng)前切片的解碼處理中的運(yùn)動向量分辨率是整數(shù)。標(biāo)志use_integer_mv_flag等于0,表示當(dāng)前切片的解碼過程中運(yùn)動向量分辨率為四分之一像素。當(dāng)不存在時,推斷標(biāo)志use_integer_mv_flag的值等于語法元素motion_vector_resolution_control_idc。語法元素motion_vector_resolution_control_idc在序列參數(shù)集(SPS)中被發(fā)送,以指示運(yùn)動向量分辨率控制模式。定義了三種模式。當(dāng)模式為0時,以1/4像素分辨率編碼運(yùn)動向量。當(dāng)模式為1時,參考序列參數(shù)集的切片中的所有運(yùn)動向量都以全像素分辨率(即整數(shù)分辨率)進(jìn)行編碼。此外,語法元素motion_vector_resolution_control_idc等于2,指定自適應(yīng)四分之一像素和整數(shù)分辨率。在這種情況下,如注釋(4-1)和(4-2)所示,標(biāo)志use_integer_mv_flag可以在切片頭中被發(fā)送,以選擇整數(shù)或四分之一像素分辨率。當(dāng)語法元素motion_vector_resolution_control_idc等于0或1時,在切片頭處不發(fā)送標(biāo)志use_integer_mv_flag。
雖然使用use_integer_mv_flag作為選擇整數(shù)或四分之一像素分辨率的示例,但是本發(fā)明可應(yīng)用于在整數(shù)分辨率和任意分?jǐn)?shù)的像素分辨率之間選擇的任意分辨率指示符。
在自適應(yīng)運(yùn)動/塊向量分辨率控制的第一實(shí)施例中,切片中的塊向量的分辨率由標(biāo)志“use_integer_mv_flag”和語法元素“motion_vector_resolution_control_idc”的值確定,標(biāo)志“use_integer_mv_flag”和語法元素“motion_vector_resolution_control_idc”的值與使用整數(shù)像素還是四分之一像素相關(guān)。換句話說,切片中的塊向量的分辨率與同一切片中的常規(guī)的運(yùn)動向量的分辨率相同。
為了優(yōu)化編碼過程,當(dāng)當(dāng)前圖像是該切片的唯一參考圖像時,編碼器應(yīng)當(dāng)始終將標(biāo)志“use_integer_mv_flag”設(shè)置為1(即,將塊/運(yùn)動向量分辨率設(shè)置為整數(shù))。
在自適應(yīng)運(yùn)動/塊向量分辨率控制的第二實(shí)施例中,上述編碼器行為要求是標(biāo)準(zhǔn)的或比特流一致的。換句話說,當(dāng)當(dāng)前圖像是該切片的唯一參考圖像時,需要將標(biāo)志“use_integer_mv_flag”設(shè)置為1(即,將塊/運(yùn)動向量分辨率設(shè)置為整數(shù))。否則比特流無效。
在自適應(yīng)運(yùn)動/塊向量分辨率控制的第三實(shí)施例中,當(dāng)當(dāng)前圖像是該切片的唯一參考圖像時,跳過發(fā)送標(biāo)志“use_integer_mv_flag”。推斷標(biāo)志“use_integer_mv_flag”的值為1(即,將塊/運(yùn)動向量分辨率設(shè)置為整數(shù))。
結(jié)合本發(fā)明的實(shí)施例的示例性切片頭語法示于表5中。
表5
在表5中,如注釋(5-1)所示添加附加條件(即,&&!(curr_pic_as_ref_enabled_flag&&slice_type==P&&num_ref_idx_l0_active_minus1==0))。該附加條件對應(yīng)于當(dāng)前圖像是該切片的唯一參考圖像。
結(jié)合本發(fā)明的實(shí)施例的另一示例性切片頭語法示于表6中。
表6
在表6中,如注釋(6-1)所示添加附加條件(即,&&!(curr_pic_as_ref_enabled_flag&&slice_type==B&&num_ref_idx_l0_active_minus1==0&&num_ref_idx_l1_active_minus1==0))。該附加條件對應(yīng)于當(dāng)前圖像是該切片的唯一參考圖像。在表6中,標(biāo)志use_integer_mv_flag的定義與表5中的相同。但是,如果不存在,則標(biāo)志use_integer_mv_flag的數(shù)值的推導(dǎo)如下所示:
如果當(dāng)前圖像是當(dāng)前切片的唯一參考圖像,
推斷標(biāo)志use_integer_mv_flag的值等于1,
否則,
推斷標(biāo)志use_integer_mv_flag的值
等于語法元素motion_vector_resolution_control_idc。
在自適應(yīng)運(yùn)動/塊向量分辨率控制的第四實(shí)施例中,當(dāng)參考圖像用于預(yù)測單元以用于運(yùn)動補(bǔ)償(包括幀內(nèi)塊復(fù)制)時,使能標(biāo)志被用于當(dāng)前切片的每一個參考圖像,以發(fā)送運(yùn)動向量分辨率。對于特定參考圖像,如果該標(biāo)志為使能,則對于當(dāng)前圖像內(nèi)的所有塊,當(dāng)當(dāng)前圖像中的塊使用該圖像作為參考時,運(yùn)動向量/塊向量將使用整數(shù)分辨率。在解碼運(yùn)動向量/塊向量之后,向量應(yīng)該左移兩位以恢復(fù)四分之一像素精度。當(dāng)該標(biāo)志關(guān)閉時,對于當(dāng)前圖像中的所有塊,當(dāng)塊使用該圖像作為參考時,運(yùn)動向量/塊向量將使用四分之一像素分辨率。在一個實(shí)施例中,上述參考圖像的分辨率指示標(biāo)志可以應(yīng)用于列表0及/或列表1中的參考圖像。在另一個實(shí)施例中,每個參考圖像將具有分辨率指示標(biāo)志,無論參考圖像被放置到哪個參考列表中。當(dāng)幀內(nèi)塊復(fù)制參考圖像被用作當(dāng)前切片的參考圖像時,不需要發(fā)送用于幀內(nèi)塊復(fù)制參考圖像的分辨率指示標(biāo)志。在這種情況下,分辨率指示標(biāo)志可被推斷為開啟(即,使用整數(shù)分辨率)。
對于上述方法,可以使用序列參數(shù)集層標(biāo)志來發(fā)信號通知是否應(yīng)用該方法。
運(yùn)動向量/塊向量分辨率統(tǒng)一
如上所述,在當(dāng)前的屏幕內(nèi)容編碼草案標(biāo)準(zhǔn)中,在每個切片頭中發(fā)送標(biāo)志“use_integer_mv_flag”,以指定該切片中的運(yùn)動向量是否是整數(shù)(即,標(biāo)志use_integer_mv_flag=1)或四分之一像素分辨率(即,標(biāo)志use_integer_mv_flag=0)。雖然運(yùn)動向量分辨率由標(biāo)志“use_integer_mv_flag”自適應(yīng)地控制,但是根據(jù)現(xiàn)有標(biāo)準(zhǔn),塊向量總是處于整數(shù)分辨率。為了克服這個問題,本文公開了協(xié)調(diào)或統(tǒng)一運(yùn)動向量/塊向量分辨率的各種技術(shù)。
在運(yùn)動向量/塊向量分辨率協(xié)調(diào)/統(tǒng)一的第一實(shí)施例中,解碼的運(yùn)動向量始終以分?jǐn)?shù)的像素分辨率存儲,而與標(biāo)志use_integer_mv_flag的設(shè)置值無關(guān)。例如,當(dāng)將本實(shí)施例應(yīng)用于現(xiàn)有HEVC時,解碼的運(yùn)動向量將總是以四分之一像素分辨率存儲。轉(zhuǎn)換為四分之一像素分辨率可以基于左移操作。例如,當(dāng)整數(shù)分辨率標(biāo)志為真時,解碼的運(yùn)動向量可以左移N位(例如,對于HEVC,例如N=2)為分?jǐn)?shù)的像素分辨率。左移的運(yùn)動向量將通過剪切(clipping)進(jìn)一步處理,以確保結(jié)果在有效范圍內(nèi),例如HEVC的-215和215-1。對應(yīng)于四分之一像素分辨率的左移和剪切運(yùn)動向量將被存儲并由隨后的塊用于運(yùn)動向量/塊向量預(yù)測。當(dāng)整數(shù)分辨率標(biāo)志為假時,解碼的運(yùn)動向量將經(jīng)過剪切處理,以確保結(jié)果在有效范圍內(nèi),例如HEVC的-215和215-1。剪切的運(yùn)動向量將以四分之一像素分辨率存儲。由于在推導(dǎo)MV期間,執(zhí)行剪切處理,因此在運(yùn)動補(bǔ)償(插值)之前不需要進(jìn)行額外的剪切操作。此外,當(dāng)使用存儲的向量來預(yù)測整數(shù)運(yùn)動向量時,在應(yīng)用預(yù)測之前,預(yù)測子應(yīng)該被右移,例如對于HEVC來說右移2位,以使其處于整數(shù)像素分辨率。
結(jié)合本發(fā)明的實(shí)施例的示例性運(yùn)動向量/塊向量分辨率的統(tǒng)一如表7A和表7B所示。
表7A
表7B
上面指定的mvLX[0]和mvLX[1]的結(jié)果值將始終在-215到215-1的范圍內(nèi),包括端值。
根據(jù)現(xiàn)有標(biāo)準(zhǔn),在應(yīng)用插值之前將執(zhí)行剪切。然而,基于本發(fā)明的實(shí)施例,將不執(zhí)行如表1C所示的現(xiàn)有的HEVC的剪切處理。換句話說,該過程被跳過。
表7A中的語法與等于0(即,四分之一像素分辨率)和1(即,整數(shù)分辨率)的標(biāo)志use_integer_mv_flag的運(yùn)動向量的推導(dǎo)有關(guān)。如表7A所示,由于標(biāo)志use_integer_mv_flag的值等于0(即,(2*use_integer_mv_flag)=0),“右移2位”操作將不會執(zhí)行四分之一像素分辨率。表7B與塊向量的推導(dǎo)相關(guān),其與表1B所示的現(xiàn)有的HEVC的塊向量的推導(dǎo)相同。
結(jié)合本發(fā)明的實(shí)施例的另一示例性的塊向量/運(yùn)動向量分辨率的統(tǒng)一如表8A和表8B所示。
表8A
表8B
同樣,上面指定的mvLX[0]和mvLX[1]的結(jié)果值總是在-215到215-1的范圍內(nèi),包括端值。類似地,將不執(zhí)行如表1C所示的剪切處理。
表8A與具有整數(shù)分辨率的運(yùn)動向量相關(guān),并且表8B與具有四分之一像素分辨率的運(yùn)動向量和塊向量推導(dǎo)相關(guān)。再次,不需要如表1C所示的剪切處理。
在運(yùn)動向量/塊向量分辨率協(xié)調(diào)/統(tǒng)一的第二實(shí)施例中,塊向量和運(yùn)動向量的推導(dǎo)過程是統(tǒng)一的。換句話說,當(dāng)標(biāo)志use_integer_mv_flag為真時,所有向量(即,塊向量和運(yùn)動向量)將使用整數(shù)分辨率。當(dāng)標(biāo)志use_integer_mv_flag為假時,所有向量(即,塊向量和運(yùn)動向量)將使用四分之一像素分辨率。此外,上述的協(xié)調(diào)/統(tǒng)一的運(yùn)動向量/塊向量分辨率的第一實(shí)施例可以與第二實(shí)施例組合。因此,無論標(biāo)志use_integer_mv_flag的值如何,解碼的塊向量和運(yùn)動向量都將按照組合方式存儲在四分之一像素分辨率中。當(dāng)用作向量預(yù)測子來預(yù)測整數(shù)向量時,解碼塊向量和運(yùn)動向量都將被轉(zhuǎn)換為整數(shù)分辨率。例如,在應(yīng)用預(yù)測之前,解碼塊向量和運(yùn)動向量都可以右移N位(例如,對于HEVC,N=2)而為整數(shù)分辨率。
結(jié)合本發(fā)明實(shí)施例的示例性運(yùn)動向量/塊向量分辨率的協(xié)調(diào)/統(tǒng)一如表9A所示。
表9A
表9A與統(tǒng)一的運(yùn)動向量導(dǎo)出和塊向量導(dǎo)出有關(guān)。由于統(tǒng)一的推導(dǎo),跳過用于predFlagLX等于1的亮度運(yùn)動向量mvLX和如表1B所述的當(dāng)前圖像的參考圖像的推導(dǎo)。此外,將不執(zhí)行如表1C所示的剪切處理。
結(jié)合本發(fā)明的實(shí)施例的另一示例性協(xié)調(diào)/統(tǒng)一的塊向量/運(yùn)動向量的分辨率如表10A和表10B所示。
表10A
表10B
表10A和表10B分別類似于表1A和表1B。然而,表10A和表10B中的語法被應(yīng)用于根據(jù)標(biāo)志use_integer_mv_flag為0(即,表10A)或1(即,表10B)的向量,而不管該向量是運(yùn)動向量還是塊向量。將不執(zhí)行如表1C所示的剪切處理。
在塊向量/運(yùn)動向量分辨率協(xié)調(diào)/統(tǒng)一的第三實(shí)施例中,修改標(biāo)志use_integer_mv_flag和語法元素motion_vector_resolution_control_idc的語法和語義,以解決塊向量/運(yùn)動向量的分辨率問題。結(jié)合本實(shí)施例的一些示例描述如下:
在第一示例中,標(biāo)志use_integer_mv_flag等于1,指定在當(dāng)前切片的解碼過程中運(yùn)動向量分辨率是整數(shù)。標(biāo)志use_integer_mv_flag等于0,表示當(dāng)前切片的解碼過程中運(yùn)動向量分辨率為四分之一像素。當(dāng)不存在時,標(biāo)志use_integer_mv_flag被推定為語法元素motion_vector_resolution_control_idc。運(yùn)動向量指向除當(dāng)前圖像以外的參考畫面。
在第二個示例中,當(dāng)以下語句之一為真時,推導(dǎo)標(biāo)志use_integer_mv_flag的值:
1.語法元素motion_vector_resolution_control_idc不等于2;
2.語法元素motion_vector_resolution_control_idc等于2(即切片層自適應(yīng)),當(dāng)前圖像被用作參考圖像,它是切片的唯一參考圖像。
結(jié)合該實(shí)施例的示例性語法表描述在表11中示出。
表11
在上述示例中,添加附加條件(即,&&(!curr_pic_as_ref_enabled_flag||NumPicTotalCurr>1)),用于發(fā)送標(biāo)志use_integer_mv_flag。該附加條件對應(yīng)于當(dāng)前圖像是該切片的唯一參考圖像。
在第三示例中,標(biāo)志use_integer_mv_flag等于1,指示當(dāng)前切片的解碼處理中的運(yùn)動向量分辨率是整數(shù)。標(biāo)志use_integer_mv_flag等于0,指示當(dāng)前切片的解碼過程中運(yùn)動向量分辨率為四分之一像素。當(dāng)不存在時,推斷標(biāo)志use_integer_mv_flag的值如下所示:
-當(dāng)標(biāo)志curr_pic_as_ref_enabled_flag等于0時,推斷標(biāo)志use_integer_mv_flag等于語法元素motion_vector_resolution_control_idc。
-否則推斷標(biāo)志use_integer_mv_flag為1。
在第四示例中,標(biāo)志use_integer_mv_flag等于1,指定在當(dāng)前切片的解碼處理中運(yùn)動向量分辨率是整數(shù)。標(biāo)志use_integer_mv_flag等于0,指定當(dāng)前切片的解碼過程中的運(yùn)動向量分辨率為四分之一像素。當(dāng)不存在時,推斷標(biāo)志use_integer_mv_flag的值等于語法元素motion_vector_resolution_control_idc。當(dāng)標(biāo)志curr_pic_as_ref_enabled_flag等于1且NumPicTotalCurr等于1(即當(dāng)前參考圖像是唯一的參考圖像)時,標(biāo)志use_integer_mv_flag的值應(yīng)為1。
在第五示例中,當(dāng)使用當(dāng)前圖像作為參考圖像(即標(biāo)志curr_pic_as_ref_enabled_flag等于1)時,指向當(dāng)前圖像的運(yùn)動向量應(yīng)為整數(shù)分辨率。
在第六個示例中,如果塊向量始終為整數(shù)分辨率,則標(biāo)志use_integer_mv_flag不應(yīng)為0。當(dāng)使用當(dāng)前圖像作為參考圖像(標(biāo)志curr_pic_as_ref_enabled_flag等于1)的情況下,要求比特流一致性,該序列的運(yùn)動向量分辨率不應(yīng)為1/4像素分辨率。換句話說,motion_vector_resolution_control idc不能為0。
在塊向量/運(yùn)動向量分辨率協(xié)調(diào)/統(tǒng)一的第六實(shí)施例中,幀內(nèi)塊復(fù)制編碼塊的解碼圖像緩沖器的尺寸管理公開如下:
在第一示例中,當(dāng)當(dāng)前圖像的濾波和未濾波版本在當(dāng)前圖像的解碼之前被放置到解碼圖像緩沖器中時,解碼圖像緩沖器的尺寸(maxDpbPicBuf)保持不變。
在第二示例中,當(dāng)前圖像的濾波版本在當(dāng)前圖像的解碼之前被放置到解碼圖像緩沖器中,而另一方面,未濾波的圖像未被放置到解碼圖像緩沖器中?;蛘撸?dāng)前圖像的解碼之前,當(dāng)前圖像的未濾波版本可以被放置到解碼圖像緩沖器中,而濾波圖像不被放入解碼圖像緩沖器中。在這兩種情況下,maxDpbPicBuf被修改為maxDpbPicBuf-curr_pic_as_ref_enabled_flag。如果標(biāo)志curr_pic_as_ref_enabled_flag等于1,則一個緩沖器被保留以用于不在解碼圖像緩沖器中的一個版本。標(biāo)志curr_pic_as_ref_enabled_flag可以并入序列層,圖像層或切片層標(biāo)志,以指示當(dāng)前圖像可以用作整個相應(yīng)序列/圖像/切片的參考圖像。
在第三示例中,當(dāng)前圖像的解碼之前將當(dāng)前圖像的濾波版本放置在解碼圖像緩沖器中,而未濾波的圖像未被放入解碼圖像緩沖器中?;蛘?,當(dāng)前圖像的解碼之前,當(dāng)前圖像的未濾波版本可以被放置到解碼圖像緩沖器中,而濾波圖像不被放入解碼圖像緩沖器中。在這兩種情況下,maxDpbPicBuf被修改為maxDpbPicBuf–1。一個緩沖器被保留給不在解碼圖像緩沖器中的一個版本。
圖4示出了包含本發(fā)明的實(shí)施例的示例性編碼系統(tǒng)的流程圖,其中系統(tǒng)使用包括用于圖像的幀內(nèi)塊復(fù)制模式和幀間預(yù)測模式的編碼模式。如步驟410所示,系統(tǒng)接收與當(dāng)前圖像中的塊相關(guān)聯(lián)的輸入數(shù)據(jù)。為了編碼,輸入數(shù)據(jù)對應(yīng)于要編碼的像素數(shù)據(jù)。對于解碼,輸入數(shù)據(jù)對應(yīng)于要解碼的編碼像素數(shù)據(jù)??梢詮拇鎯ζ?例如,計算機(jī)存儲器,緩沖器(RAM或DRAM)或其他介質(zhì))或從處理器檢索輸入數(shù)據(jù)。在步驟420中,針對當(dāng)前切片中的所有的運(yùn)動向量和所有的塊向量,具有對應(yīng)于利用整數(shù)分辨率的數(shù)值的分辨率指示符被發(fā)送。
圖5示出了結(jié)合本發(fā)明實(shí)施例的示例性編碼系統(tǒng)的流程圖,其中系統(tǒng)使用包括用于圖像的幀內(nèi)塊復(fù)制模式和幀間預(yù)測模式的編碼模式。如步驟510所示,系統(tǒng)接收用于已編碼的塊的已編碼運(yùn)動向量或塊向量??梢詮拇鎯ζ?例如,計算機(jī)存儲器,緩沖器(RAM或DRAM)或其他介質(zhì))或從處理器中檢索輸入數(shù)據(jù)。在步驟520中檢查已編碼的塊是否以幀間預(yù)測模式或幀內(nèi)塊復(fù)制模式編碼。如果結(jié)果為“是”,則執(zhí)行步驟530和步驟540。否則(即,“否”路徑),步驟530和步驟540被跳過。在步驟530中,如果已編碼的塊的分辨率指示符指定整數(shù)分辨率,則編碼的運(yùn)動向量或塊向量被轉(zhuǎn)換為具有分?jǐn)?shù)的像素分辨率的已轉(zhuǎn)換的運(yùn)動向量或塊向量。在步驟540中,已轉(zhuǎn)換的運(yùn)動向量或塊向量被存儲以用于后續(xù)塊的編碼或解碼。
上述的流程圖用于描述根據(jù)本發(fā)明實(shí)施方式的幀內(nèi)塊復(fù)制編碼和幀間編碼的示例。本領(lǐng)域技術(shù)人員可在不脫離本發(fā)明精神的前提下,修改、重排列、拆分、或組合各個步驟,以實(shí)現(xiàn)本發(fā)明。在本公開中,已經(jīng)使用特定語法和語義來說明實(shí)現(xiàn)本發(fā)明的實(shí)施方式的示例。本領(lǐng)域技術(shù)人員可以在不脫離本發(fā)明的精神的情況下,通過用等同的語法和語義代替上述語法和語義來實(shí)踐本發(fā)明。
在提供特定應(yīng)用和其需求的情況下,以上描述使得本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)本發(fā)明。對本領(lǐng)域技術(shù)人員來說,各種修飾是清楚的,以及在此定義的基本原理可以應(yīng)用與其他實(shí)施方式。因此,本發(fā)明并不限于描述的特定實(shí)施方式,而應(yīng)與在此公開的原則和新穎性特征相一致的最廣范圍相符合。在上述詳細(xì)描述中,為全面理解本發(fā)明,描述了各種特定細(xì)節(jié)。然而,本領(lǐng)域技術(shù)人員能夠理解本發(fā)明可以實(shí)現(xiàn)。
以上描述的本發(fā)明的實(shí)施方式可在各種硬件、軟件編碼或兩者組合中進(jìn)行實(shí)施。例如,本發(fā)明的實(shí)施方式可為集成入視頻壓縮芯片的電路或集成入視頻壓縮軟件以執(zhí)行上述過程的程序代碼。本發(fā)明的實(shí)施方式也可為在數(shù)據(jù)信號處理器(Digital Signal Processor,DSP)中執(zhí)行上述程序的程序代碼。本發(fā)明也可涉及計算機(jī)處理器、數(shù)字信號處理器、微處理器或現(xiàn)場可編程門陣列(Field Programmable Gate Array,FPGA)執(zhí)行的多種功能??筛鶕?jù)本發(fā)明配置上述處理器執(zhí)行特定任務(wù),其通過執(zhí)行定義了本發(fā)明揭示的特定方法的機(jī)器可讀軟件代碼或固件代碼來完成??蓪④浖a或固件代碼發(fā)展為不同的程序語言與不同的格式或形式。也可為了不同的目標(biāo)平臺編譯軟件代碼。然而,根據(jù)本發(fā)明執(zhí)行任務(wù)的軟件代碼與其他類型配置代碼的不同代碼樣式、類型與語言不脫離本發(fā)明的精神與范圍。
在不脫離本發(fā)明精神或本質(zhì)特征的情況下,可以其他特定形式實(shí)施本發(fā)明。描述示例被認(rèn)為僅在所有方面進(jìn)行說明并且不是限制性的。因此,本發(fā)明的范圍由權(quán)利要求書指示,而非前面描述。所有在權(quán)利要求等同的方法與范圍中的變化都屬于本發(fā)明的涵蓋范圍。