JPEG編碼過程詳解_第1頁
JPEG編碼過程詳解_第2頁
JPEG編碼過程詳解_第3頁
JPEG編碼過程詳解_第4頁
JPEG編碼過程詳解_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、JPEG (Joint Photographic Experts Group)是聯(lián)合圖像專家小組的英文縮 寫。它由國際電話與電報(bào)咨詢委員會CCITT The International Telegraph and Telephone Consultative Committee)與 IS拆標(biāo)準(zhǔn)化組織 ISO 于 1986 年聯(lián)合咸立的一個(gè)小繪負(fù)貴弒定靜態(tài)數(shù)字圖嫁的編碼標(biāo)準(zhǔn)。小組一直致力于標(biāo)準(zhǔn)化工作,開發(fā)研制出連續(xù)色調(diào)、多級灰度、靜止圖像的 數(shù)字圖像壓縮編碼方法,即JPEG算法。JPEG算法被確定為國際翅用標(biāo)準(zhǔn),其適用范圖廣泛,玲用于存態(tài)圖像編珂外,還推廣到電視圖像芹列的慎內(nèi)圖像匡縮.而用JPE

2、G算法匡韁出來的轉(zhuǎn)態(tài)圖片文件稱為JPEG文件.擴(kuò)展名通常為*. jpg. . jpe*. jpeg,JPEG專家組開發(fā)了兩種基本的壓縮算法、兩種數(shù)據(jù)編碼方法、四種編碼模式。 具體如下:壓縮算法:有損的離散余弦變換(Discrete Cosine Transform, DCT);無損的預(yù)測技術(shù)壓縮。數(shù)據(jù)編碼方法:哈夫曼編碼;算術(shù)編碼;編碼模式:基于DCT順序模式:編/解碼通過一次掃描完成;基于DCT遞進(jìn)模式:編/解碼需要多次掃描完成,掃描效果從粗糙到精細(xì), 逐級遞進(jìn);無損模式:基于DPCM,保證解碼后完全精確恢復(fù)到原圖像采樣值;層次模式:圖像在多個(gè)空間多種分辨率進(jìn)行編碼,可以根據(jù)需要只對低 分辨

3、率數(shù)據(jù)作解碼,放棄高分辨率信息。在實(shí)際應(yīng)用中,JPEG圖像使用的是離散余弦變換、哈夫曼編碼、順序模式。JPEG壓縮編碼算法的主要計(jì)算步驟如下:(0) 8*8 分塊。(1) 正向離散余弦變換(FDCT) o(2) 量化(quantization) (3) Z 字形編碼(zigzag scan) 0 使用差分脈沖編碼調(diào)制(DPCM)對直流系數(shù)(DC)進(jìn)行編碼。(5) 使用行程長度編碼(RLE)對交流系數(shù)(AC)進(jìn)行編碼。(6) 爛編碼。筆者在實(shí)踐過程中查閱了大量的資料,發(fā)現(xiàn)大多數(shù)書籍資料和網(wǎng)上資料都是 從編碼角度分析JPEG的編/解碼方式,井且都只是介紹編碼過程中的主要方法所以.本文從解碼角度讒細(xì)

4、分析JPEG的編/簞碼過稚.并且加入許多筆者實(shí)踐過程中遇到的問題和解決方法.希莖從另一個(gè)角度說明問題以更好毎助讀者結(jié)合其他資料解決問題。不過,介紹解碼過程之前,首先要了解JPEG文件中數(shù)據(jù)的存儲格式。一、JPEG文件格式介紹JPEG文件使用的數(shù)據(jù)存儲方式有多種。最常用的格式稱為JPEG文件交換格 式(JPEG File Interchange Format, JFIF).丙jpeg文件大體上可以分成兩個(gè)初分:標(biāo)記碼(T昭)和匡縮數(shù)據(jù)。標(biāo)記碼由兩個(gè)字節(jié)構(gòu)成,其前一個(gè)字節(jié)是固定值OxFF,后一個(gè)字節(jié)則根據(jù)不 同意義有不同數(shù)值。在每個(gè)標(biāo)記碼之前還可以滾加數(shù)目不限的無倉義的0MF填充.也就說連續(xù)的多個(gè)

5、OxFF可以被理解為一個(gè)OxFR井表示一個(gè)標(biāo)記碼的開始。而在一個(gè)完整的兩字節(jié)的標(biāo)記碼后.就是該標(biāo)記碼對應(yīng)的壓縮敦?fù)?jù)流,記錄了關(guān)于文件的諸種佑息。常用的標(biāo)記有 SOL APPO. DQT. SOTO. DHT. DRL SOS EOU注意,SOI等都是標(biāo)記的名稱。在文件中,標(biāo)記碼是以標(biāo)記代碼形式出現(xiàn)。 例如SOI的標(biāo)記代碼為0xFFD8.訊在JPEG文件中的如果出現(xiàn)OxHDS.則表示此處為一個(gè)SOI標(biāo)記。本文附錄列出一張完整的JPEG定義的標(biāo)記表,供讀者查閱.這里儀列出幾個(gè)常用標(biāo)記的掙記代碼.占用字節(jié)長度和表示的意義SOI, Start of Image,圖像開始標(biāo)記代碼2字節(jié)固定值0xFFD8

