Kompresi dan Watermark Citra Pengolahan Citra Digital Materi 7 Eko Prasetyo Teknik Informatika UMG-UPN Veteran Jatim 2012
Konsep Kompresi citra adalah seni dan ilmu untuk mengurangi jumlah data yang dibutuhkan untuk merepresentasikan citra. Menjadi salah salah satu faktor kesuksesan teknologi digital. Film pada dasarnya urutan frame dimana setiap frame adalah citra full-color, setiap video player harus memainkan gerakan frame 30 fps. Maka Standart Definition (SD) digital harus mengakses: Dan untuk durasi film 2 jam menjadi: Atau sekitar 224 GB (gigabytes) data, atau sekitar 27 keping DVD dual-layer 8.5 GB (asumsi DVD 12 cm)
Konsep Untuk menjadi 1 keping DVD, maka harus dikompres dengan faktor sekitar 26.3. Kompresi yang lebih tinggi harus dilakukan untuk dapat menyajikan resolusi film 1980x1080x24 bits/image. Keuntungan kompresi: Ukuran citra menjadi lebih compact. Transmisi di jaringan menjadi lebih cepat. Kerugian: Ada waktu yang dibutuhkan untuk melakukan encode dan decode. Kualitas citra menjadi turun (meski sulit terdeteksi mata). Kompresi citra berakar dari topik pembicaraan kompresi data Kompresi data: proses pengurangan jumlah data yang dibutuhkan untuk merepresentasikan kuantitas informasi.
Konsep Kompresi data dapat terjadi ketika ada sejumlah representasi yang selalu berulang dalam data (data redundan). Semakin banyak data redundan biasanya semakin besar rasio kompresi yang didapat. Simbol b menyatakan jumlah bit (unit pembawa informasi) yang digunakan untuk representasi data asli, dan b’ untuk hasil kompresi. Ada 2 kuantitas kaitannya dengan kompresi: rasio kompresi dan data redundan relatif. Rasio kompresi: Rasio 10 (atau 10:1) artinya 10 bit data asli untuk setiap 1 bit data dalam representasinya. Data redundan relatif:
Jenis representasi citra Keterangan TIFF Tagged Image File Format. Format file yang fleksibel dan didukung oleh banyak standart kompresi, seperti LZW. PNG Portable Network Graphic. Format file losslessly compressed citra full color dengan transparansi (bisa mencapai 48 bit/piksel) BMP Windows Bitmap. Format umum untuk citra tidak terkompres. JPEG Joint Photographic Experts Group, standart untuk kualitas citra foto. Lossy baseline coding system. Menggunakan teknik DCT blok 8x8, Huffman, Golomb, dan Run-Length MPEG-1 Motion Pictures Expert Group. Standart untuk CD-ROM. Didukung semua aplikasi komputer dan DVD player. Didukung kompresi Huffman, Arithmetic, Run-Length, dsb. GIF Graphic Interchange Format. Format file yang menggunakan teknik LZW. Banyak digunakan untuk file animasi kecil di web atau film dengan resolusi kecil HDV High Definition Video. Pengembangan DV untuk televisi HD yang menggunakan kompresi mirip MPEG-2, termasuk predictive coding
Huffman Coding Didasarkan pada prinsip pohon Huffman (Huffman, 1952). Metode cerdas untuk membangun sebuah kamus kompresi Yang dalam beberapa arti optimal untuk data yang dihadapi. Metode ini menggunakan karakter dan probabilitas sebagai masukan dengan setiap karakter yang mungkin muncul dalam data. Semakin tinggi probabilitas maka akan semakin pendek kode-urutan yang didapat, begitu pula sebaliknya. Kamus kompresi ekivalen dengan pohon Huffman.
Huffman Coding Karakter disimbolkan daun dan mengikuti tepi dari atas ke bawah untuk mendapatkan kode huruf tertentu. Untuk membangun pohon yang "optimal" untuk alfabet tertentu dan probabilitas diberikan algoritma berikut: Buat daftar node. Setiap node berisi simbol dan probabilitasnya Cari dua node dengan probabilitas terkecil Jadikan keduanya sebagai anak node baru yang mempunyai probabilitas dari penjumlahan probabilitas keduanya. Lepaskan dua anak tadi dari daftar dan tambahkan node parent yang baru tadi kedalam daftar. Ulangi langkah 2-4 sampai daftar hanya berisi satu node.
Contoh 1 6 7 3 5 4 Citra asli Representasi Intensitas Jumlah Probabilitas 1 0.05 4 0.2 2 3 0.1 5 0.25 6 7 0.15 Citra asli 1 6 7 3 5 4 Representasi b = 1 byte x 20 piksel = 20 byte = 160 bit Langkah 1 Langkah 2
Langkah 3 Langkah 4
Langkah 5 Langkah 6
Langkah 7
Langkah 8
Lavg = ((0.05)6+(0.2) 2+(0) 6 +(0.2) 2 Kamus yang didapat Intensitas Probabilitas Encoding 0.05 000110 1 0.2 11 2 000111 3 10 4 0.1 0000 5 0.25 01 6 00010 7 0.15 001 Lavg = ((0.05)6+(0.2) 2+(0) 6 +(0.2) 2 +(0.1) 4 +(0.25) 2 +(0.05) 5+(0.15) 3) = (0.3+0.4+0+0.4+0.4+0.5 +0.25+0.45) = 2.7 bits/piksel b‘ = Lavg jumlah_piksel = 2.720 = 54 bit
Citra asli Citra setelah dikompres 1 6 7 3 5 4 11 00010 001 000110 10 01 0000 b =160 bit b' = 54 bit Rasio kompresi Data redundan relatif
Huffman di matlab Fungsi untuk membuat kamus: Fungsi untuk encode [dict,avglen] = huffmandict(symbols,p) Dimana symbols adalah vektor intensitas, p adalah probabilitas intensitas dalam citra, dict adalah cell array berisi kamus huffman, avglen adalah panjag rata-rata code word. Fungsi untuk encode comp = huffmanenco(sig,dict) Dimana sig adalah data input (citra asli), comp adalah vektor yang berisi code word hasil encode. Fungsi untuk decode dsig = huffmandeco(comp,dict)
Source code contoh f = [ 1 6 7 7 7 1 0 3 5 5 3 1 3 5 4 3 1 5 5 4 ]; 1 6 7 7 7 1 0 3 5 5 3 1 3 5 4 3 1 5 5 4 ]; simbol = [0:7]; for i=0:7 idx = find(f==i); p(i+1) = size(idx,1); end [m,n] = size(f); p = p./(m*n); dict = huffmandict(simbol,p); % Create the dictionary. sig = reshape(f,m*n,1); hcode = huffmanenco(sig,dict); % Encode the data. dhsig = huffmandeco(hcode,dict); % Decode the code. dh = reshape(f,m,n);
Hasil kompresi 11 00010 001 000110 10 01 0000 >> hcode' ans = Columns 1 through 14 1 1 1 1 1 0 1 0 0 0 0 1 0 0 Columns 15 through 28 0 0 1 1 0 1 1 1 1 0 0 1 1 0 Columns 29 through 42 1 0 0 1 0 0 1 0 1 0 1 0 1 0 Columns 43 through 54 0 1 0 1 0 0 0 0 0 0 0 0
Block Truncate Coding Block Truncate Coding (BTC) merupakan salah satu jenis teknik lossy image compression. BTC membagi citra asli kedalam blok kemudian menggunakan quantiser untuk mengurangi jumlah gray level dalam setiap blok dengan tetap menjaga mean dan standar deviasi. Menggunakan sub-blok 4x4 memberikan rasio kompresi 4:1 dengan asumsi nilai integer 8-bit digunakan selama transmisi atau penyimpanan. Blok yang lebih besar akan memberikan kompresi yang lebih besar (nilai “a” dan “b” menyebar ke lebih banyak piksel) tetapi dengan resiko mengurangi kualitas citra asli.
Prosedur encoding BTC Piksel citra 256x256 dibagi kedalam blok, biasanya 4x4. Untuk setiap blok, dihitung Mean dan Standar Deviasi (piksel dalam blok sama mempunyai Mean dan Standar Deviasi yang sama dalam citra terkompresi). Setiap nilai dalam blok ditransformasi menjadi dua level nilai (0 atau 1), dengan formula: Dimana x(i,j) adalah piksel dalam blok citra asli, y(i,j) adalah piksel dalam blok citra terkompresi adalah rata-rata, nilai juga disimpan.
Prosedur decoding BTC Setiap blok berisi 16 bit (formasi 4x4) bersama dengan Mean (8 bit) dan Standar Devisasi (8 bit). Rekonstruksi dibuat berdasarkan nilai “a” dan “b”: Dimana standar deviasi, m jumlah piksel dalam 1 blok, q adalah jumlah piksel dalam blok yang lebih besar dari Rekonstruksi citra menggunakan formula:
Contoh encoding Salah satu blok (4x4) dalam citra asli Mean = 241.875 Standar Deviasi = 4.5 decoding Salah satu blok (4x4) dalam citra hasil decoding
Block Truncate Coding Pada satu blok 4x4 citra asli b = 16 piksel x 8 bit = 128 bit Pada satu blok 4x4 citra hasil kompresi b‘ = 16 bit + 8 bit (Mean) + 8 bit (StDev) = 32 Rasio kompresi: Data redundan relatif:
LZW Coding Teknik sebelumnya berfokus pada pembuangan coding redundan. Dalam LZW (Lempel-Ziv-Welch) juga memperhatikan error free compression. Memungkinkan transformasi fixed-length code word ke variable length sequence. Pembentukan kamus pada saat encoding dilakukan dengan membaca secara sekuensial piksel-piksel. Untuk urutan yang tidak ada dalam kamus, maka akan ditentukan code wordnya. Jika 0-255 (8 bit) digunakan untuk code word intensitas citra asli, maka code word baru bentukannya dimulai dari 256 (9 bit). Menggunakan code word 9 bit (secara konsep menggantikan 8 + 8 dengan 9). Jika ukuran kamus terlalu kecil berpengaruh pada kemampuan deteksi sekuens level intensitas jadi lemah, tapi jika terlalu besar akan melemahkan performa kompresi.
Rangkaian saat ini diakui Piksel yang sedang diproses Contoh 1 Rangkaian saat ini diakui Piksel yang sedang diproses Output encode Code Word Entry kamus 245 239 256 245-239 249 257 239-249 258 249-239 259 239-245 260 245-245 235 261 245-239-235 262 235-245 263 245-245-239 264 239-245-245 265 245-235 266 Citra asli Rasio kompresi: Data redundan relatif: b‘ = 12x9 = 108 bit
Contoh 2 Citra asli Rasio kompresi: Data redundan relatif: b‘ = 10x9 = 90 bit
Watermarking Semua jenis pengolahan citra sebelumnya (baik gambar maupun video) dapat di transmisikan secara bebas. Dapat disalin dengan mudah tanpa error Beresiko menimbulkan akuisisi oleh pihak lain Bahkan meskipun gambar sudah di enkripsi Menimbulkan pelanggaran hak cipta Solusi: watermark (tanda air / tinta transparan) Tujuan utama melindungi hak kepemilikan: Copyright Identification: bukti kepemilikan User Identification or fingerprinting: mengenali illegal copy Autenticity determination: menjamin bahwa citra tidak rusak Automated monitoring: monitoring kapan dan dimana citra disalin Copy protection: Bisa menetapkan aturan penggunaan dan penyalinan citra
Visible watermark Visible watermark adalah sub-citra atau citra semi-transparan (opaque) yang diletakkan diatas citra yang lain (citra yang diberi watermark), sehingga watermark-nya masih dapat dilihat oleh pengamat. Banyak digunakan di industri siaran televisi. Formula untuk memasukkan watermark ke citra asli: Dimana fw adalah citra yang sudah di watermark, f adalah citra asli, w adalah citra watermark, adalah konstanta yang mengontrol penampakan relatif (opaque) dari watermarknya.
Contoh 83 89 134 145 56 68 80 170 189 243 224 211 23 129 90 223 watermark Citra asli 23 129 90 223 23 129 90 223 Opaque = 0.3 Watermark setelah di recover watermark 65 101 94 102 66 115 56 119 132 170 157 148 Citra asli setelah diwatermark
Contoh Citra watermark Citra asli Citra watermark Opaque = 0.3 f = imread('lena.tif'); f = double(f); wm = imread('dip.tif'); wm = rgb2gray(wm); alpha = 0.3; [m,n] = size(f); fwm = zeros(m,n); [r,c] = size(wm); fwm(101:100+r, 101:100+c) =wm; hf = (1-alpha) * f + alpha * fwm; hf = uint8(hf); figure, imshow(hf); % Kembalikan watermark hf = double(hf); iwm = hf - (1-alpha)*f; iwm = uint8(iwm); figure, imshow(iwm); Citra watermark Citra asli Citra watermark setelah di recover Opaque = 0.3
Invisible watermark Sama dengan visible watermark tapi watermarknya tidak dapat diamati oleh mata telanjang. Persepsi mata manusia tidak dapat membedakan selisih yang kecil pada intensitas citra digital Sehingga informasi redundan yang terselip dalam citra tidak akan tampak. Watermark masih dapat direcover untuk mengembalikannya. Formula yang digunakan: Catatan: hasil bagi yang digunakan adalah pembulatan kebawah Secara prinsip, teknik ini men-set nol pada 2 bit LSB setiap piksel, kemudian 2 bit tersebut dipakai untuk memasukkan informasi watermark. Recover watermark dilakukan dengan men-set nol pada 6 MSB piksel.
Contoh 83 89 134 145 56 68 80 170 189 243 224 211 23 129 90 223 watermark Citra asli 2 1 3 23 129 90 223 Opaque = 0.3 Watermark setelah di recover watermark 80 90 132 144 57 71 168 188 240 224 208 Citra asli setelah diwatermark
Contoh Citra watermark Citra asli Citra watermark Invisible watermark f = imread('lena.tif'); f = double(f); wm = imread('dip.tif'); wm = rgb2gray(wm); alpha = 0.3; [m,n] = size(f); fwm = zeros(m,n); [r,c] = size(wm); fwm(101:100+r, 101:100+c) =wm; hf = 4*(floor(f./4)) + floor(fwm./64); hf = uint8(hf); figure, imshow(hf); % Kembalikan watermark hf = double(hf); iwm = hf - 4*(floor(hf./4)); iwm = iwm/3; figure, imshow(iwm); Citra watermark Citra asli Citra watermark setelah di recover Invisible watermark
To Be Continued … ANY QUESTION ?