2010-12-05 40 views
2

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

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

对如何进行任何想法将是非常赞赏

回答

16

我猜你想既然你提到你有哪些您比较查询图像的图像的数据库使用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>即,AK维向量。您可以通过以下方式获取该图像的矢量:

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

    4.2。对于图像中的每个SIFT描述,找到最接近的聚类中心在码本中/字典(使用欧几里德距离),并通过1

    例如增加其相应的计在矢量v,你有一个5集群字典(例如, k = 5)并且图像具有3个SIFT描述符。其中2个距离第一个聚类中心最近,1个距离第五个聚类中心最近。您的矢量v将是v = <2, 0, 0, 0, 1>。由于倍v计数数发生的图像中的代表矢量,v有时也被称为频率直方图。

    在这个阶段,你可能想通过划分,使具有非常不同的数字发现SIFT关键点的图像可以做出可比的所有条目的总和每个条目正常化直方图。

  5. 现在,比较这两个图像,您将比较此新矢量v而不是SIFT描述符本身。可以使用欧式距离(也称为L2距离)进行比较。已经发现使用卡方距离或海林格距离可以改善结果。请参阅page中描述的详细信息。

基本上比较SIFT描述自己的形象那些另一个是不可行的,因为你最终会与图像中的多个SIFT描述,其数量取决于你如何提取它们。

你想要的是一个比较的共同基础,这是在BOW模型中通过将描述符与占图像数据库中代表性特征的通用码书/字典匹配完成的。

+0

非常感谢您对我们的解释清楚明了 – 2018-02-18 12:05:10