我在这里有一个一般的 R 问题:
通常使用数码相机,我们往往会点击大量图像,这些图像可能是重复的,在 Picassa 上共享时可能会浪费在线空间,或者在尝试删除一些不需要的图像时会造成开销。
是否可以使用 R 对照片进行聚类?我的意思是 Matlab 中有一些用于图像处理的聚类能力,但是这种功能是否可用,或者是否有任何建议可以在 R 中这样做?
如果有关于这个主题的任何想法,请提供一些想法。
最佳答案
如果你看看 CRAN,有各种(我数了大约 10 个)包来读取图像数据。当然,还有各种软件包可以进行聚类。理论上,您可以将原始图像数据插入到聚类算法中,但在实践中效果不佳。速度上,会很慢,准确度上,恐怕也很差。对图像数据进行聚类的现代技术依赖于从图像中提取的专门特征并对其进行操作。最好的特性取决于应用程序,但一些最著名的是 SIFT、SURF 和 HOG。较旧的技术依赖于图像颜色的直方图作为特征,这对于前面提到的 R 包来说是可行的,但它不是很准确——它很难区分大海的图片和蓝色房间的图片。
那么该怎么办?这取决于你的最终目标,真的。一种方法是使用各种开源特征提取器中的一种,将数据保存为文本或其他 R 可读格式,然后像往常一样在 R 中进行数据处理。
一个不错的开源 C 库,用于提取具有 cli 界面的功能是 vlfeat .如果您使用它,我建议在三个颜色 channel 上使用密集 SIFT 提取。然后用串联的 SIFT 向量表示每个图像并应用您最喜欢的聚类技术(可以处理具有数千维数的向量)。这几乎不会为您提供最先进的性能,但这是一个开始。
This page有各种特征提取器的引用实现,但只有二进制。
请注意:根据我的经验,R 在处理大型高维数据集(大小在 GB 范围内)时不能很好地扩展。我爱死 R,但使用 C++ 来处理这些东西。
关于image - 在 R 中聚类照片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3384794/