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 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.

Citra dan source code pada pemrograman matlab di atas dapat diunduh pada halaman berikut ini: Source Code

Posted on July 2, 2017, in Pengenalan Matlab, Pengenalan Pola, Pengolahan Citra and tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 12 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

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 )

Google+ photo

You are commenting using your Google+ 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 )

w

Connecting to %s

%d bloggers like this: