ML聚类算法的一个有趣用例

机器学习中的聚类算法用于弄清非结构化数据集,例如检测异常或异常值。 但是此算法的一个有趣用例是找到主色或找到图像的调色板。

通常,图像将具有数百万种颜色,但是它们遵循调色板或配色方案。 因此,使用聚类将相似颜色(按其像素值排序,RGB)聚类在一起。 之后,只需找到群集中心并将该颜色值应用于群集的其余部分即可。

我已经使用K-Means聚类算法来进行聚类。 要处理图像并找到聚类质心,首先,将图像加载到Numpy数组,然后将除以255的颜色范围从0到255的值进行展平。

  im = cv2.imread(“ test_image.jpeg”) 
im_flat = np.divide(im,255)

现在我们已经将图像加载到形状为(3204、4271、3)的Numpy数组中,我们需要通过重塑将其转换为较小尺寸的数组,因为我们不关心像素颜色值,而不是像素位置。 重塑后,数组变为(13684284,3)。

  X = im_flat.reshape(-1,3) 

现在在输入数组上运行聚类算法将为我们提供所需的聚类中心。 这里使用Scikit-learn中的K-Means集群API。

  K = 8 

kmeans = KMeans(n_clusters = K,random_state = 0,verbose = 0,max_iter = 5).fit(X)

在这种情况下,群集数选择为8。 在运行算法之后,将属于聚类的像素值分配给位于聚类中心的像素值。

  X_recovered = kmeans.cluster_centers_ [kmeans.labels_,:]。reshape(im.shape) 
  X_recovered = X_recovered * 255 

所得图像与原始图像并排绘制以显示差异。

这是我最近遇到的一种有趣的聚类算法用法。 它可用于查找主要颜色或查找调色板并用于为其他图像着色。

我尝试过的Jupyter笔记本在这里提供。

谢谢。