SKRIPSI
UNIVERSITAS INDONESIA
HALAMAN JUDUL
SKRIPSI
Diajukan sebagai salah satu syarat
untuk memperoleh gelar Sarjana Ilmu Komputer
Skripsi ini adalah hasil karya saya sendiri, dan semua sumber baik yang
dikutip maupun dirujuk telah saya nyatakan dengan benar.
Nama
NPM
: 0706271922
Tanda Tangan
Tanggal
: 15 Juli 2012
ii
HALAMAN PENGESAHAN
NPM
: 0706271922
Program Studi
: Ilmu Komputer
Judul Skripsi
: Rekonstruksi
Permukaan
Tiga
Dimensi
dengan
DEWAN PENGUJI
Penguji
Penguji
Ditetapkan di : Depok
Tanggal
: 15 Juli 2012
iii
KATA PENGANTAR
Ucap syukur dan terimakasih selalu terurai bagi tuhan semesta alam yang
Maha Berkehendak, Allah swt. Salam selamat semoga selalu tercurah bagi
pribadi yang telah menunjukkan eksistensinya sebagai pemimpin yang patut
diteladani, Muhammad saw.
Skripsi ini merupakan catatan akhir penulis yang menyempurnakan
perjuangan selama 10 semester di Fakultas Ilmu Komputer Universitas
Indonesia. Dalam pembuatan skripsi ini, ada banyak pihak yang berjasa bagi
penulis dan membantu penulis baik secara langsung maupun tidak langsung.
Dalam lembaran kecil ini, penulis berkeinginan untuk mengucapkan
terimakasih kepada pihak-pihak yang berjasa tersebut, yaitu:
1. Ibu, Bapak, Kakak, Adik, dan seluruh keluarga yang selalu memberikan
dorongan dan motivasi.
2. Bapak Ivan Fanany yang senantiasa memberikan ilmu dan pengarahan.
3. Seluruh Dosen Fasilkom UI yang telah memberikan banyak ilmu dan
motivasi.
4. Teman-teman KANGKUNG.
5. Teman-teman staf pengajar BTA 8 Depok yang selalu memberikan
dorongan dan semangat.
6. Juga kepada teman dan sanak saudara lainnya yang tak cukup untuk
dituliskan satu per satu di sini.
Akhir kata, semoga skripsi ini bisa memberikan manfaat dan semoga semua
pihak yang telah berjasa mendapatkan balasan kebaikan dari Allah swt.
Depok, 15 Juli 2012
Penulis
iv
Nama
NPM
: 0706271922
:-
Fakultas
: Ilmu Komputer
Jenis Karya
: Skripsi
Dibuat di
: Depok
Yang menyatakan
ABSTRAK
Nama
: Mohammad Agung Wibowo
Program Studi : Ilmu Komputer
Judul
: Rekonstruksi Permukaan Tiga Dimensi dengan Pendekatan Visi
Stereo
Rekonstruksi tiga dimensi objek masih menjadi bahasan yang belum kunjung usai
saat ini. Berbagai macam metode dan penelitian terus dikembangkan untuk
semakin menyempurnakan hasil dari proses rekonstruksi objek sekaligus
mengurangi biaya komputasi. Ada berbagai pendekatan yang bisa dilakukan untuk
merekonstruksi objek. Pendekatan yang dilakukan dalam penelitian ini ialah
dengan menggunakan visi stereo yang bersifat pasif. Proses rekonstruksi
dilakukan dengan menggunakan kamera stereo yang telah melalui proses
kalibrasi. Pada tahapan rektifikasi, digunakan algoritma Bouget untuk melakukan
penyerasian baris. Pada tahapan korespondensi, digunakan algoritma blockmatching stereo yang menggunakan metode SAD untuk menemukan fitur yang
bersesuaian. Pengukuran kedalaman dilakukan dengan metode triangulasi
berdasarkan informasi disparity. Sistem dikembangkan dalam bahasa C++ dan
menggunakan library OpenCV. Untuk melakukan visualisasi, digunakan Point
Cloud Library (PCL).
Kata kunci: Visi komputer stereo, visi stereo pasif, kalibrasi stereo, rektifikasi,
korespondensi, rekonstruksi objek
vi
ABSTRACT
Name
Faculty
Title
Key words: Stereo computer vision, passive stereo vision, stereo calibration,
rectification, correspondence, object reconstruction.
vii
DAFTAR ISI
HALAMAN JUDUL................................................................................................ i
HALAMAN PERNYATAAN ORISINALITAS .................................................... ii
HALAMAN PENGESAHAN ................................................................................ iii
KATA PENGANTAR ........................................................................................... iv
HALAMAN PERNYATAAN PERSETUJUAN PUBLIKASI .............................. v
ABSTRAK ............................................................................................................. vi
ABSTRACT .......................................................................................................... vii
DAFTAR ISI ........................................................................................................ viii
DAFTAR GAMBAR ............................................................................................. xi
DAFTAR TABEL ................................................................................................ xiii
DAFTAR LAMPIRAN ........................................................................................ xiv
BAB 1 PENDAHULUAN ...................................................................................... 1
1.1 Latar Belakang .............................................................................................. 1
1.2 Rumusan Masalah ......................................................................................... 2
1.3 Kontribusi Penelitian..................................................................................... 2
1.4 Ruang Lingkup Penelitian ............................................................................. 2
1.5 Tujuan Penelitian .......................................................................................... 3
1.6 Metode Penelitian.......................................................................................... 3
1.7 Sistematika Penulisan .................................................................................. 4
BAB 2 LANDASAN TEORI .................................................................................. 5
2.1 Visi Komputer ............................................................................................... 5
2.2 Pengenalan Pola ............................................................................................ 6
2.3 Pengolahan Citra .......................................................................................... 7
viii
Perancangan ............................................................................................ 33
ix
DAFTAR GAMBAR
Gambar 2.1 Diagram Hubungan antara Visi Komputer, Pengenalan Pola, dan
Pengolahan Citra ................................................................................6
Gambar 2.2 Konversi Citra RGB ke Citra Grayscale ........................................... 10
Gambar 2.3 Histogram pada Citra dengan Berbagai Tingkat Kecerahan ............. 11
Gambar 2.4 Bayangan Objek pada Image Plane Kamera..................................... 15
Gambar 2.5 Bayangan Objek pada Image Plane Kamera Setelah Posisi Image
Plane dan Pinhole Plane Ditukar .....................................................15
Gambar 2.6 Distorsi Radial yang Terjadi Pada Objek Berbentuk Persegi ........... 17
Gambar 2.7 Fase-fase Rektifikasi Stereo .............................................................. 26
Gambar 2.8 Ilustrasi block-matching stereo algorithm......................................... 28
Gambar 2.9 Triangulasi ......................................................................................... 31
Gambar 3.1 Alur Program Utama Sistem ............................................................. 33
Gambar 3.2 Alur Proses Kalibrasi Kamera Stereo ............................................... 34
Gambar 3.3 Flow Chart Koleksi Citra Stereo ....................................................... 35
Gambar 3.4 Flow Chart Proses Kalibrasi Kamera Stereo .................................... 36
Gambar 3.5 Fase-fase Korespondensi Stereo........................................................ 37
Gambar 3.6 Alur Rekonstruksi 3D Objek ............................................................. 38
Gambar 3.7 Output Fungsi tampilkanStereo......................................................... 44
Gambar 3.8 Sudut-sudut Internal Papan Catur yang Berhasil Terdeteksi ............ 46
Gambar 3.9 Citra Sebelum Remapping (kiri) dan Sesudah Remapping (kanan) ...46
Gambar 3.10 Garis Epipolar dan Bidang Epipolar ............................................... 53
Gambar 4.1 Grafik Hubungan Jarak Kamera Stereo dengan Nilai Error ............. 59
Gambar 4.2 Grafik Hubungan Jumlah Citra Objek Kalibrasi dengan Nilai
Error .................................................................................................59
xi
Gambar 4.3 (a) Citra Stereo Dapur Rumah (b) Citra Disparity Dapur Rumah .... 61
Gambar 4.4 Citra Stereo Cones............................................................................. 62
Gambar 4.5 (a) Citra Disparity Cones 1 (b) Citra Disparity Cones 2 (c) Citra
Disparity Cones 3 .............................................................................63
Gambar 4.6 (a) Citra Stereo Lemari Kayu (b) Citra Disparity Lemari Kayu ....... 65
Gambar 4.7 (a) Citra 3D Lemari Kayu: Tampak Depan (b) Citra 3D Lemari
Kayu: Tampak bawah
xii
DAFTAR TABEL
xiii
DAFTAR LAMPIRAN
xiv
BAB 1
PENDAHULUAN
Dalam bab ini akan dibahas mengenai latar belakang, rumusan masalah, tujuan,
ruang lingkup, dan metode penelitian yang dilakukan.
1.1 Latar Belakang
Perkembangan teknologi tiga dimensi akhir-akhir ini bisa dibilang sangat pesat.
Penggunaan dan pemanfaatannya sudah merambah ke berbagai bidang. Dalam
dunia entertainment, teknologi tiga dimensi seperti sudah menjadi bagian yang
melekat untuk menyajikan tampilan yang lebih menarik. Sudah banyak film-film
yang digarap dengan memanfaatkan teknologi ini, baik hanya sekedar untuk
membubuhi efek visual atau untuk membangun film secara keseluruhan.
Dalam dunia medis dan kedokteran, teknologi tiga dimensi juga semakin marak
digunakan. Para dokter dan tim medis sudah mulai memanfaatkan teknologi ini
dalam operasi jantung, misalnya, untuk membantu mereka mengetahui kondisi
jantung pasien secara lebih komprehensif. Dalam operasi plastik, penggunaan
teknologi ini juga semakin menjadi tren.
Dalam dunia komputer sendiri, teknologi tiga dimensi masih menjadi salah satu
topik yang hangat diperbincangkan. Dalam bidang robotic, teknologi tiga dimensi
masih terus dikembangkan untuk memberikan kemampuan binocular vision pada
robot agar dapat melihat selayaknya manusia melihat. Dalam bidang virtual
reality, teknologi tiga dimensi terus mengalami penyempurnaan agar ruang virtual
yang dihasilkan benar-benar menyerupai kondisi nyata. Salah satu contoh aplikasi
dalam bidang virtual reality yang memanfaatkan teknologi tiga dimensi adalah
simulai penerbangan.
Untuk menghasilkan citra tiga dimensi dari sebuah objek, dibutuhkan kamera
khusus. Kamera tersebut biasanya dilengkapi dengan peralatan khusus untuk
mengukur kedalaman objek. Namun, permasalahannya adalah harga dari kamera
Universitas Indonesia
G
a
khusus tersebut tergolong cukup tinggi. Di sisi lain, hadirnya metode visi stereo
pasif memungkinkan untuk dilakukannya proses rekonstruksi 3D objek dengan
hanya menggunakan kamera biasa yang telah melalui proses kalibrasi. Hal itu
tentunya membuka peluang untuk membuat citra tiga dimensi dari sebuah objek
dengan menggunakan kamera biasa dengan harga yang relatif cukup murah.
Dalam penelitian ini, penulis berkeinginan untuk membangun sistem yang bisa
merekonstruksi sebuah objek secara tiga dimensi dengan menggunakan kamera
biasa.
1.2 Rumusan Masalah
Berdasarkan hal-hal yang telah disebutkan dibagian sebelumnya, penulis
merumuskan beberapa pokok masalah yang akan diteliti, yaitu:
Bagaimana mengukur besar kedalaman suatu objek pada citra agar bisa
didapat representasi 3D-nya?
Objek akan direkonstruksi secara tiga dimensi dari satu sisi saja.
Universitas Indonesia
BAB 1 PENDAHULUAN
Bab ini diawali dari pemaparan tentang latar belakang pembuatan skripsi.
Kemudian, dijelaskan tentang perumusan masalah, kontribusi yang diharapkan,
tujuan penelitian, ruang lingkup penelitian, dan metode penelitian. Selain itu, bab
ini juga menjelaskan tentang sistematika penulisan skripsi secara keseluruhan.
BAB 5 PENUTUP
Bab ini merupakan bagian terakhir dari skripsi. Isi dari bab ini adalah kesimpulan,
kendala, dan saran dari penelitian ini.
Universitas Indonesia
BAB 2
LANDASAN TEORI
Bab ini memaparkan tentang teori-teori yang menjadi landasan penulis dalam
melakukan penelitian.
2.1 Visi Komputer
Visi komputer adalah ilmu yang fokus membahas tentang kapabilitas komputer
untuk menerima, memroses, menganalisis, dan menyimpulkan masukan berupa
citra. Tujuan dari ilmu ini ialah menjadikan mesin agar bisa membuat keputusan
rasional dan mengambil tindakan atau setidaknya membentuk kesimpulan
berdasarkan masukan data visual yang diterima [14]. Ballard dan Brown (1982)
berpendapat bahwa visi komputer adalah ilmu yang membahas tentang konstruksi
deskripsi eksplisit yang memiliki makna terkait dengan objek visual dari dunia
nyata. Sedangkan, Trucco dan Verri (1998) menyimpulkan bahwa bahasan dari
visi komputer adalah tentang proses komputasi properti-properti visual tiga
dimensi pada dunia nyata. Sebagai cabang ilmu, visi komputer tidak berdiri
sendiri. Ada disiplin ilmu lain yang juga menggali hal beririsan dengan visi
komputer, yaitu pengolahan citra dan pengenalan pola. Ilustrasi dari dari
hubungan ketiga disiplin ilmu tersebut dapat dilihat pada Gambar 2.1.
Universitas Indonesia
G
a
Gambar 2.1 Diagram Hubungan antara Visi Komputer, Pengenalan Pola, dan Pengolahan
Citra
Universitas Indonesia
yang lahir dari rahim ilmu statistik. Namun sekarang, pengenalan pola merupakan
subtopik dari bahasan machine learning.
Konsep pengenalan pola yang diaplikasikan di dunia komputer, sebenarnya,
meng-imitasi cara manusia dalam mengenali pola. Lindsay [10] mengatakan,
dalam bukunya yang berjudul An Introduction to Psychology bahwa manusia
memiliki metode yang unik dalam melakukan pengenalan mengenali pola, yaitu,
dengan menggunakan fitur analisis yang dimisalkan sebagai serangkaian hantu
yang ditugaskan untuk mengenali pola-pola yang diterima. Setiap hantu memiliki
metode sendiri yang berbeda dari hantu-hantu lain dalam hal mengenali pola. Jika
salah satu hantu bisa mengenali pola yang diberikan, maka hantu tersebut akan
berteriak. Semakin banyak hantu yang berteriak maka prosentase objek tersebut
dikenali akan semakin tinggi.
Pengenalan pola pada manusia merupakan misteri yang sangat besar. Karena itu,
Lindsay memisalkan fitur analisis pengenal pola dengan sebutan hantu. Dalam
machine learning, prinsip kerja pengenalan pola hampir serupa dengan itu. Objek
tertentu yang ingin dikenali akan dianalisis fitur-fiturnya dan ditemukan polanya.
Kemudian, pola itu akan dicoba untuk dikenali dengan cara mengklasifikasinya
berdasarkan hasil pembelajaran mesin sebelumnya tentang pola-pola objek.
Seiring berkembangnya teknologi, kebutuhan akan aplikasi praktis pengenalan
pola semakin meningkat. Sejauh ini sudah ada beberapa teknologi yang
dikembangkan dari ilmu pengenalan pola, yaitu: face detection, face recognition,
spech recognition, DNA recognition, dll.
2.3 Pengolahan Citra
Pengolahan citra adalah cabang ilmu yang membahas tentang bagaimana
mengubah suatu citra tertentu menjadi citra bentuk lain. Tujuan dari pengubahan
tersebut bisa bermacam-macam, salah satunya adalah untuk memperbaiki kualitas
gambar. Dalam visi komputer, metode pengolahan citra sering digunakan pada
fase preprocessing.
Universitas Indonesia
Pada tahun 1960-an, perkembangan yang cukup signifikan di bidang ini terjadi.
Hal tersebut dikarenakan, pada masa itu, teknologi chip mulai digunakan sebagai
pengganti transistor. Chip dapat mengatasi masalah yang sebelumnya ada pada
pengolahan citra, yaitu, biaya komputasi yang mahal dan alokasi space yang
cukup besar. Aplikasi pengolahan citra yang cukup fenomenal pada masa itu ialah
perbaikan kualitas citra permukaan bulan yang didapat dari satelit Ranger 7. Pada
tahun 1970-an, teknologi pengolahan citra mulai merambah dunia kedokteran.
Saat itu, fitur berbasis pengolahan citra digunakan untuk melihat bagian dalam
kepala manusia dengan bantuan sinar X. Alat tersebut bernama Computerised
Axial Tomography (CAT) Scan.
Inti dari pengolahan citra ialah melakukan transformasi suatu citra. Transformasi
dilakukan dengan tujuan yang berbeda-beda, misalnya: memberi efek tertentu;
mempertajam bagian gambar tertentu; memperbesar atau memperkecil gambar;
menghilangkan bagian gambar tertentu; mencari edge; merestorasi gambar yang
rusak; dan lain-lain. Setiap tujuan yang ingin dicapai tentunya memiliki
spesifikasi tersendiri yang membutuhkan metode yang tidak selalu sama dengan
tujuan lainnya. Oleh karena itu, ada banyak sekali algoritma dan metode dalam
pengolahan citra. Salah satu yang lazim digunakan adalah konvolusi. Konvolusi
adalah penggabungan sinyal citra dengan sinyal lain (kernel) sedemikian rupa
sehingga didapat sinyal citra baru [6].
Universitas Indonesia
Untuk melakukan konversi citra berwarna bertipe RGB menjadi citra grayscale,
dilakukan metode perhitungan rata-rata berbobot. Nilai intensitas keabuan citra
grayscale didapat dengan menghitung rata-rata dari nilai merah, hijau, dan biru
pada citra RPG dengan bobot tertentu. Bobot yang diberikan bisa jadi berbeda
untuk beberapa literatur, namun, yang penulis gunakan ialah pembobotan yang
dilakukan oleh OpenCV, yaitu: merah sebesar 0,299; hijau sebesar 0,587; dan biru
sebesar 0,114.
Citra bertipe grayscale merupakan citra yang sering digunakan pada proses
komputasi dalam visi komputer atau pengolahan citra. Hal tersebut dikarenakan
citra ini memiliki ukuran yang tidak terlalu besar dan hanya terdiri dari satu kanal.
Seperti telah disebutkan sebelumnya, proses komputasi citra merupakan proses
yang tergolong mahal. Oleh karena itu, penggunaan tipe warna yang sederhana
bisa menjadi solusi yang bijaksana.
Universitas Indonesia
10
statistika,
histogram
identik
dengan
sajian
visual
data
yang
Universitas Indonesia
11
Untuk melakukan perataan histogram dalam rentang gradasi keabuan [0, L-1],
dilakukan transformasi, T, pada piksel rk, sehingga menjadi warna baru sk.
Formulanya adalah sebagai berikut:
Universitas Indonesia
12
(2.1)
Prinsip kerja visi komputer stereo untuk menghitung unsur kedalaman objek
adalah dengan membandingkan perbedaan citra yang dihasilkan dari kamera
sebelah kiri dan kamera sebelah kanan yang sudah diletakkan secara horizontal
dalam jarak tertentu yang diketahui. Banyak hal yang bisa dilakukan terhadap
objek dalam citra yang bisa diketahui informasi kedalamannya, salah satunya
adalah rekonstruksi objek tersebut dalam bentuk tiga dimensi.
Universitas Indonesia
13
Secara garis besar, visi komputer stereo diklasifikasi menjadi dua bagian, yaitu,
visi komputer stereo aktif dan visi komputer stereo pasif. Visi komputer stereo
aktif merupakan visi komputer yang secara aktif menggunakan sinar tertentu
(biasanya sinar laser) untuk mempermudah proses penyesuaian citra dari kamera
sebelah kanan dan kamera sebelah kiri. Dengan sinar bantuan tersebut, proses
perhitungan kedalaman objek bisa lebih terbantu. Sedangkan, visi komputer stereo
pasif tidak menggunakan bantuan apapun dalam proses penyesuian citra.
Penelitian kali ini menggunakan metode visi komputer stereo pasif.
2.5 Pencitraan Stereo
Pencitraan stereo adalah pencitraan dengan menggunakan dua sudut pandang.
Perbedaan sudut pandang tersebut kemudian disatukan menjadi satu citra yang
komprehensif. Penyatuan dilakukan dengan cara menyocokkan titik-titik yang
bersesuaian antara satu citra dengan citra lainnya [1]. Dengan pencitraan stereo,
suatu titik dalam citra bisa di perkirakan letak lokasi 3D-nya relatif terhadap
kamera. Secara garis besar, langkah-langkah melakukan pencitraan stereo dengan
dua kamera adalah sebagai berkut:
Undistortion, yaitu penghilangan distorsi yang ada pada citra. Keluaran
dari proses ini adalah citra yang sudah bersih dari distorsi.
Rectification, yaitu proses penyesuaian terhadap sudut dan jarak antara
kedua kamera. Hasil dari proses ini adalah dua citra dengan baris yang
sudah serasi.
Correspondence, yaitu proses menemukan fitur yang sama antara citra
yang dihasilkan dari kamera sebelah kiri dengan citra yang dihasilkan dari
kamera sebelah kanan. Hasil dari proses ini adalah disparity map.
Reprojection, yaitu melakukan proyeksi dengan metode triangulasi
terhadap disparity map sehingga bisa didapatkan nilai kedalaman. Produk
dari proses ini ialah peta kedalaman.
Universitas Indonesia
14
2.6 Kamera
Suatu objek bisa terlihat oleh mata karena mata menangkap sinar yang dipantulan
oleh objek tersebut. Sinar datang melewati lensa mata dan kemudian ditangkap
oleh retina mata. Prinsip kerja kamera hampir serupa dengan itu. Untuk
menangkap sinar yang dipantulkan objek, kamera menggunakan alat bernama
pinhole. Pinhole dapat diandaikan seperti dinding imajiner yang memiliki lubang
kecil ditengah. Tugas dari pinhole adalah untuk menghadang semua sinar yang
datang kecuali sinar yang datang melalui lubang kecil tersebut.
Walaupun pinhole dapat menangkap sinar, pinhole kurang baik dalam membentuk
citra. Hal tersebut dikarenakan pinhole tidak memiliki kemampuan untuk
mengumpulkan sinar dalam jumlah yang cukup banyak, terutama pada
pencahayaan yang cepat. Oleh karena itu, untuk melengkapi pinhole, kamera
membutuhkan lensa. Tugas dari lensa kamera adalah untuk membantu pinhole
mengumpulkan cahaya.
Jika ada suatu benda setinggi X, diletakkan pada jarak Z dari pinhole, maka benda
tersebut akan di proyeksikan ke sebuah bidang bernama image plane. Jika jarak
antara image plane dengan pinhole (kedepannya disebut dengan panjang titik api)
disimbolkan dengan f dan bayangan yang terbentuk memiliki tinggi x, maka
rumusan untuk mencari x adalah sebagai berikut:
(2.2)
Universitas Indonesia
15
Gambar 2.5 Bayangan Objek pada Image Plane Kamera Setelah Posisi Image Plane dan
Pinhole Plane Ditukar
Sumber: Bradski, G., & Kaehler, A. (2008). Learning OpenCV Computer Vision with the
OpenCV Library. OReilly Media
Universitas Indonesia
16
Telah disebutkan diatas bahwa idealnya pusat proyeksi berada tepat pada sumbu
optik. Namun, tidak ada pinhole ideal yang bekerja secara sempurna. Selalu ada
pergeseran pusat proyeksi sehingga ia tidak persis berada pada sumbu optik.
Kondisi tersebut menyebabkan posisi bayangan yang terbentuk juga akan selalu
mengalami pergeseran. Jika pergeseran yang terjadi pada sumbu-x sejauh cx dan
pergeseran pada sumbu-y sejauh cy, maka dengan mengadopsi persamaan (2.2),
kita bisa menghitung posisi bayangan yang terbentuk, yaitu:
( )
( )
(2.3)
Di persamaan (2.3), terlihat bahwa tanda negatif yang sebelumnya ada pada
persamaan (2.2) hilang. Hal tersebut dikarenakan, pada saat posisi pinhole dan
image plane ditukar, bayangan yang terbentuk tidak lagi berada dibawah sumbu
optik, sehingga, sifat bayangan tidak lagi terbalik. Koefisien fx dan fy
merepresentasikan panjang titik api kamera pada sumbu-x dan sumbu-y.
Unsur interinsik kamera adalah nilai-nilai fx, fy, cx, dan cy dari suatu kamera.
Untuk mendapatkan nilai tersebut, dilakukan proses kalibrasi kamera. Proses
tersebut akan dijelaskan pada bagian selanjutnya.
Universitas Indonesia
17
kesalahan pada tahap perakitan kamera yang tidak menempatkan lensa berada
persis paralel terhadap image plane.
Gambar 2.6 Distorsi Radial yang Terjadi Pada Objek Berbentuk Persegi
Sumber: Bradski, G., & Kaehler, A. (2008). Learning OpenCV Computer Vision with the
OpenCV Library. OReilly Media
Distorsi radial pada citra dapat dihilangkan jika kita mengetahui koefisien distorsi
radial k1, k2, dan k3. Perbaikan dapat dilakukan dengan rumus berikut:
(2.4)
Sama halnya dengan distorsi radial, distorsi tangensial pada citra juga bisa
dihilangkan jika kita mengetahui koefisien distorsi tangensial, yaitu, p1 dan p2.
Rumusan untuk menghilangkan distorsi tangensial adalah sebagai berikut:
(2.5)
Dalam OpenCV, koefisien distorsi radial (k1, k2, dan k3) dan koefisien distorsi
tangensial (p1, dan p2) disatukan dalam vektor bernama distortion vector. Untuk
mencari nilai-nilai dari koefisien tersebut, dilakukan proses kalibrasi kamera yang
akan dijelaskan pada bagian selanjutnya.
Universitas Indonesia
18
(2.6)
2.7.2 Homografi
Dalam visi komputer, dikenal istilah homografi, yaitu, pemetaan proyektif suatu
objek dari suatu bidang ke bidang lain. Dalam kamera, homografi yang dimaksud
adalah pemetaan proyektif suatu objek dari dunia riil ke image plane. Informasi
homografi kamera dibutuhkan dalam proses kalibrasi sebagai langkah awal untuk
menemukan ukuran-ukuran internal kamera. Homografi kamera, H, dapat dicari
dengan menyelesaikan persamaan berikut:
Universitas Indonesia
19
(2.7)
(2.8)
dengan H adalah homografi kamera, s merupakan faktor skala, r1 dan r2 masingmasing merupakan matriks rotasi terhadap sumbu-x dan sumbu-y, t adalah vektor
translasi, dan M merupakan matriks 3x3 yang berisi informasi unsur interinsik
kamera, yaitu:
Berdasarkan persamaan (2.8), kita bisa membuat formula untuk matriks rotasi r1
dan r2, yaitu:
dan,
(2.9)
Universitas Indonesia
20
Vektor-vektor rotasi, r1 dan r2, adalah vektor-vektor satuan yang saling tegak
lurus. Kondisi tersebut membuat r1 dan r2 bersifat ortonormal satu sama lain. Sifat
ortonormal mejadikan nilai dari perkalian dot antara kedua vektor tersebut adalah
nol. Sehingga, bisa dibentuk persamaan:
(2.10)
(2.11)
Universitas Indonesia
21
(2.12)
representasi hasil dari perkalian matriks tersebut bisa digantikan dengan perkalian
matriks v dan vektor b, sehingga dapat dibentuk persamaan:
] [
]
(2.13)
Jika persamaan (2.13) diatas dapat diselesaikan, maka elemen-elemen dari vektor
b akan diketahui. Dari vektor b tersebut, kita bisa menghitung nilai-nilai dari
unsur interinsik kamera. Rumusan untuk mencari nilai-nilai interinsik kamera
adalah sebagai berikut:
dengan
(2.14)
Universitas Indonesia
22
Setelah unsur interinsik dari kamera diketahui, langkah selanjutnya ialah mencari
koefisien distorsi. Distorsi adalah gangguan pada citra sehingga bentuk objek pada
citra tidak tergambar sebagaimana mestinya. Koefisien distorsi dapat dicari
dengan melakukan komparasi posisi titik yang terpetakan pada citra dengan posisi
titik semestinya. Dengan mengetahui nilai-nilai interinsik fx, fy, cx, dan cy, posisi
titik semestinya (xp, yp) pada citra bisa didapat dengan mengadopsi persamaan
(2.3), yaitu:
]
(2.15)
Selanjutnya, titik tersebut (xp, yp) dibandingkan dengan titik pada citra yang telah
terdistorsi (xd, yd). Persamaan untuk melakukan perbandingan tersebut adalah:
]
(2.16)
Dengan menyelesaikan persamaan nilai-nilai koefisien distorsi (k1, k2, k3, p1, dan
p2) bisa didapatkan. Namun, dibutuhkan beberapa kali komparasi titik agar
persamaan tersebut bisa diselesaikan.
2.8 Kalibrasi Kamera Stereo
Kalibrasi kamera stereo adalah proses untuk menghitung hubungan secara
geometri antara dua kamera [1]. Pada dasarnya, proses kalibrasi kamera stereo
sama dengan proses kalibrasi biasa. Perbedaannya hanya terletak pada
penggunaan matriks rotasi dan vektor translasinya. Pada kalibrasi kamera stereo,
digunakan dua kamera dengan sudut pandang yang berbeda. Perbedaan sudut
pandang itu tentunya membuat matriks rotasi dan vektor translasinya menjadi
tidak sama. Matriks rotasi dan vektor translasi yang berbeda tersebut harus
disatukan untuk kemudian digunakan dalam proses kalibrasi. Jika dimisalkan Rl
Universitas Indonesia
23
dan Tl masing-masing adalah matriks rotasi dan vektor translasi dari kamera
sebelah kiri, dan Rr dan Tr masing-masing adalah matriks rotasi dan vektor
translasi dari kamera sebelah kanan, formula untuk menggabung kedua matriks
rotasi dan vektor translasi tersebut adalah:
(2.17)
(2.18)
2.9 Rektifikasi/Perbaikan Stereo
Penggabungan dua buah citra yang dihasilkan dari dua kamera yang berbeda
bukanlah hal yang mudah. Kedua buah citra hanya bisa digabungkan jika kedua
kamera yang digunakan bersifat koplanar, yaitu, image plane dari kedua kamera
terletak pada bidang yang sama. Namun, dalam dunia riil, kondisi itu sangat sulit
dicapai karena selalu saja ada faktor tertentu yang menyebabkan kamera berubah
posisi baik secara sengaja maupun tidak. Proses perbaikan stereo (stereo
rectification) bertujuan untuk menangani masalah tersebut.
Walaupun memposisikan kedua kamera agar bersifat koplanar dalam dunia nyata
adalah hal yang sangat sulit dan hampir mustahil, tidak begitu kondisinya di
lingkup virtual. Dalam perbaikan stereo, penyesuaiaan kedua kamera dilakukan
dengan memanipulasi proyeksi kedua kamera sehingga image plane dari kedua
kamera tersebut seolah-olah terletak pada bidang yang sama dan kedua kamera
tersebut seolah-olah bersifat koplanar. Ada beberapa cara untuk melakukan
perbaikan stereo dari dua kamera. Cara yang akan dijelaskan dan digunakan
dalam penelitian ini adalah dengan menggunakan algoritma Bouguet. Algoritma
Bouguet bekerja dengan memanfaatkan parameter rotasi dan translasi dari dua
buah kamera yang telah dikalibrasi sebelumnya.
Universitas Indonesia
24
]
(2.19)
(2.20)
Setelah didapat representasi baru dari matriks rotasi kedua kamera, bisa dipastikan
setiap baris dari kedua kamera telah serasi. Selanjutnya, kita akan membuat
matriks proyeksi, P, yang berfungsi untuk memroyeksi ulang citra dari kedua
Universitas Indonesia
25
kamera sedemikian rupa sehingga image plane dari kedua kamera bersifat
koplanar. Untuk membuat matriks proyeksi, dibutuhkan matriks perbaikan Mrect
pada kamera sebelah kiri (Mrect_l) dan kamera sebelah kanan (Mrect_r) Matriks
proyeksi untuk kamera sebelah kiri dapat dibuat dengan persamaan:
][
]
(2.21)
][
]
(2.22)
Nilai
dan
kamera masing-masing dari kamera sebelah kiri dan kamera sebelah kanan.
Namun, untuk kamera modern, faktor kemiringan tersebut bisa dikatakan hampir
tidak ada. Sehingga, nilai dari
dan
atau mendekati nol. Setelah matriks P didapatkan, kita bisa melakukan manipulasi
proyeksi sebuah objek dalam koordinat 3D ke koordinat 2D dengan persamaan:
[ ]
[ ]
(2.23)
Di dalam citra, posisi objek setelah diproyeksi akan terletak pada koordinat x/w
dan y/w. Ilustrasi dari proses perbaikan stereo adalah sebagai berikut:
Universitas Indonesia
26
1. Prefiltering
Block-matching stereo algorithm adalah algoritma yang sensitif terhadap
pencahayaan. Kondisi tersebut menyebabkan fitur yang sama pada dua buah citra
akan sulit terdeteksi jika kedua citra tersebut memiliki pencahayaan yang berbeda.
Selain itu, SAD yang digunakan dalam algoritma tersebut juga tidak akan bekerja
secara maksimal jika tekstur citra tidak begitu tinggi. Oleh karena itu, sebelum
Universitas Indonesia
27
dua buah citra dikorespondensi, agar hasilnya lebih maksimal, dilakukan fase
prefiletering. Fase ini bertujuan untuk melakukan normalisasi terhadap
pencahayaan pada citra agar perbedaan pencahayaan kedua citra tidak lagi begitu
besar. Selain itu, dalam fase ini, tekstur yang dimiliki oleh citra juga akan
dipertinggi secara maksimal.
2. Correspondence
Fase
ini
adalah
inti
dari
block-matching
stereo
algorithm,
yaitu,
Universitas Indonesia
28
Untuk mencari fitur yang bersesuaian dari kedua buah citra, block-matching
stereo algorithm mempekerjakan fungsi bernama matching function. Fungsi
tersebut mencari fitur yang bersesuaian dengan cara mencari nilai perbedaan
minimum berdasarkan horopter yang telah didefinisikan. Horopter (Num
Disparities) adalah satuan besaran blok dalam satu baris epipolar yang terdefinisi
berdasarkan nilai Min Disparity dan nilai Max Disparity. Untuk mencari nilai
perbedaan minimum, matching function menggunakan metode SAD. SAD
merupakan metode perhitungan sederhana yang biasa digunakan untuk
menemukan nilai perbedaan absolut dari dua buah informasi [1]. Jika dua buah
informasi memiliki nilai SAD yang besar, maka tingkat perbedaan dua buah
informasi tersebut tinggi, dan sebaliknya. Contoh sederhana dari perhitungan nilai
SAD adalah sebagai berikut:
] dan informasi B = [
Universitas Indonesia
29
A-B = [
|
|
|
|
|
|
|
]=[
|
Dengan menggunakan konsep SAD, kita bisa mencari korespondensi fitur pada
kamera sebelah kanan yang bersesuaian dengan (xo, yo) pada kamera sebelah kiri.
Dua fitur dikatakan bersesuaian jika memiliki nilai SAD nol atau setidaknya
mendekati nol. Seperti telah disebutkan sebelumnya, proses pencarian fitur yang
bersesuaian telah tereduksi menjadi pencarian absis saja karena ordinat telah
terkondisikan serasi pada proses sebelumnya. Sehingga, untuk mencari fitur pada
kamera sebelah kanan yang bersesuaian dengan (xo, yo), hanya perlu dilakukan
penggeseran (xo, yo) sejajar sumbu-x ke arah kiri pada kamera sebelah kanan.
Dalam setiap pergeseran, nilai SAD dari kedua fitur dicatat. Setelah penggeseran
selesai, nilai SAD dari seluruh posisi penggeseran dibandingakan dan dicari yang
paling minimum. Nilai SAD yang paling minimum itulah yang disinyalir
memiliki fitur yang sama dengan (xo, yo).
Walaupun block-matching stereo algorithm tergolong cukup cepat, namun,
algoritma ini hanya bisa bekerja secara efektif pada citra dengan tekstur tinggi.
Tekstur merupakan penekanan fitur dan detail pada citra. Tekstur yang tinggi bisa
didapat dengan mengkomposisikan ketajaman fokus kamera, pencahayaan yang
berkualitas, dan pengaturan kontras yang tepat. Jika fitur yang ingin
dikorespondensikan tidak memiliki tekstur yang tinggi, kemunginan besar,
metode SAD tidak akan tepat dalam menentukan fitur yang bersesuaian tersebut.
3. Postfiletering
Seteleh titik yang berkoresponden antara dua buah kamera ditemukan, harus
dilakukan tahap pemastian lebih lanjut, yaitu postfiltering, yang bertujuan untuk
menghindari kesalahan dalam proses korespondensi. Kesalahan korespondensi
Universitas Indonesia
30
yang umum terjadi ialah karena tidak tingginya atau tidak memadainya tekstur
pada citra. Hal tersebut menyebabkan noise tidak bisa terdeteksi secara baik yang
menyebabkan algoritma SAD tidak begitu efektif bekerja. Untuk mengatasi
masalah tersebut, OpenCV menyediakan batasan dalam SAD window yang
bernama textureThreshold. Tugas utama dari textureThreshold adalah menyeleksi
hasil korespondensi berdasarkan kecukupan tingkat tekstur yang ada pada citra.
Sehingga, area pada citra yang memiliki tekstur tidak mencukupi bisa dieliminasi.
2.11 Bidang Epipolar dan Garis Epipolar
Saat suatu titik P ditangkap oleh image plane kamera kiri
proyeksi
dengan pusat
, titik
tersebut akan dibayangkan di pl pada image plane kamera kiri dan pr pada image
plane kamera kanan. Definisi dari bidang epipolar ialah bidang yang melewati
titik P,
epipolar dan image plane dan harus dilalui oleh titik pl untuk garis epipor kamera
kiri dan titik pr untuk garis epipolar kamera kanan.
2.12 Triangulasi dan Pengukuran Kedalaman
Dalam trigonometri, triangulasi adalah metode untuk menemukan posisi suatu
titik dari dua titik lain dalam jarak dan sudut tertentu yang sudah diketahui.
Metode triangulasi sering dipakai untuk menghitung jarak kapal dari pesisir
pantai. Dalam pencitraan stereo, triangulasi digunakan untuk menghitung jarak
benda sesunguhnya relatif terhadap kamera. Jarak tersebut merupakan unsur
kedalaman, Z, dalam sistem koordinat riil benda relatif terhadap kamera. Metode
triangulasi bisa secara akurat menghitung jarak benda ke kamera jika sebelumnya
kedua kamera telah dikalibrasi secara stereo, distorsi kamera sudah dihilangkan,
dan sudah dilakukan tahapan korespondensi stereo[1].
Jika dimisalkan ada titik P yang ingin dihitung jaraknya, Z, terhadap dua kamera
yang terbentang sejauh T dengan panjang titik api f, rumusan untuk mencari Z bisa
didapat dengan menggunakan perhitungan perbandingan dua segitiga sebangun,
yaitu:
Universitas Indonesia
31
(2.24)
(2.25)
Nilai xl dan xr menyatakan koordinat absis titik P dari sudut pandang kamera
sebelah kiri (xl) dan kamera sebelah kanan (xr). Selisih antara nilai xl dan nilai xr
disebut dengan nilai disparitas d yang bersifat berbanding terbalik dengan jarak, Z.
Ilustrasi dari metode triangulasi dalam pencitraan stereo adalah sebagai berikut:
2.13 Rekonstruksi 3D
Rekonstruksi 3D dari sebuah objek merupakan proses membangun kembali
sebuah objek dalam citra ke bentuk aslinya. Untuk melakukan rekonstruksi sebuah
objek, dibutuhkan matriks Q dan citra disparity. Matriks Q merupakan salah satu
matriks parameter yang didapat dalam proses kalibrasi kamera stereo tepatnya
Universitas Indonesia
32
Dengan mengetahui matriks Q, posisi suatu objek relatif terhadap kamera bisa
diketahui.
Dalam proses rekonstruksi 3D, sistem koordinat objek mengalami perubahan dari
dua dimensi ke bentuk tiga dimensi. Secara teori, hal tersebut bisa dilakukan
dengan memanfaatkan konsep sistem koordinat homogen. Sistem koordinat
homogen adalah sistem koordinat yang mempunyai satu dimensi lebih tinggi dari
sistem koordinat yang ditinjau. Dengan memanfaatkan sistem koordinat homogen,
proses rekonstruksi bisa dimulai dari persamaan:
[ ]
[ ]
(2.26)
Dengan menyelesaikan persamaan (2.26), suatu titik (x,y) pada citra dengan nilai
disparity d, bisa didapatkan koordinat 3D-nya, yaitu:
(2.27)
Universitas Indonesia
33
BAB 3
PERANCANGAN DAN IMPLEMENTASI
Bab ini akan menjelaskan tentang perancangan dan implementasi sistem.
3.1 Perancangan
Bagian ini menjelaskan tentang perancangan sistem secara keseluruhan, mulai
dari perancangan umum sistem hingga ke bagian yang lebih detil.
Kamera
Stereo
Kamera
Stereo
Rekonstruksi 3D
Output
33
Universitas Indonesia
34
banyak citra objek kalibrasi stereo yang digunakan, maka, semakin baik kualitas
parameter-parameter kamera yang didapatkan. Alur dari proses kalibarsi kamera
stereo adalah sebagai berikut:
Kamera
Stereo
Citra Stereo
Ambil Gambar
Simpan Gambar
Kalibrasi Stereo
Matriks
Parameter
Sebelum kalibrasi kamera stereo dilakukan, ada fase koleksi citra objek kalibrasi
stereo. Fase tersebut ditujukan untuk mengumpulkan citra objek kalibrasi stereo
yang akan digunakan dalam proses kalibrasi kamera stereo. Dalam fase koleksi
citra objek kalibrasi stereo, sistem menerapkan skema masukan user dari
keyboard, yaitu:
Input = a
Jika user meng-input a, maka frame citra objek kalibrasi stereo akan
ditangkap dan disimpan dengan format portable pixel map (.ppm).
Input = s
Jika user meng-input s, maka sistem akan menyudahi proses koleksi citra
objek kalibrasi stereo. Sebelum mengakhiri program, sistem akan menulis
file list yang berisi nama-nama file citra objek kalibrasi stereo yang telah
ditangkap.
Input = escape
Jika user menekan tombol escape, maka, sistem akan keluar dengan tanpa
menulis file apapun.
Secara lebih jelasnya, skema masukan user pada tahapan koleksi citra objek
kalibrasi stereo bisa dilihat dari flow chart berikut:
Universitas Indonesia
35
Mulai
Kamera
Stereo
Simpan Citra
Stereo
Potret Stereo
Input Karakter
Input = a
Apa karakter
yang diinput?
Input = s
Input = esc
Selesai
Setelah citra objek kalibrasi stereo didapatkan, proses kalibrasi kamera stereo bisa
dilakukan. Tahapan ini dimulai dengan mengambil citra objek kalibrasi stereo
yang telah dikumpulkan. Sistem akan mengenali citra-citra tersebut berdasarkan
informasi yang tertera dalam file list. Citra objek kalibrasi stereo akan diambil
satu persatu mulai dari awal hingga akhir. Dalam setiap pengambilan, sistem akan
melakukan pengecekan terhadap sudut-sudut papan catur yang ada dalam citra
tersebut. Jika sistem bisa mendetesi sudut-sudut papan catur dengan baik, maka
citra tersebut akan digunakan dalam proses kalibrasi kamera stereo. Namun, jika
sistem tidak bisa mendeteksi sudut-sudut papan catur dengan baik, maka citra
tersebut tidak akan digunakan.
Universitas Indonesia
36
Mulai
Citra Stereo
Papan
Catur
Ambil Citra
Tidak
Pilih Citra
Ya
Baik ?
Cek Sudut
Bukan
Citra Terakhir?
Ya
Citra Stereo
Papan
Catur yang
Baik
Kalibrasi Stereo
Rektifikasi :
Metode Bouguets
Simpan Parameter
Matrks
Korespondensi
Stereo
Selesai
Citra-citra yang sudut papan caturnya berhasil dideteksi dengan baik akan
dimasukkan sebagai input proses kalibrasi kamera stereo. Berdasarkan input
tersebut, sistem akan mencari nilai-nilai unsur interinsik kamera dan koefisienkoefisien distorsi. Tahapan ini merupakan tahapan inti dari proses kalibrasi
kamera stereo.
stereo. Dalam tahapan ini, citra akan diproyeksi ulang sehingga image plane dari
kedua citra seolah-olah bersifat koplanar. Tahapan rektifikasi/perbaikan stereo
menghasilkan matriks proyeksi P, matriks reproyeksi Q, dan rectification map.
Universitas Indonesia
37
Prefiltering
Correspondence
Postfiltering
Universitas Indonesia
38
Mulai
Kamera
Stereo
Ambil Gambar
Stereo
Map
Remapping Citra
Stereo
Cari Citra
Disparity
Matriks Q
Tunning
Parameter
BMState
Rekonstruksi 3D
Selesai
3.1.4 Kamera
Untuk menghasilkan gambar stereo, sistem ini menggunakan dua buah kamera
dengan merek PROLINK seri PCC5020 yang memiliki resolusi maksimum 8 MP
dan kecepatan hingga 30 fps. Namun, untuk mereduksi waktu komputasi, sistem
ini tidak menggunakan kamera tersebut dengan performa maksimum. Kamera
Universitas Indonesia
39
hanya akan digunakan dengan properti tinggi 480 piksel dan properti lebar 640
piksel.
3.1.5 Data
Sistem ini menggunakan beberapa jenis data baik data yang digunakan sebagai
input, output, ataupun keduanya. Data tersebut yaitu:
citra
untuk
kalibarsi
stereo
disimpan
dalam
folder
hasil
citra
kalibrasi
stereo
disimpan
dalam
folder
tergantung pada
posisi peletakan kamera. Dengan melihat citra penyesuaian baris kita bisa
melakukan evaluasi terhadap posisi kamera. Jika citra penyesuaian baris
buruk, posisi kamera bisa dirubah dan dilakukan kalibrasi ulang, sehingga,
hasil yang didapat bisa lebih optimal. Posisi kamera yang ideal ialah saling
Universitas Indonesia
40
bersifat horizontal, sehingga, image plane dari kedua kamera bisa bersifat
koplanar.
3) Data Citra Deteksi Sudut
Data citra deteksi sudut digunakan untuk melihat citra objek kalibrasi
stereo (citra papan catur) yang berhasil atau tidak berhasil dideteksi
sudutnya. Dengan melihat data ini, kita bisa mengetahui citra mana saja
yang dijadikan input dari proses kalibrasi kamera stereo.
Data List
Data list adalah data yang mengandung informasi mengenai data citra untuk
kalibrasi stereo. Data ini disimpan dalam file
data/list.txt. Sistem
Data Kamera
Salah satu data penting dalam sistem ini ialah data yang berasal dari kamera
stereo. Berdasarkan perintah user, sistem akan menangkap dan menyimpan
data citra stereo dari kamera stereo.
Data Matriks
o Matriks Interinsik (M)
Matriks interinsik merupakan matriks berukuran 3x3 yang mengandung
informasi unsur-unsur interinsik kamera. Matriks ini mengandung
parameter-parameter kamera fx, fy, cx, dan cy. Matriks interinsik di dapat
dari proses kalibrasi kamera stereo. Data matriks interinsik untuk kamera
sebelah kiri disimpan dalam file "data/matriks/M_kiri.xml", dan data
matriks interinsik untuk kamera sebelah kanan disimpan dalam file
"data/matriks/M_kanan.xml".
o Vektor Distorsi (D)
Vektor distorsi merupakan vektor berukuran 1x5 yang berisi informasi
tentang parameter-parameter distorsi suatu kamera, baik koefisien distorsi
radial (k1, k2, dan k3), maupun koefisien distorsi tangensial (p1, dan p2).
Universitas Indonesia
41
Vektor distorsi dihasilkan dari proses kalibrasi kamera stereo. Vektor ini
disimpan dalam file "data/matriks/D_kiri.xml untuk koefisien distorsi
kamera kiri dan file "data/matriks/D_kiri.xml untuk koefisien distorsi
kamera kanan.
o Matriks Rotasi (R)
Matriks rotasi merupakan matriks berukuran 3x3 yang dihasilkan dari
proses rektifikasi/perbaikan stereo. Matriks ini digunakan untuk melakukan
pemetaan ulang citra sehingga kedua image plane dari citra stereo bisa
seolah-olah bersifat koplanar. Matriks rotasi kamera sebelah kiri disimpan
dalam file data/matriks/R_kiri.xml dan matriks rotasi kamera sebelah
kanan disimpan dalam file data/matriks/R_kiri.xml.
o Matriks Proyeksi (P)
Matriks proyeksi adalah matriks berukuran 3x4 yang dihasilkan dari proses
rektifikasi/perbaikan stereo. Matriks proyeksi kamera kiri disimpan dalam
file data/matriks/P_kiri.xml, sedangkan, matriks proyeksi kamera kanan
disimpan dalam file data/matriks/P_kiri.xml .
o Matriks Reproyeksi (Q)
Matriks ini memiliki ukuran 4x4. Matriks Q berfungsi untuk melakukan
reproyeksi suatu objek dalam citra dua dimensi kedalam bidang tiga
dimensi. Matriks ini dihasilkan dari proses rektifikasi/perbaikan stereo.
Matriks Q terletak dalam file "data/matriks/Q.xml".
o Map (m)
Map merupakan matriks seukuran citra yang berfungsi untuk memroyeksi
ulang citra stereo. Proyeksi ulang citra stereo tersebut bertujuan untuk
menjadikan image plane dari citra stereo bersifat koplanar. Kondisi image
plane yang koplanar dibutuhkan dalam tahap korespondensi stereo. Map
dihasilkan dari proses rektifikasi/perbaikan stereo. Untuk membuat map,
dibutuhkan input matriks interinsik, vektor distorsi, matriks rotasi, dan
matriks proyeksi. Map disimpan dalam file:
"data/matriks/mx_kiri.xml
"data/matriks/my_kiri.xml
"data/matriks/mx_kanan.xml
Universitas Indonesia
42
"data/matriks/my_kanan.xml
3.2 Implementasi
Bagian ini akan menjelaskan tentang implementasi sistem yang dibuat.
rekonstruksi_objek.
Fungsi
pertama
betugas
untuk
Universitas Indonesia
43
3.2.2 Masukan
Ada beberapa jenis masukan dalam sistem ini, masukan yang paling utama adalah
masukan dari kamera stereo. Untuk menangkap citra yang dihasilkan dari kamera
stereo, OpenCV menyediakan fungsi cvCreateCameraCapture yang memiliki
argumen indeks kamera yang ditangkap. Sistem ini menggunakan kamera stereo,
dengan indeks 1 untuk kamera kiri dan indeks 2 untuk kamera kanan, sehingga,
citra stereo bisa ditangkap dengan:
capture1 = cvCreateCameraCapture(1);
capture2 = cvCreateCameraCapture(2);
Untuk mengatur properti kamera seperti dimensi piksel, kecepatan frame, dll,
digunakan fungsi cvSetCaptureProperty. Sistem ini menggunakan properti tinggi
480 piksel dan properti lebar 640 piksel, sehingga, fungdi tersebut dipanggil
dengan parameter-parameter sebagai berikut:
Setelah menangkap citra dari kamera stereo, sistem akan menampilkan citra
tersebut. Untuk melakukan hal itu, sistem menggunakan fungsi tampilkanStereo
Universitas Indonesia
44
yang berisi empat parameter, yaitu, citra kanan, citra kiri, ukuran citra, dan nama
window.
Untuk menyimpan citra stereo yang dihasilkan dari kamera stereo, sistem
menyediakan fungsi potretStereo. Fungsi tersebut berfungsi untuk memotret
frame dari citra stereo yang diinginkan. Frame akan disimpan dalam file bertipe
portable pixel map (.ppm).
Fungsi potretStereo berisi empat parameter, yaitu, citra kanan, citra kiri, counter,
dan
nama
file.
Fungsi
akan
menyimpan
citra
dalam
folder
45
data/citra_untuk_kalibrasi_stereo/kiri_1.ppm
data/citra_untuk_kalibrasi_stereo/kanan_1.ppm
data/citra_untuk_kalibrasi_stereo/kiri_2.ppm
data/citra_untuk_kalibrasi_stereo/kanan_2.ppm
data/citra_untuk_kalibrasi_stereo/kiri_3.ppm
data/citra_untuk_kalibrasi_stereo/kanan_3.ppm
3.2.3 Kalibrasi Kamera Stereo
Kalibrasi kamera stereo dimulai dari mengambil citra objek kalibarsi stereo (citra
papan catur). Sistem mengambil citra-citra tersebut berdasarkan informasi yang
tertera dalam data list (data/list.txt). Setelah citra diambil, dilakukan
pendeteksian sudut-sudut internal terhadap objek papan catur yang terdapat pada
citra. Dalam pendeteksian sudut internal tersebut, sistem menggunakan fungsi
cvFindChessboardCorners yang terdapat dalam library OpenCV sebagai berikut:
Hasil = cvFindChessboardCorners(temp_image, cvSize(nx, ny),
&temp[0], &count, CV_CALIB_CB_ADAPTIVE_THRESH
| CV_CALIB_CB_NORMALIZE_IMAGE);
Fungsi cvFindChessboardCorners memiliki lima parameter. Parameter pertama
adalah citra objek kalibrasi stereo. Parameter kedua, bertipa CvSize, adalah
informasi tentang dimensi sudut internal papan catur. Parameter ketiga, pointer
array, bertugas mencatat informasi tentang lokasi sudut-sudut internal yang telah
berhasil ditemukan dalam citra objek kalibrasi stereo.
Universitas Indonesia
46
Parameter keempat, pointer integer, menyatakan jumlah sudut internal yang telah
berhasil dideteksi. Parameter ini akan terus ditambah nilainya setiap kali sistem
berhasil mendeteksi sudut internal papan catur. Parameter terakhir merupakan
filter tambahan yang akan diterapkan sistem terhadap citra. Sistem ini
menggunakan
filter
CV_CALIB_CB_ADAPTIVE_THRESH
CV_CALIB_CV_NORMALIZE_IMAGE
yang
berarti
akan
dan
diterapkan
Jika fungsi berhasil mendeteksi sudut dengan baik, maka fungsi ini akan
mengembalikan nilai integer bukan nol yang akan disimpan dalam variabel hasil.
Setelah
pendeteksian
sudut
dilakukan,
sistem
akan
memanggil
fungsi
Universitas Indonesia
47
&banyakTitik,
&M_kiri,
untuk
melakukan
rektifikasi/perbaikan
stereo,
yaitu,
dengan
Universitas Indonesia
48
output
dari fungsi
49
Gambar 3.9 Citra Sebelum Remapping (kiri) dan Sesudah Remapping (kanan)
Universitas Indonesia
50
51
X = static_cast<double>(j) + Q.at<double>(0,3);
Y = static_cast<double>(i) + Q.at<double>(1,3);
Z = Q.at<double>(2,3);
W=static_cast<double>(d) * Q.at<double>(3,2) + Q.at<double>(3,3);
Setelah matriks [X Y Z W]T didapatkan, koordinat 3D objek bisa dihitung dengan
mengacu pada persamaan (2.27), yaitu:
koor_X = X/W;
koor_Y = Y/W;
koor_Z = Z/W;
Langkah terakhir ialah menampilkan objek 3D. Untuk melakukan visualisasi ini,
sistem menggunakan program PCL (Point Cloud Libraray). Objek akan
ditampilkan dalam media visualizer pada PCL. Sebelum ditampilkan, objek yang
sudah dalam representasi 3D tersebut harus didaftarkan dulu dalam point cloud.
Inisiasi dari point cloud adalah sebagai berikut:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr
Universitas Indonesia
52
pcl::PointXYZRGB point;
point.x = koor_X;
point.y = koor_Y;
point.z = koor_Z;
Universitas Indonesia
53
garis epipolar merupakan garis yang terbentuk dari irisan bidang epipolar dengan
image plane. Sedangkan, bidang epipolar adalah bidang yang terbentuk dari pusat
proyeksi kamera kanan, pusat proyeksi kamera kiri, dan objek. Ilustrasi dari garis
epipolar dan bidang epipolar bisa dilihat dalam Gambar 3.10.
Sama dengan garis lain, garis epipolar bisa direpresentasikan dalam persamaan:
ax + by + c = 0.
Garis merupakan kumpulan dari banyak titik yang memenuhi persamaan garis.
Dengan kata lain, jika suatu titik ( , ) berada dalam garis, maka, titik tersebut
akan memenuhi persamaan garis. Konsep tersebut akan digunakan dalam proses
pencarian nilai error.
Setiap titik proyeksi pada image plane memiliki garis epipolarnya masing-masing.
Dalam sistem, garis-garis epipolar disimpan dalam matriks berukuran 1xN yang
memiliki tiga kanal. Setiap anggota dari matriks tersebut menyimpan koefisien a,
Universitas Indonesia
54
b, dan c pada persamaan garis untuk setiap titik proyeksi yang dimasukkan dalam
tahap kalibrasi kamera stereo. Sistem mendapatkan koefisien-koefisien garis-garis
epipolar dengan menjalankan fungsi:
Universitas Indonesia
55
BAB 4
HASIL EKSPERIMEN DAN ANALISIS
Bab ini membahas hasil eksperimen yang dilakukan dalam penelitian. Selain itu,
bab ini juga memaparkan analisis penulis terhadap hasil eksperimen tersebut.
4.1 Rancangan Eksperimen
Sebelum memulai eksperimen, penulis terlebih dahulu membuat rancangan
eksperimen. Rancangan meliputi parameter eksperimen, variabel eksperimen, dan
batasan ekperimen.
4.1.1 Parameter Eksperimen
Dalam penelitian ini, akan dilakukan dua eksperimen. Pada eksperimen pertama,
parameter yang diamati adalah nilai error yang muncul. Nilai error didapat
dengan melakukan substitusi seluruh titik sudut internal citra objek kalibrasi
stereo (citra papan catur) dengan garis epipolarnya. Nilai error dapat digunakan
untuk melihat bagaimana kualitas kamera stereo yang terbentuk dari proses
kalibrasi kamera stereo. Pada eksperimen kedua, parameter yang diamati adalah
citra disparity. Citra disparity merupakan salah satu parameter penting dalam
melaukan rekonstruksi. Dengan mengamati citra disparity, gambaran tentang
kualitas dari hasil rekonstruksi 3D bisa diproyeksikan. Selain itu, parameter yang
akan diamati pada eksperimen kedua ini adalah objek 3D itu sendiri.
4.1.2 Variabel Eksperimen
Untuk bisa mengukur posisi 3D suatu objek dengan baik, kamera stereo (kamera
kiri dan kamera kanan) harus diletakkan dalam rentang jarak yang tepat. Pada
penelitian kali ini, penulis mencoba melakukan eksperimen untuk mendapatkan
rentang jarak yang tepat tersebut. Kamera akan diletakkan pada jarak yang
bervariasi antara 7 s.d. 15 cm. Dalam setiap rentang jarak tersebut, akan dihitung
nilai error yang muncul dari proses kalibrasi kamera stereo. Selain faktor jarak
kamera, penulis juga ingin mengetahui dampak dari sedikit atau banyaknya
penggunaan citra objek kalibrasi kamera stereo (citra papan catur) sebagai input
dari proses kalibrasi kamera stereo terhadap kualitas kamera stereo yang
55
Universitas Indonesia
56
Dari pemaparan diatas, bisa disimpulkan bahwa variabel yang digunakan dalam
penelitian kali ini adalah:
Eksperimen pertama: jarak kamera dan banyak citra objek kalibrasi stereo
Objek kalibrasi stereo yang digunakan harus sama. Dalam eksperimen ini,
penulis menggunakan citra objek kalibrasi stereo papan catur berukuran
2,8 cm dengan jumlah sudut internal horizontal adalah sembilan dan
jumlah sudut internal vertikal adalah enam.
Selain objek kalibrasi stereo, variasi pose objek kalibrasi stereo juga harus
sama untuk setiap pengambilan gambar.
Objek kalibrasi stereo harus berjarak kurang dari lima meter terhadap
kamera.
Universitas Indonesia
57
4.2 Eksperimen
Seperti disebutkan sebelumnya, dalam penelitian kali ini, penulis akan mencoba
melakukan dua eksperimen. Dalam eksperimen pertama, penulis akan mengamati
nilai error pada berbagai variasi rentang jarak kamera stereo dan variasi jumlah
input citra objek kalibrasi yang digunakan. Pada eksperimen kedua penulis akan
melakukan analisis terhadap hasil citra disparity yang diperoleh dari berbagai citra
stereo.
4.3 Hasil Eksperimen Pertama
Hasil eksperimen pertama tersaji dalam tabel berikut:
Jarak Antar
Rataan
Kamera
6 citra stereo
9 citra stereo
12 citra stereo
15 citra stereo
7 cm
7,8536
5,6641
4,4324
3,5855
5,3839
8 cm
6,7670
4,7434
3,6366
2,8025
4,4874
9 cm
6,0833
4,3198
3,3252
2,5781
4,0766
10 cm
5,7553
3,8840
2,7926
2,1411
3,6433
11 cm
5,6554
3,8669
2,8943
2,3728
3,6973
12 cm
6,0923
5,0533
3,3118
2,5754
4,2582
13 cm
6,0658
4,0862
3,1755
2,5501
3,9694
14 cm
6,5730
4,1943
3,5846
2,6126
4,2411
15 cm
8,1012
5,1654
3,8217
3,0764
5,0412
Dari sajian data diatas, terlihat bahwa, nilai error terkecil terdapat pada kamera
stereo yang berjarak 10 cm atau 11 cm, dan ada kecenderungan kenaikan nilai
error pada kamera stereo yang berjarak semakin kecil atau semakin besar dari itu.
Kecenderungan itu bahkan berlaku hampir pada setiap variasi jumlah citra objek
kalibrasi stereo. Fenomena tersebut akan penulis coba kaitkan dengan konsep
binocular vision.
58
Dalam dunia teori, metode triangulasi bisa digunakan untuk menghitung jarak
objek secara tepat asalkan kedua titik acuan memiliki jarak yang bukan nol.
Namun, kondisi ideal tersebut tidak berlaku dalam kasus ini. Jika jarak kamera
semakin diperkecil, maka sudut pandang kamera akan menjadi sempit. Dalam
kondisi seperti ini, sedikit perubahan nilai disparity akan berakibat banyak pada
perubahan nilai kedalaman. Sebaliknya, jika jarak kamera semakin diperbesar,
maka sudut pandang kamara akan menjadi lebar. Dalam kondisi ini, perubahan
nilai disparity tidak akan berakibat banyak pada perubahan nilai kedalaman. Hal
tersebut terjadi karena nilai disparity dan unsur kedalaman benda bersifat
berbanding terbalik. Dalam kondisi ideal, hal itu tidak menjadi masalah yang
berarti. Namun, dalam kasus ini, kondisi tersebut harus menjadi bagian yang mesti
diperhitungkan, karena, nilai disparity yang digunakan memiliki rentang yang
terbatas yaitu delapan bit, artinya, nilai disparity hanya memiliki banyak variasi
256 nilai. Dalam rentang yang terbatas itu, penentuan jarak kamera harus
dilakukan sebijaksana mungkin sehingga nilai disparity yang didapat bisa
representatif terhadap kedalaman objek yang diinginkan.
Dalam eksperimen ini, berdasarkan data yang diperoleh, kamera stereo dengan
performa optimal diperoleh jika kamera tersebut direntangkan pada jarak sekitar
Universitas Indonesia
59
10 cm. Secara lebih lengkap, grafik hubungan jarak kamera stereo dengan nilai
error bisa dilihat pada Gambar 4.1.
Gambar 4.1 Grafik Hubungan Jarak Kamera Stereo dengan Nilai Error
Kecenderungan lain yang bisa diamati dari tabel diatas adalah adanya penurunan
nilai error pada setiap penambahan citra objek kalibrasi stereo. Artinya, semakin
banyak citra objek kalibrasi stereo yang digunakan dalam proses kalibrasi kamera
stereo, maka semakin baik kualitas kamera stereo yang dihasilkan. Grafik
hubungan jumlah citra objek kalibrasi dengan nilai error bisa dilihat pada Gambar
4.2.
Gambar 4.2 Grafik Hubungan Jumlah Citra Objek Kalibrasi dengan Nilai Error
Universitas Indonesia
60
Proses kalibrasi kamera stereo menggunakan titik-titik internal sudut papan catur
dalam melakukan kalibrasi. Berdasarkan titik-titik internal tersebut, yang sudah
diketahui jarak dan jumlahnya pada duni riil, algoritma kalibrasi melakukan
perhitungan untuk mendapatkan unsur-unsur interinsik dan koefisien-koefisien
distorsi kamera. Semakin banyak citra objek kalibrasi (citra papan catur) yang
digunakan, maka semakin banyak pula titik-titik yang dimasukkan ke fungsi
kalibrasi stereo. Semakin banyak titik-titik yang dijadikan input dalam proses
kalibrasi kamera stereo, semestinya, kamera stereo yang dihasilkan akan lebih
baik karena proses kalibrasi dilakukan secara lebih komprehensif. Dari data
penelitian, terlihat bahwa penggunaan jumlah citra objek kalibrasi berkorelasi
positif dengan kualitas kamera stereo yang terbentuk.
4.4 Hasil Eksperimen Kedua
Dalam eksperimen kedua, dilakukan analisis terhadap citra disparity. Dalam
bagian pertama eksperimen kedua ini, citra disparity yang akan dibahas ialah citra
disparity yang didapat dari citra yang berasal dari kamera stereo sistem ini.
Sebelum dicari citra disparity-nya, citra dari kamera stereo di-remap terlebih
dahulu
berdasarkan
rectification
map
yang
diperoleh
pada
fase
rektifikasi/perbaikan stereo pada proses kalibrasi kamera stereo. Citra stereo dan
citra disparity yang diperoleh dari eksperimen kedua bagian pertama bisa dilihat
pada Gambar 4.3.
(a)
Universitas Indonesia
61
(b)
Gambar 4.3 (a) Citra Stereo Dapur Rumah (b) Citra Disparity Dapur Rumah
Dari hasil eksperimen kedua pada bagian pertama, terlihat citra disparity yang
diperoleh tidak begitu baik. Penulis sudah mencoba untuk melakukan tuning
sedemikian rupa dengan harapan untuk mendapatkan citra disparity yang baik,
namun, hasilnya tidak ada yang memuaskan. Bahkan, penulis juga mencoba untuk
melakukan beberapa kalibrasi ulang untuk mendapatkan hasil yang terbaik,
namun, output-nya sama saja. Setelah mendalami beberapa referensi, penulis
menyimpulkan bahwa masalah yang terjadi disebabkan oleh kondisi citra yang
tidak memiliki tekstur yang tinggi.
Dalam dunia fotografi, citra yang memiliki tekstur tinggi didapat dengan cara
menaikkan derajat ketajaman (sharpness) dan kontras pada kamera. Secara
natural, citra yang memiliki tekstur tinggi mudah didapat pada daerah terbuka
seperti hutan. Namun, pada daerah tertutup (indoor), biasanya, citra yang didapat
akan memiliki tekstur yang rendah, apalagi, jika kamera yang digunakan tidak
memiliki kualitas yang baik. Dampak dari rendahnya tekstur pada citra dalam
implementasi algoritma block-matching stereo adalah sedikitnya titik atau piksel
Universitas Indonesia
62
pada citra yang meregistrasi informasi kedalamannya. Hal tersebut karena pada
algoritma block-matching stereo terdapat tahapan postfiltering yang bertugas
untuk menyeleksi kandidat fitur yang bersesuaian berdasarkan kadar kecukupan
tekstur. Jika kandidat fitur yang bersesuaian tidak memiliki tekstur yang melebihi
ambang yang diperbolehkan dalam TextureThreshold, maka kandidat fitur
tersebut akan dieliminasi dan tidak diregistrasi unsur kedalamannya. Dalam citra
disparity, titik yang tidak teregistrasi informasi kedalamannya direpresentasikan
dengan warna hitam. Artinya, bisa disimpulan bahwa citra disparity yang buruk
adalah citra disparity yang banyak mengandung unsur warna hitam. Walaupun, itu
bukan merupakan satu-satunya parameter dalam menilai baik atau buruknya citra
disparity yang diperoleh.
Dalam penelitian ini, kamera stereo yang digunakan hanyalah webcam biasa yang
bisa dibilang tidak memiliki kualitas yang begitu baik. Dengan kondisi itu, sangat
dimungkinkan citra yang ditangkap tidak memiliki tekstur yang tinggi. Ditambah
lagi, pengambilan gambar dilakukan tidak di daerah terbuka, melainkan di dalam
rumah. Oleh karena itu, untuk membuktikan apakah penyebab buruknya kualitas
citra disparity yang diperoleh dari kamera stereo adalah benar karena rendahnya
tekstur dari citra, penulis akan mencoba untuk melakukan komparasi dengan
memasukkan input citra stereo yang berasal dari Middlebury Stereo Datasets.
Citra yang diambil dari datasets itu sudah bisa dipastikan memiliki kualitas yang
baik dan tekstur yang tinggi. Pada eksperimen kedua bagian kedua ini, penulis
akan menggunakan citra stereo dengan nama Cones yang tertera pada Gambar 4.4.
Universitas Indonesia
63
Untuk mencari citra disparity yang baik, penulis melakukan tuning pada
parameter BMState. Gambar beberapa variasi citra disparity Cones berdasarkan
tuning yang dilakukan tertera pada Gambar 4.5.
(a)
(b)
(c)
Gambar 4.5 (a) Citra Disparity Cones 1 (b) Citra Disparity Cones 2
(c) Citra Disparity Cones 3
Tuning
dilakukan
PreFilterCap,
pada
parameter
NumberOfDisparities,
BMState,
dan
yaitu,
SADWindowSize,
UniquenessRatio.
Sedangkan,
Parameter BMState
SADWindowSize
31
17
21
PrefilFilterCap
12
10
10
NumberOfDisparities
48
80
64
UniquenessRatio
11
12
Universitas Indonesia
64
Pada Gambar 4.5, terlihat bahwa citra disparity Cones yang terbentuk memiliki
kualitas yang cukup baik, terutama, citra disparity pada Gambar 4.5 (c). Citra
disparity terebut dikatakan baik karena representatif terhadap kedalaman objek,
walaupun, ada beberapa bentuk objek yang tidak terpetakan secara sempurna.
Citra disparity pada Gambar 4.5 (c) juga memiliki sedikit representasi warna
hitam, yang artinya, citra tersebut hanya sedikit memiliki titik yang informasi
kedalamannya
tidak
teregistrasi.
Eksperimen
kedua
bagian
kedua
ini
Walaupun kamera tidak bisa menghasilkan citra stereo dengan kualitas yang baik
yang berimplikasi pada buruknya citra disparity yang diperoleh, eksperimen untuk
melakukan rekonstruksi 3D objek akan tetap dilakukan. Eksperimen ini ditujukan
untuk menguji algoritma rekonstruksi 3D yang telah dikembangkan. Dalam
eksperimen kedua bagian ketiga ini, penulis akan merekonstruksi dua buah citra
stereo. Citra stereo yang pertama berasal dari kamera stereo yang telah dibuat
pada penelitian ini. Citra stereo yang kedua berasal dari Hamlyn Center
Laparoscopic/Endoscopic Video Datasets, yaitu, citra stereo jantung manusia.
(a)
Universitas Indonesia
65
(b)
Gambar 4.6 (a) Citra Stereo Lemari Kayu (b) Citra Disparity Lemari Kayu
Pada Gambar 4.6 (b), terlihat bahwa citra disparity dari lemari kayu tidak begitu
representatif terhadap kedalaman objek asli, bahkan, ada cukup banyak spot hitam
pada citra disparity. Walaupun sudah dilakukan tuning beberapa kali, namun citra
disparity yang memuaskan tidak kunjung didapatkan. Penyebabnya bisa
dipastikan tidak berbeda dengan percobaan sebelumnya, yaitu, tekstur pada citra
yang tidak begitu tinggi. Rekonstruksi 3D citra lemari kayu bisa dilihat pada
Gambar 4.7.
(a)
(b)
(c)
(d)
Gambar 4.7 (a) Citra 3D Lemari Kayu: Tampak Depan (b) Citra 3D Lemari Kayu: Tampak
bawah (c) Citra 3D Lemari Kayu: Tampak Kanan (d) Citra 3D Lemari Kayu: Tampak
Kiri
Universitas Indonesia
66
Pada Gambar 4.7, terlihat bahwa hasil dari rekonstruksi 3D masih jauh dari
sempurna. Hal itu sebagian besar dipengaruhi oleh buruknya citra disparity yang
didapat.
Universitas Indonesia
67
Dari citra disparity yang didapat, terlihat bahwa hasilnya cukup representatif
terhadap objek asli, walaupun, masih ada beberapa spot hitam di area pinggir
citra. Hal tersebut menandakan bahwa algoritma stereo-block matching tidak
terlalu bisa menemukan fitur yang bersesuaian pada daerah pinggir citra. Salah
satu penyebabnya bisa jadi karena tekstur citra yang kurang tinggi pada daerah
pinggir akibat kurangnya cahaya yang ada. Rekonstruksi 3D jantung bisa dilihat
pada gambar 4.10.
(a)
(b)
(c) (d)
Universitas Indonesia
68
(e) (f)
Gambar 4.10 (a) Citra 3D Jantung: Tampak Depan (Zoom-in) (b) Citra 3D Jantung:
Tampak Depan (Zoom-out) (c) Citra 3D Jantung: Tampak Miring (d) Citra 3D Jantung:
Tampak Kanan (e) Citra 3D Jantung: Tampak kiri (f) Citra 3D Jantung: Tampak Belakang
Pada Gambar 4.10, terlihat bahwa hasil dari rekonstruksi 3D sudah cukup baik.
Hal tersebut dikarenakan cukup baiknya citra disparity yang didapat dari citra
stereo jantung. Namun, pada bagian pinggir objek, masih terlihat serpihanserpihan objek yang tidak menyatu dengan bagian yang lain. Hal itu dikarenakan
ada beberapa spot hitam pada citra disparity objek, terutama pada bagian pinggir,
yang menyebabkan tidak teregistrasinya beberapa titik pada objek sehingga
beberapa bagian objek terlihat terpisah.
Universitas Indonesia
69
BAB 5
PENUTUP
Bab ini berisi kesimpulan penelitian serta saran bagi peneliti selanjutnya. Selain
itu, juga akan dipaparkan mengenai kendala yang dialami penulis semasa
melakukan penelitian.
5.1 Kesimpulan
Kesimpulan yang dapat diambil dari penelitian ini adalah:
1. Rekonstruksi 3D suatu objek sudah bisa dilakukan dengan menggunakan
kamera stereo walaupun dengan hasil yang tidak sempurna. Sebelum
digunakan untuk melakukan rekonstruksi, kamera stereo harus dikalibrasi
terlebih dahulu. Proses kalibrasi kamera stereo bisa dilakukan dengan fungsi
cvStereoCalibrate dalam library OpenCV.
69
Universitas Indonesia
70
5.2 Kendala
Kendala-kendala yang dihadapi penulis adalah:
1. Penulis belum familiar dengan program OpenCV dan PCL. Hal itu memaksa
penulis untuk mempelajari terlebih dahulu program-program tersebut sebelum
mengimplementasikan sistem.
1. Belum familiarnya penulis dengan program OpenCV dan PCL juga berakibat
pada kesulitan pada tahap instalasi program-program tersebut. Terlebih lagi,
awalnya, penulis mengembangkan sistem dalam OS Linux dimana ada
beberapa bagian dari tahapan instalasi yang harus dikerjakan secara manual.
2. Sebelum digunakan untuk mengimplementasi sistem, PCL dan programprogram lain yang terkait tersebut harus di-build terlebih dahulu. Untuk
melakukan hal itu, dibutuhkan build system CMake. Sebelumnya, penulis
belum begitu familiar dengan CMake, sehingga, penulis harus mempelajari
build system tersebut terlebih dahulu.
4. Kendala lainnya ialah faktor lamanya waktu compiling. Hal itu disebabkan
karena sistem melibatkan library OpenCV dan PCL.
Universitas Indonesia
71
5.3 Saran
Saran-saran dari penulis untuk penelitian selanjutnya adalah:
1.
Sistem ini melakukan rekonstruksi 3D hanya dari satu sisi saja. Oleh karena
itu, kedepannya, penulis berharap sistem rekonstruksi 3D ini bisa
dikembangkan sehingga objek bisa direkonstruksi secara utuh dari seluruh
sisi. Hal tersebut bisa dilakukan dengan menggunakan lebih dari satu kamera
stereo yang digunakan untuk menyorot objek dari berbagai sisi.
2.
3.
Universitas Indonesia
72
DAFTAR PUSTAKA
[1]
Bradski, G., & Kaehler, A. (2008). Learning OpenCV Computer Vision with
the OpenCV Library. O'Reilly Media.
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
Laganire,
R.
(2011).
OpenCV
Computer
Vision
Application
Universitas Indonesia
73
[13] Peris,
http://blog.martinperis.com/2011/01/opencv-stereo-camera-calibration.html.
[14] Saphiro, L. G., & Stockman, G. C. (2001). Computer Vision. New Jersey:
Prentice Hall.
[15] Scharstein, D., & Szeliski, R. (2002). A Taxonomy and Evaluation of
Dense Two-Frame Stereo Correspondence Algorithms. International
Journal of Computer Vision, 47(1/2/3):7-42.
[16] Statistics Glosary. Presenting Data. Retrieved April 20, 2012, from
http://www.stats.gla.ac.uk/steps/glossary/presenting_data.html.
[17] Tsai, R., Y. (1987, August). A Versatile Camera Calibration Technique for
3D Machine Vision. IEEE J. Robotics & Automation, RA-3, No. 4, (pp.
323-344).
[18] Zang, Z. (2000). A Flexible New Technique for Camera Calibration. IEEE
Transactions on Pattern Analysis and Machine Intelligence, 22 (11), 13301334.
Universitas Indonesia
74
#include <cv.h>
#include <highgui.h>
#include <cxmisc.h>
#include <cvaux.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <ctype.h>
#include <algorithm>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include "boost/thread/thread.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/contrib/contrib.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <new>
Universitas Indonesia
75
void koleksiCitraStereo(void);
void tampilkan(Mat, string);
void potretStereo(Mat, Mat, int, string);
void buatList(int);
void tampilkanStereo(Mat, Mat, CvSize, string);
void kalibrasiStereo(char*, int, int, float);
void simpanGambar(IplImage*, string);
void simpanGambar(CvMat*, string);
void rekonstruksi3D(int);
void rekonstruksi3D(Mat, Mat);
void rekonstruksi_objek();
void mouseHandler(int , int , int , int, void*);
boost::shared_ptr<pcl::visualization::PCLVisualizer>
createVisualizer (pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr);
double** depth;
RNG rng(12345);
int counter;
Universitas Indonesia
76
return 0;
}
void koleksiCitraStereo() {
counter = 0;
while (true) {
Universitas Indonesia
77
char c = cvWaitKey(33);
stringstream namaFile;
Universitas Indonesia
78
Universitas Indonesia
79
Universitas Indonesia
80
if (!file) {
Universitas Indonesia
81
if (!image) break;
ukuranImage = cvGetSize(image);
namaImage[posisiKamera].push_back(buf);
//pencarian sudut catur
for (int s = 1; s <= skalaMaksimum; s++) {
IplImage* temp_image = image;
if (s > 1) {
//resize temp_image agar seukuran dengan image
//bicubic interpolasi 4x4
temp_image = cvCreateImage(cvSize(image->width * s,
image->height * s), image->depth, image->nChannels);
cvResize(image, temp_image, CV_INTER_CUBIC);
}
Universitas Indonesia
82
if (temp_image != image)
cvReleaseImage(&temp_image);
if (hasil || s == skalaMaksimum) {
for (j = 0; j < count; j++) {
temp[j].x /= s;
temp[j].y /= s;
}
}
if (hasil)
break;
tulis_file.str("");
//di kanan
if (posisiKamera == 0) {
Universitas Indonesia
83
simpanGambar(sudutImage, tulis_file.str());
N = koor.size();
koor.resize(N + n, cvPoint2D32f(0, 0));
aktif[posisiKamera].push_back((uchar) hasil);
if (hasil) {
//fungsi untuk menemukan sudut internal dalam papan catur
cvFindCornerSubPix(image, &temp[0],
count, cvSize(11, 11),
cvSize(-1, -1), cvTermCriteria(CV_TERMCRIT_ITER +
CV_TERMCRIT_EPS, 30, 0.01));
copy(temp.begin(), temp.end(), koor.begin() + N);
cvReleaseImage(&image);
}
fclose(file);
Universitas Indonesia
84
n_image = aktif[0].size();
koordinatObjek3D.resize(n * n_image);
for (i = 0; i < ny; i++) {
for (j = 0; j < nx; j++) {
koordinatObjek3D[i * nx + j] =
cvPoint3D32f(i * ukuranKotak, j * ukuranKotak, 0);
}
}
cvSetIdentity(&M_kiri);
cvSetIdentity(&M_kanan);
cvZero(&D_kiri);
cvZero(&D_kanan);
Universitas Indonesia
85
//PROSES KALIBRASI
printf("proses kalibrasi stereo\n\n");
fflush(stdout);
cvStereoCalibrate(&koordinatObjek, &koordinatObjek_kiri,
&koordinatObjek_kanan, &banyakTitik, &M_kiri, &D_kiri, &M_kanan,
&D_kanan, ukuranImage, &R, &T, &E, &F, cvTermCriteria(
CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 100, 1e-5),
CV_CALIB_FIX_ASPECT_RATIO +
CV_CALIB_ZERO_TANGENT_DIST+
CV_CALIB_SAME_FOCAL_LENGTH );
//QUALITY CHECK
//garis epipolar kamera kiri dan kanan
vector<CvPoint3D32f> garis[2];
koordinatObjek2D[0].resize(N);
koordinatObjek2D[1].resize(N);
koordinatObjek_kiri = cvMat(1, N, CV_32FC2, &koordinatObjek2D[0][0]);
koordinatObjek_kanan = cvMat(1, N, CV_32FC2, &koordinatObjek2D[1][0]);
garis[0].resize(N);
garis[1].resize(N);
CvMat G_1 = cvMat(1, N, CV_32FC3, &garis[0][0]);
CvMat G_2 = cvMat(1, N, CV_32FC3, &garis[1][0]);
Universitas Indonesia
86
garis[1][i].y
(double)
koordinatObjek2D[1][i].x + garis[0][i].y
koordinatObjek2D[0][i].y
fabs((double)((garis[0][i].x
*
koordinatObjek2D[1][i].y
+
*
+
garis[0][i].z)));
tulis_file << "error ke " << i << " = " << tempError << "\n";
error += tempError;
}
double rataan_error = error/ (n_image *n);
buat_file.close();
//REKTIFIKASI STEREO
Universitas Indonesia
87
CvMat*
mx_kiri
cvCreateMat(ukuranImage.height,
ukuranImage.width,
my_kiri
cvCreateMat(ukuranImage.height,
ukuranImage.width,
CV_32F );
CvMat*
CV_32F );
CvMat* mx_kanan = cvCreateMat(ukuranImage.height, ukuranImage.width,
CV_32F );
CvMat* my_kanan = cvCreateMat(ukuranImage.height, ukuranImage.width,
CV_32F );
CvMat* img_kiri = cvCreateMat(ukuranImage.height, ukuranImage.width,
CV_8U );
CvMat* img_kanan = cvCreateMat(ukuranImage.height,
ukuranImage.width,
CV_8U );
CvMat* disp = cvCreateMat(ukuranImage.height, ukuranImage.width, CV_16S );
CvMat* vdisp = cvCreateMat(ukuranImage.height, ukuranImage.width, CV_8U );
CvMat* pair;
&M_kanan,
&D_kiri,
&D_kanan,
&D_kiri,
&R_kiri,
&P_kiri,
mx_kiri,my_kiri);
cvInitUndistortRectifyMap(&M_kanan,
&D_kanan,
&R_kanan,
Universitas Indonesia
88
//Simpan parameter-parameter
//Matriks M
cvSave("data/matriks/M_kiri.xml", &M_kiri);
cvSave("data/matriks/M_kanan.xml", &M_kanan);
//Distortion Vector
cvSave("data/matriks/D_kiri.xml", &D_kiri);
cvSave("data/matriks/D_kanan.xml", &D_kanan);
//matriks Rotasi
cvSave("data/matriks/R_kiri.xml", &R_kiri);
cvSave("data/matriks/R_kanan.xml", &R_kanan);
//Matriks P
cvSave("data/matriks/P_kiri.xml", &P_kiri);
cvSave("data/matriks/P_kanan.xml", &P_kanan);
//Matriks Q
cvSave("data/matriks/Q.xml", &Q);
cvSave("data/matriks/mx_kiri.xml", mx_kiri);
cvSave("data/matriks/my_kiri.xml", my_kiri);
cvSave("data/matriks/mx_kanan.xml", mx_kanan);
cvSave("data/matriks/my_kanan.xml", my_kanan);
//cvNamedWindow("rectified",1);
if (!stereoVertikal)
pair = cvCreateMat(ukuranImage.height, ukuranImage.width * 2,
CV_8UC3 );
else
pair = cvCreateMat(ukuranImage.height * 2, ukuranImage.width,
CV_8UC3 );
//KORESPONDENSI STEREO
Universitas Indonesia
89
//Parameter BMState
CvStereoBMState *BMState = cvCreateStereoBMState();
assert(BMState != 0);
BMState->preFilterSize = 41; //41
BMState->preFilterCap = 31; //31
BMState->SADWindowSize = 41; //41
BMState->minDisparity = -64; //-64
BMState->numberOfDisparities = 128; //128
BMState->textureThreshold = 10; //10
BMState->uniquenessRatio = 15; //15
Universitas Indonesia
90
simpanGambar(vdisp, tulis_file.str());
cvGetCols(pair, &part, 0, ukuranImage.width);
cvCvtColor(img_kiri, &part, CV_GRAY2BGR);
cvGetCols(pair, &part, ukuranImage.width,
ukuranImage.width * 2);
cvCvtColor(img_kanan, &part, CV_GRAY2BGR);
} else {
cvGetRows(pair, &part, 0, ukuranImage.height);
cvCvtColor(img_kanan, &part, CV_GRAY2BGR);
cvGetRows(pair, &part, ukuranImage.height,
ukuranImage.height* 2);
cvCvtColor(img_kanan, &part, CV_GRAY2BGR);
for (j = 0; j < ukuranImage.width; j += 16)
cvLine(pair, cvPoint(j, 0), cvPoint(j,
ukuranImage.height* 2),
CV_RGB(0,255,0));
}
tulis_file.str("");
tulis_file
<<
"data/citra_hasil_kalibrasi_stereo/penyerasian_baris/citra_"
<< (i + 1) << ".ppm";
simpanGambar(pair, tulis_file.str());
}
Universitas Indonesia
91
cvReleaseImage(&image_kiri);
cvReleaseImage(&image_kanan);
}
cvReleaseStereoBMState(&BMState);
cvReleaseMat(&mx_kiri);
cvReleaseMat(&my_kiri);
cvReleaseMat(&mx_kanan);
cvReleaseMat(&my_kanan);
cvReleaseMat(&img_kiri);
cvReleaseMat(&img_kanan);
cvReleaseMat(&disp);
Universitas Indonesia
92
tipeKompresi.push_back(1);
imwrite(namafile, temp, tipeKompresi);
}
//Mengambil map
FileStorage f_mx_kiri("data/matriks/mx_kiri.xml", cv::FileStorage::READ);
FileStorage f_my_kiri("data/matriks/my_kiri.xml", cv::FileStorage::READ);
FileStorage f_mx_kanan("data/matriks/mx_kanan.xml", cv::FileStorage::READ);
FileStorage f_my_kanan("data/matriks/my_kanan.xml", cv::FileStorage::READ);
Universitas Indonesia
93
f_mx_kiri.release();
f_my_kiri.release();
f_mx_kanan.release();
f_my_kanan.release();
cout << "disp ends" << endl;
citra_kiri
cvCreateMat(temp_kiri.rows,
temp_kiri.cols,
CV_8U);
CvMat* citra_kanan = cvCreateMat(temp_kanan.rows, temp_kanan.cols,
CV_8U);
Universitas Indonesia
94
citra_kanan,
citra_disp,
BMState);
temp_disp.release();
temp_disp = cvarrToMat (citra_disp);
normalize(temp_disp, citraDisparity, 0, 256, CV_MINMAX);
cout << "disp ends" << endl;
namaFile << "data/citra_wajah_terproses/disparity/citra_" << counter <<
".pgm";
imwrite(namaFile.str(), citraDisparity, tipe_kompresi);
while (true) {
cvNamedWindow("citra_kiri");
cvShowImage("citra_kiri", citra_kiri);
cvNamedWindow("citra_kanan");
cvShowImage("citra_kanan", citra_kanan);
cvNamedWindow("citra_disp");
cvShowImage("citra_disp", citra_disp);
imshow("temp_disp", temp_disp);
imshow("citraDisparity", citraDisparity);
char cc = cvWaitKey(33);
if (cc == 27){
cvDestroyWindow("citra_kiri");
cvDestroyWindow("citra_kanan");
cvDestroyWindow("citra_disp");
cvDestroyWindow("temp_disp");
Universitas Indonesia
95
cvDestroyWindow("citraDisparity");
break;
}
}
temp_kiri.release();
temp_kanan.release();
temp_disp.release();
citraDisparity.release();
}
//Matriks parameter Q
Mat Q;
//Rectification Map
Mat mx_kiri, my_kiri, mx_kanan, my_kanan;
f_Q["Q"] >> Q;
Universitas Indonesia
96
f_Q.release();
f_mx_kiri.release();
f_my_kiri.release();
f_mx_kanan.release();
f_my_kanan.release();
//Set parameter BM
int minDisparity=0;
int ndisparities = 5*16;
int SADWindowSize = 17;
int preFilterCap=10;
int uniquenessRatio=12;
int P1=0, P2=0;
int speckleWindowSize=0;
int speckleRange=0;
int disp12MaxDiff=0;
bool fullDP=false;
Universitas Indonesia
97
while (true) {
frame1 = cvQueryFrame(capture1);
frame2 = cvQueryFrame(capture2);
char in = cvWaitKey(33);
cvDestroyWindow("Kamera Stereo");
Universitas Indonesia
98
CV_8UC1,
255/(nilaiMax-nilaiMin));
//Parameter SAD
if (c== 'p')
{ SADWindowSize += 2; cout << "SAD Window Size = " << SADWindowSize
<< endl; flag = true; }
if (c== 'o')
Universitas Indonesia
99
Universitas Indonesia
100
//parameter disp12MaxDiff
if (c== 'g') { cout << "disp12MaxDiff = " << ++disp12MaxDiff << endl; flag =
true;}
if (c== 'f'){ cout << "disp12MaxDiff = " << --disp12MaxDiff << endl; flag =
true;}
//parameter fullDP
if (c== 'd'){
if (fullDP){
fullDP = false;
cout << "fullDP = false" << endl;
}
else{
fullDP = true;
cout << "fullDP = true" << endl;
}
flag = true;
}
if (flag) {
StereoSGBM SGBM(minDisparity, ndisparities, SADWindowSize, P1,P2,
disp12MaxDiff, preFilterCap, uniquenessRatio,
speckleWindowSize, speckleRange, fullDP);
SGBM(temp_kiri, temp_kanan, temp_disp16S);
double nilaiMin, nilaiMax;
minMaxLoc(temp_disp16S, &nilaiMin, &nilaiMax);
temp_disp16S.convertTo(temp_disp8U,
CV_8UC1, 255/(nilaiMax-nilaiMin));
flag = false;
}
//untuk keluar tuning press escape
if (c == 27 ) break;
Universitas Indonesia
101
cvDestroyWindow("windowDisparity");
rekonstruksi3D(citra_kiri,temp_disp8U);
break;
}
if (in == 27) {
cvDestroyWindow("Kamera Stereo");
break;
}
//Load Matrix Q
Mat Q;
FileStorage fs("data/matriks/Q.xml", cv::FileStorage::READ);
fs["Q"] >> Q;
double X, Y, Z;
uchar R, G, B;
Universitas Indonesia
102
koor_X = X/W;
koor_Y = Y/W;
koor_Z = Z/W;
depth[i][j] = Z;
B = rgb_ptr[3*j];
G = rgb_ptr[3*j+1];
R = rgb_ptr[3*j+2];
pcl::PointXYZRGB point;
point.x = koor_X;
point.y = koor_Y;
point.z = koor_Z;
Universitas Indonesia
103
namedWindow("citra");
namedWindow("citra disparity");
cvSetMouseCallback( "citra disparity", mouseHandler, NULL );
cvSetMouseCallback( "citra", mouseHandler, NULL );
bool flag = true;
while (flag) {
imshow("citra", citra);
imshow("citra disparity", citraDisparity);
char c = cvWaitKey(33);
if (c==27){
destroyWindow("citra");
destroyWindow("citra disparity");
flag = false;
}
//buat visualizer
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
Universitas Indonesia
104
while ( !viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep (boost::posix_time::microseconds (100000));
}
return;
}
Universitas Indonesia
105
boost::shared_ptr<pcl::visualization::PCLVisualizer>
viewer
(new
Universitas Indonesia
106
Universitas Indonesia
107
Universitas Indonesia
108
Universitas Indonesia