双线性差值

图像插值概述

       图像插值是一种基本的图像处理方法,它可以为数字图像增加或减少像素的数目。当图像被放大时,像素会相应地增加,该像素增加的过程实际就是插值程序自动选择信息较好的像素作为新的像素以弥补空白像素空间的过程。虽然经过插值后图像可以变得更平滑、干净,但由于新增加的像素也仅仅只是原始像素的某种组合而已,所以图像的插值运算并不会增加新的图像信息。明白了插值的过程,我们知道在图像中插值需要解决两个基本问题:(1)如何定位插值图像坐标对应的原始图像坐标。插值并不是在插值图像的空白区域随意地填补一些数值,而应该是根据原始图像中的像素值及其邻域像素进行填充。换句话说,若想在插值图像的(i,j)处插值,首先要做的就是在原始图像中找到与坐标(i,j)对应的坐标(x,y),进而根据求得的(x,y)及周围像素进行插值运算;(2)如何确定插入值。当坐标(x,y)确定之后,此时应该按照不同的权重从原始图像的坐标(x,y)处区域选取合适的像素值并插入插值图像中以弥补空白像素空间。简言之,即插值图像提供坐标-->计算该坐标在原始图像中的对应坐标-->原始图像返回像素值并进行插值运算。故,本文接下来将针对这两个基本问题展开论述。

定位插值坐标

       假设有原始图像OriImage和插值图像IntImage,其中,插值图像为原始图像经过插值后得到的图像,该插值过程如下图所示:

双线性差值_第1张图片

       由上图可知,原始图像实际上进行了2倍插值,那么必然有(x,y)=0.5*(i,j)。令原始图像中(x,y)=(0,0)处的像素值为240,则插值图像中(i,j)=(0,0)处的像素值亦为240;原始图像中(x,y)=(0,1)处的像素值为20,则插值图像中(i,j)=(0,2)处的像素值亦为20。依次类推,可以发现插值图像中的部分像素值与原始图像的像素值保持一致。这表示,与数据拟合不同的是图像的插值运算必然会经过原始数据点(即像素值)。得到的初步插值图像(即最近邻插值)如下图所示:

双线性差值_第2张图片

       然而,插值图像中(i,j)=(0,1)、(1,1)、(1,2)等处的像素值该如何确定?为确定这些坐标处的像素值,我们不妨求出此时对应的(x,y)值。以(i,j)=(1,2)为例,具体步骤如下所示:

双线性差值_第3张图片

        分别解得x=0.5、y=1。但是,在原始图像中(x,y)=(0.5,1)处并没有像素值。至此,虽然解决了坐标问题,但插值操作却似乎陷入了死胡同、进无可进。

双线性二次插值

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

双线性差值_第4张图片

       在一幅2*2的图像中已知四点的像素值,那么如果我们要放大1/2变为右图所示,四个角的像素值不变,新增的5个像素该取什么值呢。所以这就是我们要处理的具体应用场景。先来理解线性插值,理解了这个后双线性就可以类推了。
       首先化为数学问题分析条件:一幅图中已知:两个点(点具有坐标信息和点所取的值) ,求在两点直线上的一点的值(已知位置信息,值为未知数),简而言之:已知两点的值求两点直线上一点的值。  已知坐标(x0,y0)、坐标(x0,y0)处的值a0,坐标(x1,y1)、坐标(x1,y1)处的值a1,坐标(x,y)  ,求坐标(x,y)处的值b。

双线性差值_第5张图片

由于三角形相似得,
然后将这个公式展开,化简就可以得到
       既然有了线性插值那我们为什么还需要双线性插值?很简单,线性插值,插的值都是在两点连线上的点,而如果在二维平面上。我们要插入的点并不在连线上,这时候就引入双线性插值。如图,已知Q12,Q22,Q11,Q21四点的坐标和值,求插值的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点的值。
注:先进行x轴计算和先进行y轴计算最终得到的答案是一样的。

双线性差值_第6张图片

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

双线性差值_第7张图片

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

双线性差值_第8张图片

        那在这种场景中,双线性的优势并没有体现出来,下面列举另一个场景:假如在一幅4*4的图片中,我们需要提取一个3*3的目标,该目标出现在如图里面的位置,那么3*3的9个像素点值都得通过周围4个已知点进行双线性插值求得。
注意:并不是方块代表像素点,这里使用交点代表像素点。也就是在4*4图片中定位3*3位置的像素。

双线性差值_第9张图片

参考资料

双线性插值-推导和应用 – Python量化投资

你可能感兴趣的:(双线性差值)