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

时间:2016-03-10 18:57:12

标签: image image-processing cluster-analysis

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

如果我想将每个图像展平为一个矢量然后运行聚类算法,那将会非常复杂。图像是400 * 500,因此我的聚类训练数据将是1000 * 200000,这意味着200000个功能!

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

1 个答案:

答案 0 :(得分:2)

这是与this one

类似的问题

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

  1. 查找角落并计算其数量

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

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

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