当前位置: 首页 > article >正文

双线性插值(Bilinear Interpolation)的介绍

1. 线性插值

  (1)(单)线性插值是学好双线性插值的基础,下面就对它进行介绍。线性插值(Linear Interpolation)是一种基本的数值分析方法,用于在给定的数据点之间估计未知值。它是最简单形式的插值方法之一,基于两点之间直线的数学概念。当需要在一个已知数据集内找到一个特定值时,线性插值可以提供一个合理且快速的近似解。线性插值的核心思想是利用已知点之间的直线来估计未知点的值。设有两个已知点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) ( x 1 , y 1 ) (x_1,y_1) (x1,y1),我们希望估计在 x x x 处的 y y y值,如下图所示。
在这里插入图片描述
  从上图可知,某条直线过点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) ( x 1 , y 1 ) (x_1,y_1) (x1,y1),我们想要得到区间 [ x 0 , x 1 ] [x_0,x_1] [x0,x1]内某一位置 x x x 在直线上对应的值 y y y,可以采用两点式直线方程,如下所示。
y − y 0 x − x 0 = y 1 − y 0 x 1 − x 0 ( 1 ) \frac{y-y_0}{x-x_0}=\frac{y_1-y_0}{x_1-x_0} \quad(1) xx0yy0=x1x0y1y0(1)
将方程(1)进行化简得到:
y = ( y 1 − y 0 ) ( x − x 0 ) x 1 − x 0 + y 0 = ( y 1 − y 0 ) ( x − x 0 ) x 1 − x 0 + ( x 1 − x 0 ) y 0 x 1 − x 0 = x − x 0 x 1 − x 0 y 1 + x 1 − x 0 x 1 − x 0 y 0 − x − x 0 x 1 − x 0 y 0 = x − x 0 x 1 − x 0 y 1 + x 1 − x x 1 − x 0 y 0 ( 2 ) \begin{align*} y =& \frac{(y_1-y_0)(x-x_0)}{x_1-x_0}+y_0 \\ =&\frac{(y_1-y_0)(x-x_0)}{x_1-x_0}+\frac{(x_1-x_0)y_0}{x_1-x_0} \\ =& \frac{x-x_0}{x_1-x_0}y_1+\frac{x_1-x_0}{x_1-x_0}y_0- \frac{x-x_0}{x_1-x_0}y_0\\ =& \frac{x-x_0}{x_1-x_0}y_1+\frac{x_1-x}{x_1-x_0}y_0 \end{align*}\quad(2) y====x1x0(y1y0)(xx0)+y0x1x0(y1y0)(xx0)+x1x0(x1x0)y0x1x0xx0y1+x1x0x1x0y0x1x0xx0y0x1x0xx0y1+x1x0x1xy0(2)
即:
y = x 1 − x x 1 − x 0 y 0 + x − x 0 x 1 − x 0 y 1 ( 3 ) y =\frac{x_1-x}{x_1-x_0}y_0+\frac{x-x_0}{x_1-x_0}y_1\quad(3) y=x1x0x1xy0+x1x0xx0y1(3)
小结:我们可以把公式(3)中的 x 1 − x x 1 − x 0 \frac{x_1-x}{x_1-x_0} x1x0x1x x − x 0 x 1 − x 0 \frac{x-x_0}{x_1-x_0} x1x0xx0 分别看成 y 0 y_0 y0 y 1 y_1 y1 的权重。下面详细解释一下这句话的意思。
  从上图我们可以知道 x 1 − x 0 x_1-x_0 x1x0是一个固定值,表示区间 [ x 0 , x 1 ] [x_0,x_1] [x0,x1]的大小或宽度。由公式(3)可知,该区间的某个点 ( x , y ) (x,y) (x,y) 对应的 y y y 值与 x 1 − x x 1 − x 0 y 0 \frac{x_1-x}{x_1-x_0}y_0 x1x0x1xy0 x − x 0 x 1 − x 0 y 1 \frac{x-x_0}{x_1-x_0}y_1 x1x0xx0y1 有关,且 0 ≤ x 1 − x x 1 − x 0 , x − x 0 x 1 − x 0 ≤ 1 0\leq\frac{x_1-x}{x_1-x_0},\frac{x-x_0}{x_1-x_0}\leq1 0x1x0x1x,x1x0xx01。重点来了:我们可以将 x 1 − x x 1 − x 0 , x − x 0 x 1 − x 0 \frac{x_1-x}{x_1-x_0},\frac{x-x_0}{x_1-x_0} x1x0x1x,x1x0xx0 分别看成是 y 0 , y 1 y_0,y_1 y0,y1的权重。当点 ( x , y ) (x,y) (x,y) 越靠近点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)时,该点的 y y y 值就越接近 y 0 y_0 y0 x 1 − x x 1 − x 0 \frac{x_1-x}{x_1-x_0} x1x0x1x的值越大( y 0 y_0 y0的权重);该点的 y y y 值就越远离 y 1 y_1 y1 x − x 0 x 1 − x 0 \frac{x-x_0}{x_1-x_0} x1x0xx0的值越小( y 1 y_1 y1的权重)。换句话说,当点 ( x , y ) (x,y) (x,y) 越靠近点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)时,和 y 0 y_0 y0的相关性就越强,和 y 1 y_1 y1的相关性就越弱。同理,当点 ( x , y ) (x,y) (x,y) 越靠近点 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)时,该点的 y y y 值就越接近 y 1 y_1 y1 x − x 0 x 1 − x 0 \frac{x-x_0}{x_1-x_0} x1x0xx0的值越大( y 1 y_1 y1的权重);该点的 y y y 值就越远离 y 0 y_0 y0 x 1 − x x 1 − x 0 \frac{x_1-x}{x_1-x_0} x1x0x1x的值越小( y 0 y_0 y0的权重)。换句话说,当点 ( x , y ) (x,y) (x,y) 越靠近点 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)时,和 y 0 y_0 y0的相关性就越弱,和 y 1 y_1 y1的相关性就越强。其实我们可以将公式(3)进行通俗化描述:
y = w 0 y 0 + w 1 y 1 ( 3 ) y =w_0y_0+w_1y_1\quad(3) y=w0y0+w1y1(3)
其中, w 0 , w 1 w_0,w_1 w0,w1 分别表示 y 0 y_0 y0 y 1 y_1 y1 的权重。

  (2)示例:假设我们有两组数据点 ( 170 , 130 ) (170,130) (170,130) ( 180 , 160 ) (180, 160) (180,160),该数据点表示身高和体重之间的相应关系,即当身高为 170cm 时,体重为130斤;身高为 180cm 时,体重为 160斤。那么当身高为174时,体重为多少斤?我们可将 ( 170 , 130 ) (170,130) (170,130)看成 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),将 ( 180 , 160 ) (180,160) (180,160)看作 ( x 1 , y 1 ) (x_1,y_1) (x1,y1),并将这两组数据点直接代入公式(3),得:
y = 180 − x 180 − 170 130 + x − 170 180 − 170 160 y= \frac{180-x}{180-170}130+\frac{x-170}{180-170}160 y=180170180x130+180170x170160
当身高 x=174时,体重 y=142。

2. 双线性插值

    在图像处理方面,双线性插值是利用已知邻近像素点的灰度值或RGB中的三色值产生未知像素点的灰度值或RGB三色值,目的是由原始图像再生出具有更高分辨率的图像。通俗点理解就是由已知推导未知,从而强化图像。双线性插值(Bilinear Interpolation)是一种在二维空间中进行数值估计的方法,它基于四个已知点的值来计算一个未知点的值
  双线性插值的核心思想是在两个方向上(x和y方向)分别进行一次线性插值,下面是关于双线性插值的公式推导。如下图所示,点 Q 11 = ( x 1 , y 1 ) Q_{11}=(x_1,y_1) Q11=(x1,y1)、点 Q 12 = ( x 1 , y 2 ) Q_{12}=(x_1,y_2) Q12=(x1,y2)、点 Q 21 = ( x 2 , y 1 ) Q_{21}=(x_2,y_1) Q21=(x2,y1) Q 22 = ( x 2 , y 2 ) Q_{22}=(x_2,y_2) Q22=(x2,y2),某个函数 f f f 在上述四个点上对应的值分别为 f ( Q 11 ) f(Q_{11}) f(Q11) f ( Q 12 ) f(Q_{12}) f(Q12) f ( Q 21 ) f(Q_{21}) f(Q21) f ( Q 22 ) f(Q_{22}) f(Q22)。对于给定的某个点 P = ( x , y ) P=(x,y) P=(x,y)在函数 f f f 上的值 f ( P ) f(P) f(P) 是多少?下面给出两种计算方式。
在这里插入图片描述

2.1 先x方向,后y方向

  首先沿着 x 方向进行两次线性插值(即 x 改变,y 不变),分别得到点 R 1 = ( x , y 1 ) R_1=(x,y_1) R1=(x,y1) R 2 = ( x , y 2 ) R_2=(x,y_2) R2=(x,y2) 在函数 f f f 上的值 f ( R 1 ) f(R_1) f(R1) f ( R 2 ) f(R_2) f(R2),公式如下。
f ( R 1 ) = f ( x , y 1 ) = x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) ( 4 ) f ( R 2 ) = f ( x , y 2 ) = x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) ( 5 ) f(R_1)=f\left(x,y_{1}\right)=\frac{x_{2}-x}{x_{2}-x_{1}}f\left(Q_{11}\right)+\frac{x-x_{1}}{x_{2}-x_{1}}f\left(Q_{21}\right) \quad(4)\\ f(R_2)=f\left(x,y_{2}\right)=\frac{x_{2}-x}{x_{2}-x_{1}}f\left(Q_{12}\right)+\frac{x-x_{1}}{x_{2}-x_{1}}f\left(Q_{22}\right)\quad(5) f(R1)=f(x,y1)=x2x1x2xf(Q11)+x2x1xx1f(Q21)(4)f(R2)=f(x,y2)=x2x1x2xf(Q12)+x2x1xx1f(Q22)(5)

然后再沿着 y 方向进行一次线性插值,得到:
f ( P ) = f ( x , y ) = y 2 − y y 2 − y 1 f ( x , y 1 ) + y − y 1 y 2 − y 1 f ( x , y 2 ) ( 6 ) f(P)=f(x,y)= \frac{y_2 - y}{y_2 - y_1} f (x,y_1 )+\frac{y-y_1}{y_2 - y_1} f (x,y_2) \quad(6) f(P)=f(x,y)=y2y1y2yf(x,y1)+y2y1yy1f(x,y2)(6)
将由公式(4)得到的 f ( x , y 1 ) f(x,y_1) f(x,y1) 和公式(5)得到的 f ( x , y 2 ) f(x,y_2) f(x,y2)代入公式(6),进一步化简得到:
f ( P ) = y 2 − y y 2 − y 1 ( x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) ) + y − y 1 y 2 − y 1 ( x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) ) = ( y 2 − y ) ( x 2 − x ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 11 ) + ( y 2 − y ) ( x − x 1 ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 21 ) + ( y − y 1 ) ( x 2 − x ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 12 ) + ( y − y 1 ) ( x − x 1 ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 22 ) ( 7 ) \begin{align*} f(P) =&\frac{y_2-y}{y_2-y_1}\left(\frac{x_2-x}{x_2-x_1}f\left(Q_{11}\right)+\frac{x-x_1}{x_2-x_1}f\left(Q_{21}\right)\right)+\frac{y-y_1}{y_2-y_1}\left(\frac{x_2-x}{x_2-x_1}f\left(Q_{12}\right)+\frac{x-x_1}{x_2-x_1}f\left(Q_{22}\right)\right)\\ =& \frac{(y_2-y)(x_2-x)}{(y_2-y_1)(x_2-x_1)}f(Q_{11})+\frac{(y_2-y)(x-x_1)}{(y_2-y_1)(x_2-x_1)}f(Q_{21})+\frac{(y-y_1)(x_2-x)}{(y_2-y_1)(x_2-x_1)}f(Q_{12})+\frac{(y-y_1)(x-x_1)}{(y_2-y_1)(x_2-x_1)}f(Q_{22}) \end{align*}\quad(7) f(P)==y2y1y2y(x2x1x2xf(Q11)+x2x1xx1f(Q21))+y2y1yy1(x2x1x2xf(Q12)+x2x1xx1f(Q22))(y2y1)(x2x1)(y2y)(x2x)f(Q11)+(y2y1)(x2x1)(y2y)(xx1)f(Q21)+(y2y1)(x2x1)(yy1)(x2x)f(Q12)+(y2y1)(x2x1)(yy1)(xx1)f(Q22)(7)
我们将 f ( Q 11 ) f(Q_{11}) f(Q11) f ( Q 21 ) f(Q_{21}) f(Q21) f ( Q 12 ) f(Q_{12}) f(Q12) f ( Q 22 ) f(Q_{22}) f(Q22) 前面的系数(可以认为是权重)替换成 w 11 w_{11} w11 w 21 w_{21} w21 w 12 w_{12} w12 w 22 w_{22} w22 ,得到:
f ( P ) = w 11 f ( Q 11 ) + w 21 f ( Q 21 ) + w 12 f ( Q 12 ) + w 22 f ( Q 22 ) ( 8 ) f(P) = w_{11}f(Q_{11})+w_{21}f(Q_{21})+w_{12}f(Q_{12})+w_{22}f(Q_{22}) \quad(8) f(P)=w11f(Q11)+w21f(Q21)+w12f(Q12)+w22f(Q22)(8)

