一種圖像壓縮中對幀內(nèi)移動矢量進行編碼和解碼的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種數(shù)字視頻壓縮編碼及解碼系統(tǒng),特別是計算機屏幕圖像和視頻的編碼及解碼的方法和裝置。
【背景技術(shù)】
[0002]隨著以遠程桌面為典型表現(xiàn)形式的新一代云計算與信息處理模式及平臺的發(fā)展和普及,多臺計算機之間、計算機主機與智能電視、智能手機、平板電腦等其他數(shù)字設(shè)備之間及各種各類數(shù)字設(shè)備之間的互聯(lián)已經(jīng)成為現(xiàn)實并日趨成為一種主流趨勢。這使得服務(wù)器端(云)到用戶端的實時屏幕傳輸成為當前的迫切需求。由于需要傳輸?shù)钠聊灰曨l數(shù)據(jù)量很大,以平板電腦2048x1536像素分辨率且60幀/秒刷新率的24位真彩色屏幕圖像為例,需要傳輸?shù)臄?shù)據(jù)達每秒2048x1536x60x24=4320兆比特,如此多的數(shù)據(jù)要想在現(xiàn)實的網(wǎng)絡(luò)條件下實現(xiàn)實時傳輸是不可能的,因此對于計算機屏幕圖像的有效的數(shù)據(jù)壓縮必不可少。
[0003]充分利用計算機屏幕圖像的特點,對計算機屏幕圖像進行超高效率的壓縮,也是最新國際視頻壓縮標準HEVC (High Efficiency Video Coding)的一個主要目標。
[0004]計算機屏幕圖像的一個顯著特點是同一幀圖像內(nèi)通常會有很多相似甚至完全相同的像素圖樣(pixel pattern)。例如,計算機屏幕圖像中常出現(xiàn)的中文或外文文字,都是由少數(shù)幾種基本筆劃所構(gòu)成,同一幀圖像內(nèi)可以找到很多相似或相同的筆劃。計算機屏幕圖像中常見的菜單、圖標等,也具有很多相似或相同的圖樣?,F(xiàn)有的圖像和視頻壓縮技術(shù)中采用的幀內(nèi)預(yù)測(intra predict1n)方式,僅參考相鄰的像素樣值,無法利用一幀圖像中的相似性或相同性來提高壓縮效率?,F(xiàn)有技術(shù)中的巾貞內(nèi)運動補償(intra mot1ncompensat1n)方式也稱為巾貞內(nèi)塊復(fù)制(intra block copy)方式,用幾種固定大小(如4x4,8x8,16x16, 32x32,64x64像素)的塊來進行巾貞內(nèi)塊匹配(intra block matching)編碼,也不能找到各種不同大小和形狀的匹配。而另一種現(xiàn)有技術(shù)中的串匹配(string matching)方式,雖然能有效找到各種不同大小和形狀的匹配,但卻存在復(fù)雜度、計算量、存儲器讀寫帶寬都較大等問題。因此,必須尋求新的編碼工具,既能充分發(fā)掘和利用計算機屏幕圖像中存在的相似或相同圖樣,以大幅度提高壓縮效果,又把復(fù)雜度、計算量、存儲器讀寫帶寬等都控制在較小的范圍內(nèi)。
[0005]屏幕圖像的數(shù)字視頻信號的自然形式是圖像的序列。一幅圖像通常是由若干像素組成的矩形區(qū)域,如果一個數(shù)字視頻信號每秒有50幅圖像,那么一段30分鐘的數(shù)字視頻信號就是個由30x60x50 = 90000幅圖像組成的視頻圖像序列,有時也簡稱為視頻序列或序列。對數(shù)字視頻信號進行編碼就是對一幅一幅圖像進行編碼。
[0006]最新國際視頻壓縮標準HEVC中,對一幅圖像進行編碼時,把一幅圖像劃分成若干塊MxM像素的子圖像,稱為“編碼單元(Coding Unit簡稱⑶)”,以⑶為基本編碼單位,對子圖像一塊一塊進行編碼。常用的M的大小是4,8,16,32,64。因此,對一個視頻圖像序列進行編碼就是對各個編碼單元依次進行編碼。同樣,解碼時也是對各個編碼單元依次進行解碼,最終重構(gòu)出整個視頻圖像序列。
[0007]為適應(yīng)一幅圖像內(nèi)各部分圖像內(nèi)容與性質(zhì)的不同,有針對性地進行最有效的編碼,一幅圖像內(nèi)各CU的大小可以是不同的,有的是8x8,有的是64x64,等等。為了使不同大小的CU能夠無縫拼接起來,一幅圖像總是先劃分成大小完全相同具有AW像素的“最大編碼單元(Largest Coding Unit簡稱IXU)”,然后每個IXU再進一步劃分成多個大小不一定相同的⑶。例如,一幅圖像先劃分成大小完全相同的64x64像素的IXU GV= 64)。其中某個IXU由3個32x32像素的⑶和4個16x16像素的⑶構(gòu)成。而另一個IXU由2個32x32像素的⑶、3個16x16像素的⑶和20個8x8像素的⑶構(gòu)成。對一幅圖像進行編碼,就是依次對一個一個⑶進行編碼。
[0008]—個彩色像素有3個分量(component)組成。最常用的兩種像素色彩格式(pixelcolor format)是由綠色分量、藍色分量、紅色分量組成的GBR色彩格式和由一個亮度(luma)分量及兩個色度(chroma)分量組成的YUV色彩格式也稱YCbCr色彩格式。因此,對一個⑶進行編碼時,可以把一個⑶分成3個分量平面(G平面、B平面、R平面或Y平面、U平面、V平面),對3個分量平面分別進行編碼;也可以把一個像素的3個分量捆綁組合成一個3元組,對由這些3元組組成的⑶整體進行編碼。前一種像素及其分量的排列方式稱為圖像(及其⑶)的平面格式(planar format),而后一種像素及其分量的排列方式稱為圖像(及其⑶)的疊包格式(packed format)。
[0009]YUV色彩格式又可根據(jù)是否對色度分量進行下采樣再細分成若干種子格式:1個像素由I個Y分量、I個U分量、I個V分量組成的YUV4:4:4像素色彩格式;左右相鄰的2個像素由2個Y分量、I個U分量、I個V分量組成的YUV4:2:2像素色彩格式;左右上下相鄰按2x2空間位置排列的4個像素由4個Y分量、I個U分量、I個V分量組成的YUV4:2:0像素色彩格式。一個分量一般用I個8?16比特的數(shù)字來表示。YUV4:2:2像素色彩格式和YUV4:2:0像素色彩格式都是對YUV4:4:4像素色彩格式施行色度分量的下采樣得到。一個像素分量也稱為一個像素樣值(pixel sample)或簡單地稱為一個樣值(sample)。
[0010]巾貞內(nèi)塊匹配(intrablock matching,也稱巾貞內(nèi)運動補償intra mot1ncompensat1n或稱巾貞內(nèi)塊復(fù)制intra block copy)編碼就是在對一個⑶進行編碼時,在同一幀內(nèi)的已重構(gòu)參考像素樣值集之中的某個預(yù)定的搜索范圍(search range)內(nèi)搜索與所述CU (即被匹配塊)之間匹配誤差最小的一個匹配塊(稱為最優(yōu)匹配塊),然后把被匹配塊與最優(yōu)匹配塊之間的相對位置(稱為移動矢量即mot1n vector簡稱MV)寫入視頻壓縮碼流中。
[0011]幀內(nèi)塊匹配解碼就是在對一個CU進行解碼時,根據(jù)從視頻壓縮碼流中解析出來的一個MV,來確定同一幀內(nèi)的已重構(gòu)參考像素樣值集之中的匹配塊的位置,然后把所述匹配塊復(fù)制和粘貼到所述⑶(即被匹配塊)的位置。
[0012]如圖1所示,幀內(nèi)塊匹配的移動矢量(X,y)就是匹配塊與當前編碼單元(被匹配塊)的坐標之差。X < O表示匹配塊在當前編碼單元的左側(cè)。X > O表示匹配塊在當前編碼單元的右側(cè)。X = O表示匹配塊在當前編碼單元的正上方。同樣,y < O表示匹配塊在當前編碼單元的上側(cè)。I > O表示匹配塊在當前編碼單元的下側(cè)。y = O表示匹配塊在當前編碼單元的正左方。匹配塊與當前編碼單元有完全相同的寬度W和高度H。匹配塊通常是正方形的,即W = H。由于匹配塊與當前編碼單元不能重疊,X > -W且y > -H的情況絕對不會發(fā)生。也就是如圖2(a)所示,移動矢量(X,y)所代表的點在平面上的位置與當前編碼單元之間的距離至少為寬度W (=高度H)。
[0013]本發(fā)明的主要技術(shù)特征如圖2所示,首先,把移動矢量(X,y)所在的區(qū)域劃分成3部分,在圖2(a)中分別用3種斜線(或直線)表示;然后,把這3部分區(qū)域分別映射成與當前編碼單元距離最接近的區(qū)域,在圖2(b)中也分別用3種斜線(或直線)表示。在將原始移動矢量(X,y)映射成新的移動矢量(XX,yy)后,再將映射后移動矢量(χχ,yy)通過熵編碼放入壓縮碼流。由于映射后移動矢量(XX,yy)比原始移動矢量U,y)更小,對映射后移動矢量(XX,yy)進行熵編碼將產(chǎn)生更少的比特數(shù),從而提高了壓縮效率。
[0014]本發(fā)明的編碼方法中,最基本的特有技術(shù)特征就是將所有或部分原始移動矢量完全一對一地映射成距離當前編碼單元最接近的新移動矢量,稱為映射后移動矢量。
[0015]本發(fā)明的解碼方法中,最基本的特有技術(shù)特征就是將映射后移動矢量完全一對一地逆映射成距離當前編碼單元更遠的原始移動矢量。
[0016]本發(fā)明的編碼方法的一個具體實施例是把原始移動矢量所在的平面區(qū)域劃分成3部分:
第一部分:位于當前編碼單元上側(cè)和上右側(cè)的部分,與當前編碼單元之間的垂直距離至少為當前編碼單元的高度;
第二部分:位于當前編碼單元左側(cè)的部分,與當前編碼單元之間的水平距離至少為當前編碼單元的寬度;
第三部分:位于所述第一部分與所述第二部分之間的部分,與當前編碼單元之間的垂直距離至少為當前編碼單元的高度,但與當前編碼單元之間的水平距離小于當前編碼單元的寬度;
對所述第一部分的映射是把所述第一部分向下平移,平移量為所述當前編碼單元的高度;對所述第二部分的映射是把所述第二部分向右平移,平移量為所述當前編碼單元的寬度;