问题标签 [cbir]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
600 浏览

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

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

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

我计算我与 BF 的匹配,我假设:

  • matches=bf.knnMatch(descriptor1, descriptor2, k=2)是我的TP+FP
  • 用 ration test 找到的匹配是我的 TP

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

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

我想对具体实现有一些帮助,例如在图像匹配的具体情况下这些数据在哪里。

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

0 投票
0 回答
106 浏览

python - 使用带有分类算法的筛选描述符

我正在尝试使用Oxford Buildings Dataset制作一个简单的图像搜索引擎 首先我使用 SIFT 来提取特征。基本上我迭代了数据集中的每一个图像,并为每个人生成关键点和描述符。然后,我选择一张随机图片作为查询并使用 bf.match 方法并找到匹配的关键点找到数据集中图像之间的距离和查询。但是在那之后-我想这是我真正出错的部分-我计算了匹配关键。这个想法是哪张图片具有最匹配的关键点是与查询图像最相似的图片。

我的问题是在计算关键点后如何应用任何分类方法?

0 投票
0 回答
140 浏览

opencv - 我的 CBIR 系统结果如此糟糕是否正常?

我正在使用 Corel 数据库(100 类 100 张图片)构建一个 CBIR 系统。我已经实现了一些“当前”(非深度学习)描述符(Sift、Surf、HOG、颜色直方图、HSV 直方图、LBP 直方图、ORB、图像的 Hu 矩、GLCM 描述符(对比度、同质性......))。此外,我为 Sift、Surf 和 ORB 实现了 FlannMatcher 和 BFMatcher;compareHistOpenCV 的函数及其所有直方图和 NORM1,2,INF 倾倒向量 (Hu & GLCM) 的四个距离。

然而,我得到了非常糟糕的结果和糟糕的 R/P 曲线。更准确地说,它似乎真的取决于查询。例如,对于熊来说,使用 GLCM 达到了最好的结果(前 50 名),我得到了这个:

GLCM 结果

另一方面,当查询是一张扑克牌(这很简单)时,会给出相当好的结果,至少对于某些算法,如 Sift。

筛选结果

我想知道结果如此糟糕和多变是否正常?实际上,我只是使用了 OpenCV 函数,所以我看不出我可能错在哪里......

对某些描述符进行加权求和是否相关?只是通过对距离进行归一化,对它们进行加权,然后对全局总和进行排序?

还有另一种方法可以“简单地”改善结果吗?简单地说,我的意思是在 OpenCV 中保持相同的描述符。

谢谢

0 投票
1 回答
173 浏览

python - 如何在没有基本事实的情况下评估 CBIR 系统?

作为我的数据库,我有一堆相同类别的图像——这意味着我只有一个类别的图像。

在实现 CBIR(通过直方图提取特征并通过欧几里得计算距离 - 非常幼稚的方法,没什么花哨的)之后,我得到了 25 个最佳匹配结果。现在我想评估它们。

所有评估指标,如平均精度和精度召回都需要地面实况数据,而我没有。现在我只拍一张图像并计算相似度。

我如何在没有任何基本事实数据的情况下进行评估?

0 投票
1 回答
792 浏览

python - 如何规范化特征和样本?

我正在实现基于直方图、HOG 和局部二进制模式的特征提取的基于内容的图像检索 (CBIR)。这些(标准化)特征提取中的每一个都单独存储在csv文件中,以在进一步的步骤中计算距离。该文件如下所示:

ndarray沿着整个展平的阵列展平和归一化。哪个应该是样本标准化(我不确定,所以请纠正我)

现在,基于特征的标准化会是什么样子?特别是如果我真的没有“命名”列?我应该沿着(未展平的)图像标准化还是稍后在所有图像的展平阵列上按列标准化?

文献只是说,特征明智是常用的,但它仍然取决于应用程序。CBIR 似乎对此非常模糊。

0 投票
4 回答
1173 浏览

tensorflow - 在本地计算机上反向图像搜索(用于图像重复)

我有一堆从 pdf 中提取的劣质照片。我认识的人在她的电脑 (Mac) 上某处有高质量的照片,但我的理解是很难找到它们。

我想

  • 循环浏览每张质量差的照片
  • 使用每张劣质照片作为查询图像并使用此人的计算机作为数据库执行反向图像搜索以搜索更高质量的图像
  • 并在一个目标文件夹中创建每个高质量图像的副本。

示例伪代码

我需要执行一次此操作。我正在寻找一种工具、github 存储库或库,它们可以执行此功能,而不是深入了解基于内容的图像检索。


reddit上有一个帖子,有人试图做类似的事情

imgdupes是一个似乎几乎可以实现这一目标的程序,但我不想删除重复项,我想将最高质量的重复项复制到目标文件夹


更新

给我以前的图像处理教授发了电子邮件,他给我发了这个

在我的脑海中,没有什么是开箱即用的。

这里没有保证的解决方案,但您可以缩小搜索空间。您需要一个小程序来输出两个图像之间的 MSE 或 SSIM 相似性索引,然后编写另一个程序或 shell 脚本来扫描硬盘驱动器并计算硬盘驱动器上的每个图像与每个查询图像之间的 MSE,然后检查具有最高 X% 相似度分数的图像。

类似的东西。仍然不能保证找到你想要的一切。如果低质量图像的像素尺寸与高质量图像不同,则必须进行一些图像缩放以获得相似度指数。如果劣质图像具有不同的纵横比,那就更糟了。

