Monday, December 1, 2008

Monday, November 17, 2008

Kompresi Citra Grayscale dengan Algoritma RLE (Run Length Encoding)

Sebelumnya sudah pernah dibahas, metode kompresi dengan algoritma kuantisasi. Algoritma kuantisasi merupakan teknik kompresi yang lossy, artinya banyak informasi dari citra yang hilang, sehingga akan sulit untuk didekompresi kembali.
Nah kalau Algoritma RLE ini merupakan teknik kompresi yang lossless, sehingga kita dengan mudah dapat melakukan dekompresi citra kembali.
Bagaimana algoritma RLE bekerja? Kita coba implementasikan dengan citra grayscale ukuran 6x6 bit (8 derajat keabuan) sebagai berikut:

1 1 1 7 1 3
4 4 6 1 2 2
7 7 7 5 5 5
6 4 4 2 2 2
5 5 2 2 2 1
2 3 3 3 0 0

Kode RLE merupakan pasangan intensitas warna dan banyaknya intensitas warna yang muncul berurutan. Sehingga di dapat kode RLE nya adalah sebagai berikut:
1 3 7 1 1 1 3 1 4 2 6 1 1 1 2 2 7 3 5 3 6 1 4 2 2 3 5 2 2
3 1 1 2 1 3 3 0 2

Cara membaca kode diatas adalah : intensi
tas warna 1 muncul 3 kali, intensitas warna 7 muncul 1 kali, intensitas warna 1 muncul 1 kali, intensitas warna 3 muncul 1 kali,...... dan seterusnya. Cocokkan dengan citra aslinya.
Berikutnya ini adalah source untuk mebuat kod
e RLE tersebut. Seperti biasa dibikinnya pake Matlab.
g adalah citra grayscale yang kita punya. Hasilnya akan ditampung dalam array yang diberi nama rle. Nah karena dapam array rle kita juga menyimpan berapa kali intensitas warna tersebut muncul, maka untuk mendekompresi kembali tentu merupakan perkara yang mudah.

Friday, October 31, 2008

Metode Cramer untuk penyelesaian SPL dengan Matlab

Sebenarnya kalo mau menyelesaikan SPL dengan Matlab, gampang sih....tingal ketikkan tik tik tik...enter... ketemu penyelesaiannya. Beres. Tapi inget kan...dulu kita pernah pelajari Metode Crammer, yang rumusannya seperti ini:
Nah...dari sini dapat kita buat algoritmanya:

Pertama : Masukkan matrik A dan B.

Kedua : Cek dulu ukuran matrik A dan B, matrik A haris bujur sangkar dan B harus matrik kolom yang jumlah barisnya sama dengan A.

Ketiga : Musti dicek juga, determinan matrik A, Karena jika determina matrik A = 0, ya kita gak bisa dapatkan satu penyelesaian dong. Karena bisa jadi ada banyak penyelesaian, dan bisa jadi juga nggak ada penyelesaian.

Keempat: Kita cari matrik A1 sampai dengan Aj berikut determinannya. Setelah itu masing-masing matrik dicari determinannya.

Kelima : Penyelesaian didapat dengan membegi determinan matrik A1 s.d Aj dengan determinan matrik A.

Thursday, September 25, 2008

Membuat Tombol Cancel pada Waitbar dengan Matlab

Yakin deh...pasti udah pada nggak asing lagi. Tapi berhubung udah lama nggak ada apdetan baru...nggak ada salahnya didokumentasikan. Lebih jelas nanti dapat dilihat pada tool help yang tersedia pada Matlab. Contoh sourcenya adalah sebagai berikut:

Waitbar akan nampak secara visual dengan tambahan tombol cancel dibawahnya.


Pada code tertulis 'batal', dimana batal adalah fungsi yang akan dieksekusi jika tombol batal ditekan/diklik.

Monday, June 2, 2008

Belajar C++ (Variabel dan Tipe Data)

