《的极值点提供了最稳定的特征.ppt》由会员分享,可在线阅读,更多相关《的极值点提供了最稳定的特征.ppt(29页珍藏版)》请在三一文库上搜索。
1、的极值点提供了最稳定的特征,返回,高斯金字塔的原理解析,去除边界响应原理,角点:在任何方向上像素值的变化很大的点,角点的确定方法(Moravec 算子):0:将要判断的点置于一个3*3或5*5的图像块的中心,如下图用红色的线环绕的图像块。1:将红色的框朝8个方向移动一格,得到蓝色的框(下图为向右上角移动)。2:将红色的框和蓝色的框的相同坐标值的点的像素值相减,并求平方和,可以得到8个值。3:将8个值中的最小的值作为角点像素的变化值。,角点像素值表:求出每一个像素点的角点像素变化值,在局部图像块中,该值最大的点为角点。,边界上未被噪声影响,边界上被噪声影响,Harris 算子将Moravec 算
2、子做了两个推广:1:用像素的变化梯度代替像素值相减并引入高斯窗函数。2:推广出了一个公式这样可以计算任意方向上的像素值变化,而不在是8个固定的方向。,由于像素点的变化值与矩阵M有关,因此可以用矩阵M的特征值来判断某个点是否是角点。,k =( 0.04 , 0.06 )之间的数,返回,SIFT算法分析,第一步 构建高斯金字塔以及高斯差分金字塔, doubles for the next octave,K=2(1/intvls), intlvs+3 images for each octave,2k2 2k 2 K ,2k2 2k 2 K ,2k 2 k ,2k 2 k ,高斯金字塔的原理解析,说
3、明:,原始图像的尺度sigma_pre可以认为是0.5,如果原始图像在构建高斯金字塔之前它的尺寸加倍,则加倍后的原始图像的尺度为2*0.5。加倍的方式采用的是立方插值法。 高斯金字塔第0组第0层的尺度为sigma=1.6,它是由原始图像经过高斯模糊后得到的,高斯模糊函数的高斯核sigma_diff*sigma_diff=sigma*sigma-sigma_pre*sigma_pre.依照这个原理可以计算出产生其它几层图像所需要的高斯核函数。 金字塔的组数由下面的式子确定:octvs=log(min(长,宽)/log(2)-2. 下一组高斯金字塔的第0层图像由前一组高斯金字塔中尺度为2sigma
4、的图像经过最邻近插值得到。采用的是降采样。 高斯差分金字塔由高斯金字塔上的相邻两幅图像直接相减得到。,第二步 寻找差分金字塔上的极值点,说明:极值点寻找的范围:,差分金字塔中的第0层和最上面的一层排除 中间的差分图像中,像素的横坐标或者纵坐标中任一个值与图像边界值之间的差值小于5的点排除,返回,步骤1:进行像素的预筛选,凡是像素值的绝对值小于(0.5 * contr_thr / intvls)的点排除,程序中contr_thr=0.04, intvls=3.,步骤2:定位极值点的坐标和所在的尺度,每一个采样点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如上图所示,中间
5、的检测点和它同尺度的8个相邻点和上下相邻尺度对应的92个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。,步骤3:对极值点进行泰勒展开,将它的坐标和尺度进行精确定位,假设极值点的坐标为X=(x,y,intvl),此时这三个方向上的坐标都为整数 根据泰勒公式可以计算出以极值点为原点相对于极值点在行,列以及层数上的偏移量 ,X_P=(x_p,y_p,intvl_p). 定位准则:1)如果三个方向上的偏移量都小于0.5,则认为该点就是极值点。此时可以结束对这个极值点的分析,保存该点的偏移信息,然后分析该极值点的像素值是否满足要求。2)如果某一方向上的偏移量大于等于0.5,如假设x_p
6、=0.5,则采取下述方式进行处理:先将x_p四舍五入得到一个整数intx,然后将intx与x相加得到一个新的极值点X_N=(x+intx,y,intvl),如果点X_N没有进入预先排除的区域则对这个点进行泰勒展开(否则该点被放弃,然后分析下一个极值点),直到找到一个点的偏移满足在三个方向上都小于0.5为止,然后记下点X_N及其偏移值,此时极值点为X_N。但是这个重新确定极值点并重新定位的操作只能循环5次。若超过5次仍无法满足1)的要求,这该极值点被放弃,然后分析下一个点。 利用公式 确定精确定位后的极值点的像素值,进行对比度的检测。若像素值满足大于contr_thr / intvls(程序中为
7、0.04/3),则该点才能最终确定为极值点。,步骤4:去除边界影响点,计算极值点处的Hessian矩阵H 。 如果点满足 则该点保留,否则该点将会被排除。 为最大特征值, 为最小的特征值 ,在程序中r=10.,没有进行任何处理的关键点,去除了低对比度之后的点,去除边界相应的点,第三步 计算关键的尺度,计算公式:scl_octv = sigma * pow( 2.0, intvl / intvls ),式中: scl_octv 为关键点的尺度, intvl为关键点在高斯差分金字塔中所处于的层数,程序中sigma=1.6,intvls=3,2k2 2k 2 K ,2k2 2k 2 K ,2k 2
8、k ,2k 2 k , doubles for the next octave,K=2(1/intvls), intlvs+3 images for each octave,第四步 计算关键点的主方向,步骤1:计算梯度方向直方图,计算梯度方向直方图的范围为以关键点为原点,偏移为rad的正方形区域,rad=四舍五入(3*1.5* scl_octv ) 梯度加权系数w的确定: w = exp( -( i*i + j*j )/exp_denom ),i,j为像素点在以关键点为原点的坐标系中所处的坐标值,范围为(-rad,rad); exp_denom=2.0 * (1.5* scl_octv ) *
9、 (1.5* scl_octv ) 每个像素点的梯度值都必须乘以该点所对应的高斯权,这样才能得到最终的梯度值。 然后根据计算出的梯度方向确定该点处于梯度方向直方图的哪个bin,并将处于该bin内的所有点的加权后的梯度相加。 程序中bin为8个。,步骤2:对得到的梯度方向直方图进行高斯平滑,程序中使用的高斯平滑矩阵为(0.25,0.5,0.25),步骤3:找出梯度方向直方图的8个bin的峰值max,步骤4:确定关键点的主方向,用插值的方法确定主方向在8个bin中所处的亚位置bin_f。bin_f=i + interp_hist_peak( histl, histi, histr ),histl,
10、 histi, histr 为在8个bin中处于位置l,i,r的直方图的高度。 histl, histi, histr 必须满足式子histi histl & histi histr & histi = 0.8*max,而且这三个直方图必须挨在一起才有能求主方向。 插值算法:#define interp_hist_peak( l, c, r ) ( 0.5 * (l)-(r) / (l) - 2.0*(c) + (r) ) 利用插值算出主方向在8个bin中所处的亚位置bin_f,就可以算出主方向了 同一个点可以有多个主方向,此时相当于在这个位置有多个关键点,第五步 计算描述字,步骤1:确定每一
11、组梯度方向直方图占据的图像宽度,以及描述字计算所需要的图像宽度,每一组梯度方向直方图占据的图像宽度hist_width = 1.5 * scl_octv 描述字计算所需要的图像宽度 radius = hist_width * sqrt(2) * ( d + 1.0 ) * 0.5 + 0.5,步骤2:确定哪一些点在旋转关键点的梯度方向后处于描述字计算的范围 并计算其梯度,建立以关键点为原点的坐标系 对横纵坐标都处于(- radius , radius )范围内的点计算它们在旋转关键点的梯度方向后的坐标,计算式子为:c_rot = ( j * cos_t - i * sin_t ) r_rot
12、= ( j * sin_t + i * cos_t ) 利用式子c_rot = c_rot / hist_width; r_rot = r_rot / hist_width;来计算该像素点在梯度方向直方图数组中的坐标(仍将关键点作为原点) 利用式子rbin = r_rot + d / 2 - 0.5; cbin = c_rot + d / 2 - 0.5;进行坐标变换,将梯度方向直方图数组的左上角定为原点,重新计算该像素点在梯度方向直方图数组中的坐标 若rbin -1.0 在程序中d=4,表示有4*4个梯度方向直方图 对于梯度的方向要减去旋转的方向,然后计算出在梯度方向直方图中的bin值obi
13、n 。 最终可以得到该梯度的坐标为histrbin cbin obin,步骤3:利用插值法将一个点的梯度分配到多组梯度方向直方图中的多个bin,即分配到histrbin cbin obin,对梯度方向直方图组的列进行插值得到histr,对梯度方向直方图组的列进行插值得到histrc,对梯度方向直方图组的行进行插值histrco,步骤4:对得到的128个梯度值进行处理,将用三位数组存储的梯度转换为用一维数组存储,程序中的一维数组的大小为128 对128个梯度进行归一化处理:1)计算128个梯度值的平方和,2)对得到的平方和开根号然后求倒数,3)用梯度值乘以得到的倒数,得到的值就是归一化后的梯度 ,4)用归一化后的梯度代替原来的梯度值 将归一化后的梯度值限制在0.2:如果某一个归一化后的梯度值大于0.2,则该梯度值将被直接取值为0.2 再次进行梯度归一化处理 对每一个梯度值乘以一个系数(程序中用512.0),将浮点的梯度值转化为整数。如果乘积大于512,则该梯度值就为512,否则为乘积值。,
链接地址:https://www.31doc.com/p-2319754.html