最近邻插值和双线性插值原理
一、最近邻插值
本文链接: 图像的插值算法之最近邻插值 - linqianbi的博客 - CSDN博客
设i+u, j+v(i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐标,则待求象素灰度的值 f(i+u, j+v)。
如果(i+u, j+v)落在A区,即u<0.5, v<0.5,则将左上角象素的灰度值赋给待求象素,同理,落在B区则赋予右上角的象素灰度值,落在C区则赋予左下角象素的灰度值,落在D区则赋予右下角象素的灰度值。
最邻近元法计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。
二、双线性插值
本文链接: 三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法
先讲一下线性插值:已知数据 (x0, y0) 与 (x1, y1),要计算 [x0, x1] 区间内某一位置 x 在直线上的y值
\frac{y-y_{0}}{x-x_{0}} = \frac{y_{1}-y_{0}}{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}
这部分很容易理解,可以自己拿草稿纸进行推导一下,双线性插值就是在两个方向上进行线性插值。
双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。如图所示。
假如我们想得到未知函数 f 在点 P = (x, y) 的值,假设我们已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。首先在 x 方向进行线性插值,得到
然后在 y 方向进行线性插值,得到
综合起来就是双线性插值最后的结果: