欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

双线性插值-推导和应用

程序员文章站 2022-05-26 15:17:09
先来个新人的愚蠢问题:(这些都是本人之前不理解的 - -!) 为什么要使用双线性插值,它有何应用? 输入时什么,输出是什么? 先回答第一个问题 插值多应用于上采样(图片放大)中对放大像素的插值方法。 比如下图: 在一幅2*2的图像中已知四点的像素值,那么如果我们要放大1/2变为右图所示,四个角的像素 ......

先来个新人的愚蠢问题:(这些都是本人之前不理解的 - -!)

为什么要使用双线性插值,它有何应用?

输入时什么,输出是什么?

 

先回答第一个问题-----

插值多应用于上采样(图片放大)中对放大像素的插值方法。 比如下图:

双线性插值-推导和应用

在一幅2*2的图像中已知四点的像素值,那么如果我们要放大1/2变为右图所示,四个角的像素值不变,新增的5个像素该取什么值呢。所以这就是我们要处理的具体应用场景。

 

先来理解线性插值,理解了这个后双线性就可以类推了。

首先化为数学问题分析条件:

一幅图中,  已知:两个点(点具有坐标信息和点所取的值) ,求在两点直线上的一点的值(已知位置信息,值为未知数),

简而言之:已知两点的值求两点直线上一点的值。  已知 a0, a1, (x0,y0), (x1,y1), (x,y)  ---求 b

双线性插值-推导和应用

 

 数学好的人心中大概已经知道该怎么求b的值了 ~~

 由于三角形相似 所以求b的值可用下面公式

双线性插值-推导和应用

然后将这个公式展开,化简就可以得到如下公式

双线性插值-推导和应用

看到这个大家就非常眼熟了,这就是很多博客或百度得出的结果公式,然后这就是这个公式的推理过程。

那知道了线性插值之后,那再讲双线性就非常easy的了 = =

首先,既然有了线性插值那我们为什么还需要双线性插值??

很简单,线性插值,插的值都是在两点连线上的点,而如果在二维平面上。我们要插入的点并不在连线上,这时候就引入双线性插值。

先来一张大家都很眼熟的图

双线性插值-推导和应用

然后接着分析;  已知四个点的值和对应四个点的位置,我们求p点的对应值。

思路:将求解过程拆两步,先用已知的两个点,加上p点的一个位置信息x坐标值,求对应r1和r2;      然后利用r1,r2作为已知两点加上p点的位置信息y坐标,求得最终p点的值。

步骤一 : 和线性插值一样的道理,q11和q21作为已知点,求q11和q21线上的r1点的值

直接利用线性插值的公式带入 即可求出r1的值

步骤二:利用q12和q22作为已知点,求q12和q22线上的r2点的值

步骤三:利用r1和r2作为已知点,求r1和r2线上的p点的值

ps:先进行x轴计算和先进行y轴计算最终得到的答案是一样的。

 

这样就完成一次双线性插值。那回到最初的应用场景。

双线性插值-推导和应用

这该如何插值呢?很简单-----由于像素与像素间距离都是1,所以只需求两个之间的平均即可。

双线性插值-推导和应用

那在这种场景中,双线性的优势并没有体现出来,下面列举另一个场景:

假如在一幅4*4的图片中,我们需要提取一个3*3的目标,该目标出现在如图里面的位置,那么3*3的9个像素点值都得通过周围4个已知点进行双线性插值求得。

注意并不是方块代表像素点,这里使用交点代表像素点。也就是在4*4图片中定位3*3位置的像素。

双线性插值-推导和应用

 

最后再回到开头提到的第二个问题。

我们双线性插值输入是四个点的值和四点内一点的位置。

                         输出是该位置点的值。