Anda di halaman 1dari 7

Setelah kemaren bikin kompresi citra grayscale, berikutnya aku coba bikin kompresi buat yang RGB.

Kalau citra
grayscale hanya terdiri dari satu matrik dua dimensi yang berisi nilai derajat keabuan, maka citra RGB terdiri dari satu
matrik tiga dimensi. Misal matriknya kita sebut M[baris,kolom,RGB]. Baris dan kolom menunjukkan resolusi citra (baris x
kolom piksel). Sedangkan RGB bernilai 3, sehingga matrik M[baris,kolom,1] menunjukkan nilai derajat R(Red) dari citra,
M[baris,kolom,2] menunjukkan nilai derajat G(Green) dan M[baris,kolom,3] menunjukkan nilai derajat B(Blue).
Kompresi dilakukan dengan metode kuantisasi(soalnya yang paling gampang yang ini...ni...), yakni dengan mengurangi
derajat R, G dan B. Pada percobaan digunakan citra RGB 256 bit dan dikompresi menjadi citra RGB 128 bit. Citra hasil
kompresi terlihat lebih redup dibanding citra asal. Ini dapat dilihat dari histogram citra, yang semula 256 bit menjadi 128
bit. Ya....yang namanya dikompres, resiko kualitas citra menjadi tak seindah warna aslinya memang sering terjadi. Kalo
udah gitu mau apa lagi...... Sekarang tinggal pilih yang mana...Ukuran citra besar dan tampilan visualnya bagus (cerah),
atau ukuran citra kecil tapi tampilan visualnya jelek (redup). Pinginnya sih ukuran citra kecil dan tampilannya tetep
bagus.... Namanya juga manusia...pinginnya semua yang terbaik. Tapi gak usah kuatir, untuk yang ini nanti akan coba
aku buat lagi dengan algoritma lainnya.
Hasil visualisasi citra sebelum dan sesudah kompresi dapat dilihat dibawah.

Bagian atas adalah citra sebelum kompresi dan histogram citra sebelum kompresi, sedangkan yang dibawah

adalah citra setelah kompresi dan histogram citra setelah kompresi. Silakan dinikmati.

Kompresi Citra Dengan Matlab


Citra (image) adalah gambar pada bidang dua dimensi yang dihasilkan dari gambar
analog dua dimensi yang kontinyu menjadi gambar diskrit melalui proses digitasi.
Secara harafiah, citra (image) adalah gambar pada bidang dua dimensi. Ditinjau dari
sudut pandang matematis, citra merupakan fungsi menerus (continue) dari
intensitas cahaya pada bidang dua dimensi.Sumber cahaya enerangi objek, objek
memantulkan kembali sebagian dari berkas cahaya tersebut.Pantulan cahaya ini
ditangkap oleh oleh alat-alat optik, misalnya mata pada manusia, kamera, pemindai
(scanner),dan sebagainya, sehingga bayangan objek yang disebut citra tersebut
terekam.

Teknik-teknik pengolahan citra mentransformasikan citra menjadi citra


lain.Jadi,masukannya adalah citra dan keluarannya juga citra, namun citra keluaran
mempunyai kualitas lebih baik daripada citra masukan. Termasuk ke dalam bidang ini juga
adalah pemampatan citra (image compression).

Pemampatan atau kompresi citra merupakan suatu metode yang sangat bermanfaat bagi
perkembangan citra digital. Dengan kompresi, data citra digital yang ukurannya besar,
dapat dikompres sehingga mempunyai ukuran yang lebih kecil. Hal ini jelas sangat
menguntungkan untuk berbagai aplikasi pertukaran data misalnya rekaman medis
kedokteran (medical images) antar rumah sakit, rekaman kejahatan kepolisian (crime
images) untuk data sidik jari (finger print).

Salah satu teknik kompresi yang cukup terkenal adalah kompresi JPEG (Join Photographic
Expert Group). Kompresi JPEG menggunakan metode Lossless Compression, yaitu
Kompresi citra dimana hasil dekompresi dari citra yang terkompresi sama dengan citra
aslinya, tidak ada informasi yang hilang. Sayangnya ratio kompresi citra metode ini sangat
rendah. Metode ini cocok untuk kompresi citra yang mengandung informasi penting yang
tidak boleh rusak akibat kompresi, misal kompresi citra hasil diagnosa medis. Perhatikan
contoh pemampatan citra dengan metode JPEG berikut ini. Citra awal yang memiliki size
38,411 kb dapat dikompres menjadi 33,729 kb.

Komponen dalam mendesain tampilan :

1. static text

2. Axes

3. Push Button

Sesuaikan pengaturan dalam property Inspector dengan cara mengeklik komponen 2 kali,
maka akan tampil jendela property Inspector seperti dibawah ini.

Langkah pertama dengan mendesain tampilan seperti gambar di bawah ini


Simpan desain tampilan, setelah berhasil menyimpan maka akan muncul editor untuk menulis
coding.

setelah desain form sudah jadi, maka kita bisa coba untuk mengkompresi gambar dengan cara
klik Button " Buka Citra", kemudian pilih gambar yang akan di kompres.
Lakukan kompes gambar dengan mengeklik tombol Button " Kompresi", maka akan muncul form
dialog untuk menyimpan gambar hasil dari kompresi
Lihat hasil gambar Asli dan gambar yang sudah di kompresi. Ukuran file gambar tersebut
berubah menjadi kecil dari 38,411 Kb menjadi 33,729 Kb. Akhiri aplikasi tersebut dengan tombol
"Keluar", pilih "Ya".
Berikut Coding aplikasinya :

function varargout = aplikasi(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @aplikasi_OpeningFcn, ...
'gui_OutputFcn', @aplikasi_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

function aplikasi_OpeningFcn(hObject, eventdata, handles, varargin)


handles.output = hObject;
guidata(hObject, handles);

function varargout = aplikasi_OutputFcn(hObject, eventdata, handles)


varargout{1} = handles.output;

function btn_buka_Callback(hObject, eventdata, handles)

[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));
info = imfinfo(fullfile(nama_path1, nama_file1));
size_file = info.FileSize/1000;
guidata(hObject,handles);
handles.current_data1=handles.data1;
axes(handles.citra_asli);
imshow(handles.data1);
set(handles.text4,'String',nama_file1);
set(handles.text5,'String',size_file);

else
return;
end

function btn_kompres_Callback(hObject, eventdata, handles)


[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.citra_kompresi);
imshow(citra_kompres);
info = imfinfo(fullfile(path_simpan,nama_file_simpan));
size_file_simpan = info.FileSize/1000;
set(handles.text8,'String',nama_file_simpan);
set(handles.text9,'String',size_file_simpan);

function btn_keluar_Callback(hObject, eventdata, handles)

selection=questdlg(['Keluar ' get(handles.figure1,'Name')''],...


['Keluar ' get(handles.figure1,'Name')''],...
'Ya','Tidak','Ya');
if strcmp(selection,'Tidak')
return;
end
delete(handles.figure1)

Anda mungkin juga menyukai