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 , , , , , , , , . Bookmark the permalink. 16 Comments.

  1. Assalamu’alaikum mas adi, untuk chain code menggunakan SAD bagaimana ?

  2. terimakasih mas adi, saya tunggu pembahasan chain code menggunakan SAD nya mas…

  3. Delvina Dwiani Samjar

    ini multikelas svm yg mana ?
    1vs1, 1 vs all , atau apa ?

  4. Mas adi, ini bisa untuk klasifikasi 3 atribut ya?

  5. Mas adi ini bisa juga ya untuk klasifikasi 3 atribut

  6. 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});

  7. malam mas adi
    apakah ada chain code untuk jst?

  8. mas mau tanya, kalau untuk mendapatkan nilai chain code 8 arahnya gimana ya??

  9. mas mau tanya, kalau hasil Pengujian sistem pada data uji outputnya hammer semua itu gimana ya? train accuracy nya cuman 33.333

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: