IMPLEMENTASI ALGORITMA AFFINE SCALE INVARIANT FEATURE TRANSFORM UNTUK PENGENALAN WAJAH PADA CITRA SKETSA SKRIPSI Disusun Oleh : Mukhlis NIM : 108091000062 PROGRAM SARJANA (S1) KOMPUTER PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH JAKARTA 2015
98
Embed
IMPLEMENTASI ALGORITMA AFFINE SCALE …repository.uinjkt.ac.id/dspace/bitstream/123456789/27609/...Hasil pencocokkan dari sample yang digunakan menunjukkan bahwa metode Affine Scale
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
IMPLEMENTASI ALGORITMA AFFINE SCALE
INVARIANT FEATURE TRANSFORM UNTUK
PENGENALAN WAJAH PADA CITRA SKETSA
SKRIPSI
Disusun Oleh :
Mukhlis
NIM : 108091000062
PROGRAM SARJANA (S1) KOMPUTER
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH
JAKARTA
2015
i
IMPLEMENTASI ALGORITMA AFFINE SCALE
INVARIANT FEATURE TRANSFORM UNTUK
PENGENALAN WAJAH PADA CITRA SKETSA
SKRIPSI
Diajukan sebagai salah satu syarat untuk memperoleh gelar Sarjana Komputer
Pada Program Studi Teknik Informatika Fakultas Sains dan Teknologi
Universitas Islam Negeri Syarif Hidayatullah Jakarta
Disusun Oleh :
Mukhlis
NIM : 108091000062
PROGRAM SARJANA (S1) KOMPUTER
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH
JAKARTA
2015
ii
iii
iv
PERNYATAAN
DENGAN INI SAYA MENYATAKAN BAHWA SKRIPSI INI BENAR-BENAR
HASIL KARYA SENDIRI YANG BELUM PERNAH DIAJUKAN SEBAGAI SKRIPSI
ATAU KARYA ILMIAH PADA PERGURUAN TINGGI ATAU LEMBAGA
Proses-proses tersebut dapat dijelaskan sebagai berikut:
1. Pengumpulan kebutuhan: developer dan klien bertemu dan
menentukan tujuan umum, kebutuhan yang diketahui dan
gambaran bagian-bagian yang akan dibutuhkan berikutnya;
2. Perancangan: perancangan dilakukan cepat dan rancangan
mewakili semua aspek software yang diketahui, dan rancangan ini
menjadi dasar pembuatan Prototype;
3. Evaluasi Prototype: klien mengevaluasi Prototype yang dibuat dan
digunakan untuk memperjelas kebutuhan software.
Terdapat tiga pendekatan utama Prototyping, yaitu (Simarta, 2010):
1. THROW-AWAY
Prototype dibuat dan dites. Pengalaman yang diperoleh dari pembuatan
Prototype digunakan untuk membuat produk akhir (final), kemudian
Prototype tersebut dibuang (tak dipakai).
2. EVOLUTIONARY
Pada metode ini, prototype tidak dibuang tetapi digunakan untuk iterasi desain
berikutnya. Dalam hal ini, sistem atau produk yang sebenarnya dipandang
sebagai evolusi dari versi awal yang sangat terbatas menuju produk final atau
produk akhir..
Untuk memodelkan sebuah perangkat lunak, metode Prototyping memiliki
tahapan-tahapan di dalam proses pengembangannya. Tahapan inilah yang
21
menentukan keberhasilan dari sebuah software. Pengembang perangkat lunak
harus memperhatikan tahapan dalam metode Prototyping agar software finalnya
dapat diterima oleh pemakai. Dan tahapan-tahapan dalam Prototyping tersebut
adalah sebagai berikut :
1. Pengumpulan kebutuhan
Pemakai dan pengembang bersama-sama mendefinisikan format
seluruh perangkat lunak, mengidentifikasikan semua kebutuhan, dan
garis besar sistem yang akan dibuat.
2. Membangun Prototyping
Membangun Prototyping dengan membuat perancangan sementara
yang berfokus pada penyajian kepada pemakai (misalnya dengan
membuat input dan format output).
3. Evaluasi Protoptyping
Evaluasi ini dilakukan oleh user apakah Prototyping yang sudah
dibangun sudah sesuai dengan keinginan user. Jika sudah sesuai maka
langkah keempat akan diambil. Jika tidak, maka Prototyping direvisi
dengan mengulang langkah 1, 2 , dan 3.
4. Mengkodekan Sistem
Dalam tahap ini Prototyping yang sudah disepakati diterjemahkan ke
dalam bahasa pemrograman yang sesuai.
5. Menguji system
22
Setelah sistem sudah menjadi suatu perangkat lunak yang siap pakai,
harus dites dahulu sebelum digunakan. Pengujian ini dilakukan dengan
White Box, Black Box, Basis Path, pengujian arsitektur dan lain-lain.
6. Evaluasi Sistem
Pemakai mengevaluasi apakah sistem yang sudah jadi sudah sesuai
dengan yang diharapkan. Jika sudah, maka langkah ketujuh
dilakukan, jika belum maka mengulangi langkah 4 dan 5.
7. Menggunakan Sistem
Perangkat lunak yang telah diuji dan diterima pemakai siap untuk
digunakan.
Keunggulan dan Kelemahan Prototyping adalah sebagai berikut :
A. Keunggulan Prototyping :
1. Adanya komunikasi yang baik antara pengembang dan pemakai.
2. Pengembang dapat bekerja lebih baik dalam menentukan kebutuhan
user.
3. User berperan aktif dalam pengembangan system.
4. Lebih menghemat waktu dalam pengembangan sistem.
5. Penerapan menjadi lebih mudah karena user mengetahui apa yang
diharapkannya
B. Kelemahan Prototyping :
1. User terkadang tidak melihat atau menyadari bahwa perangkat lunak
yang ada belum mencantumkan kualitas perangkat lunak secara
23
keseluruhan dan juga belum memikirkan kemampuan pemeliharaan
untuk jangka waktu lama.
2. Pengembang biasanya ingin cepat menyelesaikan proyek. Sehingga
menggunakan algoritma dan bahasa pemrograman yang sederhana
untuk membuat Prototyping agar lebih cepat selesai tanpa memikirkan
lebih lanjut bahwa program tersebut hanya merupakan cetak biru
sistem .
Hubungan user dengan komputer yang disediakan mungkin tidak
mencerminkan teknik perancangan yang baik.
2.7. Falase Acceptance Rate(FAR), False Rejection Rate(FRR) dan Equal
Erorr Rate(EER)
Sistem biometrik yang baik seharusnya dapat menghasilkan output yang
diharapkan dari input. Namun tidak dapat dipungkiri bahwa sistem yang dibuat
menghasilkan output tidak sesuai dengan yang diharapkan. Ini terjadi karena ada
kesalahan penerimaan kandidat hasil, karena ada data yang bukan seharusnya
menjadi output memiliki nilai kecocokan melebihi threshold. Dalam biometrik
terdapat suatu sistem penilaian untuk mengukur kesalahan penerimaan output
yang dinamakan dengan False Acceptance Rate. Selain itu terkadang sistem justru
menolak data yang seharusnya menjadi output, karena data tersebut memiliki nilai
kecocokan kurang dari threshold. Kesalahan ini diukur dengan False Rejection
Rate . Threshold terbaik dapat didapatkan dari nilai yang dimiliki oleh titik
keseimbangan antara FAR dan FRR, titik ini disebut Equal Erorr Rate(EER)
(Putri, Agung, & Sa'adah, 2014).
24
BAB III
METODOLOGI PENELITIAN
Pada bab ini peneliti akan menejelaskan mengenai metodologi penelitian
yang digunakan beserta tahap – tahap yang akan dilakukan didalam penelitian.
3.1. Metode Pengumpulan Data
Pengumpulan data merupakan langkah yang penting untuk metode ilmiah,
karena pada umumnya data yang dikumpulkan digunakan untuk menguji hipotesis
yang telah dirumuskan. Teknik pengumpulan data yang sering digunakan antara
lain:
3.1.1. Studi Pustaka
Studi pustaka yang dilakukan oleh penulis dengan mencari dan
mempelajari teori-teori yang dapat dijadikan landasan atau kerangka berpikir
bagi penelitian yang akan dilakukan sehingga penyusunan laporan skripsi ini
dapat lebih terarah. Teori-teori tesebut diperoleh dari literatu tertulis, dimana
literatur tersebut perlu dicari sebanyak mungkin agar dapat dibandingkan satu
dengan yang lainnya.
Adapun sumber studi kepustakaan ini adalah buku-buku mengenai
image processing, metode pengembangan sistem, matlab sebagai dasar
bahasa pemprograman, jurnal tentang algoritma Affine Scale Invariant Fiture
Transpose(ASIFT) atau algoritma yang lain tetapi untuk identifikasi sketsa
seperti Scale Invariant Fiture Transpose(SIFT), Multiscale Markov Random
Field (MMRF), Modified Local Binary Patterns(MLBP), dan sumber-sumber
25
lainnya yang berhubungan erat dengan permasalahan yang diambil baik
berupa buku ataupun paper.
3.1.2. Penelitian Sejenis
Penulis mencari penelitian – penelitian yang berkaitan mengenai
identifikasi wajah sebelumnya telah dilakukan oleh peneliti lain. Berikut
ini beberapa penjelasan singkat mengenai literature-literatur yang relevan
dengan topik yang diteliti oleh penulis :
Tabel 3.1. Tabel Perbandingan Studi Literatur Sejenis
Nama Judul Penelitian Kelebihan Kekurangan Yuwono jurusan teknik elektro Universitas Kristen Maranatha
PERBANDINGAN TEKNIK SCALE INVARIANT FEATURE TRANSFORM (SIFT) DAN MULTISCALE LOCAL BINARY PATTERN (MLBP) DALAM PENGENALAN WAJAH DENGAN CITRA MASUKAN BERUPA SKETSA
1. Hasil perbandingan dapat menunjukkan bahwa dengan teknik SIFT sketsa dapat diidentifikasi lebih baik daripada menggunakan MLBP
2. Tingkat keakurasian dalam identifikasi sketsa mencapai 80,3%
1. Algoritma SIFT hanya menemukan sedikit keypoint pada sketsa maupun foto
Alvin Silajaya Jurusan teknik elektro, Universitas Kristen Maranatha
PENGENALAN WAJAH DENGAN CITRA MASUKAN BERUPA CITRA SKETSA WAJAH SEBAGAI HASIL SINTESIS DENGAN TEKNIK
1. Menggunakan algoritma reduksi data Local Discriminant Analysis dan Principal Component Analysis
1. Tingkat keakurasian tertinggi dalam identifikasi sketsa hanya 60% dengan menggunakan metode Principal
26
MULTISCALE MARKOV RANDOM FIELD (MRF)
Component Analysis dalam reduksi datanya.
3.2. Metode Pengembangan Prototyping
Pada metode pengembangan simulasi ini penulis menggunakan metode
prototyping. Adapun alasan kenapa penulis menggunakan metode pengembangan
prototyping ini, sebagai berikut:
1. Sistem yang dibuat bukan berupa aplikasi namun masih berupa
prototype aplikasi untuk membuktikan penggunaan ASIFT dalam
identifikasi sketsa.
2. Ada tekanan untuk implementasi secepatnya, disini karena penulis
menginginkan program simulasi ini bisa jadi secepatnya sehingga tidak
terlalu menghabiskan banyak dana dan waktu.
Adapun langkah-langkah yang digunakan dalam pengembangan
prototyping yang akan dibuat, sebagai berikut:
3.2.1 Pengumpulan Kebutuhan
Tahap awal pengembangan prototyping diawali dengan pengumpulan
kebutuhan. Pada tahap ini penulis melakukan analisis kebutuhan dan
mengidentifikasi segala kebutuhan. Dari analisis tersebut dapat ditetapkan tujuan
27
perancangan, pengajuan usulan solusi yang dapat diterima. Tahapannya adalah
sebagai berikut :
3.2.1.1 Analisa Sistem
Pada tahap ini penulis akan membahas mengenai analisa sistem pada
identifikasi sketsa wajah yang dilukis dengan foto wajah yang telah disimpan
selama ini, yang dilakukan pada lembaga – lembaga terkait.
3.2.1.2 Identifikasi Masalah
Pada tahap ini penulis menjelaskan masalah yang terjadi pada sistem.
3.2.1.3 Usulan Penyelesaian Masalah
Pada tahap ini penulis menjelaskan mengenai usulan penggunaan metode
Affine Scale Invaraiant Feature Transform untuk identifikasi sketsa wajah.
3.2.1.4 Kebutuhan Perangkat Lunak dan Perangkat Keras
Pada tahapan ini penulis membuat spesifikasi dari aplikasi simulasi yang
penulis buat dari kebutuhan hardware dan kebutuhan dari software yang penulis
gunakan untuk membuat prototype. Pembuatan spesifikasi ini bertujuan untuk
memudahkan dalam melakukan analisa kemampuan yang sesuai dengan
kebutuhan.
3.2.2 Membangun Prototype
Didalam prototyping melakukan perancangan sementara yg berupa format
input dan output berikut adalah tahapan yg akan dilakukan:
28
3.2.2.1 Desain Image Processing
Pada tahap ini penulis akan menjelaskan mengenai proses image
processing yang penulis terapkan dalam pengenalan wajah pada sketsa
menggunakan algoritma Affine Scale Invariant Feature Transform. Adapun
tahapan yang penulis lakukan adalah :
1. Image Acquisition
Pada tahap ini penulis akan menjelaskan bagaimana penulis
memperoleh data citra yang di butuhkan dalam proses pengenalan
wajah pada citra sketsa.
2. Feature Extraction
Pada tahap ini penulis akan menjelaskan mengenai proses dalam
mendapatkan ciri ciri khusus pada citra sketsa maupun pada citra
foto menggunakan algoritma Affine Scale Infariant Feature
Transform.
3. Recognition
Pada tahap ini penulis akan menjelaskan mengenai proses dalam
mengenali citra sketsa untuk mendapatkan citra foto yang cocok,
dengan mencocokkan ciri ciri khusus pada citra sketsa dengan ciri
ciri khusus pada citra foto.
29
3.2.2.2 Desain Interface
Pada tahap ini, penulis melakukan perancangan terhadap user interface
dari prototype. Untuk tampilan antar muka, penulis melakukan perancangan GUI
(Graphical User Interface).
3.2.3 Mengkodekan Sistem
Pada tahap ini, semua rancangan yang sudah dirancang diatas akan
dikodekan kedalam program dengan menggunakan tools untuk membangun
simulasi ini. Tools yang dipakai adalah Matlab 8.03 untuk membangun prototype
ini.
3.2.4 Pengujian Prototype
Prototype aplikasi ini diuji apakah protype ini dapat menganalisa
wajah dari citra masukan berupa sketsa. Pada tahap ini akan didapatkan nilai
nilai keypoint dan kecocokan antara citra masukan dengan citra hasil
identifikasi.
30
3.3. Kerangka Berfikir
Gambar 3.1.1 Alur Kerangka Berpikir
31
BAB IV
PEMBAHASAN DAN HASIL
Pada perancangan prototype aplikasi ini penulis melakukan perancangan
dengan menggunakan metode pengembangan Prototyping. Prototyping adalah
proses pembuatan model sederhana software yang mengijinkan pengembang
memiliki gambaran dasar tentang program serta melakukan pengujian awal.
Prototyping memberikan fasilitas bagi pengembang dan pemakai untuk saling
berinteraksi selama proses pembuatan, sehingga pengembang dapat dengan
mudah memodelkan perangkat lunak yang akan dibuat. Prototyping merupakan
salah satu metode pengembangan perangat lunak yang banyak digunakan. Berikut
ini adalah langkah-langkah yang penulis lakukan dalam melakukan prancangan
dengan menggunakan metode prototyping, sebagai berikut :
4.1. Pengumpulan Kebutuhan
Pada tahapan penggumpulan kebutuhan peneliti melakukan dengan
beberapa tahapan seperti berikut ini:
4.1.1. Analisa Sistem
Data yang digunakan dibagi menjadi dua bagian. Pertama adalah
kumpulan citra foto yang telah ada didalam komputer. Kedua adalah citra sketsa
yang dibuat berdasarkan informasi yang didapatkan. Data citra sketsa akan
dicocokkan dengan data citra foto sampai ditemukan wajah yang sama atau
setidaknya mirip pada citra foto dengan wajah pada citra sketsa.
32
4.1.2. Identifikasi Masalah
Setelah melakukan analisa masalah yang ditemukan adalah sebagai
berikut :
1. Sulitnya mengidentifikasi wajah dari citra sketsa yang telah dibuat
untuk mendapatkan wajah yang sama yang ada didalam komputer.
Terutama apabila citra yang akan dibandingkan banyak jumlahnya.
2. Sketsa dan foto memiliki dua perbedaan yang mencolok yaitu,
tekstur dan bentuknya.
4.1.3. Usulan Penyelesaian Masalah
Dibuat sebuah sistem yang akan mengidentifikasi wajah pada citra sketsa
sehingga didapatkan foto yang sesuai dengan citra sketsa yang diidentifikasi.
Menggunakan metode Affine Scale Invariant Feature Transform untuk mengatasi
perbedaan tekstur dan bentuk pada sketsa dan foto.
4.1.4. Kebutuhan Perangkat Lunak dan Perangkat Keras
Perangkat Keras yang akan digunakan untuk membangun
prototype adalah sebagai berikut:
Tabel 4.1. Tabel Spesifikasi Kebutuhan Perangkat Keras
Jenis Laptop atau Komputer Spesifikasi Laptop Samsung 275E4E AMD E2-2000 APU(1,8 GHz),
4GB RAM, 500 GB HDD, Amd Radeon HD 7340 Grapics, Generic PnP Monitor, Synaptic PS/2 Port TouchPad.
33
Kebutuhan untuk perangkat lunak yang akan penulis gunakan
adalah :
Tabel 4.2. Perangkat Lunak Yang Digunakan
Nama Perangkat Lunak
Fungsi
Sistem Operasi Windows 7 Ultimate 32bit
Sebagai interface antara pengguna dan komputer.
Matlab 8.03 Sebagai tools untuk membuat serta menjalankan program simulasi yang dibuat.
Borlan C++ 5.02 Sebagai tools untuk menganalisa algoritma Affine Scale Invariant Feature Transform(ASIFT).
4.2. Membangun Prototype
Pada tahapan ini akan dilakukan desain untuk prototype yang akan dibuat
dengan beberapa tahapan yaitu tahapan desain image processing dan desain
interface. Berikut ini adalah penjelasan tentang desain yang penulis lakukan,
sebagai berikut :
4.2.1. Desain Image Processing
Pada tahapan ini akan dilakukan desain untuk proses image processing
yang dibutuhkan untuk mengenali wajah pada sketsa. Berikut ini adalah tahapan
sampai recognition(pengenalan) beserta penjelasan untuk mempermudah dalam
membangun prototype yang akan dibuat :
1. Image Acquisition
Pada image acquisition ini digunakan sepuluh citra, lima citra foto dan
lima citra sketsa berekstensi .jpeg. Citra digunakan sebagai input dalam proses
34
pengenalan. Citra foto telah ada di dalam komputer, citra sketsa dimasukkan ke
dalam komputer menggunakan scanner.
2. Feature Extraction
Pada feature extraction digunakan metode Affine Scale Invariant Feature
Transform(ASIFT). Tahap ini diawali dengan menentukan citra sketsa yang akan
diidentifikasi yang dipilih oleh user. Citra sketsa yang dipilih dan citra foto yang
pertama akan digandakan, citra yang digandakan akan dikaburkan(blur) dengan
beberapa tingkat pengkaburan(blurring). Pengkaburan ini dilakukan berulang
dengan citra yang ukurannya setengah dari citra sebelumnya.
Citra hasil pengkaburan(blurring) dengan ukuran yang sama tapi berbeda
tingkat pengkaburannya dihitung perbedaan kekaburannya(blur) yang biasa
disebut dengan Different of Gaussian(DoG). Langkah ini dilakukan untuk semua
citra yang dikaburan(blurred) dengan semua ukuran citra dan hasilnya berupa
citra DoG.
Setiap pixel Citra DoG dibandingkan dengan 3x3 pixel tetangga pada citra
tersebut dan 3x3 pixel pada posisi yang sama dengan pixel yang akan
dibandingkan plus 3x3 pixel tetangganya pada citra DoG sebelum dan Citra DoG
setelahnya. Jadi setiap pixel dibandingkan dengan 26 pixel, apabila pixel tersebut
paling besar atau paling kecil pixel tersebut menjadi keypoint.
35
Gambar 4.1 Contoh citra hasil pengkaburan(blurring) 1S.jpg dengan ukuran 828x1164,
414x582, 207x291,103x145
36
Gambar 4.2 Contoh citra hasil pengkaburan(blurring) 1F.jpg dengan ukuran 2048x1536,
1024x768, 512x384, 256x192
37
Gambar 4.3 Contoh citra blurring menjadi citra DoG
Gambar 4.
Keypoint yang terletak pada
tingkat pencahayaan yan rendah akan disingkirkan.
dicari gradient magnitude
dibuat histogram dari
histogram ini, 360 derajat orientasi dipecah menjadi 36 grafik batang (masing
Gambar 4.4 Contoh Mencari Ekstrema dalam citra DoG
yang terletak pada tepi(edge) dan terletak pada wilayah dengan
tingkat pencahayaan yan rendah akan disingkirkan. Keypoint yang tersisa akan
gradient magnitude dan gradient orientasi dari pixel disekitarnya
dibuat histogram dari gradient magnitude dan gradient orientasi tersebut
histogram ini, 360 derajat orientasi dipecah menjadi 36 grafik batang (masing
38
DoG
dan terletak pada wilayah dengan
yang tersisa akan
disekitarnya. Lalu akan
orientasi tersebut. Didalam
histogram ini, 360 derajat orientasi dipecah menjadi 36 grafik batang (masing
39
masing 10 derajat). Misalnya arah gradient pada titik tertentu adalah 15,5 derajat,
maka gradient garis akan masuk ke 10-19 derajat diagram batang. Banyaknya
“jumlah” yang dimasukan pada diagram batang tergantung dari magnitude dari
gradient pada point tersebut. Setelah dilakukan terhadap semua pixel disekitar
keypoint, histogram akan memiliki ketinggian pada angka tertentu.
Gambar 4.5 Contoh Histogram Orientasi
Dari contoh histogram diatas grafik pada nilai gradient 20-29 menjadi
maksimum orientasi yang dimiliki oleh pixel disekitar keypoint. Semu grafik
gradient dari orientasi yang memiliki nilai lebih dari 80% dari maksimum
orientasi dikonversi menjadi keypoint yang baru. Keypoint yang baru ini memiliki
lokasi dan scale yang sama dengan keypoint yang asli. Tapi orientasinya sesuai
dengan ketinggian yang lain.
Selanjutnya pemberian identitas khusus(finger print) pada keypoint, ini
dilakukan dengan membuat 16x16 kotak disekitar keypoint. 16x16 kotak ini
dikelompokkan menjadi kotak 4x4.
40
Gambar 4.6 Contoh pemberian finger print pada keypoint
Setiap kotak 4x4, dihitung gradient magnitudes dan orientasinya. Orientasi ini
diletakkan pada grafik lingkaran yang dibagi menjadi 8.
Gambar 4.7 Memasukkan orientasi pada hitogram lingkaran
Gradient Orientasi yang berada pada range 0-44 derajat dimasukkan dalam
wilayah(bin) pertama, 45-89 dimasukkan ke dalam wilayah(bin) selanjutnya dan
selanjutnya. Banyaknya jumlah yang dimasukkan kedalam wilayah(bin)
tergantung dari magnitude dari gradient dan jaraknya dari keypoint. Jadi gradient
yang jaraknya jauh dari keypoint akan menambahkan bobot yang kecil kedalam
41
histogram. Ini dilakukan dengan menggunakan fungsi pembobotan gaussian,
fungsi ini menghasilkan sebuah gradient yang akan dikalikan dengan magnitude
dari orientasi, sehingga didapatkan magnitude yang telah mendapatkan bobot.
Semakin jauh, smakin kecil nilai bobot dari magnitude.
Gambar 4.8 gradient orientasi yang mengalami pembobotan gaussian
3. Recognition
Pada recognition ini keypoint pada sketsa dan foto yang akan dihitung
perbedaannya, keypoint yang memiliki perbedaan terkecil dianggap cocok. Hasil
pencocokkan keypoint yang memiki pasangan lebih dari satu baik dari satu ke
banyak maupun dari banyak ke satu akan dihapus.Hasil pencocokkan keypoint
yang memiliki letak pixel yang berbeda (proses matching yang salah) akan
dihapus. Maka akan didapatkan keypoint yang cocok antara sketsa dan Foto. Citra
foto yang memiliki kecocokkan keypoint yang terbanyak dan memiliki jumlah
kecocokkan diatas treeshold dianggap sebagai citra foto yang memiliki kemiripan
wajah paling besar dengan citra sketsa. Citra foto tersebut akan ditampilkan
sebagai citra hasil identifikasi citra sketsa.
42
Tabel 4.3 Hasil Matching Keypoint
Nama Sketsa
Sketsa Nama Foto
Foto Jumlah
Keypoint Match
1S.jpg
1F.jpg
56 keypoint
4.2.2. Desain Interface
Pada tahap ini, penulis melakukan perancangan terhadap user interface
dari aplikasi protype ini. Untuk tampilan antar muka penulis melakukan
perancangan GUI (Graphical User Interface). Berikut ini rancangan interface
yang akan dibangun :
1. Halaman Utama
Ini adalah halaman awal dari sumulasi dan juga merupakan halaman
navigasi utama. Berikut ini adalah desain dari halaman utama:
43
Gambar 4.9 Desain Interface Halaman Utama
2. Halaman Inisialisasi
Halaman ini berisi kebutuhan informasi awal untuk menjalankan program
simulasi. Berikut ini adalah desain dari halaman inisialisasi :
Gambar 4.10 Desain Interface Inisialisasi
44
3. Halaman Identifikasi Sketsa
Pada halaman ini akan dilakukan identifikasi sketsa sehingga didapatkan
citra foto yang seharusnya memiliki wajah yang sama dengan sketsa. Berikut ini
adalah desain untuk halaman Identifikasi :
Gambar 4.11 Desain Interface Identifikasi Sketsa
4.3. Mengkodekan Sistem
Pada tahap ini, semua rancangan simulasi yang telah disepakati dikodekan
kedalam program dengan menggunakan tools untuk mebuat simulasinya. Tools
yang dipakai adalah Matlab 8.03 untuk mebuat simulasi identikasi sketsa.
Sedangkan algoritma ASIFT yang peneliti pakai telah dibuat sebelumnya oleh
Jean-Michel Morel dan Guoshen Yu menggunakan bahasa C, jadi pada tahap ini
peneliti akan menganalisa kode bahasa C yang telah mereka buat. Berikut ini
adalah tahapan identifikasi sketsa yang telah dikodekan :
45
1. Penerapan Pengkodean Matlab untuk Inisialisasi
Proses inisialisasi dilakukan untuk menentukan kebutuhan awal sistem
simulasi. Proses ini sangatlah penting apabila ada kesalahan pada proses ini maka
sistem simulasi tidak akan berjalan dengan semestinya.Berikut ini adalah kode
Matlab untuk inisialisasi :
Potongan program diatas digunakan untuk mengambil pathfolder yang
berisi lima citra sketsa, lalu diletakkan pada edit box di dalam interface inisialisasi.
function FotoPath_Callback(hObject, eventdata, handles) function FotoPath_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function FotoPathBtn_Callback(hObject, eventdata, handles) FotPath = uigetdir; if ischar(FotPath) set(handles.FotoPath,'String',FotPath); end handles.FotPath = FotPath; guidata(hObject, handles);
function SketsaPath_Callback(hObject, eventdata, handles) function SketsaPath_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function SketsaPathBtn_Callback(hObject, eventdata, handles) SketPath = uigetdir; if ischar(SketPath) set(handles.SketsaPath,'String',SketPath); end handles.SketPath = SketPath; guidata(hObject, handles);
46
Potongan program diatas digunakan untuk mengambil path folder yang
berisi lima citra foto, lalu diletakkan pada edit box di dalam interface inisialisai.
Potongan program diatas digunakan untuk menyimpan hasil konfigurasi
pada tahap inisialisai kedalam file requirement.mat, lalu menutup intarface
inisialisasi.
Potongan program diatas digunakan untuk membatalkan konfigurasi pada
inisialisasi, lalu menutup interface inisialisasi.
2. Proses Pengkodean Identifikasi Sketsa
Prose identifikasi sketsa dilakukan melalui beberpa tahapan, yaitu:
1. Penerapan Pengkodean Matlab untuk Input Citra Sketsa
Pada proses ini user akan memasukkan nama citra sketsa dan sistem
akan mencari citra yang sesuai dengan input. Berikut ini adalah kode
Matlab Input Sketsa :
function pushbutton4_Callback(hObject, eventdata, handles)
close(gcf);
function pushbutton3_Callback(hObject, eventdata, handles) HasilMatcPath = handles.HasilMatcPath; SketPath = handles.SketPath; FotPath = handles.FotPath; ImageFiles = dir(FotPath); Train_Number = 0; for i = 1:size(ImageFiles,1) if not(strcmp(ImageFiles(i).name,'.')|strcmp(ImageFiles(i).name,'..')|strcmp(ImageFiles(i).name,'Thumbs.db')) Train_Number = Train_Number + 1; % Number of all images in the training database end end save requirement.mat SketPath FotPath Train_Number HasilMatcPath close(gcf);
47
Potongan program diatas digunakan untuk mengambil masukkan
nama citra sketsa. Lalu citra sketsa dan citra foto akan diambil dari
folder database citra sketsa maupun database citra foto.
2. Penerapan Pengkodean C++ untuk Algoritma ASIFT
Algoritma ASIFT memiliki beberapa tahapan yang dilakukan, berikut
ini adalah kode dari tahapan – tahapan dari algoritma ASIFT beserta
Source Code Home.m function varargout = Home(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Home_OpeningFcn, ... 'gui_OutputFcn', @Home_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before Home is made visible. function Home_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to Home (see VARARGIN) % Choose default command line output for Home handles.output = hObject; CitraLogo = imread('C:\Users\Mukhlis L\Documents\MATLAB\Hasil Match\logo.png'); imshow(CitraLogo); % Update handles structure guidata(hObject, handles); % UIWAIT makes Home wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. function varargout = Home_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) SelectReq; % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) IdenSketsa; % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Help; % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) About; % --- Executes on button press in pushbutton5. function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) close(gcf);
function varargout = SelectReq(varargin) % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @SelectReq_OpeningFcn, ... 'gui_OutputFcn', @SelectReq_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before SelectReq is made visible. function SelectReq_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to SelectReq (see VARARGIN) % Choose default command line output for SelectReq handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes SelectReq wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = SelectReq_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output;
Source Code SelectReq.m function SketsaPath_Callback(hObject, eventdata, handles) % --- Executes during object creation, after setting all properties. function SketsaPath_CreateFcn(hObject, eventdata, handles) % hObject handle to SketsaPath (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in SketsaPathBtn. function SketsaPathBtn_Callback(hObject, eventdata, handles) % hObject handle to SketsaPathBtn (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) SketPath = uigetdir; if ischar(SketPath) set(handles.SketsaPath,'String',SketPath); end handles.SketPath = SketPath; guidata(hObject, handles); function FotoPath_Callback(hObject, eventdata, handles) % hObject handle to FotoPath (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of FotoPath as text % str2double(get(hObject,'String')) returns contents of FotoPath as a double % --- Executes during object creation, after setting all properties. function FotoPath_CreateFcn(hObject, eventdata, handles) % hObject handle to FotoPath (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in FotoPathBtn. function FotoPathBtn_Callback(hObject, eventdata, handles) % hObject handle to FotoPathBtn (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) FotPath = uigetdir; if ischar(FotPath) set(handles.FotoPath,'String',FotPath); end handles.FotPath = FotPath; guidata(hObject, handles); % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) SketPath = handles.SketPath; FotPath = handles.FotPath; ImageFiles = dir(FotPath); Train_Number = 0; for i = 1:size(ImageFiles,1) if not(strcmp(ImageFiles(i).name,'.')|strcmp(ImageFiles(i).name,'..')|strcmp(ImageFiles(i).name,'Thumbs.db')) Train_Number = Train_Number + 1; % Number of all images in the training database end end save requirement.mat SketPath FotPath Train_Number close(gcf); % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) close(gcf);
Source Code IdenSketsa.m function varargout = IdenSketsa(varargin) % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @IdenSketsa_OpeningFcn, ... 'gui_OutputFcn', @IdenSketsa_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before IdenSketsa is made visible. function IdenSketsa_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to IdenSketsa (see VARARGIN) % Choose default command line output for IdenSketsa handles.output = hObject; % Update handles structure guidata(hObject, handles); axes(handles.axes2); clear gca; set(gca,'ytick',[]); set(gca,'xtick',[]); axes(handles.axes3); clear gca; set(gca,'ytick',[]); set(gca,'xtick',[]); % UIWAIT makes IdenSketsa wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. function varargout = IdenSketsa_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; % --- Executes on button press in SketBtn. function SketBtn_Callback(hObject, eventdata, handles) load requirement.mat axes(handles.axes2); clear gca; %sket = strcat(SketPath); [FileName,PathName,FilterIndex] = uigetfile({'*.jpg'},'Select Sketsa',SketPath); handles.NamaFile=FileName; handles.PathName=PathName; guidata(hObject,handles); if isequal(FileName,0) disp('User selected Cancel') else axes(handles.axes2); clear gca; set(gca,'ytick',[]); set(gca,'xtick',[]); axes(handles.axes2); handles.Citra.RGB = imread([PathName FileName]); image(handles.Citra.RGB), set(gca,'ytick',[]); set(gca,'xtick',[]); guidata(hObject,handles); %disp(['User selected', fullfile(PathName, FileName)]) end % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) matchTst = 0; load requirement.mat ImageName = handles.NamaFile; file_img1 = strcat(SketPath,'\',ImageName); for i=1:5 ImgName = int2str(i); %file_img1 = strcat(SketPath,'\',ImgName,'.jpg'); file_img2 = strcat(FotPath,'\',ImgName,'.jpg'); imgOutVert = 'imgOutVert.png';
imgOutHori = 'imgOutHori.png'; matchings = 'matchings.txt'; keys1 = 'keys1.txt'; keys2 = 'keys2.txt'; flag_resize = 0; demo_ASIFT(file_img1, file_img2, imgOutVert, imgOutHori, matchings, keys1, keys2, flag_resize); fid = fopen('matchings.txt','r'); i = 1; tline = fgetl(fid); A{i} = tline; while ischar(tline) i = i+1; tline = fgetl(fid); A{i} = tline; end fclose(fid); matchK = str2num(A{1}); if matchK>matchTst matchTst = matchTst+matchK; ImgRsltNm = ImgName; end end if (matchTst>0) images = strcat(FotPath,'\',ImgRsltNm,'.jpg'); axes(handles.axes3); image(imread(images)); grid off; axis off; %figure,imshow(images); %title('Equivalent Image'); disp(strcat('Matched image is : ',ImgRsltNm)) fprintf('Found %d matches.\n', matchTst); else fprintf('Image not found.\n'); end % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) close (gcf);