Kompresi Citra Digital Menggunakan Transformasi Wavelet


Dalam bidang pengolahan citra digital, terkadang kita menemukan kendala pada besarnya ukuran data yang dibutuhkan untuk merepresentasikan citra. Oleh karena itu dibutuhkan suatu teknik kompresi yang dapat mereduksi ukuran data pada citra. Tujuan dari kompresi citra di antaranya adalah untuk menghemat kapasitas penyimpanan data, mempercepat waktu transmisi data, dan mempercepat waktu komputasi saat pengolahan citra dilakukan. Kompresi citra bekerja dengan cara meminimalkan jumlah bit penyusun citra sehingga ukuran data menjadi lebih kecil.

Terdapat dua buah metode kompresi citra yaitu metode lossless dan metode lossy. Pada metode lossless memungkinkan data yang telah terkompresi dapat dikembalikan seperti semula. Sedangkan pada metode lossy tidak memungkinkan data yang telah terkompresi dapat dikembalikan seperti semula.

Salah satu metode lossless yang dapat digunakan untuk melakukan kompresi citra adalah menggunakan transformasi wavelet diskrit (discrete wavelet transform). Jenis wavelet pada DWT antara lain adalah haar, daubechies, symlets, dan coiflets. Berikut ini merupakan contoh aplikasi pemrograman matlab untuk melakukan kompresi citra digital menggunakan transformasi wavelet.

Langkah-langkah pemrogramannya adalah:
1. Membaca dan menampilkan file citra asli

% menampilkan menu browse file
[file, path] = uigetfile({'*.jpeg;*.jpg;*.bmp;*.png;*.tiff;';'*.*'},...
'Select an Image File');

% jika ada file citra yang dipilih maka akan mengeksekusi perintah di
% bawahnya
if ~isequal(file,0)
% membaca file citra yang dipilih
Img = imread(fullfile(path,file));
% melihat ukuran file citra dalam satuan kb
fileinfo = imfinfo(file);
SIZE = fileinfo.FileSize;
Size = SIZE/1024;
% menampilkan ukuran file citra dalam satuan kb
set(handles.edit4,'String',[(Size),' kb']);
% menampilkan file citra ke dalam axes
axes(handles.axes1)
imshow(Img)
title('Citra Asli')
% menyimpan variabel Img & fileinfo pada lokasi handles (lokasi
% penyimpanan variabel dalam MATLAB) agar dapat dipanggil oleh
% pushbutton yang lain
handles.Img = Img;
handles.fileinfo = fileinfo;
guidata(hObject, handles)
% mereset button2
axes(handles.axes2)
cla reset
set(gca,'XTick',[])
set(gca,'YTick',[])
set(handles.pushbutton2,'Enable','on')
set(handles.edit1,'String',[])
set(handles.edit2,'String',[])
set(handles.edit3,'String',[])
set(handles.edit5,'String',[])
% jika tidak ada file citra yang dipilih maka akan kembali
else
return
end

2. Melakukan kompresi citra menggunakan transformasi wavelet

% memanggil variabel Img & fileinfo yang ada pada lokasi handles
Img = handles.Img;
fileinfo = handles.fileinfo;

% setting jenis wavelet dan level dekomposisi
val = get(handles.popupmenu1,'Value');
switch val
case 1
wname = 'haar';
case 2
wname = 'db4';
case 3
wname = 'sym4';
case 4
wname = 'coif4';
end

n = get(handles.popupmenu2,'Value');

% dekomposisi wavelet
[c,s] = wavedec2(Img,n,wname);
% kompresi citra
xd = wdencmp('lvd',c,s,wname,n,thr,'h');
% menampilkan citra hasil kompresi
axes(handles.axes2)
imshow(xd)
title('Hasil Kompresi')
% menyimpan citra hasil kompresi
nama_file = ['Hasil Kompresi.',fileinfo.Format];
imwrite(xd,nama_file)
% menghitung nilai rasio pemampatan, psnr, dan mse
filesize = fileinfo.FileSize;
fileinfo_comp = imfinfo(nama_file);
filesize_comp = fileinfo_comp.FileSize;
nilai_rasio = filesize_comp/filesize*100;
nilai_psnr = psnr(xd,Img);
nilai_mse = mean(mse(xd,Img));

% menampilkan nilai rasio pemampatan, psnr, dan mse pada edit text
set(handles.edit1,'String',[num2str(nilai_psnr),' dB'])
set(handles.edit2,'String',num2str(nilai_mse))
set(handles.edit3,'String',[num2str(nilai_rasio),' %'])
set(handles.edit5,'String',[num2str(filesize_comp/1024),' kb'])

a. Kompresi citra menggunakan wavelet haar level 1

b. Kompresi citra menggunakan wavelet daubechies level 4

c. Kompresi citra menggunakan wavelet symlets level 6

d. Kompresi citra menggunakan wavelet coiflets level 8

File source code lengkap beserta citra pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code

Posted on February 4, 2019, in Pengolahan Citra and tagged , , , , , , , , , , , , , , , . Bookmark the permalink. 13 Comments.

  1. om kalau mau pembuat pendeteksian kangker paru menggunakan apa ya om?

    • untuk deteksi kanker paru2 banyak metode yg bisa dikembangkan seperti algoritma thresholding, active contour, jaringan syaraf tiruan, support vector machine, dll

  2. Mas Adi, kalo mau segmentasi bercak penyakit pada daun baiknya pakai metode apa ya? sementara ini saya pakai ‘level set’ namun citra penyakitnya belum tersegmen dengan baik

  3. Terimakasih Mas Adi..

  4. error bang coding nya
    keluar ini bang
    Undefined variable “handles” or class “handles.axes1”.

    • Seluruh file source code lengkap beserta data citra dapat diperoleh melalui tokopedia dalam paket buku modul tutorial dan source code pemrograman matlab
      Sehingga bisa langsung dirunning dan dikembangkan

  5. mas, kalau mau buat pendeteksian tingkat pencemaran air sungai berdasarkan gambar, baiknya menggunakan teknik apa ya? terima kasih

  6. Wicaksono Yuli Sulistyo

    Assalamualaikum, mas utk metode kompresi yg bsa digunakan utk mendeteksi manipulasi citra apa saja ya? selain komprsi jpeg pada web fotoforensics

  7. Assalamualaikum, mas mau nanya, untuk identifikasi noise lebih cocok pakai metode apa yaa? Trimakasih

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: