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 DCT 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',[num2str(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);
% setting nilai threshold
alpha = 1.5; m = 2.7*prod(s(1,:));
[thr,~] = wdcbm2(c,s,alpha,m);
% kompresi citra
xd = wdencmp('lvd',c,s,wname,n,thr,'h');
xd = uint8(xd);
% 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

Metode pengolahan citra pada materi di atas dapat digunakan untuk melakukan kompresi citra. Kita dapat mengembangkan metode pengolahan citra terbaru agar diperoleh hasil kompresi yang lebih baik.

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. Leave a comment.

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 )

Google+ photo

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

Twitter picture

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

Facebook photo

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

Connecting to %s

%d bloggers like this: