- 計算機視覺
- 劉紹輝
- 3742字
- 2021-01-22 18:56:26
2.3 GIF圖像格式和JPEG壓縮
在Windows平臺上,位圖是使用最廣泛的圖像格式。其他各種文件格式,如GIF、JPEG、TIFF和PNG等,在顯示時都轉(zhuǎn)換為BMP后再進行顯示。對于視頻也遵循這種流程,視頻每幀圖像解碼后稱為YUV亮度/色度分量形式,然后轉(zhuǎn)換為BMP格式的數(shù)據(jù)進行顯示。
對于計算機視覺來說,不管是壓縮的還是沒有壓縮的圖像和視頻,面對的處理對象都會在BMP域中進行處理。其中有一種例外,就是在壓縮域進行行為、動作的識別時利用壓縮碼流中保留的壓縮格式語法元素來進行分類、跟蹤和識別,語法元素包括運動適量、量化系數(shù)和運動模式等信息,但其精度不如空域處理,其速度由于不需要解壓縮而比空域處理的速度快,這里不再詳細論述。
除BMP這種常用的圖像格式外,目前較有特色的其他格式包括GIF和JPEG兩種,分別在網(wǎng)頁和日常生活中廣泛使用。后面簡單介紹相關(guān)內(nèi)容。
此外,2015年6月JPEG委員會發(fā)起了一個新的標準活動JPEG PLENO,其目標是試圖定義一個標準框架,它可以表示和交換如光場、點云和全息成像等更新的成像模式下的圖像。其另一個目標就是定義更新的工具來提高壓縮效率,同時提供一些用于圖像操作、元數(shù)據(jù)、圖像存取和交互及隱私與安全等高級功能。
2.3.1 GIF圖像
GIF(Graphics Interchange Format)圖像的擴展名采用“.gif”,由CompuServe公司開發(fā),用于屏顯和網(wǎng)絡(luò)。它包括87a和89a兩種格式,其中87a描述單一(靜止)圖像,89a描述多幀圖像,通常在GIF動畫中使用。它最具特色的特點為其色彩模式,支持28(256色)種顏色。因此,在處理GIF圖像時,顏色的數(shù)目往往都是256種,有時在計算機視覺處理中,若沒有注意則會造成意外結(jié)果。而將其他圖像保存為GIF圖像時,需要對顏色進行量化處理,近些年提出了很多相關(guān)的顏色量化算法,比較典型而直觀的量化算法就是聚類的算法,通過將類別數(shù)目定義為256即可采用通用的聚類算法進行計算。
2.3.2 JPEG圖像
JPEG圖像格式由JPEG標準化委員會制定,至今仍是最廣泛應(yīng)用的圖像壓縮標準之一。其采用預(yù)測、變換、量化和熵編碼的基本思想來進行圖像像素數(shù)據(jù)的壓縮。JPEG壓縮流程如圖2.5所示。

圖2.5 JPEG壓縮流程
根據(jù)人類視覺的特性和信息論的觀點,其中將RGB圖像轉(zhuǎn)換為YCbCr圖像利用了人類視覺對亮度信息敏感,而針對色度信息不敏感的特點,可以進一步對色度分量進行下采樣以降低數(shù)據(jù)量。DCT變換和量化則利用信息論中信源編碼理論,即當離散信源符號相互獨立且均勻分布時,根據(jù)信源熵最大原理對信源進行改造使得信源能盡量滿足該原理。DCT變換和量化盡量去除信源內(nèi)部符號之間的相關(guān)性,熵編碼則使得信源符號的分布盡可能均勻,從而最終達到信息論中要求的離散信源熵最大的條件。實際上,無論如何改造信源,都達不到理想狀態(tài)。因此,圖像壓縮領(lǐng)域一直致力于如何更加有效地改造信源來達到更高的壓縮效率。
下面我們看一下JPEG壓縮的具體流程。首先若原始圖像是RGB圖像,則轉(zhuǎn)換為YCbCr圖像,對YCbCr兩個色度分量進行下采樣,然后進行8×8的塊劃分,如圖2.6所示。

圖2.6 對圖像進行JPEG編碼的分塊處理
然后按照從上到下、從左到右的順序分別對每個塊做處理,如圖2.7所示,將從圖中取出的8×8塊表示成f(x,y)的矩陣形式。

圖2.7 JPEG壓縮中的8×8塊
然后對f(x,y)(也就是上面的8×8的塊)進行離散余弦變換(DCT),則有

相應(yīng)地,有離散余弦反變換(IDCT)為

其中,F(u,v)表示f(x,y)的二維離散余弦變換系數(shù),實際上也是一個8×8的矩陣,E(u)可以表示為

