在R中对照片进行聚类?

8
我有一个关于R的一般性问题:
通常使用数码相机我们会拍很多重复的图片,这些图片在分享到Picassa时会浪费在线空间,在删除一些不想要的图片时也会带来额外的工作量。
是否可以使用R对照片进行聚类?我的意思是Matlab有图像处理中的一些聚类功能,但是这种功能是否可用或是否有任何建议在R中实现?
如果有任何关于这个话题的想法,请提供一些。
1个回答

11

如果您查看CRAN,会发现有各种(我大约数了10个)读取图像数据的包。当然,也有各种包可以进行聚类。

理论上,您可以将原始图像数据直接插入聚类算法中,但实际上这样做效果不佳。从速度上来说,它会非常慢;从准确性上来说,它可能也会相当糟糕。现代技术用于聚类图像数据,依赖于从图像中提取的专门特征并在此基础上运行。最佳特征是应用程序相关的,但一些最著名的特征包括SIFT、SURF和HOG。较旧的技术依赖于图像颜色的直方图作为特征,并且使用前面提到的R包可以轻松完成,但它的准确性并不高 - 它几乎无法区分海景图片和蓝色房间图片。

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

一个不错的用于提取特征的开源C库是vlfeat,它具有cli接口。如果您使用这个库,我建议在三个颜色通道上使用密集的SIFT提取。然后用串联的SIFT向量表示每个图像,并应用您喜欢的聚类技术(可以处理数千维度的向量)。这可能不会给您带来最新的性能,但这是一个好的开始。

此页面有各种功能提取器的参考实现,但仅限二进制文件。

注意:根据我的经验,R在处理大型、高维数据集(大小在几十亿范围内)方面并不表现出色。我非常喜欢R,但在处理此类内容时,请使用C++。


1
@Neo_Me:我记得有一个Python+C程序,可以基于这些技术对图像进行聚类。据我所知,这是一个为研究目的而设计的一次性项目,但它可能会为灵感提供服务。Yorg - dimatura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接