July 23rd, 2008 §
Beberapa hari ini saya dibuat bingung dengan beberapa error yang muncul saat saya meng-compile sebuah program yang melibatkan OpenCV dan Borland C++ builder v 6.0. Entah kenapa, compiler Borland saya mengeluarkan pesan “undefined function” untuk fungsi cvCreateCameraCapture( ), sebuah fungsi yang digunakan untuk mendapatkan capture file dari webcam. Padahal OpenCV yang saya gunakan adalah versi terbaru, yakni OpenCV 1.0. Anehnya lagi, di manual OpenCV tersebut juga dituliskan dokumentasi API-nya, termasuk fungsi cvCreateCameraCapture tersebut. Mengapa compiler tidak mendeteksinya ?
Saya curiga dengan karakteristik project OpenCV ini. Saya pun pernah mengalami hal serupa, saat saya mencoba menggeluti framework CakePHP. Masalah kompatibilitas fungsi yang ada di versi lama belum tentu ada di versi terbaru. Ya, saat itu saya kehilangan beberapa class PHP yang saya gunakan di framework lama karena saya mengupdate pustaka dengan framework yang baru. Masalah ini kemudian saya analogikan ke OpenCV ini. Saya menduga, ada beberapa library yang hilang dari OpenCV versi lama alias versi beta terakhir. Untuk memastikannya, satu-satunya cara adalah melakukan instalasi OpenCV versi beta dan menjalankannya.
Saya kemudian mencoba OpenCV versi beta 5. Setelah instalasi, saya mencoba mengganti fungsi cvCreateCaptureCamera dengan fungsi cvCaptureFromCAM(‘-1′). Parameter -1 digunakan untuk menginisiasi webcam yang terhubung di komputer. Setelah beberapa kali menyesuaikan dan memasukkan kembali path-path integrasi OpenCV dan Borland C++ Builder, akhirnya program bisa berjalan dengan lancar
July 22nd, 2008 §
Salah satu teknik dalam pemrosesan citra digital adalah tresholding. Tresholding sangat bermanfaat untuk mengubah image grayscale menjadi binary image, hanya hitam dan putih saja. Nah, kita bisa memberikan sebuah “batas” (treshold value) untuk menentukan kadar kehitaman gambar kita. Jika kadar grayscale gambar di atas treshold value, nilai piksel menjadi 1 (hitam). Jika di bawah treshold value, nilai piksel adalah 0 (putih). Berikut ini salah satu contoh penerapan tresholding menggunakan OpenCV dan C++ builder.
void __fastcall TForm1::Button3Click(TObject *Sender){
cvNamedWindow( “Original”, 1 );
cvMoveWindow(“Original”,460,60);
cvNamedWindow( “Result”, 1 );
cvMoveWindow(“Result”,80,160);
image = cvLoadImage(“path\ke\file\gambar”) ;
image2Gray = cvCreateImage(cvSize(image->width,image->height), 8, 1);
image2 = cvCreateImage(cvSize(image->width,image->height), 8, 3);
cvConvertImage(image, image2, 0);
cvCvtColor( image2, image2Gray, CV_BGR2GRAY);
cvThreshold(image2Gray, image2Gray, 128, 255, CV_THRESH_BINARY);
cvShowImage( “Original”, image);
cvShowImage( “Result”, image2Gray);
}
July 17th, 2008 §

Untuk sementara, dua bulan sudah berlalu. Banyak hal yang sudah saya pelajari dari image processing dan semua simulasi dilakukan dengan MATLAB. Untuk aplikasi dan penerapan beberapa metode image processing, saya menggunakan sistem operasi Windows XP, Borland C++ Builder versi 6, Video OCX, dan OpenCV Library. Borland C++ Builder digunakan sebagai IDE untuk developing interface aplikasi yang menerapkan beberapa metode riset yang akan diteliti. Video OCX adalah sebuah pustaka ActiveX yang mendukung image processing dan real-time capturing dari webcam (video camera digital yang melalui USB port). OpenCV Library digunakan sebagai pustaka utama pemrosesan citra. OpenCV atau Open Source Computer Vision Library mengandung lebih dari 300 kelas dan ratusan fungsi di dalamnya, yang sangat powerful untuk riset image processing. OpenCV juga mendukung beberapa pustaka untuk object recognition dan object tracking.
Berikut ini langkah-langkah instalasi Borland C++ Builder, Video OCX dan OpenCV Library :
I. Bahan-bahan :
1. Source installer Borland C++ Builder versi 6.0
2. Video OCX Installer
3. OpenCV Library
II. Proses Instalasi :
1. Instal ketiga bahan tersebut dengan mengeksekusi file executable yang tersedia.
2. Setelah ketiganya terinstal, kita akan mengintegrasikan VideoOCX dengan Borland C++ Builder. Berikut ini langkah-langkahnya :
a. Buka Borland C++ Builder (BCB).
b. Pada BCB, cari tab Component >> Import ActiveX control.
c. Browse beberapa komponen, temukan komponen VideoOCX dan VideoOCX Tools
d. Klik install. Lakukan secara berurutan untuk dua komponen tersebut.
3. Preintegrasi OpenCV dan BCB :
a. Buka folder C:\\Program Files\OpenCV\bin
b. Kopikan semua file *.dll dalam folder tersebut ke C:\\Windows\system32
c. Buka folder C:\\Program Files\highgui2\bin dan kopi file *.dll dalam folder tersebut
d. Pastekan juga file tadi ke ke C:\\Windows\system32
4. Integrasi OpenCV dan BCB. Kita akan memasukkan path dari pustaka OpenCV pada konfigurasi BCB. Berikut ini langkah-langkahnya :
a. Buka BCB, cari tab Project >> Options >> Directories >> Include Path
b. Kemudian klik simbol “…” untuk browsing file
c. Masukkan semua path di bawah ini :
C:\\Program Files\OpenCV\cv\include
C:\\Program Files\OpenCV\cvaux\include
C:\\Program Files\OpenCV\cxcore\include
C:\\Program Files\OpenCV\highgui2
C:\\Program Files\OpenCV\otherlibs\cvcam\include
C:\\Program Files\OpenCV\otherlibs\highgui
C:\\Program Files\OpenCV\highgui2\otherlibs\highgui2
c. Klik OK, dua kali supaya path tersimpan
d. Masukkan juga path library : View >> Project Manager >> Pilih Project1.exe (atau sesuai dengan nama project Anda) >> klik kanan >> Add (tambahkan library dari folder OpenCV/highgui2/lib) :
cv.lib
cvaux.lib
cxcore.lib
cvcam.lib
highgui.lib
highgui2.lib

