我正在尝试制作一个程序,可以从图像数据集中找到相似的图像。步骤是
- 提取所有图像的 SURF 描述符
- 存储描述符
- 对存储的描述符应用 knn
- 使用 kNN 将存储的描述符与查询图像描述符进行匹配
现在每个图像 SURF 描述符将存储为分层 k 均值树,现在我是否将每个树存储为单独的文件,或者是否可以使用所有图像描述符构建某种单一树,并在将图像添加到数据集时进行更新。
这是我的程序所基于的论文。 http://www.ijest.info/docs/IJEST10-02-03-13.pdf
您确定要使用 SURF 描述符来实现吗?我自己正在开发一个类似的应用程序,它基于this http://www.wisdom.weizmann.ac.il/~bagon/CVspring07/files/scalable.pdf纸(Nister,Stewenius)和他们swearSIFT 描述符是可行的方法。但是,我想您也可以使用任何其他描述符来做到这一点。
查看您引用的论文,它比我链接到的工作更新,但它没有引用尼斯特纸业 http://www.wisdom.weizmann.ac.il/~bagon/CVspring07/files/scalable.pdf or 这项工作 http://web.cs.swarthmore.edu/~turnbull/cs97/f08/paper/sivic03.pdf(Sivic,Zisserman),据我所知,这是所有基于内容的图像检索问题的基础。
为了更好地理解问题,在开始实现之前,我首先阅读了西瑟曼·西维奇 http://web.cs.swarthmore.edu/~turnbull/cs97/f08/paper/sivic03.pdf了解系统背后的总体思路。他们仅在从所有特征中提取所有 SIFT 描述符后应用简单的聚类。他们使用两种不同类型的特征来提高准确性,形状适应(以角状特征为中心)和最大稳定(对应于高对比度的斑点 - 您可以在this http://cmp.felk.cvut.cz/~matas/papers/matas-bmvc02.pdf论文(Matas 等人))。他们的系统的可扩展性并不是那么好,因为每个功能都是直接存储的,但是他们引入了反向文件的概念,这是一种来自文本分析的技术(您可以阅读它的基础知识)here http://www.cs.rutgers.edu/~mlittman/courses/ml03/iCML03/papers/ramos.pdf),这显着简化了查找过程。
完成这项工作后,我建议继续尼斯特·斯图文纽斯 http://www.wisdom.weizmann.ac.il/~bagon/CVspring07/files/scalable.pdf他们在 L 级中引入了分层 k 均值聚类的概念,用于存储特征以及后期图像数据库的搜索。现在,除非我非常非常错误,否则你不会存储each描述符作为一个单独的树。相反,您可以根据现有特征来创建树(其中每个级别中的聚类中心实际上是每个聚类的代表性“中心”特征)。一旦树构建到所需的深度(他们建议 6 个级别上有 10 个簇),最后一层的簇中心就代表极少数的特征 - 因此,您实际上可以忘记所有原始特征! (或者至少是它们的描述符)。每个原始特征都可以由相应的聚类中心表示,并且对于每个图像,您只需要存储有关它包含哪些聚类中心(特征)的信息,而不是描述符。这更容易,因为你只需要存储一个或两个整数每个功能 - 对其通过树的路径进行编码。最简单的查看方法是,如果您只编码该特征在每个级别所属的簇的数量 - 其中有 10 个(4 位) - 每个级别(其中 6 个,4*6
另外,如果您用于构建词汇树的图像具有代表性(例如,您正在处理开放空间图片的数据集,并且仅根据图像的代表性部分构建树,但您知道没有工业图片)工厂工作场所在数据集的其余部分),您可以非常非常快地添加新图片。要在数据集中添加任何新图片,您唯一需要做的就是确定哪个计算出的聚类中心最能代表图像特征(如前所述,最后一级聚类中心非常精确)并存储有关该聚类中心的信息。聚类中心(前面提到的整数)。查找聚类中心应该非常快 - 6 个级别中的每个级别只有 10 次比较。
希望有一天这对某人实际上有用,因为这个问题已经存在一年多了。 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)