双线性插值

假设有一张4*4的图像.如下图:

我们想缩放成3*3的图像,计算如下(以缩放后的像素点B为例):

 

根据如下计算公式:

srcX=dstX* (srcWidth/dstWidth)

srcY = dstY * (srcHeight/dstHeight)

以E点坐标为例计算坐标点在原图对坐标位置如下:

取原图像的X坐标 = 1* (4/3)[公式]1.3

取原图像的Y坐标 = 1* (4/3)[公式]1.3

 

使用双线性插值法:

对(1.3,1.3)坐标在原图像上进行投影,如下图:

对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i + u , j + v) (其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值[0,1)区间的浮点数)。

则这个像素得值 f(i + u , j + v) 可由原图像中坐标为 (i , j)、(i + 1 , j)、(i , j + 1)、(i + 1 , j + 1)所对应的周围四个像素的值决定。即:

f(i + u , j + v) = (1 - u) ( 1 - v) f(i , j) + (1 - u) v f(i , j + 1) + u (1 - v) f(i + 1 , j) + u v f(i + 1 , j + 1)

其中f(i , j)表示源图像(i , j)处的的像素值,以此类推。

本例分析:

i = 1 , j = 1 , u = 0.3 , v = 0.3

f(1.3 , 1.3) 由(1 , 1) 、(2 , 1)、(1 , 2)、(2 , 2) 这四个像素的值决定,如下图红色框选的点:

 

f(1.3 , 1.3) = 0.7 * 0.7 * f(1 , 1) + 0.7 * 0.3 * f(1 , 2) + 0.3 * 0.7 * f(2 , 1) + 0.3 * 0.3 * f(2 , 2)

= 0.7 * 0.7 * 2 + 0.7 * 0.3 * 6 + 0.3 * 0.7 * 4 + 0.3 * 0.3 * 8

 

从上图也可以看出,点2离目标点最近,其次4和6,最后是8,权重也是越近权重越大。

 

计算原理:

p点像素值决定于Q12、Q22、Q11、Q21这4个点点像素值。

我们先在X轴方向做2次插值操作(分别为R1和R2),然后在Y轴方向做一次插值操作(P),当然我认为也可以先在Y轴做2次插值操作,然后在X轴做一次插值操作。

[公式]

[公式]

[公式]

其中 [公式] 、 [公式] 、 [公式] 、 [公式] 都是权重值。

[公式] 点计算举例,假设 [公式] , [公式] , [公式] :

[公式] 为总距离, [公式] 为 [公式] 与 [公式] 的距离, [公式] 为 [公式] 与 [公式] 的距离,[公式] 离 [公式]更近,对 [公式] 的影响应该更大,所以权重应该更大,应为 [公式] ,即为 [公式] 。

 

这2次X轴插值操作和1次Y轴插值操作,合并成一个公式即为计算原理上面的步骤。

来源:https://zhuanlan.zhihu.com/p/58991226

 

posted on 2019-09-08 13:37  一杯明月  阅读(2265)  评论(2编辑  收藏  举报