2.2 先y方向,后x方向

  首先沿着 y 方向进行两次线性插值(即 y 改变,x 不变),分别得到点 ( x 1 , y ) (x_1,y) (x1,y) ( x 2 , y ) (x_2,y) (x2,y) 在函数 f f f 上的值 f ( x 1 , y ) f(x_1,y) f(x1,y) f ( x 2 , y ) f(x_2,y) f(x2,y),公式如下。
f ( x 1 , y ) = y 2 − y y 2 − y 1 f ( Q 11 ) + y − y 1 y 2 − y 1 f ( Q 12 ) ( 9 ) f ( x 2 , y ) = y 2 − y y 2 − y 1 f ( Q 21 ) + y − y 1 y 2 − y 1 f ( Q 22 ) ( 10 ) f\left(x_1,y\right)=\frac{y_{2}-y}{y_{2}-y_{1}}f\left(Q_{11}\right)+\frac{y-y_{1}}{y_{2}-y_{1}}f\left(Q_{12}\right) \quad(9)\\ f\left(x_2,y\right)=\frac{y_{2}-y}{y_{2}-y_{1}}f\left(Q_{21}\right)+\frac{y-y_{1}}{y_{2}-y_{1}}f\left(Q_{22}\right)\quad(10) f(x1,y)=y2y1y2yf(Q11)+y2y1yy1f(Q12)(9)f(x2,y)=y2y1y2yf(Q21)+y2y1yy1f(Q22)(10)

然后再沿着 x 方向进行一次线性插值,得到:
f ( P ) = f ( x , y ) = x 2 − x x 2 − x 1 f ( x 1 , y ) + x − x 1 x 2 − x 1 f ( x 2 , y ) ( 11 ) f(P)=f(x,y)= \frac{x_2 - x}{x_2 - x_1} f (x_1,y)+\frac{x-x_1}{x_2 - x_1} f (x_2,y) \quad(11) f(P)=f(x,y)=x2x1x2xf(x1,y)+x2x1xx1f(x2,y)(11)

将由公式(9)得到的 f ( x 1 , y ) f(x_1,y) f(x1,y) 和公式(10)得到的 f ( x 2 , y ) f(x_2,y) f(x2,y)代入公式(11),进一步化简得到:
f ( P ) = x 2 − x x 2 − x 1 ( y 2 − y y 2 − y 1 f ( Q 11 ) + y − y 1 y 2 − y 1 f ( Q 12 ) ) + x − x 1 x 2 − x 1 ( y 2 − y y 2 − y 1 f ( Q 21 ) + y − y 1 y 2 − y 1 f ( Q 22 ) ) = ( y 2 − y ) ( x 2 − x ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 11 ) + ( y − y 1 ) ( x 2 − x ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 12 ) + ( y 2 − y ) ( x − x 1 ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 21 ) + ( y − y 1 ) ( x − x 1 ) ( y 2 − y 1 ) ( x 2 − x 1 ) f ( Q 22 ) ( 12 ) \begin{align*} f(P) =&\frac{x_2-x}{x_2-x_1}\left(\frac{y_2-y}{y_2-y_1}f\left(Q_{11}\right)+\frac{y-y_1}{y_2-y_1}f\left(Q_{12}\right)\right)+\frac{x-x_1}{x_2-x_1}\left(\frac{y_2-y}{y_2-y_1}f\left(Q_{21}\right)+\frac{y-y_1}{y_2-y_1}f\left(Q_{22}\right)\right)\\ =& \frac{(y_2-y)(x_2-x)}{(y_2-y_1)(x_2-x_1)}f(Q_{11})+\frac{(y-y_1)(x_2-x)}{(y_2-y_1)(x_2-x_1)}f(Q_{12})+\frac{(y_2-y)(x-x_1)}{(y_2-y_1)(x_2-x_1)}f(Q_{21})+\frac{(y-y_1)(x-x_1)}{(y_2-y_1)(x_2-x_1)}f(Q_{22}) \end{align*}\quad(12) f(P)==x2x1x2x(y2y1y2yf(Q11)+y2y1yy1f(Q12))+x2x1xx1(y2y1y2yf(Q21)+y2y1yy1f(Q22))(y2y1)(x2x1)(y2y)(x2x)f(Q11)+(y2y1)(x2x1)(yy1)(x2x)f(Q12)+(y2y1)(x2x1)(y2y)(xx1)f(Q21)+(y2y1)(x2x1)(yy1)(xx1)f(Q22)(12)

我们将 f ( Q 11 ) f(Q_{11}) f(Q11) f ( Q 21 ) f(Q_{21}) f(Q21) f ( Q 12 ) f(Q_{12}) f(Q12) f ( Q 22 ) f(Q_{22}) f(Q22) 前面的系数(可以认为是权重)替换成 w 11 w_{11} w11 w 21 w_{21} w21 w 12 w_{12} w12 w 22 w_{22} w22 ,得到:
f ( P ) = w 11 f ( Q 11 ) + w 21 f ( Q 21 ) + w 12 f ( Q 12 ) + w 22 f ( Q 22 ) ( 13 ) f(P) = w_{11}f(Q_{11})+w_{21}f(Q_{21})+w_{12}f(Q_{12})+w_{22}f(Q_{22}) \quad(13) f(P)=w11f(Q11)+w21f(Q21)+w12f(Q12)+w22f(Q22)(13)

由此可见:无论是先x方向,后y方向,还是先y方向,后x方向,进行双线性插值的结果都是一样的。

