Kenapa perlu di kuantisasi?
Jawaban sederhananya adalah untuk membuang nilai-nilai "pixel" DCT yang rendah (nilai nilai yang mendekati 0).
Bagaimana caranya?
Tekniknya adalah dengan membagi "pixel" DCT dengan Quatization matrix.
Disini lah muncul paramater Quality.
Misalkan kita set parameter Quality bernilai 1 sampai 25. Quality 1 adalah top quality image, gambar tetap tajam seperti aslinya (akan tetapi ukuran file JPEG akan besar) . Quality 25 adalah bad quality image, gambar menjadi buram dan pixelized (akan tetapi ukuran file JPEG akan kecil).
Berikut ini adalah pseudo-code untuk membuat Quantization matrix.
for ( i = 0 ; i < N ; i++ )
for ( j = 0 ; j < N ; j++ )
Quantum[ i ][ j ] = 1 + ( ( 1 + i + j ) * quality );
Apabila quality = 2, maka Quntization matrix (Quantum[i][j]) menjadi:
3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 |
5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 |
7 | 9 | 11 | 13 | 15 | 17 | 19 | 21 |
9 | 11 | 13 | 15 | 17 | 19 | 21 | 23 |
11 | 13 | 15 | 17 | 19 | 21 | 23 | 25 |
13 | 15 | 17 | 19 | 21 | 23 | 25 | 27 |
15 | 17 | 19 | 21 | 23 | 25 | 27 | 29 |
17 | 19 | 21 | 23 | 25 | 27 | 29 | 31 |
DCT(i,j)
Quantized Value(i,j) = -------------- Rounded integer
Quantum(i,j)
Kita ulangi dari hasil Part-3 sebagai berikut.
Pixel Asli | |||||||
140 | 144 | 147 | 140 | 140 | 155 | 179 | 175 |
144 | 152 | 140 | 147 | 140 | 148 | 167 | 179 |
152 | 155 | 136 | 167 | 163 | 162 | 152 | 172 |
168 | 145 | 156 | 160 | 152 | 155 | 136 | 160 |
162 | 148 | 156 | 148 | 140 | 136 | 147 | 162 |
147 | 167 | 140 | 155 | 155 | 140 | 136 | 162 |
136 | 156 | 123 | 167 | 162 | 144 | 140 | 147 |
148 | 155 | 136 | 155 | 152 | 147 | 147 | 136 |
Pixel Normalisasi | |||||||
12 | 16 | 19 | 12 | 12 | 27 | 51 | 47 |
16 | 24 | 12 | 19 | 12 | 20 | 39 | 51 |
24 | 27 | 8 | 39 | 35 | 34 | 24 | 44 |
40 | 17 | 28 | 32 | 24 | 27 | 8 | 32 |
34 | 20 | 28 | 20 | 12 | 8 | 19 | 34 |
19 | 39 | 12 | 27 | 27 | 12 | 8 | 34 |
8 | 28 | -5 | 39 | 34 | 16 | 12 | 19 |
20 | 27 | 8 | 27 | 24 | 19 | 19 | 8 |
Hasil Transformasi DCT | |||||||
186 | -18 | 15 | -9 | 23 | -9 | -14 | 19 |
21 | -34 | 26 | -9 | -11 | 11 | 14 | 7 |
-10 | -24 | -2 | 6 | -18 | 3 | -20 | -1 |
-8 | -5 | 14 | -15 | -8 | -3 | -3 | 8 |
-3 | 10 | 8 | 1 | -11 | 18 | 18 | 15 |
4 | -2 | -18 | 8 | 8 | -4 | 1 | -7 |
9 | 1 | -3 | 4 | -1 | -7 | -1 | -2 |
0 | -8 | -2 | 2 | 1 | 4 | -6 | 0 |
Hasil Transformasi DCT apabila dibagi dengan Quantization Matrix menjadi
DCT After Quantization | |||||||
62 | -4 | 2 | -1 | 2 | -1 | -1 | 1 |
4 | -5 | 3 | -1 | -1 | 1 | 1 | 0 |
-1 | -3 | 0 | 0 | -1 | 0 | -1 | 0 |
-1 | 0 | 1 | -1 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | -1 | 1 | 1 | 1 |
0 | 0 | -1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Terlihat bahwa pada frekuensi tinggi sudah banyak sekali "pixel" dengan value 0 yang mana ini sangat mudah untuk dilakukan kompresi.
Apabila Quality kita turunkan menjadi 10 atau 25 misalkan, maka jumlah "pixel" dengan value 0 akan bertambah jauh lebih banyak lagi, ukuran file semakin kecil, tapi gambar semakin buram (makin pixelized).
Berikut contoh Kompresi JPEG dengan berbagai Quality.
Gambar asli
Quality = 1
Quality = 2
Quality = 10
Quality = 25
Pada kondisi dimana gambar cukup mampu di kompresi, maka dengan kompresi sampai tingkat 60% dari ukuran file asli, gambar masih bisa terlihat tajam.
Contoh coding/programming JPEG dalam bahasa C disini
No comments:
Post a Comment