2013年1月13日 星期日

99361130 莊鈞凱 HW5

  JPEG,一種對影像的失真壓縮標準,老實說,我真的想不到有一天能夠深入了解這樣的圖片標準格式。利用PSPad開啟JPEG檔案後,映入眼前的16位元的資料,以前在看到這樣的資料時總覺得是天書,根本無從下手,現在終於了解到,下手?請翻開規格書。

(圖一)JPEG圖檔

  這就是這次拿來研究的JPEG圖片了,因為JPEG幾乎是現在網頁上最普遍可見的圖片格式,尋找圖片可說是不費吹灰之力,伸手可得。
  在PSPad官網下載該軟體後,就可以檢視該圖檔的16位元格式了,順帶一提,安裝完軟體後我的瀏覽器首頁就被綁架了,讓我不是很喜歡他。

(圖二)FFD8、FFD9

  上圖可見,資料的最前端寫著FFD8,最末端則是FFD9,如此顯而易見的事實,讓我們看看規格書怎麼說,「Start of image」、「End of image」,對啦!沒錯,就是圖片的起始和結束這麼簡單。

(圖三)FFE0

  接在FFD8之後,我們第二個可以看到的是FFE0,參見規格書的說明:Reserved for application segments,是的!此處就是讓應用程式可以塞入自己家的相關資訊,想起老師上課提到的,用Photoshop修圖後的照片,在這邊就可見端倪了。由此圖可見,有意義的字串為JFIF、Ducky,甚至還看到了Adobe的字串,總之這邊看看就好,順帶一提,JFIF全名為JPEG File Interchange Format,是JPEG的延伸額外標準。

(圖四)FFDB

  這邊我們看到了FFDB,記錄量化表的資訊,將原來人類看的比較順眼的量化矩形依照Z字型走向來羅列成這邊的序列。量化,就是JPEG失真的關鍵點了。

(圖五)FFC4

  主角登場:FFC4!這邊就是老師多次強調的部份了,這邊可以整理出兩個DC Table及兩個AC Table,以便後面的YUV資料來對應。
  首先老師有提到,有些圖片將所有的DC、AC Table資料都放到一個FFC4標籤之後,而有些圖片則可以找到四個FFC4的標籤,以此圖來說,他是屬於前者。
  從FFC4後的00B4可知道這段資料的長度為180,而00B4後的00則知道此後的一段資料為DC-0 Table,整理如下:

DC-0 Table
Category
Code length
HuffCode
Code word
3
2
0
00
4
2
1
01
2
3
4
100
5
3
5
101
1
4
12
1100
6
4
13
1101
0
5
28
11100
7
5
29
11101
8
5
30
11110
9
6
62
111110
10
7
126
1111110

  此段資料之後的下一碼為01,表達從此之後為DC-1 Table,我們一樣把他整理如下:

DC-1 Table
Category
Code length
HuffCode
Code word
1
2
0
00
2
2
1
01
3
2
2
10
0
3
6
110
4
4
14
1110
5
5
30
11110
6
6
62
111110
7
7
126
1111110
8
8
254
11111110
  此段資料之後則為AC-0 Table及AC-1 Table,做法雷同,推導上的意義是一樣的。

(圖六)FFDA

  在FFC4該段資料之後緊接著就是FFDA,規格書上寫著:Start of scan,我們可以知道從此處開始,後方就是真正掃描自圖片的編碼,在佐以前述Frame header的資訊,兩相對應,就可以把資料有意義的output出來了。

  實際上去查閱JPEG的檔案內容,感覺真的很不一樣,比較如C++那般的高階語言,這次作業像是往影像處理最根本的技術去鑽研,我們當然可以直接用市面上許許多多的影像處理軟體來操作、修改我們的圖片,然而在學術研究上,追根究底的去了解JPEG的檔案內容,對日後的研究發展可以產生很大的作用,畢竟連最根本的東西都弄懂了,馬步紮的穩,練功就好辦的多了!


沒有留言:

張貼留言