<<Materi sebelumnya>>
Variabel merupakan sarana yang digunakan untuk menyimpan data. Nama variabel (identifier) bebas, tetapi harus memperhatikan hal-hal sebagai berikut:

  • tidak boleh ada spasinya
  • tidak boleh mengandung operator aritmatik
  • tidak boleh diawali dengan angka
  • tidak boleh merupakan reserved word dalam bahasa pemrograman.
  • mencerminkan data yang akan disimpan.
Macam-macam tipe data :

Deklarasi variabel
Contoh:

int a;
float b
char n_hrf;
double gaji;
char nama[20];

dsb.

Contoh lain:
int a;
int b;
int c;

dapat disingkat penulisannya menjadi:

int a,b,c;

Sampai jumpa di materi selanjutnya.

Thursday, May 15, 2008

Membaca file teks di Matlab

Jika kita melakukan programing dengam Matlab seringkali kita menggunakan data berupa matrik yang ukurannya besar pada saat mengetes program yang kita buat. Kalau data ini harus diinputkan dari keyboard satu persatu, bayangkan betapa lamanya proses untuk itu. Akan lebih sederhana jika matrik tersebut kita simpan dalam sebuah file teks, yang nantinya dapat kita load sewaktu-waktu.
Contoh:
Buat file text (dengan notepad misalnya) dengan data sebagai berikut:
25 26 67 68 89 79 28
27 24 16 28 29 16 29
23 35 27 28 29 11 12
87 23 56 79 25 67 25
Untuk mengidentifikasi data satu dengan yang lain, dipisah dengan minimal satu spasi. Simpan file dengan nama data1.txt
Untuk mendapatkan data tersebut ketikkan instruksi LOAD dengan format berikut di command window Matlab dan hasilnya dapat dilihat bahwa matrik yang kita punya akan menjadi nilai suatu variabel (misalnya x).
>> x=load('data1.txt')
x =
25 26 67 68 89 79 28
27 24 16 28 29 16 29
23 35 27 28 29 11 12
87 23 56 79 25 67 25
Instruksi diatas kita gunakan jika datanya numerik. Bagaimana jika yang kita simpan dalam file teks adalah berupa string. Jangan kuatir, Matlab menyediakan juga instruksi untuk itu. Salah satunya dapat kita gunakan TEXTREAD.
Contoh:
Buat file teks dengan data string berikut:
Ini adalah contoh pesan yang dituliskan dalam file teks. Akan dicoba untuk membaca file ini dengan Matlab
Simpan dengan nama pesan.txt
Untuk mendapatkan kembali data tersebut ketikkan instruksi TEXTREAD dengan format berikut, melalui command window di Matlab.
>> n=textread('pesan.txt','%s')
n =
'Ini'
'adalah'
'contoh'
'pesan'
'yang'
'dituliskan'
'dalam'
'file'
'teks.'
'Akan'
'dicoba'
'untuk'
'membaca'
'file'
'ini'
'dengan'
'Matlab'
Untuk format file yang lain bisa diposting lagi lain waktu. Ok...

Friday, May 9, 2008

Belajar C++ (Struktur program)

Contoh program pada materi berikut dapat dijalankan dengan Borland C++ (turbo C++ juga boleh). Secara umum struktur program dalam C++ adalah sebagai berikut:
deklarasi header file/preprocessor
deklarasi konstanta
deklarasi var global
deklarasi fungsi
deklarasi class
program utama (fungsi utama)
main() {
……
……
}
Keterangan :
Deklarasi header file diawali dengan #include <.......> atau #include "........." Titik-titik diisi dengan nama header file yang ingin digunakan. Header file merupakan suatu fungsi yang mendukung eksekusi instruksi tertentu dalam C++
Deklarasi konstanta (bisa ada bisa tidak)
Deklarasi variabel global (bisa ada bisa tidak)
Deklarasi fungsi bisa ada bisa tidak. Fungsi juga dapat diletakkan seletah fungsi main().
Deklarasi class (bisa ada bisa tidak)
Fungsi utama, harus ada, diawali dengan { dan diakhiri dengan }. Didalamnya berisi instruksi-instruksi yang nantinya akan dieksekusi berikut deklarasi variabel (variabel lokal) yang diperlukan.

