LAPORAN_KOMVIS
-
Upload
sigit-setiawan -
Category
Documents
-
view
61 -
download
0
Transcript of 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
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
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.
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:
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
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.
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
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
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.
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
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%.
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);
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
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
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;