surf算法学习心得(二)源码简析(精编版)_第1页
surf算法学习心得(二)源码简析(精编版)_第2页
surf算法学习心得(二)源码简析(精编版)_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、surf 算法学习心得 (二)源码简析说明:作为初学者,我对于源代码也只是简单的分析, 开始和 (一)中一样都叫做源码分析,后来感觉自己分析的质量不太好,还是都改为源码简析吧,结合起(一)及后面的心得来看估计效果会好点, 呵呵。只是希望对于即将要学习surf算法的人有一定的帮助就行!对于一些介绍得不对的地方,也希望各位大虾能过指出,相互交流,共同进步!surf 算法源代码分析surf 算法源代码分为两种文件,学过c/c+ 的都知道,在此不多说。头文件主要包括:imload.h 、ipoint.h 、image.h、fasthessian.h、surf.h 、surflib.h ,其中每个文件用

2、于声明一个特定的相应类,下面大体进行简单介绍。imload.h声明类imload ,主要封装了对图像的读取和保存函数。image *readimage(const char *filename);/从图像文件中读取图像void saveimage(const char *filename, image* im);/ 将图像保存到文件中ipoint.h 声明类 ipoint ,主要定义关键点的相应属性。ipoint()/构造函数ivec = null;ori = 0.0;ipoint()/析构函数if (ivec)delete ivec;void allocivec(const int si)/

3、 内存空间分配ivec = new doublesi;double x, y;/特征点在图像中的坐标double scale;/检测范围double strength;/特征点的强度double ori;/特征点主方向int laplace;/laplacian相关的值 double *ivec;/特征点描述器 (局部特征 )image.h 声明类image,主要定义图像的相关属性。image(const int w, const int h);/带参数的构造函数image();/析构函数 image(double *pixels, int w, int h);/根据已存在的像素数组构造图像

4、image(image *im, bool doubleimsize=false);/ 构造积分图像void setframe(unsigned char *im);/通过单一的帧到 (预初始化 )结构 void setframe(image*im);image *halfimage();/将图片长宽个变为原来的 1/2double gethessian(int *x);/获得特定点的 hessian 检测值 int gettrace(int *x);/获得 hessian 矩阵的迹 (线性代数中学过迹 )double*getpixels() const;/获得指向图像像素的指针double

5、getpix(const int x, const inty) const /获得某一指定位置的像素值return _pixelsyx;double &getpix(const int x, const inty) / 重载 getpix 并返回引用return _pixelsyx;void setpix(const int x, const int y, const double val) / 设置指定位置的像素值_pixelsyx = val;int getwidth();int getheight();void setwidth(int wi);void setheigh

6、t(int hi);void allocpixels(int w, int h);/为图像像素分配二维内存空间double *_buf;/指向图像实际缓冲区的指针double *_pixels;/指向图像像素二维数组的指针int _height, _width;int _orihi;/原始图像高度bool _ref;/对图像是否为引用的一种标志fasthessian.h声明类fasthessian,主要定义算法中的快速hessian 检测子方法fasthessian();/带参数的构造方法fasthessian(image *im,std:vector< ipoint &

7、gt;& ip, double thres = 0.2, bool doub = false,short int initmasksize = 9, short int samplingstep = 2,short int octaves = 4);void setiimage( image *iim );/传入积分图像void getinterestpoints();/检测图像的所有特征点/在特定位置创建新的点,并在一定范 围 内 void makeipoint(double x, double y, double scale, double strength=0);void

8、 allocateoctave();/为 octave 分配内存空间 /fast non-maximum-suppressionvoidfindmaximum(int *borders, int o, int octave);void interpfeature(int s, int row, int col, image *map,int o, int octave, int movesremain,int *borders);int fitquadrat(int s, int r, int c, double &res);image *_iimage;image *_sca

9、lelevel;/octavesint _vas9;/向量变量double _threshold;/检测特征点时的阈值bool _doubled;/图像是否放大std:vector< ipoint >& _ipts;/从外部传进来的指向特征点向量的引用short int _initlobe;/在某一方向第二次求导时的初始lobe 值,默认为3short int_maxscales;/number scalesshort int _maxoctaves;/number octavesshort int _sampling;/the sampling s

10、tepint _width;/积分图像的宽int _height;double _offset3;/二次拟合的结果surf.h声明 surf ,主要用于定义surf 中关键点相应的描述器surf();surf(image *im, bool dbl=false,bool usurf=false,bool ext=false, int insi=4);surf();int getvectlength();/获得特征描述器向量的长度void setipoint(ipoint *ipt);/为一个需要计算的描述器设置相应点void assignorientation();/定向分配重现 void m

11、akedescriptor();/计算不变图像特征 void createvector(double scale,/ 创 建 向 量 double row, double col);void createuprightvector(double scale,double row, double col);voidaddsample(int r, int c, double rpos,/ 向向量添加样本 double cpos, double rx, double cx, int step);void adduprightsample(int r, int c, double rpos,doub

12、le cpos, doublerx, double cx, int step);void placeinindex(double mag1, int ori1,/为向量中样本设置索引值double mag2, int ori2, double rx, double cx);/! normalise descriptor vector for illumination invariance for lambertian surfacesvoid normalise();void createlookups();/创建查找表surflib.h 声明 surf 算法要用到的库函数。/针对整个图像定义

13、关键点及其相应描述器(关键点附加的详细信息(局部特征) )/ 其中关键点信息保存在向量ipts 当中inline void surfdetdes(image *im, std:vector< ipoint >& ipts,double thres = 4.0, bool doubleimagesize = false,int initlobe = 3, int samplingstep = 2, int octaves = 4,boolupright = false, bool extended = false, int indexsize = 4)

14、/针对一个给定的特征点, 计算相应的描述器 (局部特征) inline void surfdes(image *im, std:vector< ipoint >& ipts,booldoubleimagesize = false,bool upright = false, bool extended =false, int indexsize = 4) 编译运行 cmd 下进入可执行文件目 录,输入可执行文件名,得到如下提示:可以在相应的提示 下进行运行,如:注意:输入文件-i参数后面的文件必须是 pgm格式的图像文件,可以自行网上下载,有个“人脸pgm 图片

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论