Ekstraksi Ciri Citra


Ekstraksi ciri citra merupakan tahapan mengekstrak ciri/informasi dari objek di dalam citra yang ingin dikenali/dibedakan dengan objek lainnya.

Ciri yang telah diekstrak kemudian digunakan sebagai parameter/nilai masukan untuk membedakan antara objek satu dengan lainnya pada tahapan identifikasi/ klasifikasi.

Ciri yang umumnya diekstrak antara lain:

1. Bentuk
Untuk membedakan bentuk objek satu dengan objek lainnya, dapat menggunakan parameter yang disebut dengan ‘eccentricity’. Eccentricity merupakan nilai perbandingan antara jarak foci ellips minor dengan foci ellips mayor suatu objek. Eccentricity memiliki rentang nilai antara 0 hingga 1. Objek yang berbentuk memanjang/mendekati bentuk garis lurus, nilai eccentricitynya mendekati angka 1, sedangkan objek yang berbentuk bulat/lingkaran, nilai eccentricitynya mendekati angka 0. Penghitungan eccentricity diilustrasikan pada gambar di bawah ini:

Ellipse_Eccentricity_equationParameter lainnya yang dapat digunakan untuk membedakan bentuk suatu objek yaitu ‘metric’. Metric merupakan nilai perbandingan antara luas  dan keliling objek. Metric memiliki rentang nilai antara 0 hingga 1. Objek yang berbentuk memanjang/mendekati bentuk garis lurus, nilai metricnya mendekati angka 0, sedangkan objek yang berbentuk bulat/lingkaran, nilai metricnya mendekati angka 1. Penghitungan metric diilustrasikan pada gambar di bawah ini:

Metric_equation

2. Ukuran
Untuk membedakan ukuran objek satu dengan objek lainnya dapat menggunakan parameter luas dan keliling. Luas merupakan banyaknya piksel yang menyusun suatu objek. Sedangkan keliling merupakan banyaknya piksel yang mengelilingi suatu objek. Materi mengenai pemrograman matlab untuk menghitung luas dan keliling suatu objek dapat dilihat pada laman berikut: link

maths-sizes-s_m_l-apple-pi

3. Geometri
Ciri geometri merupakan ciri yang didasarkan pada hubungan antara dua buah titik, garis, atau bidang dalam citra digital. Ciri geometri di antaranya adalah jarak dan sudut. Jarak antara dua buah titik (dengan satuan piksel) dapat ditentukan menggunakan persamaan euclidean, minkowski, manhattan, dll. Jarak dengan satuan piksel tersebut dapat dikonversi menjadi satuan panjang seperti milimeter, centimeter, meter, dll dengan cara membaginya dengan resolusi spasial (materi mengenai perhitungan jarak dapat dilihat pada : link). Sedangkan sudut antara dua buah garis dapat ditentukan dengan perhitungan trigonometri maupun dengan analisis vektor.

geometry-001

4. Tekstur
Untuk membedakan tekstur objek satu dengan objek lainnya dapat menggunakan ciri statistik orde pertama atau ciri statistik orde dua. Ciri orde pertama didasarkan pada karakteristik histogram citra. Ciri orde pertama umumnya digunakan untuk membedakan tekstur makrostruktur (perulangan pola lokal secara periodik). Ciri orde pertama antara lain: mean, variance, skewness, kurtosis, dan entropy. Sedangkan ciri orde dua didasarkan pada probabilitas hubungan ketetanggaan antara dua piksel pada jarak dan orientasi sudut tertentu. Ciri orde dua umumnya digunakan untuk membedakan tekstur mikrostruktur (pola lokal dan perulangan tidak begitu jelas). Ciri orde dua antara lain: Angular Second Moment, Contrast, Correlation, Variance, Inverse Different Moment, dan Entropy.
Analisis tekstur juga dapat dilakukan dalam domain frekuensi antara lain menggunakan filter bank gabor.

texture

5. Warna
Untuk membedakan suatu objek dengan warna tertentu dapat menggunakan nilai hue yang merupakan representasi dari cahaya tampak (merah, jingga, kuning, hijau, biru, ungu). Nilai hue dapat dikombinasikan dengan nilai saturation dan value yang merupakan tingkat kecerahan suatu warna. Untuk mendapatkan ketiga nilai tersebut, perlu dilakukan konversi ruang warna citra yang semula RGB (Red, Green, Blue) menjadi HSV (Hue, Saturation, Value) melalui persamaan berikut:

