【H.264/AVC視頻編解碼技術詳解】十四、H.264的變換編碼(一)——矩陣運算與正交變換基本概念

《H.264/AVC視頻編解碼技術詳解》視頻教程已經在“CSDN學院”上線,視頻中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看!

“紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文檔以代碼的形式操作一遍,才能對視頻壓縮編碼標準的思想和方法有足夠深刻的理解和體會!

鏈接地址:H.264/AVC視頻編解碼技術詳解

GitHub代碼地址:點擊這裏


1. 矩陣的定義

矩陣,英文稱爲”Matrix”,是數學中一個非常重要的概念。從形式上看,矩陣可以用一個m行n列的數組成的表格表示。如下圖可表示一個4行4列的方形矩陣:

在實際應用中,矩陣可以在多個技術領域發揮重要作用,如音視頻壓縮編碼、機器學習、人工智能等領域。

2. 矩陣的運算

矩陣必須在計算中才能與其他數據進行交互。在《線性代數》中我們已經清楚地知道,矩陣可以進行求和、數乘和與矩陣相乘等運算。其中矩陣的求和與數乘運算十分簡單:

  • 矩陣求和:同型矩陣可以求和,即將對應元素求和組成新的矩陣;
  • 矩陣數乘:任何矩陣都可與實數相乘,即將每個元素與該數字相乘組成新的矩陣;

而相比之下,矩陣與矩陣相乘會略顯複雜,需要滿足必要條件,即矩陣1的寬必須等於矩陣2的高方可相乘。乘積矩陣的高和寬分別爲矩陣1的高和矩陣2的寬,如下圖表示:
這裏寫圖片描述

其中,乘積矩陣的元素的計算方法爲:
這裏寫圖片描述

通常,我們將只有一行或一列的矩陣稱之爲向量。根據排列的不同,按行或列排列的向量分別稱之爲行向量和列向量。

3. 向量和矩陣的線性變換

向量的線性變換定義爲:向量y的每一個元素都是向量x中元素的線性組合,則y是x的線性變換。假設有向量[x1, x2, x3]和向量[y1, y2, y3],兩個向量滿足以下關係:

  • y1 = a11 * x1 + a12 * x2 + a13 * x3
  • y2 = a21 * x1 + a22 * x2 + a23 * x3
  • y3 = a31 * x1 + a32 * x2 + a33 * x3

那麼我們稱向量[y1, y2, y3]可以被向量[x1, x2, x3]線性表示,以公式形式則表示爲y=A·x。其含義可表示爲矩陣與向量相乘:

這裏寫圖片描述

矩陣A即爲該線性變換的矩陣。

將向量的變換推廣,矩陣可以視爲由向量構成,因此線性線性變換同樣適用於矩陣的變換:

這裏寫圖片描述

4. 向量的正交性、正交矩陣和正交變換

要了解向量的正交性,首先應瞭解向量的內積的概念。在“不嚴格”的條件下,我們暫且可以將向量的內積理解爲數量積,即兩個相同長度向量對應元素乘積的總和。用公式表示爲:

這裏寫圖片描述

而向量的正交,等價於兩個向量的內積爲0。即:

這裏寫圖片描述

在二維和三維空間內直觀地表示,兩個正交向量相互垂直:
這裏寫圖片描述

由於矩陣可視爲由多個列向量構成,那麼多個兩兩正交的向量可以構成正交矩陣。一個矩陣是正交矩陣需要滿足的條件有:

  • 行數和列數相等,即正交矩陣都爲方陣;
  • 每一個列向量均爲單位向量,即長度均爲1;
  • 各列向量兩兩正交;

前面提到,每一個矩陣都可以與一個線性變換對應。那麼如果一個線性變換對應的變換矩陣是正交矩陣,那麼該變換就是一個正交變換。正交變換的顯著特點之一是,向量經過正交變換後長度不會發生變化。


5. 離散餘弦變換

離散餘弦變換 (Discrete Cosine Transform, DCT)類似於一種實數類型的離散傅里葉變換(DFT),其定義有多種形式(可參考維基百科:離散餘弦變換)。常用場合中使用的離散餘弦變換是一個正交變換,其正變換和逆變換的計算方法如:

這裏寫圖片描述

這裏寫圖片描述

由於DCT具有類似於DFT的特性,DCT也可以實現如信息能量集中的功能。對於圖像數據,DCT可以有效將大部分的能量集中與直流和低頻部分,這也成爲視頻壓縮中變換編碼的理論基礎之一。實際上,DCT長期應用與多種圖像和視頻的壓縮編碼標準中:

  • 視頻:MPEG-1/MPEG-2;
  • 圖像:JPEG

在H.264及更新的視頻壓縮標準中,採用的是DCT的優化改進版——整數變換。相對於浮點類型的離散餘弦變換,整數變換有效降低了變換操作的運算複雜度,提升了編解碼器的運行效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章