使用 ROC 曲线比较 SIFT 和 SURF 的性能

信息处理 图像处理 opencv
2022-01-31 08:43:37

我想将 SIFT 和 SURF 的性能与一些标准图像集进行比较。

经过一番研究,我发现 ROC 曲线是完成这项任务的最佳方法之一。

为了绘制 ROC 曲线,需要 TP 率和 FP 率。

SIFT 和 SURF 的输出是检测到的关键点。如何从这些关键点生成 ROC 曲线?

1个回答

ROC:ROC 曲线被广泛用作分类任务的性能指标。如果数据集中的图像具有类别标签,那么您可以使用监督学习来训练分类器(例如 SVM)。数据集分为训练和测试,并且将来自测试集中图像的分类器的预测类别分数与地面实况标签进行比较。ROC曲线是通过将阈值应用于分类器预测分数并获得每个阈值的(TP,FP)值以生成曲线来获得的。

特征: SIFT 和 SURF 是检测器和图像局部补丁描述符(您也可以在没有检测器的情况下使用它们,现在更成功的方法称为“密集采样”,其中关键点在图像中均匀采样)。

有几种方法,但最流行和推荐首次使用的是基于“词袋”(BoW)模型的方法。原因是:每张图像都有一个标签(暂时忽略多类和多标签场景)和数百个关键点,每个关键点都有一个关联的高维特征向量。在这个阶段,图像的特征是一个矩阵,我们想要一个向量(每个图像的特征空间中的一个点及其标签)。BoW 方法正是为我们完成了这项工作。

BoW 方法:使用无监督学习对训练集中每个图像的所有特征向量进行整理和聚类(忽略标签和位置数据)以计算“字典”。字典是一组聚类质心,最常见的是使用 k-means 聚类计算。字典遵循数据压缩方案来简洁地表示数据分布。

随后,使用其关键点和计算的字典对每个图像进行“编码”。使用矢量量化 VQ,每个关键点与一个字典元素相关联,以计算关键点关联的出现直方图。结果是每个图像现在都有一个特征向量,它是分配给字典元素的关键点的归一化出现直方图。这个编码特征向量的维数就是字典的大小。

每个图像的归一化直方图与标签一起用于训练分类器,然后获取根据 ROC 曲线测量的分类结果。顺序是:

[Images] -> (SIFT/SURF) -> [SIFT/SURF 特征矩阵] -> (collat​​e and cluster) -> [dictionary] -> (BoW histogram by VQ encoding) -> [feature vector, label] ->分类器训练(训练数据)-> 分类器测试(验证/测试数据)-> ROC 曲线。

建议:除了ROC,还有其他性能指标可用,如准确率、平均精度、F1分数等。您的选择取决于图像集、标签比例平衡、分类器的目标等。

网上有大量代码可用于图像的基线词袋模型。Matlab 中使用 Caltech101 数据集的一个示例位于: http ://www.vlfeat.org/applications/apps.html#apps.caltech-101

SIFT 和 SURF 的性能也在 SURF 的原始论文中提供,因此如果您选择使用相同的数据集,您可以比较您的结果。