R‘ = R/255
G‘ = G/255
B‘ = B/255

Cmax = max(R‘, G‘, B‘)
Cmin = min(R‘, G‘, B‘)
Δ = CmaxCmin

 Perhitungan nilai Hue:

Perhitungan nilai Saturation:

Perhitungan nilai Value:

V = Cmax

sehingga ruang warna citra yang semula berbentuk kubus berubah bentuk menjadi kerucut

rgb colorspace

rgb colorspace

hsv colorspace

hsv colorspace

 

 

 

 

 

 

 

 

 

Ekstraksi ciri citra merupakan tahapan penting dalam bidang computer vision (pengolahan citra dan pengenalan pola).

Beberapa hal yang perlu diperhatikan dalam memilih ciri yang tepat yang akan digunakan sebagai masukan pada tahapan klasifikasi citra antara lain:
1. Secara visual (penglihatan manusia), ciri apakah yang membedakan antara kelas satu dengan kelas lainnya?
2. Domain apakah yang akan kita gunakan untuk mengekstrak ciri tersebut? (domain spasial atau domain frekuensi?)
3. Parameter apa sajakah yang akan dipilih untuk mewakili ciri tersebut?
4. Berapa jumlah parameter yang akan kita gunakan?
5. Ciri lain apakah yang memungkinkan untuk kita kombinasikan?

Contoh kasus:

Apabila kita ingin merancang sebuah sistem pengenalan wajah (face recognition) manusia, maka muncul pertanyaan “Ciri apakah yang membedakan antara wajah satu dengan wajah yang lain?”.

Tidak mungkin apabila ciri yang kita gunakan adalah jumlah mata, jumlah telinga, maupun jumlah hidung karena antara wajah satu dengan yang lain jumlah organ-organ tersebut adalah sama.

Oleh karena itu, ciri yang memungkinkan antara lain warna kulit, tekstur wajah, geometri wajah (jarak antara mata kiri dengan mata kanan, jarak antara mata kanan/kiri dengan hidung, jarak antara mata kanan/kiri dengan mulut, jarak antara hidung dengan mulut, dsb).

Kita dapat memilih salah satu ataupun mengkombinasikan ciri-ciri tersebut. Proses pengenalan wajah yang baik adalah proses pengenalan yang menghasilkan akurasi yang tinggi dengan jumlah ciri seminimal mungkin agar dapat menghemat proses komputasi.

Pemilihan ciri terbaik dengan jumlah seminimal mungkin dapat dilakukan pada tahapan feature selection dengan menggunakan beberapa algoritma dalam machine learning dan data mining.

