我试图为我的项目实现SIFT,我已经得到了关键点。我试着取图像的每个关键点的欧几里德距离,用同一图像的所有关键点,但是缩小。碰巧,查询图像的一个关键点与数据库映像中其余的关键点之间的距离具有非常相似的值。如何选择最近的邻居,如何确保这是正确的匹配。
欧几里得距离计算为,对于i=1到128平方吨(pi-qi)^2,p=1对数据库中的关键点数。
任何关于如何进行的想法都是非常感谢的。
发布于 2011-12-17 20:45:19
我猜您正在尝试使用SIFT进行图像检索,因为您提到您有一个图像数据库,用于比较查询图像。
您应该认识到,将查询图像中的每个SIFT描述符向量与图像数据库中的每个其他descritpor向量进行比较是不可行的,因为这需要进行指数级的比较。目前流行的使用SIFT描述子进行图像检索的方法是从文档检索中借用单词模型。
首先,您要做的是给出一个图像,用一个向量表示它,它可以与数据库中其他图像的向量进行比较。这与当前的方法不同,在当前的方法中,每个图像都有许多SIFT描述符向量(每个keypoint一个)。在单词包(弓)模型中,您首先需要创建一个所谓的可视代码本(或有时称为字典)。你这样做是通过:
v
,该向量计算字典中不同特征发生的频率,因此每个图像将由一个以:<# times feature 1 in dictionary occur, ... feature 2 in dictionary occur..., ..., ... feature k in dictionary occur>
形式表示的向量表示,即k维向量。通过以下方法获得图像的此向量:
4.1。提取图像中的SIFT描述符
4.2。对于图像中的每个SIFT描述符,在码本/字典中找到最近的聚类中心(使用欧氏距离),并在向量v
中将其相应的计数增加1。
例如,您有一个5聚类字典(例如k= 5),而图像有3个SIFT描述符。其中2个离第一个星系团中心最近,1个离第5个星系团中心最近。你的向量v
是v = <2, 0, 0, 0, 1>
。由于v
计数代表向量发生在图像中的次数,v
有时也被称为频率直方图。
在这个阶段,您可能希望通过将每个条目除以所有条目的总和来规范直方图,这样就可以将发现的SIFT关键点数目非常不同的图像进行比较。v
,而不是SIFT描述符本身。可以使用欧氏距离(也称为L2距离)进行比较。研究发现,使用X平方距离或Hellinger距离可以改善结果。请参阅本页面中描述的详细信息。基本上,将一个图像中的SIFT描述符本身与另一个图像中的SIFT描述符进行比较是不可行的,因为您将在图像中得到多个SIFT描述符,它们的数量取决于提取它们的方式。
您想要的是比较的共同基础,这是在弓模型中通过将描述符匹配到通用码本/字典来完成的,这说明了图像数据库中具有代表性的特性。
https://stackoverflow.com/questions/4357352
复制相似问题