2.1. Teori Persamaan Segitiga
Teori persamaan segitiga adalah teori perbandingan antara tiap-tiap rusuk yang ada di dua segitiga jika segitiga tersebut dipasang sejajar. Teori persamaan segitiga ini sebenamya menggunakan prinsip-prinsip trigonometri.
x l x 2
y 2
Gambar 2.1. Persamaan Segitiga untuk Tg a
Persamaan di atas merupakan perbandingan fimgsi tg a dimana x l dibagi dengan y l merupakan tg a dan x2 dibagi dengan y2 juga merupakan tg a. Hal ini juga berlaku untuk fimgsi cos a dan sin a yang akan menghasilkan fungsi sebagai
berikut:
x1 x2
s i n a = i
V \P + y |- Vx22+y22
y I y2
Cos a=i
Vx I - + y I - Vx22+y22
Persamaan segitiga sin a (Rumus 2.1)
Persamaan segitiga cos a (Rumus 2.2)
2.2. Camera Calibration
Sebelum software ini digunakan perlu dilakukan camera calibration yang berfiingsi untuk mendapatkan matrix intrinsik dan ekstrinsik dari kamera. Sistem ini diperlukan sebab beberapa attribute dari kamera nantinya digunakan untuk melakukan perhitungan sehingga kita dapat menemukan letak dari sebuah benda.
Ada 5 unsur intrinsik dalam kamera yaitu nilai x dari titik pusat proyeksi, nilai y dari titik pusat proyeksi, nilai fokus kamera, aspect ratio, dan sudut antara lensa.
Nilai tengah dari proyeksi kamera biasanya terletak tepat atau di dekat titik pusat dari gambar yang diambilnya. Dalam penggunaannya, nilai titik tengah yang didapat haruslah tepat sebab jikalau teijadi pergeseran yang sangat kecil sekalipun akan sangat besar pengaruhnya terhadap nilai output program.
Fokus kamera sangat penting di dalam pengeijaan software ini sebab nilai fokus lensa kamera digunakan untuk melakiikan perhitungan jarak benda. Nilai fokus lensa kamera tersebut digunakan dalam rumus perbandingan segitiga sehingga nilainya harus tepat.
Aspect ratio biasanya bemilai 1.0 dan sudut antara lensa biasanya bemilai 90° (deraj at).
Sedangkan unsur ekstrinsik kamera ada 2 yaitu rotasi dan translasi matrik.
Matrik. Unsur Ekstrinsic kamera ini menggambarkan orientasi posisi dari kamera terhadap sistem koordinat sebenamya dalam artian w orld coordinate atau koordinat sesungguhnya dalam ruangan 3 dimensi.
Ada 2 macam cara yang dapat digunakan untuk melakukan camera calibration yang pertama menggunakan papan catur (lihat gambar 2.2) dan yang kedua menggunakan dua papan yang bergambar kotak-kotak disusun tegak lurus satu sama lainnya (lihat gambar 2.3).
Gambar 2.3. O. T. Luong ’s Calibrate Object
2.2.1. Metode Camera Calibration
Langkah pertama yang harus dilakukan dalam melakukan camera calibration adalah dengan mengambil beberapa gambar dari checkboard pattern (lihat gambar 2.2) dengan posisi yang berbeda-beda, kemudian dari beberapa sample tersebut dilakukan filterin g dengan filter simple Sobel edge, yaitu filter yang gunanya untuk menampilkan edge atau perubahan wam a yang mencolok pada gambar.
Gambar 2.4. Hasil dari Filtering Checkboard Pattern dengan Menggunakan Filter Simple Sobel Edge
Setelah dilakukan filter pada checkboard pattern, maka mata manusia dapat dengan mudah melihat perubahan edge di mana ada edge yang timbul dan ada yang tenggelam. Di samping itu terdapat sebuah edge yang melintang dari kanan ke kiri dan sebuah edge yang membujur dari atas ke bawah. Titik temu antara garis lintang dan garis bujur itulah yang menjadi pusat dari gambar atau dengan kata lain titik pusat dari kamera.
2.2.2. Intrisik Kamera Parameter
Setelah dilakukan kalibrasi maka didapatkan matrik intrinsik dan ekstrinsik kamera. Seperti yang telah dijelaskan di atas bahwa matrik intrisik terdiri atas fokus kamera, titik tengah proyeksi atau principal point, aspek rasio, dan sudut lensa kamera.
Dari hasil kalibrasi kamera kita mendapatkan matrik intrinsik (W). Matrik ini disusun oleh nilai fokus, aspek rasio dan principal po in t atau nilai tengah kamera. Matrik intrinsik sendiri adalah matrik yang menyatakan geometri dari kamera itu sendiri.
0 / v y .
0 0 1
M atrik intrinsik kamera (Rumus 2.3)
fx = nilai fokus kamera yang berorientasi sumbu x fy = nilai fokus kamera yang berorientasi sumbu y s = Scale fa cto r
xo = Titik tengah / Principal point sumbu x yo = Titik tengah / Principal point sumbu y Wint = Intrinsik matrik
2.2.3. Ekstrinsik Kamera Parameter
Selain matrik intrinsik kalibrasi kamera juga menghasilkan matrik ekstrinsik. Seperti yang telah dijelaskan diatas bahwa matrik ekstrinsik merupakan
f
n r 2 r 'i "
R = r 4 r 5 r 6 Matrik rotasi kamera (Rumus 2.4)
r 7 r 8 r 9
T=
tx
ty tz
Matrik translasi kamera (Rumus 2.5)
2.2.4. Cara Pefhitungan Intrinsik dan Ekstrinsik Matrik
Perhitungan intrinsik dan ekstrinsik matrik ialah dengan menggunakan persamaan linier. Sebelum melakukan perhitungan terhadap intrinsik dan ektrinsik matrik perlu dipahami dahulu tentang hubungan antara kamera, gambar, frame dan world coordinate.
Camera Model
Image frame
yiml
X:„
Frame Grabber
Gambar 2.5. Hubungan antara World Coordinate dan Camera Coordinate
Hubungan pertama adalah hubungan dari camera coordinate (?) ke world coordinate (?w) adalah sebagai berikut:
P = RP^, ~ T Hubungan antara camera dan world coordinate (Rumus 2.6)
P R Pw T
= Camera coordinate
= Matrik rotasi
= World coordinate
= Matrik translasi
Dari rumus 2.6 jik a dilakukan penjabaran terhadap rotasi dan translasi matrik maka dihasilkan persamaan matrik sebagai berikut:
'21-^11- ^22
'31-^ ' 3 2 + '33-^if + ■
Penjabaran dari rumus 2.6 (Rumus 2.7)
Penulisan secara singkat dari rumus 2.7 (Rumus 2.8)
Hubungan kedua adalah hubungan dari kamera ke gambar. Hubungan kamera ke gambar dipengaruhi oleh camera coordinate (P) dan image coordinate (p). Hubungan antara kamera dan gambar dapat dlihat pada persamaan 2.9.
X Y
(-^> .v) = Hubungan antara camera dan image coordinate (Rumus 2.9)
( X, y) = Image coordinate X,Y,Z = Camera coordinate f = Fokus kamera
Hubungan ketiga adalah antara gambar dan frame. Hubungan antara gambar dan frame ini menggambarkan terjadinya distorsi pada kamera yang disebabkan kelengkungan lensa.
Hubungan antara gambar dan frame (Rumus 2.10) .I'- U'/w
Xim,yim = Frame coordinate Sx,Sy = Scale Factor OxjOy = Image center
Dari Rumus 2.6, 2.9, dan 2.10 didapatkan persamaan untuk menghitung nilai fokus, rotasi dan translasi.
.. _ n = - f ~ ^'12
•' '/T?! ^.T Jx _
' 3 1 ^ u' ~ '32^vi- + ~
,■ V V ^ T- Model kamera (Rumus 2.11)
.V = .v™ - O,. = - / v --- ---; ---—
7'3iA - r + ?33Z„, + r .
Pada rumus 2.11 dimana nilai world coordinate (Xw,Yw,Zw) diketahui dan hasil proyeksi ke fram e diketahui (x,y). Dengan melakukan perhitungan matematika maka nilai rj i .. .rp<,, Tx, Ty, Tz, fx dan fy dapat diketahui.
2 1 + '23-^h' + ^v) - y 'f x i ^ n ^ w + ^ r) Gambar 2.6 Penurunan Rumus 2.11
Setelah diturunkan maka kita lakukan substitusi pada nilai f jf y = a.
Setelah dilakukan substitusi maka kita dapatkan persamaan matematika seperti pada gambar 2.7.
12
V(':iA\, - -f/'ijZ,, + 7,-) = ,v'a(7ii-V,, - + T^)
^ ^iYi^'22 + ^iZiJzs + XiTy - y,A', («ri j) - ^v};(c^i,) - ivZ,(07i3) - v, («r,.) = 0
Xj Xj V^ + X j Y j V 2 + X j Z j V ^ + X j V ^ - V j X j V ^ - V / ^ / ^ ’6 - y f Z j V j - V j V g = 0
Gambar 2.7 Lanjutan Penurunan Rumus 2.11
Pada penurunan terakhir terlihat adanya V]...V8. Dimana nilai vi...vg mewakili matrik rotasi, translasi, dan nilai fokus. Untuk melihat nilai substitusi dari V1...V8 lihat tabel 2.1
Tabel 2.1 Nilai Substitusi untuk vl..v 8
Nilai Vn Nilai Substitusi
Nilai V| T i l
Nilai V2 V22
Nilai V3 T23
Nilai V4 Ty
Nilai Vs a . r i i
Nilai Vfi a . r i 2
Nilai V7 a . r i3
Nilai vg a . Tx
Dari penurunan rumus diatas jik a kita memiliki pasangan nilai koordinat (Xwi,Ywi,Zwi) -> (xi,yi) dimana i = 1,2,3-.N maka 8 parameter yang tidak diketahui (vL.vS) dapat diketahui dengan memberikan N >= 7. Sehingga persamaan diatas menghasilkan matrix (A) seperti yang terlihat pada gambar 2.8.
Persamaan matrik tesebut (A.v = 0) dapat diselesaikan dengan menggunakan Singular Value Decomposition (SVD).
A =
A'iAi -Vili A'lZi .A'l -V i-li -I 'lli
.v^A% ,v-.}s .V-.Z-. ■Y’. - - v-.}^ - v-Z^ - V-.
- .v .v A > -.Vjv'lV - v j v Z ^ -.V v Gambar 2.8. Matrik untuk Rumus 2.11
2.3. Metode Pelacakan Objek Benda
Metode pelacakan objek benda didasarkan pada perbedaan wama dengan menggunakan metode CamShift. Sebenamya metode pelacakan objek ada banyak diantaranya: pelacakan kontur dengan Snakes, teknik Eigenspace Matching, pengolahan set dari Hipotesis Statistik, melakukan konvolusi image dengan Feature Detector. Namun metode-metode tersebut memiliki kekurangan yaitu proses komputasi yang terlalu kompleks, sehingga berakibat sistem beijalan lambat, dan juga tidak handal {robust) terhadap pengaruh noise dan objek lain (pergerakan tangan, wajah pihak lain).
Metode CamShift sendiri merupakan sebuah metode pelacakan objek berdasarkan pada wama, nilai statistik, dan distribusi probabilitas. Dimana nilai statistik dipakai untuk mengabaikan nilai-nilai simpangan yaitu yang terletak jauh dari daerah yang menjadi fokus perhatian, yang dalam computer vision biasa disebut ROI {Region O f Interest).
2.3.1. Metode CamShift
CamShift adalah singkatan dari Continuously Adaptive Mean Shift, yang merupakan pengembangan dari algoritma M ean Shift yang dilakukan secara terus menerus (berulang) untuk melakukan adaptasi atau penyesuaian terhadap distribusi probabilitas wam a yang selalu bembah tiap pergantian fram e dari video sequence, seperti dijelaskan oleh Gary R. Bradski dalam laporannya yang berjudul
^^Computer Vision Face Tracking For Use in a Perceptual User Interface'".
14
2.3.2. Sistem keija CamShifl
Dalam melakukan pelacakan benda, CamShift melacak koordinat X, Y, Area (luas), serta rotasi objek dari distribusi probabilitas wam a objek. Dimana area proporsional atau setara dengan sumbu Z, yaitu jarak antara objek dengan kamera. Sem akinjauh jarak antara kamera dengan objek maka area akan semakin mengecil dan sebaliknya. Blok diagram dari algoritma CamShift ditunjukkan pada Gambar 2.9. berikut
Gambar 2.9. Blok Diagram CamShift
Gambar 2.9. adalah ringkasan dari algoritma ini, dimana untuk setiap fram e video yang berupa citra dikonversi menjadi citra distribusi probabilitas wama melalui Color Histogram Model dari wama yang sedang dilacak. Titik tengah dan ukuran dari objek diperoleh dari algoritma CamShift yang dioperasikan pada color probability image (daerah berwama abu-abu pada
Gambar 2.9. adalah algoritma Mean Shift). Ukuran dan lokasi dari objek yang dilacak kemudian dipakai untuk menentukan ukuran dan lokasi dari search window untuk fram e video selanjutnya. Proses ini diulang terus-menerus untuk melakukan pelacakan secara terns menerus.
2.3.3. Distribusi Probabilitas Wama
Untuk memakai CamShift guna melacak objek berwama dalam video, maka sebelumnya harus dibuat terlebih dahulu citra distribusi probabilitas dari wama yang diinginkan. Untuk itu dibuat model dari wama hue yang diinginkan dengan color histogram.
Sistem wama yang dipakai dalam algoritma CamShift adalah Hue- Saturation-Value (HSV) yang berkorespondensi dengan proyeksi sistem wama RGB {Red-Green-Blue) secara diagonal dari hitam ke putih (lihat arah panah yang ditunjukkan pada Gambar 2.10. berikut).
Dengan menurunkan sumbu V {Value), seperti ditunjukkan pada Gambar 2.10 di atas, akan berkorespondensi dengan semakin kecilnya sub kubus (semakin gelap) pada RGB color cube pada Gambar 2.10.
16
Gambar 2 .W .H S V C o lo r System
Sistem wama HSV memisahkan antara Hue (wama). Saturation (tingkat konsentrasi dari wam a tersebut), dan Value atau Brightness (tingkat terang/gelap).
Model wama dibuat dengan membentuk histogram 1 dimensi dari channel H {Hue) pada sistem wam a HSV.
2.3.4. Langkah-langkah Algorithma CamShift
Algoritma CamShift adalah pemlangan dari algoritma Mean Shift, seperti ditunjukkan pada Gambar 2.9. Blok Diagram CamShift di atas, dimana langkah- langkah dari algoritma Mean Shift adalah sebagai berikut;
a. Ukuran search window yang sudah ditentukan.
b. Lokasi awal search window yang sudah ditentukan.
c. Hitung daerah mean dalam search window.
d. Posisikan search window ke tengah daerah mean seperti dihitung pada step c.
e. Ulangi step c dan d hingga konvergen (atau hingga pergeseran daerah mean kurang dari thresholdlhaXdiS yang ditentukan).
Sedangkan langkah-langkah dari algoritma CamShift adalah sebagai berikut:
a. Tentukan ukuran awal search window.
b. Tentukan lokasi awal dari search window.
c. Tentukan daerah kalkulasi {calculation region) pada bagian tengah search window dengan ukuran lebih besar dari search window.
d. Frame citra video dikonversi ke dalam sistem w am a HSV dan dilakukan color histogram lookup dalam calculation region yang akan menghasilkan citra distribusi probabilitas wama.
e. Lakukan algoritma Mean Shift seperti di atas (satu atau banyak iterasi) dengan input berupa ukuran dan lokasi search window serta citra distribusi probabilitas wama, simpan zeroth moment.
f. Set nilai x, y, z, dan head roll yang diperoleh dari step e.
g. Nilai X, y dipakai untuk set titik tengah search window, {2 * a rea ''^) untuk set ukuran search window.
h. Ulangi step c untuk setiap pergantian fram e citra video.
2.4. Stereo Mapping Depth Calculation
Stereo Mapping Depth Calculation adalah algorithma yang digunakan untuk menghitung jarak kedalaman sebuah objek yang terdapat pada dua buah image yang dihasilkan oleh dua buah kamera. Prinsip dari Stereo M apping Depth Calculation ini menggunakan sistem seperti mata kita yang dapat memperkirakan jarak benda dari image yang dihasilkan oleh mata kanan dan mata kiri.
Gambar 2.12. Gambar yang Tampak dari Mata Kanan dan Kiri Kita
18
Pada gambar 2.12. dapat kita lihat ada sedikit perbedaan gambar antara gambar kiri dan gambar kanan. Dari perbedaan kedua gambar tersebut maka kita dapat memperkirakan jarak dari sebuah objek. Sistem perhitungan kedalaman dengan menggunakan dua kamera sering disebut dengan binocular (dua lensa).
Kalau digambarkan dengan model adalah sebagai berikut;
Gambar 2.13. Gambar Binocular
P = Letak objek dalam ruangan 3 dimensi
Xi = Jarak jatuhnya bayangan terhadap titik pusat lensa / principal po in t (kiri) Xr = Jarak jatuhnya bayangan terhadap titik pusat lensa / principal point
(kanan)
Cl = Titik pusat kamera / principal point (kiri) Cr = Titik pusat kamera / principal point (kanan) f = Fokus kamera
T = Jarak antara dua kamera
Z = Jarak antara kamera dengan objek
Posisi objek yang tampak pada tiap-tiap gambar baik kiri maupun kanan bergantung pada kedalaman letak objek di area 3 dimensi. Dari gambar kiri dan gambar kanan dapat dihasilkan jarak antara mata dan objek. Jarak antara kamera
dan objek (Z) dapat dihitung dengan menggunakan teori persamaan segitiga seperti yang telah dijelaskan di atas.
Gambar 2.14 Perhitxingan Binocular
Secara perhitungan matematika didapatkan dua perbandingan yaitu perbandingan dengan menggunakan kamera sebelah kanan dan perbandingan dengan menggunakan kamera sebelah kiri.
X; A -+ I
A ' - I
•'V _ 2 f
T =
Rumus perbandingan kamera kiri (Rumus 2.12)
Rumus perbandingan kamera kanan (Rumus 2.13)
Rumus T (Rumus 2.14)
Jika rumus 2.14 dilakukan substitusi terhadap nilai (X + T/2) dan (X - T/2) maka didapatkan persamaan
20
T = Z I - y z | Perbandingan dari binocular ( Rumus 2.15)
Dari persamaan 2.15 dilakukan pengelompokkan terhadap nilai Z dan f maka dihasilkan persamaan 2.16 dimana (xr - X|) dapat disamakan dengan disparity ( d ).
T =
d
-V-Y,Persamaan untuk menghitung jarak benda (Rumus 2.16)
Persamaan untuk menghitung disparity (Rumus 2.17)
Jikalau dilakukan subtitusi lagi terhadap persamaan diatas maka didapatkan persamaan untuk menghitung nilai Z atau jarak antara kamera dengan benda.
Z - — Persamaan untuk m enghitungjarak (Rumus 2.18)
2.5. Open GL
Open GL merupakan sebuah application program m er’s interface ( API ) yang dapat mengakses hardware secara langsung. Open GL memiliki dua kelebihan yaitu pertama bahwa program yang ditulis dengan menggunakan standart bahasa Open GL dapat secara langsung mengakses hardware sehingga program dapat beijalan lebih c e p a t, dan Open GL sangat mudah untuk dipelajari dan dipakai.
Beberapa tahun yang lalu telah ada standart penggunaan grafik dalam pemrogramman komputer seperti GKS dan PHIGS tetapi kedua standart itu tidak memiliki jangka waktu hidup yang lama. Beberapa waktu kemudian Open GL keluar dari interface yang disebut GL Developed khusus untuk hardware Silicon Graphics Incorporated ( SGI ).
Open GL adalah sebuah library dimana pemakai hanya menggunakan function-function yang telah disediakan di dalamnya. Open GL memiliki lebih
dari 200 function. Function-function ini dipisahkan berdasarkan dari fungsi dan kegunaannya.
2.5.1. Primitive Function
Primitive function ini digunakan untuk mendefinisikan element yang dapat membuat gambar pada layar. Function ini dibedakan atas dua tipe: pertama geometric primitive, seperti polygon, yang dapat didefinisikan dua, tiga atau empat dimensi. Kedua discrete entities, seperti bitmap.
2.5.2. Attribute Function
Attribute function adalah kontrol untuk tampilan dari object primitive.
Function ini digunakan untuk mendefinisikan wama, tipe garis, material, sumber cahaya, dan texture.
2.5.3. Viewing Function
Viewing function digunakan untuk mendefinisikan property dari kamera.
Open GL menyediakan kamera yang dapat kita ubah posisi dan orientasinya ke object yang didefinisikan oleh prim itive function. Kita juga dapat mengatur lensa dari kamera sehingga kita dapat mendapatkan padangan yang sesuai seperti yang kita inginkan.
2.5.4. Input Function
Input function bukan bagian dari inti Open GL tetapi karena function ini sangat berguna sebagai interaksi dengan user yang biasa disebut Open GL Utility Toolkit atau GLUT. Function ini digunakan untuk melakukan penggontrolan terhadap input yang berasal dari keyboard atau mouse.
2.5.5. Control Function
Control Function digunakan untuk melakukan start dan terminate pada program-program Open GL dan mengubah beberapa fitur dari Open GL.
22
2.6. Environment Yang Digunakan Dalam Pengembangan Sistem
Dalam melakukan pengembangan sistem ini, menggunakan environment pendukung sebagai berikut:
• Intel® Image Processing Library (IPL)
• Intel® Open Source Computer Vision Library (OpenCV)
• High Graphical User Interface (HighGUI)
2.6.1. Image Processing Library (IPL)
Algoritma dalam Computer Vision selalu berhubungan dengan proses manipulasi terhadap citra (image), karena itu dalam pemakaiannya, OpenCV membutuhkan Intel® Image Processing Library (IPL) yang merupakan kumpulan struktur data dan fungsi-fiingsi dasar dengan bahasa pemrograman C/C++ yang mengimplementasikan beberapa algoritma dasar dalam image processing dan dikelompokkan dalam beberapa kategori, sesuai dengan penjelasan dari Intel Image Processing Library - Reference M a n u a l, yaitu sebagai berikut:
a. Image Creation and Access, seperti: pembuatan struktur image (iplCreatelmageHeader), pengkopian image (iplClonelmage), menentukan daerah operasi/fokus pada image yang biasa disebut dengan Region O f Interest (ROI) dengan fungsi iplSetROI, dan sebagainya.
b. Image Filtering, yang dibagi menjadi dua kategori yaitu:
• Linear Filter, seperti: Blur (iplBlur), konvolusi image dengan beberapa kernel yang sudah didefinisikan yaitu Sobel, Gaussian, Laplacian, dan sebagainya dengan fungsi iplFixedFilter. Disamping itu juga bisa dibuat sendiri kernel filte r dengan fungsi iplCreateConvKernel.
• Non-Linear Filter, seperti: Median Filter (iplMedianFilter), Max Filter (iplMaxFilter), dan sebagainya.
c. Linear Image Transform, seperti: Fast Fourier Transform (iplRealFft2D, iplCcsFft2D), Discrete Cosine Transform (iplDCT2D), dan sebagainya.
d. Geometric Transform, seperti: mengubah ukuran image (iplResize), mengubah orientasi image (iplRotate, iplMirror), dan sebagainya.
e. dan sebagainya.
IPL mendukung metode paralel dari teknologi Single-Instruction Multiple- Data (SIMD) yang terdapat pada generasi baru prosesor Intel. Teknologi ini meningkatkan performance dari fungsi-fungsi Image Processing yang bersifat computation-intensive secara signifikan, sehingga waktu proses dari aplikasi bisa dikurangi.
2.6.2. Open Source Computer Vision (OpenCV)
OpenCV adalah singkatan dari Intel® Open Source Computer Vision Library. Merupakan kumpulan dari struktur data dan fungsi-fungsi dalam bahasa pemrograman C serta beberapa class C++, yang menggunakan prinsip pemrograman berorientasi objek atau lebih dikenal dengan sebutan OOP {Object Oriented Programming). Kumpulan struktur data, fiingsi, dan class tersebut merupakan implementasi dari beberapa algoritma populer yang sering digunakan pada aplikasi Computer Vision dan dikelompokkan dalam beberapa kategori, sesuai dengan penjelasan dari Intel Open Source Computer Vision Library - Reference M a n u a l, yaitu sebagai berikut:
a. Basic Structure and Operations, yang dibagi lagi menjadi beberapa kategori sebagai berikut:
• Image Function, seperti: pembuatan header image dan alokasi data ( c v C r e a t e l m a g e ) , penghapusan image dari memori (cvReleaselmage), menentukan ROI (cvSetlmageROI), dan sebagainya. Perlu diperhatikan bahwa terdapat beberapa fiingsi yang memiliki kegunaan yang sama antara IPL dan OpenCV.
• Drawing Primitives, seperti: menggambar garis (cvLine), mencetak string (cvPutText), dan sebagainya.
• Utility Function, seperti: memisahkan wama image ke dalam masing- masing plane yang terpisah (RGB, HSV) dengan fiingsi cvCvtPixToPlane, melakukan fil l image dengan suatu nilai konstan (cvFillImage), dan sebagainya.
• dan sebagainya.
24
b. Motion Analysis and Object Tracking, seperti: melakiikan pelacakan wama (cvCamShift), menghitung optical flo w antara dua image dengan metode Lukas Kanade (cvCalcOpticalFlowLK), dan sebagainya.
c. Image Analysis, seperti: menghitung nilai mean pada image region (cvMean), menghitung nilai histogram image (cvCalcHist), dan sebagainya.
d. Object Recognition, berisi fungsi-fungsi yang digunakan pada sistem pengenalan objek, seperti: menghitung nilai likelihoodlkem m ^an (cvEViterbi) pada metode E H M M , menghitung koefisien decomposition dari input objek (cvCalcDecompCoef f) pada metode PCA, dan sebagainya.
e. dan sebagainya.
Struktur data utama yang digunakan pada sebagian besar fungsi IPL dan OpenCV yaitu struktur iplImage yang menyimpan informasi dari sebuah image, karena itu semua format citra (BMP, JPEG, TIFF, PNG) yang digunakan sebagai input harus diubah terlebih dahulu ke dalam struktur ipl Image. Listing program berikut menjelaskan struktur dari ipl Image:
t y p e d e f stru ct _ l p l l m a g e {
int n Size /* s ize of i p l l m a g e stru ct */
int ID /* i m a g e h e a d e r v e r s i o n */
int nChannel s;
int a l p haChannel;
int depth; /* p i x e l d e p t h in b i t s */
c har c o l o r M o d e l [4];
c har c h a n n e l S e q [ 4 ] ; int dat aOrd er;
int origin;
int align; /* 4- or 8 - b y t e a l i g n */
int width;
int height;
stru ct _ I p l R O I *roi; /* p o i n t e r to ROI if a n y */
struct _ l p l l m a g e *mas kR OI; / * p o i n t e r to m a s k ROI if a n y */
v o i d *imageld; /* use of the a p p l i c a t i o n */
stru ct _ I p l T i l e I n f o *tile Info ; /* c o n t a i n s i n f o r m a t i o n on t i l i n g */
int ima geSiz e; /* u s e f u l si ze in b y t e s */
cha r *image Data ; /* p o i n t e r to a l i g n e d image */
int wid thStep; /* size of a l i g n e d line in b y t e s */
int B o r d e r M o d e [4]; /* t he top, bottom, left, a nd right b o r d e r m o d e */
int B o r d e r C o n s t [4]; /* c o n s t a n t s for the top, bottom, left, and right b o r d e r */
ch ar * i m a g e D a t a O r i g i n ; / * p t r to full, n o n a l i g n e d i mage */
} Ipllmage;
Field width dan height menunjukkan panjang dan lebar citra dalam piksel. Sedangkan fie ld d epth berisi informasi tipe dari nilai piksel, yaitu:
a. IPL DEPTH SU - unsigned 8-bit integer value {unsigned char), b. IPL DEPTH 8S - signed 8-bit integer value {signed char atau char), c. IPL_DEPTH_16S - signed 16-bit integer value {short int),
d. IPL DEPTH 32S - signed 32-bit integer value {int),
e. I P L D E P T H 3 2 F - 32-bit floating-point single-precision value (float).
Field nChannels menunjukkan jum lah color plane pada citra, dimana citra grayscale memakai satu channel, sedangkan citra berwam a biasanya terdiri dari tiga atau empat channel. Field origin menunjukkan letak data nilai piksel citra di memory, apakah dimulai dari baris atas citxaJtop row {origin = IPL_ORIGIN_TL) atau dari baris bawah ciixa/bottom row {origin = IPL ORIGIN BL). Windows bitmap biasanya bertipe bottom-origin, sedangkan format citra lain pada umumnya bertipe top-origin.
Field dataOrder menunjukkan tipe color planes pada citra berwam a antara interleaved {dataOrder = IPL DATA ORDER PDCEL) atau Xerpisahlseparate {dataOrder = IPL DATA ORDER PLANE), seperti ditunjukkan pada Tabel 2.2. berikut:
Tabel 2.2 Data Order Nilai Piksel dari Struktur Ipl Image
Data Ordering Description RGB Example
(channel ordering = RGB)
Pixel-oriented All channels for each pixel are clustered.
RGBRGBRGB (line 1) RGBRGBRGB (line 2) RGBRGBRGB (line 3)
Plane-oriented
All image data for each channel is contiguous
followed by the next channel.
RRRRRRRRR (line 1) RRRRRRRRR (line 2) R plane RRRRRRRRR (line 3)
GGGGGGGGG (line 1)
GGGGGGGGG (line 2) G plane GGGGGGGGG (line 3)
26
Field widthStep berisi jum lah byte antar dua piksel pada kolom yang sama dengan bans yang berurutan atau dengan kata lain lebar citra dalam jum lah byte.
Field width tidak bisa dipakai untuk menghitung jarak (nilai byte) tersebut karena pada tiap bans bisa terdapat tambahan beberapa byte informasi untuk mempercepat image processing, sehingga terdapat jarak/gap antara akhir dari baris ke-i dan awal dari baris ke i+1. Field imageData berisi pointer ke baris pertama dari image data, jika terdapat beberapa plane pada image (jika fie ld dataOrder == IPL_DATA_ORDER_PLANE), masing-masing akan ditempatkan pada image terpisah dengan total baris height *nChannels.
Dapat dipilih daerah fokus pada image (berbentuk kotak) atau color plane tertentu saja, atau gabungan keduanya dan proses pada image hanya akan dilakukan pada daerah tersebut. Daerah fokus pada image disebut "Region o f Interest" atau ROI.
Pada struktur IplImage terdapat fie ld roi yang mendukung hal ini. Jika pointer tidak NULL, maka akan menunjuk ke struktur IplROI yang berisi parameter informasi daerah ROI (seperti ditunjukkan pada list program dibawah . berikut), jika NULL maka dianggap daerah ROI mencakup keseluruhan image.
t y p e d e f stru ct _ I p l R O I {
int coi; /* c h a n n e l of i n t e r e s t or COI */
int xO ffs et;
int yOffset;
int width;
int height;
} IplROI;
Tabel 2.3. berikut akan menjelaskan deskripsi dari tiap-tiap fie ld pada struktur Ipllmage dan atribut nilai yang didukung.
Tabel 2.3 Nilai Field pada Struktur Ipllmage
Description Value
Size of the Ipllmage header (for internal use) nSize in bytes Image Header Revision ID (internal use) ID number
Number of Channels 1 to N
(Including alpha channel, if any)
Alpha channel number N (0 if not present)
Bits per channel
Gray only IP L_D E P TH _1U (1 bit)
All images: color, gray, and multi-spectral IP L_D EP TH _8U (8 bit unsigned) (The signed data is used only as output for
some image output operations)
IP L_D E P TH _8S (8 bit signed)
IP L_D E P TH _16U (16 bit unsigned) IP L_D E P TH _16S (16 bit signed) IP L_D E P TH _32S (32 bit signed) IP L_D E P TH _32F (32 bit float) Color model 4 character string: "Gray", "RGB",
"RGBA", "CMYK", etc.
Channel sequence 4 character string, can be: "G",
"GRAY", "BGR", "BGRA", "RGB",
"RGBA", "HSV", "HLS", "XYZ", "YUV",
"YCr", "YCC", or "LUV"
Data Ordering IP L_D A TA _O R D E R _P IXE L
IP L_D A TA _O R D E R _P LA N E
Origin IP L_O R IG IN _TL (top left corner)
IPL_O R IG IN _B L (bottom left)
Scanline alignment lP L_A LIG N _D W O R D
IPL ALIG N Q W O R D
Image size: height Integer
Width Integer
Region of Interest (RO I) Pointer to structure
Mask Pointer to another Ipllmage
Image size (bytes) Integer
Image data pointer Pointer to data
Aligned width Width (row lengths in bytes) of image
padded for alignment Border mode of the top, bottom, left, right
sides of the image BorderMode[4]
Border constant of the top, bottom, left, right
sides of the image BorderConst[4]
Original image Pointer to original image data
Image ID For application use only, ignored by
the library
Tiling information Pointer to IplTilelnfo structure
2.6.3. High Graphical User Interface (HighGUI)
HighG U l merupakan kumpulan struktur data, fungsi, dan class dengan menggunakan bahasa pemrograman C/C++ yang merupakan library tambahan dari OpenCV dan IPL, berfungsi untuk membantu pengembangan aplikasi terutama dalam hal user-interface, dan dikelompokkan dalam beberapa kategori sebagai berikut;
a. Window Functions, berisi fungsi-fungsi yang mengatur window tempat menampilkan itnage hasil, seperti: membuat window (cvNamedWindow),
28
menghapus alokasi window dari memori (cvDestroyWindow), dan sebagainya.
b. Image Handling Functions, berisi fungsi-fungsi terhadap image, seperti: load image dari fd e (BMP, JPEG, PNG, TIFF) ke memori dengan tipe IplImage (cvLoadlmage), save image ke fd e (cvSavelmage), menampilkan image pada window tertentu (cvShowImage), dan sebagainya.
c. Video I/O Functions, berisi fungsi-fungsi terhadap fram e video/camera, seperti: melakukan alokasi dan inisialisasi struktur C vCapture untuk membaca video stream dari file AVI (cvCaptureFromAVI), mengambil fram e image dari camera atau file AVI (cvQueryFrame), melakukan alokasi dan inisialisasi struktur CvAVIWriter yang digunakan untuk menulis ke file AVI secara fram e by fram e (cvCreateAVIWriter), menuliskan sebuah fram e image ke AVI file (cvWriteToAVI), dan sebagainya
d. Support/System Functions, berisi fungsi-fungsi tambahan, seperti: menunggu penekanan tombol (cvWaitKey), menambahkan path ke dalam daftar search path (cvAddSearchPath),
e. dan sebagainya.