在学习可变形卷积的过程中,涉及到给采样点加上偏移量进行卷积感受野变形的操作,但是偏移量是浮点数,偏移后一般不能保证刚好落到某个像素点上,多是落到类似(10.3,25.7)这样的虚拟像素点上,这样我们就需要用到双线性插值法来计算出虚拟像素点的值。
双线性插值法就是找出虚拟像素点周围最近的4个真实像素点,然后对这4个像素点的值进行加权求和,作为虚拟像素的值。
如上图所示(图片来自: https://zhuanlan.zhihu.com/p/110754637),假设我们的虚拟像素点为P(x,y)。首先,我们需要找出周围最近的4个真实像素点: Q11(x1,y1)、Q12(x1,y2)、Q21(x2,y1)、Q22(x2,y2)。怎么找?简单!x向下取整得到x1,x1+1得到x2;y向下取整得到y1,y1+1得到y2;支持4个点全部找到。
然后,Q11(x1,y1)和Q21(x2,y1)进行一个x方向的插值,求出点R1的值(记为f(R1),其他点同理)。具体怎么做?我们说R1越靠近Q11,那么f(Q11)的权重就应该越大,反之越小。很直观,很合理吧?从图中,我们可以看到R1刚好把(x2−x1)分成了x2−x和x−x1两段。R1越靠近Q11,段x2−x越长,x−x1越短,那么我们把x2−x/x2−x1作为f(Q11)的权重不就好了吗?同样x−x1/x2−x1作为f(Q21)的权重,则有:
f(R1)=x2−x1x2−xf(Q11)+x2−x1x−x1f(Q21)
同样,Q12(x1,y2)和Q22(x2,y2)进行一个x方向的插值,求出点R2的值:
f(R2)=x2−x1x2−xf(Q12)+x2−x1x−x1f(Q21)
最后,R1(x,y1)和R2(x,y2)进行一个y方向的插值,就求出点P(x,y)的值:
f(P)=y2−y1y2−yf(R1)+y2−y1y−y1f(R2)
把前面求得的f(R1),f(R2)代进来得:
因为分母都为1,所以得