Beberapa header file yang sering digunakan :
iostream.h
Untuk instruksi:
cout<<”.....................”; cin>>nama_var;

conio.h
Untuk instruksi:
getch();
clrscr();

Instruksi untuk memindah cursor dibaris berikut:
”\n”
<<endl; Menuliskan komentar : // Jika komentar hanya satu baris /*.....*/ Sangat berguna jika komentar lebih dari satu baris. C++ bersifar case sensitive à membedakan huruf besar dan huruf kecil, sehingga: instruksi harus ditulis dalam huruf kecil Variabel yang ditulis dengan huruf kecil dan huruf besar berbeda. Contoh program : Contoh pertama berikut akan menampilkan teks Belajar C++ di layar.


//ini contoh pertama
#include "iostream.h"
#include "conio.h"
main() {
cout<<"Belajar C++"; getch(); }
//ini contoh kedua
#include "iostream.h"
#include "conio.h"
main() {
cout<<"Belajar C++";
cout<<"Media Belajar";
cout<<"Pemrograman Dasar";
getch(); }

Contoh kedua diatas akan menampilkan tulisan sesuai dengan yang diapit tanda petik dan ditampilkan dalam satu baris

Contoh ketiga berikut akan menampilkan tulisan sesuai dengan yang diapit tanda petik dan ditampilkan dalam tiga baris

//ini contoh ketiga
#include "iostream.h"
#include "conio.h"
main() {
cout<<"Belajar C++\n";
cout<<"Media Belajar\n";
cout<<"Pemrograman";
getch(); }


Contoh
keempat akan memberikan output sama dengan contoh tiga.
//ini contoh keempat
#include "iostream.h"
#include "conio.h"
main() {
cout<<"Belajar C++"<<endl;
cout<<"Media Belajar"<<endl;
cout<<"Pemrograman Dasar"<<endl;
getch(); }


Coba tebak...output dari contoh kelima berikut.

//ini contoh kelima
/* Pengggunaan \n
untuk mengatur tampilan */
#include "iostream.h"
#include "conio.h"
main() {
cout<<"Belajar\n C++\n";
cout<<"\nMedia Belajar";
cout<<"\nPemrograman\nDasar"; getch(); }


Sampe jumpa di materi selanjutnya......

Tuesday, April 15, 2008

Membaca file gambar dengan Java

Script berikut digunakan untuk membaca file gambar dan menampilkan ke suatu frame. Untuk membaca file menggunakan imageIO. Gambar akan terbaca dan tersimpan ke variabel image. Variabel image berisi informasi yang terkandung pada file gambar yang dibaca.
Berikut ini script yang digunakan untuk membaca gambar :

Outputnya sebagai berikut :

Nah...kalo yang ini adalah isi dari variabel image :

Hal lain yang ingin aku bikin adalah, gimana caranya agar informasi tentang derajat keabuan citra (untuk citra grayscale), ataupun nilai RGB (untuk citra RGB) bisa didapat? Wah kalo yang ini harus belajar lagi nih....

Monday, March 31, 2008

OOP dengan Java

