DCT離散余弦變換

原文網(wǎng)址:http://blog.csdn.net/newchenxf/article/details/51719597

2.1 以8x8的圖象塊為基本單位進行編碼

如下圖所示。比如一個160x160大小的原始圖像,就可以分成20x20個8x8圖像塊。


這里寫圖片描述

每個圖像塊共64個像素。像素可以用RGB或YUV表示,需要3個byte。所以嚴格來說,上圖3個箭頭代表的數(shù)據(jù),指的是RGB/YUV的某一個值,比如Y。

2.2 將RGB轉(zhuǎn)換為亮度-色調(diào)-飽和度系統(tǒng)(YUV),并重新采樣

YUV是什么?它也是一種很不錯的圖像數(shù)據(jù)表示方法,特別是在視頻領(lǐng)域。
Y:指顏色的明視度、亮度、灰度值;
U:指色調(diào);
V:指飽和度。

YUV是一個統(tǒng)稱,其實有很多具體格式,比如YUV420, YUV444, YUV422。
YUV的某些格式,和RGB比起來,其數(shù)據(jù)量要少很多。
比如YUV420,每個像素需要一個Y,每4個像素需要一個U/V,因此一個8*8圖像塊,數(shù)據(jù)量只要8x8x3/2 = 96byte。而RGB需要8x8x3 = 192byte。少了一半的數(shù)據(jù)量?,F(xiàn)在很多視頻都是YUV420作為色域。
當(dāng)然啦,在本次轉(zhuǎn)換,用的是YUV444, 也就是每個像素都有YUV的值。

YUV與RGB可以互相轉(zhuǎn)換。
Y=0.299R+0.587G+0.114B
U=0.148R-0.289G+0.473B
V=0.615R-0.515G-0.1B

2.3 FDCT與IDCT

一個是正變換,一個是逆變換。反正都可以稱為離散余弦變換。
根據(jù)8*8的二維DCT定義


這里寫圖片描述

其中:0<= u, v < 8


這里寫圖片描述

a(v) = a(u)


這里寫圖片描述

是輸入8x8像素的坐標(biāo)。


這里寫圖片描述

是輸出的8x8變換結(jié)果的坐標(biāo)。

不要把上式看的有多難,也不要被“離散余弦變換”這個詞給嚇到,其實他沒什么(如果你非要去追究,那就打開“信號與系統(tǒng)”的書復(fù)習(xí)一下吧,我攔不住你哈),上式其實就是一個運算公式而已。
輸入就是8x8的數(shù)據(jù)矩陣,經(jīng)過計算,輸出還是一個8x8的數(shù)據(jù)矩陣。
其實上式可以簡化為:


這里寫圖片描述

并且A和A轉(zhuǎn)置矩陣都是已知的。所以,說白了,就是個矩陣運算。對程序來說,很簡單。

稱G(0,0),也就是輸出8x8矩陣的(0,0)坐標(biāo)的值,為直流系數(shù),其他為交流系數(shù)。
之所以稱它為直流系數(shù),是因為當(dāng)u, v = 0時,cos()結(jié)果都為0,所以最后結(jié)果就是輸入矩陣的8x8的每個數(shù)值的和,再乘于a(u) x a(v) x 1/4 = 1/8。

當(dāng)然了,輸入數(shù)據(jù)其實是有3個的,也就是YUV,因此對每個8x8的原始圖像數(shù)據(jù),需要做3次DCT。

2.4 量化與反量化

定義:將DCT變換后的臨時結(jié)果,除以各自量化步長并四舍五入后取整,得到量化系數(shù)。
為什么可以量化?!
因為經(jīng)過DCT后,數(shù)據(jù)就不同了,左上方都是大數(shù)值,右下方都是小數(shù)值。比如左上方都是幾十幾百的,右下方附近,都是個位數(shù),那么,大數(shù)值和小數(shù)值就可以分別量化。

在術(shù)語里,左上方稱為低頻數(shù)據(jù),右下方稱為高頻數(shù)據(jù)。
你要是不理解,可以這么想,既然G(0,0)都是直流分量了,那頻率不就是0?不就是所謂的低頻?^^

還是不理解?好吧,那你也可以這么想:
比如cos(ax),a是常數(shù),x是變量。那么,根據(jù)頻率f = a/2π,a越大,函數(shù)的頻率越高。
看看DCT公式:


這里寫圖片描述

u,v 越大,則越在右下方對吧。當(dāng)計算某個G(u, v)時,x, y是變量,u, v相當(dāng)于常數(shù),當(dāng)u/v越大,則頻率越高!
這就是為啥右下方稱為高頻數(shù)據(jù)了!

好了,別走偏了,還繼續(xù)說量化。
JPEG系統(tǒng)分別規(guī)定了亮度分量和色度分量的量化表,色度分量相應(yīng)的量化步長比亮度分量大。

對量化系數(shù)的處理和組織
思想:JPEG采用定長和變長相結(jié)合的編碼方法。
直流系數(shù):通常相鄰8*8圖象塊的DC分量很接近,因此JPEG對量化后的直流分量采用無失真DPCM編碼。通常JPEG要保存所需比特數(shù)和實際差值。

交流系數(shù):經(jīng)過量化后,AC分量出現(xiàn)較多的0。JPEG采用對0系數(shù)的行程長度編碼。而對非0值,則要保存所需數(shù)和實際值。
ZIG-ZAG排序:為使連續(xù)的0個數(shù)增多,采用Z形編碼。

這里寫圖片描述

你要是不理解,看看下面的例子,就知道為啥ZIG-ZAG可以俘獲更多的0了!

3 應(yīng)用舉例

3.1 編碼

某個圖象的一個8*8方塊,的亮度值。


這里寫圖片描述

由于一個字節(jié)是0255,為了減小絕對值波動,先把數(shù)值移位一下,變成-128127。

這里寫圖片描述

接著,根據(jù)DCT變換公式,各種計算,獲得臨時結(jié)果。


這里寫圖片描述

根據(jù)亮度量化表量化后得到的量化系數(shù)矩陣


這里寫圖片描述

獲得量化結(jié)果:


這里寫圖片描述

可見,新的數(shù)據(jù),很小,很多是0。正如上文所說,這么多0,完全可以用游程編碼,大大縮小數(shù)據(jù)量。

3.2 解碼

先游程編碼恢復(fù)為


這里寫圖片描述

然后,根據(jù)量化表,恢復(fù)


這里寫圖片描述

再根據(jù)反離散余弦變換的公式:


這里寫圖片描述

結(jié)果為:


這里寫圖片描述

再右移127,恢復(fù)原始。


這里寫圖片描述

和原始圖像的數(shù)據(jù)相比,基本是一樣的,或者近似的!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 由于H.264等壓縮算法都是在YUV的顏色空間上進行的,所有在進行壓縮前,首先要進行顏色空間的轉(zhuǎn)換。如果攝像頭采集...
    眷卿三世閱讀 13,793評論 2 6
  • 姓名:李偉 學(xué)號:17101223393 【嵌牛導(dǎo)讀】:大家對JPEG了解嗎?今天和大家分享一下。 【嵌牛鼻子...
    LW_e565閱讀 3,053評論 0 1
  • 版本記錄 前言 只要是做圖片的或者與圖片相關(guān)的,那么圖片的格式就是一個不可以繞過的問題,我們見過很多的圖片格式,但...
    刀客傳奇閱讀 15,704評論 0 5
  • 屋內(nèi),室友F又和她相處7年的男朋友吵架了,這是他們這個月繼上次冷戰(zhàn)之后又一次比較嚴重的吵架。 F說:“這回真的過不...
    六月份的青豆豆閱讀 526評論 1 1
  • 目錄 上一篇 江辰問苗德壽移民調(diào)查處有什么依據(jù),因為苗德壽這樣的客戶江辰見多了,總是盡挑對自己有利的說,什么事情都...
    劉白月閱讀 272評論 0 1

友情鏈接更多精彩內(nèi)容