Pengenalan Pola Bentuk Menggunakan Chain Code Dan Multi SVM
Ekstraksi ciri citra menggunakan chain code??
Sama halnya seperti moment invariants, chain code atau kode rantai merupakan salah satu algoritma ekstraksi ciri bentuk yang nilainya tidak berubah terhadap perlakuan rotasi, translasi, pencerminan, dan penskalaan. Pada metode ini dihasilkan delapan nilai yang menunjukkan arah piksel penyusun objek. Arah piksel dari chain code 8-connected ditunjukkan pada gambar di bawah ini.
Berikut ini merupakan contoh aplikasi pemrograman matlab mengenai pengenalan pola bentuk menggunakan algoritma chain code pada ekstraksi ciri dan algoritma multi SVM (Support Vector Machine) pada identifikasi. Citra yang digunakan terdiri dari tiga jenis bentuk objek yaitu botol (bottle), garpu (fork), dan palu (hammer). Pada data latih digunakan 15 citra pada masing-masing bentuk objek sehingga jumlah total data latih adalah 45 citra. Sedangkan pada data uji digunakan 5 citra pada masing-masing bentuk objek sehingga jumlah total data uji adalah 15 citra (sumber dataset citra: http://www.dabi.temple.edu/~shape/MPEG7/dataset.html)
Beberapa citra pada data latih ditunjukkan pada gambar berikut ini:
Langkah-langkah pemrogramannya adalah:
1. Pelatihan sistem dengan tahapan ekstraksi ciri menggunakan algoritma chain code dan identifikasi dengan algoritma multi SVM
clc; clear; close all; image_folder = 'data latih'; filenames = dir(fullfile(image_folder, '*.gif')); total_images = numel(filenames); chain_code = zeros(total_images,8); for n = 1:total_images full_name = fullfile(image_folder, filenames(n).name); img = logical(imread(full_name)); bw = bwperim(img,8); bw = bwareaopen(bw,100); B = bwboundaries(bw,'noholes'); CC = cell(1,length(B)); for k = 1:length(B) CC{k} = chaincode(B{k}); end chain_code(n,1) = sum(CC{1,1}.code==0); chain_code(n,2) = sum(CC{1,1}.code==1); chain_code(n,3) = sum(CC{1,1}.code==2); chain_code(n,4) = sum(CC{1,1}.code==3); chain_code(n,5) = sum(CC{1,1}.code==4); chain_code(n,6) = sum(CC{1,1}.code==5); chain_code(n,7) = sum(CC{1,1}.code==6); chain_code(n,8) = sum(CC{1,1}.code==7); end target = zeros(1,total_images); target(1:15) = 1; % bottle target(16:30) = 2; % fork target(31:45) = 3; % hammer [out] = multisvm(chain_code,target,chain_code); [a,~] = find(out'==target); train_accuracy = sum(a)/total_images*100 data_latih = chain_code; target_latih = target; save('hasil_pelatihan','data_latih','target_latih')
Akurasi pelatihan yang dihasilkan adalah sebesar 97.7778%
2. Pengujian sistem terhadap data uji
clc; clear; close all; image_folder = 'data uji'; filenames = dir(fullfile(image_folder, '*.gif')); total_images = numel(filenames); chain_code = zeros(total_images,8); for n = 1:total_images full_name = fullfile(image_folder, filenames(n).name); img = logical(imread(full_name)); bw = bwperim(img,8); bw = bwareaopen(bw,100); B = bwboundaries(bw,'noholes'); CC = cell(1,length(B)); for k = 1:length(B) CC{k} = chaincode(B{k}); end chain_code(n,1) = sum(CC{1,1}.code==0); chain_code(n,2) = sum(CC{1,1}.code==1); chain_code(n,3) = sum(CC{1,1}.code==2); chain_code(n,4) = sum(CC{1,1}.code==3); chain_code(n,5) = sum(CC{1,1}.code==4); chain_code(n,6) = sum(CC{1,1}.code==5); chain_code(n,7) = sum(CC{1,1}.code==6); chain_code(n,8) = sum(CC{1,1}.code==7); end load hasil_pelatihan [out] = multisvm(data_latih,target_latih,chain_code); target = zeros(1,total_images); target(1:5) = 1; % bottle target(6:10) = 2; % fork target(11:15) = 3; % hammer [a,~] = find(out'==target); test_accuracy = sum(a)/total_images*100
Akurasi pengujian yang dihasilkan adalah sebesar 100%
3. Memvisualisasikan proses pengenalan bentuk objek
clc; clear; close all; full_name = 'data uji\fork-18.gif'; img = logical(imread(full_name)); bw = bwperim(img,8); bw = bwareaopen(bw,100); B = bwboundaries(bw,'noholes'); CC = cell(1,length(B)); for k = 1:length(B) CC{k} = chaincode(B{k}); end chain_code(1,1) = sum(CC{1,1}.code==0); chain_code(1,2) = sum(CC{1,1}.code==1); chain_code(1,3) = sum(CC{1,1}.code==2); chain_code(1,4) = sum(CC{1,1}.code==3); chain_code(1,5) = sum(CC{1,1}.code==4); chain_code(1,6) = sum(CC{1,1}.code==5); chain_code(1,7) = sum(CC{1,1}.code==6); chain_code(1,8) = sum(CC{1,1}.code==7); load hasil_pelatihan [out] = multisvm(data_latih,target_latih,chain_code); switch out case 1 class_out = 'bottle'; case 2 class_out = 'fork'; case 3 class_out = 'hammer'; end figure, imshow(img); title(['Result -> ',class_out])
Contoh hasil pengenalan yang benar
Contoh hasil pengenalan yang salah
Contoh pengolahan citra di atas bertujuan untuk mengenali pola bentuk pada objek. Metode pengolahan citra yang diterapkan menunjukkan tingkat akurasi yang baik. Dengan didasari oleh teori pengolahan citra yang ada, kita dapat mengembangkan metode-metode tersebut sehingga diperoleh tingkat akurasi pengenalan yang lebih baik lagi.
File source code lengkap beserta citra pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code
Posted on August 15, 2018, in Pengenalan Pola, Pengolahan Citra and tagged chain code matlab code, contoh program matlab chain code, contoh program matlab multi svm, multisvm matlab code, pengenalan bentuk matlab, pengolahan citra menggunakan chain code, pengolahan citra menggunakan multi svm, source code matlab multi svm, source code matlan chain code. Bookmark the permalink. 16 Comments.
Assalamu’alaikum mas adi, untuk chain code menggunakan SAD bagaimana ?
Waalaikumsalam
Semoga ke depan terdapat materi mengenai chain code menggunakan SAD
terimakasih mas adi, saya tunggu pembahasan chain code menggunakan SAD nya mas…
Baik aldi kurniawan
ini multikelas svm yg mana ?
1vs1, 1 vs all , atau apa ?
Mas adi, ini bisa untuk klasifikasi 3 atribut ya?
Bisa untuk klasifikasi 3 atribut
Mas adi ini bisa juga ya untuk klasifikasi 3 atribut
mas adi izin bertanya. muncul eror begitu. ada solusi kah? terimakasih
Undefined function or variable ‘chaincode’.
Error in pelatihan (line 17)
CC{k} = chaincode(B{k});
Source code lengkap bisa dibeli di tokopedia sehingga tidak muncul error
Bisa langsung dijalankan dan dikembangkan
malam mas adi
apakah ada chain code untuk jst?
Bisa langsung digabungkan dg jst, prinsipnya sama saja
mas mau tanya, kalau untuk mendapatkan nilai chain code 8 arahnya gimana ya??
pada materi di atas nilai chain code dihitung menggunakan 8 arah
mas mau tanya, kalau hasil Pengujian sistem pada data uji outputnya hammer semua itu gimana ya? train accuracy nya cuman 33.333
bisa dipelajari lagi koding nya supaya dihasilkan akurasi yang lebih baik