laporan_komvis

21
LAPORAN COMPUTER VISION SIGNATURE RECOGNITION DENGAN JARINGAN SYARAF TIRUAN LEARNING VECTOR QUANTIZAZION Diusulkan Oleh : Kelompok : 1. Putu Adi Sunarya, 08.18.112 2. Sigit Setiawan, 08.18.107 TEKNIK INFORMATIKA – S1 FAKULTAS TEKNOLOGI INDUSTRI

Upload: sigit-setiawan

Post on 29-Jun-2015

61 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LAPORAN_KOMVIS

LAPORAN

COMPUTER VISION

SIGNATURE RECOGNITION DENGAN

JARINGAN SYARAF TIRUAN LEARNING VECTOR QUANTIZAZION

Diusulkan Oleh :

Kelompok : 1. Putu Adi Sunarya, 08.18.112

2. Sigit Setiawan, 08.18.107

TEKNIK INFORMATIKA – S1

FAKULTAS TEKNOLOGI INDUSTRI

INSTITUT TEKNOLOGI NASIONAL MALANG

2010 / 2011

Page 2: LAPORAN_KOMVIS

BAB I

PENDAHULUAN

A. Latar Belakang

Biometric merupakan teknik authentikasi yang mengambil karakteristik fisik

seseorang yang dapat diukur atau dipertimbangkan sebagai suatu cirri khas dari seseorang,

contohnya : wajah, retina, suara, sidik jari, tanda tangan, dll.

Biometric authentication, sering di manfaatkan dalam bidang keamanan (security

system), contohnya National ID card, validasi cek, izin penarikan uang di bank, dll. Dari

yang disebutkan di atas, tanda tangan merupakan kegiatan yang paling sering dilakukan.

Tanda tangan merupakan sebuah contoh dari pengesahan sebuah identitas.

Pemalsuan tanda tangan merupakan sesuatu yang harus diperhatikan, terutama dalam

bisnis perbankan, yg bergantung pada tanda tangan untuk memvalidasi dari suatu transaksi

yang melibatkan uang. Pada umumnya, untuk mengidentifikasi tanda tangan masih

dilakukan secara manual yaitu dengan mencocokkan tanda tangan pada waktu transaksi

dengan tanda tangan yang sah. Tekstur citra tanda tangan yang unik pada setiap orang

dapat dianalisis untuk diidentifikasi. Oleh karena itu, diperlukan sebuah sistem yang

mampu menganalisa karakteristik tanda tangan sehingga mempermudah dalam

mengidentifikasi tanda tangan seseorang. Dengan menggunakan jaringan saraf tiruan

learning vector quatizazion dapat dibuat sebuah sistem yang mampu menganalisis dan

mengidentifikasi tanda tangan seseorang.

B. Batasan Masalah

Pada pembuatan aplikasi signature recognition ini, akan menggunakan pendekatan

jaringan syaraf tiruan learning vector quantizazion untuk pengenalan tanda tangan yang

dikombinasikan dengan Edge Detection Metjod pada pengolahan citra tandatangan untuk

menandai bagian yang menjadi detil citra tanda tangan.

C. Tujuan dan Manfaat

Pembuatan aplikasi ini bertujuan untuk merancang dan melakukan implementasi

perangkat lunak yang berfungsi untuk mengidentifikasi tanda tangan menggunakan

jaringan saraf tiruan learning vector quatizazion. Selain itu, sebagai alternatif lain metode

pengenal tanda tangan yang menurut kami lumayan bagus.

D. Metode

Page 3: LAPORAN_KOMVIS

1. Preprocessing

Data yang digunakan dalam penelitian ini adalah sekumpulan citra untuk

pembelajaran (learning data set) dan sekumpulan citra untuk pengujian (testing data

set) yang diperoleh dari hasil scanning tanda tangan.

Citra tanda tangan yang digunakan berukuran 340x272 pixel. Citra tersebut

mengalami proses konversi ke grayscaling jika merupakan citra true color,

selanjutnya citra akan dikenai proses deteksi tepi berbasis gradien dengan operator

Roberts, yang dilanjutkan dengan proses operasi negasi.

Citra analisis merupakan citra grayscale dengan skala 8 bit yang memiliki

intensitas warna berkisar antara 0 sebagai nilai minimum sampai 255 yang merupakan

nilai maksimum. Citra analisis kemudian dikonversi ke dalam barisan bilangan biner

sepanjang 340x272 untuk masing-masing citra. Untuk setiap pixel dengan nilai

intensitas warna ≤ 237 diberi nilai 1, sedangkan untuk nilai intensitas warna>237