6、APPO, Application,應(yīng)用程序保留標(biāo)記0標(biāo)記代碼2字節(jié)固定值OxFFEO包含9個(gè)具體字段: 數(shù)據(jù)長度2字節(jié)仝個(gè)字段的總長度即不包括標(biāo)記代碼,但包括本字段 標(biāo)識符5字節(jié)固定值0x4A,即字符串“JFIFO” 版本號2字節(jié)一般是0x0102,表示JFIF的版本號可能會有其他數(shù)值代表其他版本 X和Y的密度單位1字節(jié)只有三個(gè)值可選0:無單位;1:點(diǎn)數(shù)/英寸;2:點(diǎn)數(shù)/厘米 X方向像素密度2字節(jié)取值范圍未知 Y方向像素密度2字節(jié)取值范圍未知 縮略圖水平像素?cái)?shù)目1字節(jié)取值范圍未知 縮略圖垂直像素?cái)?shù)目1字節(jié)取值范圍未知 縮略圖RGB位圖長度可能是3的倍數(shù)縮略圖RGB位圖數(shù)據(jù)本標(biāo)記段可以包含圖像

7、的一個(gè)微縮版本,存為24位的RGB像素。如果沒 有微縮圖像(這種情況更常見),則字段縮略圖水平嫁素救目”和字段縮略圖垂貞橡素?cái)?shù)目-的值均為SAPPn, Application,應(yīng)用程序保留標(biāo)記n,其中nl15(任選)標(biāo)記代碼2字節(jié) 固定值0xFFEl0xFFF包含2個(gè)具體字段: 數(shù)據(jù)長度、2字節(jié)&T2個(gè)字段的總長度即不包括標(biāo)記代碼,但包括本字段 詳細(xì)信息數(shù)據(jù)長度-2字節(jié)內(nèi)容不定例如,Adobe Photoshop生成的JPEG圖像中就用了 APP1和APP13兩個(gè) 標(biāo)記段分別存儲了一幅圖像的副本。DQT, Define Quantization Table,定義量化表)標(biāo)記代碼2字節(jié)固定值Ox

8、FFDB包含9個(gè)具體字段: 數(shù)據(jù)長度2字節(jié)字段和多個(gè)字段的總長度即不包括標(biāo)記代碼,但包括本字段 量化表數(shù)據(jù)長度-2字節(jié)a)精度及量化表ID 1字節(jié)高4位:精度,只有兩個(gè)可選值0: 8 位;1: 16 位低4位:量化表ID,取值范圍為03b)表項(xiàng)(64X(精度+1)字節(jié)例如8位精度的量化表其表項(xiàng)長度為64X (0+1)二64字節(jié)本標(biāo)記段中,字段可以重復(fù)出現(xiàn),表示多個(gè)量化表,但最多只能出現(xiàn)4 次。SOFO, Start of Frame,幀圖像開始標(biāo)記代碼2字節(jié)固定值OxFFCO包含9個(gè)具體字段: 數(shù)據(jù)長度、2字節(jié)&T六個(gè)字段的總長度即不包括標(biāo)記代碼,但包括本字段 精度1字節(jié)每個(gè)數(shù)據(jù)樣本的位數(shù)通常

9、是8位,一般軟件都不支持12位和16位 圖像髙度2字節(jié)圖像高度(單位:像素),如果不支持DNL就必須0 圖像寬度2字節(jié)圖像寬度(單位:像素),如果不支持DNL就必須0 顏色分量數(shù)1字節(jié)只有3個(gè)數(shù)值可選1:灰度圖;3: YCrCb 或 YIQ; 4: CMYK而JFIF中使用YCrCb,故這里顏色分量數(shù)恒為3 顏色分量信息顏色分量數(shù)X3字節(jié)(通常為9字節(jié))a)顏色分量ID 1字節(jié)b)水平/垂直采樣因子1字節(jié)髙4位:水平釆樣因子低4位:垂直采樣因子(曾經(jīng)看到某資料把這兩者調(diào)無了)C)量化表1字節(jié)當(dāng)前分量使用的量化表的ID本標(biāo)記段中,字段應(yīng)該重復(fù)出現(xiàn),有多少個(gè)顏色分量(字段),就出 現(xiàn)多少次(一般為

10、3次)。DHT, Difine Huffman Table,定義哈夫曼表標(biāo)記代碼2字節(jié)固定值0xFFC4包含2個(gè)具體字段: 數(shù)據(jù)長度2字節(jié)字段和多個(gè)字段的總長度即不包括標(biāo)記代碼,但包括本字段 哈夫曼表數(shù)據(jù)長度-2字節(jié)a)表ID和表類型1字節(jié)髙4位:類型,只有兩個(gè)值可選0: DC直流;1: AC交流低4位:哈夫曼表ID,注意,DC表和AC表分開編碼b)不同位數(shù)的碼字?jǐn)?shù)量16字節(jié)C)編碼內(nèi)容16個(gè)不同位數(shù)的碼字?jǐn)?shù)量之和(字節(jié))本標(biāo)記段中,字段可以重復(fù)出現(xiàn)(一般4次),也可以致出現(xiàn)1次。例 如,Adobe Photoshop 生成的JPEG圖片文件中只有I個(gè)DIIT標(biāo)記段,里邊包含了 4個(gè)哈夫曼表;

