版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、如有你有幫助,請購買下載,謝謝!JPEG文件編/解碼詳解(1 )JPEG (Joint Photographic Experts Group是聯(lián)合圖像專家小組的英文縮寫。 它由國際電話與電報咨詢委員會 CCITT (The International Telegraph and Telephone Consultative Committee與國際標準化組織ISO于1986年聯(lián)合成立的 一個小組,負責制定靜態(tài)數字圖像的編碼標準。小組一直致力于標準化工作,開發(fā)研制出連續(xù)色調、多級灰度、靜止圖像的 數字圖像壓縮編碼方法,即JPEG算法。JPEG算法被確定為國際通用標準,具 適用范圍廣泛,除用于靜態(tài)
2、圖像編碼外,還推廣到電視圖像序列的幀內圖像壓縮。 而用JPEG算法壓縮出來的靜態(tài)圖片文件稱為 JPEG文件,擴展名通常為*jpg、 *jpe*jpeg。JPEG專家組開發(fā)了兩種基本的壓縮算法、兩種數據編碼方法、四種編碼模式。 具體如下: 比縮算法:有損的離散余弦變換(Discrete Cosine Transform, DCT);無損的預測技術壓縮。數據編碼方法:哈夫曼編碼;算術編碼;編碼模式:基于DCT順序模式:編/解碼通過一次掃描完成;基于DCT遞進模式:編/解碼需要多次掃描完成,掃描效果從粗糙到精細, 逐級遞進;無損模式:基于DPCM,保證解碼后完全精確恢復到原圖像采樣值; 層次模式:圖
3、像在多個空間多種分辨率進行編碼,可以根據需要只對低 分辨率數據作解碼,放棄高分辨率信息。在實際應用中,JPEG圖像使用的是離散余弦變換、哈夫曼編碼、順序模式。JPEG壓縮編碼算法的主要計算步驟如下:(0) 8*8 分塊。(1)正向離散余弦變換(FDCT)。量化(quantization)。Z字形編碼gzag scan)(4)使用差分脈沖編碼調制(DPCM)對直流系數(DC)進行編碼。(5)使用行程長度編碼(RLE)對交流系數(AC)進行編碼。(6)嫡編碼。筆者在實踐過程中查閱了大量的資料,發(fā)現大多數書籍資料和網上資料都是 從編碼角度分析JPEG的編/解碼方式,并且都只是介紹編碼過程中的主要方法
4、。 所以,本文從解碼角度詳細分析JPEG的編/解碼過程,并且加入許多筆者實踐過 程中遇到的問題和解決方法,希望從另一個角度說明問題,以更好幫助讀者結合 他資料解決問題。不過,介紹解碼過程之前,首先要了解 JPEG文件中數據的存儲格式。一、JPEG文件格式介紹JPEG文件使用的數據存儲方式有多種。 最常用的格式稱為JPEG文件交換格如有你有幫助,請購買下載,謝謝!式(JPEG File Interchange Format JFIF)。而JPEG文件大體上可以分成兩個部 分:標記碼(Tag)和壓縮數據。標記碼由兩個字節(jié)構成,其前一個字節(jié)是固定值0 xFF,后一個字節(jié)則根據不同意義有不同數值。在每
5、個標記碼之前還可以添加數目不限的無意義的0 xFF填充,也就說連續(xù)的多個0 xFF可以被理解為一個0 xFF,并表示一個標記碼的開始。 而在一個完整的兩字節(jié)的標記碼后, 就是該標記碼對應的壓縮數據流, 記錄了關 文件的諸種信息。常用的標記有 SO!、APP0、DQT、SOF0、DHT、DRI、SOS、EOI。注意,soi等者Qs記的名稱TH文件中,益麗是而亢而形而現。例如SOI的標記代碼為0 xFFD8,即在JPEG文件中的如果出現數據 0 xFFD8,則 表示此處為一個SOI標記。本文附錄列出一張完整的JPEG定義的標記表,供讀者查閱。這里僅列出幾0常用標記的標記代碼、占用字節(jié)長度和表示的意
6、義。SOI , Start of Image,圖像開始標記代碼2字節(jié) 固定值0 xFFD8APP0 , Application ,應用程序保留標記 0標記代碼包含9個具體字段:數據長度標識符版本號號1.2X和Y的密度單位厘米X方向像素密度Y方向像素密度縮略圖水平像素數目縮略圖垂直像素數目縮略圖RGB位圖位圖數據2字節(jié) 固定值0 xFFE02字節(jié)9個字段的總長度即不包括標記代碼,但包括本字段5字節(jié) 固定值0 x4A,即字符串“JFIF02字節(jié) 一般是0 x0102,表示JFIF的版本可能會有其他數值代表其他版本1字節(jié)只有三個值可選0:無單位;1:點數/英寸;2:點數/2字節(jié)取值范圍未知2字節(jié)取值
7、范圍未知1字節(jié)取值范圍未知1字節(jié)取值范圍未知長度可能是3的倍數 縮略圖RGB本標記段可以包含圖像的一個微縮版本,存為 24位的RGB像素。如果 沒有微縮圖像(這種情況更常見),則字段 縮略圖水平像素數目”和字 段縮略圖垂直像素數目”的值均為00APPn , Application ,應用程序保留標記 n,其中n=115(任選)標記代碼2字節(jié) 固定值0 xFFE10 xFFF包含2個具體字段: 數據長度2字節(jié)2個字段的總長度即不包括標記代碼,但包括本字段如有你有幫助,請購買下載,謝謝!詳細信息數據長度-2字節(jié) 內容不定例如,Adobe Photoshop生成的JPEG圖像中就用了 APP1和AP
8、P13兩 個標記段分別存儲了一幅圖像的副本。DQT , Define Quantization Table,定義量化表標記代碼2字節(jié)固定值0 xFFDB包含9個具體字段:數據長度2字節(jié)字段和多個字段的總長度即不包括標記代碼,但包括本字段量化表數據長度-2字節(jié)精度及量化表ID 1字節(jié) 高4位:精度,只有兩個可選值0: 8 位;1: 16 位低4位:量化表ID,取值范圍為03b)表項 (64止度+1)字節(jié)例如8位精度的量化表其表項長度為64 X (0+1) =64字節(jié)本標記段中,字段可以重復出現,表示多個量化表,但最多只能出現4koSOF0 , Start of Frame,幀圖像開始標記代碼包含
9、9個具體字段:數據長度精度位圖像高度 就必須02字節(jié) 固定值0 xFFC02字節(jié) 遺六個字段的總長度即不包括標記代碼,但包括本字段1字節(jié) 每個數據樣本的位數通常是8位,一般軟件都不支持 12位和162字節(jié) 圖像高度(單位:像素),如果不支持DNL圖像寬度 就必須0顏色分量數為3顏色分量信息2字節(jié)圖像寬度(單位:像素),如果不支持DNL1字節(jié) 只有3個數值可選1:灰度圖;3: YCrCb 或 YIQ; 4: CMYK而JFIF中使用YCrCb,故這里顏色分量數恒顏色分量數M字節(jié)(通常為9字節(jié))a)顏色分量ID1字節(jié)水平/垂直采樣因子1字節(jié) 高4位:水平采樣因子低4位:垂直采樣因子c) 量化表1字
10、節(jié)(曾經看到某資料把這兩者調轉了)當前分量使用的量化表的ID本標記段中,字段應該重復出現,有多少個顏色分量(字段),就 出現多少次(一般為3次)。如有你有幫助,請購買下載,謝謝!DHT , Difine Huffman Table ,定義哈夫曼表標記代碼2字節(jié)固定值0 xFFC4包含2個具體字段:數據長度2字節(jié)字段和多個字段的總長度即不包括標記代碼,但包括本字 段哈夫曼表數據長度-2字節(jié)a)表ID和表類型1字節(jié) 高4位:類型,只有兩個值可選0: DC直流;1: AC交 流低4位:哈夫曼表ID,注意,DC表和AC表分 開編碼b)不同位數的碼字數量16字節(jié)c)編碼內容16個不同位數的碼字數量之和(
11、字節(jié))本標記段中,字段可以重復出現(一般 4次),也可以致出現1次。 例如,Adobe Photoshop生成的JPEG圖片文件中只有1個DHTB記段,里 邊包含了 4個哈夫曼表;而 Macromedia Fireworks 生成的JPEG圖片文件 則有4個DHTB記段,每個DHT標記段只有一個哈夫曼表。DRI , Define Restart Interval,定義差分編碼累計復位的間隔標記代碼2字節(jié) 固定值0 xFFDD包含2個具體字段:數據長度2字節(jié) 固定值0 x0004,兩個字段的總長度即不包括標記代碼,但包括本字段MCU塊的單元中的重新開始間隔2字節(jié)設其值為n,則表示每n個MCU塊就
12、有一個RSTn標記。第一個標記是 RST0,第 二個是RST, RST7后再從RST0重復。如果沒有本標記段,或間隔值為 0時,就表示不存在重開始間隔和標記 RSTSOS, Start of Scan,掃描開始12字節(jié)標記代碼2字節(jié)固定值0 xFFDA包含2個具體字段:數據長度2字節(jié) 兩個字段的總長度即不包括標記代碼,但包括本字段如有你有幫助,請購買下載,謝謝!顏色分量數1字節(jié) 應該和SOW的字段的值相同,即:1:灰度圖是;3: YCrCb 或 YIQ;4:CMYK而JFIF中使用YCrCb ,故這里顏色分量 數包為3顏色分量信息a)顏色分量ID 1字節(jié)b)直流/交流系數表號1字節(jié) 高4位:直
13、流分量使用的哈夫曼樹編 號低4位:交流分量使用的哈夫曼樹編號壓縮圖像數據a)譜選擇開始1字節(jié)固定值0 x00b)譜選擇結束1字節(jié)固定值0 x3Fc)譜選擇1字節(jié) 在基本JPEG中總為00本標記段中,字段應該重復出現,有多少個顏色分量(字段),就出現多少次(一般為3次)。本段結束后,緊接著就是真正的圖像信息了。圖像信息直至遇到一個標記代碼就自動結束,一般就是以EOI標記表示結束。EOI , End of Image,圖像結束 2字節(jié)標記代碼2字節(jié) 固定值0 xFFD9這里補充說明一下,由于在JPEG文件中0 xFF具有標志性的意思,所 以在壓縮數據流(真正的圖像信息)中出現0 xFF,就需要作特
14、別處理。具體 方法是,在數據0 xFF后添加一個沒有意義的0 x00。換句話說,如果在圖 像數據流中遇到0 xFF,應該檢測其緊接著的字符,如果是0 x00,則表示0 xFF是圖像流的組成部分,需要進行譯碼;0 xD9,則與0 xFF組成標記EOI,則圖像流結束,同時圖像文件結束;0 xD00 xD7,則組成RSTn標記,則要忽視整個RSTn標記,即不對當前0 xFF和緊接的0 xDn兩個字節(jié)進行譯碼,并按 RST標記的規(guī)則調整譯 碼變量;0 xFF,則忽視當前0 xFF,對后一個0 xFF再作判斷;4)其他數值,則忽視當前0 xFF,并保留緊接的此數值用于譯碼。.、JPEG解碼過程詳解卜面來
15、詳細講述JPEG文件的解碼過程.讀入文件的相關信息按照上述的JPEG文件數據存儲方式,把要解碼的文件的相關信息一一讀出, 為接下來的解碼工作做好準備。參考方法是,設計一系列的結構體對應各個標記, 并存儲標記內表示的信息。其中圖像長寬、多個量化表和哈夫曼表、水平/垂直采樣因子等多項信息比較重要。以下給出讀取過程中的兩個問題。1)整個文件的大體結構JFIF格式的JPEGt件(*jpg)的一般順序為:SOI(0 xFFD8)APP0(0 xFFE0)APPn(0 xFFEn)可選如有你有幫助,請購買下載,謝謝!DQT(0 xFFDB) SOF0(0 xFFC0) DHT(0 xFFC4) SOS(0
16、 xFFDA) 壓縮數據EOI(0 xFFD9)2)字的高低位問題JPEG文件格式中,一個字(16位)的存儲使用的是 Motorola格式,而不是 ntel格式。也就是說,一個字的高字節(jié)(高8位)在數據流的前面,低字節(jié)(低 8位)在數據流的后面,與平時習慣的Intel格式不一樣。.3)讀出哈夫曼表數據a)理論說明在標記段DHT內,包含了一個或者多個的哈夫曼表。對于單一個哈夫曼表, 應該包括了三部分:哈夫曼表ID和表類型這個字節(jié)的值為一般只有四個 0 x00、0 x01、0 x10、0 x11。0 x00表示DC直流0號表;0 x01表示DC直流1號表;0 x10表示AC交流0號表;0 x11表
17、示AC交流1號表。不同位數的碼字數量JPEG文件的哈夫曼編碼只能是116位。這個字段的16個字節(jié)分別表 示116位的編碼碼字在哈夫曼樹中的個數。編碼內容這個字段記錄了哈夫曼樹中各個葉子結點的權。所以,上一字段(不 同位數的碼字數量)的16個數值之和就應該是本字段的長度,也就是哈 夫曼樹中葉子結點個數。b)舉例說明以下面一段哈夫曼表數據舉例說明(數據全部以16進制表示):1100 02020005010601000000000000000000 01110221033141125161 71 81 91 2:13 32紅色部分(第1字節(jié))為哈夫曼表ID和表類型,其值0 x11表示此部分數 據描述
18、的是AC交流1號表。藍色部分(217字節(jié))為不同位數的碼字的數量。這16個數值實際意義為: 沒有1位和4位的哈夫曼碼字;2位和3位的碼字各有2個;5位 碼享有5個;6位和8位碼字各有1個;7位碼字各有6個;沒有 9位或以上的碼字。綠色部分(1834字節(jié))為編碼內容。由藍色部分數據知道,此哈夫曼樹有 0+2+2+0+5+1+6+1=17個葉子結點,即本字段應該有 17個字節(jié)。這段數據表示17個葉子結點按從小到大排列,其權值依次為0、1、如有你有幫助,請購買下載,謝謝!11、2、21、3、31、414)建立哈夫曼樹a)理論說明在讀出哈夫曼表的數據后,就要建立哈夫曼樹。具體方法為:1)第一個碼字必定
19、為00如果第一個碼字位數為1,則碼字為0;如果第一個碼字位數為2,則碼字為00;如此類推。2)從第二個碼字開始,如果它和它前面的碼字位數相同,則當前碼字為它前面的碼字加1;如果它的位數比它前面的碼字位數大,則當前碼字是前面的碼字加1后再在后邊添若干個0,直至滿足位數長度為止。b)舉例說明繼續(xù)以上邊的例子說明問題。由于沒有1位的碼字,所以第一個碼字的位數為2,即碼字為00;由于2位的碼字有兩個,所以第二個碼字位數仍為 2,即碼字為00+1=01;第三個碼字為3位,比第二個碼字長1位,所以第三個碼字為:01+1=10,然后再添1個“0”,得100;如此類推,最后得到這個哈夫曼樹如下:序 號碼字長
20、度碼字權值r 12000 x0022010 x01331000 x11431010 x02r 55111000 10 x2165110010 x0375110100 x3185110110 x4195111000 x121061110100 x5111711101100 x6112711101110 x7113711110000 x8114711110010 x9115711110100 x2216711110110 x131780 x32特別注意的是,如果中間有某個位數的碼字缺失,例如沒有4位碼字,則應該在3位碼字加1后,添加“ 00”補足5位,形成下一個5位碼字。在準備好所有的圖片信息后,
21、就可以對圖片數據進行解碼了。如有你有幫助,請購買下載,謝謝!.初步了解圖像數據流的結構1)理論說明分析圖像數據流的結構,筆者準備以一個從宏觀到微觀的順序為讀者詳細剖析, 即:數據流最小編碼單元數據單元與顏色分量。在圖片像素數據流中,信息可以被分為一段接一段的最小編碼單元(Minimum Coded Unit, MCU )數據流。所謂 MCU ,是圖像中一個正方 矩陣像素的數據。矩陣的大小是這樣確定的:查閱標記SOFO,可以得到圖像不同顏色分量的采樣因子,即 Y、Cr、 Cb三個分量各自的水平采樣因子和垂直采樣因子。大多圖片的采樣因子為 4: 1: 1 或 1: 1: 1。其中,4: 1: 1
22、即(2*2) : (1*1) : (1*1) ); 1: 1: 1即(1*1) : (1*1) : (1*1)。記三個分量中水平采樣因子最大值為 Hmax,垂直采樣因子最大值為Vmax,那么單個MCU矩陣的寬就是Hmax*8 像素,高就是Vmax*8像素。如果,整幅圖像的寬度和高度不是 MCU寬度和高度的整數倍,那么編 碼時會用某些數值填充進去,保證解碼過程中MCU的完整性(解碼完成后, 可直接忽視圖像寬度和高度外的數據)。在數據流中,MCU的排列方法是從左到右,從上到下。每個MCU又分為若干個數據單元。數據單元的大小必定為8*8,所以每個MCU的數據單元個數為Hmax*Vmax。另外JPEG
23、的壓縮方法與BMP文件有所不同,它不是把每個像素的顏 色分量連續(xù)存儲在一起的,而是把圖片分成 Y, Cr, Cb三張子圖,然后分 別壓縮。而三個顏色分量的采樣密度(即采樣因子)可能一樣(例如 1:1: 1)也可能不一樣(例如4: 1: 1)。每個MCU內部,數據的順序是Y、Cr、Cb。如果一個顏色分量有多個數據 單元,則順序是從左到右,從上到下。2)舉例說明下面通過一幅32*35的圖像,對上面兩個問題列出兩種采樣因子的具體說明。圖1整張完整的圖像(4:1:1)圖2將圖像的MCU1放大圖1及圖3中灰色部分為實際圖像大小(32Px*35px);粗虛線表示各個 MCU的分界;細虛線表示 MCU內部數
24、據單元的分界。采樣因子為4: 1: 1此時,Hmax=max (2, 1, 1) =2, Vmax=max (2, 1, 1) =2。所以, MCU的寬為Hmax*8=16像素,高為Vmax*8=16像素。圖像實際的寬剛好 是2個MCU,但高則稍稍大于2個MCU的高度,所以要補足3行MCU。在數據流中,MCU的順序是MCU1 MCU2 MCU3 MCU4 MCU5 MCU6。每個MCU又分為Hmax*Vmax=2*2=4個數據單元。由于采樣因子是4: 1: 1,即(2*2) : (1*1) : (1*1),所以Y分量的水平和垂直方向都是 每2個像素采樣2次;Cr分量和Cb分量的水平和垂直方向都
25、是每 2個像 素采樣1次。因此,在一個 MCU來里邊,Y分量有256個采樣點,即4 個完整的數據單元;Cr分量和Cb分量各自只有64個采樣點。如有你有幫助,請購買下載,謝謝!如果以MCU1說明MCU數據的次序,則依次為 Yi、丫2、丫5、丫6、 Cri256、Cbi256 o圖2中全部256個點均是Y的采樣點,紅色部分為Cr分 量和Cr分量的采樣點。換句話說,對于整張圖片來說,數據流的數據依次是:丫1、丫2、丫5、丫6、Cri256、Cbl256 、丫3、丫4、丫7、丫8、C3478、Cb3478、 Y 9、丫10、丫13、丫14、Cr9i0i314、CbgiQi314 圖3整張完整的圖像(1
26、:1:1)米樣因子為1 : 1 : 1如圖 3。Hmax=max (1, 1, 1) =1, Vmax=max (1, 1, 1) =2。所以, MCU的寬為Hmax*8=8像素,高為Vmax*8=8像素。圖像實際的寬剛好是 4個MCU,但高則稍稍大于4個MCU的高度,所以要補足5行MCU。在數據流中,MCU的順序是:MCU1 MCU2 MCU3 MCU4 MCU18 MCU19 MCU20。每個MCU又分為Hmax*Vmax=1*1=1個數據單元,也就是一個數據單 元就是一個MCU o由于采樣因子是1: 1: 1,即(1*1) : (1*1) : (1*1), 所以Y分量、Cr分量和Cb分量
27、的水平和垂直方向都是每1個像素采樣1 次,也就是圖象的每一個像素都是采樣點。因此,在一個 MCU來里邊,Y 分量、Cr分量和Cb分量各自有64個采樣點。有因此,對于整張圖片來說,數據流的數據依次是:Yi、Cri、Cbi、丫2、Cr2、Cb2、丫3、Cm Cb3、 Y19、C門9、Cbi9、Y20、Cr20、Cb2o。3.顏色分量單元的內部解碼1)理論說明“顏色分量單元”是筆者為說明問題而建立的概念,指的是 MCU中某 個顏色分量中的一個8*8數據塊,例如上面提到的Yi、Cri、Cbi都是一個 顏色分量單元。圖像數據流是以位(bit)為單位存儲信息的。并且內部的數據都是在編 碼時通過正向離散余弦
28、變換(FDCT)進行時空域向頻率域變換而得到的結 果,所以對于每個顏色分量單元都應該由兩部分組成:1個直流分量和63個交流分量。解碼的過程其實就是哈夫曼樹的查找過程。首先查閱標記段SOS中的顏色分量信息,可以得出各個顏色分量對應使用的直流分量和交流分量使用的哈夫曼樹編號。一般來說,Y分量:直流分量:直流0號哈夫曼樹,交流分量:交流 0號哈夫曼樹;Cr分量:直流分量:直流1號哈夫曼樹,交流分量:交流1號哈夫曼樹;Cb分量:直流分量:直流1號哈夫曼樹,交流分量:交流1號哈夫曼 樹。顏色分量單元內部綜合運用了 RLE行程編碼和哈夫曼編碼來壓縮數據。 每個 像素的數據流由兩部分構成:編碼和數值,并且兩
29、者基本以互相隔開方式出現(除 非該編碼的權值為零)。具體讀入單個顏色分量單元的步驟如下:a)從此顏色分量單元數據流的起點開始一位一位的讀入,直到讀入的編碼與 該分量直流哈夫曼樹的某個碼字(葉子結點)一致,然后用直流哈夫曼樹如有你有幫助,請購買下載,謝謝!查得該碼字對應的權值。權值(共 8位)表示該直流分量數值的二進制位 數,也就是接下來需要讀入的位數。b)繼續(xù)讀入位數據,直到讀入的編碼與該分量交流哈夫曼樹的某個碼字(葉子結點)一致,然后用交流哈夫曼樹查得該碼字對應的權值。權值的高4位表示當前數值前面有多少個連續(xù)的零,低 4位表示該交流分量數值的二 進制位數,也就是接下來需要讀入的位數。c)不斷
30、重復步驟b,直到滿足交流分量數據結束的條件。而結束條件有兩個, 只要滿足其中一個即可:當讀入碼字的權值為零,表示往后的交流變量全部為零;已經讀入63個交流分量。d)各個數值的譯碼是按下表進行的:實際數值編 碼 長 度編碼00-1.110,1-3,-2,2,3200,01,10,11-7,-6,-5,-4,4,5,6,73000,001,010,011,100,101,110,111-15,-8,8,1540000,0111,1000, ,1111-31,-16,16,31500000,,01111,10000;,11111-63,-32,32,636-127,-64,64,1277-255,-
31、128,128,2558-511,-256,256,5119-1023,-512,512,102310-2047,-1024,1024,204711-4095,-2048,2048,409512-8191,-4096,4096,819113-16383,-8192,8192,1638314-32767,-16384,16384,32767152)舉例說明下面舉例說明以上幾點。某個顏色分量單元數據如下:D3 5E 6E 4D 35 f5 8A若以二進制表示,則為:1101 0011 0101 1110 0110 1110 0100 1101 0011 0101 1111 0101 1000 10
32、10假設該顏色分量單元對應以下直流哈夫曼樹和交流哈夫曼樹,則可將各個以位為單位的數據流拆分如下:110 1001101 01 1 11001 101 11001 001 101 00 11010 1 1111010 11 00 01010直流哈夫曼樹交流哈夫曼樹序 號碼字長 度碼字權值12000 x0010頁如有你有幫助,請購買下載,謝謝!22010 x0132100 x02431100 x0751 4111100 x1e65111100 x2e詳細說明一下:讀入數據流并對照直流哈夫曼樹,第一個 哈夫曼編碼為110,其權值為6,所以往后讀 入6位數據“1001101”,譯碼成數值為77。 因為
33、每個顏色分量單元只有一個直流分量,所 以下一個就是第一個交流分量了。繼續(xù)讀入數據流并對照交流哈夫曼樹,得 哈夫曼編碼為01,其權值為1,所以它的前面 沒有零,并往后讀如1位數據“ 1”,譯碼成 數值為1。如此往復,最后讀到哈夫曼編碼“00”,其權值為0,所以滿足交流變量結束 條件(最后剩余的“ 01010”對本顏色分量單 元來說是冗余的,它可能屬于下一個顏色分量 單元)。實際上,這段數據譯碼為:77, (0, 1) , (0, 5) , (0, -6) , (0, -3) , (5, 1) , (2, 3)序碼室長00F旗00曇度01:0 x01331000 x11431010 x025511
34、0000 x2165110010 x0375110100 x3185110110 x41951111000 x121061110100 x5111711101100 x611271111011110 x7113711110000 x8114711110010 x91157:11110100 x2216711110110 x131780 x32因此,把它置于1個8*8的矩陣中應為:7715-6-300000r 10 :0300 :00I 00 I0000 I000000000000000000:0000:。000I 00 I00I 00 I00000000JPEG文件編/解碼詳解.直流系數的差分
35、編碼把所有的顏色分量單元按顏色分量(丫、Cr、Cb)分類。每一種顏色分 量內,相鄰的兩個顏色分量單元的直流變量是以差分來編碼的。也就是說, 通過步驟3解碼出來的直流變量數值只是當前顏色分量單元的實際直流變 量減去前一個顏色分量單元的實際直流變量。也就是說,當前直流變量要 通過前一個顏色分量單元的實際(非解碼)直流分量來校正:DCn=DCn-1+Diff其中Diff為差分校正變量,也就是直接解碼出來的直流系數。 但如果當 前顏色分量單元是第一個單元,則解碼出來的直流數值就是真正的直流變11頁如有你有幫助,請購買下載,謝謝!里。再次提醒的是,3個顏色分量的直流變量是分開進行差分編碼的。也就 是說,
36、為1張圖片解碼時應設置3個獨立的直流校正變量。另一個問題是, 當數據流中出現標記RSTn,則3個顏色分量的直流差分校正變量 Diff都需 要重新復位到00.反量化不同的顏色分量使用不同的量化表,這個可以從標記段SOF中的顏色分 量信息字段查得。一般是Y分量使用量化表0,而Cr、Cb兩個分量共同使 用量化表1。反量化的過程比較簡單。只需要對 8*8的顏色分量單元的64個值逐一 乘以對應的量化表內位置相同的值則可。圖像內全部的顏色分量單元都要 進行反量化。.反Zig-zag編碼如果將反量化后的每個8*8顏色分量單元的每個元素編號,如下圖 4, 那么各反Zig-zag編碼的過程就是把矩陣元素按圖 5
37、重新排列。圖4將顏色分量單元元素編碼圖5反Zig-zag 編碼關于量化和反Zig-zag編碼的先后順序,筆者查閱的幾份資料有不同的 見解。經過實踐試驗,解碼的過程中,是應該直接用文件提供的量化表反 量化矩陣數據,再將其反Zig-zag編碼才能正確解碼。.隔行的正負糾正這個問題比較特別,因為在筆者認真閱讀的幾份資料中都沒有提及此問 題。而是筆者通過對已知圖像進行 JPEG編碼壓縮,然后和該圖的JPEG文 件數據對比發(fā)現的問題。具體原因不明。實際上,就是必須對每個顏色分量單元的奇數行(每個顏色分量單元有8行,假設把它按0、1、6、7編出行號),即1、3、5、7行,進行 取相反數操作(正的變負,負的
38、變正)。.反離散余弦變換之前提到,文件中的數據是在編碼時通過正向離散余弦變換(FDCT) 進行時空域向頻率域變換而得到的結果,所以現在解碼就必須將其反向離 散余弦變換(IDCT),就是把顏色分量單元矩陣中的頻率域數值向時空域 轉換。并且,原來的頻率域的矩陣大小為8*8 ,則經過反向離散余弦變換后, 時空域的矩陣仍然是8*8。設正負糾正后的頻率域矩陣為 Fuv,而反向離散余弦變換后的矩陣為 fij,其中0&u,v,i,j 70具體使用的公式如下:,其中C (u)=(當 u=0),C(u)=1 (當 uw0);C (v)=(當 v=0),C(u)=1 (當 vw0);另外補充一下正向離散余弦變換的
39、公式,用于編碼:. YCrCb 向 RGB 轉換要在屏幕上顯示圖像,就必須以 RGB模式表示圖像的顏色。所以,解 碼時需要把YCrCb模式向RGB模式轉換。正如前面提到,并不是每種顏色分量的采樣因子都一樣,所以轉換時需 要注意。如果采樣因子是1: 1: 1,則每一個像素點的3個顏色分量都被采 樣,所以沒有問題。但4: 1: 1的采樣因子就不一樣了。由 “初步了解圖12頁如有你有幫助,請購買下載,謝謝!像數據流的結構” 一節(jié)中對4: 1: 1的采樣因子的分析,可以知道一個MCU 里有4個Y分量單元,而Cr分量和Cb分量各自只有1個分量單元。以圖 2為例,僅有的一個Cr分量單元(紅色的64個采樣點)應該平鋪用于4 個Y分量單元,即左上角16個值用于Y1,右上角16個值用于Y2,左下 角16個值用于Y5,右下角16個值用于Y6。換句話說,一個Cr采樣點服 務于4個Y采樣點。對于Cb分量,道理一樣。R=YG=Y-0.34414*CrB=Y還有一個問題,通過變換得出的另外,由于離散余弦變化要求定義域的對稱,所以在編碼時把 RGB的 數值范圍從0, 255統(tǒng)一減去128偏移成卜128, 127。因此解碼時必須為每 個分量加上128。具體公式如下: TOC o 1-5 h z +1.402*Cb+128;-0.71414*Cb +128;+1.772*Cb+128;R
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省無錫市達標名校2025屆中考生物考試模擬沖刺卷含解析
- 安徽省鳳陽縣市級名校2025屆初中生物畢業(yè)考試模擬沖刺卷含解析
- 防止惡意競爭的價格保護措施
- 南方醫(yī)科大學《汽車底盤結構與維修》2023-2024學年第一學期期末試卷
- 南充電影工業(yè)職業(yè)學院《外國文學(雙語)》2023-2024學年第一學期期末試卷
- 南昌影視傳播職業(yè)學院《程序設計技術課程設計》2023-2024學年第一學期期末試卷
- 南昌理工學院《英語課程標準與教材研究》2023-2024學年第一學期期末試卷
- 南昌大學《電子系統(tǒng)設計》2023-2024學年第一學期期末試卷
- 民辦四川天一學院《罐頭食品加工與軟飲料工藝學》2023-2024學年第一學期期末試卷
- 隴南師范高等??茖W校《軟件應用》2023-2024學年第一學期期末試卷
- 給男友的道歉信10000字(十二篇)
- 2020年高級統(tǒng)計實務與案例分析真題及答案
- 全面質量管理(TQM)基本知識
- 練字本方格模板
- 產品供貨質量保障措施
- 電力電纜高頻局放試驗報告
- 《老山界》第1第2課時示范公開課教學PPT課件【統(tǒng)編人教版七年級語文下冊】
- JJG 517-2016出租汽車計價器
- JJF 1914-2021金相顯微鏡校準規(guī)范
- GB/T 32045-2015節(jié)能量測量和驗證實施指南
- GB/T 10001.6-2021公共信息圖形符號第6部分:醫(yī)療保健符號
評論
0/150
提交評論