Pada tulisan kali ini saya akan memberikan sedikit tutorial mengenai bagaimana menentukan persentase area
pada gambar yang nilai pixel RGB-nya memilik karakter warna tertentu (misalnya gelap atau hitam). Tanpa perlu berbasa-basi saya langsung saja membagikan script disertai komentar seperlunya yang bisa saudara coba di MATLAB.
clc;
clear all ;
[a,b] = imread('polpot.jpg');
[m,n,o] = size(a);
% pertama akan ditentukan apakah nilai RGB pada koordinat seragam. Misalnya
% kita ambil sampel koordinat dari 10 baris pertama dan 10 kolom pertama.
HJ = (a(1:10,1:10,1) == a(1:10,1:10,3) ) & ((a(1:10,1:10,1) == a(1:10,1:10,2) )) ;
HJ
%%
% yang ternyata elemen matriks HJ semua 1 yang menandakan semua nilai RGB piksel seragam.
% Untuk membuktikan, coba kita Print
% nilai elemen pada baris dan kolom tersebut
a(1:10,1:10,:)
%%
% sekarang karena outputnya seragam maka otomatis nilai sum terhadap
% seluruh matriks HJ akan sama dengan penjumlahan terhadap seluruh matrix
% 'ones' yang ukurannya sama dengan HJ. Jika logika ini kita perumum, akan bisa digunakan pada
% kasus matrik HH yang mencakup seluruh area dari image, yang akan kita
% peroleh adalah
HH = (a(:,:,1) == a(:,:,2)) & (a(:,:,1) == a(:,:,3));
if sum(sum(HH)) == sum(sum(ones(m,n)))
M = a(:,:,1) <10;
disp(['persen area yang nilai pixel-nya di bawah 10 (nilai 0 berarti hitam): ',...
num2str(sum(sum(M))/sum(sum(ones(m,n)))*100), ' persen']);
else
disp('nilai pixel tidak seragam')
% karena nilai pixel tidak seragam, maka kita bisa gunakan asumsi bahwa
% nilai pixel yang mendekati warna gelap itu yang nilai pixel-nya
% kurang dari 5 untuk R, 5 untuk G, dan 5 untuk B. Memang nilai pixel
% yang benar-benar hitam adalah R = 0, G = 0, dan B = 0. Akan tetapi
% kita hanya mendapat sedikit porsi dari area image untuk nilai tersebut.
% Jadi kita gunakan pendekatan tadi.
M = (a(:,:,1) < 5) & (a(:,:,2) < 5) & (a(:,:,3) < 5);
disp(['persen area yang nilai pixel untuk R < 5; G < 5, dan B < 5: ',...
num2str(sum(sum(M))/sum(sum(ones(m,n)))*100), ' persen']);
end
%%
% Kita juga bisa menentukan pada baris dan kolom mana saja yang nilai pixel
% R, G, B tidak seragam
logic = (a(:,:,1)== a(:,:, 2)) & (a(:,:,1)== a(:,:,3));
[x1,x2,x3] = ind2sub(size(a),find(~logic));
disp('10 baris pertama dan 10 kolom pertama yang pikselnya tidak seragam: ');
x1(1:10)'
x2(1:10)'
disp('nilai RGB pada baris dan kolom tersebut: ');
a(x1(1:10),x2(1:10),:)