Transcript Document

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:
30
frame
pixels
byte
 (720  480)
3
 31,104,000 bytes / sec
sec
frame
pixel
◦ Dan untuk durasi film 2 jam menjadi:
31,104,000
 
bytes
sec
 60 2
 2hour  2.24  1011 bytes
sec
hour
◦ Atau sekitar 224 GB (gigabytes) data, atau sekitar 27 keping
DVD dual-layer 8.5 GB (asumsi DVD 12 cm)
2
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.
3
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:
b
C
b'
Rasio 10 (atau 10:1) artinya 10 bit data asli untuk setiap 1 bit data
dalam representasinya.
◦ Data redundan relatif: R  1  1
C
4
Jenis representasi citra
Jenis
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
5
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.
6
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:
1.
2.
3.
4.
5.
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.
7
Intensitas
Contoh
Citra asli
1
1
3
3
6
0
1
1
7
3
3
5
7
5
5
5
7
5
4
4
Representasi
b = 1 byte x 20 piksel = 20 byte = 160 bit
Jumlah
Probabilitas
0
1
0.05
1
4
0.2
2
0
0
3
4
0.2
4
2
0.1
5
5
0.25
6
1
0.05
7
3
0.15
Langkah 1
Langkah 2
8
Langkah 3
Langkah 4
Langkah 5
Langkah 6
10
Langkah 7
11
Langkah 8
12
Kamus yang didapat
Intensi
tas
Probabili
tas
Encoding
0
0.05
000110
1
0.2
11
2
0
000111
3
0.2
10
4
0.1
0000
5
0.25
01
6
0.05
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.720 = 54 bit
13
Citra asli
1
1
3
3
6
0
1
1
Citra setelah dikompres
7
3
3
5
7
5
5
5
7
5
4
4
b =160 bit
11 00010 001 001 001
11 000110 10 01 01
10
11
10 01 0000
10
11
01 01 0000
b' = 54 bit
Rasio kompresi
b 160
C 
 2.96
b' 54
Data redundan relatif
1
1
R  1  1
 0.6625  66.25%
C
2.96
14
Huffman di matlab

Fungsi untuk membuat kamus:
◦ [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)
15
Source code contoh
f = [
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);
16
Hasil kompresi
11 00010 001 001 001
11 000110 10 01 01
10
11
10 01 0000
10
11
01 01 0000
>> hcode'
ans =
Columns 1 through 14
1
1
1
1
1
0
1
0
0
0
0
1
0
0
1
1
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
0
0
0
0
0
0
0
0
Columns 15 through 28
0
0
1
1
0
Columns 29 through 42
1
0
0
1
0
Columns 43 through 54
0
1
0
1
0
17
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.
18
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
◦ x adalah rata-rata, nilai  juga disimpan.
19
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”:

q
a  x 
mq
q
b  x 
mq
◦ Dimana  standar deviasi,
◦ m jumlah piksel dalam 1 blok,
◦ q adalah jumlah piksel dalam blok yang lebih besar dari

x
Rekonstruksi citra menggunakan formula:
20
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
a  241.875  4.5
9
 236.7725
16  9
b  241.875  4.5
9
 246.9775
16  9
21
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:
b 128
C 
4
b' 32
Data redundan relatif:
1
1
R  1   1   0.75  75%
C
4
22
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.
23
Contoh 1
Citra asli
Rasio kompresi:
C
b 128

 1.1852
b' 108
Data redundan relatif:
1
1
R  1  1
C
1.1852
 0.1563  15.63%
Piksel
Rangkaian
yang
Output
saat ini
sedang encode
diakui
diproses
245
245
239
245
239
249
239
249
239
249
239
245
239
245
245
245
245
239
245-239
235
256
235
245
235
245
245
245-245
239
260
239
245
239-245
245
259
245
235
245
235
245
235
245
239
245-239
256
Code
Word
Entry kamus
256
257
258
259
260
245-239
239-249
249-239
239-245
245-245
261
262
245-239-235
235-245
263
245-245-239
264
265
266
239-245-245
245-235
235-245
b‘ = 12x9 = 108 bit
24
Contoh 2
Citra asli
Rasio kompresi:
C
b 128

 1.42
b' 90
Data redundan relatif:
1
1
R  1  1
C
1.42
 0.2969  29.69%
b‘ = 10x9 = 90 bit
25
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
26
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:

f w  (1   ) f  w
◦ 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.
27
Contoh
83 89 134 145
56 68 80 170
189 243 224 211
23
90
129
223
watermark
Citra asli
23
90
0
129
223
0
0
0
0
0
0
0
Watermark setelah
di recover
23
90
0
129
223
0
watermark
0
0
0
0
0
0
Opaque = 0.3
f w  (1   ) f  w
65 101 94 102
66 115 56 119
132 170 157 148
Citra asli setelah diwatermark
28
Contoh
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);
Citra watermark
Citra asli
% Kembalikan watermark
hf = double(hf);
iwm = hf - (1-alpha)*f;
iwm = uint8(iwm);
figure, imshow(iwm);
Citra watermark
setelah di recover
Opaque = 0.3
29
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:
f w
f w  4  
 4  64
◦ 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.
30
Contoh
83 89 134 145
56 68 80 170
189 243 224 211
23
90
129
223
watermark
Citra asli
0
1
0
2
3
0
0
0
0
0
0
0
Watermark setelah
di recover
23
90
0
129
223
0
watermark
0
0
0
0
0
0
Opaque = 0.3
f w
f w  4  
 4  64
80 90 132 144
57 71 80 168
188 240 224 208
Citra asli setelah diwatermark
31
Contoh
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);
Citra watermark
Citra asli
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
setelah di recover
Invisible watermark
32
To Be Continued …
ANY QUESTION ?
33