11、而Macromedia Eireworks生成的JPEG圖片文件則有4個(gè)DHT標(biāo)記段.毎個(gè)D1IT標(biāo)記段只有一個(gè)哈夫曼表。DRI, Define Restart Interval,定義差分編碼累計(jì)復(fù)位的間隔標(biāo)記代碼2字節(jié)固定值OxFFDD包含2個(gè)具體字段: 數(shù)據(jù)長度2字節(jié)固定值0x0004,兩個(gè)字段的總長度即不包括標(biāo)記代碼,但包括本字段 MCU塊的單元中的重新開始間隔2字節(jié)設(shè)其值為m則表示每n個(gè)MCU塊就有一個(gè)RSTn標(biāo)記。第一個(gè)標(biāo)記是RST0,第二個(gè)是RST1等,RST7后再從RST0重復(fù)。如果沒有本標(biāo)記段,或間隔值為0時(shí),就表示不存在重開始間隔和標(biāo)記RSTSOS, Start of Sca

12、n,掃描開始12字節(jié)標(biāo)記代碼2字節(jié)固定值OxFFDA包含2個(gè)具體字段: 數(shù)據(jù)長度2字節(jié)兩個(gè)字段的總長度即不包括標(biāo)記代碼,但包括本字段 顏色分量數(shù)1字節(jié)應(yīng)該和SOF中的字段的值相同,即:1:灰度圖是;3: YCrCb 或 YIQ; 4: CMYK。而JFIF中使用YCrCb,故這里顏色分量數(shù)恒為3 顏色分量信息a)顏色分量ID 1字節(jié)b)直流/交流系數(shù)表號1字節(jié)髙4位:直流分量使用的哈夫曼樹編號低4位:交流分量使用的哈夫曼樹編號 壓縮圖像數(shù)據(jù)a)譜選擇開始1字節(jié)固定值0x00b)譜選擇結(jié)束1字節(jié)固定值0x3Fc)譜選擇1字節(jié) 在基本JPEG中總為00本標(biāo)記段中,字段應(yīng)該重復(fù)出現(xiàn),有多少個(gè)顏色分量

13、(字段),就出 現(xiàn)多少次(一般為3次)。本段皓束后,緊機(jī)著就是真正的圖像佑息了。圖蠻信息直至遇到一個(gè)標(biāo)記代碼就自動結(jié)束,一般就是以EO1標(biāo)記表示蠟束。EOI, End of Image,圖像結(jié)束2字節(jié)標(biāo)記代碼2字節(jié)固定值0xFFD9這里補(bǔ)充說明一下,由于在JPEG文件中OxFF具有標(biāo)志性的意思,所以在 壓縮數(shù)據(jù)流(真正的圖像信息)中出現(xiàn)OxFF,就需要作符別處理,具體方法是,在數(shù)據(jù)OxFF后添加一個(gè)沒有站義的0x00,決句話說,如果在圖嫁數(shù)撼流中璉到OxIT,應(yīng)該檢測其緊檳著的字符,如果是1)0x00,則表示OxFF是圖像流的組成部分,需要進(jìn)行譯碼;2)0xD9,則與OxFF組成標(biāo)記E0I,則

14、圖像流結(jié)束,同時(shí)圖像文件結(jié)束;3)0xD00xD7,則組成RSTn標(biāo)記,則要忽視整個(gè)RSTn標(biāo)記,即不對當(dāng)前OxFF 和緊接的OxDn兩個(gè)字節(jié)進(jìn)行譯碼,并按RST標(biāo)記的規(guī)則調(diào)整譯碼變量;3)OxFF,則忽視當(dāng)前OxFF,對后一個(gè)OxFF再作判斷;4)其他數(shù)值,則忽視當(dāng)前OxFF,并保留緊接的此數(shù)值用于譯碼。二、JPEG解碼過程詳解下面來詳細(xì)講述JPEG文件的解碼過程。1. 讀入文件的相關(guān)信息按照上述的JPEG文件數(shù)據(jù)存儲方式,把要解碼的文件的相關(guān)信息一一讀出, 為接下來的解碼工作做好準(zhǔn)備。參考方法是,設(shè)計(jì)一系列的結(jié)構(gòu)體對應(yīng)各個(gè)標(biāo)記,并存儲標(biāo)記內(nèi)興示的倍息.其中圖橡長寬、多個(gè)量化來和哈夫曼來、水

15、平/垂宜采樣因子等多項(xiàng)佶息比較至要以下給岀讀瑕孩程中的兩個(gè)問趣。1)整個(gè)文件的大體結(jié)構(gòu)JFIF格式的JPEG文件(*. jpg)的一般順序?yàn)?SOI(0xFFD8)APPO(OxFFEO)APPn (OxFFEn)可選DQT(OxFFDB)SOFO(OxFFCO)DHT(0xFFC4)SOS(OxFFDA) 壓縮數(shù)據(jù)EOI(0xFFD9)2)字的髙低位問題JPEG文件格式中,一個(gè)字(16位)的存儲使用的是Motorola格式,而不是 Intel格式。也就是說,一個(gè)字的商字節(jié)(高8位在數(shù)據(jù)流的前面.低字節(jié)(低8(4)在數(shù)據(jù)說的后面,與平時(shí)習(xí)慣的Intel格式不一樣。.3)讀出哈夫曼表數(shù)據(jù)a)理論

16、說明在標(biāo)記段DHT內(nèi),包含了 一個(gè)或者多個(gè)的哈夫曼表。對于單一個(gè)哈夫曼表, 應(yīng)該包括了三部分:哈夫曼表ID和表類型這個(gè)字節(jié)的值為一般只有四個(gè)0x00、0x01、0x10、Oxllo0x00表示DC直流0號表;0x01表示DC直流1號表;0x10表示AC交流0號表;0x11表示AC交流1號表。不同位數(shù)的碼字?jǐn)?shù)量JPEG文件的哈夫曼編碼只能是116位。這個(gè)字段的16個(gè)字節(jié)分別表示 廣16位的編碼碼字在哈夫曼樹中的個(gè)數(shù)。編碼內(nèi)容這個(gè)字段記錄了哈夫曼樹中各個(gè)葉子結(jié)點(diǎn)的權(quán)。所以,上一字段(不同 位數(shù)的碼字?jǐn)?shù)量)的16個(gè)數(shù)值之和就應(yīng)該是本字段的長度,也就是哈夫曼樹中葉子結(jié)點(diǎn)個(gè)敦,b)舉例說明以下面一段哈夫

17、曼表數(shù)據(jù)舉例說明(數(shù)據(jù)全部以16進(jìn)制表示):11 00 02 02 00 05 01 06 01 00 00 00 00 00 00 00 0000 01 11 02 21 03 31 41 12 51 61 71 81 91 22 13 32紅色部分(第1字節(jié))為哈夫曼表ID和表類型,其值0x11表示此部分?jǐn)?shù)據(jù) 描述的是AC交流1號表。藍(lán)色部分(217字節(jié))為不同位數(shù)的碼字的數(shù)量。這16個(gè)數(shù)值實(shí)際意義為: 沒有1位和4位的哈夫曼碼字:2位和3位的碼字各有2個(gè);5位碼字有5個(gè);6位和8字各有1個(gè):7位碼字各有6個(gè);沒有9位或以上的琦字綠色部分(1834字節(jié))為編碼內(nèi)容。由藍(lán)色部分?jǐn)?shù)據(jù)知道,此哈

18、夫曼樹有 0+2+2+0+5+1+6+1=17 個(gè)葉子結(jié)點(diǎn),即本字段應(yīng)該有17個(gè)字節(jié).這段數(shù)據(jù)浪示17個(gè)葉子皓點(diǎn)按從小到大排列.其權(quán)值依次為0、1、11. 2、21、3、31、414)建立哈夫曼樹a)理論說明在讀岀哈夫曼表的數(shù)據(jù)后,就要建立哈夫曼樹。具體方法為:1)第一個(gè)碼字必定為0o如果第一個(gè)碼字位數(shù)為1,則碼字為0;如果第一個(gè)碼字位數(shù)為2,則碼字為00;如此類推。2)從第二個(gè)碼字開始,如果它和它前面的碼字位數(shù)相同,則當(dāng)前碼字為它前面的碼字加1;如果它的位數(shù)比它前面的碼字位數(shù)大,則當(dāng)前碼字是前面的碼字加1后再在 后邊添若干個(gè)0,直至滿足位數(shù)長度為止。b)舉例說明繼續(xù)以上邊的例子說明問題。由于

19、沒有1位的碼字,所以第一個(gè)碼字的位數(shù)為2,即碼字為00; 由于2位的碼字有兩個(gè),所以第二個(gè)碼字位數(shù)仍為2,即碼字為00+1=01;第三個(gè)碼字為3位,比第二個(gè)碼字長1位,所以第三個(gè)碼字為:01 + 1二10, 然后再添1個(gè)“0”,得100;如此類推,最后得到這個(gè)哈夫曼樹如下:序 號碼字長 度碼字權(quán)值12000x0022010x01331000x11431010x0255110000x2165110010x0375110100x3185110110x4195111000x1210Y61110100x5111711101100x6112711101110x718114711

20、110010x9115711110100x2216711110110x131780x32特別注意的是,如果中間有某個(gè)位數(shù)的碼字缺失,例如沒有4位碼字,則應(yīng) 該在3位碼字加1后,添加“00”補(bǔ)足5位,形成下一個(gè)5位碼字。在準(zhǔn)備好所有的圖片信息后,就可以對圖片數(shù)據(jù)進(jìn)行解碼了。I2. 初步了解圖像數(shù)據(jù)流的結(jié)構(gòu)1)理論說明分析圖像數(shù)據(jù)流的結(jié)構(gòu),筆者準(zhǔn)備以一個(gè)從宏觀到微觀的順序?yàn)樽x者詳細(xì)剖析, 即:數(shù)據(jù)流最小編碼單元數(shù)據(jù)單元與顏色分量。a)在圖片像素?cái)?shù)據(jù)流中,信息可以被分為一段接一段的最小編碼單元(Minimum Coded Unit, MCU)數(shù)據(jù)流。所iSMCU,是圖像中一個(gè)正方矩陣像素的敦錯(cuò).矩陣

21、的大小是這樣確定的:查閱標(biāo)記S0F0,可以得到圖像不同顏色分量的采樣因子,即Y、Cr. Cb 三個(gè)分量各自的水平采樣因子和垂直采樣因子。大多圖片的采樣因子為4: 1: 1或1: 1: 1.其中,4: 1: 1(2*2) :(1*1) :1*1) ) : 1: 1: 1即(1*1) :(1*1) :(1*1).記三個(gè)分量中水平采樣因子最大值為Umax,垂直采樣因子最大值為Vmax,那么如果,整幅圖像的寬度和髙度不是MCU寬度和高度的整較倍,那么編碼時(shí)會用某些較偵填充進(jìn)去.保證解碼過程中HCU的完整性(解碼完成后,可直接忽視圖像寬度和高度外的救期)。在數(shù)據(jù)流中,MCU的排列方法是從左到右,從上到下

22、。b)每個(gè)MCI;又分為若干個(gè)數(shù)據(jù)單元。數(shù)據(jù)單元的大小必定為8*8,所以每個(gè)MCU 的數(shù)據(jù)單元個(gè)數(shù)為Hmax*Vmaxo另外JPEG的壓縮方法與BMP文件有所不同,它不是把毎個(gè)後素的顏色分量連續(xù)存儲在一起的.而是把圖片分咸Y, Cr. Cb三張子圖,然后分別壓縮。而三個(gè)顏色分量的采樣密度(即采樣因子)可能一樣(例如1: 1: 1也可能不一樣(例如4: I: I每個(gè)MCU內(nèi)部,數(shù)據(jù)的順序是Y、Cr、Cbo如果一個(gè)顏色分量有多個(gè)數(shù)據(jù)單 元,則順序是從左到右,從上到下。2)舉例說明下面通過一幅32*35的圖像,對上面兩個(gè)問題列出兩種采樣因子的具體說明。圖1整張完整的圖像(4: 1: 1)圖2將圖像的

23、MCU1放大圖1及圖3中灰色部分為實(shí)際圖像大?。?2px*35px);粗虛線表示各個(gè)MCU 的分界;細(xì)虛線表示MCU內(nèi)部數(shù)據(jù)單元的分界。a)采樣因子為4: 1: 1此時(shí),Hmax=max (2, 1, 1) =2, Vmax=max (2, 1, 1) =2 所以,MCU 的 寬為 Hmax*8=16像素,高為恤曲8二16像札 圖像冥際的寛剛好是2個(gè)MCU,但商愿稍稍大于2個(gè)HCU的高度,所以要補(bǔ)足3行HCI;在數(shù)據(jù)流中,MCU 的順序是 MCU1 MCU2 MCU3 MCU4 MCU5 MCl6 每個(gè)MCU又分為Hmax*Vmax=2*2=4個(gè)數(shù)據(jù)單元。由于采樣因子是4: 1: 1, 即(2

24、*2) :(1*1) :(1*1),所以Y分量的水平和垂直方向都是密2個(gè)很素釆樣2次;分量和Cb分量的水平和垂宜方向都是毎2個(gè)像疾釆樣1次。因此,在一個(gè)MCU來里邊,Y分量禰256個(gè)采樣點(diǎn),即4個(gè)完整的數(shù)捱單元:Ci分量和Cb分量各自只有64個(gè)采樣點(diǎn)。如果以MCU1說明MCU數(shù)據(jù)的次序,則依次為Y.、丫2、丫5 X、Cg 1256 O 圖2中全部256個(gè)點(diǎn)均是Y的采樣點(diǎn),紅色部分為Cr分量和Cr分量的采樣 點(diǎn)。換句話說,對于整張圖片來說,數(shù)據(jù)流的數(shù)據(jù)依次是:Cb347&、Yi、丫2、丫5、丫6、Crl256、Cb1256、丫3、Y.、Y八人、Cr3.178、9、 Y10、 Y13、 M x C

