Ekstraksi Ciri Citra RGB


Berikut ini merupakan contoh pemrograman matlab untuk melakukan proses ekstraksi ciri dari citra rgb. Ciri yang diekstrak adalah berupa ciri statistik dan ciri bentuk. Pada contoh ini digunakan citra fish.jpg di mana foreground adalah berupa ikan sedangkan background adalah berupa air.

Langkah-langkah pemrogramannya adalah sebagai berikut:
1. Membaca dan menampilkan citra asli

clc;clear;close all;

Img = imread('fish.jpg');
figure, imshow(Img), title('original image');

sehingga diperoleh tampilan:

2. Melakukan segmentasi citra untuk memisahkan antara foreground dengan background menggunakan metode k-means clustering. Proses klustering dilakukan dengan cara mengkonversi ruang warna citra yang semula RGB menjadi ruang warna L*a*b. Selanjutnya komponen a dan b dari citra L*a*b digunakan sebagai nilai masukan dalam algoritma k-means.

2.1. Mengkonversi citra RGB menjadi L*a*b

% Color-Based Segmentation Using K-Means Clustering
cform = makecform('srgb2lab');
lab = applycform(Img,cform);
figure, imshow(lab), title('L*a*b color space');

Hasil konversi ruang warna citra RGB menjadi L*a*b

2.2. Melakukan segmentasi citra menggunakan algoritma k-means clustering

ab = double(lab(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);

nColors = 3;
[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...
                                      'Replicates',3);

pixel_labels = reshape(cluster_idx,nrows,ncols);
RGB = label2rgb(pixel_labels);
figure, imshow(RGB,[]), title('image labeled by cluster index');

Citra hasil segmentasi yaitu:

2.3. Menampilkan hasil segmentasi pada masing-masing kluster

segmented_images = cell(1,3);
rgb_label = repmat(pixel_labels,[1 1 3]);

for k = 1:nColors
    color = Img;
    color(rgb_label ~= k) = 0;
    segmented_images{k} = color;
end

figure,imshow(segmented_images{1}), title('objects in cluster 1');
figure,imshow(segmented_images{2}), title('objects in cluster 2');
figure,imshow(segmented_images{3}), title('objects in cluster 3');

Tampilan hasil segmentasi pada masing-masing kluster:

Kluster 1

Kluster 2

Kluster 3

3. Memilih kluster yang terdapat foreground (ikan). Pemilihan didasarkan pada kluster yang memiliki luasan objek paling kecil. Setelah diperoleh citra foreground saja, selanjutnya dilakukan operasi morfologi yaitu filling holes untuk menyempurnakan hasil segmentasi dan bwareaopen untuk menghilangkan noise.

% Fish segmentation
area_cluster1 = sum(find(pixel_labels==1));
area_cluster2 = sum(find(pixel_labels==2));
area_cluster3 = sum(find(pixel_labels==3));

[~,cluster_fish] = min([area_cluster1,area_cluster2,area_cluster3]);
fish_bw = (pixel_labels==cluster_fish);
fish_bw = imfill(fish_bw,'holes');
fish_bw = bwareaopen(fish_bw,1000);

fish = Img;
R = fish(:,:,1);
G = fish(:,:,2);
B = fish(:,:,3);
R(~fish_bw) = 0;
G(~fish_bw) = 0;
B(~fish_bw) = 0;
fish_rgb = cat(3,R,G,B);
figure, imshow(fish_rgb), title('the fish only (RGB Color Space)');

Citra ikan hasil segmentasi:

4. Menampilkan histogram citra ikan pada masing-masing kanal warna RGB

% RGB Features Extraction
R_stats = regionprops(fish_bw,R,'PixelValues','MeanIntensity',...
    'MaxIntensity','MinIntensity');
G_stats = regionprops(fish_bw,G,'PixelValues','MeanIntensity',...
    'MaxIntensity','MinIntensity');
B_stats = regionprops(fish_bw,B,'PixelValues','MeanIntensity',...
    'MaxIntensity','MinIntensity');

R_pix_val = R_stats.PixelValues;
G_pix_val = G_stats.PixelValues;
B_pix_val = B_stats.PixelValues;

figure,
histogram(R_pix_val,256,'FaceColor','r','EdgeColor','r')
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 15000])
grid on
title('Histogram of Red Channel')

figure,
histogram(G_pix_val,256,'FaceColor','g','EdgeColor','g')
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 15000])
grid on
title('Histogram of Green Channel')

figure,
histogram(B_pix_val,256,'FaceColor','b','EdgeColor','b')
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 15000])
grid on
title('Histogram of Blue Channel')

Tampilan histogram pada masing-masing kanal warna RGB

Red Channel
8

Green Channel
9

Blue Channel
10

5. Melakukan ekstraksi ciri citra ikan berdasarkan pada ciri statistik dan ciri bentuk. Ciri statistik yang digunakan adalah nilai mean, max, dan min dari intensitas warna citra RGB dan HSV. Sedangkan ciri bentuk yang digunakan adalah luas, keliling, dan eccentricity.

R_mean = R_stats.MeanIntensity;
G_mean = G_stats.MeanIntensity;
B_mean = B_stats.MeanIntensity;

R_max = R_stats.MaxIntensity;
G_max = G_stats.MaxIntensity;
B_max = B_stats.MaxIntensity;

R_min = R_stats.MinIntensity;
G_min = G_stats.MinIntensity;
B_min = B_stats.MinIntensity;