diberi nilai 0, sehingga akan diperoleh barisan nilai yang terdiri dari 0 dan 1 sepanjang

92480 elemen. Kemudian dilakukan proses pembagian region (wilayah) sehingga

menghasilkan 128x160 region.

Gambar 1. Pembagian Region dari mxn (340x272) pixel menjadi pxq (128X160)

2. Edge Detection

Edge detection atau deteksi tepi digunakan untuk melihat apakah suatu edge atau

tepi melewati atau berada di dekat suatu titik (pixel) dalam sebuah citra. Tepi adalah

batas antara dua daerah dengan sifat tingkat keabuan yang relative berbeda.

Page 4: LAPORAN_KOMVIS

Tujuan dari deteksi tepi adalah menandai bagian yang menjadi detil citra, dan

memperbaiki detil citra yang kabur karena error atau efek proses akuisisi citra.

Batas suatu obyek semakin nampak bersamaan dengan ketidak kontinuitasan

intensitas dalam suatu citra. Eksperimen pada sistem penglihatan manusia

menunjukkan bahwa suatu citra sangat penting, bahkan suatu obyek dapat dikenali

hanya dari garis bentuk kasarnya saja (croude outline). Kenyataan ini merupakan

konsep prinsip untuk merepresentasikan suatu obyek melalui batasnya.

Tepi lokal (local edge) adalah daerah kecil dalam suatu citra yang tingkat

keabuan lokalnya berubah dengan sangat cepat dengan cara yang sederhana (misalnya

monotonik). Operator tepi (edge operator) adalah operator matematis (atau yang hasil

komputasinya ekuivalen), yang dengan perluasan kecil, didesain untuk mendeteksi

keberadaan tepi lokal dalam suatu fungsi citra (Low, 1991). Pada intinya, ide yang

mendasari sebagian algoritma pendeteksian tepi adalah perhitungan suatu operator

derivatif lokal.

Dalam teknik deteksi tepi ini, diasumsikan bahwa tepi adalah pixel yang

memiliki nilai gradient tinggi. Gradien itu sendiri adalah ukuran besarnya perubahan

intensitas yang terjadi.

Pada citra digital f(x,y) turunan berarah sepanjang sekian obyek akan bernilai

maksimum pada arah normal dari kontur tepian yang berses uaian. Sifat ini

dipergunakan sebagai dasar pemanfaatan operator gradien sebagai deteksi tepi.

Gradien suatu citra f(x,y) pada lokasi x,y data didefinisikan sebagai vektor.

Operator gradien menghitung intensitas perubahan tingkat keabuan dan arah

dimana perubahan terjadi. Hal ini dihitung berdasarkan perbedaan nilai pixel-pixel

yang bertetangga.

Operator Robert Cross adalah operator gradient yang sederhana berukuran 2 x 2.

Operator ini menyediakan pendekatan paling sederhana dari magnitude gradien, yang

dapat ditunjukkan dengan fungsi matematis berikut ini, yaitu:

Page 5: LAPORAN_KOMVIS

1

-1-1

Mask konvolusi untuk operator Robert :

Gambar berikut menunjukkan algoritma deteksi tepi dengan operator Robert yang

diikuti dengan proses negasi. Pengurangan 255 terhadap nilai hasil penjumlahan 2

konvolusi dari citra dimaksudkan untuk menegasikan, karena hasil konvolusi biasanya

berada di sekitar nilai 0 (nilai kecil), sehingga jika ditampilkan, citra tepi kebanyakan

berwarna gelap (hitam).

Gambar 2. Algoritma Konvolusi Deteksi tepi

Dengan operator Robert dan operasi negasi

Page 6: LAPORAN_KOMVIS

BAB II

TINJAUAN PUSTAKA

A. Jaringan Syaraf Tiruan

Jaringan Syaraf Tiruan (JST) adalah system pemroses informasi yang memiliki

karakteristik unjuk kerja tertentu yang menyerupai jaringan syaraf biologis (Fausett,

1994). JST telah dikembangkan sebagai generalisasi model matematika dari aspek

kognitif manusia atau syaraf biologis, yaitu didasarkan pada asumsi-asumsi bahwa :

a. Pemrosesan informasi terjadi pada banyak elemen sederhana (neuron)

b. Sinyal dikirimkan di antara neuron-neuron melalui penghubung-penghubung

c. Penghubung antar neuron memiliki bobot yang akan memperkuat atau memperlemah

sinyal

d. Untuk menentukan output, setiap neuron menggunakan fungsi aktifasi yang dikenakan

pada jumlahan input yang diterimanya. Selanjutnya, besarnya output dibandingkan

dengan suatu batas ambang.

B. Learning Vector Quatizazion Untuk Pengenal Tanda Tangan

Learning Vector Quantization (LVQ) adalah suatu metode untuk melakukan

pembelajaran pada lapisan kompetitif yang terawasi. Suatu lapisan kompetitif akan secara

otomatis belajar untuk mengklasifikasikan vektor-vektor input. Kelas-kelas yang

didapatkan sebagai hasil dari lapisan kompetitif ini hanya tergantung pada jarak antara

vektor-vektor input. Jika dua vektor input mendekati

sama, maka lapisan kompetitif akan meletakkan kedua vektor input tersebut ke dalam

kelas yang sama. Pada Gambar 2, ditunjukkan arsitektur LVQ yang digunakan pada

aplikasi ini. Terdapat 80 unit neuron input, dan sejumah n output. Lapisan input diambil

dari pengolahan citra tanda tangan, dan lapisan output merepresentasikan target pemilik

tandatangan.

Page 7: LAPORAN_KOMVIS

Gambar 2. Arsitektur jaringan LVQ

Pada jaringan LVQ, pembelajaran atau pelatihan jaringan harus dilakukan terlebih dahulu.

Pembelajaran akan menyesuaikan bobot dengan pola-pola yang dipelajari dari data.

Algoritma pembelajaran LVQ dapat dilihat pada gambar berikut ini :

Input Bobot Jarak Output

Page 8: LAPORAN_KOMVIS

Gambar 3. Algoritma Pembelajran LVQ

Setelah pembelajaran selesai dijalankan, barulah pengujian bisa dilakukan. Pengujian

dilakukan dengan menghitung jarak antara input pengujian (citra pengujian yang telah

Page 9: LAPORAN_KOMVIS

diolah menjadi vector input) dengan bobot akhir dari masing-masing kelas (output)

pemilik tanda tangan. Kelas yang memiliki jarak terdekat dengan vektor input akan

menjadi pemenang.

Page 10: LAPORAN_KOMVIS

BAB III

IMPLEMENTASI DAN HASIL

A. Aplikasi Signature Recognition

Aplikasi yang dibuat ini terdapat beberapa button dan axes, yaitu button training, load

image, proses, clear dan exit. Sedangkan axisnya yaitu : axis_input dan axis_hasil. button

training, digunakan untuk mentraining image yg terdapat pada database. Dan Button load

image fungsinya untuk mengload gambar hasil scanning untuk di bandingkan apakah

gambar tanda tangan itu termasuk tanda tangan user yg ada di database. Button proses,

digunakan untuk membandingkan antara citra inputan dengan citra yg ada di database

dengan menggunakankan algoritma LVQ(learning Vector Quantization). Button clear,

fungsinya untuk me-reset semua variable dan value yg ada di matlab, sedangkan button

exit fungsinya untuk keluar dari aplikasi. Berikut ini adalah tampilan dari aplikasi

signature recognition :

Gambar interface aplikasi signature recognition

Pada button proses di klik, citra inputan akan di tranformasikan ke citra biner, dan

pembagian region serta pembentukan vector input, setelah dilakukan pendeteksian tepi

dengan operator Robert. Data yang telah disimpan, dapat digunakan dalam pelatihan

jaringan syaraf tiruan LVQ. Proses pelatihan diawali dengan tahap inisialisasi Setelah

tahap inisialisasi selesai, akan dijalankan prosedur pelatihan menggunakan data tanda

Page 11: LAPORAN_KOMVIS

tangan yang telah disimpan. Proses ini akan menghasilkan bobot akhir yang mewakili

masing-masing kelas pemilik tanda tangan.

Setelah didapat bobot akhir, dapat dilakukan proses pengujian. Ini dilakukan dengan

cara mengambil citra yang akan diujikan, mengolah citra tersebut hingga menjadi vektor

input pengujian. Kemudian jarak Euclidean antara vektor input tersebut dengan masing-

masing bobot kelas akan dihitung. Kelas yang memiliki jarak terkecil dengan vektor input

akan dipilih menjadi pemenang. Ini berarti tanda tangan yang diujikan dikenali sebagai

tanda tangan kelas pemenang. Gambar berikut ini menunjukkan tampilan setelah

pengujian :

Gambar Aplikasi setelah pengujian

B. Hasil Pengujian

Pengujian aplikasi ini dilakukan dengan menggunakan 8 citra tanda tangan dari 2 orang

saja, yaitu sigit setiawan dan putu adi sunarya. Tingkat ketepatan pengenalan tanda tangan

yang dilakukan aplikasi ini terhadap data yang diujikan adalah 50%.

Page 12: LAPORAN_KOMVIS

Lampiran

function varargout = signature_recognition(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @signature_recognition_OpeningFcn, ... 'gui_OutputFcn', @signature_recognition_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 signature_recognition is made visible.function signature_recognition_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject; % Update handles structureguidata(hObject, handles); function varargout = signature_recognition_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output; function edit1_Callback(hObject, eventdata, handles)

function edit1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');end % --- Executes on button press in Cari.function Cari_Callback(hObject, eventdata, handles)

function button_load_Callback(hObject, eventdata, handles)

global I;[filename, pathname] = uigetfile('*.jpg;*.png;*.bmp;', 'Pilih Citra..'); if (~filename) msgbox('Citra belum di pilih!!!', 'Peringatan', 'warn'); returnelse I = imread([pathname, filename]); set(handles.text_cari, 'String',[pathname]); %I = histeq(I); axes(handles.axes_input);

Page 13: LAPORAN_KOMVIS

imshow(I); set(handles.button_proses, 'Enable', 'on'); set(handles.button_clear, 'Enable', 'on'); handles.I = I; guidata(hObject, handles);end % --- Executes on button press in button_proses.function button_proses_Callback(hObject, eventdata, handles)

global Z;global c;global str;cd(strcat(str,num2str(c)));img = imread(strcat(num2str(Z),'.JPG'));cd ..% img = handles.I;if (isrgb(img)) Igray = rgb2gray(img);else Igray = img;end%Iedge = edge(uint8(Igray),'roberts',0.1);iresize = imresize(Igray, [272 340]);img = edge(iresize, 'roberts');iresize = imresize(img, [128 160]); x = reshape(transpose(iresize),1, []); global fold_count;global img_count;global weight;persistent info;sum = 0; for i=1:fold_count for k=1:20480 sum = sum + ( x(k) - weight(i, k) ).^2; end euclid_value(i) = sqrt(sum);endeuclid_value cd(strcat(str,num2str(c)));info = textread('info.txt', '%s', 'delimiter','\n'); cd .. set(handles.text_hasil, 'String', info{1});hold on; axes(handles.axes_hasil);imshow(iresize);guidata(hObject, handles); function edit2_Callback(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');end

Page 14: LAPORAN_KOMVIS

function text_cari_Callback(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');end function button_exit_Callback(hObject, eventdata, handles)

quit; % --- Executes on button press in button_clear.function button_clear_Callback(hObject, eventdata, handles)

axes(handles.axes_input);hold on;axes(handles.axes_hasil);hold off;set(handles.button_proses, 'Enable', 'off');set(handles.text_cari, 'String', ''); clear variables;clear global; function buttin_training_Callback(hObject, eventdata, handles)

global fold_count;fold_count = 2;global img_count;img_count = 4; % w=zeros(17, 17);vectors = zeros(fold_count * img_count, 20480);curr_row = 1;curr_col = 1; target = zeros(1, fold_count * img_count); %data acquisition n extractionglobal str;str = 'data';for i=1:fold_count cd(strcat(str,num2str(i))); for j=1:img_count x=imread(strcat(num2str(j),'.JPG')); if(isrgb(x)) imgGray = rgb2gray(x); else imgGray = x; end iresize = imresize(imgGray,[272 340]); %edge detection id = edge(iresize,'roberts'); img = imresize(id, [128 160]); vectors(curr_row, :) = reshape(transpose(img), 1, []); curr_row = curr_row + 1; end

Page 15: LAPORAN_KOMVIS

cd ..end

global weight;weight = zeros(fold_count, 20480);for i = 1:fold_count weight(i, :) = vectors((i-1)*4 + 1, :);end % --% Training database% --maxEpoh = fold_count * img_count;learn_rate = 0.05;error_rate = 0.01;dec_alpha = 0.1; s = zeros(1, fold_count);sum = 0;euclid_value = 0; [m, n] = size(vectors);maxEpoh = m;global c;global Z;for i = i:m for j=1:fold_count for k=1:n sum = sum + ( vectors(i, k) - weight(j, k) ).^2; end euclid_value(j) = sqrt(sum); end if (euclid_value(1) < euclid_value(2)) for k=1:n weight(1, k) = weight(1, k) + learn_rate * ( vectors(i, k) - weight(1, k) ); c = 1; Z = maxEpoh / j; end else for k=1:n weight(2, k) = weight(2, k) + learn_rate * ( vectors(i, k) - weight(2, k) ); c = 2; Z = maxEpoh / j; end endend global_weight = weight;