致谢:基础框架来源BoW,开发版本在此基础上进行,已在Ubuntu、OS X上测试通过,Windows需要支持c++11的编译器(VS2012及其以上)。

使用

代码下载地址:bag-of-words-stable-version,这个是稳定版,上层目录里的开发版不要下载,那是我添加测试新模块所用的。

编译

修改Makefile文件,如果你的系统支持多线程技术,将

CFLAGS = -std=c++11

修改为

CFLAGS = -std=c++11 -fopenMP # if openMP accesses, using this

修改完上面后,再修改编译所需的OpenCV和cppsugar,即

INCPATH = -I/usr/local/include -I/Users/willard/codes/cpp/opencv-computer-vision/cpp/BoVW/cppsugar
LIBPATH = -L/usr/local/lib

/usr/local/include/usr/local/lib分别是OpenCV所在的包含头文件目录路径和库目录路径,修改为你本机所在的目录即可。后面的cppsugar目录同样换成你本机的目录。 修改。这些修改完成后,执行下面命令进行编译:

make

编译后即可在所在目录生成可执行文件。

生成图库列表文件

对于待检索的图像库imagesDataSet,执行下面命令

python imgNamesToTXT.py -t /Users/willard/Pictures/imagesDataSet

上面执行后生成一个imageNamesList.txt的文件,该文件中包含的是每幅图像的路径及其图像文件名。

建立索引

执行下面命令,会完成特征提取、生成词典、量化生成bag of word向量:

./index imageNamesList.txt

上面命令执行玩,会生成两个文件bows.datdict.dat,分别存放的是图像库每幅图像的bag of word向量以及词典。

查询图像

按下面命令进行查询

./search /Users/willard/Pictures/first1000/ukbench00499.jpg imageNamesList.txt

其中/Users/willard/Pictures/first1000/ukbench00499.jpg是查询图像,执行完后,会生成一个result.html的文件,应为要显示检索结果,所以这里采用的是用html页面的方式显示检索结果的,用浏览器打开即可。

批量测试

为了评价检索的效果,可以使用ukbenchScores.cpp计算在ukbench图像库上的NS score(NS分数),下面是在ukbench1000张图像上计算的NS score:

Ukbench first 1000 images, the NS-scores: 3.358, with tf*idf and histogram intersection kernel distance.

Ukbench first 1000 images, the NS-scores: 3.602, with tf and histogram intersection kernel distance.

Bag of words原理

关于bag of words的原理,可以查阅我的博文BoW图像检索Python实战和Bag of Words模型。注意,该框架中采用的相似性度量方式是直方图相交(histogram intersection kernel)的方法,测试发现直方图相交的方法要比用余弦距离度量的方式效果更好,但计算速度较慢。

开发版本bag-of-words-dev-version中加入了逆文档词频以及RANSAC重排,待效果达到预期后,会添加到稳定版中。

This is a test for \KaTeXKATEX, a^2 + b^2 = c^2a​2​​+b​2​​=c​2​​, if you want it in display style, try:\text{e} = \lim_{n\to\infty} \left(1+\frac{1}{n}\right)^n,e=​n→∞​lim​​(1+​n​​1​​)​n​​,and\pi = \lim_{k=0}^\infty \, \frac{1}{16^k} \left( \frac{4}{8k+1} - \frac{2}{8k+4} - \frac{1}{8k+5} - \frac{1}{8k+6} \right).π=​k=0​lim​∞​​​16​k​​​​1​​(​8k+1​​4​​−​8k+4​​2​​−​8k+5​​1​​−​8k+6​​1​​).

c = \pm\sqrt{a^2 + b^2}c=±√​a​2​​+b​2​​​​​

e^x = \lim_{n\rightarrow \infty} \sum_{t=0}^{n} ( \frac{1}{t!}\cdot x^t )= \sum_{t=0}^{\infty} (1 + x + \frac{1}{2!}x^2+\frac{1}{3!}x^3+ ... + \frac{1}{t!}\cdot x^t)e​x​​=​n→∞​lim​​​t=0​∑​n​​(​t!​​1​​⋅x​t​​)=​t=0​∑​∞​​(1+x+​2!​​1​​x​2​​+​3!​​1​​x​3​​+...+​t!​​1​​⋅x​t​​)
from: http://yongyuan.name/blog/bag-of-words-cpp-implement.html

