首先,提取冲浪功能并在群集中使用它们是真的吗?我想在图像中聚类相似的对象?(每个图像包含一个对象)
如果是,那怎么可能呢。 我提取这样的功能:
I = imread('cameraman.tif');
points = detectSURFFeatures(I);
[features, valid_points] = extractFeatures(I, points);
特征不是矢量,而是矩阵。也是由' detectSURFFeatures'提取的点数。不同的图像有所不同。 应该如何使用功能?
答案 0 :(得分:1)
首先,您正在检测SURF功能,而不是SIFT功能(尽管它们具有相同的基本用途)。获得多个SURF特征的原因是SURF是局部图像特征,即它仅描述图像的一小部分。通常,将在单个图像中检测多个特征。您可能希望找到一种方法,在聚类之前将这些功能组合到单个图像描述符中。
组合这些功能的常用方法是Bag-of-words。
由于您似乎正在进行无监督学习,因此您首先需要学习一本码本。一种流行的方法是在您在所有图像中提取的所有SURF要素上使用k-means clustering。
使用这些聚类通过为每个图像创建“代码字外观”的直方图来生成k维图像描述符。在这种情况下,每个群集有一个“代码字”。每当SURF特征属于其关联的集群时,代码字就会“出现”。
代码字的直方图将充当每个图像的图像描述符。然后,您可以在图像描述符上应用聚类以查找相似的图像,我建议将图像描述符规范化为常量范数或使用余弦相似性度量(如果使用k均值聚类,则使用MATLAB中的kmeans(X,k,'Distance','cosine')
)。
也就是说,一个可能更好的解决方案是使用卷积神经网络提取深层特征,该网络在一个非常大的,不同的数据集(如ImageNet)上训练,然后将它们用作图像描述符。