進一步,若用矩陣表示,則二維DCT變換可以表示為。其中DCT矩陣元素可以統(tǒng)一表示為:當i=0時,
;當i∈(0,N?1]時,
,N表示變換的大小。當N=8時,其DCT矩陣為

關(guān)于矩陣表示的方式大家可以從上面DCT變換的公式去推導(dǎo),或者從傅里葉變換的矩陣表達式去推導(dǎo)。需要注意,為了從傅里葉變換中包含正弦項與余弦項到余弦變換中只包含余弦項,需要將數(shù)據(jù)處理成對稱的形式,而如何將數(shù)據(jù)處理成對稱的形式,有很多種方法,不同的方法對應(yīng)不同類型的DCT變換。
再回到8×8 DCT變換的矩陣表達式。容易驗證,這時上述定義的DCTmatrix為正交矩陣,因此
。若變換的輸入除單個位置為1外,其余全部為0,則正好體現(xiàn)DCT變換基矩陣的屬性。8×8 DCT變換的64個基矩陣如圖2.8所示。

圖2.8 8×8DCT變換的64個基矩陣
根據(jù)圖2.8,可以更好地了解DCT變換的特性。
(1)8×8 DCT變換實際上相當于將輸入的塊在上述的64個基圖像上展開所得的系數(shù),這就是我們所說的DCT變換的系數(shù)。
(2)從上述基函數(shù)明顯可以看出,左上角的基圖像為平坦區(qū)域,意味著表示原始圖像的平滑分量,稱為直流系數(shù),其余的DCT系數(shù)稱為交流系數(shù)。
(3)從上述基函數(shù)可以看出,越往右下角移動,基函數(shù)的變化越快。實際上最右下角的基函數(shù)的每個像素點與周圍的像素點差別都比較大,因此體現(xiàn)了最快速的變化。從頻譜(即對應(yīng)高頻部分)的角度來考慮,常常將DCT變換的系數(shù)分為直流部分、低頻部分、中頻部分和高頻部分,分別對應(yīng)DCT變換系數(shù)的最左上角部分、左上角部分、斜對角部分和右下角部分。
(4)從該基圖像也可以看出,右上角部分的豎直方向變化緩慢,左下角部分的水平方向變化緩慢,而右下角部分的水平和豎直方向變化都很快,因此DCT變換實際上也在一定程度上對輸入圖像進行了頻譜分析,而根據(jù)第1章中的介紹,人眼對不同空間頻率變化的敏感程度是不一樣的,尤其對高頻不敏感,因此高頻分量可以多去除一些,這種性質(zhì)在圖像壓縮中也獲得了實際應(yīng)用。
(5)通常說DCT變換具有能量聚集特性,即通過DCT變換后,其能量主要集中在左上角部分的DCT系數(shù)上。這從上述的基圖像中可以得到較好的解釋,因為左上角的基圖像局部變化比較緩慢,所以與自然圖像中局部平滑的特性相對應(yīng)。可見,具有局部平滑特性的圖像在DCT變換后,其低頻部分的系數(shù)占絕大多數(shù)。由此可知,若原始圖像是隨機圖像,則其DCT變換不會具有很好的能量聚集特性。
(6)DCT變換作為從傅里葉變換推導(dǎo)出來的變換,可以利用快速傅里葉變換(FFT)來進行快速計算。
(7)DCT變換為浮點數(shù)運算,會造成精度的損失,因此在一些新的圖像視頻編碼標準中,采用整數(shù)DCT變換,這樣避免了精度的損失,如H.264、H.265等視頻編碼標準。
下面我們以一個具體的例子來說明JPEG中的DCT變換流程。假設(shè)有一個8×8塊中的像素值如圖2.9所示。

圖2.9 一個8×8圖像塊中的像素值
則對其進行二維DCT變換后,得到圖2.10。

圖2.10 對應(yīng)圖2.9中的圖像塊進行二維DCT變換后的DCT系數(shù)示意圖
從圖2.10中明顯可以看出,DCT變換具有能量聚集特性,只有左上角的3×3的系數(shù)值比較大,剩余部分的系數(shù)均接近于0。
在JPEG壓縮中,需要對上述DCT變換系數(shù)進一步去相關(guān)。由此采用標準的亮度和色度量化表來分別對亮度和色度DCT變換系數(shù)進行量化處理。JPEG標準推薦的默認亮度(左圖)和色度量化表(右圖)如圖2.11所示。
顯然,從量化表的設(shè)計可以看出,右下角的量化因子特別大,從而對應(yīng)的DCT變換后的系數(shù)經(jīng)量化后,高頻部分對應(yīng)的索引值會很小;而左上角的量化因子比較小,則對應(yīng)量化后的索引值比較大。

