参考了文章:
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.
2.
为什么进行三线性插值?
答:为了减少一个梯度幅值从一个格子漂移(shift)到另一个格子引起的描述子突变,需要对梯度值做三线性插值。也就是根据三维坐标计算距离周围格子的距离,按距离的倒数计算权重,将梯度幅值按权重分配到临近的格子里。
3. 附