專利名稱:一種幀內(nèi)預(yù)測模式的預(yù)測方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻壓縮技術(shù),特別涉及一種幀內(nèi)預(yù)測模式的預(yù)測方法。
背景技術(shù):
在現(xiàn)行的視頻壓縮標(biāo)準(zhǔn)中,幀內(nèi)編碼被廣泛使用。幀內(nèi)編碼利用同一幀中像素的空間相關(guān)性來去除冗余,而且由于不用相鄰時(shí)域幀做參考,所以可以有效的阻止錯誤的幀間傳播,被用作參考幀和立即刷新幀。
在最新的H.264/AVC視頻壓縮標(biāo)準(zhǔn)中對于4x4亮度塊的定義了9種幀內(nèi)方向預(yù)測模式。同以往的視頻壓縮標(biāo)準(zhǔn)如H.261、MPEG-2、H.263、MPEG-4等相比較,新標(biāo)準(zhǔn)采用了更多的幀內(nèi)預(yù)測模式,所以使得幀內(nèi)編碼的效率得到提高。但是由于需要將具體采用的幀內(nèi)預(yù)測模式編碼后發(fā)送給解碼端,因此為了表示每個幀內(nèi)編碼塊所采用的方向預(yù)測模式就需要大量的比特。以4x4亮度塊為例,在不做任何優(yōu)化的條件下為了表示9種預(yù)測模式,每個編碼塊需要4比特開銷來傳輸預(yù)測模式。對于整幅圖像來說這種開銷極大的降低了壓縮效率。所以,在H.264/AVC編碼標(biāo)準(zhǔn)中對幀內(nèi)預(yù)測模式采用預(yù)測編碼的方式來減少比特開銷。
在目前的H.264/AVC標(biāo)準(zhǔn)中,首先對采用的幀內(nèi)預(yù)測模式進(jìn)行預(yù)測,確定最有可能的預(yù)測模式,然后,根據(jù)預(yù)測得到的最有可能的預(yù)測模式與實(shí)際采用的預(yù)測模式間的關(guān)系,進(jìn)行預(yù)測模式的編碼。
具體地,如果預(yù)測得到的最有可能預(yù)測模式與實(shí)際采用的預(yù)測模式一致,則只需要1比特來表示預(yù)測模式信息,即告知解碼器采用預(yù)測得到的最有可能預(yù)測模式作為當(dāng)前解碼塊所選擇的模式;如果預(yù)測得到的最有可能預(yù)測模式與實(shí)際采用的預(yù)測模式不同,除使用1比特表示實(shí)際采用的預(yù)測模式與最有可能的預(yù)測模式不同之外,還需要額外的比特來表示實(shí)際采用的預(yù)測模式,在這種情況下又分為兩種情況當(dāng)實(shí)際采用的預(yù)測模式序號比最有可能預(yù)測模式的序號小時(shí),直接對實(shí)際預(yù)測模式信息進(jìn)行編碼;當(dāng)實(shí)際采用的預(yù)測模式序號比最有可能預(yù)測模式的序號大時(shí),對實(shí)際采用的預(yù)測模式序號減1后進(jìn)行編碼。通過這樣的處理,編碼預(yù)測模式僅需3比特。
由上述可見,如果對幀內(nèi)預(yù)測模式的預(yù)測準(zhǔn)確,即最有可能編碼模式與當(dāng)前4x4塊實(shí)際采用的預(yù)測模式相同,那么僅需1比特來表示當(dāng)前塊的預(yù)測模式信息。相反,如果預(yù)測錯誤,那么需要4比特來表示實(shí)際采用的預(yù)測模式??梢?,對幀內(nèi)預(yù)測模式的預(yù)測結(jié)果是否準(zhǔn)確,會直接影響幀內(nèi)編碼的壓縮效率。
在目前的H.264/AVC標(biāo)準(zhǔn)中,對采用的幀內(nèi)預(yù)測模式進(jìn)行預(yù)測的方式為將9種幀內(nèi)預(yù)測模式的序號從0到8按概率從大到小排列,如果當(dāng)前4x4塊的上方和左邊塊都采用4x4幀內(nèi)預(yù)測編碼方式,那么就將上方和左邊4x4塊中所采用的預(yù)測模式序號小的作為當(dāng)前塊的最有可能預(yù)測模式。同樣的,在解碼端也采用如此方法來計(jì)算最有可能預(yù)測模式。所以,不難理解在解碼端和編碼端可以得到相同的最有可能預(yù)測模式。
上述預(yù)測方式僅考慮了上方和左邊的已編碼塊,并且預(yù)測方式較為簡單,使得預(yù)測結(jié)果與實(shí)際采用的預(yù)測模式相同的概率不大。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種幀內(nèi)預(yù)測模式的預(yù)測方法,能夠提高預(yù)測結(jié)果與實(shí)際采用的預(yù)測模式相同的概率,從而減少了編碼幀內(nèi)預(yù)測模式的開銷,提高了幀內(nèi)編碼的壓縮效率。
為實(shí)現(xiàn)上述目的,本發(fā)明采用如下的技術(shù)方案 一種幀內(nèi)預(yù)測模式的預(yù)測方法,包括 A、根據(jù)當(dāng)前編碼塊的相鄰已編碼塊,設(shè)置當(dāng)前編碼塊的鄰域預(yù)測模板及所述鄰域預(yù)測模板的參考像素;其中,將當(dāng)前編碼塊的左上角像素位置設(shè)為坐標(biāo)(0,0),水平方向的X軸向右為正,垂直方向的Y軸向下為正, 若當(dāng)前編碼塊為圖像上方第一行,將位于(-1,0)、(-2,0)、(-1,1)、(-2,1)、(-1,2)、(-2,2)、(-1,3)、(-2,3)的8個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(-3,0)、(-3,1)、(-3,2)、(-3,3)的4個像素作為所述參考像素; 若當(dāng)前編碼塊位于圖像最右邊且非圖像上方第一行,將位于(-2,-2)、(-1,-2)、(0,-2)、(1,-2)、(2,-2)、(3,-2)、(-2,-1)、(-1,-1)、(0,-1)、(1,-1)、(2,-1)、(3,-1)、(-1,0)、(-2,0)、(-1,1)、(-2,1)、(-1,2)、(-2,2)、(-1,3)、(-2,3)的20個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(-3,-3)、(-2,-3)、(-1,-3)、(0,-3)、(1,-3)、(2,-3)、(3,-3)、(-3,-2)、(-3,-1)、(-3,0)、(-3,1)、(-3,2)、(-3,3)的13個像素作為所述參考像素; 若當(dāng)前編碼塊位于圖像最左邊且非圖像上方第一行,將位于(0,-2)、(1,-2)、(2,-2)、(3,-2)、(4,-2)、(5,-2)、(0,-1)、(1,-1)、(2,-1)、(3,-1)、(4,-1)、(5,-1)的12個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(0,-3)、(1,-3)、(2,-3)、(3,-3)、(4,-3)、(5,-3)、(6,-3)、(7,-3)的8個像素作為所述參考像素; 若當(dāng)前編碼塊不位于圖像的第一行、或最右邊、或最左邊,且不是圖像的第一個編碼塊,則將位于(-2,-2)、(-1,-2)、(0,-2)、(1,-2)、(2,-2)、(3,-2)、(4,-2)、(5,-2)、(-2,-1)、(-1,-1)、(0,-1)、(1,-1)、(2,-1)、(3,-1)、(4,-1)、(5,-1)、(-1,0)、(-2,0)、(-1,1)、(-2,1)、(-1,2)、(-2,2)、(-1,3)、(-2,3)的24個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(-3,-3)、(-2,-3)、(-1,-3)、(0,-3)、(1,-3)、(2,-3)、(3,-3)、(4,-3)、(5,-3)、(6,-3)、(7,-3)、(-3,-2)、(-3,-1)、(-3,0)、(-3,1)、(-3,2)、(-3,3)的17個像素作為所述參考像素; B、根據(jù)所述當(dāng)前編碼塊在圖像中的位置確定可用的預(yù)測模式,并遍歷所有可用的預(yù)測模式,在每種預(yù)測模式i下,利用鄰域預(yù)測模板的參考像素,計(jì)算所述鄰域預(yù)測模板中像素的預(yù)測值,并根據(jù)所述預(yù)測值與所述鄰域預(yù)測模板中像素的實(shí)際值計(jì)算代價(jià)函數(shù) 將最小的代價(jià)函數(shù)值對應(yīng)的預(yù)測模式作為預(yù)測結(jié)果;其中,predMode(i)(x,y)預(yù)測模式i下所述鄰域預(yù)測模板中像素的預(yù)測值,x和y為鄰域預(yù)測模板的坐標(biāo),templatePixel(x,y)為所述鄰域預(yù)測模板中像素的實(shí)際值,templateSize為預(yù)測模式i下實(shí)際采用的鄰域預(yù)測模板中的像素總數(shù)。
較佳地,位于圖像第一行的非第一個當(dāng)前編碼塊,可用的預(yù)測模式為預(yù)測模式1、2和8; 位于圖像最右邊且非第一行的當(dāng)前編碼塊,可用的預(yù)測模式為預(yù)測模式0、2、3和7; 除位于圖像第一行、圖像最右邊和圖像第一個編碼塊之外的其他當(dāng)前編碼塊,可用的預(yù)測模式為所有9種幀內(nèi)預(yù)測模式。
由上述技術(shù)方案可見,本發(fā)明中,根據(jù)當(dāng)前編碼塊的相鄰已編碼塊,設(shè)置當(dāng)前編碼塊的鄰域預(yù)測模板及所述鄰域預(yù)測模板的參考像素;然后,遍歷當(dāng)前編碼塊的所有可用預(yù)測模式,利用當(dāng)前編碼塊的鄰域預(yù)測模板,按照每種可用預(yù)測模式對參考像素進(jìn)行預(yù)測,并根據(jù)得到的預(yù)測值與參考像素實(shí)際值進(jìn)行比較,確定對所有參考像素的平均預(yù)測效果最佳的預(yù)測模式,將其作為當(dāng)前編碼塊的預(yù)測模式??梢?,不僅利用左邊和上邊的編碼塊,而是利用各種可用預(yù)測模式所涉及的相鄰已編碼像素,從而保證可以遍歷各種可用的預(yù)測模式,并且根據(jù)各種可用預(yù)測模式下對鄰域預(yù)測模板中像素的預(yù)測結(jié)果,選擇平均預(yù)測效果最佳的一種預(yù)測模式作為當(dāng)前編碼塊的預(yù)測模式,從而提高了預(yù)測模式的預(yù)測準(zhǔn)確性,進(jìn)而減少了編碼幀內(nèi)預(yù)測模式的開銷,提高了幀內(nèi)編碼的壓縮效率。
圖1為本發(fā)明中幀內(nèi)預(yù)測模式的預(yù)測方法流程圖。
圖2a為鄰域預(yù)測模板和參考像素的示意圖一。
圖2b為鄰域預(yù)測模板和參考像素的示意圖二。
圖2c為鄰域預(yù)測模板和參考像素的示意圖三。
圖2d為鄰域預(yù)測模板和參考像素的示意圖四。
圖3為foreman測試序列下,采用本發(fā)明方法計(jì)算的最有可能預(yù)測模式的正確率與H.264/AVC編碼標(biāo)準(zhǔn)中計(jì)算的最有可能預(yù)測模式的正確率的性能比較示意圖。
圖4為foreman測試序列下,采用本發(fā)明的方法進(jìn)行預(yù)測后再進(jìn)行編碼與H.264/AVC編碼標(biāo)準(zhǔn)中編碼預(yù)測模式的性能比較示意圖。
具體實(shí)施例方式 為使本發(fā)明的目的、技術(shù)手段和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖對本發(fā)明做進(jìn)一步詳細(xì)說明。
本發(fā)明的基本思想是對各種可用的預(yù)測模式進(jìn)行遍歷,利用各種預(yù)測模式對已編碼像素進(jìn)行預(yù)測,根據(jù)預(yù)測結(jié)果與已編碼像素的匹配程度,選擇預(yù)測效果最佳的一種作為當(dāng)前編碼塊的預(yù)測模式。
如前所述,在現(xiàn)有技術(shù)中,根據(jù)當(dāng)前編碼塊的左邊和上邊相鄰已編碼塊的預(yù)測模式來確定當(dāng)前編碼塊的預(yù)測模式,并且在兩個相鄰已編碼塊采用的最多兩種預(yù)測模式中選擇一種,作為當(dāng)前編碼塊的預(yù)測結(jié)果。
由于相鄰編碼塊的像素相關(guān)性較大,因此本發(fā)明中同樣根據(jù)相鄰已編碼塊的預(yù)測當(dāng)前編碼塊的預(yù)測模式。與現(xiàn)有技術(shù)不同的在于,本發(fā)明中會對所有可用的預(yù)測模式進(jìn)行遍歷,選擇預(yù)測效果最佳的作為當(dāng)前編碼塊的預(yù)測模式。
具體地,本發(fā)明中幀內(nèi)預(yù)測模式的預(yù)測方法流程包括鄰域預(yù)測模板和參考像素的確定,利用參考像素依次按照各種可用的預(yù)測模式對鄰域預(yù)測模板中的像素進(jìn)行預(yù)測,選擇預(yù)測效果最佳的一種作為當(dāng)前編碼塊的預(yù)測模式。
下面對本發(fā)明的具體實(shí)現(xiàn)做進(jìn)一步詳細(xì)說明。本發(fā)明中的幀內(nèi)預(yù)測模式的預(yù)測方法是對除當(dāng)前幀的第一個編碼塊之外的其他編碼塊進(jìn)行預(yù)測的流程,圖1為本發(fā)明中預(yù)測方式的流程圖,如圖1所示,該方法包括 步驟101,根據(jù)當(dāng)前編碼塊的相鄰已編碼塊,設(shè)置當(dāng)前編碼塊的鄰域預(yù)測模板及該鄰域預(yù)測模板的參考像素。
本步驟中,鄰域預(yù)測模板和參考像素是由當(dāng)前編碼塊的相鄰已編碼塊中的像素構(gòu)成的。其中,參考像素是用于對鄰域預(yù)測模板中的像素進(jìn)行預(yù)測的已編碼像素。
具體根據(jù)當(dāng)前編碼塊的位置,確定鄰域預(yù)測模板和參考像素的方式為 假定當(dāng)前編碼塊的左上角像素位置設(shè)為坐標(biāo)(0,0),水平方向的X軸向右為正,垂直方向的Y軸向下為正; 1)當(dāng)當(dāng)前編碼塊處于圖像上方第一行時(shí),僅相鄰的左邊相鄰塊已編碼可作為參考,則將位于(-1,0)、(-2,0)、(-1,1)、(-2,1)、(-1,2)、(-2,2)、(-1,3)、(-2,3)的8個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(-3,0)、(-3,1)、(-3,2)、(-3,3)的4個像素作為所述參考像素;具體的位置關(guān)系如圖2a所示,領(lǐng)域預(yù)測模板由當(dāng)前編碼塊左邊相鄰的8個像素構(gòu)成,像素I-L作為參考像素; 2)當(dāng)當(dāng)前塊處于圖像最右邊,即圖像右邊最后一列時(shí),僅相鄰的左邊和正上方相鄰塊已編碼可作為參考,則將位于(-2,-2)、(-1,-2)、(0,-2)、(1,-2)、(2,-2)、(3,-2)、(-2,-1)、(-1,-1)、(0,-1)、(1,-1)、(2,-1)、(3,-1)、(-1,0)、(-2,0)、(-1,1)、(-2,1)、(-1,2)、(-2,2)、(-1,3)、(-2,3)的20個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(-3,-3)、(-2,-3)、(-1,-3)、(0,-3)、(1,-3)、(2,-3)、(3,-3)、(-3,-2)、(-3,-1)、(-3,0)、(-3,1)、(-3,2)、(-3,3)的13個像素作為參考像素;具體的位置關(guān)系如圖2b所示,領(lǐng)域預(yù)測模板為20個像素構(gòu)成的L型區(qū)域,A-D、I-Q作為參考像素; 3)當(dāng)當(dāng)前塊處于圖像最左邊,即圖像左邊第一列時(shí),僅相鄰的正上方相鄰塊已編碼可作為參考,或正上方相鄰塊和右上方相鄰塊同時(shí)可作為參考,則將位于(0,-2)、(1,-2)、(2,-2)、(3,-2)、(4,-2)、(5,-2)、(0,-1)、(1,-1)、(2,-1)、(3,-1)、(4,-1)、(5,-1)的12個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(0,-3)、(1,-3)、(2,-3)、(3,-3)、(4,-3)、(5,-3)、(6,-3)、(7,-3)的8個像素作為參考像素;具體的位置關(guān)系如圖2c所示,鄰域預(yù)測模板為當(dāng)前編碼宏塊正上方和右上方相鄰的12個像素,A-H作為參考像素;具體地,在當(dāng)前編碼塊位于該圖像最左邊時(shí),根據(jù)不同的預(yù)測模式,可能僅將正上方相鄰塊作為參考,這時(shí),實(shí)際應(yīng)用的領(lǐng)域預(yù)測模板為正上方相鄰的8個像素,A-D作為相應(yīng)的參考像素;或者,也可能將正上方相鄰塊和右上方相鄰塊同時(shí)作為參考,這時(shí),實(shí)際應(yīng)用的領(lǐng)域預(yù)測模板為正上方和右上方相鄰12個像素構(gòu)成的模板,A-H作為相應(yīng)的參考像素; 4)當(dāng)當(dāng)前塊處于圖像中的其它位置時(shí),左邊、正上方和右上方的相鄰塊均可用作參考,則將位于(-2,-2)、(-1,-2)、(0,-2)、(1,-2)、(2,-2)、(3,-2)、(4,-2)、(5,-2)、(-2,-1)、(-1,-1)、(0,-1)、(1,-1)、(2,-1)、(3,-1)、(4,-1)、(5,-1)、(-1,0)、(-2,0)、(-1,1)、(-2,1)、(-1,2)、(-2,2)、(-1,3)、(-2,3)的24個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(-3,-3)、(-2,-3)、(-1,-3)、(0,-3)、(1,-3)、(2,-3)、(3,-3)、(4,-3)、(5,-3)、(6,-3)、(7,-3)、(-3,-2)、(-3,-1)、(-3,0)、(-3,1)、(-3,2)、(-3,3)的17個像素作為參考像素;具體的位置關(guān)系如圖2d所示,領(lǐng)域預(yù)測模板為24個像素構(gòu)成的L型區(qū)域,A-Q作為參考像素;與前一種情況類似,根據(jù)不同的預(yù)測模式,實(shí)際采用的鄰域預(yù)測模板與參考像素會有所差別,可以根據(jù)現(xiàn)有的各種預(yù)測模式來進(jìn)行實(shí)際的鄰域預(yù)測模板與參考像素的選擇。
在上述4種當(dāng)前編碼塊的位置上,設(shè)置鄰域預(yù)測模板和參考像素的過程中,之所以進(jìn)行上述方式的設(shè)置,一方面考慮到不同預(yù)測模式下,實(shí)際采用的鄰域預(yù)測模板不會完全相同,從而能夠體現(xiàn)出不同預(yù)測模式的性能差異,另一方面盡量避免利用過多的已編碼像素進(jìn)行預(yù)測,以降低實(shí)現(xiàn)復(fù)雜度。
步驟102,根據(jù)當(dāng)前編碼塊在圖像中的位置確定可用的預(yù)測模式。
如前所述,幀內(nèi)預(yù)測模式共有9種,但對于某些位置上的編碼塊,并不是所有9種預(yù)測模式均可用,對于不可用的預(yù)測模式,就不需要對其進(jìn)行遍歷。本步驟即根據(jù)當(dāng)前編碼塊在圖像中的位置確定可用的預(yù)測模式。
具體地,對于上述步驟101的1)所述位置的編碼塊,可用的預(yù)測模式為1、2和8;對于上述步驟101的2)所述位置的編碼塊,可用的預(yù)測模式為2、3和7;對于其余位置的編碼塊,可用的預(yù)測模式為所有9種預(yù)測模式。
步驟103,遍歷所有可用的預(yù)測模式,在每種預(yù)測模式下,利用當(dāng)前編碼塊的鄰域預(yù)測模板的參考像素,計(jì)算鄰域預(yù)測模板中像素的預(yù)測值。
本步驟中,遍歷所有可用的預(yù)測模式,在每種預(yù)測模式下,利用當(dāng)前編碼塊的鄰域預(yù)測模板的參考像素,計(jì)算鄰域預(yù)測模板中像素的預(yù)測值。其中,在不同的預(yù)測模式下,需要在鄰域預(yù)測模板像素中選擇當(dāng)前預(yù)測模式實(shí)際采用的像素,具體在每種預(yù)測模式下,預(yù)測值的計(jì)算方式和鄰域預(yù)測模板中選擇像素的方式與現(xiàn)有方式相同。
具體地,本步驟中,設(shè)鄰域預(yù)測模板左上角像素位置為(0,0),pred4x4L[x,y]為在不同的預(yù)測模式下對鄰域預(yù)測模板中的像素進(jìn)行預(yù)測所得到的預(yù)測值,p[x,y]為參考像素值,其中x,y的取值根據(jù)當(dāng)前編碼塊所用的鄰域預(yù)測模板規(guī)定,即根據(jù)步驟101中的坐標(biāo)轉(zhuǎn)換而來。
1)預(yù)測模式0 pred4x4L[x,y]=p[x,-1],其中x,y的取值根據(jù)當(dāng)前編碼塊所用的鄰域預(yù)測模板規(guī)定,即根據(jù)步驟101中的坐標(biāo)轉(zhuǎn)換而來。
2)預(yù)測模式1 pred4x4L[x,y]=p[-1,y],其中x,y的取值根據(jù)當(dāng)前編碼塊所用的鄰域預(yù)測模板規(guī)定,即根據(jù)步驟101中的坐標(biāo)轉(zhuǎn)換而來。
3)預(yù)測模式2 a)如果p[x,-1],x=0..3和p[-1,y],y=0..3都可用,則 pred4x4L[x,y]=(p
+p[1,-1]+p[2,-1]+p[3,-1]+ p[-1,0]+p[-1,1]+p[-1,2]+p[-1,3]+4)>>3 其中x,y=0..3。
b)如果p[x,-1],x=0..3不可用p[-1,y],y=0..3可用,則 pred4x4L[x,y]=(p[-1,0]+p[-1,1]+p[-1,2]+p[-1,3]+2)>>2 其中x,y=0..3。
c)如果p[x,-1],x=0..3可用p[-1,y],y=0..3不可用,則 pred4x4L[x,y]=(p
+p[1,-1]+p[2,-1]+p[3,-1]+2)>>2 其中x,y=0..3。
d)對于其它情況, pred4x4L[x,y]=(1<<(BitDepthY-1))為表示亮度的比特位數(shù),如 其中BitDepthY為表示亮度的比特位數(shù),如8比特表示時(shí),pred4x4L[x,y]=8,其中x,y的取值根據(jù)當(dāng)前編碼塊所用的鄰域預(yù)測模板規(guī)定,即根據(jù)步驟101中的坐標(biāo)轉(zhuǎn)換而來。
4)預(yù)測模式3 pred4x4L[x,y]=(p[x+y,-1]+2*p[x+y+1,-1]+ p[x+y+2,-1]+2)>>2,其中x,y的取值根據(jù)當(dāng)前編碼塊所用的鄰域預(yù)測模板規(guī)定,即根據(jù)步驟101中的坐標(biāo)轉(zhuǎn)換而來。
5)預(yù)測模式4 a)如果x>y, pred4x4L[x,y]=(p[x-y-2,-1]+2*p[x-y-1,-1]+ p[x-y,-1]+2)>>2, b)如果x<y, pred4x4L[x,y]=(p[-1,y-x-2]+2*p[-1,y-x-1]+ p[-1,y-x]+2)>>2 c)如果x=y(tǒng), pred4x4L[x,y]=(p
+2*p[-1,-1]+p[-1,0]+2)>>2 其中x,y的取值根據(jù)當(dāng)前編碼塊所用的鄰域預(yù)測模板規(guī)定,即根據(jù)步驟101中的坐標(biāo)轉(zhuǎn)換而來。
6)預(yù)測模式5 令zVR=2*x-y a)如果zVR=0、2、4、6、8、10、12、14, pred4x4L[x,y]=(p[x-(y>>1)-1,-1]+p[x-(y>>1),-1]+1)>>1 b)如果zVR=1、3、5、7、9、11、13, pred4x4L[x,y]=(p[x-(y>>1)-2,-1]+2*p[x-(y>>1)-1,-1]+ p[x-(y>>1),-1]+2)>>2 c)如果zVR=-1 pred4x4L[x,y]=(p[-1,0]+2*p[-1,-1]+p
+2)>>2 d)如果zVR=-2, pred4x4L[x,y]=(p[-1,1]+2*p[-1,0]+p[-1,-1]+2)>>2 e)如果zVR=-3, pred4x4L[x,y]=(p[-1,2]+2*p[-1,1]+p
+2)>>2 f)如果zVR=-4,-5, pred4x4L[x,y]=(p[-1,y-1]+2*p[-1,y-2]+p[-1,y-3]+2)>>2 其中x,y的取值根據(jù)當(dāng)前編碼塊所用的鄰域預(yù)測模板規(guī)定,即根據(jù)步驟101中的坐標(biāo)轉(zhuǎn)換而來。
7)預(yù)測模式6 令zVR=2*y-x a)如果zVR=0、2、4、6、8、10, pred4x4L[x,y]=(p[-1,y-(x>>1)-1]+p[-1,y-(x>>1)]+1)>>1 b)如果zVR=1、3、5、7、9, pred4x4L[x,y]=(p[-1,y-(x>>1)-2]+ 2*p[-1,y-(x>>1)-1]+p[-1,y-(x>>1)]+2)>>2 c)如果zVR=-1, pred4x4L[x,y]=(p[-1,0]+2*p[-1,-1]+p
+2)>>2 d)如果zVR=-2, pred4x4L[x,y]=(p[1,-1]+2*p
+p[-1,-1]+2)>>2 c)如果zVR=-3, pred4x4L[x,y]=(p[2,-1]+2*p[1,-1]+p
+2)>>2 d)如果zVR=-4, pred4x4L[x,y]=(p[3,-1]+2*p[2,-1]+p[1,-1]+2)>>2 e)如果zVR=-5, pred4x4L[x,y]=(p[4,-1]+2*p[3,-1]+p[2,-1]+2)>>2 f)如果zVR=-6、-7, pred4x4L[x,y]=(p[x-1,-1]+2*p[x-2,-1]+p[x-3,-1]+2)>>2 其中x,y的取值根據(jù)當(dāng)前編碼塊所用的鄰域預(yù)測模板規(guī)定,即根據(jù)步驟101中的坐標(biāo)轉(zhuǎn)換而來。
8)預(yù)測模式7 a)當(dāng)y=0、2、4, pred4x4L[x,y]=(p[x+(y>>1),-1]+p[x+(y>>1)+1,-1]+1)>>1 b)當(dāng)y=1、3、5, pred4x4L[x,y]=(p[x+(y>>1),-1]+2*p[x+(y>>1)+1,-1]+ p[x+(y>>1)+2,-1]+2)>>2 其中x,y的取值根據(jù)當(dāng)前塊所用的預(yù)測模板規(guī)定(參考上面的步驟2和圖2)。
9)預(yù)測模式8 令zVR=x+2*y a)如果zVR=0、2、4、6、8, pred4x4L[x,y]=(p[-1,y+(x>>1)]+p[-1,y+(x>>1)+1]+1)>>1 b)如果zVR=1、3、5、7, pred4x4L[x,y]=(p[-1,y+(x>>1)]+2*p[-1,y+(x>>1)+1]+ p[-1,y+(x>>1)+2]+2)>>2 c)如果zVR=9, pred4x4L[x,y]=(p[-1,4]+3*p[-1,5]+2)>>2 c)如果zVR>9, pred4x4L[x,y]=p[-1,5] 其中x,y的取值根據(jù)當(dāng)前編碼塊所用的鄰域預(yù)測模板規(guī)定,即根據(jù)步驟101中的坐標(biāo)轉(zhuǎn)換而來。
至此,對于每種預(yù)測模式下,實(shí)際采用的鄰域預(yù)測模板中像素的預(yù)測值計(jì)算完畢。
步驟104,根據(jù)鄰域預(yù)測模板中像素的預(yù)測值和實(shí)際值,選擇預(yù)測效果最佳的預(yù)測模式作為當(dāng)前編碼塊的預(yù)測模式。
對鄰域預(yù)測模板中像素的預(yù)測效果通過代價(jià)函數(shù)來表征,具體該代價(jià)函數(shù)為其中,i為預(yù)測模式的編號,x和y為鄰域預(yù)測模板中像素的坐標(biāo),predMode(i)(x,y)預(yù)測模式i下鄰域預(yù)測模板中像素的預(yù)測值,即前述步驟103中的pred4x4L[x,y],templatePixel(x,y)為所述鄰域預(yù)測模板中像素的實(shí)際值,templateSize為預(yù)測模式i下實(shí)際采用的鄰域預(yù)測模板中像素的總數(shù)。
在可用的預(yù)測模式中,使得代價(jià)函數(shù)最小的模式為預(yù)測值與實(shí)際值在統(tǒng)計(jì)意義上最接近的預(yù)測模式,也就是平均預(yù)測效果最優(yōu)的預(yù)測模式,將該預(yù)測模式作為當(dāng)前編碼塊的最有可能預(yù)測模式,即mostProbMode=arg min{Distortion(i)},mostProbMode即為最有可能預(yù)測模式,也就是按照本發(fā)明的方式確定的預(yù)測結(jié)果。
至此,本發(fā)明中的預(yù)測方法流程結(jié)束。接下來,可以根據(jù)預(yù)測結(jié)果,對當(dāng)前編碼塊實(shí)際采用的預(yù)測模式進(jìn)行編碼,具體編碼方式與現(xiàn)有方式相同,即當(dāng)預(yù)測得到的最有可能的預(yù)測模式與實(shí)際采用的預(yù)測模式相同時(shí),利用1比特傳輸該預(yù)測模式,否則,利用4比特傳輸實(shí)際采用的預(yù)測模式。
通過上述方式預(yù)測得到的最有可能的預(yù)測方式,由于利用了當(dāng)前編碼塊的多個方向的相鄰已編碼塊,并遍歷了所有可用的編碼模式,從而選擇出預(yù)測效果最優(yōu)的預(yù)測模式作為當(dāng)前編碼塊的預(yù)測模式,因此使得其預(yù)測結(jié)果與當(dāng)前編碼塊實(shí)際采用的預(yù)測模式相同的概率大大增加。從而進(jìn)一步降低了預(yù)測模式的編碼開銷,提高了幀內(nèi)編碼的壓縮效率。
為進(jìn)一步說明本發(fā)明相對于現(xiàn)有技術(shù)的優(yōu)點(diǎn),在JM軟件平臺上對利用本發(fā)明進(jìn)行預(yù)測并依據(jù)預(yù)測結(jié)果進(jìn)行編碼的方法進(jìn)行了仿真,并與H.264/AVC在相同實(shí)驗(yàn)條件下進(jìn)行了對比實(shí)驗(yàn)。在仿真過程中,設(shè)定全部序列采用4x4幀內(nèi)預(yù)測編碼模式,仿真結(jié)果如表1-表4所示??梢钥闯霰景l(fā)明方法在碼率節(jié)省上有很大提高。
表1編碼效率比較,圖像大小CIF(352×288) 表2編碼效率比較,圖像大小CIF(352×288) 表3編碼效率比較,圖像大小CIF(352×288) 表4編碼效率比較,圖像大小4CIF(704×576) 圖3為foreman測試序列下,采用本發(fā)明方法計(jì)算的最有可能預(yù)測模式的正確率與H.264/AVC編碼標(biāo)準(zhǔn)中計(jì)算的最有可能預(yù)測模式的正確率的性能比較示意圖。如圖3所示,在兩種典型的QP取值下,相對于H.264/AVC編碼標(biāo)準(zhǔn),本發(fā)明的預(yù)測方式準(zhǔn)確性有明顯的提高。
圖4為foreman測試序列下,采用本發(fā)明的方法進(jìn)行預(yù)測后再進(jìn)行編碼與H.264/AVC編碼標(biāo)準(zhǔn)中編碼預(yù)測模式的性能比較示意圖。由圖4可見,利用本發(fā)明的方法,在相同的碼率下,使得整體的編碼性能有了明顯提高。
以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種幀內(nèi)預(yù)測模式的預(yù)測方法,其特征在于,該方法包括
A、根據(jù)當(dāng)前編碼塊的相鄰已編碼塊,設(shè)置當(dāng)前編碼塊的鄰域預(yù)測模板及所述鄰域預(yù)測模板的參考像素;其中,將當(dāng)前編碼塊的左上角像素位置設(shè)為坐標(biāo)(0,0),水平方向的X軸向右為正,垂直方向的Y軸向下為正,
若當(dāng)前編碼塊為圖像上方第一行,將位于(-1,0)、(-2,0)、(-1,1)、(-2,1)、(-1,2)、(-2,2)、(-1,3)、(-2,3)的8個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(-3,0)、(-3,1)、(-3,2)、(-3,3)的4個像素作為所述參考像素;
若當(dāng)前編碼塊位于圖像最右邊且非圖像上方第一行,將位于(-2,-2)、(-1,-2)、(0,-2)、(1,-2)、(2,-2)、(3,-2)、(-2,-1)、(-1,-1)、(0,-1)、(1,-1)、(2,-1)、(3,-1)、(-1,0)、(-2,0)、(-1,1)、(-2,1)、(-1,2)、(-2,2)、(-1,3)、(-2,3)的20個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(-3,-3)、(-2,-3)、(-1,-3)、(0,-3)、(1,-3)、(2,-3)、(3,-3)、(-3,-2)、(-3,-1)、(-3,0)、(-3,1)、(-3,2)、(-3,3)的13個像素作為所述參考像素;
若當(dāng)前編碼塊位于圖像最左邊且非圖像上方第一行,將位于(0,-2)、(1,-2)、(2,-2)、(3,-2)、(4,-2)、(5,-2)、(0,-1)、(1,-1)、(2,-1)、(3,-1)、(4,-1)、(5,-1)的12個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(0,-3)、(1,-3)、(2,-3)、(3,-3)、(4,-3)、(5,-3)、(6,-3)、(7,-3)的8個像素作為所述參考像素;
若當(dāng)前編碼塊不位于圖像的第一行、或最右邊、或最左邊,且不是圖像的第一個編碼塊,則將位于(-2,-2)、(-1,-2)、(0,-2)、(1,-2)、(2,-2)、(3,-2)、(4,-2)、(5,-2)、(-2,-1)、(-1,-1)、(0,-1)、(1,-1)、(2,-1)、(3,-1)、(4,-1)、(5,-1)、(-1,0)、(-2,0)、(-1,1)、(-2,1)、(-1,2)、(-2,2)、(-1,3)、(-2,3)的24個像素作為當(dāng)前編碼塊的鄰域預(yù)測模板,將位于(-3,-3)、(-2,-3)、(-1,-3)、(0,-3)、(1,-3)、(2,-3)、(3,-3)、(4,-3)、(5,-3)、(6,-3)、(7,-3)、(-3,-2)、(-3,-1)、(-3,0)、(-3,1)、(-3,2)、(-3,3)的17個像素作為所述參考像素;
B、根據(jù)所述當(dāng)前編碼塊在圖像中的位置確定可用的預(yù)測模式,并遍歷所有可用的預(yù)測模式,在每種預(yù)測模式i下,利用鄰域預(yù)測模板的參考像素,計(jì)算所述鄰域預(yù)測模板中像素的預(yù)測值,并根據(jù)所述預(yù)測值與所述鄰域預(yù)測模板中像素的實(shí)際值計(jì)算代價(jià)函數(shù)
將最小的代價(jià)函數(shù)值對應(yīng)的預(yù)測模式作為預(yù)測結(jié)果;其中,predMode(i)(x,y)預(yù)測模式i下所述鄰域預(yù)測模板中像素的預(yù)測值,x和y為鄰域預(yù)測模板的坐標(biāo),templatePixel(x,y)為所述鄰域預(yù)測模板中像素的實(shí)際值,templateSize為預(yù)測模式i下實(shí)際采用的鄰域預(yù)測模板中的像素總數(shù)。
2、根據(jù)權(quán)利要求1所述的方法,其特征在于,位于圖像第一行的非第一個當(dāng)前編碼塊,可用的預(yù)測模式為預(yù)測模式1、2和8;
位于圖像最右邊且非第一行的當(dāng)前編碼塊,可用的預(yù)測模式為預(yù)測模式0、2、3和7;
除位于圖像第一行、圖像最右邊和圖像第一個編碼塊之外的其他當(dāng)前編碼塊,可用的預(yù)測模式為所有9種幀內(nèi)預(yù)測模式。
全文摘要
本發(fā)明公開了一種幀內(nèi)預(yù)測模式的預(yù)測方法,包括根據(jù)當(dāng)前編碼塊的相鄰已編碼塊,設(shè)置當(dāng)前編碼塊的鄰域預(yù)測模板及所述鄰域預(yù)測模板的參考像素;遍歷當(dāng)前編碼塊的所有可用預(yù)測模式,利用當(dāng)前編碼塊的鄰域預(yù)測模板,按照每種可用預(yù)測模式對參考像素進(jìn)行預(yù)測,并根據(jù)得到的預(yù)測值與參考像素實(shí)際值進(jìn)行比較,確定對所有參考像素的平均預(yù)測效果最佳的預(yù)測模式,將其作為當(dāng)前編碼塊的預(yù)測模式。應(yīng)用本發(fā)明,能夠使幀內(nèi)預(yù)測模式的預(yù)測更加準(zhǔn)確,從而提高幀內(nèi)編碼的壓縮效率。
文檔編號H04N7/26GK101572818SQ200910085819
公開日2009年11月4日 申請日期2009年6月1日 優(yōu)先權(quán)日2009年6月1日
發(fā)明者波 楊, 鈺 韓, 門愛東, 侃 常, 張文豪, 宗曉飛, 陳曉博, 明陽陽, 睿 韓 申請人:北京郵電大學(xué)