opencv - 计算召回率和精度以评估 CBIR 系统

标签 opencv sift confusion-matrix precision-recall cbir

我使用 SIFT 结合其他基于特征的算法(使用 OpenCV 和 Python3)实现了 CBIR,现在我必须评估它们的组合(即 SIFT/SURF、ORB/BRISK...)的执行情况。

我发现我可以使用 Precision |TP|/(|TP| + |FP|) 和召回 |TP|/(|TP| + |FN|)。我知道TP是正确的positive,FN是没有返回的相关文档,FP是返回但不相关的文档

我计算了我与 BF 的匹配度并且我推测:

  • matches=bf.knnMatch(descriptor1, descriptor2, k=2) 是我的 TP+FP
  • 配比测试匹配的就是我的TP

如何计算我的 FN?例如相关但未返回的匹配项?

请注意,我只是提出一个假设,所以如果我错了,请纠正我。

我想在具体实现上得到一些帮助,比如图像匹配的具体案例中这些数据在哪里。

或者,您能否建议我如何评估基于特征检测和描述的 CBIR 系统?

最佳答案

我终于找到了我的问题的答案,也许它可以帮助别人!

信息检索上下文和分类上下文中的 PRECISION 和 RECALL 计算存在差异。

对于信息检索:

precision = (relevant documents + retrieved documents) / retrieved documents
recall = (relevant documents + retrieved dcuments) / relevant documents

对于分类上下文,可以说混淆矩阵:

precision = TP/TP+FP
recall = TP/TP+FN

例如,在我的例子中,无法使用混淆矩阵。

关于opencv - 计算召回率和精度以评估 CBIR 系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49511941/

相关文章:

c++ - OpenCV:归一化太慢或者我做错了?

Python:绘制筛选点返回图片上的点

python - 我可以按混淆矩阵中的单元格来打开文件吗?

python - sklearn.model_selection.cross_val_score 与在混淆矩阵上进行的手动计算有不同的结果

Raspberry Pi 上的实时 OpenCV HOG 算法

c# - 检测卡车车轮

python - 如何在 Windows 中使用 ffmpeg 抓取笔记本电脑网络摄像头视频

python - SIFT feature_matching点坐标

python - OpenCV Python 和 SIFT 功能

python - 渲染混淆矩阵