Ekstraksi Ciri Citra RGB
Berikut ini merupakan contoh aplikasi 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:
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(sum(pixel_labels==1)); area_cluster2 = sum(sum(pixel_labels==2)); area_cluster3 = sum(sum(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
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. File source code lengkap beserta citra pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code
Posted on November 1, 2016, in Pengenalan Matlab, Pengolahan Citra and tagged algoritma kmeans clustering, aplikasi pengolahan citra dengan matlab, aplikasi pengolahan citra digital menggunakan matlab, cara membuat aplikasi matlab sederhana, ciri rgb dan hsv, citra grayscale, citra RGB, contoh aplikasi pengolahan citra digital menggunakan matlab, contoh program matlab pengolahan citra, ekstraksi ciri citra, ekstraksi fitur citra, pemrograman matlab, Pengolahan Citra Digital, pengolahan citra digital menggunakan matlab, segmentasi citra, segmentasi citra dengan matlab, source code matlab pengolahan citra, tutorial matlab untuk pengolahan citra. Bookmark the permalink. 76 Comments.
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
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..
Waalaikumsalam pradita
banyak faktor yang mempengaruhi tingkat akurasi sistem pengenalan tersebut di antaranya dalam proses akuisisi citra, perbaikan kualitas citra, segmentasi citra, ekstraksi ciri citra, dan klasifikasi citra
materi lebih lanjut dapat dilihat pada laman berikut ini https://pemrogramanmatlab.com/pengenalan-pola-citra-digital-menggunakan-matlab/
Assalamualaikum..
mas saya ingin bertanya… saya Riventus dari mahasiswa UNDIP jurusan Teknik Mesin S1.
saya ingin tau pada histogram, sumbu x dan Y itu mewakili apa? Bisa tolong dijelaskan sedikit mengenai hal tersebut mas…
sebelumnya terimakasih.
Apakah ada kontak line atau Whats app atau media social lain untuk bertanya lebih lanjut…
sebab saya sedang mengerjakan Tugas Akhir mas… ?
best regard,
Riventus
line: riventus
email: ventusmn@gmail.com
waalaikumsalam riventus
penjelasan mengenai histogram bisa dilihat pada materi di halaman berikut ini
https://pemrogramanmatlab.com/pengolahan-citra-digital/histogram-citra-digital/
kontak whatsapp saya 085712104718
terimakasih bnyak mas…. atas infonya…
sama sama riventus
assalamualaikum mas, untuk cara memilih foregrundnya gimana ya?kalo saya mau ganti foregroundnya bukan gambar ikan bisa ga?maaf mas masih newbie
Bisa menggunakan foreground yg lain rizky
berarti untuk codingnya yang dirubah yang mananya ya mas?sama saya ada satu pertanyaan lagi,untuk code menentukan standard deviasi sama skewness dari histogram bagaimana ya mas?terima kasih mas atas jawabannya
citra masukan bisa diganti dan jumlah kluster bisa disesuaikan dengan keinginan
yang diganti apakah dibagian ini mas? —> [~,cluster_fish] = min([area_cluster1,area_cluster2,area_cluster3]); , sama kira kira untuk menentukan skewness dari histogram codingnya seperti apa ya mas?
assalamualaikum mas,saya ada pertanyaan,ini saya masih newbie banget mas dan tugas akhir saya mengenai ekstraksi ciri citra.Pertanyaan saya apakah bisa metode ini diaplikasikan untuk ektraksi ciri dari foto termal?
Waalaikumsalam dani
Bisa dani, bisa diaplikasikan utk citra termal
Prinsipnya sama saja
oke terimakasih mas,satu lagi ini saya ada pertanyaan,kalo saya ingin buat histogram dari gray image dari foregroundnya gimana ya mas?
materi mengenai histogram citra dapat dilihat pada halaman berikut ini
https://pemrogramanmatlab.com/pengolahan-citra-digital/histogram-citra-digital/
mas tujuan koversi dari rgb ke lab itu buat apa ya?sebelumnya terima kasih mas artikelnya sangat membantu
Sama sama ikhsan
Tujuan mengkonversi ruang warna citra rgb menjadi lab adalah agar warna objek yg ingin disegmentasi lebih jelas untuk direpresentasikan
mas itu luas area yang dihitung merupakan luas area foreground kah?
iya betul yang dihitung adalah luas foreground
Assalaamu’alaikum mas,saya mau nanya, kenapa source code k-means clustering ini tdk bisa dirunning pada matlab 2013 ke bawah mas, saya coba dg matlab 2015 bisa,,tp kenapa 2013 tidam bisa mas?. Mohon bantuannya mas
Waalaikumsalam Melia
Hal tsb dikarenakan terdapat fungsi histogram yang baru dirilis oleh Matlab sejak tahun 2015
Terima kasih mas, tapi saya jadi bingung apa hubungan k-means dengan histogramnya mas?
Dalam algoritma k-means memang tidak dilakukan analisis histogram
Tetapi dalam materi yg saya tulis di atas, algoritma k-means digunakan utk melakukan segmentasi, sedangkan analisis histogram digunakan utk melakukan ekstraksi ciri
jadi, kenapa saat di running dengan MATLAB 2013 , selalu error dalam empty cluster mas?
salahnya disini mas :
[cluster_idx, cluster_center] = kmeans(ab,nColors,’distance’,’sqEuclidean’, …
‘Replicates’,3);
selalu ada empty cluster kalau dengan matlab 2013 mas, sedangkan dengan matlab 2015 tidak masalah?
mohon maaf mas, saya banyak nanya, saya masih baru dalam pengolahan citra dengan matlab mas. terima kasih mas
Pada komputer saya, koding tsb dapat dijalankan dg baik, baik menggunakan matlab 2013 maupun 2015
Assalaamu’alaikum mas adi, mau tanya mas
RGB = cat(3,R,G,B);
[row,col] = find(mask==1);
h_RGB = imcrop(RGB,[min(col) min(row) max(col)-min(col) max(row)-min(row)]);
penjelasan koding cropping di atas ini gimana ya mas, mohon bantuannya mas adi
terima kasih
waalaikumsalam wahyu
koding tsb digunakan utk melakukan cropping region hanya pada foreground
oh jdi gini ya mas adi, seandainya jika saya lakukan cropping circle dengan ukuran cropping 300 x 300 pada sebuah citra katakanlah 500 x 500 dan saya ubah backgroundnya jadi hijau, apakah background juga akan ikut ter ekstraksi jika saya lakukan ekstraksi rgb mas, mohon bantuannya
Sesuai dg penjelasan saya sebelumnya, koding tsb digunakan utk melakukan cropping region hanya pada foreground saja
Artinya tidak ada background yg tersegmentasi maupun terekstraksi ciri nya
Oh oke” mas adi, makasih banyak yah untuk penjelasannya
wassalamu’alaikum
Oke wahyu sama sama
mas kira2 mas bisa jasa buatkan program matlab tidak?kalo bisa biayanya berapa ya mas?
assalamualaikum
mas mau tanya apa maksud dari kodingan berikut :
ab = double(lab(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
terima kasih wassalamualaikum
Waalaikumsalam intan
Koding tsb digunakan utk mengekstrak komponen a dan b dari citra l*a*b, kemudian menjadikan kedua nilai tsb mjd matriks dg 2 kolom
Di mana kolom pertama berisi komponen a
Kolom kedua berisi komponen b
Assalaamu’alaikum mas, saya mau nanya, kalau kita mau nyimpan gambar hasil clustering/ segmented_images{k}, tersebut menggunankan imwrite , gimana caranya mas?
Mohon bantuannya mas
Waalaikumsalam melia
Perintah nya seperti ini
for k = 1:nColors
color = Img;
color(rgb_label ~= k) = 0;
segmented_images{k} = color;
imwrite(segmented_images{k},strcat([‘hasil ‘,num2str(k),’.jpg’]))
end
Terima kasih banyak mas adi.
Sama sama Melia
mas itu kan dalam pemilihan foreground dipilih yang paling kecil area clusternya,kalo ingin dipilih yang kedua terbesar area clusternya sebagai foreground bagaimana yaa
Utk menjadikan objek terbesar sebagai foreground maka perintah min bisa diganti dg perintah max
nah itu kan kalo dipilih yang paling besar paling kecil mas,kalo ingin milih yang bukan paling besar dan bukan paling kecil bagaimana ya?
Bisa dipilih yg non max dan non min
nColors = 3;
[cluster_idx, cluster_center] = kmeans(ab,nColors,’distance’,’sqEuclidean’, …
‘Replicates’,3);
maksud dari kode itu bagaimana ya mas,?
Koding tsb digunakan utk melakukan klustering menggunakan algoritma kmeans dg jumlah kluster sebanyak 3
assalamu’alaikum mas adi, sya mau nanya tentang tutorial di bawah ini.
https://pemrogramanmatlab.com/data-mining-menggunakan-matlab/k-nearest-neighbor-knn-menggunakan-matlab/
ini kan klasifikasi berdasarkan bentuk mas
untuk yang berdasarkan tekstur ada gak mas?
menggunakan algoritma k-nn
untuk klasifikasi tekstur menggunakan algoritma k-nn fais bisa mengintegrasikan koding pada halaman berikut ini
https://pemrogramanmatlab.com/2015/08/11/texture-analysis-gray-level-co-occurrence-matrix-glcm-gui-matlab/
dan
https://pemrogramanmatlab.com/2016/04/21/k-nearest-neighbor-k-nn-menggunakan-matlab/
siang mas adi, saya mau nanya maksut dari coding di bawah ini?
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’);
dan jika saya mau menggunakan metode k-nn code mana yang harus saya ganti?
terima kasih sebelumnya mas adi
materi mengenai k-nn bisa dilihat pada halaman berikut ini
https://pemrogramanmatlab.com/data-mining-menggunakan-matlab/k-nearest-neighbor-knn-menggunakan-matlab/
terima kasih mas, atas responnya
mau tanya lagi mas
kalau fitur yang baik untuk mendeteksi kualitas apel itu pakek fitur apa mas?
mksutnya, pada kasus sortasi apel
jadi apel yang bagus dan apel yang cacat
terima kasih sebelumnya ^_^
materi mengenai ekstraksi fitur
bisa dilihat pada halaman berikut ini
https://pemrogramanmatlab.com/pengolahan-citra-digital/ekstraksi-ciri-citra-digital/
selamat siang maaf mau tanya untuk satu objek ikan untuk membedakan kepala, tubuh , dan ekor apakah bisa menggunakan logika ini?
Bisa meiki
Bisa dicoba diimplementasikan
Selamat Malam pak, maunanya jika mau deteksi tingkat kesegaran daging itu prosesnya apa saja ya pak ?
maklum baru pertama belajar pengelolahan citra..
terimakasih
selamat malam
tingkat kesegaran daging bisa diidentifikasi berdasarkan analisis warna dan tekstur
kak boleh mintak dataset contoh program diatas?
Source code dan data pada materi di atas dapat diperoleh pada halaman berikut ini
https://pemrogramanmatlab.com/source-code-gui-matlab/
Selamat siang kak, mau nanya kalau saya mau convert hsv ke grayscale
rgb2hsv
hsv2rgb
rgb2gray
kalau misal saya mau ambil nilai value dari hsv nya saja saya masukan ke dalam grayscale bisa tidak ya kak?
trimakasih sebelumnya
Selamat siang
Dari hsv bisa dikonversi menjadi rgb terlebih dahulu
Kemudian baru dikonversi menjadi grayscale
kalau mau ambil nilai “value” nya saja dari hsv nya bisa tidak ya kak?
Bisa maria
Utk mengekstrak masing2 komponen dari citra HSV bisa dipelajari pada halaman berikut ini
https://pemrogramanmatlab.com/2017/07/26/pengenalan-warna-objek/
foto=’image.jpg’;
I=imread(foto);
I=rgb2hsv(I);
H=I(:,:,1);
S=I(:,:,2);
V=I(:,:,3);
save V.mat;
vg=hsv2rgb(V);
vgray=rgb2gray(vg);
saya mau masukin nilai ‘value’ nya saja kak, tapi error
MAP must be M*3 array
seharusnya bagaimana ya kak?
Maaf mau tanya kak, untuk program menghitung otomatis menggunakan boundingbox, itu gimana ya kak ?
Materi utk menghitung otomatis menggunakan boundingbox bisa dilihat pada halaman berikut ini
https://pemrogramanmatlab.com/2016/07/02/pengolahan-citra-digital-untuk-deteksi-tepi-obyek/
oke kak sudah bisa hitung, makasih kak
Baik sama sama dita
Assalamualaikum mas
Kalo untuk hitungan manual Ekstraksi ciri RGB itu gimana ya mas?
mohon bantuannya
Waalaikumsalam
Bisa menggunakan nilai rata-rata masing-masing komponen rgb
Mas maap mau nanya ini maksud nya apa ya
for k = 1:nColors
color = Img;
color(rgb_label ~= k) = 0;
segmented_images{k} = color;
figure,imshow(segmented_images{k}), title(strcat([‘objects in cluster ‘,num2str(k)]));
end
assalamualaikum mas mau nanya untuk keterangan
” Cannot display summaries of variable with more than 524288 elements.”
itu apa ya yang diubah ? udh sy ikutin source code diatas tapi begitu . makasih
Waalaikumsalam
Tidak ada yg salah dg code tsb
Matlab memang tidak bisa menampilkan nilai dari variabel yg mempunyai anggota lebih dari 524288
assalamualaikum kak. saya mau tanya. disini saya lagi penelitian tentang KLASIFIKASI JENIS IKAN KOI DENGAN EKSTRAKSI POLA WARNA MENGGUNAKAN METODE RGB DAN KNN, yang saya tanya kan setelah saya melakukan input data citra lalui proses menggunakan metode RGB dan di ekstrasi menggunakan griscle apakan sudah selesai untuk ektraksi ciri warnanya, atau masih ada lagi prosesnya..mohon minta bimbingannya kak, terimakasih