![](https://softscients.com/wp-content/uploads/2020/03/1.-Buku-Pengolahan-Citra-Digital-dengan-Python-dan-OpenCV-Grouping-Color.png)
K-means merupakan algoritma clustering “unsupervised 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 (x1 , y1) , (x2 , y2) , …, (xi , 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()