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',[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. 9 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 bukalapak atau tokopedia dalam paket buku modul tutorial dan source code pemrograman matlab

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

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: