1、双线性插值概念
双线性插值是一种用于在二维网格上进行插值的方法,适用于图像处理、计算机图形学等领域。它通过利用四个邻近点的已知值,估算出任意点的值。双线性插值在两个方向(通常是水平和垂直)上分别进行线性插值,因此得名“双线性”。双线性插值是一种常用的图像缩放方法,它通过在四个最近邻像素之间进行线性插值来计算新的像素值。以下是双线性插值的详细步骤和公式。
双线性插值的步骤
假设我们有一个源图像 I(x, y)
,目标是将其缩放到一个新的尺寸 (new_width, new_height)
。对于目标图像中的每一个像素 (xx, yy)
,我们需要找到其在源图像中的对应位置,并使用双线性插值计算该像素的值。
-
确定源图像中的坐标:
- 计算目标图像中每个像素
(xx, yy)
对应的源图像坐标(x, y)
。 - 使用缩放比例
xRatio = (src_width - 1) / (new_width - 1)
和yRatio = (src_height - 1) / (new_height - 1)
来计算源图像坐标。 x = floor(xx * xRatio)
和y = floor(yy * yRatio)
得到最接近的左上角像素坐标。x_l
和y_l
分别是x
和y
的整数部分,x_h = min(x_l + 1, src_width - 1)
和y_h = min(y_l + 1, src_height - 1)
是右下角的像素坐标。
- 计算目标图像中每个像素
-
计算权重:
- 计算小数部分
dx = xx * xRatio - x_l
和dy = yy * yRatio - y_l
。 - 这些小数部分将用于线性插值。
- 计算小数部分
-
双线性插值公式:
- 使用四个最近邻像素的值
I(x_l, y_l)
、I(x_h, y_l)
、I(x_l, y_h)
和I(x_h, y_h)
进行插值。 - 首先在水平方向上进行线性插值:
a = I ( x l , y l ) ⋅ ( 1 − d x ) + I ( x h , y l ) ⋅ d x a = I(x_l, y_l) \cdot (1 - dx) + I(x_h, y_l) \cdot dx a=I(xl,yl)⋅(1−dx)+I(xh,yl)⋅dx b = I ( x l , y h ) ⋅ ( 1 − d x ) + I ( x h , y h ) ⋅ d x b = I(x_l, y_h) \cdot (1 - dx) + I(x_h, y_h) \cdot dx b
- 使用四个最近邻像素的值