前面我们对sift算法的流程进行简要研究,那么在OpenCV中,sift是如何被调用的?又是如何被实现出来的了?

特别是到了3.0以后,OpenCV对特征点提取这个方面进行了系统重构,那么整个代码结构变成了什么模样?
在代码中
可以看出目前的结构是基于hess的算法进行的重构。那么首先需要解决的是整体的调用和实现结构问题,然后是hess算法的结构问题,再然后才是具体的算法。需要做的事情很多,一起来研究。
一、OpenCV中sift调用接口和例子
    首先是一定要编译使用contrib版本的OpenCV代码,同时最后设置的时候需要注意,头文件和命名空间要选择正确。
     在最新版本的OpenCV中,已经对特征提取这块的函数进行了统一接口:        
    Mat matSrc = imread("e:/template/lena.jpg");
    Mat gray;  
    Mat draw;
    cvtColor( matSrc, gray, CV_RGB2GRAY );  
    Mat descriptors;  
    std,,),DrawMatchesFlags::DEFAULT);
结果:
    这里也只是简单地把特征点给画了出来,并没有将方向等信息进行表示。下面我们具体看一看sift在OpenCV中是如何实现的。
    OpenCV是开发源代码的,所以这里的代码都是可以自己看到的。那么联调的方式为
二、sift的代码结构解析
注意,sift的原始地址在
 
它的类结构为:
它的构建函数为:
直接返回的是本类的指针
我们去看代码,基本了解结构以后,就直接从我们想要用的那个函数开始“顺藤摸瓜”。我们想要的是detectAndCompute  函数。
    
三、sift的代码具体实现
step0: createInitialImage 将图片转换成为合适的大小
    Mat base = createInitialImage(image, firstOctave < 0, (float)sigma);
    最为简单的一步,据说将输入的图片变化为规整的大小和格式:
//step1: buildGaussianPyramid 构建高斯金字塔

buildGaussianPyramid(base, gpyr, nOctaves);

//step2: buildDoGPyramid 构建高斯差分金字塔

buildDoGPyramid(gpyr, dogpyr);

//step3: findScaleSpaceExtrema removeDuplicated 寻找并筛选尺度空间特征值

findScaleSpaceExtrema(gpyr, dogpyr, keypoints);

注意这里将特征值的初略寻找和细化寻找放在了一起(一个循环)
其中
其中二
注意:
 
//step4: calcDescriptors 计算特征值

        calcDescriptors(gpyr, keypoints, descriptors, nOctaveLayers, firstOctave);

三、简单小结
       这里也只是将sift的代码挑了出来,简单进行了分析。应该说OpenCV的代码本身才是其最为精髓的地方,无论是代码背后的理论,还是代码实现的技术,以及各种提升速度的方法,都对于我们写出出色的图像处理算法和运用很有帮助。
       而学习的最好方法就是去实现创造。OpenCV本身就是开源的项目,基于现有的这么多的资源,在图像处理广阔的领域去进行创新,不断巩固提升自己的能力。与大家共勉!

SIFT在OpenCV中的调用和具体实现(HELU版)的更多相关文章

  1. opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较

    opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...

  2. (原+转)Eclipse中Android调用OpenCv

    大部分都是参考下面的网址,如果感觉看起来不舒服,可以直接查看原网址.最后遇到了一点问题: Description      Resource Path Location   Type E:/~\cod ...

  3. OpenCV中IplImage图像格式与BYTE图像数据的转换

    最近在将Karlsruhe Institute of Technology的Andreas Geiger发表在ACCV2010上的Efficent Large-Scale Stereo Matchin ...

  4. 混合高斯模型:opencv中MOG2的代码结构梳理

    /* 头文件:OurGaussmix2.h */ #include "opencv2/core/core.hpp" #include <list> #include&q ...

  5. 【OpenCV】OpenCV中GPU模块使用

    CUDA基本使用方法 在介绍OpenCV中GPU模块使用之前,先回顾下CUDA的一般使用方法,其基本步骤如下: 1.主机代码执行:2.传输数据到GPU:3.确定grid,block大小: 4.调用内核 ...

  6. opencv通过dll调用matlab函数,图片作为参数

    [blog 项目实战派]opencv通过dll调用matlab函数,图片作为参数                   前文介绍了如何“csharp通过dll调用opencv函数,图片作为参数”.而在实 ...

  7. opencv中的Bayes分类器应用实例

    转载:http://blog.csdn.net/yang_xian521/article/details/6967515 PS:很多时候,我们并不需要特别精通某个理论,而且有的时候即便你非常精通,但是 ...

  8. OpenCV中的SVM參数优化

    SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最经常使用的是用于分类,只是SVM也能够用于回归,我的实验中就是用SVM来实现SVR(支持向量回归). 对于功能这么强的算法,opencv ...

  9. opencv-python与c++ opencv中的一些区别和基础的知识

    使用opencv-python一段时间了,因为之前没有大量接触过c++下的opencv,在网上看c++的一些程序想改成python遇到了不少坑,正好在这里总结一下. 1.opencv 中x,y,hei ...

随机推荐

  1. 11.20 HTML及CSS

    <div>用于分组HTML元素的块级元素HTML表单,用于收集不同类型的用户输入<input type='radio'>:定义了表单的单选框按钮<input type=' ...

  2. hadoop 2.x HA(QJM)安装部署规划

    一.主机服务规划: db01                                             db02                                      ...

  3. array string mysql IN LIKE

    $ids = $_POST['ids']; $str = implode(',',$ids); $str = '('.$str.')'; $db_region->region_del($str) ...

  4. PHP之文件上传

    1.$_FILES['myFile']['name'] 上传文件的原始名称 2.$_FILES['myFIle']['type'] 上传文件的mime-type 3.$_FILES['myFile'] ...

  5. little_rockie

    https://www.cnblogs.com/nxld/p/6058591.html

  6. curl获取公网IP地址

    curl ip.cn curl cip.cc https://blog.csdn.net/orangleliu/article/details/51994513 https://blog.csdn.n ...

  7. 《Nginx - location配置》

    一:Location 作用 - location 定位 ,也就是可以通过不同URL进行定位,可以很大的增加它配置的灵活性. 二:相关变量 示例: http://192.168.27.27/xxxx $ ...

  8. oracle查询表结构语句

    select o.table_name, tmp.comments, o.COLUMN_NAME, t.comments, o.DATA_TYPE || CASE TRIM(o.DATA_TYPE) ...

  9. mysql 数据表操作 存储引擎介绍

    一 什么是存储引擎? 存储引擎就是表的类型. mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制 ...

  10. WordPress跳过语言包加载提高效率

    WordPress 加载语言包是需要花费 0.1-0.5 秒不等的时间,所以如果 WordPress 前台可以不加载语言包,而主题中的一些文本直接写成中文,就可以加快网站的速度,并且又能保证后台的中文 ...