25、rgiO13H x CbgiO13H 圖3整張完整的圖像(1: 1: 1)b)采樣因子為1: 1: 1如圖 3。Hmax=max (1, 1, 1) =1, Vmax=max (1, 1, 1)二2。所以,MCU 的寬為Hmax*8=8像素,高為Vmax*8=8像素。圖錢實(shí)際的寛換好是4個(gè)HOJ.但高則稍稍大于4個(gè)MCU的高度所以要補(bǔ)足5 ft MCU,在數(shù)據(jù)流中,MCU的順序是:MCU1 MCU2 MCU3 MCU4 MCU18MCU19 MCU20。每個(gè)MCU又分為Hmax岬max=l*l=l個(gè)數(shù)據(jù)單元,也就是一個(gè)數(shù)據(jù)單元就是 一個(gè)MCU。由于采樣因子是1: 1: 1,即(1*1) : (

26、1*1) : (1*1) 所以Y分Cr分量和Cb分的水平和垂克方向都是每】個(gè)橡素采樣I次,也就是圖取的每一個(gè)像素都是采樣點(diǎn).因此.在一個(gè)MCU來里邊,Y分量、Ci分量和Cb分長各自有64個(gè)采樣點(diǎn)。有因此,對于整張圖片來說,數(shù)據(jù)流的數(shù)據(jù)依次是:Y!、Cm CbJ、丫2、Cr2、CbJ、Y3、Cm CbJ、 Y】9、Cm、CbJ、Yr、Cr20、Cb20 o3. 顏色分量單元的內(nèi)部解碼1)理論說明顏色分量單元”是筆者為說明問題而建立的概念,指的是MCU中某個(gè)顏 色分量中的一個(gè)8*8數(shù)據(jù)塊,例如上面提到的Y- Cr,. Cb都是一個(gè)顏色分 量單元。圖像數(shù)據(jù)流是以位(bit)為單位存儲信息的。并且內(nèi)部

27、的數(shù)據(jù)都是在編 碼時(shí)通過正向離散余弦變換(FDCT)進(jìn)行時(shí)空城向頻率域變換而得到的結(jié)果,所以對于每個(gè)頷色分量單元都應(yīng)該由兩部分姐成:I個(gè)宜流分量和63個(gè)交流分解碼的過程其實(shí)就是哈夫曼樹的查找過程。首先查閱標(biāo)記段SOS中的顏色分量信息,可以得出各個(gè)顏色分量對應(yīng)使用 的直流分量和交流分量使用的哈夫曼樹編號。一般來說,Y分量:直流分量:直流0號哈夫曼樹,交流分量:交流0號哈夫曼樹;Cr分量:直流分量:直流1號哈夫曼樹,交流分量:交流1號哈夫曼樹; Cb分量:直流分量:直流1號哈夫曼樹,交流分量:交流1號哈夫曼樹。顏色分量單元內(nèi)部綜合運(yùn)用了 RLE行程編碼和哈夫曼編碼來壓縮數(shù)據(jù)。每個(gè) 像素的數(shù)據(jù)流由兩

28、部分構(gòu)成:編碼和數(shù)值,并且兩者基本以互相隔開方式出現(xiàn)(陰非該編碼的權(quán)值為篆)具體讀入草個(gè)顏色分量單元的步腺如下:a)從此顏色分量單元數(shù)據(jù)流的起點(diǎn)開始一位一位的讀入,直到讀入的編碼與該 分量直流哈夫曼樹的某個(gè)碼字(葉子結(jié)點(diǎn))一致.然后用直謊哈夫曼樹查得該瑪字對應(yīng)的權(quán)值。權(quán)值(共8位)錄示該直流分量數(shù)值的二進(jìn)制lift.也就是接下來需妾瀆入 的位九b)繼續(xù)讀入位數(shù)據(jù),直到讀入的編碼與該分量交流哈夫曼樹的某個(gè)碼字(葉子 結(jié)點(diǎn))一致,然后用交流哈夫曼樹查得該碼字對應(yīng)的權(quán)值。權(quán)值的商4位表示當(dāng)前數(shù)值做面有多少個(gè)連續(xù)的篆低4位表示該交流分量敦值的二進(jìn)制位盤,也就是接下來需 要瀆入的位數(shù)。c)不斷重復(fù)步驟b

29、,直到滿足交流分量數(shù)據(jù)結(jié)束的條件。而結(jié)束條件有兩個(gè), 只要滿足其中一個(gè)即可: 當(dāng)讀入碼字的權(quán)值為零,表示往后的交流變量全部為零; 已經(jīng)讀入63個(gè)交流分量。d)各個(gè)數(shù)值的譯碼是按下表進(jìn)行的:實(shí)際數(shù)值編碼長度編碼00-1,110,1- 3 廠2 2 3200,01,10,117,-6,5,一4,4,5,6,73000,001,010,011,100,101,110,11115,8,8,1540000,0111,1000,1111-31,,一16,16,31500000,01111,10000,1111163,32.32,636-127,,-64,64,1277-255,,-128,128,2558

30、-511,-256,256,5119-1023,-512,512,102310-2047,,-1024,1024,204711-4095,-2048,2048,409512-8191,-4096,4096,,819113-16383,3,-8192,8192,-,163814-32767,767,-16384,16384,,32152)舉例說明下面舉例說明以上幾點(diǎn)。某個(gè)顏色分量單元數(shù)據(jù)如下:D3 5E 6E 4D 35 f5 8A若以二進(jìn)制表示,則為:1101 0011 0101 1110 0110 1110 0100 1101 0011 0101 1111 0101 1000 1010假設(shè)該

31、顏色分量單元對應(yīng)以下直流哈夫曼樹和交流哈夫曼樹,則可將各個(gè) 以位為單位的數(shù)據(jù)流拆分如下:詳細(xì)說明一下:讀入數(shù)據(jù)流并對照直流哈夫曼樹,第一個(gè) 哈夫曼編碼為110,其權(quán)值為6,所以往后讀 入6位數(shù)據(jù)“ 1001101,譯碼成數(shù)值為77。 因?yàn)槊總€(gè)顏色分量單元只有一個(gè)直流分量,所 以下一個(gè)就是第一個(gè)交流分量了。繼續(xù)讀入數(shù)據(jù)流并對照交流哈夫曼樹,得 哈夫曼編碼為01,其權(quán)值為1,所以它的前面 沒有零,并往后讀如1位數(shù)據(jù)“1”,譯碼成 數(shù)值為lo如此往復(fù),最后讀到哈夫曼編碼 “00”,其權(quán)值為0,所以滿足交流變量結(jié)束 條件(最后剩余的“01010對本顏色分量單 元來說是冗余的,它可能屬于下一個(gè)顏色分量

32、單元)。實(shí)際上,這段數(shù)據(jù)譯碼為:77,(0,(0, 1) , (0, 5) , (0, -6),-3) , (5, 1) , (2, 3)因此,把它置于1個(gè)8*8的矩陣中應(yīng)為:7715-6-3t000001003000000000000000000000000Y00000000000)0000000000000000022010x01331000x11431010x0255110000x2165110010x0375110100x3185110110x4195111000x121061110100x5111711101100x6112711101110x7113711110000x811471

33、1110010x9115711110100x2216711110110x131780x324. 直流系數(shù)的差分編碼把所有的顏色分量單元按顏色分量(Y、Cr. Cb)分類。每一種顏色分量 內(nèi),相鄰的兩個(gè)顏色分量單元的直流變量是以差分來編碼的.也就是說,通過步驟3劇碼出來的宜流變量數(shù)值只是當(dāng)號頷色分量單元的實(shí)際直流變量純?nèi)デ耙粋€(gè)頷魚分量單元的實(shí)際直流變量,也就是說,當(dāng)前克流變長要通過前一個(gè)顏色分量單元的實(shí)際(非解碼)直流分量來校正:DCn=DCn-l+Diff其中Diff為差分校正變量,也就是直接解碼出來的直流系數(shù)。但如果當(dāng) 前顏色分量單元是第一個(gè)單元,則解碼出來的直流數(shù)值就是真正的直流變量。再次

