JPEG解碼——(1)JPEG文件格式概覽

  因爲懶和人的忘性,之前作的一些筆記再回過頭看時又有些生疏了,我決定把一些內容整理出來,以供有須要的來參考。html

瞭解的人知道其價值所在,不知道的人就棄之如廢物吧。git

  本篇是JPEG解碼系列的第一篇——JPEG文件格式概覽。github

1. 圖片文件的數據是什麼?app

  這是一幅人眼可視的圖片工具

  

  這是其對應的二進制數據:(因爲二進制數據量浩如煙海,只截取頭部的一些數據,使用的工具是WinHex)編碼

  

 2. 爲何須要文件格式來表達圖像?spa

  這就凸顯了規範的重要性,使用同一套標準,各廠商都按照這個標準進行文件格式封裝,那麼你拿到別人的照片後就知道code

瞭如何進行(文件格式)解析和(jpeg)解碼了。htm

  這也好理解,不一樣國家不一樣語言的人們如何交流?使用通用的標準——英語。blog

  jpeg文件格式也自有其標準,文件格式標準參考電聯的JFIF,編解碼標準參考電聯的ITU-T81。

3. 標準文檔太長,沒耐心讀下去,怎麼辦?

  標準規範的頁碼都是很長的,用於照顧到各個角落和細節。

  可是,各個廠商實現時,確定不會實現規範的所有內容,只需知足標準中最重要的一部分便可。

4. jpeg二進制數據解讀

  通常狀況下,是按照這個順序排列的:

TAG類型 數值 名稱 其餘備註
SOI 0xFFD8 Start of Image 必帶
APP0 0xFFE0 application0 必帶
APPn 0xFFEn applicationn 可選帶(APP1通常爲Exif信息)
DQT 0xFFDB Define Quantization Table 必帶
SOF 0xFFC0 Start of Frame 必帶
DHT 0xFFC4 Define Huffman Table 必帶
SOS 0xFFDA Start of Scan 必帶
compress data 。。。 。。。 必帶
EOI 0xFFD9 End of Image 必帶

 

 

 

 

 

 

 

 

 

 

 

 

   以下爲標註各類類型TAG,其中EOI在文件末尾未貼出來:

  

5. 關於各TAG的一些說明

  5.1) 文件名末尾.jpg不表明真的是一個jpeg圖片,由於你能夠隨意更改一個文件的後綴名。

  5.2)JPEG文件必須以0xFF DB開頭和以0xFF D9結尾。

  5.3)DQT爲量化表,該類型表有兩個表,一個表示Y份量的量化表,另一個爲UV份量共用的量化表。

    其中,TAG後面的0x 00 43表示這個TAG組中除去TAG兩個字節外,共有多少個字節組成,後面的0x00爲第幾張表。

    量化表爲DCT變換系數,因爲是8x8的二維DCT變換,故係數個數爲64,這也便是:0x43 - 3 = 0x40 = 64。

  5.4)SOF爲幀圖像開始,記錄了採樣精度、圖形寬/高、份量個數、水平/垂直採樣因子、量化表號等信息。

        例如,摘抄下SOF下的這幾個字節:0x00 11 08 02 D0 03 E0 03 01 22 00 02 11 01 03 11 01

       其中,0x00 11表明SOF下共有17字節;

       0x08表明採樣精度,幾乎都是用8位進行採樣精度,即一個像素點能夠有2^8=256級過渡;

       0x02 D0表明圖像高,即0x02d0=720像素高;

       0x03 E0表明圖像寬,即0x03E0=992像素寬;

       0x03表明份量表數,爲3,分別表明Y、U和V的表;

       0x01 22 00中第一個字節01表明量化表序號(從1開始),第二個22表明水平/垂直採樣因子(高四位爲水平採樣因子,第四位爲垂直採樣因子),第三個00表明量化表id=0;

       0x02 11 01中第一個字節01表明量化表序號爲2,第二個11表明水平/垂直採樣因子都爲1,第三個00表明量化表id=1;

       0x03 11 01中第一個字節01表明量化表序號爲3,第二個11表明水平/垂直採樣因子都爲1,第三個00表明量化表id=2;

    須要補充說明一下,採樣因子和量化表的問題。

    採樣因子:該圖象的Y份量的寬/高採樣因子都爲2,而UV份量的採樣因子都爲1,則在同一個方向上(水平或垂直方向),Y份量採樣點是UV份量採樣點的2倍,

         若是圖像Y份量寬高分別W和H,那麼U和V份量只採樣了W/2和H/2個點,這也表明原始圖象的size=1.5*W*H。

         有些圖像的第一張表多是2和1或1和2,再或都是1,可是第二和第三張表的採樣因子都是1。

    量化表:Y份量使用一張量化表,UV份量使用另一張表,由於DQT表通常就兩張。

  5.5)DHT爲霍夫曼表,由四個表組成,分表表明:

    [0][0]——直流霍夫曼表0,Y份量直流部分解碼時使用

    [0][1]——直流霍夫曼表0,UV份量直流部分解碼時使用

    [1][0]——交流霍夫曼表0,Y份量交流部分解碼時使用

    [1][1]——交流霍夫曼表1,UV份量交流部分解碼時使用

  5.6)SOS爲掃描開始,其表明霍夫曼表關係進行映射。

  5.7)SOS後面就爲真正的編碼數據,這是數據的大頭,相比於此,文件頭的size實際上是很是之少。

  5.8)EOI爲圖像結束的標誌,圖像必須以此結束。

相關文章
相關標籤/搜索