Clustering Color

By | October 23, 2021
Print Friendly, PDF & Email
2,067 Views

K-means merupakan algoritma clusteringunsupervised machine learning algorithms” yang paling sederhana dan populer serta non hirarki yang berusaha untuk mempartisi objek yang ada kedalam satu atau lebih cluster atau kelompok objek berdasarkan karakteristiknya, sehingga objek yang mempunyai karakteristik yang sama dikelompokan dalam satu cluster yang sama dan objek yang mempunyai karakteristik yang berbeda dikelompokan kedalam cluster yang lain.

Metode K-Means Clustering berusaha mengelompokkan data yang ada ke dalam beberapa kelompok, dimana data dalam satu kelompok mempunyai karakteristik yang sama satu sama lainnya dan mempunyai karakteristik yang berbeda dengan data yang ada di dalam kelompok yang lain.

Dengan kata lain, metode K-Means Clustering bertujuan untuk meminimalisasikan objective function yang diset dalam proses clustering dengan cara meminimalkan variasi antar data yang ada di dalam suatu cluster dan memaksimalkan variasi dengan data yang ada di cluster lainnya juga bertujuan untuk menemukan grup dalam data, dengan jumlah grup yang diwakili oleh variabel K. Variabel K sendiri adalah jumlah cluster yang diinginkan. Membagi data menjadi beberapa kelompok. Algoritma ini menerima masukan berupa data tanpa label kelas. Hal ini berbeda dengan supervised learning yang menerima masukan berupa vektor (­1 , y1) , (­2 , y2) , …, (­i , yi), di mana xi merupakan data dari suatu data pelatihan dan yi merupakan label kelas untuk xi .

K-Means Clustering bisa kalian gunakan lho untuk melakukan segmentasi ataupun grouping warna/kuantisasi/Clustering Color pada image true color atau grayscale selain menggunakan teknik inrange(). Kalian bisa menggunakan library OpenCV sudah dilengkapi dengan function Kmeans() yaitu https://docs.opencv.org/3.4.3/d1/d5c/tutorial_py_kmeans_opencv.html.

Caranya pun sangat mudah koq, kalian bisa menggunakan library dari OpenCV untuk melakukan Clustering Color. Kalian bisa menggunakan kode berikut

import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('panoramic.jpg')
#ubah menjadi array terdiri dari 3 kolom karena terdiri dari BGR
Z = img.reshape((-1,3))
#convert dari uint8 ke float
Z = np.float32(Z)
# define criteria, number of clusters(K) and apply kmeans()
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 5 #jumlah cluster
ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
# convert ke double ke uint8
center = np.uint8(center)
res = center[label.flatten()]
#ubah lagi
res2 = res.reshape((img.shape))
plt.figure()
plt.subplot(2,1,1),plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
plt.title('Asli')
plt.subplot(2,1,2),plt.imshow(cv2.cvtColor(res2,cv2.COLOR_BGR2RGB))
plt.title('Clustering Color')
plt.show()
Tentu dengan teknik grouping diatas, akan mempermudah dalam teknik segmentasinya, karena return dari kmeans() berupa nilai center untuk masing-masing kelas, sehingga nilai center tersebut dapat digunakan sebagai threshold. Hanya untuk mempermudah saja, kalian bisa  menggunakan Tkinter untuk membuat aplikasi berbasis GUI, seperti berikut

 

See also  Membuat Dashboard Interaktif

 

Leave a Reply