在R中聚类照片?

时间:2010-08-02 03:22:44

标签: image r image-processing

我在这里有一个一般的R问题:

通常使用数码相机,我们倾向于点击许多可能重复的图像,并且在Picassa上共享时会浪费在线空间,或者在尝试删除一些不需要的图像时会产生开销。

是否可以使用R对照片进行聚类?我的意思是Matlab中有一些用于图像处理的聚类功能,但是这种功能是否可用,或者在R中是否有任何建议?

请提供有关此主题的一些想法。

1 个答案:

答案 0 :(得分:11)

如果你看看CRAN,有各种(我数约10个)包来读取图像数据。当然,还有各种包进行聚类。 理论上,您可以将原始图像数据插入到聚类算法中,但在实践中不能很好地工作。就速度而言,它会非常缓慢,就准确性而言,它可能也会非常糟糕。聚类图像数据的现代技术依赖于从图像中提取的专用特征并对其进行操作。最佳功能取决于应用程序,但一些最着名的功能是SIFT,SURF和HOG。较旧的技术依赖于图像颜色的直方图作为特征,这对于前面提到的R包非常可行,但它不是很准确 - 它很难区分海图和蓝色房间的图像。

那该怎么办?这取决于你的最终目标,真的。一种方法是使用各种开源特征提取器之一,将数据保存为文本或其他R可读格式,然后像往常一样在R中进行数据处理。

一个很好的开源C库,用于提取具有cli接口的功能vlfeat。如果您使用此功能,我建议在三个颜色通道上使用密集SIFT提取。然后通过连接的SIFT向量表示每个图像,并应用您最喜欢的聚类技术(可以处理数千个维度的向量)。这几乎不会给你最先进的表现,但这是一个开始。

This page有各种功能提取器的参考实现,但仅限二进制。

注意:根据我的经验,R对于大型高维数据集(大小在GB范围内)不能很好地扩展。我喜欢R to death,但是使用C ++来做这件事。