一種基于cuda的h.264分數(shù)像素快速插值方法
【專利摘要】一種基于CUDA的H.264分數(shù)像素快速插值方法,包括以下步驟:(1)將每一幀的H.264圖像分為4×4的子塊;(2)判斷預測點在4×4子塊的預測區(qū)域;(3)根據(jù)預測點在子塊中的區(qū)域,基于CUDA架構(gòu)并且利用雙線性插值算法得出在當前情況下的子塊中半像素點的像素值;(4)根據(jù)子塊整像素點與半像素點的值,基于CUDA架構(gòu)并且利用線性插值算法得出子塊中1/4像素點的像素值。本發(fā)明實現(xiàn)了分數(shù)像素的快速插值計算,加快了分數(shù)像素的快速定位,有效的提高了H.264編碼器的編碼速率。
【專利說明】-種基于CUDA的Η. 264分數(shù)像素快速插值方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于視頻圖像處理【技術(shù)領(lǐng)域】,特別涉及Η. 264視頻編解碼技術(shù)。
【背景技術(shù)】
[0002] Η. 264是由ITU-T視頻編碼專家組(VCEG)和IS0/IEC動態(tài)圖像專家組(MPEG)聯(lián) 合組成的聯(lián)合視頻組(JVT,Joint Video Team)提出的高度壓縮數(shù)字視頻編解碼器標準。 與其它視頻編碼標準如MPEG-2、H. 263相比,由于H. 264標準的高效壓縮比和對網(wǎng)絡(luò)的高適 應性,使其可廣泛應用于數(shù)字電視、無線視頻通信和IP視頻會議及其它多媒體業(yè)務(wù)。
[0003] 雖然H. 264有著精確的運動向量和優(yōu)秀的數(shù)據(jù)壓縮比,但是其編解碼復雜度相比 以往的視頻標準,均有成倍的增長。Ravssi等對H. 264與MPEG-4作了分析比較,指出H. 264 編碼的計算復雜度是MPEG-4的5-10倍,解碼復雜度也是后者的2-4倍。Chen zhibo等指 出H. 264解碼時所進行的計算量大約為H. 263的2倍,而編碼更甚,是H. 263的3倍。
[0004] 為了增加 H. 264編解碼速度,國內(nèi)外一些學者在充分使用處理器資源上進行了研 究,針對不同的處理器使用相應的多媒體擴展指令集來加速編解碼,如Intel針對Pentium 系列處理器提供的MMX/SSE指令集,為CPU提供了 SMD處理機制,將其用于視頻編解碼,能 在一定程度上提高編碼效率,但CPU的高負荷運作仍沒得到解決。一些研究者轉(zhuǎn)向使用DSP 芯片、FPGA、ARM等硬件電路來加速編解碼,也獲得較好的效果,但尚存在靈活性不夠、不易 升級等缺點。
[0005] 此外,國內(nèi)外學者針對H. 264中核心模塊如運動估計、運動補償、整數(shù)DCT變換、環(huán) 路濾波等環(huán)節(jié)也作了大量的研究。2003年CHEN等人提出的UMHexagonS搜索算法在運動估 計中做了改量。2007年LOU等通過分析殘差數(shù)據(jù)DCT系數(shù)的分布,判斷當前子塊是屬于平 坦區(qū)還是復雜區(qū),從而進行不同強度的濾波,這兩種方法都有效了提了編碼速度,但是其算 法比較復雜,移植性與通用性不強。
[0006] GPU (Graphic Processing Unit,圖形處理單元)具有很好的并行處理能力,經(jīng)過 2001年與2002年的兩次重大變革,程序員能夠靈活地編程控制GPU的頂點著色器與像素著 色器,使得GPU不再局限于最初的圖形渲染加速。2006年NVIDIA公司為GPU引入統(tǒng)一的 渲染架構(gòu),自此,GPU能更加靈活方便地運用于通用計算領(lǐng)域。2007年6月,NVIDIA推出了 CUDA (Compute Unified Device Architecture,統(tǒng)一計算設(shè)備架構(gòu)),研究人員不用借助圖 形學API,采用容易掌握的C語言開發(fā),縮短了研發(fā)周期。至今,CUDA技術(shù)正處于飛速發(fā)展, 其發(fā)布的版本也由最初的I. 〇發(fā)展的現(xiàn)在的6. X系列。同時,基于CUDA的H. 264并行算法 研究多集中在編碼的運動估計上,Pieters等在GPU在實現(xiàn)了 H. 264解碼器中的MC、重建、 CSC、可視化處理等模塊。Momcilovic等充分利用CUDA的存儲器資源和計算資源等,在GPU 并行實現(xiàn)了運動估計。錢悅等實現(xiàn)了 H. 264環(huán)路濾波的實例,并揭示了 CUDA架構(gòu)在H. 264 編解碼時并行運算的優(yōu)勢,為利用CUDA應用于H. 264編解碼器做了很好的鋪墊。
[0007] 雖然國內(nèi)外學者已經(jīng)對于H. 264進行了大量的研究并取得了一定的成果。但是, 對于H. 264幀間預測過程中1/4像素精度運動補償以往學者都沒有進行大量的研究與優(yōu) 化。因此,針對這一種情況,實現(xiàn)1/4像素精度快速定位可以作為一個突破口,達到提高了 H. 264編碼器的編碼速率的目的。
[0008] 由此,業(yè)界對能夠?qū)崿F(xiàn)分數(shù)像素的快速插值計算、加快分數(shù)像素的快速定位、提高 H. 264編碼器的編碼速率的方法有所期冀。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明的目的是提出一種基于 CUDA (Compute Unified Device Architecture,統(tǒng) 一計算設(shè)備架構(gòu))的Η. 264分數(shù)像素快速插值方法。
[0010] 為了達成上述目的,本發(fā)明提供了一種基于CUDA的Η. 264分數(shù)像素快速內(nèi)插方 法。所述方法基于CUDA架構(gòu),將Η. 264分數(shù)像素的內(nèi)插過程利用GPU并行計算得出,實現(xiàn) 了分數(shù)像素的快速插值計算并且提高了 Η. 264編碼器的編碼速率。
[0011] 本發(fā)明包括以下步驟:
[0012] (1)將每一幀的Η. 264圖像分為4X4的子塊;
[0013] (2)判斷預測點在4X4子塊的預測區(qū)域;
[0014] (3)根據(jù)預測點在子塊中的區(qū)域,基于CUDA架構(gòu)利用雙線性插值算法得出在當前 情況下的子塊中半像素點的像素值;
[0015] (4)根據(jù)子塊整像素點與半像素點的值,基于CUDA架構(gòu)利用線性插值算法得出子 塊中1/4像素點的像素值。
[0016] 本發(fā)明能實現(xiàn)分數(shù)像素的快速插值計算,從而提高Η. 264編碼器的編碼速率。
【專利附圖】
【附圖說明】
[0017] 圖1是本發(fā)明方法之步驟的流程圖。
[0018] 圖2是半像素插值示意圖。
[0019] 圖3是1/4像素插值示意圖。
[0020] 圖4是4X4子塊中預測點6種可能的預測區(qū)域。
[0021] 圖5是半像素插值計算時,CUDA架構(gòu)實現(xiàn)流程。
[0022] 圖6是CPU與GPU編碼速度比較結(jié)果。
【具體實施方式】
[0023] 結(jié)合附圖,通過下文的述詳細說明,可更清楚地理解本發(fā)明的上述及其他特征和 優(yōu)點。
[0024] 參見示出本發(fā)明實施例的附圖,下文將更詳細地描述本發(fā)明。然而,本發(fā)明可以以 許多不同形式實現(xiàn),并且不應解釋為受在此提出之實施例的限制。相反,提出這些實施例是 為了達成充分及完整公開,并且使本【技術(shù)領(lǐng)域】的技術(shù)人員完全了解本發(fā)明的范圍。
[0025] 由于本發(fā)明的方法實現(xiàn)H. 264分數(shù)像素快速插值計算可以達到令人滿意的效果, 因此可以實現(xiàn)數(shù)像素的快速定位,有效的提高了 H. 264編碼器的編碼速率。
[0026] 現(xiàn)參考圖1,我們以預測點正好落在區(qū)域中只有1/4像素點的情況來進行具體的 實施方式。如圖4所示,預測點正好落在區(qū)域中只有1/4像素點為圖4中的5_7_13_15區(qū) 域,此情況下的1/4像素點必須通過對角線上的半像素點內(nèi)插得到。
[0027] 本實施例中,實現(xiàn)的具體步驟如下所示:
[0028] (1)如圖2中半像素點b,通過b點對角線上的四個整像素點(C,D,M,N)求得,且 待求 b 點為 Fxy(x,y),整數(shù)像素點{C:FQ(l(0,0),D:F Q1(0, 1),Μ:Ρ1(ι(1,0),Ν:Ρη(1,1)}的值為 (4, D。則半像素點的值可以通過公式α-1)得到;
[0029]
【權(quán)利要求】
1. 一種基于CUDA的Η. 264分數(shù)像素快速插值方法,其特征是包括以下步驟: (1) 將每一幀的Η. 264圖像分為4X4的子塊; (2) 預測整像素點在每一個4X4子塊的位置; (3) 根據(jù)整像素點在子塊中的預測位置,基于CUDA架構(gòu)并且利用雙線性插值算法得出 在當前情況下的子塊中半像素點的像素值; (4) 根據(jù)子塊整像素點與半像素點的值,基于CUDA架構(gòu)并且利用線性插值算法得出子 塊中1/4像素點的像素值。
2. 根據(jù)權(quán)利要求1所述的基于CUDA的Η. 264分數(shù)像素快速插值方法,其特征是根據(jù) JM8. 6規(guī)范中定義有g(shù)et_bl〇Ck()方法中定義的dx與dy兩個變量的值來判斷預測點的位 置,其中dx變量是指表示預測點距離自己最近的左上整像素點的橫坐標,dy表示預測點距 離自己最近的左上整像素點的縱坐標;主要包括以下幾種情況: (1) 預測點正好落在整像素點上,此情況下不需要計算其他分數(shù)像素點; (2) 預測點正好落在區(qū)域中即有半像素點又有1/4像素點但半像素點與1/4像素點的 值只需要用相鄰的像素點通過插值計算得到; (3) 預測點正好落在區(qū)域中即有半像素點又有1/4像素點但其中這個區(qū)域的一些半像 素點的值要通過先得出其他相關(guān)的半像素點值后再通過插值得出,然后再將所有的半像素 點的值計算相鄰半像素點間的1/4像素點的值; (4) 預測點正好落在區(qū)域中只有1/4像素點,此情況下的1/4像素點必須通過對角線上 的半像素點內(nèi)插得到。
3. 根據(jù)權(quán)利要求1所述的基于CUDA的H. 264分數(shù)像素快速插值方法,其特征是按如下 步驟得到半像素點的值: (1) 半像素點b通過b點對角線上的四個整像素點(C,D,M,N)求得,且待求b點為 Fxy(x,y),整數(shù)像素點的值為 fn),則半像素點的值可以通過公式(1-1)得到:
(2) 計算計算一幀圖像所需的線程塊數(shù),對于分辨率為WXH的視頻序列可以分割成η 個4X4的子塊,線程塊數(shù)計算如公式(1-2)可以得出;
4. 根據(jù)權(quán)利要求1所述的基于CUDA的Η. 264分數(shù)像素快速插值方法,其特征是1/4像 素點是通過半像素點和整像素點線性內(nèi)插或者通過對角線上兩個半像素點內(nèi)插得到。
5. 根據(jù)權(quán)利要求1所述的基于CUDA的Η. 264分數(shù)像素快速插值方法,其特征是按照 如下步驟實現(xiàn)基于CUDA架構(gòu)并行計算出Η. 264分數(shù)像素快速插值過程: (1) 在GPU上分配顯存空間并且將數(shù)據(jù)從內(nèi)存拷貝到顯存; (2) 計算線程塊數(shù),分配一維線程塊; (3) 計算每個線程塊分配的線程數(shù),并且調(diào)用雙線插值算法實現(xiàn)半像素點的像素值的 并行計算,將計算得到的半像素值放入全局儲存器中; (4) 計算1/4像素點值所需要的線程塊數(shù),為每一個線程塊分配對應的線程數(shù); (5) 從全局儲存器中讀取半像素點值,利用線性插值算法并行計算出1/4像素點的值; (6) 將數(shù)據(jù)從顯存中拷貝到內(nèi)存,釋放GPU上的空間。
【文檔編號】H04N19/587GK104378642SQ201410593730
【公開日】2015年2月25日 申請日期:2014年10月29日 優(yōu)先權(quán)日:2014年10月29日
【發(fā)明者】洪向共, 劉浩, 呂向陽, 鄒建 申請人:南昌大學