当前位置:   article > 正文

SIFT 三线性差值原理与代码分析_float v_r1 = mag*rbin, v_r0 = mag - v_r1; float v_

float v_r1 = mag*rbin, v_r0 = mag - v_r1; float v_rc11 = v_r1*cbin, v_rc10

参考了文章:

http://blog.csdn.net/fzthao/article/details/62424271


Jie Pro 在进行特征描述时,讲的非常详细。但未对三线性插值进行阐述。我也是花了好久的时间才慢慢搞懂。有错之处,请指出。

1. 首先需要的几个已知量包括:

     将关键点附近的邻域划分为d*d(Lowe建议d=4)个子区域,每个子区域做为一个种子点,每个种子点有8个方向。每个子区域的大小与关键点方向分配时相同,即每个区域有子像素。

(1)

(2)

(3)

(4) 

其中(3)式在三线性插值作用巨大,待下面具体解释。 (4)式主要对所有圆形区域内的点进行高斯加权,m为梯度值.




由(1-3)式可推知,的取值范围为[-d/2,d/2],为方便计算三线性插值下标从0开始,公式(3) 加了d/2,使(x”,y")的范围为[0,d],而d=4. 因此在水平X轴和垂直Y轴的单位为1的间隔下,共有16个种子点区域(见左上图的 绿色 格子),每个区域的中心点分别为,bin(0,0),b(0,1),...,b(3,3)(见左上图的 蓝色格子 在每个 绿色格子 的中心 交叉点为bin的坐标 )。根据(x”,y")的值确定其最邻近的4个中心点。
   
为什么直方图长度histlen = (d+2)*(d+2)*(n+2)?
因为计算的是每个Pixel对每一个蓝色端点(包含绿色格子的中心点)的影响,所以每一行一共6个端点,每一个列也有6个端点。也就是d+2个点。

如左上图,若(x”,y")距离X轴和Y轴的距离分别为(dr,dc),则另外的几个点分别为 (dr,1-dc),(1-dr,dc),(1-dr,1-dc);

相邻4个中心点的距离:
b1中心点的距离为:(dr,dc)
b2中心点的距离为:(1-dr,dc)
b3中心点的距离为:(dr,1-dc)
b4中心点的距离为:(1-dr,1-dc)

根据权重与距离成反比的原则计算邻近的四个种子点分配的到权重:
即: 用该点对角线方向的矩形面积为该点的权重值
则分配到
               b1的值为: W * (1-dr)*(1-dc)
b2的值为: W * dr*(1-dc)
               b3的值为: W * (1-dr)*dc
b4的值为: W * dr*dc  
考虑到方向,见右上图。
角度转化为比例分量,为do,那么距离其邻近方向的距离为(1-do)。
则点(x”,y") 的W分配的权重如下:

方向2与方向1相邻,比如方向1是[0° 45°) 方向2就是[45° 90°)

分配给b1在方向1上的权重为:  W * (1-dr)*(1-dc)*(1-do) ,  方向2上的权重为:W * (1-dr)*(1-dc) *do
分配给b2在方向1上的权重为:  W * dr*(1-dc) *(1-do) ,       方向2上的权重为:W * dr*(1-dc) *do
分配给b3在方向1上的权重为:  W * (1-dr)*dc *(1-do) ,       方向2上的权重为:W * (1-dr)*dc *do
分配给b4在方向1上的权重为:  W * dr*dc*(1-do) , 方向2上的权重为:W*dr*dc*do

以上为对三线性插值的分步解释。也可以使用公式


进行直接计算。 k,m,n  为0或1.

答:为了减少一个梯度幅值从一个格子漂移(shift)到另一个格子引起的描述子突变,需要对梯度值做三线性插值。也就是根据三维坐标计算距离周围格子的距离,按距离的倒数计算权重,将梯度幅值按权重分配到临近的格子里。

3. 附
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/545287
推荐阅读
相关标签
  

闽ICP备14008679号