Bag of Words cpp实现(stable version 0.01)相关推荐

  1. BoW词袋模型Bag of Words cpp实现(stable version 0.01)

    致谢:基础框架来源BoW,开发版本在此基础上进行,已在Ubuntu.OS X上测试通过,Windows需要支持c++11的编译器(VS2012及其以上). 使用 代码下载地址:bag-of-words ...

  2. myeclipse 2015 stable 2.0连接mysql URL错误

    myeclipse 2015 stable 2.0连接mysql URL错误 Error while performing database login with the mysql driver: ...

  3. Myeclipse 2015 stable 2.0 完美破解方法

    以前写了一篇<Myeclipse 2015 stable 1.0 完美破解方法>,现在跟新一下Myeclipse 2015 stable 2.0 破解方法,此方法来源于贴吧的一篇文章:ht ...

  4. 成功解决Future Warning: The sklearn.neighbors.dist_metrics module is deprecated in version 0.22 and wil

    成功解决Future Warning: The sklearn.neighbors.dist_metrics module is deprecated in version 0.22 and wil ...

  5. 成功解决This module was deprecated in version 0.18 in favor of the model_selection module into which all

    成功解决This module was deprecated in version 0.18 in favor of the model_selection module into which all ...

  6. 成功解决sklearn\grid_search.py:42: DeprecationWarning: This module was deprecated in version 0.18 in fav

    成功解决sklearn\grid_search.py:42: DeprecationWarning: This module was deprecated in version 0.18 in fav ...

  7. 成功解决sklearn\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 i

    成功解决sklearn\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 i ...

  8. 【重要更新】MyEclipse 2017 Stable 1.0发布|附下载

    2019独角兽企业重金招聘Python工程师标准>>> [企业专享]企业级IDE MyEclipse购多套多年授权低至7折!活动详情>> MyEclipse个人开发者专享 ...

  9. 搜索引擎web spam类型及防治策略(version 0.9)

    /*版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 .*/ 搜索引擎web spam类型及防治策略(version 0.9) 中科院软件所 张俊林 url:http ...

最新文章

  1. laravel 登录失效
  2. Mysql8 查询事务隔离级别
  3. 首记,一种新的企业信息化平台开发方案——AgileEAS.NET框架
  4. c转义字符以及常见问题和解决方法||c中的注释
  5. pyqt5教程12:拖放功能
  6. Arrays.deepToString的使用
  7. Avast I Love You
  8. Echarts数据可视化event图表事件的相关操作,开发全解+完美注释
  9. 【渝粤教育】电大中专微生物与寄生虫基础_1作业 题库
  10. 【UCOSIII操作系统】软件定时器篇
  11. 学Java开发需要考什么证书?
  12. arcgis字段计算器赋值_ArcGIS中62个常用应用技巧汇总【必须收藏】
  13. matlab插值:拉格朗日插值
  14. allegro中差分对设置
  15. cannot import name ‘_validate_lengths‘ from ‘numpy.lib.arraypad‘错误
  16. 企业管理信息系统成功实施的四个阶段
  17. 二十三、正则表达式中的“r”含义
  18. 少年,离regional还有两个周
  19. C程序设计 谭浩强 第十章
  20. 企业内部流程运转受阻?免费又高效不愧是它

热门文章

  1. java function获取参数_「Java容器」ArrayList源码,大厂面试必问
  2. 实战并发编程 - 10Guarded Suspension模式在BlockingQueue源码中应用
  3. Algorithms_基础数据结构(02)_线性表之链表_单向链表
  4. 白话Elasticsearch34-深入聚合数据分析之案例实战bucket嵌套实现颜色+品牌的多层下钻分析
  5. 重置linux桌面,Ubuntu 18.04小贴士:重置Gnome桌面与使用隐藏的屏幕录像工具
  6. (一) 自带刷新的列表-LtRecyclerView v2.x版本(LtAdapter)(基本使用)
  7. ROS知识【13】:ubuntu下安装eclipse-CDT【非installor】
  8. python语言:烟花效果实现
  9. halcon的算子清点: Chapter 5 滤波
  10. js 判断变量是否有值返回bool_有没有办法可以获得javascript函数返回值里的bool值,代码如下:...