




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SIFT特征提取过程中的核心函数,PARTONE.物理架构opencv_contrib-3.1.0(版本号)/modules/xfeature2d/opencv_xfeature2dproject/src/sift.cpp,cvnamespace,xfeature2dnamespace,Feature2D,父类/基类,SIFT类,feature2d的子类,父类/基类,SIFT_Impl类,SIFT的子类,PARTTWO.运行架构,主函数intmain()/创建SIFT_Impl类指针Ptrf2d=xfeatures2d:SIFT:create();Matimg_1=imread(1.jpg);/读入图片vectorkeypoints_1;/用于存放检测到的关键点的容器f2d-detect(img_1,keypoints_1);/检测出关键点Matdescriptors_1;f2d-compute(img_1,keypoints_1,descriptors_1);/计算描述子waitKey(0);/等待任意按键按下,Feature2D:detect(InputArrayimage,CV_OUTstd:vector,SIFT_Impl:detectAndCompute(image,noArray(),keypoints,descriptors,true);,Feature2D:compute(InputArrayimage,std:vector,findScaleSpaceExtrema()检测尺度空间极值函数,adjustLocalExtrema()调整极值函数,calcOrientationHist()计算关键点主方向函数,函数功能:检测图片中的关键点参数image:输入图片参数mask:无掩模参数keypoints:关键点容器参数noArray():无描述子参数false:不使用给定的关键点,PARTTREE.检测关键点部分,图像尺度空间的构建1.1图像初始化函数函数功能:将输入图像转化为灰度图,并设置图像初始尺度c+:staticMatcreateInitialImage(constMat&img,booldoubleImageSize,floatsigma)入口参数:参数constMat&img:输入图像参数booldoubleImageSize:是否将初始图像扩大两倍,若值为1,则图像扩大为原来两倍参数floatsigma:设定图像的初始尺度返回值:无说明:一个图像的尺度空间L(x,y,),定义为原始图像I(x,y)与一个可变尺度的2维高斯函数G(x,y,)卷积产生:,其中:,lowe把初始图像的尺度I(x,y)设置为0.5即:I(x,y)=I(x,y,0.5),那么由L(x,y,1)得到L(x,y,2),即由尺度为1的图像生成尺度为2的图像的公式为:,图像尺度空间的构建1.2构建图像金字塔函数:函数功能:将输入图像作为金字塔初始图像,通过不断进行高斯模糊和降采样后的图片存放在Mat类容器中c+:voidSIFT_Impl:buildGaussianPyramid(constMat&base,std:vector&pyr,intnOctaves)const入口参数:参数constMat&base:输入图像参数std:vector&pyr:用于存储金字塔图像的容器参数intnOctaves:金字塔的组数返回值:无,图像尺度空间的构建1.3构建图像DOG金字塔函数:函数功能:将构建好的高斯金字塔相邻层相减后构成DOG金字塔存放在Mat类容器中voidSIFT_Impl:buildDoGPyramid(conststd:vector&gpyr,std:vector&dogpyr)const入口参数:参数:vector&gpyr:存放高斯金字塔图片的容器参数:vector&dogpyr:存放DOG金字塔图片的容器返回值:无,关键点定位关键点定位并确定主方向函数函数功能:(1)在DOG空间检测极值点(2)精确定位关键点位置和尺度并进行插值处理(3)去除边缘不稳定的点(4)为关键点分配主方向voidSIFT_Impl:findScaleSpaceExtrema(conststd:vector&gauss_pyr,conststd:vector&dog_pyr,std:vector&keypoints)const入口参数:参数conststd:vector&gauss_pyr:高斯金字塔容器参数conststd:vector&dog_pyr:DOG金字塔容器参数std:vector&keypoints:存放关键点容器返回值:无,调整局部极值函数函数功能:精确定位关键点位置和尺度并进行插值处理,去除边缘不稳定的点staticbooladjustLocalExtrema(conststd:vector&dog_pyr,KeyPoint&kpt,intoctv,int&layer,int&r,int&c,intnOctaveLayers,floatcontrastThreshold,floatedgeThreshold,floatsigma)入口参数:参数conststd:vector&dog_pyr:DOG尺度空间金字塔参数KeyPoint&kpt:定义了一个KeyPoint类对象用来存放筛选通过的关键点参数intoctv:该像素点所在的组数参数int&layer:该像素点所在的层数参数int&r:该像素点所在的行参数int&c:该像素点所在的列参数intnOctaveLayers:金字塔每组的层数S参数floatcontrastThreshold:对比度阈值0.04参数floatedgeThreshold:边缘响应阈值参数floatsigma:此处的sigma为初始尺度sigma0返回值:若极值调整成功返回1,调整失败返回0,说明:,其中令得:,令解得:,接下来判断偏移量在每个维度的偏差是否大于0.5,若不大于直接保留,若大于进行迭代插值处理。在设置的迭代次数内修正成功则保留,否则舍弃。,设f(i,j)是y轴为i、x轴为j的图像像素值,则在(i,j)点处的一阶、二阶及二阶混合偏导为:,再对进行筛选去除对比度低的点,在opencv中,使用下面的公式来判断其是否为不稳定的极值:,去除边缘响应较强的点,具体在程序中的计算同上:,计算关键点主方向函数函数功能:为特征点分配主方向staticfloatcalcOrientationHist(constMat&img,Pointpt,intradius,floatsigma,float*hist,intn)入口参数:参数constMat&img:当前特征点所在的图像参数Pointpt:关键点位置参数intradius:指统计在以关键点为中心,以radius=3*1.5sigma为半径的区域为作为该关键点的邻域,以统计直方图的形式来确定主方向参数floatsigma:这里的sigma是指相对于当前组第一层图像的尺度来说的参数float*hist:定义了hist指针用于存放直方图参数intn:直方图的条数返回值:直方图的主峰值,说明:直方图平滑处理;opencv使用的平滑公式为:,由于直方图代表的只是一个角度范围,想要得到更精确的方向角度值,需要对离散的梯度方向直方图进行插值拟合处理,拟合公式为:,SIFT_Impl:detectAndCompute(image,noArray(),keypoints,descriptors,true),函数功能:计算图片中的关键点描述子参数image:输入图片参数noArray():无掩模参数keypoints:关键点容器参数descriptors:描述子参数true:使用给定的关键点,unpackOctave(),calcDescriptors()计算关键点描述子函数,calcSIFTDescriptor,PARTFOUR.关键点描述子,createInitialImage()图像初始化函数,buildGaussianPyramid()构建高斯金字塔函数,buildDoGPyramid()构建DOG金字塔函数,unpackOctave(constKeyPoint&kpt,int&octave,int&layer,float&scale),计算sift特征描述子,入口参数:参数constKeyPoint&kpt:关键点参数int&octave:关键点所在层参数int&layer:关键点所在组参数float&scale:关键点所在尺度的比例因子返回值:无,函数功能:去除关键点所在高斯金字塔的层数,组数,以及尺度比例因子以方便后面计算描述子,计算sift特征描述子3.2计算sift特征描述子函数功能:计算特征点描述符calcDescriptors函数staticvoidcalcDescriptors(conststd:vector&gpyr,conststd:vector&keypoints,Mat&descriptors,intnOctaveLayers,intfirstOctave)入口参数:参数conststd:vector&gpyr:存放高斯金字塔图片的容器参数conststd:vector&keypoints:存放关键点的容器参数Mat&descriptors:描述子矩阵参数intnOctaveLayers:高斯金字塔层数参数intfirstOctave:如果原图像扩大两倍,则为-1,如果没有,则为0返回值:无,说明:计算sift特征描述子要用高斯金字塔,dog金字塔只用来求取极值点intd=SIFT_DESCR_WIDTH=4,n=SIFT_DESCR_HIST_BINS=8floatsize=kpt.size*scale计算特征点的特征矢量calcSIFTDescriptor(img,ptf,angle,size*0.5f,d,n,descriptors.ptr(int)i),函数功能:计算sift特征描述子staticvoidcalcSIFTDescriptor(constMat&img,Point2fptf,floatori,floatscl,intd,intn,float*dst),3.3计算sift特征点的描述矢量:,入口参数:参数constMat&img:输入图像参数Point2fptf:输入检测到的特征点,float型参数floatori:特征点的幅角,角度,float型参数floatscl:输入特征点的尺度参数intd:特征点周围邻域的宽度参数intn:设定直方图的条目数,之前统计主方向时设n=36,现在计算特征矢量n=8参数float*dst:输出特征点的描述矢量,float型返回值:无,关键点描述子1.首先要明确,我们前面的步骤分别得到了关键点的位置(层,组,所在图像的横纵坐标),尺度,主方向的信息,我们的特征描述子是回到了高斯金字塔上去做的。所以我们定位关键点在高斯金塔的那一张图片上。2.然后确定用描述周围多大的区域去描述这个关键点,首先我们把这块区域分成d*d个小区域,sift中d=4,如图中蓝色区域所示,每一格的宽度为3,这里的是指相对于当前组第一层图片来说的。注意:opencv中计算的区域是最外面的橘色的矩形区域,面积为(2Rradius+1)*(2Rradius+1)其中:,3.根据公式来计算橘色矩形内每个像素点的幅值和幅角。4.接下来将橘色矩形内的每个像素的幅角按照旋转关键点主方向的角度,使得关键点主方向为0(或统一为多少度),5.建立三维直方图,如图所示,三维直方图是由(opencv中)(d+2)*(d+2)(n+2)个长宽高均为1的单位立方体组成的三维直方图,高对应邻域像素幅角的大小,把360度分成8等分,立方体的底就是特征点的邻域区域。该区域被分为4*4个子区域(opencv中划分了(d+2)*(d+2)个区域),邻域内的像素根据坐标位置,把他们归属到这16个子区域的一个,再根据邻域像素的幅角的大小,把他们归属到这8等分(opencv中为n+2)中的一份,这样每个像素点都能对应到其中的一个立方体里,三维直方图建立起来了。(这里分别把每个像素的横纵坐标和幅角都进行了归一化处理)。,横纵坐标+d/2,横纵坐标减0.5,6.三线性插值的计算-坐标平移,6.三线性插值的计算,x,y,正方体的中点同时是立方体的顶点,显然,正方体的中心应该代表着该正方体,但落入正方体的邻域像素不可能都在中心,因此,根据它对中心点位置的贡献大小进行加权处理,即在正方体内,根据像素点相对于正方体的距离,对梯度幅值做加权处理。在实际应用中,我们需要经过坐标平移,把中心点平移到正方体的顶点上,这样只要计算出正方体内的点对正方体的8个顶点的贡献大小即可。根据三线性插值法,对某点的贡
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年湖南益阳市交通投资运营集团有限公司下属子公司公开招聘(第一批)考前自测高频考点模拟试题附答案详解(考试直接用)
- 2025年4月广东深圳市光明区教育局招聘公办幼儿园人员模拟试卷及参考答案详解一套
- 2025湖南湘潭市韶山学校招聘教师15人模拟试卷附答案详解
- 2025湖南新宁县招聘教师30人模拟试卷(含答案详解)
- 2025春季中国太平校园招聘考前自测高频考点模拟试题及一套参考答案详解
- 2025辽宁省机场管理集团有限公司拟聘人员模拟试卷及答案详解1套
- 2025年临沂郯城县技工学校公开招聘教师(26人)考前自测高频考点模拟试题及答案详解(典优)
- 意向金协议书5篇
- 2025中电建宁夏工程有限公司设计管理部笔试题库历年考点版附带答案详解
- 父母外出互助协议8篇
- 2《归园田居》任务式公开课一等奖创新教案(表格式)统编版高中语文必修上册
- 银行文明礼仪课件
- 虚拟电厂运行关键课件
- 敏捷企业组织结构与设计的案例研究
- 光伏储能技术介绍
- 项目合同交付管理办法
- 国企贸易业务管理办法
- 3done入门基础知识课件
- 职业健康卫生培训课件
- 2025年广西专业技术人员继续教育公需科目(三)答案
- 麻醉科设备管理制度
评论
0/150
提交评论