Ia = input_img[np.arange(B)[:,None,None], y0, x0]
Ib = input_img[np.arange(B)[:,None,None], y1, x0]
Ic = input_img[np.arange(B)[:,None,None], y0, x1]
Id = input_img[np.arange(B)[:,None,None], y1, x1]
wa = (x1-x) * (y1-y)
wb = (x1-x) * (y-y0)
wc = (x-x0) * (y1-y)
wd = (x-x0) * (y-y0)
wa = np.expand_dims(wa, axis=3)
wb = np.expand_dims(wb, axis=3)
wc = np.expand_dims(wc, axis=3)
wd = np.expand_dims(wd, axis=3)
out = wa*Ia + wb*Ib + wc*Ic + wd*Id
在双线性插值中出了这几行代码,这个wa,wb,wc,wd为什么是这些坐标相减后的乘积。那么out怎么就等于wa*Ia+wb*Ib+wc*Ic+wd*Id,关于这个问题,网上给出的解释很少,那么在这里我具体的推导一下。
单线性插值:
原理网上有很多,我们这里只推导公式
(斜率公式)
(直线公式)
(将点(a,b)代入公式)
(用图中d1,d2代替)
双线性插值:
注意咱们在做双线性插值都是在临近的四个点算的,也就是d1+d2=1,d3+d4=1。所以咱们f(P)的分母为1。则可进一步化简为
这样也就解释了out=wa*Ia+wb*Ib+wc*Ic+wd*Id