我很難理解JPEG文件格式的ITU-T T.81規範。希望這裏的其他人試圖解析JPEG文件和/或瞭解這種文件格式的細節。解析JPEG文件格式:熵編碼段(ECS)的格式?
該規範指出,ECS0段在SOS段之後開始,但我無法找到規範中實際談到的ECS0段格式或檢測其開始的方式。在線簡單的JPEG實現有限的幫助,因爲他們假設了很多關於他們解析的JPEG的東西。
任何人都可以指向正確的方向嗎?
僅供參考:JPEG文件格式規格爲here。
我很難理解JPEG文件格式的ITU-T T.81規範。希望這裏的其他人試圖解析JPEG文件和/或瞭解這種文件格式的細節。解析JPEG文件格式:熵編碼段(ECS)的格式?
該規範指出,ECS0段在SOS段之後開始,但我無法找到規範中實際談到的ECS0段格式或檢測其開始的方式。在線簡單的JPEG實現有限的幫助,因爲他們假設了很多關於他們解析的JPEG的東西。
任何人都可以指向正確的方向嗎?
僅供參考:JPEG文件格式規格爲here。
當標準談到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分量。
我必須解碼完整的霍夫曼流才能確定ECS的結束嗎?或者,我可以通過搜索FFxx來檢測ECS數據的結尾嗎? – me2 2010-03-20 06:21:36
如果它是一個正確形成的圖像,那麼您可以搜索FFxx,其中xx!= 0以查找下一個段(在ECS內應將FF00解釋爲FF),這可能不一定是圖像的末端(即,RST標記)。要確定流是否真的有效,你必須完全解碼它。 – matja 2010-03-20 08:28:30