2.3 双线性插值例题

  假设我们有以下四个已知数据点: A ( 1 , 1 , 10 ) 、 B ( 2 , 1 , 20 ) 、 C ( 1 , 2 , 30 ) 、 D ( 2 , 2 , 40 ) A(1,1,10)、B(2,1,20)、C(1,2,30)、D(2,2,40) A(1,1,10)B(2,1,20)C(1,2,30)D(2,2,40),其中每个点的格式 ( x , y , f ( x , y ) ) (x,y,f(x,y)) (x,y,f(x,y)) 表示坐标和对应的值,点 A 、 B 、 C 、 D A、B、C、D ABCD分别等价于上面的 Q 11 = ( x 1 , y 1 ) 、 Q 21 = ( x 2 , y 1 ) 、 Q 12 = ( x 1 , y 2 ) 、 Q 22 = ( x 2 , y 2 ) Q_{11}=(x_1,y_1)、Q_{21}=(x_2,y_1)、Q_{12}=(x_1,y_2)、Q_{22}=(x_2,y_2) Q11=(x1,y1)Q21=(x2,y1)Q12=(x1,y2)Q22=(x2,y2)。现在,我们希望使用双线性插值来估计点 P ( 1.5 , 1.5 ) P(1.5,1.5) P(1.5,1.5)的值。下面我们采用先x方向,后y方向双线性插值来进行估计。
  (1)首先沿着 x 轴方向进行两次线性插值,由公式(4)和公式(5)分别计算在 y = 1 y=1 y=1 y = 2 y=2 y=2 处的插值。

  • y = 1 y=1 y=1 处的插值: f ( R 1 ) = f ( 1.5 , 1 ) = 2 − 1.5 2 − 1 10 + 1.5 − 1 2 − 1 20 = 15 f(R_1)=f(1.5,1)=\frac{2-1.5}{2-1}10+\frac{1.5-1}{2-1}20=15 f(R1)=f(1.5,1)=2121.510+211.5120=15
  • y = 2 y=2 y=2 处的插值: f ( R 2 ) = f ( 1.5 , 2 ) = 2 − 1.5 2 − 1 30 + 1.5 − 1 2 − 1 40 = 35 f(R_2)=f(1.5,2)=\frac{2-1.5}{2-1}30+\frac{1.5-1}{2-1}40=35 f(R2)=f(1.5,2)=2121.530+211.5140=35

  (2)然后再沿着 y 方向进行一次线性插值,由公式(6)得到:
f ( P ) = f ( 1.5 , 1.5 ) = 2 − 1.5 2 − 1 15 + 1.5 − 1 2 − 1 35 = 25 f(P)=f(1.5,1.5)=\frac{2-1.5}{2-1}15+\frac{1.5-1}{2-1}35=25 f(P)=f(1.5,1.5)=2121.515+211.5135=25

  (3)因此,在点 P ( 1.5 , 1.5 ) P(1.5,1.5) P(1.5,1.5) 处的双线性插值为 25。

关于双线性插值的更为详细的介绍请参考下面的视频!!!

参考
视频:双线性插值
视频:图像处理-双线性插值
视频:插值算法 |双线性插值法
双线性插值(Bilinear Interpol)原理及应用
双线性插值(Bilinear interpolation)原理推导
双线性插值(Bilinear Interpolation)


http://www.kler.cn/a/369416.html

相关文章:

  • 多个立方体盒子组成
  • 雷池社区版OPEN API使用教程
  • 【建造&机械】木材运输车辆检测系统源码&数据集全套:改进yolo11-GhostHGNetV2
  • Ajax:跨域 JSONP
  • 词向量——预训练词嵌入
  • R语言中常用功能汇总
  • 第4章 kafka broker
  • Zookeeper是什么:深入分析分布式系统的协调者
  • 【c语言测试】
  • 和为 n 的完全平方数的最少数量
  • 用canvas对图片压缩
  • 遥感图建筑植被道路图像分割系统:逐项优化进阶
  • 数据结构预备知识---Java集合框架、List接口、包装类、装箱拆箱和泛型
  • Linux 中的编译器 GCC 的编译原理和使用详解
  • 租房市场新动力:基于Spring Boot的管理系统
  • TS 基础
  • 【专用名词的离线语音识别在2024年底的解决方法调查-会议签到的补充】
  • 编译,链接。
  • 大数据之实时数据同步方案
  • 香橙派Orangepi 5pro 配置Hailo-8/Hailo-8L
  • 自建html首页
  • 分享electron多窗口实践
  • 使用 NLP 和模式匹配检测、评估和编辑日志中的个人身份信息 - 第 2 部分
  • WPF入门_06资源和样式
  • 在Guided模式下给无人机发送命令设置位置速度
  • 1553B总线电缆网络测试及数据分析设备