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.
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.
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.
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 :
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
else
return;
end
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);