H.264/AVC視頻編解碼技術詳解 第一章 視頻信息與壓縮編碼

H.264/AVC視頻編解碼技術詳解系列筆記 是對 H.264/AVC視頻編解碼技術詳解 課程的學習

文章目錄

    • 人與世界的交互
    • 視頻信號的表示方法
    • 視頻壓縮編碼
      • 視頻信息為什么可以被壓縮?
      • 視頻壓縮編碼的分類:
      • 視頻壓縮編碼的基本技術

人與世界的交互

從遠古時代開始,人類就在不斷為適應環境、改造環境而艱苦斗爭。
人類通過嗅覺、觸覺、聽覺、視覺等來適應社會,而視覺尤為重要,后來人們希望用更直觀的形式記錄所看到的東西,因此有了象形文字到現代文字的演變,以及壁畫到繪畫、照片、視頻的演變。

視頻通過每一幀的圖像表達信息,視頻包含的音頻可以提供大量信息,視頻通過圖像的運動、場景的變換提供信息,視頻信息是最接近人的直觀體驗的信息表達方式,是最高效的信息記錄方式。

視頻信號的表示方法

在真實的世界中,視頻影像處理的是模擬信號,為了適應現在的計算機,模擬的信號必須轉換成數字格式,才能進行下一步的傳輸和處理。

在數字格式的視頻信號中,組成視頻的基本結構是一幀幀連續而關聯的圖像。組成每一幀圖像的基本結構是成平面緊密排列的像素。每一個像素代表圖像中一個彩色的點,由顏色的三基色分別取不同的分量構成:
R:紅色分量
G:綠色分量
B:藍色分量

RGB顏色空間:

  1. RGB顏色空間常用于顯示器系統
  2. RGB顏色空間由紅綠藍三基色構成,每一個像素至少有三個顏色分量構成
  3. RGB三個分量每一個分量以1字節表示,則可以表示成256*256*256種不同的顏色,1字節=8bit,2^8=256
  4. 常見的圖像格式如位圖(bmp)格式以RGB形式保存

YUV顏色空間

  1. 實際的編解碼等視頻處理中,YUV格式比RGB格式更為常用
  2. YUV格式中,一個像素分別用亮度和色度分量表示,每一個像素由一個亮度分類Y和兩個色度分量U、V組成
  3. YUV格式中的亮度與色度分量可以與表示的像素一一對應,也可以對色度分量的數據進行采樣,即色度分量少于亮度分量,這樣處理的原因是因為人的感官對亮度信息的敏感度遠高于對色度信息的敏感度
  4. YUV格式的優勢是,可以減少色度分量的采樣率,這樣既可以不對圖像造成太大的影響,又可以減少數據的存儲量,還可以兼容黑白和彩色的顯示設備。顯示設備是黑白:將色度分量去掉,只需要亮度分量即可。
  5. YUV圖像的常見色度采樣方式有:4:4:4,4:2:2,4:2:0(最常用)

4:4:4
在這里插入圖片描述
4:2:2:即每兩個像素共用一個U分量一個V分量
在這里插入圖片描述
4:2:0:每四個像素只對應了一個U分量一個V分量
在這里插入圖片描述

視頻壓縮編碼

編碼:將信息按照一定規則使用某種形式的碼流表示與傳輸
常需要編碼的信息:文字、語音、視頻、控制信息等

視頻編碼的主要目的:數據壓縮

  • 動態圖像的RGB/YUV表示,數據量極大
  • 存儲空間和傳輸帶寬完全無法滿足像素格式視頻保存傳輸的要求

圖像的每個像素的三個顏色分量:RGB,每個顏色分量以8bit保存,每像素至少需要3bytes

分辨率1280*720的一幀圖像:3byte*1280*720b≈2.64Mb

25frame/sec的視頻,所需碼率(碼率:視頻碼率就是數據傳輸時單位時間傳送的數據位數,一般單位是kbps即千位每秒):1280*720*8*3*25=553Mb/sec,該碼率已經超過傳輸帶寬的極限了,如果是分辨率更大的視頻,則其碼率會更大

因此,我們需要對視頻進行壓縮。

視頻信息為什么可以被壓縮?

  1. 時間冗余:視頻相鄰的兩幀之間內容相似,存在運動關系
  2. 空間冗余:視頻的某一幀內部的相鄰像素存在相似性
  3. 編碼冗余:視頻中不同數據出現的概率不同
  4. 視覺冗余:觀眾的視覺系統對視頻中不同的部分敏感度不同

視頻壓縮編碼的分類:

  • 基于波形的編碼【方法更主流】
  1. 特點:編碼的數據針對每一幀圖像包含的像素值,即采樣像素的波形
  2. 方法:利用像素之間在時間和空間上的相關性,采用預測編碼和變換編碼結合的基于塊的混合編碼方法
  3. 代表:MPEG-1,MPEG-2,H.264,H.265等
  • 基于內容的編碼【太復雜】
  1. 特點:將視頻幀分成對應不同物體的區域,分別對其編碼
  2. 方法:針對不同物體的形狀、運動和紋理進行編碼
  3. 代表:MPEG-4

視頻壓縮編碼的基本技術

  • 預測編碼:傳輸預測像素值與實際像素值之差,利用時間或空間相鄰像素之間較強的相關性
  1. 幀內預測:預測值與實際值位于同一幀內,用于消除圖像的空間冗余
  2. 幀間預測:實際值位于當前幀,預測值位于參考幀,用于消除圖像的時間冗余,相比幀內預測壓縮率更高,由于幀間預測參考了其他幀的數據,因此,不能獨立解碼,所以只能在獲取參考幀數據之后,才能重建當前幀
  • 變換編碼:對視頻造成有限的可以容忍的損失來獲取相對更高的編碼效率,造成信息損失的部分,就在其變換量化的部分,在進行量化之前,先將像素由空間域變換到頻域,針對變換系數進行編碼
  1. 可用于視頻變換編碼的正交變換:DCT變換、K-L變換
  • 熵編碼:熵編碼用于消除視頻信息中的冗余,由于信源中每一個符號出現的概率并不一致,導致使用同一長度的編碼表示符號可能會造成浪費,通過熵編碼,利用信源的統計特性進行壓縮編碼,可消除由于符號概率導致的冗余
  1. 常用方法:變長編碼、算數編碼

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

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

相關文章

英語口語 week13 Monday

英語文章 Competitions between businesses can be very aggressive in contemporary society. However, the competition for talented personnel is thought to be the key to business competition. Wise employers consider their employees as the company’s core asset…

文件系統的由來

啟蒙篇 文件的由來 磁盤上保存的是一對十六進制的數據,如何切分數據形成不同的文件,也就是如何確定一個文件的起始和終止位置?將相關數據打包在一起形成一個文件,比如從什么位置開始到什么位置結束,是一張圖片、一段…

c++面向對象高級編程 學習七 轉換函數