Selama ini kalau untuk OOP aku selalu menggunakan C++. Pingin juga sih tau yang lainnya....tapi brubung waktu buat belajar gak banyak lagi....so kalau gak karena kebutuhan ya gak bakalan belajar...he...he.
Nah, kebetulan dalam waktu dekat ini karena kebutuhan, mendorong aku belajar mengenai OOP dengan Java. Yah...apa boleh buat...dengan males-malesan mulailah aku belajar. Dan ternyata.....menuariiikkkkk banget loh. Gak terlalu jauh dengan C++...malah kalo menurutku sih Java ini lebih mudah dibandingkan C++. Mumpung di kantor agak longgar waktunya, jadi aku bisa punya banyak waktu buat belajar. Beberapa yang sudah aku pelajari antara lain:
Instalasi Compilernya.
Aku install Java 2 SDK 5.0. Masternya aku dapet dari temen, soalnya waktu mo download lama banget. Apdet terbarunya sih udah ada, tapi buat belajar ini aja dah cukup lah. Habis itu seting path dan classpath.
Penerapan konsep OOP di Java(beserta contoh-contoh tentunya)
Di C++ ada tipe casting, di Java juga ada. Struktur classnya, gak beda jauh sama C++. Proteksi member class, ada private protected dan public. Kalo yang ini juga sama. Kalo di C++ ada konsep buat melakukan overload operator, di Java juga bisa. Di C++ ada konsep friend class, di Java secara spesifik ditulis friend sih gak ada, karena class-class yang ada pada file class yang sama ya langsung dianggap friend. Konsep inheritance juga sama. Trus kalo di C++ ada Multiple inheritance, di Java kayaknya gak ada. Waktu pake C++ juga jarang kepake sih... aku ngelihatnya kok malah menimbulkan pemahaman ganda (ambigu gitu). Class abstract juga ada di Java
Nah baru nyampe sini aja belajarnya. Kalau ada yang salah....tolong dikoreksi yah... Mo lanjut blajar lagi ah... kali ini masuk ke GUInya. Yang pake java.awt or javax.swing itu tuh.

Tuesday, February 19, 2008

Resize citra

Konsepnya sih sederhana, cuma mengurangi/menambah jumlah piksel yang menyusun citra. Pengurangan/ penambahan dilakukan secara proporsional baik pada panjang maupun lebar citra.

Berikut ini adalah code untuk memperkecil citra:



















Yang ini adalah code untuk memperbesar citra:
















Yang ini adalah citra asal 300 x 225 piksel:



Kalo yang ini setelah diperkecil menjadi 40x30 piksel



Terakhir adalah citra 40x30 piksel dibesarkan kembali menjadi 300x225 piksel :



Tuesday, January 15, 2008

Embeded pesan teks dengan metode EOF

Pada postingan terdahulu pernah dilakukan embeded pesan teks tetapi dengan metode LSB (Least Significat Bit). Kelebihan metode ini adalah ukuran citra tidak berubah, sedangkan kekurangannya, pesan teks yang dapat disisipkan terbatas.
Agar pesan teks yang disisipkan bisa lebih besar,
dapat menggunakan metode lain yakni EOF (end of file), dimana pesan akan ditambahkan pada akhir file gambar. Misalnya kita mempunyai file citra 120 x 160 piksel. Maka pesan akan ditempatkan pada baris ke 121 sampai selesai tergantung ada berapa karakter pesan teks yang akan disisipkan. Setiap baris akan memetakan pesan sebanyak 160 karakter (sesuai dengan ukuran citra).
Karena pesan ditambahkan pada akhir file gambar, maka ukuran citra yang didapat akan lebih besar dari citra asal. Tentunya, hal ini akan menimbulkan kecurigaan. Karena i
tu diusahakan agar pesan yang disisipkan tidak terlalu mempengaruhi ukuran citra.
Agar looping dalam source code nggak terlalu banyak.....(biar cepet), maka (lagi-lagi) menggunakan citra grayscale. Di bawah ini diberikan citra sebelum dan setelah disisipi pesan.
Citra sebelum disisipi pesan

Citra setelah disisipi pesan

Citra asal berukuran 150x200 piksel. Pesan yang disisipkan ada 422 karakter. Ukuran citra setelah disisipkan menjadi 153x200, dengan kata lain 422 karakter yang ada memakan tempat sebanyak 3 baris. Oleh karena itu, jika kita perhatikan pada citra setelah disisipi pesan, akan nampak seperti "garis-garis" tambahan dibagian paling bawah citra.