圖2.11 JPEG標準中默認的亮度塊和色度塊對應(yīng)的量化表
注意,若這兩個量化表對應(yīng)JPEG壓縮因子為50,則采用默認量化表;若JPEG壓縮因子不是50,則需要采用以下公式進行量化表的計算。

JPEG主要采用調(diào)整量化因子的方法來調(diào)整圖像的質(zhì)量,其中QualityFactor為量化因子,注意量化表QuanTable總是為8×8的矩陣,其元素值若小于1,則統(tǒng)一用1表示,即量化表中的任意一個元素的最小值為1。若采用量化因子為50的標準亮度量化表對上述的8×8塊進行量化,則量化后的結(jié)果如圖2.12所示。

圖2.12 采用量化因子為50的亮度量化表對圖2.10中對應(yīng)DCT系數(shù)進行量化后的結(jié)果
然后通過如圖2.13所示的Zig-Zag掃描成79、0、-2、-1、-2、-1、0、0、-1、0…這樣的符號串。這時去除信源符號間的相關(guān)性至此結(jié)束,后面為無損熵編碼。

圖2.13 JPEG壓縮中對量化后系數(shù)的“之”字形(Zig-Zag)掃描順序
最后,再對符號串按DC和AC系數(shù)分別編成游程對,接著采用Huffman碼表對其進行編碼,形成最后的JPEG碼流。
在解碼時,首先進行熵解碼,解碼出上述的符號,然后逆Zig-Zag掃描成8×8量化索引符號,再進行逆量化。這里反量化后的結(jié)果如圖2.14所示。

圖2.14 對解碼出的8×8塊量化系數(shù)進行逆量化后的結(jié)果(注意與圖2.10中的數(shù)據(jù)進行對比)
然后對其進行逆二維DCT變換,再取整,結(jié)果如圖2.15所示。

圖2.15 對圖2.14中的數(shù)據(jù)進行逆二維DCT變換并取整后的結(jié)果
為了方便與原始輸入塊進行對比,我們將重構(gòu)值減去原始輸入值,結(jié)果如圖2.16所示。可以看出,最大差別為5。根據(jù)圖像處理的基礎(chǔ)知識,這個差別一般不會顯著影響壓縮圖像的質(zhì)量。但是,若圖像塊的高頻細節(jié)成分較多,則這時的圖像質(zhì)量損失會較大。根據(jù)JPEG壓縮的流程和特性,可以采用稀疏表示、深度學習等最新的理論和算法來提高過渡壓縮的JPEG圖像質(zhì)量。基于深度學習的圖像復(fù)原技術(shù)可以對JPEG進行質(zhì)量增強,其最高增益可約達2dB。

圖2.16 JPEG壓縮后再解壓縮與原始圖像進行差值計算后的結(jié)果
從壓縮與解壓縮的過程中可以看出,壓縮后的碼流實際上包含量化表和熵編碼表的信息。量化表若不是自己設(shè)計的,則可以根據(jù)量化因子生成;否則需要提供量化表才能正常解碼。
此外,經(jīng)過JPEG壓縮后的圖像會留下很強的DCT變換量化的痕跡,因此凡是經(jīng)過JPEG壓縮的圖像,無論是否保存為其他的圖像文件格式,其JPEG壓縮過程均有辦法恢復(fù),這稱為JPEG的壓縮歷史估計。壓縮歷史估計在法庭取證(Forensic)中是一種常見的技術(shù)。
在計算機視覺中,目前獲取的底層圖像絕大部分都是JPEG圖像,因此需要對相關(guān)圖像知識有較好的理解和掌握,尤其是DCT變換,常用于視覺任務(wù)中的各種特征提取。關(guān)于JPEG的更詳細的介紹(如熵編碼算法),請參考JPEG壓縮標準。
- 數(shù)據(jù)存儲架構(gòu)與技術(shù)
- 數(shù)據(jù)產(chǎn)品經(jīng)理高效學習手冊:產(chǎn)品設(shè)計、技術(shù)常識與機器學習
- 輕松學大數(shù)據(jù)挖掘:算法、場景與數(shù)據(jù)產(chǎn)品
- 圖解機器學習算法
- 基于Apache CXF構(gòu)建SOA應(yīng)用
- Starling Game Development Essentials
- 從0到1:JavaScript 快速上手
- SQL應(yīng)用及誤區(qū)分析
- Splunk智能運維實戰(zhàn)
- 區(qū)塊鏈技術(shù)應(yīng)用與實踐案例
- 大數(shù)據(jù)數(shù)學基礎(chǔ)(R語言描述)
- 云計算寶典:技術(shù)與實踐
- Hands-On System Programming with C++
- 智能與數(shù)據(jù)重構(gòu)世界
- 基于數(shù)據(jù)發(fā)布的隱私保護模型研究