本發明屬于視頻編碼領域,特別涉及一種基于局部亮度補償lic的快速幀間編碼模式選擇方法及裝置。
背景技術:
lic(localilluminationcompensation)是一種用于圖像亮度變化的線性模型,使用縮放因子a和偏移b對原像素進行亮度補償,并且針對每個幀間編碼單元(cu)自適應地啟用或禁用。最近,新一代視頻編碼標準的制定引入了大量的新型編碼工具,lic技術則是其中之一。
近年來,隨著高清、超高清視頻(分辨率達4k×2k、8k×4k)應用逐步走進人們的視野,視頻壓縮技術受到了巨大的挑戰,視頻壓縮編碼標準體系也得到了迅猛發展,此外,各式各樣的視頻應用也隨著網絡和存儲技術的發展不斷涌現,如今,數字視頻廣播、移動無線視頻、遠程檢測、醫學成像和便攜攝影等,都已走進人們的生活,大眾對于視頻質量的要求也越來越高,因此,視頻應用的多樣化和高清化趨勢對于比h.265/hevc編碼效率更高的下一代視頻編碼標準提出了更強烈的要求。正是在這樣的背景下,itu-tvceg的vceg(視頻編碼專家組)和iso/iec的mpeg(動態圖像專家組)于2016年成立了視頻編碼探究聯合小組jvet(jointvideoexplorationteam),旨在探討新一代視頻編碼標準的研發和制定。
新一代的視頻編碼標準依舊采用混合編碼框架,包括變換、量化、熵編碼、幀內預測、幀間預測以及環路濾波等模塊,但是,為了提高視頻壓縮率,該標準采用qtbt(quadtreeplusbinarytree)的劃分結構,取代了hevc的四叉樹劃分。在qtbt結構下,去掉了多種劃分類型如cu、pu和tu分離觀念,支持更彈性的cu劃分類型來更好的匹配視頻數據的局部特征,同時在各個模塊引入了一系列相當耗時的新型編碼工具,例如基于affine的merge技術,基于fruc的merge技術,局部亮度補償技術,簡稱lic(localilluminationcompensation)等,這些提高壓縮率的改進大幅度提高了編碼器的計算復雜度,不利于新一代視頻編碼標準的產業化推廣。因此,在保證視頻主觀質量下降可忽略不計的情況下優化編碼器并減少編碼時間是視頻編解碼領域亟待研究和解決的問題之一。
新一代視頻編碼標準引入的lic技術主要通過圖像亮度變化特征和率失真函數判斷當前編碼塊是否進行布局亮度補償。主要分為兩個步驟,第一步,若當前幀與其參考幀之間沒有明顯的亮度變化時,則整個幀均不進行lic。為了識別這種情況,編碼器在圖像進行編碼之前計算出當前幀與參考幀之間的直方圖差,若所有像素值的差之和小于給定的閾值,則無需對當前幀進行lic;否則,對當前幀進行lic;
在幀間預測過程中,編碼器會對2nx2n、frucmerge、imv2nx2n這三種模式進行無lic和有lic兩次操作,通過比較率失真函數rdcost選擇當前編碼塊的lic模式(是或否),若是,則通過使用當前cu塊及其參考塊的相鄰樣本,采用最小二乘法計算出參數a和b。更具體地說,如圖1所示,使用參考塊和當前塊的相鄰像素的1/2下采樣點進行計算,獲取lic參數并對當前塊所有像素點進行補償再進行幀間預測。否則,無需補償而直接進行幀間預測即可。
通過對新一代視頻編碼標準的參考軟件jem的測試分析發現,在lowdelay配置下,lic技術的編碼時間占總編碼時間的30%~35%,因此,如果能通過相關信息提前預測出是否進行lic模式,從而避免不必要的判斷選擇過程將大大提高新一代視頻編碼標準的編碼效率。
技術實現要素:
本發明的目的在于提供了一種基于局部亮度補償lic的快速幀間編碼模式選擇方法及裝置,通過視頻的亮度變化特征和時空相關性提前預判出無需進行lic的編碼塊,跳過不必要且耗時的lic選擇過程,降低編碼的計算復雜度,減少編碼時間。
一種基于局部亮度補償lic的快速幀間編碼模式選擇方法,所有視頻幀中的編碼單元依次進行無lic的affinemerge模式、普通merge模式、frucmerge模式和2n×2n模式,獲得每個模式下編碼單元的率失真代價,選擇最小率失真代價對應的模式作為編碼單元的編碼模式;若當前編碼單元所在幀的lic模式標志位為真,則當前編碼單元繼續進行有lic的frucmerge模式和2n×2n模式,獲取當前編碼單元cu與參考幀匹配編碼單元cu之間的亮度值殘差和sumpixelsad與亮度直方圖的差值之和sumhistsad,若當前編碼單元cu中的亮度值殘差率
所述參考幀匹配編碼單元cu是利用當前編碼單元在所選編碼模式下的運動矢量mv,對參考幀同位塊進行運動補償得到的編碼單元,所述同位塊是指處于參考幀中,且位置和當前編碼單元在當前幀中的位置一樣的編碼單元;
所述當前編碼單元cu與參考幀匹配編碼單元cu之間的亮度值殘差和sumpixelsad是通過對當前編碼單元cu與參考幀匹配編碼單元cu之間對應像素點之間的像素值之差求和獲得;
所述當前編碼單元cu與參考幀匹配編碼單元cu之間的亮度直方圖的差值之和是通過對當前編碼單元cu與參考幀匹配編碼單元cu之間對應灰度級之間的直方圖值之差求和獲得;
wcu為當前編碼單元cu中的像素點個數,第一閾值取值為1-10,第二閾值取值為0-2。
進一步地,在進行lic模式前,先計算當前編碼單元cu的相鄰編碼單元的lic標志位為真的總數量
其中,cux表示當前編碼單元的相鄰單元,x∈{left、aboveleft、above、col},culeft、cuaboveleft、cuabove、cucol分別代表當前編碼單元的左鄰塊、左上鄰塊、上鄰塊以及同位塊,所述同位塊是指處于參考幀中,且位置和當前編碼單元在當前幀中的位置一樣的編碼單元;f(cux)表示當前編碼單元的相鄰單元的lic標志位,若為真,取值為1,否則,取值為0。
進一步地,當前編碼單元進行有lic的frucmerge模式和2n×2n模式后,再接著進行無lic的imv_2n×2n模式,獲得所有模式下對應的率失真代價,并以最小率失真代價對應的模式作為最佳模式;若最佳模式為經過lic處理的模式,且相鄰編碼單元lic標志位為真的總數量
一種基于局部亮度補償lic的快速幀間編碼模式選擇裝置,包括:
率失真代價計算單元,用于對所有視頻幀中的編碼單元依次進行無lic的affinemerge模式、普通merge模式、frucmerge模式和2n×2n模式,獲得每個模式下編碼單元的率失真代價;
選擇單元,通過選擇最小率失真代價對應的模式作為編碼單元的編碼模式;
跳過單元,若當前編碼單元所在幀的lic模式標志位為真時,按照以下規則判斷當前編碼單元是否跳過lic模式:
若當前編碼單元cu中的亮度值殘差率
其中,sumpixelsad和sumhistsad分別表示當前編碼單元cu與參考幀匹配編碼單元cu之間的亮度值殘差和與亮度直方圖的差值之和;
所述參考幀匹配編碼單元cu是利用當前編碼單元在所選編碼模式下的運動矢量mv,對參考幀同位塊進行運動補償得到的編碼單元,所述同位塊是指處于參考幀中,且位置和當前編碼單元在當前幀中的位置一樣的編碼單元;
所述當前編碼單元cu與參考幀匹配編碼單元cu之間的亮度值殘差和sumpixelsad是通過對當前編碼單元cu與參考幀匹配編碼單元cu之間對應像素點之間的像素值之差求和獲得;
所述當前編碼單元cu與參考幀匹配編碼單元cu之間的亮度直方圖的差值之和sumhistsad是通過對當前編碼單元cu與參考幀匹配編碼單元cu之間對應灰度級之間的直方圖值之差求和獲得;
wcu為當前編碼單元cu中的像素點個數,第一閾值取值為1-10,第二閾值取值為0-2。
進一步地,在進行lic模式前,通過統計當前編碼單元cu的相鄰編碼單元的lic標志位為真的總數量
進一步地,還包括最佳模式選取單元,若選取的最佳模式屬于經過lic處理的模式,且相鄰編碼單元lic標志位為真的總數量
所述最佳模式選取單元是在當前編碼單元進行有lic的frucmerge模式和2n×2n模式后,再接著進行無lic的imv_2n×2n模式,獲得所有模式下對應的率失真代價,并以最小率失真代價對應的模式選出最佳模式。
有益效果
本發明提供了一種基于局部亮度補償lic的快速幀間編碼模式選擇方法及裝置,該方案通過視頻的亮度變化特征和時空相關性提前預判出無需進行lic的編碼塊,跳過不必要且耗時的lic選擇過程,降低編碼的計算復雜度,減少編碼時間;具體體現在以下幾點:
1.利用當前編碼單元cu與參考幀匹配塊的直方圖獲得視頻序列的亮度變化特征,避免編碼流程中耗時的lic模式選擇過程,減少編碼時間;
2.利用視頻序列的時空相關性避免編碼流程中耗時的lic模式選擇過程,降低了新一代視頻編碼的計算復雜度,大幅度地提升了編碼效率;
3.利用非imv模式得到的最佳lic模式信息避免imv_2n×2n模式中不必要的lic模式選擇過程,提高編碼效率;
4.本發明簡單易行,有利于新一代視頻編碼標準的產業化推廣。
附圖說明
圖1為獲取lic參數的相鄰像素示意圖;
圖2為本發明的整體流程圖。
具體實施方式
下面將結合附圖和實施例對本發明做進一步的說明。
為減少編碼時間,提高工作效率,本發明具體采用的技術方案為:首先判斷當前塊所在圖像幀是否需要進行lic模式的選擇,若是,則首先計算當前塊與參考幀匹配塊的亮度直方圖之差的和sumhistsad以及亮度值殘差的和sumpixelsad,若sumhistsad/wcu<λ0或者sumpixelsad/wcu<λ1,則認為當前塊與參考幀匹配塊亮度變化不明顯,則提前判定當前塊無需進行亮度補償,并跳過lic模式選擇過程。其次,若非imv中最佳模式的lic模式為否,則跳過imv模式的lic模式選擇過程。另外,根據視頻序列的時空相關性,獲取當前塊的相鄰塊和同位塊對其lic模式進行預判,若其相鄰塊和同位塊的lic模式均為否,則認為當前塊的lic模式也為否,直接跳過耗時的lic模式選擇過程。
一種基于局部亮度補償lic的快速幀間編碼模式選擇裝置,包括:
率失真代價計算單元,用于對所有視頻幀中的編碼單元依次進行無lic的affinemerge模式、普通merge模式、frucmerge模式和2n×2n模式,獲得每個模式下編碼單元的率失真代價;
選擇單元,通過選擇最小率失真代價對應的模式作為編碼單元的編碼模式;
跳過單元,若當前編碼單元所在幀的lic模式標志位為真時,按照以下規則判斷當前編碼單元是否跳過lic模式:
若當前編碼單元cu中的亮度值殘差率
其中,sumpixelsad和sumhistsad分別表示當前編碼單元cu與參考幀匹配編碼單元cu之間的亮度值殘差和與亮度直方圖的差值之和;
所述參考幀匹配編碼單元cu是利用當前編碼單元cu在所選編碼模式下的運動矢量mv,對參考幀同位塊進行運動補償得到的編碼單元,所述同位塊是指處于參考幀中,且位置和當前編碼單元在當前幀中的位置一樣的編碼單元;
所述當前編碼單元cu與參考幀匹配編碼單元cu之間的亮度值殘差和sumpixelsad是通過對當前編碼單元cu與參考幀匹配編碼單元cu之間對應像素點之間的像素值之差求和獲得;
所述當前編碼單元cu與參考幀匹配編碼單元cu之間的亮度直方圖的差值之和sumhistsad是通過對當前編碼單元cu與參考幀匹配編碼單元cu之間對應灰度級之間的直方圖值之差求和獲得;
wcu為當前編碼單元cu中的像素點個數,第一閾值取值為1-10,第二閾值取值為0-2。
在進行lic模式前,通過統計當前編碼單元cu的相鄰編碼單元的lic標志位為真的總數量
還包括最佳模式選取單元,若選取的最佳模式屬于經過lic處理的模式,且相鄰編碼單元lic標志位為真的總數量
所述最佳模式選取單元是在當前編碼單元進行有lic的frucmerge模式和2n×2n模式后,再接著進行無lic的imv_2n×2n模式,獲得所有模式下對應的率失真代價,并以最小率失真代價對應的模式選出最佳模式。
實施例一
一種基于局部亮度補償lic的快速幀間編碼模式選擇方法,包括以下步驟:
步驟一:在幀間預測中,jem編碼器依次進行無lic(無lic:未進行局部亮度補償)的affinemerge、普通merge、frucmerge和2n×2n模式,然后根據率失真代價決策出一個最佳模式;
步驟二:首先獲取當前編碼單元cu所在圖像幀的lic模式標志位,以此來初始化當前塊的lic標志位cur_icflag,若cur_icflag=true,則繼續步驟三;否則,轉到步驟八;
步驟三:利用步驟一中得到的最佳模式獲取運動矢量mv,然后對參考幀同位塊進行運動補償,即根據該mv對同位塊進行平移得到當前cu的匹配塊refcu;
步驟四:利用步驟三獲得的匹配塊refcu,獲取當前塊和匹配塊中各個像素點的亮度值。據此生成亮度直方圖currhist[npel]、refhist[npel],其中,npel為視頻序列中亮度的最大取值,由于測試序列中亮度取值范圍為0~255,故算法中取值為255。另外,通過
計算當前塊與匹配塊亮度值殘差的和sumpixelsad,式中currcu[i]、refcu[i]分別為當前塊和匹配塊的像素值,wcu為cu尺寸,即像素點數。
另外,直方圖生成方式如下
hist[i]=∑f(x,y,i)(x,y)∈cu,i∈[0,npel]
其中,pixel_value(x,y)為當前編碼單元cu中坐標點為(x,y)處的像素值。
步驟五:利用步驟四生成的直方圖currhist[npel]、refhist[npel],通過
計算當前塊與匹配塊亮度直方圖之差的和sumhistsad。
步驟六:利用步驟四和步驟五計算所得的sumpixelsad和sumhistsad進行如下判斷,若滿足兩式中的任意一個,則認為當前編碼單元cu與匹配塊亮度變化不明顯,無需進行局部亮度補償,賦值cur_icflag=false并轉到步驟八;否則,cur_icflag維持原取值,即為真,并繼續下一步驟
sumhistsad/wcu<λ0
sumpixelsad/wcu<λ1
式中,λ0、λ1為閾值(經過大量實驗統計,當取λ0=0.5、λ1=5時編碼效果最佳),wcu為當前cu尺寸,即像素點數。
步驟七:編碼器進行有lic(有lic:進行局部亮度補償)的frucmerge模式和2n×2n模式,并根據率失真代價決策出最佳模式。
步驟八:編碼器進行無lic的整像素imv_2n×2n模式,依然根據率失真代價決策出最佳模式并獲取該最佳模式的lic信息ic_flag_temp。然后根據cur_icflag選擇后續操作,若cur_icflag=true,則進行下一步驟,否則,轉到步驟十一。
步驟九:根據步驟八獲得的ic_flag_temp,若為真,直接進行下一步驟,否則,轉到步驟十一,認為當前編碼單元cu無需進行lic模式選擇過程,并賦值cur_icflag=false,
步驟十:編碼器進行有lic的imv_2n×2n模式。
步驟十一:結束當前算法并進行后續其他模式的判斷。
實施例二
一種基于局部亮度補償lic的快速幀間編碼模式選擇方法,包括以下步驟:
步驟一:在幀間預測中,jem編碼器依次進行無lic(無lic:未進行局部亮度補償)的affinemerge、普通merge、frucmerge和2n×2n模式,然后根據率失真代價決策出一個最佳模式;
步驟二:首先獲取當前編碼單元cu的lic模式標志位,以此來初始化當前塊的lic標志位cur_icflag,若cur_icflag=true,則繼續步驟三;否則,轉到步驟九;
步驟三:利用步驟一中得到的最佳模式獲取運動矢量mv,然后對參考幀同位塊進行運動補償,即根據該mv對同位塊進行平移得到當前編碼單元cu的匹配塊refcu;
步驟四:利用步驟三獲得的匹配塊refcu,獲取當前編碼單元和匹配塊中各個像素點的亮度值。據此生成亮度直方圖currhist[npel]、refhist[npel],其中,npel為視頻序列中亮度的最大取值,由于測試序列中亮度取值范圍為0~255,故算法中取值為255。另外,通過
計算當前編碼單元cu與匹配塊亮度值殘差的和sumpixelsad,式中currcu[i]、refcu[i]分別為當前編碼單元cu和匹配塊的像素值,wcu為cu尺寸,即像素點數。
另外,直方圖生成方式如下
hist[i]=∑f(x,y,i)(x,y)∈cu,i∈[0,npel]
其中,pixel_value(x,y)為當前編碼單元cu中坐標點為(x,y)處的像素值。
步驟五:利用步驟四生成的直方圖currhist[npel]、refhist[npel],通過
計算當前編碼單元cu與匹配塊亮度直方圖之差的和sumhistsad。
步驟六:利用步驟四和步驟五計算所得的sumpixelsad和sumhistsad進行如下判斷,若滿足以下兩式中的任意一個,則認為當前編碼單元cu與匹配塊亮度變化不明顯,無需進行局部亮度補償,賦值cur_icflag=false并轉到步驟九;否則,cur_icflag維持原取值,即為真,并繼續下一步驟;
sumhistsad/wcu<λ0
sumpixelsad/wcu<λ1
式中,λ0、λ1為閾值(經過大量實驗統計,當取λ0=0.5、λ1=5時編碼效果最佳),wcu為當前cu尺寸,即像素點數。
步驟七:若步驟六中的公式均不滿足,獲取當前編碼單元cu的上方、左方、左上方、以及參考幀同位塊cuabove、culeft、cuaboveleft、cucol。這些相鄰塊和同位塊均已經完成編碼,可以獲得其lic標志位icflag(標志著某cu塊是否進行局部亮度補償),根據
其中,cux∈{cuabove、culeft、cuaboveleft、cucol},計算得到當前編碼單元cu的lic模式標志位cur_icflag。若cur_icflag=true,進行下一步驟,否則,轉到步驟九。
步驟八:編碼器進行有lic(有lic:進行局部亮度補償)的frucmerge模式和2n×2n模式,并根據率失真代價決策出最佳模式。
步驟九:編碼器進行無lic的整像素imv_2n×2n模式,依然根據率失真代價決策出最佳模式并獲取該最佳模式的lic信息ic_flag_temp。然后根據cur_icflag選擇后續操作,若cur_icflag=true,則進行下一步驟,否則,轉到步驟十一。
步驟十:編碼器進行有lic的imv_2n×2n模式。
步驟十一:結束當前算法并進行后續其他模式的判斷。
實施例三
一種基于局部亮度補償lic的快速幀間編碼模式選擇方法,具體過程如圖2所示,包括以下步驟:
步驟一:在幀間預測中,jem編碼器依次進行無lic(無lic:未進行局部亮度補償)的affinemerge、普通merge、frucmerge和2n×2n模式,然后根據率失真代價決策出一個最佳模式;
步驟二:首先獲取當前cu的lic模式標志位,以此來初始化當前塊的lic標志位cur_icflag,若cur_icflag=true,則繼續步驟三;否則,轉到步驟九;
步驟三:利用步驟一中得到的最佳模式獲取運動矢量mv,然后對參考幀同位塊進行運動補償,即根據該mv對同位塊進行平移得到當前cu的匹配塊refcu;
步驟四:利用步驟三獲得的匹配塊refcu,獲取當前塊和匹配塊中各個像素點的亮度值。據此生成亮度直方圖currhist[npel]、refhist[npel],其中,npel為視頻序列中亮度的最大取值,由于測試序列中亮度取值范圍為0~255,故算法中取值為255。另外,通過
計算當前塊與匹配塊亮度值殘差的和sumpixelsad,式中currcu[i]、refcu[i]分別為當前塊和匹配塊的像素值,wcu為cu尺寸,即像素點數。
另外,直方圖生成方式如下
hist[i]=∑f(x,y,i)(x,y)∈cu,i∈[0,npel]
其中,pixel_value(x,y)為當前cu中坐標點為(x,y)處的像素值。
步驟五:利用步驟四生成的直方圖currhist[npel]、refhist[npel],通過
計算當前塊與匹配塊亮度直方圖之差的和sumhistsad。
步驟六:利用步驟四和步驟五計算所得的sumpixelsad和sumhistsad進行如下判斷,若滿足兩式中的任意一個,則認為當前編碼單元cu與匹配塊亮度變化不明顯,無需進行局部亮度補償,賦值cur_icflag=false并轉到步驟九;否則,cur_icflag維持原取值,即為真,并繼續下一步驟;
sumhistsad/wcu<λ0
sumpixelsad/wcu<λ1
式中,λ0、λ1為閾值(經過大量實驗統計,當取λ0=0.5、λ1=5時編碼效果最佳),wcu為當前cu尺寸,即像素點數。
步驟七:若步驟六中的公式均不滿足,則獲取當前cu的上方、左方、左上方、以及參考幀同位塊cuabove、culeft、cuaboveleft、cucol。這些相鄰塊和同位塊均已經完成編碼,可以獲得其lic標志位icflag(標志著某cu塊是否進行局部亮度補償),根據
其中,cux∈{cuabove、culeft、cuaboveleft、cucol},計算得到當前編碼單元cu的lic模式標志位cur_icflag。若cur_icflag=true,進行下一步驟,否則,轉到步驟九。
步驟八:編碼器進行有lic(有lic:進行局部亮度補償)的frucmerge模式和2n×2n模式,并根據率失真代價決策出最佳模式。
步驟九:編碼器進行無lic的整像素imv_2n×2n模式,依然根據率失真代價決策出最佳模式并獲取該最佳模式的lic信息ic_flag_temp。然后根據cur_icflag選擇后續操作,若cur_icflag=true,則進行下一步驟,否則,轉到步驟十二。
步驟十:根據步驟九獲得的ic_flag_temp,若為真,直接進行下一步驟,否則,轉到步驟十二,認為當前編碼單元cu無需進行lic模式選擇過程,并賦值cur_icflag=false;
步驟十一:編碼器進行有lic的imv_2n×2n模式。
步驟十二:結束當前算法并進行后續其他模式的判斷。
在實例中所述的塊即為編碼單元。
為了驗證本發明的正確性以及有效性,基于參考軟件jem4.0在visualstudio2015軟件上實現實施例三所述方法。所有實驗的具體編碼參數的配置選用jem標準配置文件:encoder_lowdelay_jvet10.cfg以及對應測試序列的標準配置文件。
為了驗證算法性能的好壞,采用bdbr(bjotegaarddeltabitrate)以及δt兩個指標來進行評估。其中,bdbr是用來評估算法對視頻質量的影響,bdbr越大說明算法對視頻質量的影響越大,即算法的性能越差,其主要是通過設置四組不同的量化參數qp以獲取四組不同bits以及psnr來進行計算。δt則是反映當前算法對編碼器效率的提升,其計算公式如下所示:
其中,torg代表使用不加任何快速算法的原始編碼器編碼所使用的時間,tnew代表加快速算法后編碼所需時間,δt則代表加快速算法后編碼器在效率上提升的百分比。
通過實驗仿真,實驗結果如表1所示,δbits%為與傳統的編碼器相比比特率變化百分比,δpsnr/db為與傳統的編碼器相比峰值信噪比變化。
表1實驗結果
根據實驗仿真結果表1可知:應用本發明所述方法后,編碼時間降低了24%,而bdbr上升僅為0.49。由此實驗結果可以看出,本發明在保證視頻主觀質量的前提下,大幅度地提高了編碼效率,達到了本發明的目的。
本文中所描述的具體實施例僅僅是對本發明精神作舉例說明。本發明所屬技術領域的技術人員可以對所描述的具體實施例做各種各樣的修改或補充或采用類似的方式替代,但并不會偏離本發明的精神或者超越所附權利要求書所定義的范圍。