隨筆-57  評論-202  文章-17  trackbacks-0
          6.3 JPEG格式

          6.3.1 簡介

          微處理機中的存放順序有正序(big endian)和逆序(little endian)之分。正序存放就是高字節(jié)存放在前低字節(jié)在后,而逆序存放就是低字節(jié)在前高字節(jié)在后。例如,十六進(jìn)制數(shù)為A02B,正序存放就是A02B,逆序存放就是2BA0。摩托羅拉(Motorola)公司的微處理器使用正序存放,而英特爾(Intel)公司的微處理器使用逆序。JPEG文件中的字節(jié)是按照正序排列的。


          JPEG委員會在制定JPEG標(biāo)準(zhǔn)時,定義了許多標(biāo)記(marker)用來區(qū)分和識別圖像數(shù)據(jù)及其相關(guān)信息,但筆者沒有找到JPEG委員會對JPEG文件交換格式的明確定義。直到1998年12月從分析網(wǎng)上具體的JPG圖像來看,使用比較廣泛的還是JPEG文件交換格式(JPEG File Interchange Format,JFIF)
          本號為1.02。這是1992年9月由在C-Cube Microsystems公司工作的Eric Hamilton提出的。此外還有TIFF JPEG等格式,但由于這種格式比較復(fù)雜,因此大多數(shù)應(yīng)用程序都支持JFIF文件交換格式。

          JPEG文件使用的顏色空間是CCIR 601推薦標(biāo)準(zhǔn)進(jìn)行的彩色空間(參看第7章)。在這個彩色空間中,每個分量、每個像素的電平規(guī)定為255級,用8位代碼表示。從RGB轉(zhuǎn)換成YCbCr空間時,使用下面的精確的轉(zhuǎn)換關(guān)系:

                 Y = 256 * E'y

                Cb = 256 * [E'Cb] + 128

                Cr = 256 * [E'Cr] + 128
          其中亮度電平E'y和色差電平E'Cb和E'Cb分別是CCIR 601定義的參數(shù)。由于E'y的范圍是0~1,E'Cb和E'Cb的范圍是-0.5~+0.5,因此Y, Cb和Cr的最大值必須要箝到255。于是RGB和YCbCr之間的轉(zhuǎn)換關(guān)系需要按照下面的方法計算。

          (1) 從RGB轉(zhuǎn)換成YCbCr

          YCbCr(256級)分量可直接從用8位表示的RGB分量計算得到:

                 Y =   0.299 R + 0.587 G  + 0.114 B

               Cb = - 0.1687R - 0.3313G  + 0.5   B + 128

              Cr = 0.5 R - 0.4187G - 0.0813 B + 128

          需要注意的是不是所有圖像文件格式都按照R0,G0,B0,…… Rn,Gn,Bn的次序存儲樣本數(shù)據(jù),因此在RGB文件轉(zhuǎn)換成JFIF文件時需要首先驗證RGB的次序。

          (2) 從YCbCr轉(zhuǎn)換成RGB

          RGB分量可直接從YCbCr(256級)分量計算得到:

               R = Y                 + 1.402 (Cr-128)

                G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)

                B = Y + 1.772 (Cb-128)

          在JFIF文件格式中,圖像樣本的存放順序是從左到右和從上到下。這就是說JFIF文件中的第一個圖像樣本是圖像左上角的樣本。

          6.3.2 文件結(jié)構(gòu)

          JFIF文件格式直接使用JPEG標(biāo)準(zhǔn)為應(yīng)用程序定義的許多標(biāo)記,因此JFIF格式成了事實上JPEG文件交換格式標(biāo)準(zhǔn)。JPEG的每個標(biāo)記都是由2個字節(jié)組成,其前一個字節(jié)是固定值0xFF。每個標(biāo)記之前還可以添加數(shù)目不限的0xFF填充字節(jié)(fill byte)。下面是其中的8個標(biāo)記:

          1. SOI  0xD8            圖像開始
          2. APP0 0xE0            JFIF應(yīng)用數(shù)據(jù)塊
          3. APPn 0xE1 - 0xEF    其他的應(yīng)用數(shù)據(jù)塊(n, 1~15)
          4. DQT  0xDB           量化表
          5. SOF0 0xC0            幀開始
          6. DHT  0xC4           霍夫曼(Huffman)表
          7. SOS  0xDA           掃描線開始
          8. EOI  0xD9            圖像結(jié)束

          為使讀者對JPEG定義的標(biāo)記一目了然,現(xiàn)將JPEG的標(biāo)記碼列于表6-05,并保留英文解釋。

          表6-05 JPEG定義的標(biāo)記

          Symbol

          (符號)

          Code Assignment

          (標(biāo)記代碼)

          Description

          (說明)

          Start Of Frame markers, non-hierarchical Huffman coding

          SOF0

          0xFFC0

          Baseline DCT

          SOF1

          0xFFC1

          Extended sequential DCT

          SOF2

          0xFFC2

          Progressive DCT

          SOF3

          0xFFC3

          Spatial (sequential) lossless

          Start Of Frame markers, hierarchical Huffman coding

          SOF5

          0xFFC5

          Differential sequential DCT

          SOF6

          0xFFC6

          Differential progressive DCT

          SOF7

          0xFFC7

          Differential spatial lossless

          Start Of Frame markers, non-hierarchical arithmetic coding

          JPG

          0xFFC8

          Reserved for JPEG extensions

          SOF9

          0xFFC9

          Extended sequential DCT

          SOF10

          0xFFCA

          Progressive DCT

          SOF11

          0xFFCB

          Spatial (sequential) Lossless

          Start Of Frame markers, hierarchical arithmetic coding

          SOF13

          0xFFCD

          Differential sequential DCT

          SOF14

          0xFFCE

          Differential progressive DCT

          SOF15

          0xFFCF

          Differential spatial Lossless

          Huffman table specification

          DHT

          0xFFC4

          Define Huffman table(s)

          arithmetic coding conditioning specification

          DAC

          0xFFCC

          Define arithmetic conditioning table

          Restart interval termination

          RSTm

          0xFFD0~0xFFD7

          Restart with modulo 8 counter m

          Other marker

          SOI

          0xFFD8

          Start of image

          EOI

          0xFFD9

          End of image

          SOS

          0xFFDA

          Start of scan

          DQT

          0xFFDB

          Define quantization table(s)

          DNL

          0xFFDC

          Define number of lines

          DRI

          0xFFDD

          Define restart interval

          DHP

          0xFFDE

          Define hierarchical progression

          EXP

          0xFFDF

          Expand reference image(s)

          APPn

          0xFFE0~0xFFEF

          Reserved for application use

          JPGn

          0xFFF0~0xFFFD

          Reserved for JPEG extension

          COM

          0xFFFE

          Comment

          Reserved markers

          TEM

          0xFF01

          For temporary use in arithmetic coding

          RES

          0xFF02~0xFFBF

          Reserved

          JPEG文件由下面的8個部分組成:

          (1) 圖像開始SOI(Start of Image)標(biāo)記

          (2) APP0標(biāo)記(Marker)

          ① APP0長度(length)

          ② 標(biāo)識符(identifier)

          ③ 版本號(version)

          ④ X和Y的密度單位(units=0:無單位;units=1:點數(shù)/英寸;units=2:點數(shù)/厘米)

          ⑤ X方向像素密度(X density)

          ⑥ Y方向像素密度(Y density)

          ⑦ 縮略圖水平像素數(shù)目(thumbnail horizontal pixels)

          ⑧ 縮略圖垂直像素數(shù)目(thumbnail vertical pixels)

          ⑨ 縮略圖RGB位圖(thumbnail RGB bitmap)

          (3) APPn標(biāo)記(Markers),其中n=1~15(任選)

          ① APPn長度(length)

          ② 由于詳細(xì)信息(application specific information)

          (4) 一個或者多個量化表DQT(difine quantization table)

          ① 量化表長度(quantization table length)

          ② 量化表數(shù)目(quantization table number)

          ③ 量化表(quantization table)

          (5) 幀圖像開始SOF0(Start of Frame)

          ① 幀開始長度(start of frame length)

          ② 精度(precision),每個顏色分量每個像素的位數(shù)(bits per pixel per color component)

          ③ 圖像高度(image height)

          ④ 圖像寬度(image width)

          ⑤ 顏色分量數(shù)(number of color components)

          ⑥ 對每個顏色分量(for each component)

            • ID
            • 垂直方向的樣本因子(vertical sample factor)
            • 水平方向的樣本因子(horizontal sample factor)
            • 量化表號(quantization table#)

          (6) 一個或者多個霍夫曼表DHT(Difine Huffman Table)

          ① 霍夫曼表的長度(Huffman table length)

          ② 類型、AC或者DC(Type, AC or DC)

          ③ 索引(Index)

          ④ 位表(bits table)

          ⑤ 值表(value table)

          (7) 掃描開始SOS(Start of Scan)

          ① 掃描開始長度(start of scan length)

          ② 顏色分量數(shù)(number of color components)

          ③ 每個顏色分量

            • ID
            • 交流系數(shù)表號(AC table #)
            • 直流系數(shù)表號(DC table #)

          ④ 壓縮圖像數(shù)據(jù)(compressed image data)

          (8) 圖像結(jié)束EOI(End of Image)

          表6-06表示了APP0域的詳細(xì)結(jié)構(gòu)。有興趣的讀者可通過UltraEdit或者PC TOOLS等工具軟件打開一個JPG圖像文件,對APP0的結(jié)構(gòu)進(jìn)行分析和驗證。

          表6-06 JFIF格式中APP0域的詳細(xì)結(jié)構(gòu)

          偏移

          長度

          內(nèi)容

          塊的名稱

          說明

          0

          2 byte

          0xFFD8

          (Start of Image,SOI)

          圖像開始

          2

          2 byte

          0xFFE0

          APP0(JFIF application segment)

          JFIF應(yīng)用數(shù)據(jù)塊

          4

          2 bytes

           

          length of APP0 block

          APP0塊的長度

          6

          5 bytes

           

          "JFIF"+"0"

          識別APP0標(biāo)記

          11

          1 byte

           

          <Major version>

          主要版本號(如版本1.02中的1)

          12

          1 byte

           

          <Minor version>

          次要版本號(如版本1.02中的02)

          13

          1 byte

           

          <Units for the X
          and Y densities>

          X和Y的密度單位

          units=0:無單位

          units=1:點數(shù)/英寸

          units=2:點數(shù)/厘米

          14

          2 bytes

           

          <Xdensity>

          水平方向像素密度

          16

          2 bytes

           

          <Ydensity>

          垂直方向像素密度

          18

          1 byte

           

          <Xthumbnail>

          縮略圖水平像素數(shù)目

          19

          1 byte

           

          <Ythumbnail>

          縮略圖垂直像素數(shù)目

           

          3n

           

          < Thumbnail RGB bitmap>

          縮略RGB位圖(n為縮略圖的像素數(shù))

               

          Optional JFIF extension APP0 marker segment(s)

          任選的JFIF擴展APP0標(biāo)記段

           

          ……

           

          ……

           
           

          2 byte

          0xFFD9

          (EOI) end-of-file

          圖像文件結(jié)束標(biāo)記

           

          posted on 2005-06-22 16:53 小米 閱讀(8751) 評論(7)  編輯  收藏 所屬分類: 其它

          評論:
          # re: JPEG格式[未登錄] 2007-03-21 13:04 | steven
          你好~請問你有 JPEG huffman AC DC 的 huffman table嗎??

          對照表~我非常需要,如果有的可寄到我的MAIL: R9406021@mail.dyu.edu.tw

          非常感謝~~感激不盡  回復(fù)  更多評論
            
          # re: JPEG格式 2008-10-24 15:41 | lianaie
          求 JPEG huffman AC DC 的 huffman table   回復(fù)  更多評論
            
          # re: JPEG格式 2008-11-14 16:00 | shen
          文中提到獲取尺寸(也就是高度和寬度) 是在出現(xiàn)0xff 0xc0后的第四位到第7位來獲得,請問 如果該文件中出現(xiàn)了兩次0xff 0xc0,那該如何處理  回復(fù)  更多評論
            
          # re: JPEG格式 2008-11-29 13:57 | 新用戶
          我有好多jpeg的圖片打不開想請您幫幫忙Q893268446謝謝了!  回復(fù)  更多評論
            
          # re: JPEG格式 2009-02-11 19:23 | 王強
          我有好多jpeg的圖片打不開想請您幫幫忙Q:375970326  回復(fù)  更多評論
            
          # re: JPEG格式 2009-04-10 02:48 | yefe
          下的電影  回復(fù)  更多評論
            
          # re: JPEG格式 2010-07-19 18:20 | cch
          您好!
          請問您有AC DC 的 huffman table嗎?
          如果有的請發(fā)到我的郵箱: cch001@163.com
          Thank you!
            回復(fù)  更多評論
            
          主站蜘蛛池模板: 巧家县| 大宁县| 恭城| 博湖县| 友谊县| 盐津县| 北票市| 青田县| 余干县| 福建省| 武夷山市| 建宁县| 井陉县| 昌吉市| 新干县| 凤阳县| 同德县| 应城市| 林甸县| 林周县| 东至县| 蕉岭县| 保德县| 建宁县| 五家渠市| 新丰县| 芷江| 大名县| 安丘市| 兰考县| 普定县| 雷波县| 昭苏县| 榆中县| 彭阳县| 渭南市| 阆中市| 定陶县| 常山县| 鄂托克前旗| 广元市|