【问题标题】:Clustering 1000 images to find group of images with greater similarity聚类 1000 张图像以找到相似度更高的图像组
【发布时间】:2016-06-25 19:08:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: image image-processing cluster-analysis


    【解决方案1】:

    这是与this one类似的问题

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

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

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

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

    正如您在评论中所问的,我正在为问题 2 添加更多信息。 请阅读更多关于 HOG 功能的信息here。我假设您熟悉图像中的边缘以及渐变是什么。想象一下,图像中有一个三角形。只有位于形状边缘的像素才会有高梯度。此外,您希望所有渐变都分为 3 个不同的方向,每个边缘一个。您不知道哪个方向,因为您不知道三角形的方向,但您知道应该有 3 个方向。正方形有两个方向,而圆形则没有明确的方向。你想计算方向的数量。使用以下步骤。首先找到具有高梯度值的像素。假设从整个图像中只有 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 个大的 bin。

    【讨论】:

    • 感谢您的帮助。您能详细说明第 2 节吗?不是很清楚。
    • 感谢您的帮助。感谢您的宝贵时间。
    猜你喜欢
    • 2011-03-11
    • 1970-01-01
    • 2020-02-16
    • 2014-10-06
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多