双线性插值原理详解

百般思念 提交于 2019-12-06 15:02:11

    在做图像处理的时候,我们经常需要对图像大小进行变换。在深度学习中,也经常会用到Upsample上采样。而最常用的插值方法就是BiLinear双线性插值。

  image_new = cv2.resize(image,(750,600),interpolation=cv2.INTER_LINEAR)

  m10 = nn.Upsample(scale_factor=2, mode='bilinear')

  m11 = nn.UpsamplingBilinear2d(scale_factor=2)

 那么双线性插值到底是怎么一回事呢?

  以下图为例,我们需要将左图(线条交点为像素点,size:5x5)放大到右图(size:12x8)。

                                   

  那么我们可以做下图所示的一个投影变换示意图。以颜色区分:红色为原图,蓝色为新图。

那么可以得到下图所示的示意图,红色为缩放后的原图,蓝色为要求得的新图。放到某一个局部就是一个双线性插值问题。

双线性插值动画示意图:

  现在搬出下面这张双线性插值原理图,x-y坐标系、已知Q12,Q22,Q11,Q21四个点的值,求P点值。

                                     

         首先在Q11Q21、Q12Q22方向上进行两次线性插值,得到R1、R2;然后在R1R2方向再做一次线性插值,得到P点。这就是双线性插值。

  双线性插值关键的是P点在x,y两个方向上相对已知Q点的位置。

  令:α = (x-x1) / (x2-x1)     β =  (y-y1) / (y2-y1)  ,则 R= Q11 + (Q21 - Q11) * α  = (1 - α)*Q11 + α*Q21,R= Q12 + (Q22 - Q12) * α  = (1 - α)*Q12 + α*Q22;

  P = (1 - β)*R1 + β*R2 =  (1 - β)(1 - α)*Q11 +  (1 - β)α*Q21 +  β*(1 - α)*Q12 + α*β*Q22 =  (1 - α)*( (1 - β)*Q11 + β*Q12 ) + α*( (1 - β)*Q21 + β*Q22)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!