图像插值就是当图像进行放大/缩小时,图像原有的像素数量不足以满足需求,例如从3X3的像素矩阵往4X4的像素矩阵变换的时候,就会出现像素值不知该如何填充的问题,而图像插值算法就是为了解决这个问题
上图就是Unity中选择贴图时出现的属性面板,箭头标识的位置就是可供选择的插值算法;
将最大尺寸调小,然后有插值与没有插值的情况十分明显,左侧有明显的颗粒感,而右侧则没有,感觉十分平滑。
Unity支持的插值有Point、Bilinear和Trilinear,分别是最邻近插值法、双线性插值以及双三线性插值。而常见的插值方式主要有三种,最邻近插值法、双线性插值以及三线性插值。
当图像由分辨率长放大M,宽放大N倍后变为
例如:由3X3的矩阵变为9X9的矩阵
1 | 5 | 9 |
13 | 17 | 21 |
25 | 29 | 33 |
1 | 5 | 9 | ||||||
13 | 17 | 21 | ||||||
25 | 29 | 33 |
(1)最邻近插值法(Nearest、Point)
为经处理后图的的x坐标值
为原始图片上经处理后图的x坐标映射值
为向下取整的函数
宽Y同理
则
运算结果:很明显,如果使用这种插值方法,放大的图会出现一块一块的像素块,即出现锯齿
1 | 1 | 1 | 5 | 5 | 5 | 9 | 9 | 9 |
1 | 1 | 1 | 5 | 5 | 5 | 9 | 9 | 9 |
1 | 1 | 1 | 5 | 5 | 5 | 9 | 9 | 9 |
13 | 13 | 13 | 17 | 17 | 17 | 21 | 21 | 21 |
13 | 13 | 13 | 17 | 17 | 17 | 21 | 21 | 21 |
13 | 13 | 13 | 17 | 17 | 17 | 21 | 21 | 21 |
25 | 25 | 25 | 29 | 29 | 29 | 33 | 33 | 33 |
25 | 25 | 25 | 29 | 29 | 29 | 33 | 33 | 33 |
25 | 25 | 25 | 29 | 29 | 29 | 33 | 33 | 33 |
(2)双线性插值(Bilinear)
双线性插值就是根据x、y轴两个方向来进行插值,如图所示,先根据和求得,和求得,再根据和的值求出的值。基本原理依然是根据距离来做颜色的插值。
先求x轴方向的插值:
同理
x轴方向的插值做完后,我们根据求得的颜色值再求y方向的插值:
最后求得
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
(3)三线性插值(Trilinear)
核心是通过所需要计算的像素周围的16个像素根据对应的权重值来求得最后的像素值(学习中)