% HSV features extraction
fish = rgb2hsv(Img);
H = fish(:,:,1);
S = fish(:,:,2);
V = fish(:,:,3);
H(~fish_bw) = 0;
S(~fish_bw) = 0;
V(~fish_bw) = 0;
fish_hsv = cat(3,H,S,V);
figure, imshow(fish_hsv), title('the fish only (HSV Color Space)');

H_stats = regionprops(fish_bw,H,'PixelValues','MeanIntensity',...
    'MaxIntensity','MinIntensity');
S_stats = regionprops(fish_bw,S,'PixelValues','MeanIntensity',...
    'MaxIntensity','MinIntensity');
V_stats = regionprops(fish_bw,V,'PixelValues','MeanIntensity',...
    'MaxIntensity','MinIntensity');

H_mean = H_stats.MeanIntensity;
S_mean = S_stats.MeanIntensity;
V_mean = V_stats.MeanIntensity;

H_max = H_stats.MaxIntensity;
S_max = S_stats.MaxIntensity;
V_max = V_stats.MaxIntensity;

H_min = H_stats.MinIntensity;
S_min = S_stats.MinIntensity;
V_min = V_stats.MinIntensity;

% Shape features extraction
reg_stats = regionprops(fish_bw,'Area','Perimeter','Eccentricity');

area = reg_stats.Area;
perimeter = reg_stats.Perimeter;
eccentricity = reg_stats.Eccentricity;

6. Menampilkan hasil ekstraksi ciri citra pada command windows

% Print the features in the command window.
disp('>>> Features Extracted <<<')
disp('<1> Red Channel')
fprintf('Mean = %6.2f \n',R_mean);
fprintf('Max  = %6.0f \n',R_max);
fprintf('Min  = %6.0f \n',R_min);

disp('<2> Green Channel')
fprintf('Mean = %6.2f \n',G_mean);
fprintf('Max  = %6.0f \n',G_max);
fprintf('Min  = %6.0f \n',G_min);

disp('<3> Blue Channel')
fprintf('Mean = %6.2f \n',B_mean);
fprintf('Max  = %6.0f \n',B_max);
fprintf('Min  = %6.0f \n',B_min);

disp('<4> Hue Channel')
fprintf('Mean = %6.4f \n',H_mean);
fprintf('Max  = %6.4f \n',H_max);
fprintf('Min  = %6.4f \n',H_min);

disp('<5> Saturation Channel')
fprintf('Mean = %6.4f \n',S_mean);
fprintf('Max  = %6.4f \n',S_max);
fprintf('Min  = %6.4f \n',S_min);

disp('<6> Value Channel')
fprintf('Mean = %6.4f \n',V_mean);
fprintf('Max  = %6.4f \n',V_max);
fprintf('Min  = %6.4f \n',V_min);

disp('<7> Shape Measurements')
fprintf('Area          = %6.0f \n',area);
fprintf('Perimeter     = %6.2f \n',perimeter);
fprintf('Eccentricity  = %6.4f \n',eccentricity);

Hasil ekstraksi ciri adalah

Source code pada pemrograman matlab di atas dapat dijalankan minimal menggunakan matlab versi r2014b. Source code dan citra yang digunakan dapat diunduh melalui laman berikut ini: Source Code

Posted on November 1, 2016, in Pengenalan Matlab, Pengolahan Citra and tagged , , , , , , . Bookmark the permalink. 6 Comments.

  1. assalamualaikum mz saya mau nanya disini sya buat identifikasi jenis burung berdasarkan warna, setelah saya melakukan proses dri mencari nulai RGB dan HSV apakan sudah selesai untuk coding ektraksi ciri warnanya, atau masih ada lagi prosesnya..mohon minta bimbingannya mz atau amsukkannya mz…

    • Waalaikumsalam
      Ekstraksi ciri warna bisa dilakukan di antaranya melalui nilai RGB dan HSV
      Hanya saja idealnya segmentasi dilakukan per bagian tubuh burung karena warna pada masing2 bagian tidak sama

    • terimakasih mz adi masukannaya bang adi sangat bermanfaat. untuk alur pengerjakannya sesudah rgb, hsv, dan segmentasi …mohon masukkannya mz adi tentang alurnya….

    • sistem identifikasi jenis burung dapat dilakukan berdasarkan pada perbedaan warna, bentuk, dan ukuran masing2 jenis burung
      proses segmentasi warna per bagian tubuh burung dapat dilakukan dengan metode clustering contohnya menggunakan algoritma k-means ataupun fuzzy c-means sehingga diperoleh region pada masing2 bagian tubuh
      region pada masing2 bagian tsb kemudian diekstrak ciri warna, bentuk, dan ukurannya sehingga diperoleh matriks ciri yang dapat digunakan untuk membedakan jenis burung
      ciri warna dapat diekstrak menggunakan parameter nilai hsv maupun rgb
      ciri bentuk dapat diekstrak menggunakan parameter nilai metric dan eccentricity
      sedangkan ciri ukuran dapat diekstrak menggunakan parameter nilai luas dan keliling
      matriks ciri tsb selanjutnya digunakan sebagai masukan dalam algoritma klasifikasi citra contohnya menggunakan algoritma berbasis aturan seperti algoritma pohon keputusan/ decision tree

  2. Assalamualaikum..
    mas saya ingin memiliki tugas klasifikasi larva nyamuk dengan knn, saya menggunakan pola bentuk untuk mengenali nya tapi akurasinya hanya 60%. apakah ada pola pengenalan lainnya agar akurasinya bertambah?
    terimakasih, wassalam..

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: