Thursday, June 11, 2015

How JPEG Works (Part-2)

Pada bagian ke dua ini akan di bahas proses transformasi DCT (Discrete Cosine Transform).

Sebelum berlanjut, perlu di ingat kembali pada bagian sebelumnya, 1 lembar gambar berwarna dapat dibayangkan terdiri dari 3 lembar gambar: 1 gambar Red (dan gradasi Red), 1 gambar Green (dan gradasi Green), dan 1 gambar Blue (dan gradasi Blue).

3 lembar gambar ini, di konversi menjadi 3 lembar gambar baru yaitu: 1 lembar gambar Y, 1 lembar gambar Cb, 1 lembar gambar Cr. Ukuran kertas gambar Cb dan Cr separoh dari ukuran kertas gambar Y.

Selanjutnya masing-masing gambar: Y, Cb, dan Cr dilakukan transformasi DCT kepadanya.

Kenapa perlu DCT? Apa urgensi atau manfaat dilakukan DCT ini?

Pada dasarnya DCT ini mentransformasikan nilai pixel-pixel gambar dari domain spasial ke domain frekuensi. Agak sulit memang membayangkan kalimat ini "mengkonversi dari domain spasial ke domain frekuensi".

Untuk membayangkan diberikan ilustrasi sbb:

Misal ukuran gambar adalah 8x8 pixel (8 horizontal, 8 vertikal), artinya ada 64 buah pixel.

Karena 1 pixel Y mewakili 8 bit artinya nilai pixel Y berkisar antara 0 sampai 255:
0 = hitam
127= abu-abu
255=putih

Apabila 64 pixel tsb di urutkan dari urutan pixel 1 sampai pixel 64
p1, p2, p3, p4, ...., p64

dan ambil contoh nilai pixelnya sbb:
7, 20, 100, 56, 84, 230, 125, 4 ..., 39

Urutan tsb kita namakan domain spasial (domain ruang).

Apabila kita punya persamaan cosinus sbb:

c1, c2, c3, c4, ..., c64

dengan
c1 =  p1 cos(z) + p2 coz (2z) + p3 cos (3z) + ... p64 cos (64z) dengan z=0

c2 =  p1 cos(z) + p2 coz (2z) + p3 cos (3z) + ... p64 cos (64z) dengan z=1
...
c64 =  p1 cos(z) + p2 coz (2z) + p3 cos (3z) + ... p64 cos (64z) dengan z=63

Nah akan didapat nilai baru c1, c2, c3 sd c64. Nilai baru ini disebut domain frekuensi. 

Jadi transformasi DCT ini sederhananya merubah:
 p1, p2, p3, p4, ...., p64

menjadi
c1, c2, c3, c4, ..., c64


Apa urgensi nya megubah dari domain spasial ke domain frekuensi?

Urgensinya begini:

Apabila kita lakukan transformasi DCT, maka nilai - nilai awal akan besar, sedangkan nilai-nilai akhir akan bernilai kecil ( apabila di bagi dengan Qunatization akan mendekati 0).

Nilai-nilai awal (frekuensi cosinus rendah) c1, c2, c3, ..., c12  bernilai besar
Nilai-nilai akhir (frekuensi cosinus tinggi) c13, c14, c15, ..., c64 bernilai kecil (mendekati 0)

Artinya apa?

Artinya dengan banyaknya nilai c yang bernilai 0, maka data dapat di kompress lagi. Itulah penyebab gambar JPEG ukuran filenya bisa menjadi sangat kecil. Sehingga dalam file bisa di ringkas penulisannya (hanya untuk ilustrasi) misal: c1:5,c2:6,c3-c64:0 (asumsi dari c3 sd c64 nilai perhitungan cosinusnya sudah sama dengan 0). Ini sudah menghemat sekian byte penulisan file.

Pada bagian 3 kita akan pelajari algoritma DCT ini dalam bahasa programming agar semakin jelas.
  
 

No comments: