MPEG4 H.264學習筆記之三 ------ 熵編碼

3.5 熵編碼
熵編碼把一系列用來表示視頻序列的元素符號轉變為一個用來傳輸或是存儲的壓縮碼流.輸入的符號可能包括量化的變換系數(像上面所說的運行級或零樹),運動向量(對于每個運動補償塊的向量值x和y),標記(在序列中用來表示重同步位的點),頭(宏塊頭,圖象頭,序列的頭等)以及附加信息(對于正確解碼來說不重要的信息).在這一節中,我們將介紹一些預測性的預編碼的方法(用來表示編碼幀中的區域關系)在之后接著介紹兩種被廣泛使用的熵編碼技術----修改后的哈夫曼編碼和算術編碼.

3.5.1 預測編碼
在圖象的某些區域中,某些符號是高度相關的.比如說,相鄰的intra編碼塊的平均值或DC值是非常相近的,相鄰的運動向量可能會有相似的x和y值,等等.編碼效率可以由從前面編碼的數據預測當前塊或宏塊的元素,并編碼它們之間的差異值來進行提高.一個塊或宏塊的運動向量指明了在之前編碼的幀的預測參考值的編移量.相鄰塊或宏塊的向量經常是相關的因為物體的運動可能會經過幀的一個很大的區域.這對于很小的塊或有大量運動物體的運動來說尤其是如此的.運動向量的壓縮可以由從之前的編碼向量來預測每個運動向量來改進.一個對于當前宏塊X的向量的簡單的預測是水平相鄰的宏塊A,三個或更多的之前編碼的向量可以被用來預測宏塊X的向量(比如A,B和C).預測的和實際運動向量的差值被編碼并傳輸.

量化參數或量化器步長控制了壓縮效率和圖象質量的平衡量.在實時的視頻編解碼中,在一個編碼幀中修改量化是必要的(例如改變壓縮率來使編碼碼率與傳輸信道碼率相適應).在相鄰的宏塊中很小的改變參數值就是足夠的了.修改了的量化參數必須告訴解碼器,而我們不把新的量化參數值傳輸走,而是傳輸一個差異值(比如+1,-1或+2,-2)來表示這個參數值變化了多少.因為用來編碼差異值要比編碼整個量化參數來說要使用更少的位.

3.5.2 變長編碼
一個變長的編碼器把輸入符號映射到一系列的碼字(VLC).每個符號映射到一個碼字,而碼字有變化的長度但是必須包括整數個位.經常出現的符號用短的VLC來表示,而不常出來的符號用長的VLC來表示.對于大量壓縮符號來說,這樣的操作會讓壓縮率提高.

3.5.2.1 哈夫曼編碼
哈夫曼編碼向每個VLC進行賦值的方法是基于對于不同的符號的出現機率的不同來定的.根據Huffman在1952年提出的原始設想,計算每個符號的出現機率是必要的,用這個結果來構造一系列的變長的碼字.

如果分布機率值是準確的,那么哈夫曼編碼提供了一種對于原始數據來說很有效的壓縮方法.然而,為了達到最優化的壓縮,對于不同序列的不同的碼表是需要的.

3.5.2.2 預計算的哈夫曼編碼
哈夫曼編碼過程對于視頻的編解碼有兩個不利的地方.首先,解碼器必須使用在編碼器設置的相同的碼字來進行解碼.傳輸這些信息到解碼端會加大傳輸內容,并降低壓縮效率,尤其對于短的視頻序列來說.第二,對于大的視頻序列的可能性值表在視頻數據編碼之前是不能得到的,這就會造成一些在編碼過程的延時.由于這些原因,近來的圖形和視頻編碼標準基于通常的視頻序列的統計模型進行編碼,用來解決這個問題.

變換系數(TCOEF)
MPEG-4視頻部分使用量化系數的3D編碼,它們使用每個碼字來表示一個(run,level,last)的組合.總共102個特定的(run,level,last)組合有VLC值.在每個碼字的last位是's',用來指明符號的解碼系數符號(0表示正,1表示負).

一個包含超過八個0的run值的碼字是無效的,這樣任何以000000000開始的碼字都表示碼流中有錯誤.所有的其他序列都可以被用有效的編碼值來進行解碼.注意最小的碼被賦給小的run和小的level值中,因為它們發生的機率比較大.

