首页 > 编程知识 正文

数学4 双线性插值Bilinear Upsampling,excel线性内插值计算

时间:2023-05-05 06:09:25 阅读:218212 作者:2221

在Fully Convolutional Networks for Semantic Segmentation这篇文章中,介绍到Bilinear Upsampling这种上菜样的方式,虽然文章最后用的是deconvolution,给出的理由就是不希望upsampling filter是固定的= =! 但是碰到了还是学习记录一下。因为以前用的upsampling的方式是很简单的,比如放大两倍,就是把一个像素点复制一下变成四个。这样的做法会导致图像变得模糊。

线性插值

在介绍双线性插值前,先介绍一下线性插值。

已知 A=(x0,y0),B=(x1,y1) ,那么求 C=(x,y) 。已知 x ,求y。

∵    ∴    y1−yx1−x=y−y0x−x0y=y0+(y1−y)x1−x(x−x0)=x−x0x1−x0y1+x1−xx1−x0y0

其实说白了就很简单,就是两点确定一条线,然后在这条线上知道了 x ,自然可以推出y。同样的,已知 y 的话,自然也可以推导出x。

双线性插值

在图像中,我们面对的往往是两维,甚至三维(包含channel)的图像,那么,在进行upsampling的时候我们就要用到双线性插值和三线性插值。
所谓双线性插值,原理和线性插值相同,并且也是通过使用三次线性插值实现的。首先看图。

假设已知点 Q11=(x1,y1),Q12=(x1,y2),Q21=(x2,y1),Q22=(x2,y2) ,并且假设图像中每个像素点服从一个未知函数 f ,使得像素值R11=f(Q11),以此类推。那么如何求出点 P=(x,y) 的像素值 RP 呢?

首先做两次线性插值,分别求出点 R1=(x,y1) 和点 R2=(x,y2) 的像素值,然后再用这两个点再做一次线性插值,就可以求出点 P=(x,y) 的像素值了。可能会有疑问是说,现在在二维平面上,一个点的位置是由两个坐标共同控制的,那么怎么使用线性插值呢?举个例子,对于 Q11 和 Q21 来说,它们连成的线的纵坐标都是相同的,那么我们就忽略掉这个纵坐标带来的影响(但这个影响是存在的,所以我们这个线性插值是近似),而用当前点的像素值直接代替掉纵坐标。那么 Q11=(x1,f(Q11))

f(R1)f(R2)f(P) ≈x−x1x2−x1f(Q21)+x2−xx2−x1f(Q11), R1=(x,y1)≈x−x1x2−x1f(Q22)+x2−xx2−x1f(Q12), R2=(x,y2)≈y−y1y2−y1f(R2)+y2−yy2−y1f(R1)
写成矩阵乘的形式:
f(P)≈[y−y1y2−y1y2−yy2−y1][f(Q22)f(Q22)f(Q12)f(Q12)]⎡⎣⎢⎢x−x1x2−x1x2−xx2−x1⎤⎦⎥⎥
这样的话,产生的新图像的效果更好,过渡更自然,ffdc也更为光滑。

三线性插值

三线性插值原理同双线性插值,不再赘述。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。