我正在尝试为我的项目实施SIFT,并且我已经获得了关键点.我尝试将图像的每个关键点的欧氏距离与同一图像的所有关键点一起缩小.碰巧的是,查询图像的1个关键点与数据库图像中其余关键点的距离具有非常相似的值.如何选择最近的邻居以及如何确定这是正确的匹配.
欧几里德距离计算为,对于i = 1至128 sqrt [(pi-qi)^ 2],对于p = 1,数据库中的关键点数量.
任何关于如何进行的想法将非常感激
lig*_*ist 19
我猜你正在尝试使用SIFT进行图像检索,因为你提到你有一个图像数据库,你要将查询图像与之比较.
您应该意识到,将查询图像中的每个SIFT描述符向量与图像数据库中的每个其他descritpor向量进行比较是不可行的,因为这将需要指数数量的比较.目前流行的使用SIFT描述符进行图像检索的方法是从文档检索中借用的词袋模型.
首先,您要做的是给出一个图像,使用SINGLE向量表示它,可以将其与数据库中其他图像的向量进行比较.这与您当前的方法不同,其中每个图像都有许多SIFT描述符向量(每个关键点一个).在词袋(BOW)模型中,您首先需要创建所谓的可视化码本(或有时称为词典).你这样做:
对于数据库中的每个图像,您将创建一个向量v,该向量计算字典中不同要素的
出现频率,因此每个图像将由以下形式的向量表示:<# times feature 1 in dictionary occur, ... feature 2 in dictionary occur..., ..., ... feature k in dictionary occur>即,ak维向量.您可以通过以下方式获取图像的矢量:
4.1.在图像中提取SIFT描述符
4.2.对于图像中的每个SIFT描述符,在代码簿/字典中找到最接近的聚类中心(使用欧几里德距离),并将向量中v的相应计数增加1.
例如,您有一个5簇字典(例如,k = 5),图像有3个SIFT描述符.其中2个最靠近第一个聚类中心,1个最靠近第五个聚类中心.你的矢量v会是v = <2, 0, 0, 0, 1>.由于v计算代表性矢量在图像中出现的次数,v因此有时也称为频率直方图.
在此阶段,您可能希望通过将每个条目除以所有条目的总和来标准化直方图,以便可以使找到的具有非常不同数量的SIFT关键点的图像具有可比性.
现在,为了比较2个图像,您比较这个新的向量v而不是SIFT描述符本身.可以使用欧氏距离(也称为L2距离)进行比较.已经发现使用卡方距离或海林格距离可以改善结果.请参阅本页描述的详细信息.
基本上将图像中的SIFT描述符本身与另一个图像中的SIFT描述符本身进行比较是不可行的,因为您最终会在图像中使用多个SIFT描述符,并且它们的数量会根据您提取它们的方式而有所不同.
您想要的是比较的共同基础,并且通过将描述符与公共代码簿/字典相匹配来在BOW模型中完成,该公共代码簿/字典考虑了图像数据库中的代表性特征.
| 归档时间: |
|
| 查看次数: |
4700 次 |
| 最近记录: |