e. Cek integrasi dengan compile (tekan F9) program OpenCV sederhana, semisal
cvNamedWindow(“test”,1);
Oya, jangan lupa memasukkan file-file *.h di bawah ini dalam source code Anda
#include<cv.h>
#include<highgui.h>
#include<cvcam.h>
#include<cxcore.h>
#include<cvaux.h>
Referensi :
1. Situs Resmi Intel Corporation, OpenCV Technology
2. Sourceforge OpenCV
3. CVS Reference
4. Mailing List OpenCV Yahoo.Com
5. Download Installer untuk Windows dan Linux
6. Manual lama (tahun 2001) (PDF, 3.4 MB)
7. Instalasi OpenCV di Windows (Leeds University)
July 17th, 2008 §
Berikut ini beberapa materi digital image processing yang sudah saya pelajari dan beberapa implementasi dasarnya menggunakan Matlab :
1. Histogram analysis, color tone dan dasar pemrosesan citra
Materi ini berkisar tentang pengukuran kadar gray level (intensitas) pada sebuah gambar. Untuk percobaan pertama, lebih banyak menggunakan gambar gray level yang sudah dinormalisasi menggunakan fungsi im2double(). Dengan histogram kita bisa mengetahui seberapa besar kadar hitam dan putih, serta perpaduan keduanya pada sebuah gambar gray level. Selain itu dibahas pula beberapa materi tentang pengubahan gambar warna (RGB, HSV, HSI, CMYK) dan pemrosesan kadar intensitas dari gambar tersebut.
2. Linear Transform
Berangkat dari histogram, kita bisa memanipulasi sebuah gambar gray level menggunakan beberapa cara. Linear transform di sini berarti kita memanipulasi sebuah citra pada domain spatial (2D atau x,y). Transformasi ini meliputi :
a. Contrast Enhancement (Stretching)
b. Clipping
c. Tresholding
3. Filtering
Materi ini berkisar tentang penerapan filter/mask pada sebuah citra. Sebuah citra bisa diperbaiki dengan menerapkan fungsi-fungsi tertentu pada citra tersebut. Filtering bermanfaat untuk noise reduction pada sebuah citra. Beberapa jenis noise bisa dihilangkan dengan konsep filtering yang berbeda. Prinsip filtering ini pada dasarnya menerapkan konsep konvolusi (dipelajari di sinyal dan sistem, teknik elektro). Beberapa teknik filtering yang sudah dipelajari antara lain :
a. Mean filter (Averaging filter)
b. Median Filter
c. Edge Detection
4. Pattern Recognition
Dasar dari pengenalan pola adalah penggunaan tempate matching. Pada tema ini, kita diminta untuk melakukan pencarian sebuah pola (template) pada sebuah gambar asal. Jika pola tersebut sesuai (dengan kata lain, error antara pola dan area tertentu dalam gambar tersebut = 0), maka kita sudah menemukan lokasi template tersebut dari gambar awal.
July 17th, 2008 §
Akhirnya ….sempat juga menginstalasi wordpress untuk membuat log kecil-kecilan tentang riset yang saya lakukan. Ya, blog ini nantinya akan menampung semua catatan teknis tentang riset pemrosesan citra yang sedang saya lakukan di King Mongkut’s Institute of Technology, Ladkrabang. Mengapa saya memutuskan untuk membuatnya terpisah dengan blog pribadi saya. Alasannya simpel, supaya materi dalam blog ini lebih objektf…tidak tercampuri oleh urusan-urusan pribadi yang seharusnya tidak perlu dibaca. So, muga-muga bisa membantu rekan-rekan semua yang juga mendalami riset tentang image processing dan computer vision…