defBilinear_Interpolation(former_img, rate_y, rate_x): for i inrange(former_img.shape[0]): for j inrange(former_img.shape[1]): if i//rate_y == 0and j//x_rate == 0: # 已赋值的点 continue# 跳过 # 左上角包围点的坐标 y = i - i % rate_y x = j - j % rate_x # print(y,x)
# 先考虑边界情况,在已经赋值的点中,最大纵坐标为former_img.shape[0]-rate_y-1,最大横坐标为former_img.shape[1]-rate_x-1 if y + rate_y >= former_img.shape[0]-rate_y: # 只有上方两个点 if x + rate_x >= former_img.shape[1]-rate_x: #是最右下角一小块,直接用左上角点赋值 former_img[i][j] = former_img[y][x] else: # 根据和两个点横坐标距离比例计算比例,与左上角点横坐标距离为(j%rate_x),与右上角点横坐标距离为rate_x - j % rate_x former_img[i][j] = (rate_x - j % rate_x)/rate_x * former_img[y][x] + \ j % rate_x/rate_x * former_img[y][x+rate_x] elif x + rate_x >= former_img.shape[1]-rate_x: former_img[i][j] = (rate_y - i % rate_y)/rate_y * former_img[y][x] + \ i % rate_y/rate_y * former_img[y + rate_y][x]