Skip to content

Latest commit

 

History

History
117 lines (59 loc) · 7.52 KB

k-means-clustering-dask-image-filters.md

File metadata and controls

117 lines (59 loc) · 7.52 KB

使用 Dask 进行 K-means 聚类:猫咪图片的图像滤镜

原文:www.kdnuggets.com/2019/06/k-means-clustering-dask-image-filters.html

c 评论

Luciano Strika提供,MercadoLibre

一只小猫的图片。它将通过 K-means 聚类进行压缩。

对图像应用滤镜对任何人来说都不是新概念。我们拍一张照片,对其进行一些更改,然后它看起来更酷。但是人工智能的作用在哪里?让我们尝试一下用 K Means 聚类进行无监督机器学习的有趣用例。

我之前写过K Means 聚类,所以我会假设你对这个算法已经熟悉。如果你不熟悉,可以查看我写的深入介绍

此外,我还尝试了用自编码器进行图像压缩(好吧,是重建),效果有好有坏。

然而,这一次,我的目标是不重建最好的图像,而只是查看用最少颜色重建图片的效果。

与使图片尽可能接近原始图片不同,我只是希望我们看完之后能说“真棒!”。

那我们该如何做呢?很高兴你问了。

如何使用 K-means 聚类进行图像滤镜

首先,永远记住图像只是像素向量。每个像素是三个介于 0 到 255 之间的整数值的元组(无符号字节),代表该像素颜色的 RGB 值。

我们想要使用 K-means 聚类来找到最能表征图像k颜色。这意味着我们可以将每个像素视为单个数据点(在 3 维空间中),并进行聚类。

首先,我们需要在 Python 中将图像转换为像素向量。以下是实现方法。

顺便说一句,我认为vector_of_pixels函数不需要使用 Python 列表。我确信一定有办法展平 numpy 数组,只是我没找到(至少没有找到按照我想要的顺序进行展平的方法)。

如果你能想到任何方法,请在评论中告诉我!

下一步是拟合模型到图像,以便它将像素聚类k种颜色。然后,只需将相应的聚类颜色分配给图像中的每个位置即可。

例如,也许我们的图片只有三种颜色:两种红色和一种绿色。如果我们将其拟合到 2 个聚类,那么所有红色像素都会变成不同的红色阴影(被聚在一起),其他的则会变成绿色。

但解释够了,让我们看看程序的实际效果!

和往常一样,你可以用任何你想要的图片自行运行,以下是带有代码的GitHub 仓库

结果

我们将把滤镜应用于小猫的图片,这些图片取自令人惊叹的“Cats vs Dogs”kaggle 数据集

我们将从一张猫的图片开始,并使用不同的k值应用滤镜。以下是原始图片:

一张小猫的图片。它将使用 K 均值聚类进行压缩。

首先,我们来检查一下这张图片最初有多少种颜色。

仅用一行Numpy代码,我们计算了这张图片上像素的唯一值。这张图片特别有243 种不同颜色,尽管它总共有166167 个像素

现在,让我们看看将其聚类为 2、5 和 10 种不同颜色后的结果。

猫的图片

只有两种颜色,它所做的只是标记最暗和最亮的区域。不过,如果你是艺术家,正在用黑白(例如墨水)绘制某些东西,并希望看到参考图像的轮廓,这可能会很有用。

图像只有 5 种不同的颜色,这只猫已经可以辨认出来了!!这只小猫的图片是使用 K 均值聚类压缩的。10 种颜色的图片可能看起来有点迷幻,但它比较清晰地展示了原图的内容。

你注意到什么趋势了吗?我们添加的每一种颜色的回报递减。拥有 2 种颜色和 5 种颜色之间的差别远大于 5 种和 10 种之间的差别。然而,10 种颜色时,平坦区域更小,细节更丰富。接下来看看 15 种和 24 种颜色!

小猫的压缩图片。小猫的压缩图片。

尽管很明显,上面的图片使用了 24 种颜色的滤镜(原始数量的 10%),但我们足够好地展示了猫,并达到了一定的细节水平。

继续看另一张图片:这是原图(256 种不同颜色),这是压缩后的图片(24 种颜色)。

两个相同的白色小猫并排显示。其中一个是用 K 均值聚类压缩的。256 种颜色与 24 种颜色。注意到有什么区别吗?

有趣的是,“压缩”图像的大小为 18KB,而未压缩的图像为 16KB。我不太清楚为什么会这样,因为压缩器是相当复杂的,但希望看到你们在评论中的理论。

结论

我们能够仅用原图 10% 的颜色生成新图像,且看起来非常相似。得益于 K-means 聚类,我们还获得了一些酷炫的滤镜。你能想到其他有趣的聚类应用吗?你认为其他聚类技术会产生更有趣的结果吗?

如果你想回答这些问题,可以通过 TwitterMediumDev.to 与我联系。

简介: Luciano Strika 是布宜诺斯艾利斯大学的计算机科学学生,兼任 MercadoLibre 的数据科学家。他还在www.datastuff.tech撰写有关机器学习和数据的文章。

原文。经许可转载。

相关:

  • K-Means 聚类:推荐系统的无监督学习

  • 提升你的图像分类模型

  • 介绍 Dask-SearchCV:使用 Scikit-Learn 进行分布式超参数优化


我们的前三个课程推荐

1. Google 网络安全证书 - 快速进入网络安全职业。

2. Google 数据分析专业证书 - 提升你的数据分析技能

3. Google IT 支持专业证书 - 支持你的组织的 IT


更多相关话题