2010-03-18 67 views
6

我很難理解JPEG文件格式的ITU-T T.81規範。希望這裏的其他人試圖解析JPEG文件和/或瞭解這種文件格式的細節。解析JPEG文件格式:熵編碼段(ECS)的格式?

該規範指出,ECS0段在SOS段之後開始,但我無法找到規範中實際談到的ECS0段格式或檢測其開始的方式。在線簡單的JPEG實現有限的幫助,因爲他們假設了很多關於他們解析的JPEG的東西。

任何人都可以指向正確的方向嗎?

僅供參考:JPEG文件格式規格爲here

回答

4

當標準談到ECS時,它不會像SOS那樣將其稱爲段類型,並帶有標題和尺寸組件;它實際上是表示構成圖像數據的MCU的原始Huffman壓縮比特流。它被填充以填充整數個字節,並且可以選擇性地與RST頭部交織(正式地,RST頭部與ECS分離)。

當標準說ECS ,這意味着第0次(第一次)ECS運行,而不是像SOF0/SOF1/SOF2/etc如何是不同類型的特定ECS類型。

基線DCT實施例:

FF DA // SOS header 
00 08 // 8 bytes 
01 // 1 channel 
01 00 // channel 1 QT 0 HT 0 
00 3F 00 // start/end spectral selector, successive approximation bit high/low 
12 34 56 78 ... // Huffman-compressed MCU raw data 
(sequence of Fuffman codes looked-up in AC/DC Huffman tables) 

FF D9 // EOI 

一個方便的用於幫助解釋JFIF的stucture免費程序是JPEGsnoop(http://www.impulseadventure.com/photo/jpeg-snoop.html)。菜單中有一個「Full Decode」選項,它顯示原始Huffman比特流,它如何映射到Huffman符號,進行去量化,然後映射到DCT分量。

+0

我必須解碼完整的霍夫曼流才能確定ECS的結束嗎?或者,我可以通過搜索FFxx來檢測ECS數據的結尾嗎? – me2 2010-03-20 06:21:36

+0

如果它是一個正確形成的圖像,那麼您可以搜索FFxx,其中xx!= 0以查找下一個段(在ECS內應將FF00解釋爲FF),這可能不一定是圖像的末端(即,RST標記)。要確定流是否真的有效,你必須完全解碼它。 – matja 2010-03-20 08:28:30