34、提醒的是,3個(gè)顏色分量的直流變量是分開進(jìn)行差分編碼的。也就是 說,為1張圖片解碼時(shí)應(yīng)設(shè)置3個(gè)獨(dú)立的直流校正變量.另一個(gè)問題是,當(dāng)數(shù)錯(cuò)流中出現(xiàn)標(biāo)記RSTn.則3個(gè)頷色分量的立謙差分校正Diff都需要至新復(fù)位到O5. 反量化不同的顏色分量使用不同的量化表,這個(gè)可以從標(biāo)記段S0F中的顏色分量 信息字段查得。一般是Y分量使用量化表0,而Cr、Cb兩個(gè)分量共同使用量 化表lo反量化的過程比較簡單。只需要對8*8的顏色分量單元的64個(gè)值逐一乘 以對應(yīng)的量化表內(nèi)位置相同的值則可。圖像內(nèi)全部的顏色分量單元都要進(jìn)行 反量化。6. 反Zig-zag編碼如果將反量化后的每個(gè)8*8顏色分量單元的每個(gè)元素編號,如下圖4

35、,那 么各反Zig-zag編碼的過程就是把矩陣元素按圖5重新排列。圖4將顏色分量單元元素編碼圖5反Zig-zag編碼關(guān)于量化和反Zig-zag編碼的先后順序,筆者查閱的幾份資料有不同的見 解。經(jīng)過實(shí)踐試驗(yàn),解碼的過程中,是應(yīng)該直接用文件根供的量化表反量化矩庫敦?fù)u,再將其反Zig-zng編珂才能正確解碼。7. 隔行的正負(fù)糾正這個(gè)問題比較特別,因?yàn)樵诠P者認(rèn)真閱讀的幾份資料中都沒有提及此問題。 而是筆者通過對已知圖像進(jìn)行JPEG編碼壓縮,熱馬和該圖的JPEG文件數(shù)據(jù)對比發(fā)現(xiàn)的問題。具體黒因不明.實(shí)際上,就是必須對每個(gè)顏色分量單元的奇數(shù)行(每個(gè)顏色分量單元有8 行,假設(shè)把它按0、1、6、7編出行號),

36、即1、3、5. 7行,進(jìn)行瑕相反數(shù)擬作(正的變負(fù),負(fù)的變正)8. 反離散余弦變換之前提到,文件中的數(shù)據(jù)是在編碼時(shí)通過正向離散余弦變換(FDCT)進(jìn)行 時(shí)空域向頻率域變換而得到的結(jié)果,所以現(xiàn)在解碼就必須將具反向離敢余弦變茯(IDCT),就是把顏色分量單元矩陣中的頻率城數(shù)值向時(shí)空域林換。并且原 來的頻率城的拒陣大小為8*8,則經(jīng)過反向離散余技交換后,時(shí)空城的矩陣仍然是8*8,設(shè)正負(fù)糾正后的頻率域矩陣為Fuv,而反向離散余弦變換后的矩陣為 fij,其中0Wu,v,i,jW7具體使用的公式如下:,其中C (u)=(當(dāng) u二0) , C (u) =1 (當(dāng) 11H0);C (v)=(當(dāng) v=0) , C

37、 (u) =1 (當(dāng) vHO);I1另外補(bǔ)充一下正向離散余弦變換的公式,用于編碼:9. YCrCb 向 RGB 轉(zhuǎn)換要在屏幕上顯示圖像,就必須以RGB模式表示圖像的顏色。所以,解碼時(shí) 需要把YCrCb模式向RGB模式轉(zhuǎn)換。正如前面提到,并不是每種顏色分量的采樣因子都一樣,所以轉(zhuǎn)換時(shí)需要 注意。如果采樣因子是1: 1: 1,則每一個(gè)像素點(diǎn)的3個(gè)顏色分fW采樣,所以沒有間題但1: 1: 1的采樣因子就不一樣了.由了解圖像數(shù)據(jù)流的二一節(jié)中對4: 1: 1的采樣因子的分析.可以知邀一個(gè)NCU星有4個(gè)Y分量單元,而Cr分量和Cb分量各自只有I個(gè)分量單元以圖2為例,僅有的一個(gè)Ci分量單元(紅色的64個(gè)采樣點(diǎn)應(yīng)該平鋪用于4個(gè)Y分量單元,即左上危16個(gè)值用于YI,右 上角16個(gè)值用于丫2,左下金16個(gè)值用于Y5,右下兔16個(gè)值用于Y6。換句話說一個(gè)Ci采樣點(diǎn)服務(wù)于4個(gè)Y采樣點(diǎn).對于Cb分量,追理一樣。另外,由于離散余弦變化要求定義域的對稱,所以在編碼時(shí)把RGB的數(shù)值 范圍從0, 255統(tǒng)一減去128偏移成-128, 127。因此解碼時(shí)必須為毎個(gè)分量加上12&具體公式如下:r二Y +*Cb +128;G=*Cr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論