import numpy as np
# 定义一个5x5的整数矩阵
matrix = np.array([
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]
])
# 双线性插值函数
def bilinear(img, x, y):
h, w = img.shape
# 注意边界,越界了就用边界的值
x1 = int(x)
x2 = min(x1 + 1, w - 1)
y1 = int(y)
y2 = min(y1 + 1, h - 1)
dx = x - x1
dy = y - y1
v11 = img[y1, x1]
v12 = img[y2, x1]
v21 = img[y1, x2]
v22 = img[y2, x2]
# 记忆方法v11, v22分别表示最小和最大的坐标,v22对应dx*dy,那v11相对v22变了两个数,则(1-dx)*(1-dy)
# v21相对v22变了第二个数,则是dx*(1-dy)
# v12相对v22变了第1个数,则是(1-dx)*dy
res = (1 - dx) * (1 - dy) * v11 + (1 - dx) * dy * v12 + dx * (1 - dy) * v21 + dx * dy * v22
return res
# 选择一个在图像范围内的浮点坐标作为采样点
x, y = 1.5, 2.5
# 对采样点进行双线性插值
result = bilinear(matrix, x, y)
print("双线性插值结果:", result)
双线性插值公式记忆方法和Python实现
最新推荐文章于 2024-07-17 09:15:39 发布