Kakadu中實(shí)現(xiàn)的JPEG2000量化和界定參數(shù)
JPEG2000 的壓縮方式有可逆和不可逆兩種方式,這里分別介紹。
界定
在可逆和不可逆方式中,需要為塊編碼器提供待編碼整數(shù)的絕對范圍一致的解釋,這叫界定。簡單的說,也就是 DWT 變化后的系數(shù)在什么范圍內(nèi),用多少二進(jìn)制位來表示。
不可逆方式
不可逆 DWT 變化后,通過量化將樣本映射到量化索引中,然后再進(jìn)行編碼。因?yàn)榱炕旧硎遣豢赡娴?,所以可逆方式中不存在量化?/span>
不可逆方式中,界定與量化的參數(shù)有關(guān)。
量化
不可逆方式采用的是恒域( deadzone )標(biāo)量量化,量化操作由步長參數(shù) (△ b )定義:
q b [n] = sign(y b [n]) [|y b [n]|/ △ b ]???????????????????? -------------------------- ( 1 )
其中 y b [n] 表示子代樣本,被歸一化到標(biāo)稱范圍: -1/2 到 1/2 , q b [n] 表示量化之后的索引。每個(gè)子帶可以有不同的步長參數(shù) △ b 。
可以將上面的表達(dá)式理解符號部分和量值部分:
符號部分由 X b [n] = sign(y b [n]) 給出,而量值部分由 v b [n] =[|y b [n]|/ △ b ] 給出。
這里需要注意的是步長參數(shù)由指數(shù) E b (Epsilon) 和尾數(shù) u b 給出 :
△ b = 2 -E b (1+u b /2 11 )-------------------------------------------------------- ( 2 )
E
b
和
u
b
都是非負(fù)整數(shù);范圍為:
0<=Eb <25, 0<=ub <211-----------------------------------------------------
(
3
)
界定
編碼器和解碼器一般取相同的位數(shù)來表示子代 b 中的量化索引 v b [n] ,這個(gè)值是 K b max 。
當(dāng)然子帶的樣本值可能會超出規(guī)定的標(biāo)稱范圍,因此引入一個(gè)參數(shù) G ,來規(guī)定所有子帶樣本遵從下面的界限:
這里的 G 叫做保護(hù)位( guard bits )。取 0 到 7 之間的值。
結(jié)合前面的量化步驟,這里來推導(dǎo)幾個(gè)參數(shù)。
由( 2 )和( 4 )得到:
vb[n] =[|yb[n]|/
△
b
]<2Eb+G-1
具體如下:
v b [n] =[|y b [n]|/ △ b ]= v b [n] =[|y b [n]|/ ( 2 -E b (1+u b /2 11 ) ) ]
而
y
b
[n] <
[|y
b
[n]|/
(
2
-E
b
(1+u
b
/2
11
)
)
] < [
另外, 2 -E b (1+u b /2 11 ) < 2 -E b ,因?yàn)?/span> E b >0 ,切 u b /2 11 小于 1 且大于 0 。
從而:
v
b
[n]< [
那么這里的
K
b
max
也可以表示為
0
和
Eb+G-1
的最大值了。
因此可以看到
Eb + G =
K
b
max
+1
K
b
max
= Eb + G -1----------------------------------------------------
(
5
)
反量化
如果采用恒域標(biāo)量量化,反量化操作將一個(gè)量化索引重建一個(gè)位于對應(yīng)量化間隔中某個(gè)確定的位置。用 ^y b 表示,那么:
^y b [n] = 0, 如果 vb[n] = 0
^y b [n] = X b [n]*(v b [n]+& b, v b[n] )* △ b , 如果 vb[n] != 0
&
b,
v
=1/2
對應(yīng)于中間點(diǎn)的重建。
可逆方式
量化
可逆方式中實(shí)際上沒有量化,因此提供給塊編碼器的量化索引與整數(shù)的子代樣本是相等的;用不可逆方式中的符號來表示為:
q b [n] =y b [n]?? ----------------------------------------------------------------(6)??????
界定
可逆方式中樣本值的標(biāo)稱范圍可以使用原來樣本深度 B 和線性化小波核的增益來確定。如下:
-2 B-1+Xb+G <y b [n] < 2 B-1+Xb+G
G 是額外的保護(hù)位,而 X b 是線性化小波核的標(biāo)稱增益的不一定都為 1 ;具體情況是:
X LLd = 0, X LHd = X HLd = 1, X HHd = 2
那么因此可以得到 vb[n]] 的位數(shù)為:
K b max =B-1+X b +G---------------------------------------------------------------- (7)?
在 JPEG2000 中使用 G 和 Eb 來表示 K b max 的。不可逆與可逆方式有相同的表現(xiàn),但對于不可逆方式中 Eb 表示量化步長指數(shù),而可逆方式中是界定參數(shù),同時(shí)由編碼器設(shè)置 Eb 來保證有足夠的位數(shù)來表示每個(gè)樣本的大小。
那么由( 5 )和( 7 ),這里可以得到:
Eb = B + Xb---------------------------------------------------------------- (8)
在可逆變換中,我們使用如下的轉(zhuǎn)換方式:
X Y [n] = [(X R [n] + 2X G [n] +X B [n])/4]
X Db [n] = X B [n] –X G [n]
X Dr [n] = X R [n] –X G [n]
由于在進(jìn)行變換之前需要對樣本進(jìn)行水平偏移,因此如果假設(shè)數(shù)據(jù)的樣本值是 B 位,那么變換之前的 R , G , B 的樣本范圍是:
-2
B-1
<= X[n] <= 2
B-1
-1
而變換之后可以看出:
X
Y
[n]
的最小值為:
[-2
B-1
+2*(-2
B-1
) + (-2
B-1
)]/4 = -2
B-1
X
Y
[n]
的最大值為:
[2
B-1
-1
+2*(2
B-1
-11
) + (2
B-1
-1
)]/4 = 2
B-1
-1
因此 X Y [n] 仍然用 B 位可以表示
而 X Db [n] 和 X Dr [n] 的最大值和最小值為:
最小值:
-2
B-1
-(2
B-1
-1
) = 1-2
B
最
大
值:
2
B-1
-1
-(-2
B-1
) = 2
B
-1
因此對于他們需要
B+1
位來表示。
從上面的推論我們知道在(
8
)中,對于色度分量,
B
需要用
B+1
來提到計(jì)算。
反量化
雖然可逆方式?jīng)]有明確的量化過程,但對于有編碼塊碼流被截?cái)嗟那闆r可以等同于量化。
對于碼流的截?cái)鄬?dǎo)致解碼出來的樣本值
^v
i
[j]
與原樣本值
v
i
[j]
僅僅在低
p
i
[j]
個(gè)位不同;實(shí)際上這些
LSB
都是
0
。因此可以將其看成等效的步長為
△
i
[
j
]=2pi[j]
的恒域標(biāo)量量化。
因此反量化表示為:
在 ^v i [j]=0 的時(shí)候, ^yi[j] = 0,
其他時(shí)候, ^yi[j] = 符號 * ( ^v i [j]+ [2pi[j]*&] )
Kakadu 中表示
在 JPEG2000 中使用 QCD 和 QCC 碼流標(biāo)記參數(shù)來表示量化和界定的參數(shù)。這里看一下 Kakadu 代碼中如何表示的。
JPEG2000 中 QCD 叫默認(rèn)量化參數(shù),而 QCC 是量化分量參數(shù)。對于到 Kakadu 中的 qcd_params 參數(shù)類。
Kakadu 中的 QCD 參數(shù)類
Kakadu 為 qcd_params 類定義下列參數(shù)屬性。
參數(shù)名稱
|
說明
|
默認(rèn)值
|
Qguard |
保護(hù)位;前面已經(jīng)介紹了其作用。 |
1 |
Qderived |
量化步驟從 LL 子帶參數(shù)中繼承嗎?如果是繼承,那么所有量化步長都通過 2 的相應(yīng)冪與 LL 子帶步長關(guān)聯(lián),并且只有 LL 子帶的步長會寫到碼流標(biāo)記中;否則必須為每個(gè)子帶寫步長參數(shù)。對于可逆壓縮不能使用。 |
不能繼承 |
Qstep |
不可逆量化中每個(gè)子帶使用的基礎(chǔ)量化步長。應(yīng)該在 0 到 2 之間。 |
1/256 |
Qabs_steps |
每個(gè)子帶的絕對量化步長。用每個(gè)子帶的動態(tài)范圍來表示。范圍等于 2^B ( B 是深度)乘上每個(gè)低通濾波器的 DC 增益以及高通濾波器的 AC 增益。用下面的順序描述: LL_D,HL_D,LH_D,….,HL_1,LH_1,HH_1 。這里的 D 是 DWT 的級別。如果不是繼承的,每個(gè)子帶都要有步長參數(shù)。如果 Qstep 使用了,這個(gè)參數(shù)就忽略。 |
|
Qabs_ranges |
可逆壓縮過程子帶編碼中使用的位數(shù)。子帶的順序同上面。
Qabs_ranges +Qguard = 1+ K_max
。因此這正是
(7)
中
Xb+B
,
(
5
)的
Eb
。
通常情況下,這里使用默認(rèn)的不上溢出和下溢出的最小值。如果顯式設(shè)置一個(gè)值,需要為每個(gè)子帶都指定。 這個(gè)就是前面說的界定 。 |
|
posted on 2007-01-23 09:14 笨笨 閱讀(3528) 評論(0) 編輯 收藏 引用 所屬分類: 壓縮算法