Pendahuluan
1.2 Tujuan
Tujuan dilakukannya percobaan ini yaitu untuk mempermudah dalam
mengidentifikasi suatu objek dan warna pada citra digital.
Bab 2
Pembahasan
Apabila diberikan 2 macam cahaya primer dalam ruangan tersebut seperti (merah dan hijau),
atau (merah dan biru) atau (hijau dan biru), maka ruangan akan berubah warna masing-masing
menjadi kuning, atau magenta atau cyan. Warna-warna yang dibentuk oleh kombinasi dua
macam cahaya tersebut disebut warna sekunder. Warna Tersier adalah warna yang hanya dapat
terlihat apabila ada tiga cahaya primer, jadi apabila dinon-aktifkan salah satu cahaya, maka
benda tersebut berubah warna. Contoh warna tersier seperti abu-abu,putih.
Pada perhitungan dalam program-program komputer model warna direpresentasi dengan nilai
komponennya, seperti dalam RGB (r, g, b) masing-masing nilai antara 0 hingga 255 sesuai
dengan urusan masing-masing yaitu pertama Red, kedua Green dan ketigha adalah nilai Blue
dengan demikian masing-masing komponen ada 256 tingkat. Apabila dikombinasikan maka
ada 256 x 256 x 256 atau 16.777.216 kombinasi warna RGB yang dapat dibentuk.
Konfigurasi Warna RGB (Sumber http://en.wikipedia.org/wiki/RGB_color_model)
Dalam mendesign web warna RGB kerapkali direpresentasikan dengan Hex Triplet atau kombinasi 2
pasang bilangan hexadecimal, seperti #FF5D25 artinya Red = FF atau 15*16 + 15 = 255, Green = 5D
atau 5*16 + 13 = 93 dan Blue = 25 atau 2*16 + 5 = 37. Jadi RGB (255,93,37)
2.1.2 HSV
Model warna HSV mendefinisikan warna dalam terminologi Hue, Saturation dan Value. Hue
menyatakan warna sebenarnya, seperti merah, violet, dan kuning. Hue digunakan untuk
membedakan warna-warna dan menentukan kemerahan (redness), kehijauan (greeness), dsb,
dari cahaya. Hue berasosiasi dengan panjang gelombang cahaya. Saturation menyatakan
tingkat kemurnian suatu warna, yaitu mengindikasikan seberapa banyak warna putih diberikan
pada warna. Value adalah atribut yang menyatakan banyaknya cahaya yang diterima oleh mata
tanpa memperdulikan warna.
2.1.3 Konversi citra RGB ke HSV
Proses deteksi warna diawali dengan mengkonversi ruang warna citra RGB (Red, Green,
Blue) menjadi HSV (Hue, Saturation, Value). Selanjutnya proses klasifikasi warna dilakukan
berdasarkan pengelompokan nilai Hue.
HSV merupakan kependekan dari Hue, Saturation, dan Value. Dimana karakteristik pokok
dari warna tersebut adalah:
1. Hue: menyatakan warna sebenarnya, seperti merah, violet, dan kuning dan digunakan
menentukan kemerahan (redness), kehijauan (greeness), dsb.
3. Value : kecerahan dari warna. Nilainya berkisar antara 0-100 %. Apabila nilainya 0
maka warnanya akan menjadi hitam, semakin besar nilai maka semakin cerah dan muncul
variasi-variasi baru dari warna tersebut.
RGB merupakan kependekan dari Red, Green, Blue. Warna – warna yang dibentuk oleh
model warna merupakan hasil campuran dari warna-warna primer merah, hijau, dan biru
berdasarkan komposisi tertentu.
Ada sebuah metode untuk mengkonversi HSV ke RGB dan sebaliknya yang dibuat oleh
Travis sebagai berikut:
Pertama-tama cari nila maksimum dan minimum dari ketiga komponen RGB.
1. Satruation (S) :
S=(max-min)/max
2. Value (V) :
V= max
R'=max-R / max-min
G'=max-G / max-min
B'=max-B / max-min
Jika Satruation, S=0, maka hue tidak terdefinisi (tidak memiliki hue berarti monochrome).
kemungkinan lain:
· otherwise -> H = 5 – R’
Hue (H) lalu dikonversi menjadi derajat/degrees dengan cara mengalikan dengan 60 sehingga
menghasilkan HSV dengan S dan V antara ) dan 1 dan H antara 0-360
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:
Parameter 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:
2. Ekstraksi Ciri 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‘)
Δ = Cmax – Cmin
Perhitungan nilai Hue:
sehingga ruang warna citra yang semula berbentuk kubus berubah bentuk menjadi kerucut
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Color_and_Shape_Detection is made visible.
function Color_and_Shape_Detection_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Color_and_Shape_Detection (see VARARGIN)
% --- Outputs from this function are returned to the command line.
function varargout = Color_and_Shape_Detection_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
if ~isequal(filename,0)
Img = imread(fullfile(pathname,filename));
axes(handles.axes1)
imshow(Img)
title('Original Image');
% Color Detection
[m,n,~] = size(Img);
hsv = rgb2hsv(Img);
H = hsv(:,:,1);
for y = 1:m
for x = 1:n
h = H(y,x);
% Ubah warna
if h < 11/255 % merah
h = 0;
elseif h < 32/255 % jingga
h = 21/255;
elseif h < 54/255 % kuning
h = 43/255;
elseif h < 116/255 % hijau
h = 85/255;
elseif h < 141/255 % cyan
h = 128/255;
elseif h < 185/255 % biru
h = 170/255;
elseif h < 202/255 % ungu
h = 191/255;
elseif h < 223/255 % magenta
h = 213/255;
elseif h < 244/255 % merah muda
h = 234/255;
else
h = 0; % merah
end
% Ubah komponen H
H(y,x) = h;
end
end
% Shape Detection
gray = rgb2gray(Img);
threshold = .8;
bw = ~im2bw(gray,threshold);
bw = imfill(bw,'holes');
[B,L] = bwboundaries(bw,'noholes');
stats = regionprops(L,'All');
class = zeros(12,1);
for k = 1:length(B)
boundary = B{k};
delta_sq = diff(boundary).^2;
perimeter = sum(sqrt(sum(delta_sq,2)));
area = stats(k).Area;
eccentricity = stats(k).Eccentricity;
metric = 4*pi*area/perimeter^2;
if metric<0.56
class(k,1) = 1;
elseif metric<0.89
if eccentricity>0.04 && eccentricity <0.05
class(k,1) = 2;
else
class(k,1) = 3;
end
else
class(k,1) = 4;
end
end
handles.Img = Img;
handles.H = H;
handles.class = class;
handles.bw = bw;
guidata(hObject, handles)
else
return
end
H_aksen = H==0/255;
H_aksen = logical(H_aksen);
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
R(~H_aksen) = 255;
G(~H_aksen) = 255;
B(~H_aksen) = 255;
RGB = cat(3,R,G,B);
axes(handles.axes2)
imshow(RGB);
title('Color Detection -> Red')
H_aksen = H==21/255;
H_aksen = logical(H_aksen);
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
R(~H_aksen) = 255;
G(~H_aksen) = 255;
B(~H_aksen) = 255;
RGB = cat(3,R,G,B);
axes(handles.axes2)
imshow(RGB);
title('Color Detection -> Orange')
H_aksen = H==85/255;
H_aksen = logical(H_aksen);
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
R(~H_aksen) = 255;
G(~H_aksen) = 255;
B(~H_aksen) = 255;
RGB = cat(3,R,G,B);
axes(handles.axes2)
imshow(RGB);
title('Color Detection -> Green')
H_aksen = H==170/255;
H_aksen = logical(H_aksen);
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
R(~H_aksen) = 255;
G(~H_aksen) = 255;
B(~H_aksen) = 255;
RGB = cat(3,R,G,B);
axes(handles.axes2)
imshow(RGB);
title('Color Detection -> Blue')
H_aksen = H==213/255;
H_aksen = logical(H_aksen);
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
R(~H_aksen) = 255;
G(~H_aksen) = 255;
B(~H_aksen) = 255;
RGB = cat(3,R,G,B);
axes(handles.axes2)
imshow(RGB);
title('Color Detection -> Purple')
H_aksen = H==43/255;
H_aksen = logical(H_aksen);
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
R(~H_aksen) = 255;
G(~H_aksen) = 255;
B(~H_aksen) = 255;
RGB = cat(3,R,G,B);
axes(handles.axes2)
imshow(RGB);
title('Color Detection -> Yellow')
bw2 = false(size(bw));
n = find(class==1);
for x = 1:numel(n)
cc = bwconncomp(bw, 4);
bw2(cc.PixelIdxList{n(x)}) = true;
end
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
R(~bw2) = 255;
G(~bw2) = 255;
B(~bw2) = 255;
RGB = cat(3,R,G,B);
axes(handles.axes2)
imshow(RGB);
title('Shape Detection -> Polygon')
bw2 = false(size(bw));
n = find(class==2);
for x = 1:numel(n)
cc = bwconncomp(bw, 4);
bw2(cc.PixelIdxList{n(x)}) = true;
end
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
R(~bw2) = 255;
G(~bw2) = 255;
B(~bw2) = 255;
RGB = cat(3,R,G,B);
axes(handles.axes2)
imshow(RGB);
title('Shape Detection -> Triangle')
bw2 = false(size(bw));
n = find(class==3);
for x = 1:numel(n)
cc = bwconncomp(bw, 4);
bw2(cc.PixelIdxList{n(x)}) = true;
end
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
R(~bw2) = 255;
G(~bw2) = 255;
B(~bw2) = 255;
RGB = cat(3,R,G,B);
axes(handles.axes2)
imshow(RGB);
title('Shape Detection -> Square')
bw2 = false(size(bw));
n = find(class==4);
for x = 1:numel(n)
cc = bwconncomp(bw, 4);
bw2(cc.PixelIdxList{n(x)}) = true;
end
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
R(~bw2) = 255;
G(~bw2) = 255;
B(~bw2) = 255;
RGB = cat(3,R,G,B);
axes(handles.axes2)
imshow(RGB);
title('Shape Detection -> Circle')
axes(handles.axes2)
cla reset
set(gca,'XTick',[])
set(gca,'YTick',[])
2.3 Running Program
Penutup
3.1 Kesimpulan
Berdasarkan pengujian yang telah dilakukan dapatkan kesimpulan sebagai berikut :
1. Proses deteksi warna diawali dengan mengkonversi ruang warna citra RGB (Red, Green, Blue)
menjadi HSV (Hue, Saturation, Value). Selanjutnya proses klasifikasi warna dilakukan
berdasarkan pengelompokan nilai Hue.
2. Proses deteksi bentuk diawali dengan mengkonversi ruang warna citra RGB menjadi grayscale.
Setelah itu dilakukan thresholding sehingga diperoleh citra biner. Kemudian dilakukan ekstraksi
ciri morfologi dari citra biner berdasarkan parameter eccentricity dan metric. Proses klasifikasi
citra dilakukan berbasis aturan (rule based) sederhana.
Referensi
1. https://pemrogramanmatlab.com/2016/07/02/pengolahan-citra-digital-untuk-
mendeteksi-warna-dan-bentuk-obyek/#more-3670
2. http://teknotugasku.blogspot.co.id/2016/11/pengolahan-citra-digital-untuk.html
LAPORAN PROYEK AKHIR SEMESTER
PENGOLAHAN SINYAL MULTIMEDIA
Disusun Oleh :
3 TET A
1520301037