<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > PC機(jī)的MPEG-4編碼原理及實(shí)現(xiàn)

          PC機(jī)的MPEG-4編碼原理及實(shí)現(xiàn)

          作者: 時(shí)間:2010-06-02 來源:網(wǎng)絡(luò) 收藏

          1.3 運(yùn)動(dòng)

          運(yùn)動(dòng)對當(dāng)前P-VOP和參考VOP進(jìn)行運(yùn)動(dòng)估計(jì)與補(bǔ)償,減小幀間的時(shí)間相關(guān)性,壓縮。

          通常采用塊匹配法進(jìn)行運(yùn)動(dòng)估計(jì)。塊匹配法就是針對當(dāng)前幀中某一特定大小的圖像塊,從參考幀的一定區(qū)域中找出該圖像塊絕對誤差和(Sum of AbsoluteDifference,SAD)的最小匹配塊,利用此匹配塊來預(yù)測當(dāng)前塊。圖像塊的絕對誤差和指兩個(gè)大小相同的圖像塊的中像素差的絕對值之和。SAD16×16函數(shù)當(dāng)前宏塊和參考宏塊間的絕對誤差和;SAD8×8函數(shù)當(dāng)前8×8塊與參考8×8塊間的絕對誤差和。

          確定了塊匹配準(zhǔn)則后,就要進(jìn)行最優(yōu)匹配點(diǎn)的搜索,校驗(yàn)?zāi)P妥詈蟛捎勉@石搜索法(Diamond Search,DS)。鉆石搜索法是一種利用搜索模板的形狀和大小,對運(yùn)動(dòng)估計(jì)算法速度及精度產(chǎn)生重要影響的快速搜索法。選用了兩種形狀和大小都不相同的搜索模板:一種是大鉆石搜索模板(Large DiamondSearch Pattern,LDSP),它有9個(gè)候選位置:(0,0),(0,2),(1,1),(2,0),(1,-1),(0,-2),(-1,-1),(-2,0)和(-1,1)。具體模板如圖3所示。一種是小鉆石搜索模板(Small Diamond Search Pattern,SDSP),它包含5個(gè)候選位置:(0,0),(0,1),(1,0),(0,-1)和(-1,0)。具體模板如圖4所示。



          鉆石搜索過程如下:以當(dāng)前幀的當(dāng)前宏塊的左上角起點(diǎn)坐標(biāo)為大模板的原點(diǎn)(0,0),在參考幀的搜索范圍內(nèi),分別以大模板的(0,0),(0,2),(1,1),(2,0),(1,-1),(0,-2),(-1,-1),(-2,0)和(-1,1)像素點(diǎn)作為宏塊的左上角起點(diǎn),將該宏塊和當(dāng)前幀的宏塊做SAD16×16運(yùn)算,選擇SAD16×16值最小的左上角起點(diǎn)作為暫時(shí)的最佳匹配點(diǎn),此點(diǎn)與當(dāng)前宏塊左上角起點(diǎn)之間的位移就是運(yùn)動(dòng)矢量。判斷此運(yùn)動(dòng)矢量是否適合特定的規(guī)則,如果不適合,則進(jìn)行新一輪的大鉆石模板搜索,直到找到適合條件的運(yùn)動(dòng)矢量。然后再以大鉆石模板搜索的最佳匹配點(diǎn)為中心點(diǎn)(0,0),用小鉆石搜索模板進(jìn)行(0,1),(1,0),(0,-1)和(-1,0)四個(gè)參考點(diǎn)的精確搜索,搜索到的SAD16×16值最小點(diǎn)就是最終的最佳匹配點(diǎn),最佳匹配點(diǎn)與當(dāng)前宏塊的左上角起點(diǎn)之間的位移就是最終的運(yùn)動(dòng)矢量。

          以上是基于宏塊的全像素搜索,還可以選擇是否進(jìn)行基于8×8塊的全像素搜索。利用已經(jīng)得到的基于宏塊的運(yùn)動(dòng)矢量,找到基于宏塊的最佳匹配點(diǎn)。此匹配點(diǎn)為中心(0,0),其他匹配點(diǎn)為(-1,-1),(0,-1),(1,-1),(-1,0),(1,0),(-1,1),(0,1),(1,1),分別以這9個(gè)匹配點(diǎn)作為8×8像素塊的左上角起點(diǎn),將該8×8塊和當(dāng)前幀的8×8塊做絕對差值和的運(yùn)算,選擇SAD8×8值最小的左上角起點(diǎn)作為最佳匹配點(diǎn),以找到最佳運(yùn)動(dòng)矢量,得到宏塊內(nèi)每個(gè)8×8亮度塊的運(yùn)動(dòng)矢量和SAD8×8值。將4個(gè)SAD8×8的和與SAD16×16做比較,將較小值按照一定的規(guī)則處理,從而判斷當(dāng)前宏塊的預(yù)測模式為幀內(nèi)或幀間預(yù)測。

          如果采用幀間預(yù)測,進(jìn)一步采用半像素搜索。首先對整個(gè)參考幀進(jìn)行雙線性差值,則參考幀的面積變?yōu)樵瓉淼?倍,然后在特定的搜索范圍內(nèi)搜索出更精確的運(yùn)動(dòng)矢量,最后根據(jù)參考圖像的亮度信息、色度信息和運(yùn)動(dòng)矢量做運(yùn)動(dòng)補(bǔ)償。

          如果采用幀內(nèi)預(yù)測,不再對當(dāng)前宏塊進(jìn)行任何運(yùn)動(dòng)估計(jì),相應(yīng)運(yùn)動(dòng)補(bǔ)償后的參考宏塊數(shù)值為0。

          最后用當(dāng)前幀減去運(yùn)動(dòng)補(bǔ)償后參考圖像得到差值,將差值數(shù)據(jù)進(jìn)行紋理;對每個(gè)宏塊的運(yùn)動(dòng)矢量進(jìn)行預(yù)測并求出差分值,對差分值進(jìn)行位流轉(zhuǎn)換并輸出。

          2 編碼器的實(shí)現(xiàn)和測試

          根據(jù)圖1并結(jié)合編碼器各個(gè)模塊的實(shí)現(xiàn),進(jìn)行編碼器主函數(shù)的編寫和調(diào)試。初步確定編碼器的主函數(shù)應(yīng)包括以下三部分:

          初始化部分由于參考代碼中存在RGB到Y(jié)UV的圖像格式轉(zhuǎn)換函數(shù)(本文未介紹),則應(yīng)開辟相應(yīng)的存儲BMP和YUV圖像的空間;還要開辟空間存放編碼器生成的壓縮文件;必須設(shè)置編碼器的編碼參數(shù)。

          編碼處理部分此部分是通過循環(huán)編碼各幀圖像來實(shí)現(xiàn)的,讀入一幀圖像后,判斷是采用I幀還是P幀,然后輸出VOP頭信息,進(jìn)行當(dāng)前VOP的編碼并輸出位流信息到緩沖器中,最后利用fwrite函數(shù)形成磁盤文件。

          釋放資源前面兩個(gè)階段開辟的內(nèi)存空間必須釋放掉,整個(gè)視頻的編碼過程結(jié)束。

          結(jié)合參考的編碼主函數(shù),調(diào)試并運(yùn)行編碼器,生成divx文件,相應(yīng)地調(diào)試出解碼器。逐一更改編碼器的量化參數(shù)QP、幀率、輸出碼率和I幀間隔參數(shù),測試出它們對編碼效果的影響,如量化參數(shù)QP、幀率和I幀間隔參數(shù)與壓縮比成正比,輸出碼率與壓縮比成反比。經(jīng)過綜合測試,在保證解碼圖像質(zhì)量的前提下,當(dāng)QP為8,幀率為30 f/s,輸出碼率為400 000 b/s,I幀間隔為3時(shí),壓縮比為58.8,此時(shí)達(dá)到最好的壓縮效果。當(dāng)然,如果對解壓后的視覺效果要求不高的話,壓縮倍數(shù)還可以繼續(xù)提高。

          3 結(jié)語

          所講的是MPEG-4標(biāo)準(zhǔn)的Part2部分,其編解碼器已經(jīng)獲得了許多廠商的支持。目前,作為MPEG-4 Part10的H.264也已經(jīng)推出并發(fā)展,相比MPEG-4 Part2,H.264在同樣質(zhì)量下,其碼率能降低50%左右,說明MPEG-4一直在發(fā)展。隨著基于內(nèi)容的編碼技術(shù)的實(shí)用化發(fā)展,MPEG-4將有更為廣泛的應(yīng)用前景。

          本文引用地址:http://www.ex-cimer.com/article/166700.htm

          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();