星期四, 10月 04, 2007

[研究日誌]Frame header in JPEG

唔...
根據BOSS的說法
我似乎已經懂了JPEG規格書了
應該可以寫完JPEG Decoder了

真開心
覺得自己被認同了XDD
不過
因為人家現在的那個程式長的太大了
很礙眼啊
很難Debug
可是程式有問題又超痛苦的
現在想說先整理自己的想法
重新寫一次程式

首先
在Start of Image之後
我們會讀到DQT
也就是define Quantization table
接著會讀到Frame Header
在Frame Header中的資訊對於我們整張圖是很重要的
由規格書P35頁可以知道
除了一開始的tag之外
Frame Header還提供了Lf,P,Y,X,Nf,[C,H,V,Tq]等的資訊
Lf 就是Frame的Length是指這串tag佔了幾個byte
 因為[C,H,V,Tq]可以有很多組啊
所以要跟人家說到多少個byte是我現在要解讀的東西
不然會讀到錯的資訊
然後由Y跟X就可以知道這張影像的大小
New相對應的陣列

可是要new幾個陣列咧
如果一張影像都是灰階
那就不需要那麼多個啦
一個就好!!
這時候Nf就派上用場了
Nf就是Number of Frame component
所以根據這個的值去產生Nf個 X * Y 的陣列

然後啊
JPEG不是有做Downsampling的動作
所以要根據接下來的[C,H,V,Tq]去做還原sampling的動作
那個C只是編號
H和V則是sampling的係數
而Tq則是這個Frame Component 要讀哪個Quantization Table
這就是Frame Header的功用