/*

如果给两张图片,中间有相似点。要求做匹配。怎么做。我现在能讲么?
 
比如给了两幅图片,先求出sift点。
 
尺度空间极值检测。高斯模糊
关键点定位
关键点方向确定
关键点描述
 
kdtree 和 bbf 最优节点优先算法
进行两幅图片特征点的匹配,会涵盖一些不正确的匹配点
 
ransac 随机抽样一致,消除不合适的点
把需要匹配的点,限定到某一个正确的地方
 
根据这种匹配的结果。确定两幅图相交的某一个点。
 
比如两幅图的重叠方式是,左上右下的方式,那么在不重叠的地方,按照左边图像写入,然后全黑。
重叠地方,按照权值进行平滑过渡。左下角的部分涂黑,右下角不重叠的地方按照右图写入。
 

*/

慢慢来:

三组共六个文件

imgfeatures.h 和imgfeatures.c 部分

枚举类型1:

feature_type

枚举类型2:

feature_match_type

两组特征颜色

#define FEATURE_OXFD_COLOR CV_RGB(255,255,0)
#define FEATURE_LOWE_COLOR CV_RGB(255,0,255)

述子长度

#define FEATURE_MAX_D 128

特征结构

feature

四个函数:

1、导入特征点

2、导出特征点

3、绘画特征点

4、计算两个述子之间的欧氏距离。

在描述特征点导入时:http://www.robots.ox.ac.uk:5000/~vgg/research/affine/index.html

有这样一个说明

然后是实现

导入特征点时:

从文件中读取特征点,文件的组织格式应该是符合牛津视觉几何组的编码形式,或者符合大卫罗尔的编码格式。type这个地方的参数如果是 FEATURE_TYPE 那么她就会被按照牛津特征输入文件的方式对待,也就是牛津视觉几何组,详见http://www.robots.ox.ac.uk:5000/~vgg/research/affine/index.html

断点:仿射协变特征

概述:这个页面针对在任意图片中探测仿射不变特征的问题和区域探测述子的性能评估。【应该就是述子如何描述仿射不变特征,以及述子性能好坏的评估】

公开:

  区域探测:

http://www.robots.ox.ac.uk:5000/~vgg/research/affine/det_eval_files/mikolajczyk_ijcv2004.pdf【尺度仿射兴趣点不变检测】

http://www.robots.ox.ac.uk:5000/~vgg/research/affine/det_eval_files/matas_bmvc2002.pdf【最稳定极值区域】

http://www.robots.ox.ac.uk:5000/~vgg/research/affine/det_eval_files/tuytelaars_ijcv2004.pdf【基于仿射不变区域匹配广域分割场景】

http://www.robots.ox.ac.uk:5000/~vgg/research/affine/det_eval_files/kadir04.pdf【放射不变显著区域检测】

All Detectors - SurveyT. Tuytelaars and K. Mikolajczyk, Local Invariant Feature Detectors - Survey. In CVG, 3(1):1-110, 2008.【学名是这个,如果找到的话,求联系~~~】

然后这个第五个文献找不到,希望高玩们可以一同帮忙找下

  区域描述:

http://www.robots.ox.ac.uk:5000/~vgg/research/affine/det_eval_files/lowe_ijcv2004.pdf【来自尺度不变关键点的独特图像特征】

  性能评估:

http://www.robots.ox.ac.uk:5000/~vgg/research/affine/det_eval_files/vibes_ijcv2004.pdf【仿射区域检测器们的对比】

http://www.robots.ox.ac.uk:5000/~vgg/research/affine/det_eval_files/mikolajczyk_pami2004.pdf【本地述子性能评估】

软件:

  既没有linux,也没有matlab 就不想弄了。。。

测试数据:

  下载一下就可以了

imgfeatures.c 就是一些实现的过程。

然后看下sift.h这个里面的东西也很简洁,忽然觉得这些东西有点儿像java里面的public函数。.c里面的倒都比较像private函数只能它里面使用。

看下sift.h 里面都有什么

一大堆变量的声明和两个函数

extern int sift_features(IplImage* img, struct feature** feat);

extern int _sift_features(IplImage* img, struct feature** feat, int intvls,
double sigma, double contr_thr, int curv_thr,
int img_dbl, int descr_width, int descr_hist_bins);

并且好像在后面还是调用的关系,毕竟两个的名字十分相像。然后点点点的发现,就是调用的同一个函数。

所以sift的两个文件,就是用来找到sift特征点的。不过要怎么找寻呢。接下来可能就要看这个函数的内容了。

int _sift_features(IplImage* img, struct feature** feat, int intvls,
double sigma, double contr_thr, int curv_thr,
int img_dbl, int descr_width, int descr_hist_bins)
{
IplImage* init_img;
IplImage*** gauss_pyr, *** dog_pyr;
CvMemStorage* storage;
CvSeq* features;
int octvs, i, n = ; /* check arguments */
if (!img)
fatal_error("NULL pointer error, %s, line %d", __FILE__, __LINE__); if (!feat)
fatal_error("NULL pointer error, %s, line %d", __FILE__, __LINE__); /* build scale space pyramid; smallest dimension of top level is ~4 pixels */
init_img = create_init_img(img, img_dbl, sigma);
octvs = log(MIN(init_img->width, init_img->height)) / log() - ;
gauss_pyr = build_gauss_pyr(init_img, octvs, intvls, sigma);
dog_pyr = build_dog_pyr(gauss_pyr, octvs, intvls); storage = cvCreateMemStorage();
features = scale_space_extrema(dog_pyr, octvs, intvls, contr_thr,
curv_thr, storage);
calc_feature_scales(features, sigma, intvls);
if (img_dbl)
adjust_for_img_dbl(features);
calc_feature_oris(features, gauss_pyr);
compute_descriptors(features, gauss_pyr, descr_width, descr_hist_bins); /* sort features by decreasing scale and move from CvSeq to array */
cvSeqSort(features, (CvCmpFunc)feature_cmp, NULL);
n = features->total;
*feat = calloc(n, sizeof(struct feature));
*feat = cvCvtSeqToArray(features, *feat, CV_WHOLE_SEQ);
for (i = ; i < n; i++)
{
free((*feat)[i].feature_data);
(*feat)[i].feature_data = NULL;
} cvReleaseMemStorage(&storage);
cvReleaseImage(&init_img);
release_pyr(&gauss_pyr, octvs, intvls + );
release_pyr(&dog_pyr, octvs, intvls + );
return n;
}