Save

  1. assalamualaikum mas
    selamat pagy ..
    siska mau tanya lg tentang coding dimatlab..
    ketika sya memasukan coding untuk mengetahui dari hasil pengujian namun muncul error sperti dibawah ini :
    ??? Index exceeds matrix dimensions.

    Error in ==> ED at 38
    im_test = gbr(:,:,2);
    muncul coding sperti diatas kira” bagaimana ea mas???
    mohon pencerahannya..
    terima kasih

  2. assalamualaikum wr wb
    mas mau tanya kalo mau cari bobot nilai berdasarkan warna pada gambar buat nentuin objek itu matang atau tidak, itu harus melalui proses gimana dulu mas makasih

  3. assalamualaiakum wr.wb
    selamat siang mas..
    sisca mau tanya lg dalam proses pencocokan pola dalam citra wajah yang saya teliti hanya keluar 4 citra wajah dari 30 data yang diambil sedangkan sisa 26 citra wajah tidak dapat dikenali, itu kenapa mas???
    mohon pencerahannya..
    sekian terima kasih..

    • waalaikumsalam siska
      akurasi yg rendah dalam sistem pengenalan wajah, bisa disebabkan oleh banyak faktor di antaranya
      1. proses segmentasi/deteksi wajah yang belum baik
      2. metode ekstraksi ciri yang digunakan belum bisa membedakan antara wajah satu dengan yang lain
      3. algoritma klasifikasi yang digunakan belum bisa mengelompokkan wajah antar kelas dengan baik
      bisa dicek kembali metode untuk masing-masing proses tersebut

  4. assalamualaikum mwr.wb
    selamat siang mas..
    siska mw tanya adakah soure code untuk mencocokan hasil pengujian atau pencocokan pola yang masih random???
    mohon pencerahannya???
    terima kasih mas..

  5. assalamualaikum wr.wb mas
    saya mw bertanya tenteng coding dbawah ini yg saya inputkan dprogram saya.
    source code codingx seperti dbawa ini:

    function [ output_args ] = ED( input_args )

    clc
    clear all
    close all
    load Eigenface_data.mat
    jum_data_test = 24;
    baris = 96;
    kolom = 100;
    im_gray_buff = [];
    for i=1:jum_data_test
    link_im = [‘Datauji\’,num2str(i),’.jpg’];
    gbr = imread(link_im);
    red=gbr(:,:,1);
    green=gbr(:,:,2);
    blue=gbr(:,:,3);
    gray=0.5*red+0.3*green+0.2*blue;
    Y=0.59*red+0.31*green+0.1*blue;
    Cr=0.713*(red-Y);
    Cb=0.564*(blue-Y);
    uk=size(Y);
    temp=zeros(uk(1),uk(2));
    for j=1:uk(1)
    for k=1:uk(2)
    if (Y(j,k)>16)&&(Y(j,k)>(1*Cr(j,k)))&&(Cr(j,k)>10)

    temp(j,k)=1;
    end
    end
    end
    im_temp=gbr;
    %if numel(ukuran_gbr)>2
    %im_gbr = imread(link_im);
    %im_gray_buff = im_rgb(:,:,2);
    %display(‘kentang’);
    %else
    %im_rgb = imread(link_im);
    %im_test = gbr(:,:,2);
    im_gray = imresize(im_temp, [baris kolom]);
    im_vector_test = double(reshape(im_gray,[],1));

    A_test = im_vector_test – m;
    im_proyeksi_test = Eigenface’ * A_test;

    for j=1:jum_data
    Euc_distance(:,j) = norm( im_proyeksi_test – im_proyeksi_latih(:,j) );
    end
    [Euc_dist_min , Recognized_index] = min(Euc_distance);
    switch Recognized_index
    case {1}
    label = [‘edi depan’];
    case {2}
    label = [‘edi kanan’];
    case {3}
    label = [‘edi kiri’];
    case {4}
    label = [‘sevi depan’];
    case {5}
    label = [‘sevi kanan’];
    case {6}
    label = [‘sevi kiri’];
    case {7}
    label = [‘salman depan’];
    case {8}
    label = [‘salman kanan’];
    case {9}
    label = [‘salman kiri’];
    case {10}
    label = [‘zen depan’];
    case {11}
    label = [‘zen kanan’];
    case {12}
    label = [‘zen kiri’];
    case {13}
    label = [‘yodi depan’];
    case {14}
    label = [‘yodi kanan’];
    case {15}
    label = [‘yodi kiri’];
    case {16}
    label = [‘gores depan’];
    case {17}
    label = [‘gores kanan’];
    case {18}
    label = [‘gores kiri’];
    case {19}
    label = [‘doni depan’];
    case {20}
    label = [‘doni kanan’];
    case {21}
    label = [‘doni kiri’];
    case {22}
    label = [‘faqih depan’];
    case {23}
    label = [‘faqih kanan’];
    case {24}
    label = [‘faqih kiri’];
    % case {11,12,13,14,15,16,17,18,19,20}
    % label = [‘bona’];
    otherwise
    %label = [num2str(Recognized_index)];
    label = [‘tidak dikenal’];
    end
    % xlabel(label);
    display (label);
    end
    end

    masalah yg saya alami skrng jumlah data yg saya inputkan tdk sama dengan data hasil outputx, hasil keluarannya malah berkurang dengan jumlah data yang di inputkan sebelumnya,
    bagaimana mas, mohon pencerahanya??

  6. maksud sya coding dbwah ini mas bkan coding diatas
    function [ output_args ] = Untitled2( input_args )

    clc
    clear all
    close all
    %buat data base image training
    jum_data = 168;
    baris = 96;
    kolom = 100;
    im_gray_buff = [];
    for i=1:jum_data
    link_im = [‘TrainDatabase\’,num2str(i),’.jpg’];
    gbr = imread(link_im);
    red=gbr(:,:,1);
    green=gbr(:,:,2);
    blue=gbr(:,:,3);
    gray=0.5*red+0.3*green+0.2*blue;
    Y=0.59*red+0.31*green+0.1*blue;
    Cr=0.713*(red-Y);
    Cb=0.564*(blue-Y);
    uk=size(Y);
    temp=zeros(uk(1),uk(2));
    for j=1:uk(1)
    for k=1:uk(2)
    if (Y(j,k)>16)&&(Y(j,k)>(1*Cr(j,k)))&&(Cr(j,k)>10)

    temp(j,k)=1;
    end
    end
    end
    im_temp=gbr;

    im_gray = imresize(im_temp,[baris kolom]);
    im_vector_latih(:,i) = double(reshape(im_gray,[],1));
    end
    m = mean(im_vector_latih,2);
    for i=1:jum_data
    A(:,i) = im_vector_latih(:,i) – m;
    end
    L = A’*A;
    [V D] = eig(L);
    L_eigen_vector = [];
    for i = 1 : size(V,2)
    if( D(i,i)>1 )
    L_eigen_vector = [L_eigen_vector V(:,i)];
    end
    end
    Eigenface = A * L_eigen_vector;
    for i=1:jum_data
    im_proyeksi_latih(:,i) = Eigenface’*A(:,i);
    end
    save Eigenface_data.mat Eigenface A m jum_data baris kolom im_proyeksi_latih

    masalah yg saya alami skrng jumlah data yg saya inputkan tdk sama dengan data hasil outputx, hasil keluarannya malah berkurang dengan jumlah data yang di inputkan sebelumnya,
    bagaimana mas, mohon pencerahanya??

  7. mohon maap sebelumx mas..
    maksud sya bukan coding seperti diatas tapi coding seperti dibawah ini:
    function [ output_args ] = Untitled2( input_args )

    clc
    clear all
    close all
    %buat data base image training
    jum_data = 168;
    baris = 96;
    kolom = 100;
    im_gray_buff = [];
    for i=1:jum_data
    link_im = [‘TrainDatabase\’,num2str(i),’.jpg’];
    gbr = imread(link_im);
    red=gbr(:,:,1);
    green=gbr(:,:,2);
    blue=gbr(:,:,3);
    gray=0.5*red+0.3*green+0.2*blue;
    Y=0.59*red+0.31*green+0.1*blue;
    Cr=0.713*(red-Y);
    Cb=0.564*(blue-Y);
    uk=size(Y);
    temp=zeros(uk(1),uk(2));
    for j=1:uk(1)
    for k=1:uk(2)
    if (Y(j,k)>16)&&(Y(j,k)>(1*Cr(j,k)))&&(Cr(j,k)>10)

    temp(j,k)=1;
    end
    end
    end
    im_temp=gbr;

    im_gray = imresize(im_temp,[baris kolom]);
    im_vector_latih(:,i) = double(reshape(im_gray,[],1));
    end
    m = mean(im_vector_latih,2);
    for i=1:jum_data
    A(:,i) = im_vector_latih(:,i) – m;
    end
    L = A’*A;
    [V D] = eig(L);
    L_eigen_vector = [];
    for i = 1 : size(V,2)
    if( D(i,i)>1 )
    L_eigen_vector = [L_eigen_vector V(:,i)];
    end
    end
    Eigenface = A * L_eigen_vector;
    for i=1:jum_data
    im_proyeksi_latih(:,i) = Eigenface’*A(:,i);
    end
    save Eigenface_data.mat Eigenface A m jum_data baris kolom im_proyeksi_latih

    masalah yg saya alami skrng jumlah data yg saya inputkan tdk sama dengan data hasil outputx, hasil keluarannya malah berkurang dengan jumlah data yang di inputkan sebelumnya,
    bagaimana mas, mohon pencerahanya??

  8. Assalamu’alaikum mas,
    saya mau tanya tentang masalah dari program yang telah di eksekusi itu hasilnya “NaN”, kesalahan biasanya terjadi pada code atau variabelnya?
    trimakasih..

    • Waalaikumsalam Ela
      NaN adalah kependekan dari not a number
      biasanya NaN merupakan hasil dari pecahan yang penyebutnya bernilai nol
      bisa dicek kembali implementasi persamaan yang digunakan

  9. assalamu’alaikum mas
    saya mw tanya tentang rumus pre emphasis x(n)=x'(n)-a.x(n-1)
    untuk mencari nilai x(n-1) pada code ini yg mana mas
    code: y=filter((1,-a)1,x);
    itu merupakan code dari pre emphasis

  10. assalamu’alaikum mas
    saya mw tanya cara me-resize panjang sinyal

  11. waalaikumsalam ela
    sinyal dapat diubah panjangnya dengan cara melakukan dekomposisi
    proses tsb salah satunya bisa dilakukan melalui transformasi wavelet

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s

%d bloggers like this: