JPEG標準中的霍夫曼表格是通過兩個步驟的統計信息生成的。其中一個步驟是實現此圖片給出的功能/方法:(此圖片在JPEG標準的附件K中給出): Jpeg霍夫曼編碼程序
問題就在這裏。在標準(附錄C)先前說這樣的句子:
霍夫曼表是在一個16字節的列表(BITS)給出了每個碼長碼的數目來指定從 1〜16這之後是8位符號值(HUFFVAL)的列表,每個符號值被分配一個霍夫曼碼。
顯然BITS
是16個元素的列表。但在上圖中,i
首先設置爲32(i=32
),那麼我們要訪問BITS[i]
。可能我誤解了一些東西,所以請讓別人給我一個答案。
這裏是圖象的JPEG標準描述: 圖K.3給出的程序,用於調整BITS列表,以便沒有任何代碼是大於16位長。由於最長霍夫曼代碼的符號配對爲 ,因此每次從這個長度類別中刪除符號。對 (短一點)的前綴分配給一對;然後(跳過該前綴長度的BITS條目),將來自下一個最短的非零BITS條目的代碼字 轉換爲用於兩個比特長的兩個代碼字的前綴。在BITS 列表減少到16位的最大代碼長度之後,最後一步從代碼長度 計數中刪除保留代碼點。
這裏是上面的圖片代碼:
void adjustBitLengthTo16Bits(vector<char>&BITS){
int i=32,j=0;
while(1){
if(BITS[i]>0){
j=i-1;
j--;
while(BITS[j]<=0)
j--;
BITS[i]=BITS[i]-2;
BITS[i-1]=BITS[i-1]+1;
BITS[j+1]=BITS[j+1]+2;
BITS[j]=BITS[j]-1;
continue;
}
else{
i--;
if(i!=16)
continue;
while(BITS[i]==0)
i--;
BITS[i]--;
return;
}
}
}
多少次我說你是國王的男人:)。你從哪裏讀到這些固定表?也許它可以幫助我! – MrD 2012-02-02 19:30:37
你可以在標準中找到附件K.3.3中固定表格的例子。我猜大約。所有JPEG的90%使用這些代碼。 – onemasse 2012-02-02 19:59:55
M先生 - 也許我應該提供課程或私人課程:) – BitBank 2012-02-02 20:40:32