在vs环境中跑动sift特征提取(原理部分)的更多相关文章

  1. 在vs环境中跑动sift特征提取(代码部分)

    因为在前两天的学习中发现.在opencv环境中跑动sift特征点提取还是比较困难的. 所以在此,进行记述. 遇到的问题分别有,csdn不愿意花费积分.配置gtk困难.教程海量然而能跑者鲜.描述不详尽等 ...

  2. ASP.NET Core 中文文档 第三章 原理(11)在多个环境中工作

    原文: Working with Multiple Environments 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core 介绍了支持在多个环境中管 ...

  3. Windows环境下多线程编程原理与应用读书笔记(3)————Windows环境中的多线程实现(3)

    纤程 纤程(fiber): 相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另一合作纤程,以实现合作纤程之间的协同.线程是在Wi ...

  4. Java多线程编程——并发编程原理(分布式环境中并发问题)

    在分布式环境中,处理并发问题就没办法通过操作系统和JVM的工具来解决,那么在分布式环境中,可以采取一下策略和方式来处理: 避免并发 时间戳 串行化 数据库 行锁 统一触发途径 避免并发 在分布式环境中 ...

  5. 【转】Java多线程编程(十)-并发编程原理(分布式环境中并发问题)

    转载地址:http://blog.csdn.net/leicool_518/article/details/42268947 在分布式环境中,处理并发问题就没办法通过操作系统和JVM的工具来解决,那么 ...

  6. SIFT特征提取分析

    SIFT特征提取分析 sift 关键点,关键点检测 读'D. G. Lowe. Distinctive Image Features from Scale-Invariant Keypoints[J] ...

  7. 计算机视觉-sift(1)原理

    1999年由David Lowe首先发表于计算机视觉国际会议(International Conference on Computer Vision,ICCV),2004年再次经David Lowe整 ...

  8. SIFT特征原理简析(HELU版)

    SIFT(Scale-Invariant Feature Transform)是一种具有尺度不变性和光照不变性的特征描述子,也同时是一套特征提取的理论,首次由D. G. Lowe于2004年以< ...

  9. 生产环境中,数据库升级维护的最佳解决方案flyway

    官网:https://flywaydb.org/ 转载:http://casheen.iteye.com/blog/1749916 1.  引言 想到要管理数据库的版本,是在实际产品中遇到问题后想到的 ...

随机推荐

  1. 快速开发 jQuery 插件的 10 大技巧(转)

    转自:http://www.oschina.net/news/41776/jquery-10-tips 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模 ...

  2. JEE , EJB概念深入概括

    说起EJB,不得不提JEE,java EE 英文全称为:java Enterprise Edition企业级应用的软件架构,是一种思想,也是一种规范,方便从事这方面的开发者以及开发厂商进行规范性的开发 ...

  3. [iOS微博项目 - 1.3] - 内容对齐 TextAlignment & VerticalAlignment & HorizontalAlignment & contentMode

    四个容易混淆的属性:1. textAligment : 文字的水平方向的对齐方式1> 取值NSTextAlignmentLeft      = 0,    // 左对齐NSTextAlignme ...

  4. Codeforces Round #201 (Div. 2) - C. Alice and Bob

    题目链接:http://codeforces.com/contest/347/problem/C 题意是给你一个数n,然后n个数,这些数互不相同.每次可以取两个数x和y,然后可以得到|x - y|这个 ...

  5. HDU 2050 折线分割平面 (递推)

    题意:略. 析:多写几个就找到规律了,第1条是2,2条时是7个,3条时是16,4条时是29,.... 那么规律就出来了2 * n * n + 1 - n; 也可以递推,第n条折线的两条边都与前n-1条 ...

  6. Tiny6410声卡驱动——录音与回放

    在Linux下,音频设备程序的实现与文件系统的操作密切相关.Linux将各种设备以文件的形式给出统一的接口,这样的设计使得对设备的编程与对文件的操作基本相同,对Linux内核的系统调用也基本一致,从而 ...

  7. Vue2.0表单校验组件vee-validate的使用

    vee-validate使用教程 *本文适合有一定Vue2.0基础的同学参考,根据项目的实际情况来使用,关于Vue的使用不做多余解释.本人也是一边学习一边使用,如果错误之处敬请批评指出* 一.安装 n ...

  8. WinFrom界面框架之WeifenLuo.WinFormsUI.Docking + OutLookBar

    本文转载:http://www.cnblogs.com/luomingui/p/3329763.html WeifenLuo.WinFormsUI.Docking + OutLookBar结合使用的效 ...

  9. php openssl 生成公私钥,根据网上文章整理的

    linux下没有问题,win下有报错 <?php$configargs = array("config" => "/usr/local/php/ext/ope ...

  10. Uestc_suibian 暑假集训总结

    唉,终于组队了,终于可以只BB了,我就BB,我就不上! 和Xiper以及chenxh组队了- 下面是总结: day1 第一天吃饱喝足,然后就上路了,我一开始就看到了C题大水题,但是我不敢想象这道题居然 ...