所以我认为这并不难,但也不是微不足道的。难度部分取决于低质量图像中损坏的性质。


更新

我写的 Github 项目实现了我想要的

0 投票
1 回答
27 浏览

image-processing - 在我的情况下,有什么方法可以使用 CBIR 和 SIFT 构建 ML 模型进行图像比较?

我有我正在做的这个项目。该项目的一部分涉及多次测试运行,在此期间会截取应用程序窗口的屏幕截图。现在,我们必须确保在连续运行之间截取的屏幕截图匹配(除非进行一些允许的更改)。这些更改可能是我们正在截屏的应用程序窗口中的文件名、日期、不同的徽标等。

我有一个绝妙的想法来自动化执行此检查的过程。基本上我的想法是这样的。如果我能以某种数学方式量化第 N-1 次运行和第 N 次运行的屏幕截图之间的差异,我可以创建一个二进制标记数据集,将某种特征向量映射到一个标签(0 表示通过,1 表示失败,如果图像没有充分匹配)。所有这一切的原因是,我的标记数据将有助于使模型了解可以接受的更改规模,因为可以接受的类型太多了。

现在假设我可以访问大量我精心标记的数据,数以千计。到目前为止,我已经尝试在 opencv 中使用 SIFT 使用关键点匹配来确定图像之间的相似度得分。但这不是一个智能的学习过程。有什么方法可以从 SIFT 中获取一些信息并将其用作我的数据集中的 x 值?

以下是我的问题:

  1. 我需要什么信息作为我的 x 值?它必须是代表两个图像之间差异的东西。那么也许来自 SIFT 的特征向量之间的区别?当这些向量的尺寸略有不同时,我该怎么办?

  2. 我是否在考虑使用 SIFT 的正确轨道上?我应该去别处看看,如果是的话,去哪里?

谢谢你的时间!

0 投票
1 回答
226 浏览

opencv - 使用 SIFT + 词袋比较图像的相似性

我正在尝试编写一个程序来识别目录中的哪些图像与查询图像相似,查询图像与目录中的图像相似但通常略有不同。目录中有数千张图片。这个问题与比较图像相似度的简单快速方法有关

我有几个目标:

  • 使用查询图像,识别图像目录中的相似图像
    • 查询图像可能与目录中的图像略有不同。这些更改可能包括被裁剪的图像和不同的图像质量。
  • 该程序应该非常快(最多能够在几秒钟内识别出相似的图像)

我知道这是一个需要大量研究的问题。“云、移动和边缘的实用深度学习”中的“构建反向图像搜索引擎:理解嵌入”一章解释了这个问题的一些方法。

我开始使用 SIFT(尺度不变特征变换)+词袋方法编写一个程序来做到这一点。我在这方面没有太多经验。我编写的程序适用于相同的图像,也适用于稍微相似的图像,但是一旦图像变得更加不同,它就不再检测到正确的图像。

我有两个问题:

  1. 我使用的方法是否很好,如果没有,是否有更好的方法?
  2. 我的程序中是否有任何内容可能导致搜索对不同图像不准确?

这是程序的工作方式:

  1. 遍历每个图像,使用 SIFT 获取其描述符,并构建这些描述符的列表。
  2. 使用 k-means,找到描述符列表的质心。这就是“字典”。
  3. 再次遍历每个图像,并为每个图像的描述符和质心获取 k 近邻 knnMatch,其中 k=1。使用每个匹配项为每个图像创建一个直方图,使用 match.trainIdx。
  4. 通过将每个“单词”的计数除以“单词”的总和来标准化每个图像的直方图。
  5. 使用 knnMatch 和 k=1 与查询图像的描述符和质心。浏览匹配项并创建标准化直方图。
  6. 对查询图像的直方图以及数据库中所有图像的直方图使用 knnMatch,k=1。这将创建一个匹配列表,按与查询图像的相似性排序。
0 投票
0 回答
45 浏览

python - 如何访问安装在 google colab online 的 apache solr 服务器?

我正在将 Google Colab 用于基于内容的图像检索(CBIR)系统的 apache solr 8.5.0 服务器实现,solr 显示其端口(8983),除此之外,我尝试了几个 IP 地址来访问 solr 服务器,但是失败的。请帮助我如何访问 apache solr 服务器?它安装在 Google Colab 平台上。

! /content/drive/MyDrive/solr-8.5.0/bin/solr start -c -force
输出:端口 8983 已被另一个进程使用 (pid: 6432) 请使用 -p 选项选择不同的端口。

输出:创建的集合 'lire_mscoco_val2014' 有 1 个分片,1 个副本,配置集 'lire_mscoco_val2014'

输出:当我们使用 localhost ip 时,出现以下响应,第二次我们添加 google colab url,然后给出连接超时错误。

0 投票
0 回答
110 浏览

python - 如何使用 SIFT/评估 SIFT 结果计算两个图像的相似度?

我想使用 SIFT 计算两个图像之间的相似性。我已经设法计算匹配并将其可视化,如下图所示。 在剧烈旋转的埃菲尔铁塔和普通埃菲尔铁塔之间进行筛选。 我有一张埃菲尔铁塔的图片和另一张经过大量修改的埃菲尔铁塔的图片。对我来说,这个匹配看起来不错,但我不知道使用什么指标、方程或算法来计算相似度或评估匹配。

我正在使用以下代码来计算匹配。

我试过了:

但是sift_scoresift_acc都给出了不好的结果。

评估者必须考虑:缩放、旋转和平移

有任何想法吗?