Teori Kompresi
Mengapa perlu kompresi dan
reduksi data?
l Data citra umumnya berukuran besar
l Tidak praktis dalam aspek penyimpanan, proses dan
transmisi
l Perlu reduksi atau pemampatan data dengan mengurangi redundancy
atau duplikasi data
Data redundancy:
adalah
bagian data yang tidak mengandung informasi terkait atau merupakan pengulangan
dari informasi yang sudah dinyatakan sebelumnya atau sudah diketahui
Aplikasi
yang membutuhkan image compression: dimana perkembangannya ditentukan oleh
efisiensi pada manipulasi data, penyimpanan, dan transmisi citra biner /
monokrom / berwarna:
l Televideo-conferencing
l Remote sensing
l Telemedical / Medical
imaging
l Facsimile transmission
Kategori Teknik Kompresi Citra :
l Information preserving
(lossless compression): teknik yang memproses data asli menjadi bentuk yang
lebih ringkas tanpa hilangnya informasi.
Contoh: Aplikasi biomedis.
l Lossy compression: teknik
mendapatkan data yang lebih ringkas dengan melalui suatu proses penghampiran
(approksimasi) dari data asli dengan tingkat error yang dapat diterima. Contoh: TV broadcast.
Ada 3 jenis data redundancy pada citra:
l Coding
redundancy. Terjadi
bila suatu kode simbol yang digunakan terdiri dari sejumlah bit yang melebihi
jumlah bit yang diperlukan untuk representasi setiap simbol (dalam hal ini:
tingkat keabuan piksel citra).
l Interpixel
redundancy. data redundancy dinyatakan
dengan korelasi antar piksel dimana intensitas suatu piksel dapat diperkirakan
dari intensitas piksel-piksel tetangganya. Artinya: informasi yang dibawa oleh
setiap piksel relatif tidak besar atau kontribusi setiap piksel kepada gambar
secara keseluruhan adalah redundan.
l Psychovisual
redundancy. Suatu fenomena dimana
intensitas keabuan yang bervariasi dilihat sebagai intensitas konstan, artinya:
mata tidak mempunyai sensitivitas yang sama terhadap semua informasi yang
dianggap penting dan tidak penting. Hal tersebut diatas dapat dikatakan sebagai
psychovisual redundancy, yang bila dihilangkan tidak mengganggu persepsi
kwalitas citra.
Suatu data dikatakan terkompresi jika satu atau
lebih redundancy tersebut bisa dikurangi atau dihilangkan.
Untuk listing program sebagai berikut:
function varargout = Kompresi(varargin)
% KOMPRESI MATLAB code for Kompresi.fig
% KOMPRESI, by itself, creates a new KOMPRESI or raises the existing
% singleton*.
%
% H = KOMPRESI returns the handle to a new KOMPRESI or the handle to
% the existing singleton*.
%
% KOMPRESI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in KOMPRESI.M with the given input arguments.
%
% KOMPRESI('Property','Value',...) creates a new KOMPRESI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Kompresi_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Kompresi_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Kompresi
% Last Modified by GUIDE v2.5 02-Nov-2012 08:16:52
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Kompresi_OpeningFcn, ...
'gui_OutputFcn', @Kompresi_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Kompresi is made visible.
function Kompresi_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Kompresi (see VARARGIN)
% Choose default command line output for Kompresi
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Kompresi wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Kompresi_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[nama_file1, nama_path1]=uigetfile( ...
{'*.bmp;,*.jpg','File Citra(*.bmp,*.jpg)';
'*.bmp','File Bitmap(*.bmp)';...
'*.jpg','File JPEG(*.jpg)';
'*.*','Semua File(*.*)'},...
'Buka File Citra Host/Asli');
if~isequal(nama_file1, 0)
handles.data1=imread(fullfile(nama_path1,nama_file1));
guidata(hObject,handles);handles.current_data1=handles.data1;
axes(handles.axes1);
imshow(handles.current_data1);
set(handles.text8,'String',nama_file1);
set(handles.text9,'String',size(handles.data1,2));
else
return;end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[nama_file_simpan, path_simpan]=uiputfile(...
{'*.jpg','File citra(*.jpg)';
'*.jpg','Citra JPEG(*.jpg)';...
'*.*','Semua File(*.*)'},...
'Menyimpan File Citra Hasil Kompresi JPEG');
imwrite(handles.data1, fullfile(path_simpan,nama_file_simpan));
citra_kompres=imread(fullfile(path_simpan,nama_file_simpan));
guidata(hObject,handles);
axes(handles.axes2);
imshow(citra_kompres);
set(handles.text10,'String',nama_file_simpan);
set(handles.text11,'String',size(handles.data1,1));
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
selection=questdlg(['Keluar ' get(handles.figure1,'Name')''],...
['Keluar ' get(handles.figure1,'Name')''],...
'Ya','Tidak','Ya');
if strcmp(selection,'Tidak')
return;
end
delete(handles.figure1)
% KOMPRESI MATLAB code for Kompresi.fig
% KOMPRESI, by itself, creates a new KOMPRESI or raises the existing
% singleton*.
%
% H = KOMPRESI returns the handle to a new KOMPRESI or the handle to
% the existing singleton*.
%
% KOMPRESI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in KOMPRESI.M with the given input arguments.
%
% KOMPRESI('Property','Value',...) creates a new KOMPRESI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Kompresi_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Kompresi_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Kompresi
% Last Modified by GUIDE v2.5 02-Nov-2012 08:16:52
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Kompresi_OpeningFcn, ...
'gui_OutputFcn', @Kompresi_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Kompresi is made visible.
function Kompresi_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Kompresi (see VARARGIN)
% Choose default command line output for Kompresi
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Kompresi wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Kompresi_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[nama_file1, nama_path1]=uigetfile( ...
{'*.bmp;,*.jpg','File Citra(*.bmp,*.jpg)';
'*.bmp','File Bitmap(*.bmp)';...
'*.jpg','File JPEG(*.jpg)';
'*.*','Semua File(*.*)'},...
'Buka File Citra Host/Asli');
if~isequal(nama_file1, 0)
handles.data1=imread(fullfile(nama_path1,nama_file1));
guidata(hObject,handles);handles.current_data1=handles.data1;
axes(handles.axes1);
imshow(handles.current_data1);
set(handles.text8,'String',nama_file1);
set(handles.text9,'String',size(handles.data1,2));
else
return;end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[nama_file_simpan, path_simpan]=uiputfile(...
{'*.jpg','File citra(*.jpg)';
'*.jpg','Citra JPEG(*.jpg)';...
'*.*','Semua File(*.*)'},...
'Menyimpan File Citra Hasil Kompresi JPEG');
imwrite(handles.data1, fullfile(path_simpan,nama_file_simpan));
citra_kompres=imread(fullfile(path_simpan,nama_file_simpan));
guidata(hObject,handles);
axes(handles.axes2);
imshow(citra_kompres);
set(handles.text10,'String',nama_file_simpan);
set(handles.text11,'String',size(handles.data1,1));
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
selection=questdlg(['Keluar ' get(handles.figure1,'Name')''],...
['Keluar ' get(handles.figure1,'Name')''],...
'Ya','Tidak','Ya');
if strcmp(selection,'Tidak')
return;
end
delete(handles.figure1)
Pembuatan Aplikasi
1.
Penginstalan MATLAB
Langkah
pertama untuk membuat aplikasi ini adalah menginstall MATLAB & SIMULINK R2011a. Proses peng-instal-an ini dilakukan
pada sistem operasi Microsoft windows, jika software ini ada pada komputer,
maka akan digunakan untuk mengompile skrip coding yang dibuat.
a. Software MATLAB
& SIMULINK R2011a bisa didapatkan dengan cara men-download atau membeli cd aslinya.
Namun pada kesempatan ini penulis men-download
b. Kemudian kita akan melakukan penginstalan MATLAB
tersebut. Langkah-langkah disesuaikan dengan tampilan gambar dibawah ini:
c. Pada folder yang telah kita download akan ada aktivasi
yang dilakukan dan dimasukan ke dalam Installation key dan memasukan nilai
kedalamnya.
d. Lalu kita atur tempat kita akan menginstal MATLAB
tersebut di C:\Program Files\MATLAB\R2011a.
e. Dari tampilan di atas akan diinstal beberapa library yang
akan digunakan untuk menjalankan program MATLAB yang akan kita buat. Kemudian
akan diproses penginstalan yang akan mensupport kinerja MATLAB. Dari sini akan
ditunggu proses penginstalan sampai tahap selanjutnya.
f. Pada folder download kembali akan kita masukan Path yang
ada di dalam folder tersebut dan menunjuk ke lic_standalone.dat. yang digunakan
untuk mengaktifkan License tersebut.
g. Dan akhirnya untuk penginstalan telah selesai dilakukan.
2.
Pembuatan Program
Pada tampilan awal MATLAB yang dibuat akan muncul seperti
pada gambar:
Kemudian pertama akan kita buat tampilan yang ingin kita
buat sesuai keinginan, dengan cara File->New->GUI yang akan muncul seperti
berikut:
Langkah selanjutnya kita akan membuat GUI baru dengan
cara Create New GUI -> Blank GUI (default). Bisa dilihat pada gambar:
Maka akan muncul Tampilan GUI seperti pada gambar
berikut:
Pada ToolBar yang ada disamping GUI tersebut akan kita
buat dengan tampilan sebagai berikut:
Selanjutnya adalah tampilan akhir untuk GUI dari aplikasi
ini akan menjadi seperti ini jika kita jalankan.
Berikut ini adalah contoh perubahan image yang terjadi ketika aplikasi
dijalankan.
Gambar awal
Gambar akhir
Hal yang terjadi pada gambar ini adalah
1.
Gambar awal 1,02MB
ketika di kompresi menjadi 270KB
2.
Perubahan sedikit
pada warna yang pada gambar awal gambar memiliki detail yang jelas namun
setelah dikompresi warna gambar sedikti berkurang.
Di Postkan oleh kelompok: Dewo Sidharta Simanjutak dan Rudy Kurniawan (4IA03)