python双线性插值函数_在python中使用双线性插值调整图像大小

我只需要上一堂课,而且还没有评分,所以在使用前应该先检查一下。

基本插值函数

def interpolation(y0,x0, y1,x1, x):

frac = (x - x0) / (x1 - x0)

return y0*(1-frac) + y1 * frac

步骤1:将原始坐标映射到新调整尺寸的图像

def get_coords(im, W, H):

h,w = im.shape

x = np.arange(0,w+1,1) * W/w

y = np.arange(0,h+1,1) * H/h

return x,y

步骤2:创建一个函数以在所有行的x方向上进行插值。

def im_interp(im, H,W):

X = np.zeros(shape=(W,H))

x, y = get_coords(im, W, H)

for i,v in enumerate(X):

y0_idx = np.argmax(y >i) - 1

for j,_ in enumerate(v):

# subtracting 1 because this is the first val

# that is greater than j, want the idx before that

x0_idx = np.argmax(x > j) - 1

x1_idx = np.argmax(j < x)

x0 = x[x0_idx]

x1 = x[x1_idx]

y0 = im[y0_idx, x0_idx - 1]

y1 = im[y0_idx, x1_idx - 1]

X[i,j] = interpolation(y0, x0, y1, x1, j)

return X

步骤3:使用上述步骤中的函数进行两次插值。首先在x方向的图像上,然后在新创建的图像的转置(y方向)上

def im_resize(im,H,W):

X_lin = im_interp(im, H,W)

X = im_interp(X_lin.T, H,W)

return X_lin, X.T

我退回两张图片只是为了看一下差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值