運動向量差(MVD)
差值編碼的運動向量被編碼為一對VLC,一個是對于x值的,一個是對于y值的.注意最短的碼表示小的運動向量差值(比如MVD=0表示簡單的碼值1).這些碼表與哈夫曼值是非常相似的,因為每個符號都被賦給了唯一個碼字.通常用的符號被賦了短碼字,在單獨的一個表中,沒有碼字的前綴是同其他碼字相同的.

3.5.2.3 其他的變長編碼
與哈夫曼和基于哈夫曼的編碼一樣,一些其他的VLC方法被用在了視頻編碼的程序中.基于哈夫曼編碼的一個很大的不利是它們對于傳輸錯誤是敏感的.在VLC序列的錯誤會導致解碼器損失同步信息,并不能正確地進行解碼,這樣就導致了使解碼處于混亂狀態.一個預定義的編碼表的缺點在于解碼端和編碼端必須保存同樣的碼表.一個可代替它的方式是用如果輸入的符號已知時可自生成碼的方法,比如說指數Golomb編碼法.

?


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/jasonme/archive/2005/04/10/341902.aspx

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456028.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456028.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456028.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python中的數學模塊

數學模塊 引入模塊:import math 注意: 使用某個模塊下的函數,必須先引入這個模塊,否則無法正常使用。 ceil() 向上取整操作 格式:math.ceil(數值) 返回值:整型floor() 向下取整操作 格式:math.floor(數值…

公共交通WiFi末路?公交WiFi重挫 地鐵WiFi承受盈利壓力

之前,公交WiFi運營方16WiFi因收支嚴重失衡宣布暫時關閉在11個城市的公交WiFi運營,這引發了業內對公共WiFi企業生存狀態的關注。 在公共WiFi領域,除了公交WiFi,另一重要市場就是地鐵WiFi。作為目前國內規模最大的地鐵WiFi運營方&am…

解決:TypeError: Value passed to parameter 'a' has DataType int64 not in list of allowed values: float1

報錯: TypeError: Value passed to parameter a has DataType int64 not in list of allowed values: float16, float32, float64, int32, complex64, complex128原因 1.4.0版本 默認int64 代碼內容: 改正 定義符合 格式

買電腦主要看什么配置_我的專業要買什么配置電腦可以用到畢業?

電腦是現代生活中不可缺少的工具智能手機的更新讓許多輕量工作可以在手機上完成但復雜的文檔辦公、大型的音視頻編輯專業的數據處理等等還是離不開電腦的操作高考結束后許多同學做的第一件事是買新手機、新電腦有的為了考后放松玩游戲有的出于興趣學習新技能也有的同學還在考慮…

CSS3實現一束光劃過圖片、和文字特效

在打折圖標里面 實現一道白光劃過的動畫效果 css: <!DOCTYPE html><html><head><meta charset"utf-8"> <style> p{ width:15%; margin:0 auto; line-height:50px; font-size:30px; text-align:center; transform-origin: 50px 50px;…

H.264編解碼流程

編碼&#xff1a; 藍色的前向編碼流程&#xff1a;以宏塊為輸入單位介紹優于以幀為單位介紹。Fn為即將進行編碼的宏塊&#xff0c;由原始圖像中16*16像素構成。每個宏塊要么采用幀內模式編碼&#xff0c;要么采用幀間模式編碼。不管是哪種編碼模式&#xff0c;預測宏塊P都是基…

遠程管理服務器的具體操作方法

遠程是管理服務器最常見的一種方式&#xff0c;租用服務器也好&#xff0c;把服務器托管給服務商也好&#xff0c;肯定不會經常去機房辦公&#xff0c;有什么問題的話大家都是選擇遠程服務器。其實遠程服務器就跟我們遠程電腦是一樣的&#xff0c;具體需要怎么操作可能有的人還…

python中的OS模塊

OS模塊 OS 操作系統的簡稱 os模塊就是對操作系統進行操作&#xff0c;使用該模塊必須先導入模塊&#xff1a; import osos模塊中的函數 getcwd() 功能&#xff1a;獲取當前的工作目錄 格式&#xff1a;os.getcwd() 返回值&#xff1a;路徑字符串chdir() 功能&#xff1a;修改…

JavaWeb基礎—dbutils的簡單入門

簡明入門教程&#xff0c;參考&#xff1a;https://www.cnblogs.com/CQY1183344265/p/5854418.html 進行此章節之前&#xff0c;介紹一個JdbcUtils的再次的簡單封裝 &#xff08;例如后面需要構造QueryRunner時得到數據源等的簡便的操作&#xff09; package cn.itcast.jdbcuti…

macos安裝vscode_VS Code 代碼編輯器入門指南:核心組件與概念

作者&#xff1a;思考問題的熊寫在前面如果當電腦只能裝一個軟件還需要盡量不影響日常學習工作時&#xff0c;不知道你的選擇會是什么。我把這個看似「荒誕」的問題理解為「All-in-One」的升級版拷問。這個問題陪伴了我很久&#xff0c;每用一個軟件我都會想想它對我究竟有多不…

環路濾波一些概念

熵編碼需要編碼的數據如下&#xff1a; 熵編碼需要編碼的數據如下&#xff1a;

【深度學習】TensorFlow之卷積神經網絡

卷積神經網絡的概念 在多層感知器&#xff08;Multilayer Perceptrons&#xff0c;簡稱MLP&#xff09;中&#xff0c;每一層的神經元都連接到下一層的所有神經元。一般稱這種類型的層為完全連接。 多層感知器示例 反向傳播 幾個人站成一排第一個人看一幅畫&#xff08;輸入數…

python中的zip模塊

zip壓縮 引入模塊&#xff1a; import zipfilezip文件格式是通用的文檔壓縮標準&#xff0c;在ziplib模塊中&#xff0c;使用ZipFile類來操作zip文件&#xff0c;下面具體介紹一下&#xff1a; zipfile.ZipFile(file[, mode[, compression[, allowZip64]]]) 功能&#xff1a;…

[LeetCode] 35. Search Insert Position

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array. Here are few examples.[1,3,5,6], 5 → 2[1,3,5,6], 2 → 1[1…

golang 的交叉編譯

為什么80%的碼農都做不了架構師&#xff1f;>>> Go是一門編譯型語言&#xff0c;所以在不同平臺上&#xff0c;需要編譯生成不同格式的二進制包。 由于Go 1.5對跨平臺編譯有了一些改進&#xff0c;包括統一了編譯器、鏈接器等。 編譯時候只需要指定兩個參數&#x…

【深度學習】Cifar-10-探究不同的改進策略對分類準確率提高

cifar10數據集上進行圖片分類&#xff0c;基于tensorflow框架&#xff0c; 旨在探究不同的改進策略對分類準確率的影響&#xff0c;如何一步步得提高準確率 一、問題描述 當我們在處理圖像識別或者圖像分類或者其他機器學習任務的時候&#xff0c;我們總是迷茫于做出哪些改進…

Acer 4750 安裝黑蘋果_黑蘋果 MacOS 10.15 Catalina安裝教程

一、準備工作一個8G以上的U盤(安裝 10.15 Catalina 必須要16G及以上的U盤 )&#xff1b;Mac OS鏡像、TransMac(刻錄工具)、DiskGenius(分區工具)、EasyUEFI(引導工區)、EFI驅動文件。安裝工具獲取方式&#xff1a;關注公眾號【遠景論壇】&#xff0c;回復&#xff1a;黑蘋果二、…

幀內16*16模式的宏塊數據傳輸順序

如果宏塊以16*16幀內模式編碼&#xff0c;那么塊-1首先被傳輸&#xff0c;攜帶的信息是每個4*4亮度塊的DC系數。然后&#xff0c;亮度殘差塊0-15被傳輸&#xff08;此時&#xff0c;16*16幀內宏塊的DC系數為零&#xff09;。對于亮度分量Cb和Cr&#xff0c;16和17塊攜帶DC系數的…

ceph中查看一個rbd的image的真實存儲位置

1、新建一個image存儲 rbd create hzb-mysql --size 2048 2、查看hzb-mysql的所有對象 一個rbd image實際上包含了多個對象&#xff08;默認情況下是image_size/4M&#xff09; [rootcc ~]# rbd info hzb-mysql rbd image hzb-mysql:size 2048 MB in 512 objectsorder 22 (4096…

python中的shutil模塊

shutil模塊 引入&#xff1a; import shutil copy() 功能&#xff1a;復制文件 格式&#xff1a;shutil.copy(來源文件,目標地址) 返回值&#xff1a;復制之后的路徑copy2() 功能&#xff1a;復制文件&#xff0c;保留元數據 格式&#xff1a;shutil.copy2(來源文件,目標地址…