1. 为什么使用线性插值?
-
在深度学习对图片进行上采样和下采样的时候会应用到线性插值
- 对图片上采样,原始图片(33)范围红色框中的值,会得到(44)框中红色框的值
- 假设目标图片红框坐标为(i,j),那么在原始图片位置 ( i ∗ 3 4 , j ∗ 3 4 ) (i*\frac{3}{4},j*\frac{3}{4}) (i∗43,j∗43),
- 已知
i
=
2
,
j
=
3
i=2,j=3
i=2,j=3,所以在原始图片位置
(
1.5
,
0.75
)
(1.5,0.75)
(1.5,0.75)
- 不是整数,在找原始图片位置时,会自动取整
- 即,需要使用线性插值,来降低误差
2. 单线性插值
2.1 单线性插值推导
- 如图所示,在 p 0 和 p 1 p_0和p_1 p0和p1中间插入 p p p,求p点位置
- 根据斜率公式
y − y 0 x − x 0 = y 1 − y 0 x 1 − x 0 y = y 0 + ( y 1 − y 0 ) ( x − x 0 ) x 1 − x 0 y = ( x 1 − x 0 ) y 0 + ( y 1 − y 0 ) ( x − x 0 ) x 1 − x 0 y = x 1 y 0 − x 0 y 0 + x y 1 − x 0 y 1 − x y 0 + x 0 y 0 x 1 − x 0 y = ( x 1 − x ) y 0 + ( x − x 0 ) y 1 x 1 − x 0 y = ( x 1 − x ) x 1 − x 0 y 0 + ( x − x 0 ) x 1 − x 0 y 1 \begin{aligned} \frac{y-y_{0}}{x-x_{0}}&=\frac{y_{1}-y_{0}}{x_{1}-x_{0}}\\ y&=y_{0}+\frac{(y_{1}-y_{0})(x-x_{0})}{x_{1}-x_{0}} \\&y=\frac{(x_{1}-x_{0})y_{0}+(y_{1}-y_{0})(x-x_{0})}{x_{1}-x_{0}} \\&y=\frac{x_{1}y_{0}-x_{0}y_{0}+xy_{1}-x_{0}y_{1}-xy_{0}+x_{0}y_{0}}{x_{1}-x_{0}} \\&y=\frac{(x_{1}-x)y_{0}+(x-x_{0})y_{1}}{x_{1}-x_{0}} \\&y=\frac{(x_{1}-x)}{x_{1}-x_{0}}y_{0}+\frac{(x-x_{0})}{x_{1}-x_{0}}y_{1} \end{aligned} x−x0y−y0y=x1−x0y1−y0=y0+x1−x0(y1−y0)(x−x0)y=x1−x0(x1−x0)y0+(y1−y0)(x−x0)y=x1−x0x1y0−x0y0+xy1−x0y1−xy0+x0y0y=x1−x0(x1−x)y0+(x−x0)y1y=x1−x0(x1−x)y0+x1−x0(x−x0)y1 - 假设y对应的值,就是图像中的像素值p,得到
p = ( x 1 − x ) x 1 − x 0 p 0 + ( x − x 0 ) x 1 − x 0 p 1 \begin{aligned} p=\frac{(x_{1}-x)}{x_{1}-x_{0}}p_{0}+\frac{(x-x_{0})}{x_{1}-x_{0}}p_{1} \end{aligned} p=x1−x0(x1−x)p0+x1−x0(x−x0)p1
3.多线性插值
3.1 多线性插值推导注意事项
- 双线性插值是三维的,需要从二维计算出某一个坐标轴的差值才可以
- 如果按照单线性插值,直接按照三位图,那么求
p
1
p_{1}
p1
- 显然不可能会出现
y
1
−
y
1
y_{1}-y_{1}
y1−y1这个操作
y − y 1 x − x 2 = y 1 − y 1 x 1 − x 2 \begin{aligned} \frac{y-y_{1}}{x-x_{2}}&=\frac{y_{1}-y_{1}}{x_{1}-x_{2}} \end{aligned} x−x2y−y1=x1−x2y1−y1
- 显然不可能会出现
y
1
−
y
1
y_{1}-y_{1}
y1−y1这个操作
- 如果按照单线性插值,直接按照三位图,那么求
p
1
p_{1}
p1
3.2 多线性插值推导
- 根据单线性插值公式,得出公式
- 我们计算像素值,直接将
y
y
y变成
p
p
p即可
y = ( x 1 − x ) x 1 − x 0 y 0 + ( x − x 0 ) x 1 − x 0 y 1 \begin{aligned} y=\frac{(x_{1}-x)}{x_{1}-x_{0}}y_{0}+\frac{(x-x_{0})}{x_{1}-x_{0}}y_{1} \end{aligned} y=x1−x0(x1−x)y0+x1−x0(x−x0)y1
- 我们计算像素值,直接将
y
y
y变成
p
p
p即可
- 由单线性插值,对x轴得到【自己转换维度】
p 1 = ( x 2 − x ) x 2 − x 1 p 11 + ( x − x 1 ) x 2 − x 1 p 21 p 2 = ( x 2 − x ) x 2 − x 1 p 12 + ( x − x 1 ) x 2 − x 1 p 22 \begin{aligned} p_{1}=\frac{(x_{2}-x)}{x_{2}-x_{1}}p_{11}+\frac{(x-x_{1})}{x_{2}-x_{1}}p_{21}\\ p_{2}=\frac{(x_{2}-x)}{x_{2}-x_{1}}p_{12}+\frac{(x-x_{1})}{x_{2}-x_{1}}p_{22} \end{aligned} p1=x2−x1(x2−x)p11+x2−x1(x−x1)p21p2=x2−x1(x2−x)p12+x2−x1(x−x1)p22 - 由单线性插值,对y轴得到
p = ( y 2 − y ) y 2 − y 1 p 1 + ( y − y 1 ) y 2 − y 1 p 2 \begin{aligned} p=\frac{(y_{2}-y)}{y_{2}-y_{1}}p_{1}+\frac{(y-y_{1})}{y_{2}-y_{1}}p_{2} \end{aligned} p=y2−y1(y2−y)p1+y2−y1(y−y1)p2 - 将
p
1
,
p
2
p_{1},p_{2}
p1,p2代入化简
p
p
p
p = ( y 2 − y ) y 2 − y 1 ( ( x 2 − x ) x 2 − x 1 p 11 + ( x − x 1 ) x 2 − x 1 p 21 ) + ( y − y 1 ) y 2 − y 1 ( ( x 2 − x ) x 2 − x 1 p 12 + ( x − x 1 ) x 2 − x 1 p 22 ) = ( y 2 − y ) ( x 2 − x ) ( y 2 − y 1 ) ( x 2 − x 1 ) p 11 + ( y 2 − y ) ( x − x 1 ) ( y 2 − y 1 ) ( x 2 − x 1 ) p 21 + ( y − y 1 ) ( x 2 − x ) ( y 2 − y 1 ) ( x 2 − x 1 ) p 12 + ( y − y 1 ) ( x − x 1 ) ( y 2 − y 1 ) ( x 2 − x 1 ) p 22 \begin{aligned} p&=\frac{(y_{2}-y)}{y_{2}-y_{1}}(\frac{(x_{2}-x)}{x_{2}-x_{1}}p_{11}+\frac{(x-x_{1})}{x_{2}-x_{1}}p_{21})+\frac{(y-y_{1})}{y_{2}-y_{1}}(\frac{(x_{2}-x)}{x_{2}-x_{1}}p_{12}+\frac{(x-x_{1})}{x_{2}-x_{1}}p_{22}) \\&=\frac{(y_{2}-y)(x_{2}-x)}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{11}+\frac{(y_{2}-y)(x-x_{1})}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{21}+\frac{(y-y_{1})(x_{2}-x)}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{12}+\frac{(y-y_{1})(x-x_{1})}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{22} \end{aligned} p=y2−y1(y2−y)(x2−x1(x2−x)p11+x2−x1(x−x1)p21)+y2−y1(y−y1)(x2−x1(x2−x)p12+x2−x1(x−x1)p22)=(y2−y1)(x2−x1)(y2−y)(x2−x)p11+(y2−y1)(x2−x1)(y2−y)(x−x1)p21+(y2−y1)(x2−x1)(y−y1)(x2−x)p12+(y2−y1)(x2−x1)(y−y1)(x−x1)p22 - 在图像中,相邻像素点坐标差值为1,即
x 2 = x 1 + 1 y 2 = y 1 + 1 \begin{aligned} x_{2}&=x_{1}+1\\ y_{2}&=y_{1}+1 \end{aligned} x2y2=x1+1=y1+1
- 将
x
2
,
y
2
x_2,y_2
x2,y2关于
x
1
,
y
1
x_1,y_1
x1,y1的表达式代入p
p = ( y 2 − y ) ( x 2 − x ) ( y 2 − y 1 ) ( x 2 − x 1 ) p 11 + ( y 2 − y ) ( x − x 1 ) ( y 2 − y 1 ) ( x 2 − x 1 ) p 21 + ( y − y 1 ) ( x 2 − x ) ( y 2 − y 1 ) ( x 2 − x 1 ) p 12 + ( y − y 1 ) ( x − x 1 ) ( y 2 − y 1 ) ( x 2 − x 1 ) p 22 = ( y 2 − y ) ( x 2 − x ) p 11 + ( y 2 − y ) ( x − x 1 ) p 21 + ( y − y 1 ) ( x 2 − x ) p 12 + ( y − y 1 ) ( x − x 1 ) p 22 \begin{aligned} p&=\frac{(y_{2}-y)(x_{2}-x)}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{11}+\frac{(y_{2}-y)(x-x_{1})}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{21}+\frac{(y-y_{1})(x_{2}-x)}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{12}+\frac{(y-y_{1})(x-x_{1})}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{22} \\&=(y_{2}-y)(x_{2}-x)p_{11}+(y_{2}-y)(x-x_{1})p_{21}+(y-y_{1})(x_{2}-x)p_{12}+(y-y_{1})(x-x_{1})p_{22} \end{aligned} p=(y2−y1)(x2−x1)(y2−y)(x2−x)p11+(y2−y1)(x2−x1)(y2−y)(x−x1)p21+(y2−y1)(x2−x1)(y−y1)(x2−x)p12+(y2−y1)(x2−x1)(y−y1)(x−x1)p22=(y2−y)(x2−x)p11+(y2−y)(x−x1)p21+(y−y1)(x2−x)p12+(y−y1)(x−x1)p22
3.3 插入坐标越远权重越大
- 由于p是由
p
1
p_{1}
p1和
p
2
p_{2}
p2得到的
P 1 ≈ ( y 2 − y ) ( x 2 − x ) p 11 + ( y 2 − y ) ( x − x 1 ) p 21 P 2 ≈ ( y − y 1 ) ( x 2 − x ) p 12 + ( y − y 1 ) ( x − x 1 ) p 22 \begin{aligned} P_{1}&\approx(y_{2}-y)(x_{2}-x)p_{11}+(y_{2}-y)(x-x_{1})p_{21}\\ P_{2}&\approx(y-y_{1})(x_{2}-x)p_{12}+(y-y_{1})(x-x_{1})p_{22} \end{aligned} P1P2≈(y2−y)(x2−x)p11+(y2−y)(x−x1)p21≈(y−y1)(x2−x)p12+(y−y1)(x−x1)p22- 根据 p 1 p_{1} p1,都有系数 ( y 2 − y ) (y_{2}-y) (y2−y),如果 p 1 p_{1} p1向的值比较大,那么 ( x 2 − x ) (x_{2}-x) (x2−x)的值就要大,所以当插入的点离哪一个坐标远,那个坐标的权重越大【插入值的权重越大】