2

我正在尝试为我的项目实施 SIFT,并且我已经掌握了关键点。我尝试将图像的每个关键点的欧几里得距离与同一图像的所有关键点进行比较,但按比例缩小。碰巧查询图像的 1 个关键点与数据库图像中其他关键点的距离具有非常相似的值。我如何选择最近的邻居以及如何确定这是正确的匹配。

欧几里得距离计算为,对于 i=1 到 128 sqrt[(pi-qi)^2] 对于 p = 1 到数据库中的关键点数。

任何关于如何进行的想法将不胜感激

4

1 回答 1

21

我猜您正在尝试使用 SIFT 进行图像检索,因为您提到您有一个图像数据库,您正在将查询图像与之进行比较。

您应该意识到,将查询图像中的每个 SIFT 描述符向量与图像数据库中的所有其他描述符向量进行比较是不可行的,因为这将需要指数级的比较。当前使用 SIFT 描述符进行图像检索的流行方法是从文档检索中借用的词袋模型。

首先,您要做的是给定一张图像,使用可以与数据库中其他图像的矢量进行比较的单个矢量来表示它。这与您当前的方法不同,其中每个图像都有许多 SIFT 描述符向量(每个关键点一个)。在词袋 (BOW) 模型中,您首先需要创建所谓的可视码本(或有时称为字典)。您可以通过以下方式执行此操作:

  1. 从图像数据库中选择有代表性的图像
  2. 从 1) 中的图像中收集所有 SIFT 描述符
  3. 使用 K 均值将这些描述符聚类到 k 个聚类中,其中 k 是您设置的数字。这些集群的中心是“视觉词”,即图像数据库中的代表性特征。
  4. 对于数据库中的每个图像,您将创建一个向量 v来计算字典中不同特征出现的频率,因此每个图像将由一个向量表示,其形式为:<# times feature 1 in dictionary occur, ... feature 2 in dictionary occur..., ..., ... feature k in dictionary occur>即,k 维向量。您可以通过以下方式获得图像的此向量:

    4.1。提取图像中的 SIFT 描述符

    4.2. 对于图像中的每个 SIFT 描述符,在码本/字典中找到最近的聚类中心(使用欧几里德距离),并将其在向量中的相应计数增加v1。

    例如,您有一个 5 个集群字典(例如,k = 5),并且一个图像有 3 个 SIFT 描述符。其中 2 个距离第一个聚类中心最近,1 个距离第五个聚类中心最近。您的向量v将是v = <2, 0, 0, 0, 1>. 由于v计算了代表向量在图像中出现的次数,v因此有时也称为频率直方图。

    在这个阶段,您可能希望通过将每个条目除以所有条目的总和来标准化直方图,以便可以比较具有不同数量的 SIFT 关键点的图像。

  5. 现在,要比较 2 个图像,您可以比较这个新向量v而不是 SIFT 描述符本身。可以使用欧几里德距离(也称为 L2 距离)进行比较。已经发现,使用卡方距离或 Hellinger 距离可以改善结果。请参阅本页中描述的详细信息。

基本上将图像中的 SIFT 描述符本身与另一个图像中的 SIFT 描述符进行比较是不可行的,因为您最终会在图像中得到多个 SIFT 描述符,并且它们的数量取决于您提取它们的方式。

您想要的是一个通用的比较基础,这是在 BOW 模型中通过将描述符与一个通用的代码簿/字典匹配来完成的,该代码簿/字典说明了图像数据库中的代表性特征。

于 2011-12-18T04:45:19.677 回答