新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > PC機的MPEG-4編碼原理詳解及實現

        PC機的MPEG-4編碼原理詳解及實現

        作者: 時間:2011-12-25 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/165964.htm

        1.3 運動

        運動對當前P-VOP和參考VOP進行運動估計與補償,減小幀間的時間相關性,壓縮。

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

        確定了塊匹配準則后,就要進行最優匹配點的搜索,校驗模型最后采用鉆石搜索法(Diamond Search,DS)。鉆石搜索法是一種利用搜索模板的形狀和大小,對運動估計算法速度及精度產生重要影響的快速搜索法。選用了兩種形狀和大小都不相同的搜索模板:一種是大鉆石搜索模板(Large DiamondSearch Pattern,LDSP),它有9個候選位置:(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個候選位置:(0,0),(0,1),(1,0),(0,-1)和(-1,0)。具體模板如圖4所示。



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

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

        如果采用幀間預測,進一步采用半像素搜索。首先對整個參考幀進行雙線性差值,則參考幀的面積變為原來的4倍,然后在特定的搜索范圍內搜索出更精確的運動矢量,最后根據參考圖像的亮度信息、色度信息和運動矢量做運動補償。

        如果采用幀內預測,不再對當前宏塊進行任何運動估計,相應運動補償后的參考宏塊數值為0。

        最后用當前幀減去運動補償后參考圖像得到差值,將差值數據進行紋理;對每個宏塊的運動矢量進行預測并求出差分值,對差分值進行位流轉換并輸出。

        2 編碼器的實現和測試

        根據圖1并結合編碼器各個模塊的實現,進行編碼器主函數的編寫和調試。初步確定編碼器的主函數應包括以下三部分:

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

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

        釋放資源前面兩個階段開辟的內存空間必須釋放掉,整個視頻的編碼過程結束。

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

        3 結語

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


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 南宁市| 铁岭县| 友谊县| 全椒县| 明星| 确山县| 昔阳县| 砚山县| 体育| 西乌珠穆沁旗| 陆川县| 麻阳| 昔阳县| 阿拉善右旗| 南川市| 绥阳县| 汶川县| 潮州市| 卢氏县| 德州市| 乡宁县| 上杭县| 镇赉县| 康保县| 镇沅| 清新县| 吴江市| 景宁| 祁阳县| 洪湖市| 临西县| 荥阳市| 舟曲县| 平舆县| 共和县| 罗城| 林口县| 德庆县| 武乡县| 巢湖市| 渝北区|