def interp_spline(I, xn, yn, compute_derivs=True):
""" Perform spline interpolation of I.
I is evaluated at xn, yn.
Returns
-------
I_warped : array_like
Warped image
dI_warped_dx : array_like
Derivative of warped image in x direction
dI_warped_dy : array_like
Derivative of warped image in y direction
"""
h,w = I.shape[:2]
xar = np.arange(w)
yar = np.arange(h)
if I.ndim > 2:
I_warped = np.zeros_like(I)
dI_warped_dx = np.zeros_like(I)
dI_warped_dy = np.zeros_like(I)
for d in range(I.shape[2]):
result = interp_spline(I[:,:,d], xn, yn, compute_derivs=compute_derivs)
if compute_derivs:
I_warped[:,:,d] = result[0]
dI_warped_dx[:,:,d] = result[1]
dI_warped_dy[:,:,d] = result[2]
else:
I_warped[:,:,d] = result
else:
S = interpolate.RectBivariateSpline(yar,xar,I,kx=2,ky=2)
I_warped = np.clip(S.ev(yn,xn),0,1.0)
#I_warped = S.ev(yn,xn)
if compute_derivs:
dI_warped_dx = S.ev(yn,xn,dy=1) # Note that y and x are swapped!
dI_warped_dy = S.ev(yn,xn,dx=1)
if compute_derivs:
return I_warped, dI_warped_dx, dI_warped_dy
else:
return I_warped
评论列表
文章目录