轉換函數:對象A和對象B之間的互相轉換。 class Fraction { public:Fraction(int num,int den1):m_numerator(num),m_denominator(den){}operator double()const{return (double)(m_numerator/m_denominator);} private:int m_numerator; //分子int m_denominator;/…

英語口語 week13 Wednesday

英語文章 Despite his extraordinary success in writing fairy tales,Hans Christian Andersen preferred to living in a way of simplicity and frugality. He often wore an old hat when he went out. One day, a well-dressed man stopped Andersen on the street, inte…

數據結構 隊列

隊列 代碼 #include <stdio.h> #include <stdlib.h>/************************************************************************/ /* 隊列結構要素&#xff1a;隊列容量 內存指針 元素個數 隊列頭 對列尾*/ /********************************************…

c++面向對象高級編程 學習八 non-explicit-one-argement-ctor

explicit&#xff08;顯式的&#xff09;&#xff1a;作用是"禁止單參數構造函數"被用于自動類型轉換 non-explicit: class Fraction { public:Fraction(int num,int den1):m_numerator(num),m_denominator(den){}Fraction operator (const Fraction& f){retur…

操作系統 IO管理

學什么&#xff1f; I/O input / output 輸入&#xff1a;鼠標 鍵盤 手柄 觸摸屏 攝像頭 MTC 掃描儀輸出&#xff1a;顯示器 打印機 耳機 音響 既是輸入也是輸出&#xff1a;光驅 網卡 磁盤 U盤硬件&#xff1a;設備如何把數據返回到PC機&#xff0c;但是不同種類的設…

英語口語小組PPT--袁隆平

文章中文版 大家好,我是第一組的xxx,現在由我來為大家分享在我眼中的袁隆平.在我看來,他值得外界對他的稱贊,因為他對中國,對世界的貢獻是有目共睹的:他研發的雜交水稻解決了人民的溫飽問題,讓無數人享受到吃飽的幸福&#xff0c;看到了生活的希望.這足以讓他青史留名. 并且他…

c++面向對象高級編程 學習九 pointer-like classes

c的class設計出來有兩種形式&#xff0c;一種像指針&#xff0c;一種像函數 智能指針里包含普通指針&#xff0c;要寫 * 和 -> 的函數 sp->method(); //sp-> 經 T* operator*() const 函數&#xff0c;得到px //由于 箭頭符號&#xff08;->&#xff09;作用下去…

const int *a和int*const a 的區別詳解

補充知識 “const int i”與“int const i”之間的區別對變量來說&#xff0c;const 關鍵字可以限定一個變量的值不允許改變&#xff0c;從而保護被修飾的東西&#xff0c;防止意外修改&#xff0c;在一定程度上可以提高程序的安全性和可靠性。 代碼 const int * int i1 10…

codeforces 133A-C語言解題報告

133A題目網址 題目解析 1.輸入字符串,如果里面包含H,Q,9,就輸出YES,否則輸出NO 代碼 #include<stdio.h> #include<stdlib.h> #include<string.h>int main() {char c[100]{0};int flag0;int i;scanf("%s",c);for(i0;i<strlen(c);i){if(c[i]H…

c++面向對象高級編程 學習十 function-like classes

本節是設計一個class&#xff0c;使它的行為像一個函數。 如果一個東西能接受小括號()操作符&#xff0c;那么這個東西就稱之為函數&#xff0c;或像函數的東西。 下圖為三個函數對()的重載&#xff0c;這三個類均為像函數的類&#xff0c;它們可接受()操作符&#xff0c; 標…

數據結構 棧

代碼 #include <stdio.h> #include <stdlib.h>/************************************************************************/ /*棧應用示例--數制轉換要求&#xff1a;輸入任意的正整數N(十進制)&#xff0c;分別輸出該整數的二進制、八進制、十六進制的結果算法…

英語口語 Week14 Monday

英語文章 Thailand, a country in Southeast Asia with an area of about 514,000 square kilometers, has been increasingly prosperous in its tourism industry in the past few decades. Its capital is Bangkok and its major languages are Thai, Chinese and English.…

c++面向對象高級編程 學習十一 類模板、函數模板、成員模板

namespace經驗談&#xff1a; 團隊中函數或類的名字可能會沖突&#xff0c;因此使用namespace進行區分。 類模板&#xff1a; template<typename T> 函數模板&#xff1a; template<class T>&#xff0c;此處class可改成typename 函數模板在使用的時候&#xff0…

操作系統面試 總結

以下文章來源于程序員cxuan &#xff0c;作者cxuan 原文鏈接什么是操作系統 操作系統是管理硬件和軟件的一種應用程序。操作系統是運行在計算機上最重要的一種軟件&#xff0c;它管理計算機的資源和進程以及所有的硬件和軟件。它為計算機硬件和軟件提供了一種中間層&#xff…

英語口語week 14 Thursday

英語文章 A couple decided to go out to celebrate their wedding anniversary, so they called a babysitter. When the babysitter arrived, the two children had already been asleep. The babysitter soon got bored and went to the kitchen where she blended some wh…

c++面向對象高級編程 學習十二 模板

模板特化&#xff1a; 模板是一種泛化的形式&#xff0c;特化是將參數類型進行指定&#xff0c;寫出特化的版本&#xff0c;當在調用下圖cout<<hash()(1000);的時候&#xff0c;由于特化中有struct hash{ }的版本&#xff0c;因此會直接調用特化部分。 模板偏特化&…

英語口語 week14 Friday

英語文章 Shopping is taking place every second. However, the prices of the same goods may differ from store to store. A name-brand dress may cost several hundred pounds at a boutique, but only half the price in a discount store or a big chain store. Moreo…

c++面向對象高級編程 學習十三 數量不定的模板參數,auto,for

文章目錄數量不定的模板參數autoranged-base for數量不定的模板參數 void print() {} //... 表示參數的數量不定 template<typename T, typename...Types> void print(const T&firstArg, const Types&...args) {cout << firstArg << endl;cout<&…