利用RobHess源码实现SIFT算法及RANSAC去错的图像特征提取匹配及去除错匹配

本文是在VS2010+Opencv2.4.9环境下实现!

首先下载RobHess利用opencv实现SIFT算法源码,在配置好opencv环境的vs2010中实现SIFT特征提取、匹配,在利用K-D树、BBF和RANSAC去除错误匹配,实验结果如图:

去除错误匹配前结果:

去除错误匹配后结果:

下面详细介绍如何在自己的开发环境中实现利用RobHess源码:

1、在VS2010中新建自己的C++工程。在工程根目录内将源码文件添加进去,imgfeatures.c imgfeatures.h kdtree.c kdtree.h minpq.c minpq.h sift.c sift.h utils.c utils.h xform.c xform.h(即除了match.c(实现匹配测试程序) siftfeat.c(实现特征提取测试程序) dspfeat.c(从保存特征点文件中读取特征点并显示)的所有源码文件)

2、在需要使用sift方法的地方添加对应头文件:

#include "sift.h"
#include "imgfeatures.h"
#include "utils.h"
#include "kdtree.h"
#include "xform.h"
#include "minpq.h"
3、取消.c文件的预编译:在“资源管理器”视图下面复选添加的所有.c文件,右键选择“属性”,选取“C/C++”->“预编译头”,在“预编译头”选项中选择“不使用预编译头”。

4、C语法设定:分别打开imgfeatures.h和sift.h等所有包含的头文件中,让所有函数包含在

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif
例如:


    
    
  1. #ifdef __cplusplus
  2. extern "C" {
  3. #endif
  4. #ifndef XFORM_H
  5. #define XFORM_H
  6. #include <cxcore.h>
  7. ..........
  8. #ifdef __cplusplus
  9. }
  10. #endif


5.调用相关函数可能会遇到的报错如下:

(1)编译报错:
1>utils.obj : error LNK2001: 无法解析的外部符号 _va_end
1>utils.obj : error LNK2001: 无法解析的外部符号 _va_start

说好了源码里面有些东西是要改的:在utils.c中#include <stdarg.h>就OK了。

(2)编译报错:

picturecopy1.obj : error LNK2019: 无法解析的外部符号 "int __cdecl kdtree_bbf_knn(struct kd_node *,struct feature *,int,struct feature * * *,int)"

 (?kdtree_bbf_knn@@YAHPAUkd_node@@PAUfeature@@HPAPAPAU2@H@Z),该符号在函数 _main 中被引用

出现上述类似错误将包含的任意一个头文件.h改成.cpp后编译,然后再改成.h即可解决。

(3)注意事情:

下载RobHess源码时候注意要下载VC++版本或C版本,切勿下载linux版本在VS2010环境中调用!程序中遇到相关简单错误可自行解决这里不再赘述。

RobHess源码下载地址:http://download.csdn.net/detail/u011028345/9786644

本文程序源代码下载地址(在VS2010+Opencv2.4.9中打开即可使用):http://download.csdn.net/detail/u011028345/9786656

转载自:https://blog.csdn.net/u011028345/article/details/63697441

本文是在VS2010+Opencv2.4.9环境下实现!

首先下载RobHess利用opencv实现SIFT算法源码,在配置好opencv环境的vs2010中实现SIFT特征提取、匹配,在利用K-D树、BBF和RANSAC去除错误匹配,实验结果如图:

去除错误匹配前结果:

去除错误匹配后结果:

下面详细介绍如何在自己的开发环境中实现利用RobHess源码:

1、在VS2010中新建自己的C++工程。在工程根目录内将源码文件添加进去,imgfeatures.c imgfeatures.h kdtree.c kdtree.h minpq.c minpq.h sift.c sift.h utils.c utils.h xform.c xform.h(即除了match.c(实现匹配测试程序) siftfeat.c(实现特征提取测试程序) dspfeat.c(从保存特征点文件中读取特征点并显示)的所有源码文件)

2、在需要使用sift方法的地方添加对应头文件:

#include "sift.h"
#include "imgfeatures.h"
#include "utils.h"
#include "kdtree.h"
#include "xform.h"
#include "minpq.h"
3、取消.c文件的预编译:在“资源管理器”视图下面复选添加的所有.c文件,右键选择“属性”,选取“C/C++”->“预编译头”,在“预编译头”选项中选择“不使用预编译头”。

4、C语法设定:分别打开imgfeatures.h和sift.h等所有包含的头文件中,让所有函数包含在

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif
例如:


 
 
  1. #ifdef __cplusplus
  2. extern "C" {
  3. #endif
  4. #ifndef XFORM_H
  5. #define XFORM_H
  6. #include <cxcore.h>
  7. ..........
  8. #ifdef __cplusplus
  9. }
  10. #endif


5.调用相关函数可能会遇到的报错如下:

(1)编译报错:
1>utils.obj : error LNK2001: 无法解析的外部符号 _va_end
1>utils.obj : error LNK2001: 无法解析的外部符号 _va_start

说好了源码里面有些东西是要改的:在utils.c中#include <stdarg.h>就OK了。

(2)编译报错:

picturecopy1.obj : error LNK2019: 无法解析的外部符号 "int __cdecl kdtree_bbf_knn(struct kd_node *,struct feature *,int,struct feature * * *,int)"

 (?kdtree_bbf_knn@@YAHPAUkd_node@@PAUfeature@@HPAPAPAU2@H@Z),该符号在函数 _main 中被引用

出现上述类似错误将包含的任意一个头文件.h改成.cpp后编译,然后再改成.h即可解决。

(3)注意事情:

下载RobHess源码时候注意要下载VC++版本或C版本,切勿下载linux版本在VS2010环境中调用!程序中遇到相关简单错误可自行解决这里不再赘述。

RobHess源码下载地址:http://download.csdn.net/detail/u011028345/9786644

本文程序源代码下载地址(在VS2010+Opencv2.4.9中打开即可使用):http://download.csdn.net/detail/u011028345/9786656

猜你喜欢

转载自blog.csdn.net/baidu_38172402/article/details/85699368