離散的コサイン変換と量子化の具体例
下の図は256階調の画像の8ドット×8ドットのブロックを示しています。それぞれの数字はそのドットの階調値を表しています。似たような数字が並んでいますが、写真などの画像はこのように、大きな階調の変化は少ないものです。
139 | 144 | 149 | 153 | 155 | 155 | 155 | 155 |
144 | 151 | 153 | 156 | 159 | 156 | 156 | 156 |
150 | 155 | 160 | 163 | 158 | 156 | 156 | 156 |
159 | 161 | 162 | 160 | 160 | 159 | 159 | 159 |
159 | 160 | 161 | 162 | 162 | 155 | 155 | 155 |
161 | 161 | 161 | 161 | 160 | 157 | 157 | 157 |
162 | 162 | 161 | 163 | 162 | 157 | 157 | 157 |
162 | 162 | 161 | 161 | 163 | 158 | 158 | 158 |
Fig. 1 元の画像
次に、これにDCTを施し、「高周波成分と低周波成分がどのくらいの割合で含まれているのか」というデータ(DCT係数といいます)に置き換えます。その結果がFig. 2です。この図では左上が低周波成分を、右下が高周波成分を表します。図を見ると、左上のほうに絶対値の大きな値が集中しているのが分かると思います。これはすなわち、画像中に低周波成分が多いことの現れです。
235.6 | -1.0 | -12.1 | -5.2 | 2.1 | -1.7 | -2.7 | 1.3 |
-22.6 | -17.5 | -6.2 | -3.2 | -2.9 | -0.1 | 0.4 | -1.2 |
-10.9 | -9.3 | -1.6 | 1.5 | 0.2 | -0.9 | -0.6 | -0.1 |
-7.1 | -1.9 | 0.2 | 1.5 | 0.9 | -0.1 | 0.0 | 0.3 |
-0.6 | -0.8 | 1.5 | 1.6 | -0.1 | -0.7 | 0.6 | 1.3 |
1.8 | -0.2 | 1.6 | -0.3 | -0.8 | 1.5 | 1.0 | -1.0 |
-1.3 | -0.4 | -0.3 | -1.5 | -0.5 | 1.7 | 1.1 | -0.8 |
-2.6 | 1.6 | -3.8 | -1.8 | 1.9 | 1.2 | -0.6 | -0.4 |
Fig. 2 元の画像に対するDCT係数
こうして求めたDCT係数を量子化テーブルの各項目で割ってやります。Fig. 3に量子化テーブルの一例を示します。DCT係数の図で高周波成分を表す部分に相当する、右下の領域に大きな値が配置されています。これらの値でFig. 2を割り、商を四捨五入するとFig. 4のようになります。高周波成分を代表する係数はことごとくゼロになっています。これなら、おのおのの値をわざわざ記録する必要がありませんから(「~以降は全部ゼロ」という記録の仕方で十分)、情報量を大きく減らすことができます。
16 | 11 | 10 | 16 | 24 | 40 | 51 | 61 |
12 | 12 | 14 | 19 | 26 | 58 | 60 | 55 |
14 | 13 | 16 | 24 | 40 | 57 | 69 | 56 |
14 | 17 | 22 | 29 | 51 | 87 | 80 | 62 |
18 | 22 | 37 | 56 | 68 | 109 | 103 | 77 |
24 | 35 | 55 | 64 | 81 | 104 | 113 | 92 |
49 | 64 | 78 | 87 | 103 | 121 | 120 | 101 |
72 | 92 | 95 | 98 | 112 | 100 | 103 | 99 |
Fig. 3 量子化テーブル
|
15 | 0 | -1 | 0 | 0 | 0 | 0 | 0 |
-2 | -1 | 0 | 0 | 0 | 0 | 0 | 0 |
-1 | -1 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Fig 4. 量子化されたDCT係数
(Fig.2の値をFig.3の対応する値で割り、四捨五入した)
では、これを元に戻すとどうなるでしょうか。復元にはまったく逆の手順を取ります。まず、Fig. 4に量子化テーブルFig. 3をかけます。するとFig. 5のようになります。理想的にはFig. 5とFig. 2は同じにならなければいけないのですが、Fig. 4のところで行った整数化のために、完全には一致しません(つまり、Fig. 4の段階がJPEGの不可逆性の原因ということになります)。これに逆DCTを施すと、Fig. 6のような画像データが復元されます。Fig. 6とFig. 1を比べてみると、完全に一致はしていないものの、大まかな傾向は保存されていることが分かります。
240 | 0 | -10 | 0 | 0 | 0 | 0 | 0 |
-24 | -12 | 0 | 0 | 0 | 0 | 0 | 0 |
-14 | -13 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Fig. 5 復元されたDCT係数
|
144 | 146 | 149 | 152 | 154 | 156 | 156 | 156 |
148 | 150 | 152 | 154 | 156 | 156 | 156 | 156 |
155 | 156 | 157 | 158 | 158 | 157 | 156 | 155 |
160 | 161 | 161 | 162 | 161 | 159 | 157 | 155 |
163 | 163 | 164 | 163 | 162 | 160 | 158 | 156 |
163 | 164 | 164 | 164 | 162 | 160 | 158 | 157 |
160 | 161 | 162 | 162 | 162 | 161 | 159 | 158 |
158 | 159 | 161 | 161 | 162 | 161 | 159 | 158 |
Fig. 6 復元された画像