Ekstraksi Ciri Citra Grayscale


Ekstraksi ciri merupakan tahapan yang sangat penting dalam pengenalan pola. Tahapan ini bertujuan untuk memperoleh informasi yang terkandung dalam suatu citra untuk kemudian dijadikan sebagai acuan untuk membedakan antara citra yang satu dengan citra yang lain.

Ekstraksi ciri dapat dilakukan setelah tahapan segmentasi citra (memisahkan antara objek dengan background) maupun tanpa segmentasi citra (objek adalah background dan background adalah objek).

Berikut ini merupakan contoh aplikasi pemrograman matlab untuk melakukan ekstraksi ciri citra grayscale baik yang didahului dengan tahapan segmentasi maupun tidak.

Langkah-langkah pemrogramannya yaitu:

A. Ekstraksi ciri didahului dengan segmentasi

1. Membaca dan menampilkan citra RGB asli

clc; clear; close all; warning off all;
I = imread('candy.png');
figure, imshow(I);

candy

2. Mengkonversi citra RGB menjadi citra Grayscale

I_Gray = rgb2gray(I);
figure, imshow(I);

Citra Grayscale

3. Melakukan thresholding terhadap citra Grayscale sehingga diperoleh citra biner hasil segmentasi

I_bw = im2bw(I_Gray,.88);
figure, imshow(I_bw);

Citra Biner

4. Melakukan komplemen citra agar objek berwarna putih (bernilai 1) dan background berwarna hitam (0)

I_bw = imcomplement(I_bw);
figure, imshow(I_bw);

Citra Komplemen

5. Melakukan operasi morfologi berupa filling holes untuk menyempurnakan hasil segmentasi

I_bw = imfill(I_bw,'holes');
figure, imshow(I_bw);

Citra Hasil Operasi Morfologi

6. Menampilkan citra Grayscale hasil segmentasi

I_Gray(~I_bw) = 0;
figure, imshow(I_Gray);

Citra Grayscale Hasil Segmentasi

7. Melakukan pelabelan terhadap masing-masing objek yang tersegmentasi, melakukan ekstraksi ciri berdasarkan parameter mean, max intensity, min intensity, standard deviation, dan variance, serta menampilkan hasil ekstraksi ciri pada masing-masing objek yang terlabeli

[L,num] = bwlabel(I_bw);

for n = 1:num
    bw = L==n;
    figure, imshow(bw);
    [a,b] = find(bw==1);
    gray_level = zeros(1,numel(a),1);

    for m = 1:numel(a)
        gray_level(m) = I_Gray(a(m),b(m));
    end

    mean_gray_level = mean(gray_level);
    max_gray_level = max(gray_level);
    min_gray_level = min(gray_level);
    std_gray_level = std(gray_level);
    var_gray_level = var(gray_level);

    [B,~] = bwboundaries(bw,'noholes');
    boundary = B{1};
    position = [boundary(1,2)+40,boundary(1,1)-50;boundary(1,2)+40,boundary(1,1)-25;...
        boundary(1,2)+40,boundary(1,1);boundary(1,2)+40,boundary(1,1)+25;...
        boundary(1,2)+40,boundary(1,1)+50;boundary(1,2)+40,boundary(1,1)+75];

    text_str = cell(6,1);
    text_str{1} = ['Label: ' num2str(n)];
    text_str{2} = ['Mean: ' num2str(mean_gray_level,'%0.2f')];
    text_str{3} = ['Max: ' num2str(max_gray_level)];
    text_str{4} = ['Min: ' num2str(min_gray_level)];
    text_str{5} = ['Std: ' num2str(std_gray_level,'%0.2f')];
    text_str{6} = ['Var: ' num2str(var_gray_level,'%0.2f')];

    I_Gray2 = I_Gray;
    I_Gray2(~bw) = 0;
    figure, imshow(I_Gray2);
    RGB = cat(3,I_Gray2,I_Gray2,I_Gray*0);
    RGB2 = insertText(RGB,position,text_str,'FontSize',16,'BoxOpacity',0.8,'TextColor','black');
    figure, imshow(RGB2);
end

Label 1

Citra Hasil Ekstraksi Ciri 1

Label 2

Citra Hasil Ekstraksi Ciri 2

Label 3

Citra Hasil Ekstraksi Ciri 3

Label 4

Citra Hasil Ekstraksi Ciri 4

Label 5

Citra Hasil Ekstraksi Ciri 5

Label 6

Citra Hasil Ekstraksi Ciri 6

B. Ekstraksi ciri tanpa didahului dengan segmentasi

1. Membaca dan menampilkan citra RGB asli

clc; clear; close all; warning off all;
I = imread('batik.jpg');
figure, imshow(I);

batik

2. Mengkonversi citra RGB menjadi citra grayscale

I_Gray = rgb2gray(I);
figure, imshow(I_Gray);

Citra Grayscale

3. Melakukan ekstraksi ciri berdasarkan parameter mean, max intensity, min intensity, standard deviation, dan variance, serta menampilkan hasilnya pada citra grayscale

mean_gray_level = mean2(I_Gray);
max_gray_level = max(max(I_Gray));
min_gray_level = min(min(I_Gray));
std_gray_level = std2(I_Gray);
var_gray_level = var(double(I_Gray(:)));

position = [10,10;10,60;10,110;10,160;10,210];

text_str = cell(5,1);
text_str{1} = ['Mean: ' num2str(mean_gray_level,'%0.2f')];
text_str{2} = ['Max: ' num2str(max_gray_level)];
text_str{3} = ['Min: ' num2str(min_gray_level)];
text_str{4} = ['Std: ' num2str(std_gray_level,'%0.2f')];
text_str{5} = ['Var: ' num2str(var_gray_level,'%0.2f')];

RGB = cat(3,I_Gray,I_Gray,I_Gray);
RGB2 = insertText(RGB,position,text_str,'FontSize',24,'BoxOpacity',0.8,'TextColor','black');
figure, imshow(RGB2);

Citra RGB hasil ekstraksi ciri

Ciri yang diekstrak dapat digunakan untuk tahapan selanjutnya yaitu tahapan pengenalan pola dengan mengembangkan berbagai macam algoritma.

File source code lengkap beserta citra pada pemrograman matlab di atas dapat diperoleh melalui halaman berikut ini: Source Code

Posted on July 2, 2017, in Pengenalan Matlab, Pengenalan Pola, Pengolahan Citra and tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 30 Comments.

  1. assalamaualaikum mas adi, mau tanya maksudnya script data_latih = zeros(6,total_images); itu untuk apa? karna saya nyoba ga sengaja terbalik jadi data_latih = zeros(total_images, 6); tetep ada hasilnya cuma ada perbedaan dikit sih
    hehe.

    • Waalaikumsalam azkya novia
      Dalam koding di atas tidak ada perintah yg novia maksud
      Mungkin bisa ditunjukkan lagi koding yg novia maksud ada pada materi yg mana

  2. ini materi mas adi yang identifikasi jenis bunga 100 itu. nah saya lagi mencoba mengartikan script baris perbaris :v dan blm paham mksd dr baris ini data_latih = zeros(6,total_images); hoho

    • Kalau arti dari perintah itu adalah
      Membuat matriks yang nilai nya nol semua
      Dengan ukuran 6 baris dan 100 kolom
      Karena kebetulan jumlah citra nya ada 100

      Kalau dibalik, maka ukuran matriks akan ada 100 baris dan 6 kolom

      Tetapi koding yg saya buat pada materi tsb sdh sesuai dg prosedur pemrograman jst di matlab utk ukuran matriks data latih
      Jumlah baris menyatakan banyaknya ciri masukan
      Sedangkan jumlah kolom menyatakan banyaknya citra masukan

    • Pada matriks yang nilai nya nol semua itu kemudian diisi nilai nya dg hasil ekstraksi ciri utk masing masing citra

  3. oke sip, paham skrg. oiya dipostingan ini kalimat terakhirnya “Ciri yang diekstrak dapat digunakan untuk tahapan selanjutnya yaitu tahapan pengenalan pola” bukankah mengekstrak ciri itu sama dengan pengenalan pola(tujuannyasama) ?

  4. hmmm oke-oke. saya kira jika udah nyoba, misal 100 gambar yg dicoba ternyata punya mean,stdDev,kurtosis yang masing2 gambar berbeda itu sudah cukup untuk menjadikan nilainya sebagai input untuk identifikasi, misalnya inputan untuk membuat matfile pada jst gitu(?).

    • Pada prinsipnya dalam ekstraksi ciri itu diharapkan ciri yg diekstrak mampu untuk membedakan antara objek yg satu dg objek yg lain
      Sedangkan pada objek yg sama diharapkan ciri tsb memiliki nilai yg tidak terlalu berbeda

  5. oke mas adi. terimakasih

  6. Assalamualaikum mas adi, saya ingin melakukan ekstraksi ciri citra satelit awan. Dalam satu citra tersebut terdapat 3 jenis awan yang berbeda yang saling berdekatan atau bisa juga saling bersinggungan. Mohon pencerahannya bagaimana caranya mengekstraksi 3 jenis awan tersebut yang terdapat dalam 1 frame citra?

    • Waalaikumsalam neneng
      Neneng bisa menggunakan segmentasi warna atau tekstur utk memisahkan antara awan yg satu dg yg lain
      Hasil dari proses segmentasi tsb adalah citra biner
      Jika hasil dari segmentasi masih bersinggungan maka neneng bisa menggunakan operasi morfologi thd citra biner agar dapat memisahkan antar awan

  7. setelah saya segmentasi, bagaimana cara nya mengekstrasksi satu persatu bagian awannya??

  8. jika saya ingin menerapkan ekstraksi features glcm bisa tidak? kemudian saya ingin menyimpan setiap hasil ekstraksi dalam bentuk m file,bagaimana ya?

  9. terimakasih mas adi, saya coba dulu

  10. Assalamualaikum mas, saya ingin bertanya lagi. Saya sudah melakukan segmentasi terhadap citra satelit yg saya olah dgn menggunakan multithresh. Kemudian saya gunakan label2rgb untuk merubah dan melihatnya kebentuk rgb. Saya ingin melakukan ekstraksi terhadap 3 bagian yg tersegment tersebut. Mohon bantuannya penulisan codingnya seperti apa ya?

    • Waalaikumsalam neneng
      ekstraksi ciri bisa dilakukan menggunakan berbagai macam metode
      di antaranya adalah metode ekstraksi ciri warna, tekstur, dan bentuk
      dalam website ini terdapat beberapa materi mengenai ekstraksi ciri tersebut yang bisa neneng pelajari

  11. saya mau mengekstraksi cirinya dengan metode glcm dan glcm membutuhkan citra grayscale. saya masih bingung mas coding untuk mendapatkan setiap bagian yg tersegment itu secara terpisah dan kembali kescala grayscale untuk dapat diekstraksi satu persatu.

  12. Assalammualaikum mastah, saya ingin bertanya apakah anda memiliki materi tentang cara kerja dari ektraksi fitur / ciri dengan metode BLOB?

  13. khoirul mustaqim

    assalamaualaikum mas adi, saya mau tanya, project saya pengenalan ciri pola text vocal dengan metode jaringan syaraf tiruan, apakah mass adi, bisa memberitahu tahapan apa saja, yang harus di lalui agar project itu bisa selesai, mohon bantuanya mass adi.
    terima kasih atas perhatian.

  14. Malam mas adi ..
    Mau tanya kalau pemrosesan citra ini di kombinasikan dengan algoritma c4.5 bisa ngak ya .?

  15. Malam mas adi ..
    Mau tanya kalau pemrosesan citra ini di kombinasikan dengan algoritma c4.5 bisa ngak ya .?
    Mohon bantuannya mas 🙏

  16. baik terimakasih

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: