Color Matching – Urusan warna adalah hal yang lumayan ribet, secara umum kedalaman warna yang digunakan oleh komputer saat ini ada banyak, namun seringkali menggunakan 8 bit atau 2^8 (dari skala 0 sampai 255). Kalian bisa melihat skala 0 sampai 255 dari mulai hitam sampai putih. Apalagi untuk warna RGB yang terdiri dari 3 channel, maka akan ada banyak sekali kombinasi warna yang didapatkan. Kalian bisa cek sendiri menggunakan color palette berikut
Color Matching pada ph Meter
Kegunaan color matching terlihat ketika akan menggunakan kertas lakmus yang terdiri dari 14 warna untuk cek phMeter. Untuk mengetahui warna yang terbentuk, saya menggunakan https://imagecolorpicker.com/
Didapatkan informasi mengenai ke 14 warna tersebut mempunyai kombinasi rgba sebagai berikut
- rgba(254,153,1,255)
- rgba(255,204,0,255)
- rgba(255,255,51,255)
- rgba(254,255,103,255)
- rgba(254,255,152,255)
- rgba(255,254,205,255)
- rgba(255,255,254,255)
- rgba(255,255,255,255)
- rgba(207,252,253,255)
- rgba(153,255,255,255)
- rgba(1,252,255,255)
- rgba(1,255,255,255)
- rgba(50,204,254,255)
- rgba(5,100,250,255)
Kita bisa membuatnya menggunakan Matlab dengan kode sebagai berikut
clc;close all;clear all; data =[ 254 153 1 255 204 0 255 255 51 254 255 103 254 255 152 255 254 205 255 255 254 255 255 255 207 252 253 153 255 255 102 254 255 1 255 255 50 204 254 1 100 250]; ph = ones(500,100,3); phMeter = []; for i=1:14 ph(:,:,1) = data(i,1); ph(:,:,2) = data(i,2); ph(:,:,3) = data(i,3); phMeter = [phMeter,ph]; end figure, imshow(uint8(phMeter)) title('pH Meter')
Kita akan uji coba menghitung kemiripan jika ditemui sebuah warna dibawah ini
warnaUji = [100 204 255 ]; pHuji = ones(500,100,3); pHuji(:,:,1) = warnaUji(1); pHuji(:,:,2) = warnaUji(2); pHuji(:,:,3) = warnaUji(3); figure, imshow(uint8(pHuji)) title('pH Uji')
Akan sulit menentukan pilihannya bukan? ya dilihat berdasarkan color matching pasti akan memilih no 13, tapi sebenarnya ada cara yang lebih baik yaitu dengan menghitung jarak eucledian . Rumus yang digunakan cukup mudah yaitu
Nanti dicari yang paling kecil
>> jarak = sqrt(sum((data-repmat(double(warnaUji),[size(data,1),1])).^2,2)/(14-1)); [value,pilihan]=min(jarak); value pilihan value = 13.8703 pilihan = 13 >>
Biar lebih baik, kita lakukan langkah membandingkan phMeter dengan phUji pada color matching sebagai berikut
a = ones(500,500,3); for i=1:3 a(:,:,i)=data(pilihan,i); end a = uint8(a); b = a; b(:,:,1)=warna_uji(1); b(:,:,2)=warna_uji(2); b(:,:,3)=warna_uji(3); figure, subplot(1,2,1),imshow(a),title('Warna phMeter') subplot(1,2,2),imshow(b),title(['Warna phUji : ' num2str(pilihan)])
Kalian bisa menggunakan teknik diatas untuk projek berbasis arduino UNO, ref: https://create.arduino.cc/projecthub/hminowa/color-sensor-type-ph-meter-b78638 ataupun membuat aplikasi berbasis android untuk mengetahui cat dinding rumah atas produk cat tertentu, jadi tidak bingung nantinya pas beli warna cat. Selain color matching diatas, kita bisa menggunakan untuk hal lainnnya yaitu untuk menghitung komposisi warna pada sebuah objek dengan menggunakan color palette dibawah ini
Color Palette
Begitu banyak sekali kombinasi warna yang dapat dibuat, maka akan sulit memberikan warna satu persatu. Mengacu pada link berikut, maka saya akan mencoba untuk mendekatkan warna real menjadi ke warna acuan / color palette berdasarkan 16 nama warna.
Jadi setiap warna-warna yang ada, harus merujuk nama warna diatas
Aplikasi Color Palette
Aplikasi yang kami buat menggunakan Java Pure dan OpenCV sebagai library untuk mempermudah pengembangan ke mobile device (daripada menggunakan bahasa dart/flutter ataupun kotlin). Terdapat beberapa fitur yang berguna seperti
- resize
- remove background
- ignore white (warna putih tidak diikutsertakan ketika remove background active)
Saya akan membuat contoh gambar sebagai validasi sebagai berikut
Setidaknya ada 5 warna yaitu
- white
- red
- green
- blue, serta
- teal
Nama-nama diatas dibuat berdasarkan aplikasi microsoft paint, jadi warna teal BEDA dengan warna green.
Perhatikan warna teal akan dirujuk/diubah sesuai dengan 16 warna diatas bila kita ingin menampilkan hasil clusteringnya (uncheck fitur Tampilkan asli)
Perhatikan bahwa white mempunyai komposisi sebanyak 54%, blue 17%, serta yang lainnya bisa dilihat di textarea sebelah kanan. Kita akan coba menghitung komposi warna dari gambar dibawah ini.
Hasilnya warna olive mendominiasi 87% (warna putih diabaikan)