机器学习应用:颜色量化实现示例

Posted chuangye95

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习应用:颜色量化实现示例相关的知识,希望对你有一定的参考价值。

最近我在想,有没有可能检测出一幅图像的主色。最后我使用k-means聚类算法取得了很好的效果。我使用python OpenCV和scikit-learn实现了它。

怎么运作的?

k-means是机器学习中使用的聚类算法,其中一组数据点将被分类为“k”组。它适用于简单的距离计算。

  1. 随机选择‘k‘个点(不一定来自数据集)。
  2. 将每个数据点分配给最近的聚类。
  3. 计算并放置每个聚类的新质心。
  4. 将数据点重新分配给新的最近的聚类。如果发生任何重新分配,转到步骤3,否则模型已准备就绪。

图像分割

  • 分割将图像分割为具有与对象的部分相对应的类似视觉外观的区域
  • 我们将尝试使用K-Means提取最主要的‘K‘颜色
  • 我们可以应用K-Means,每个像素将重新分配到最接近的K色,从而导致分割

我们将使用强大的机器学习(ML)库scikit-learn for k-means。

应用图像

技术分享图片

 

由于图像由三个通道组成:红色,绿色和蓝色,我们可以将每个像素视为3D空间中的一个点,因此可以在其上应用k均值聚类算法。

在用算法处理每个像素之后,聚类质心将是所需的主色。

读取和绘制图像

import numpy as np
import cv2
import skimage.io as io
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.cluster import KMeans
im=io.imread(‘/home/manish/Desktop/images1.jpeg‘)
im=cv2.resize(im,(400,400))
plt.xticks([])
plt.yticks([])
plt.imshow(im)
print im.shape
plt.show()
技术分享图片

 

(400, 400, 3)

技术分享图片

 

Flatten图像的每个通道

data=im.reshape(-1,3)
data.shape

(160000, 3)

使用scikit-learn应用KMeans

km=KMeans(n_clusters=5)
km.fit(data)

KMeans(algorithm=‘auto‘, copy_x=True, init=‘k-means++‘, max_iter=300,

n_clusters=5, n_init=10, n_jobs=1, precompute_distances=‘auto‘,

random_state=None, tol=0.0001, verbose=0)

寻找并绘制K主色

dominant_colors=km.cluster_centers_.astype(np.uint8)
plt.figure(0)
for i in range(dominant_colors.shape[0]):
plt.subplot(1,dominant_colors.shape[0],i+1)
plt.xticks([])
plt.yticks([])
col=np.zeros((100,100,3),dtype=np.uint8)
col[:,:,:]=dominant_colors[i]
plt.imshow(col)
技术分享图片

 

技术分享图片

 

为每种主色赋予标签

new_image=np.zeros_like(data)
labels=km.predict(data)
print np.unique(labels,return_counts=False)

[0 1 2 3 4]

for ix in range(len(new_image)):
new_image[ix,:]=dominant_colors[labels[ix]]

打印新图像和实际图像

#new image
plt.subplot(1, 2, 1)
plt.grid("off")
plt.xticks([])
plt.yticks([])
plt.imshow(new_image.reshape(im.shape))
#actual image
plt.subplot(1,2,2)
plt.xticks([])
plt.yticks([])
plt.imshow(im)
技术分享图片

 

技术分享图片

 

它工作得相当不错,并显示5种主要颜色,用于生成新图像。KMeans比从头开始的算法做得更好,因为它几乎完美地捕捉到了我们创建的初始聚类(主色)的边界。




































以上是关于机器学习应用:颜色量化实现示例的主要内容,如果未能解决你的问题,请参考以下文章

机器学习sklearn----KMeans实例(图片数据矢量量化的应用)

机器学习sklearn----KMeans实例(图片数据矢量量化的应用)

吴恩达机器学习_43矢量

量化择时——SVM机器学习量化择时(第1部分—因子测算)

机器学习11—原型聚类之学习向量量化(LVQ)

量化 | 适用于Python机器学习的4本书