散列值h(B.)。編碼器保留具有相同散列值的候選塊列表并排除其它η-1個列表。為選擇匹配塊,編碼器可將當(dāng)前塊與保留的候選塊列表中的候選塊(如果有)進行比較。因此,通過使用散列值h(Ba#i)的簡單的查找操作,編碼器可消除候選塊的(n-l)/n (平均),并聚焦于保留的列表中余下的I/η候選塊(平均),顯著減少了樣本級塊匹配操作的數(shù)量。
[0153]數(shù)據(jù)結(jié)構(gòu)可被認為是其中每個條目代表一個候選塊的動態(tài)字典。當(dāng)候選塊的散列值從輸入樣本值中確定時,隨著為更多塊計算塊散列值,數(shù)據(jù)結(jié)構(gòu)增長。用塊散列值代表的塊的數(shù)量可變,取決于編碼器篩選出多少塊。同樣,具有給定散列值的塊的數(shù)量將隨圖片到圖片變化。在編碼期間,編碼器檢查具有匹配塊散列值的候選塊實際上可用于用作參考區(qū)域(例如,作為先前編碼和重構(gòu)的內(nèi)容的一部分)。當(dāng)候選塊的散列值從經(jīng)重構(gòu)的樣本值中被確定時,隨著更多候選塊被添加到圖片的經(jīng)重構(gòu)的內(nèi)容并且因此使得能夠用在圖片的后面的塊的基于散列的塊匹配中,數(shù)據(jù)結(jié)構(gòu)在編碼期間增長。具體地,在當(dāng)前塊被編碼后,與剛編碼的當(dāng)前塊重疊的新候選塊可用于用作參考區(qū)域。
[0154]不同數(shù)據(jù)結(jié)構(gòu)可被用于不同尺寸的塊。例如,一個數(shù)據(jù)結(jié)構(gòu)包括8X8個候選塊的散列值、第二數(shù)據(jù)結(jié)構(gòu)包括16 X 16個候選塊的散列值、第三數(shù)據(jù)結(jié)構(gòu)包括32 X 32個候選塊的散列值,以此類推。在基于散列的塊匹配期間使用的數(shù)據(jù)結(jié)構(gòu)取決于當(dāng)前塊的尺寸??商鎿Q地,單個,統(tǒng)一數(shù)據(jù)結(jié)構(gòu)可被用于不同尺寸的塊。散列函數(shù)可產(chǎn)生一個η比特散列值,其中η比特散列值的m比特根據(jù)一個m比特散列函數(shù)指示給定塊尺寸的可能的塊中的散列值,而余下的η比特散列值的n-m比特指示給定塊尺寸。例如,14比特散列函數(shù)的前兩個比特可指示塊尺寸,而余下的12比特根據(jù)12比特的散列函數(shù)指示散列值?;蛘撸⒘泻瘮?shù)可產(chǎn)生m比特散列值而不考慮塊尺寸,且數(shù)據(jù)結(jié)構(gòu)中的候選塊的條目存儲指示候選塊的塊尺寸的信息,其可被用于基于散列的塊匹配中。
[0155]對于高分辨率圖片,數(shù)據(jù)結(jié)構(gòu)可存儲代表很大數(shù)量的候選塊的信息。為了減少用于數(shù)據(jù)結(jié)構(gòu)的存儲器的量,編碼器可去除冗余值。例如,編碼器可跳過將相同的塊添加到該數(shù)據(jù)結(jié)構(gòu)。一般而言,通過去除相同塊來減少數(shù)據(jù)結(jié)構(gòu)的尺寸可傷及編碼效率。因此,通過決定是否去除相同塊,編碼器可折衷數(shù)據(jù)結(jié)構(gòu)的存儲器尺寸和編碼效率。編碼器還可取決于候選塊的內(nèi)容篩選出不可能從幀內(nèi)BC預(yù)測中獲益的候選塊。
[0156]D.迭代的基于散列的塊匹配。
[0157]當(dāng)編碼器使用具有n個可能散列值的單個散列函數(shù)時,該編碼器可基于當(dāng)前塊的散列值來排除候選塊的η-1個列表,但編碼器可能還需要針對余下的候選塊(如果有)執(zhí)行樣本級塊匹配操作以查找具有匹配散列值的列表。同樣,當(dāng)更新組織候選塊的數(shù)據(jù)結(jié)構(gòu)時,編碼器可能需要執(zhí)行樣本級塊匹配操作來標識相同的塊??傮w而言,這些樣本級塊匹配操作可以是計算密集的。
[0158]因此,在某些示例實現(xiàn)中,編碼器使用迭代的基于散列的塊匹配。迭代的基于散列的塊匹配可加速塊匹配過程,并且還可以加速更新組織候選塊的數(shù)據(jù)結(jié)構(gòu)的過程。
[0159]迭代的基于散列的塊匹配使用以不同散列函數(shù)確定的多個散列值。對于塊Β(當(dāng)前塊或候選塊),除了散列值h(B),編碼器使用不同散列函數(shù)h’()確定另一個散列值h’ (B)o使用當(dāng)前塊的第一散列值h(B3#i),編碼器為第一散列函數(shù)h()標識具有相同散列值的候選塊。為進一步排除這些被標識的候選塊的一些,編碼器使用當(dāng)前塊的使用不同散列函數(shù)確定的第二散列值h’(B.)。編碼器將第二散列值h’(Β.)與先前標識的候選塊的第二散列值(其具有相同第一散列值)進行比較,以過濾出更多候選塊。散列表根據(jù)不同散列函數(shù)跟蹤候選塊的散列值。
[0160]在圖12a的示例中,如果h(Ba#i) = h3,那么編碼器選擇具有條目(3,0)、條目(3,1)、條目(3,2)、條目(3,3),…的候選塊用于進一步細化。如圖12c中所示,對于候選塊B,條目包括塊地址和來自散列函數(shù)h’()的第二散列值h’(B)。編碼器將當(dāng)前塊的第二散列值h’(B.)與具有條目(3,0)、條目(3,1)、條目(3,2)、條目(3,3),…的各候選塊的第二散列值h’ (B)進行比較?;诘诙⒘兄当容^的結(jié)果,編碼器可排除更多候選塊,留下具有分另IJ匹配h(B_)和h’(Β.)的第一和第二散列值的候選塊(如果有)。編碼器可在任何余下的候選塊上執(zhí)行樣本級塊匹配以選擇匹配塊。
[0161]圖13a_13c示出使用不同數(shù)據(jù)結(jié)構(gòu)的迭代的基于散列的塊匹配的另一示例。圖13a中的數(shù)據(jù)結(jié)構(gòu)(1300)通過來自第一散列函數(shù)h()的具有nl的可能散列值的第一散列值來組織候選塊。數(shù)據(jù)結(jié)構(gòu)(1300)包括從h。…h(huán)nll的散列值的列表。在該示例中,編碼器為當(dāng)前塊確定第一散列值h(Ba#if ) =h2,并從結(jié)構(gòu)(1300)選擇匕的列表。
[0162]如圖13b所示,h2的列表(1310)包括進一步通過來自第二散列函數(shù)h’ ()的第二散列值組織余下的候選塊的多個列表,其具有n2個可能散列值。列表(1310)包括從h’。...h’ n2 i的散列值的列表,每個包括具有塊地址的條目(例如,各候選塊的左上位置的水平和垂直坐標),如在圖13c中條目(1320)所示。在該示例中,編碼器為當(dāng)前塊確定第二散列值h’ (Ba#i) =h’。,并從列表(1310)選擇h’。的列表。對于h’。的列表中的候選塊,編碼器可執(zhí)行樣本級塊匹配以選擇匹配塊。在此示例中,第二散列值的列表對于第一散列值的給定列表是專用的。替換地,有針對第二散列值的一組列表,且編碼器標識(1)在第一散列值的匹配列表中的且還(2)在第二散列值的匹配列表中的任何候選塊。
[0163]除了基于散列的塊匹配之外,第二散列函數(shù)h’()可被用于簡化更新組織候選塊的數(shù)據(jù)結(jié)構(gòu)的過程。例如,當(dāng)編碼器檢查新候選塊是否與已經(jīng)表示在數(shù)據(jù)結(jié)構(gòu)中的候選塊相同時,編碼器可使用具有不同散列函數(shù)的多個散列值來過濾出不相同的塊。對于余下的候選塊,編碼器可執(zhí)行樣本級塊匹配以標識任何相同塊。
[0164]在前面的示例中,迭代基于散列的塊匹配以及更新使用兩個不同散列函數(shù)。替換地,編碼器使用三個、四個或更多個散列函數(shù)以進一步加速基于散列的塊匹配或過濾出不相同的塊,并且因此減少樣本級塊匹配操作的數(shù)量。同樣,對于低復(fù)雜度的編碼器,在散列值匹配時,編碼器可跳過逐樣本的塊匹配操作。對于具有大量可能散列值的散列函數(shù),如果兩個塊的全部散列值匹配那么存在很高可能性兩個塊是相同的。
[0165]E.基于基于散列的塊匹配的結(jié)果跳過編碼階段。
[0166]本章節(jié)呈現(xiàn)在基于散列的塊匹配被使用時加速編碼的各種方式。
[0167]圖14示出用于取決于基于散列的塊匹配的結(jié)果選擇性地跳過一個或多個編碼階段的通用技術(shù)(1400)。圖像編碼器或視頻編碼器(諸如參考圖3或圖4a-4b描述的編碼器)可執(zhí)行技術(shù)(1400) ο
[0168]編碼器對圖像或視頻進行編碼以產(chǎn)生經(jīng)編碼的數(shù)據(jù),編碼器在比特流的一部分中輸出該經(jīng)編碼的數(shù)據(jù)。在編碼期間,編碼器為當(dāng)前圖片的當(dāng)前塊執(zhí)行(1410)基于散列的塊匹配。例如,編碼器使用以上描述的數(shù)據(jù)結(jié)構(gòu)之一來執(zhí)行基于散列的塊匹配?;谏⒘械膲K匹配可包括一些逐樣本的塊匹配操作,以在當(dāng)前塊與候選塊的散列值匹配后確認當(dāng)前塊與候選塊匹配。
[0169]編碼器檢查條件是否被滿足。該條件取決于在針對當(dāng)前塊的基于散列的塊匹配期間是否發(fā)現(xiàn)了匹配。一般來說,在基于散列的塊匹配中的匹配表示當(dāng)前塊和候選塊之間的匹配散列值。它還可表示當(dāng)前塊和候選塊之間的逐樣本匹配。
[0170]該條件還可取決于其他因素,諸如(1)當(dāng)前塊的預(yù)期質(zhì)量相對于用于該匹配的候選塊的質(zhì)量,(2)當(dāng)前塊的塊尺寸相對于閾值塊尺寸,和/或(3)某些其他因素。
[0171]當(dāng)前塊的預(yù)期質(zhì)量可由適用于當(dāng)前塊的量化參數(shù)(“QP”)值指示,并且候選塊的質(zhì)量可由候選塊的QP值指示。如果候選塊覆蓋具有不同QP值的各塊中的部分,則針對該候選塊的QP值可以是:(a)這些塊的不同QP值中最小的QP值,(b)覆蓋候選塊的最大部分的無論哪個塊的QP值,(c)這些塊的不同QP值中的平均QP值,(d)這些塊的不同QP值中的加權(quán)平均QP值,(e)這些塊的不同QP值中的最大QP值,或(f)從這些塊的不同QP值中的一者或多者中推導(dǎo)出的某一其他QP值。具體地,作為該條件的一部分,編碼器可檢查當(dāng)前塊的QP值大于或等于候選塊的QP值。如果當(dāng)前塊的QP值大于或等于候選塊的QP值,則當(dāng)前塊的預(yù)期誤差與候選塊的預(yù)期誤差相比相當(dāng)或更差。替換地,代替檢查當(dāng)前塊和候選塊的QP值,編碼器相對于候選塊來評估當(dāng)前塊的殘留值(例如,檢查殘留值中的能量、在頻率變換后對殘留值的非零頻率系數(shù)進行計數(shù))。
[0172]當(dāng)編碼器將當(dāng)前塊的塊尺寸與閾值塊尺寸進行比較時,閾值塊尺寸可被設(shè)置成處于或大于編碼器對跳躍判定有信心的塊尺寸。一般來說,編碼器對針對較大塊的跳躍判定較有信心,而對針對較小塊的跳躍判定較不有信心。例如,閾值塊尺寸可以為64X64、32X32或某個其它塊尺寸。
[0173]基于條件是否被滿足,編碼器確定(1420)是否為當(dāng)前塊跳過一個或多個編碼階段。隨后,基于該確定的結(jié)果(1420),編碼器為當(dāng)前塊選擇性地跳過(1430)(諸)編碼階段。
[0174]例如,針對當(dāng)前塊的基于散列的塊匹配被執(zhí)行用于運動估計(且散列值是從輸入樣本值計算出的),并且編碼器選擇性地跳過針對當(dāng)前塊的部分精密運動估計。在一些示例實現(xiàn)中,編碼器執(zhí)行基于散列的塊匹配以在參考圖片中的整數(shù)樣本偏移處尋找到匹配的候選塊。如果基于散列的塊匹配過程在參考圖片中尋找到匹配,則編碼器跳過部分樣本運動估計(例如,在參考圖片中的1/2樣本偏移處和/或1/4樣本偏移處)。這節(jié)省了計算資源,而這些計算資源原本將被用來進行對部分樣本值的插值和部分精密運動估計期間的逐樣本的值比較。作為該條件的一部分,編碼器還可檢查當(dāng)前塊和候選塊的QP值、當(dāng)前塊的塊尺寸和/或另一因素。
[0175]作為另一示例,針對當(dāng)前塊的基于散列的塊匹配被執(zhí)行用于運動估計(且散列值是從輸入樣本值計算出的),并且編碼器選擇性地跳過對針對當(dāng)前塊的編碼模式和編碼選項的評估(例如,在基于散列的塊匹配后的對編碼模式和編碼選項的所有評估)。在一些示例實現(xiàn)中,如果編碼器使用基于散列的塊匹配在參考圖片中尋找到了匹配的候選塊,則編碼器可終止對當(dāng)前塊的編碼,這顯著地降低了編碼時間。對于跳過條件,編碼器還可(例如,通過將候選塊的QP值、平均QP值、加權(quán)平均QP值、最小QP值等與將被用于當(dāng)前塊的QP值進行比較)檢查參考圖片中的候選塊的重構(gòu)質(zhì)量不差于當(dāng)前塊的預(yù)期重構(gòu)質(zhì)量,并檢查當(dāng)前塊的塊尺寸大于還是等于閾值塊尺寸(例如,64x64)。替換地,在該條件被滿足時,編碼器跳過一些而非全部對編碼模式和編碼選項的評估。
[0176]作為另一示例,針對當(dāng)前塊的基于散列的塊匹配被執(zhí)行用于塊矢量估計(且散列值是從輸入樣本值計算出的),并且編碼器選擇性地跳過對針對當(dāng)前塊的圖片內(nèi)編碼模式和編碼選項的評估(例如,在基于散列的塊匹配后的對圖片內(nèi)編碼模式和編碼選項的所有評估)。在一些示例實現(xiàn)中,當(dāng)通過(用于運動估計的)基于散列的塊匹配沒有在參考圖片中尋找到匹配時,如果編碼器使用(用于BV估計的)基于散列的塊匹配在當(dāng)前圖片中尋找到匹配的候選塊,則編碼器可終止對當(dāng)前塊的編碼,這顯著地降低了編碼時間。作為該條件的一部分,編碼器還可檢查當(dāng)前塊和候選塊的QP值、當(dāng)前塊的塊尺寸和/或另一因素。
[0177]圖15示出用于取決于基于散列的塊匹配的結(jié)果選擇性地跳過一個或多個編碼階段的更詳細的示例技術(shù)(1500)。圖像編碼器或視頻編碼器(諸如參考圖3或圖4a-4b描述的編碼器)可執(zhí)行技術(shù)(1500)。
[0178]在編碼期間,編碼器針對當(dāng)前圖片的當(dāng)前塊選擇性地跳過一個或多個編碼階段。編碼器為當(dāng)前塊執(zhí)行(1510)基于散列的塊匹配。例如,編碼器使用以上描述的數(shù)據(jù)結(jié)構(gòu)之一執(zhí)行基于散列的塊匹配,其作為運動估計或塊矢量估計的一部分?;谏⒘械膲K匹配可包括一些逐樣本的塊匹配操作,以在當(dāng)前塊與候選塊的散列值匹配后確認當(dāng)前塊與候選塊匹配。
[0179]編碼器檢查(1520)基于散列的塊匹配是否產(chǎn)生對當(dāng)前塊的匹配。如果基于散列的塊匹配產(chǎn)生匹配,則編碼器確定(1530)當(dāng)前塊和候選塊的QP值,隨后確定(1540)候選塊是否通過質(zhì)量檢查(例如,當(dāng)前塊的預(yù)期質(zhì)量不比候選塊的重構(gòu)質(zhì)量更好)。如果是這樣的,則編碼器確定(1550)當(dāng)前塊是否通過塊尺寸檢查(例如,當(dāng)前塊的塊尺寸大于或等于閾值塊尺寸)。如果所有三個檢查(1520、1540、1550)都通過了,則編碼器跳過(諸)編碼階段。否則,如果這三個檢查(1520、1540、1550)中的任何一者失敗了,則編碼器執(zhí)行(1560)被選擇性地跳過的(諸)編碼階段。
[0180]VI1.選擇性地跳過各圖片內(nèi)預(yù)測模式。
[0181]本章節(jié)呈現(xiàn)了標識某些圖片內(nèi)預(yù)測模式何時應(yīng)當(dāng)或不應(yīng)當(dāng)在編碼期間被評估的各種方式,這些方式可加速編碼。具體地,某些圖片內(nèi)預(yù)測模式適用于屏幕捕捉內(nèi)容或其他人工創(chuàng)建的視頻。通過提供檢測人工創(chuàng)建的視頻的高概率方式,編碼器可在這樣的圖片內(nèi)預(yù)測模式何時可能是高效(例如,針對屏幕捕捉視頻或其他人工創(chuàng)建的視頻時)的方面評估這樣的圖片內(nèi)預(yù)測模式,并在它們可能是低效的時(例如,針對自然視頻時)跳過那些模式。
[0182]圖16示出了自然視頻和屏幕捕捉視頻的典型塊(其描繪了相同的通用模式)的特征。自然視頻的塊(1610)包括逐漸改變的樣本值和不規(guī)則的線。相反,屏幕捕捉視頻的塊(1620)包括統(tǒng)一樣本值的更清晰的線和模式。同樣,不同色彩值的數(shù)目在自然視頻的塊(1610)和屏幕捕捉視頻的塊(1620)之間改變。屏幕捕捉視頻的塊(1620)包括三個色彩,而自然視頻的塊(1610)包括更多的不同色彩。
[0183]圖17示出用于取決于對視頻單元中的不同色彩的數(shù)目的測量選擇性地跳過對一個或多個圖片內(nèi)預(yù)測模式的評估的通用技術(shù)(1700)。圖像編碼器或視頻編碼器(諸如參考圖3或圖4a-4b描述的編碼器)可執(zhí)行技術(shù)(1700)。
[0184]編碼器對圖像或視頻進行編碼以產(chǎn)生經(jīng)編碼的數(shù)據(jù),編碼該將經(jīng)編碼的數(shù)據(jù)器作為比特流的一部分輸出。在編碼期間,編碼器測量(1710)圖像或視頻的單元(例如,±夬、片、圖片)中不同色彩的數(shù)目。例如,編碼器對單元中的各樣本值之中的不同色彩進行計數(shù)?;蛘撸幋a器在將單元中的樣本值聚類成更少的色彩(例如,對這些樣本值進行量化,使得相似的樣本值變?yōu)橄嗤臉颖局?后,對這些樣本值之中不同色彩進行計數(shù)?;蛘?,編碼器用某一其他方式測量單元中的不同色彩的數(shù)目。
[0185]編碼器測量不同色彩的數(shù)目的方式取決于所使用的色彩空間。如果色彩空間例如為YUV (例如,YCbCr,YCoCg),則編碼器可對視頻單元中的不同Y值進行計數(shù)?;蛘?,編碼器可對不同的YUV三元組(即,各位置處的像素的Y、U和V樣本值的不同組合)進行計數(shù)。如果色彩空間為RGB (或GBR或BGR),則編碼器可對一個色彩分量或多個色彩分量中的樣本值進行計數(shù)?;蛘?,編碼器可對不同的三元組(即,各位置處的像素的R、G和B樣本值的不同組合)進行計數(shù)。
[0186]至少部分地基于該測量的結(jié)果,編碼器為該單元確定(1720)是否跳過一個或多個圖片內(nèi)預(yù)測模式。例如,圖片內(nèi)預(yù)測模式包括幀內(nèi)BC預(yù)測模式和/或圖片內(nèi)字典模式。為了確定是否跳過(諸)圖片內(nèi)預(yù)測模式,編碼器可將該測量的結(jié)果與閾值計數(shù)進行比較。
[0187]閾值計數(shù)的值取決于實現(xiàn),并且可例如為5、10,20或50。閾值計數(shù)可對所有的單元尺寸相同(例如,不理會塊尺寸)。或者,該閾值計數(shù)可針對不同的單元尺寸(例如,不同的塊尺寸)而不同。該閾值可以是預(yù)定義和靜態(tài)的,或者該閾值可以是可調(diào)整的(可調(diào)諧的)。例如,在對圖像或視頻進行編碼之前,閾值可由用戶或應(yīng)用來調(diào)整以對編碼速度對照編碼效率的降低進行折衷。一般來說,降低閾值通過跳過針對更多塊的(諸)圖片內(nèi)模式來增加編碼速度,但當(dāng)使用(諸)跳過的模式會很高效時,這可導(dǎo)致編碼效率的下降。
[0188]如果沒有跳過(諸)圖片內(nèi)預(yù)測模式,則編碼器為該單元評估(1730)(諸)圖片內(nèi)預(yù)測模式。編碼器還為該單元評估(1740) —個或多個其他預(yù)測模式。如果跳過(諸)圖片內(nèi)預(yù)測模式,則編碼器僅為該單元評估(1740)(諸)其他預(yù)測模式。
[0189]在一些示例實現(xiàn)中,編碼器選擇性地跳過針對塊的幀內(nèi)BC預(yù)測模式的評估,這取決于該塊中不同色彩的數(shù)目。幀內(nèi)BC預(yù)測主要是針對屏幕捕捉內(nèi)容中的塊設(shè)計的,并通常不適合用于自然視頻內(nèi)容。通常,屏幕捕捉內(nèi)容的某一塊中的不同色彩的數(shù)目不大。因此,如