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