双线性插值-推导和应用

Posted bob-jianfeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双线性插值-推导和应用相关的知识,希望对你有一定的参考价值。

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

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

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

 

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

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

技术图片

在一幅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位置的像素。

技术图片

 

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

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

                         输出是该位置点的值。

 

以上是关于双线性插值-推导和应用的主要内容,如果未能解决你的问题,请参考以下文章

opencv双线性插值

线性插值与双线性插值

java 缩放算法 双线性插值,双三次插值

双线性内插值算法

SSE 双线性插值

OpenCV ——双线性插值(Bilinear interpolation)