壓縮的技術分成兩種:失真壓縮(lossy compression)的壓縮率較高,但無法重建原來的資料,例如:DFT、DCT、KLT(搭配量化(quantization)與截斷(truncation))、4:2:2或4:2:0、多項式曲線的近似(polynomial approximation);無失真壓縮(lossless compression)的壓縮率較低,但可以重建原來的資料,例如:二元編碼(binary coding)、霍夫曼編碼(Huffman coding)、算術編碼(arithmetic coding)、格倫布編碼 (Golomb coding)。

4:2:2或4:2:0

编辑

此技術運用的是空間上的一致性。

將像素(pixel)的RGB值,利用以下的公式轉換成YCbCr

Y = 0.299 R + 0.578 G + 0.114 B

Cb = -0.169 R - 0.331 G + 0.500 B ( Cb = 0.565 (B - Y) )

Cr = 0.500 R - 0.419 G - 0.081 B ( Cr = 0.713 (R - Y) )

其中 Y 是亮度(Luminance),Cb是藍色色差(chrominance) ,Cr 是紅色色差(chrominance)。

人類的視覺系統,對於亮度比較敏感,而對於彩度比較不敏感。

因此我們可以利用人類視覺的特性,減少Cb、Cr的取樣個數,取樣格式有4:2:2 與 4:2:0兩種。

假設一張圖片原本壓縮前(即4:4:4)的Y、Cb、Cr各有M×N個值,4:2:2的壓縮Y保留為M×N個值、Cb、Cr則取樣到各剩下M/2×N個值;4:2:0的壓縮Y同樣保留為M×N個值、Cb、Cr則進一步取樣到各剩下M/2×N/2個值。

從4:4:4到4:2:2,壓縮率約為2/3;從4:4:4到4:2:0,壓縮率約為1/2。

從4:4:4壓縮到4:2:2,再壓縮到4:2:0,單一像素(pixel)儲存的bit 數可以等效為:24 bits/pixel → 16 bits/pixel → 12 bits/pixel。

還原時,則是利用插值(interpolation)的方式:

C

b

[

2

m

+

1

,

2

n

]

{\displaystyle \operatorname {C_{\text{b}}} [2m+1,2n]\,\!}

= 1/2 ×(

C

b

[

2

m

,

2

n

]

{\displaystyle \operatorname {C_{\text{b}}} [2m,2n]\,\!}

+

C

b

[

2

m

+

2

,

2

n

]

{\displaystyle \operatorname {C_{\text{b}}} [2m+2,2n]\,\!}

)

8×8 離散餘弦轉換(DCT)

编辑

此技術運用的是頻率上的一致性。

通常我們會將影像切成8×8的方格作離散餘弦轉換(DCT),原因如下:

一張影像的每個區塊,其高低頻成分都不一樣,對整張影像直接作離散餘弦轉換(DCT),多少會有高頻成分的出現。如果切成8×8的方格,則對大部分的方格幾乎都沒有高頻成分。

降低記憶體的需要量

降低運算量

經過離散餘弦轉換(DCT)後的8×8矩陣稱為DCT矩陣。DCT矩陣最左上角的係數稱為直流(DC)成分,而其他63個係數則稱為交流(AC)成分。越靠近DC值的AC值係數表示頻率較低的部分,而越往右下角方向的AC值代表的頻率則越高。

2D的8×8 DCT的輸出通常會按照"zigzag"的順序,將2D轉為1D的型態。按照此順序排列,能量可能較大的會被擺在前面,而後面的高頻成分從某個值開始後幾乎為零,以符號EOB(end of block)表示,指後面的高頻的部分經過量化(quantization)之後皆為0。

差分編碼(Differential coding)

编辑

此技術運用的是空間上的一致性。

差分編碼指的是,除第一個元素外,將其中各元素都表示為各該元素與其前一元素的差的編碼。

DC

[

i

,

j

]

{\displaystyle \operatorname {DC} [i,j]\,\!}

,是針對

DC

[

i

,

j

]

{\displaystyle \operatorname {DC} [i,j]\,\!}

-

DC

[

i

,

j

1

]

{\displaystyle \operatorname {DC} [i,j-1]\,\!}

去編碼,

而不是直接對

DC

[

i

,

j

]

{\displaystyle \operatorname {DC} [i,j]\,\!}

作編碼。

霍夫曼編碼(Huffman coding)

编辑

霍夫曼編碼(Huffman coding)的編碼原則:(Greedy Algorithm)

所有的碼皆在編碼樹(coding tree)的端點,再下去沒有分枝。滿足唯一可解譯碼(uniquely decodable code)與即時可解碼(instantaneous decodable code)。

機率越大的,編碼長度(code length)越短;機率越小的,編碼長度(code length)越長。

假設

S

a

{\displaystyle S_{\text{a}}\,\!}

是第L層的節點(node),

S

b

{\displaystyle S_{\text{b}}\,\!}

是第L+1層的節點(node),則

P

(

S

a

)

{\displaystyle \operatorname {P} (S_{\text{a}})\,\!}

>=

P

(

S

b

)

{\displaystyle \operatorname {P} (S_{\text{b}})\,\!}

必須滿足。

不滿足以上的條件則往上推一層。

算術編碼(Arithmetic coding)

编辑

霍夫曼編碼(Huffman coding)是將每一筆資料分開編碼,算術編碼(Arithmetic coding)則是將多筆資料一起編碼,因此壓縮效率比霍夫曼編碼(Huffman coding)更高,近年來的壓縮資料大多使用算術編碼(Arithmetic coding)。

範例:

假設要對X來作二進位的編碼,且經過事先的估計,

X

[

i

]

=

a

{\displaystyle \operatorname {X} [i]=a\,\!}

的機率為0.8,

X

[

i

]

=

b

{\displaystyle \operatorname {X} [i]=b\,\!}

的機率為0.2。

若實際上輸入的資料為

X

=

a

a

a

b

a

a

{\displaystyle \operatorname {X} =aaabaa\,\!}

Initial(

X

[

1

]

=

a

{\displaystyle \operatorname {X} [1]=a\,\!}

):lower =0,upper=0.8

When i = 2 (

X

[

2

]

=

a

{\displaystyle \operatorname {X} [2]=a\,\!}

):lower =0,upper=0.64

When i = 3 (

X

[

3

]

=

a

{\displaystyle \operatorname {X} [3]=a\,\!}

):lower =0,upper=0.512

When i = 4 (

X

[

4

]

=

b

{\displaystyle \operatorname {X} [4]=b\,\!}

):lower =0.4096,upper=0.512

When i = 5 (

X

[

5

]

=

a

{\displaystyle \operatorname {X} [5]=a\,\!}

):lower =0.4096,upper=0.49152

When i = 6 (

X

[

6

]

=

a

{\displaystyle \operatorname {X} [6]=a\,\!}

):lower =0.4096,upper=0.475136

由於 lower =0.4096,upper=0.475136

lower <= 14*

2

5

{\displaystyle 2^{-5}\,\!}

< 15*

2

5

{\displaystyle 2^{-5}\,\!}

<= upper

所以編碼的結果為

14

(2,5)

=

01110

{\displaystyle 14_{\text{(2,5)}}=01110\,\!}

Copyright © 2088 欧洲世界杯预选赛_赛程世界杯 - tvzfj.com All Rights Reserved.
友情链接