聚类 1000 张图像以找到具有更大相似性的图像组

Clustering 1000 images to find group of images with greater similarity

我有 1000 张 2D 灰度图像,并希望将它们聚类在 python 中,以使具有更多相似性的图像留在同一组中。图像代表简单的几何形状,包括圆形、三角形等。

如果我想把每个图像展平成一个向量,然后 运行 聚类算法,那会很复杂。图像是 400*500,所以我的聚类训练数据是 1000*200000,这意味着 200000 个特征!

只是想知道以前是否有人遇到过这个问题?

这是一个与 this one

类似的问题

阅读我的回答 当然,您不会将每张图片都用作特征。 在您的情况下,我会推荐以下功能:

  1. 找到角并计算它们的数量

  2. 假设每条边都是一条直线 - 绘制方向直方图。在每个像素中计算导数角atan(dy,dx),取最强的1%导数像素做直方图。直方图中的峰值数量将对应于边缘数量(将聚类三角形、正方形、圆形等)

  3. 使用连通分量分析来计算图像中有多少个形状。计算每个形状中的孔数。计算图形的周长与面积之比。对于几何形状,几何特征非常有效

正如您在评论中所问,我正在为问题 2 添加更多信息。 请阅读更多关于 HOG 功能的信息 here。我假设您熟悉图像中的边缘以及渐变是什么。想象一下,图像中有一个三角形。只有位于形状边缘的像素才会具有高梯度。此外,您希望所有梯度都分为 3 个不同的方向,每条边一个。你不知道在哪个方向,因为你不知道三角形的方向,但你知道应该有 3 个方向。正方形会有 2 个方向,而圆形则没有明确的方向。你想计算方向的数量。使用以下步骤。首先找到具有高梯度值的像素。假设整个图像只有 1000 个这样的像素(它们位于形状的边缘)。对于每个像素计算渐变的角度。所以你有 1000 个像素,每个像素可能有 [0..179] 的角度(180 的角度等于 0)。有180个不同的角度。让我们假设,为了减少噪音,您不需要精确的角度,而是 +- 1 度。所以每个角度除以 2 并四舍五入到最接近的整数。所以总共有 1000 个像素,每个像素只有 90 个不同角度的选项。现在制作角度直方图。如果形状是圆形,您预计大约 11 (=1000/90) 个像素将落入直方图的每个 bin。如果它是一个正方形,您预计直方图基本上是空的,除了 2 个像素非常多的 bin,并且这些 bin 之间的距离为 45。示例:bin 13 中有 400 个像素,bi 58 中有 其中 400 个像素和其余 200 个像素以某种方式在其他 bin 中被噪声分割。现在你知道你面对的是一个正方形,你也知道它在图像中的旋转。 如果它是一个三角形,您预计直方图中有 3 个大箱子。