最详细的语义分割---双线性插值到底在干什么?

众所周知,经常要用到双线性插值,它能够将图片放大和缩小。至于它是如何做到的,网上只说了一个大概,没有具体讲清楚。下面我将从它的目的和思路来一一讲解它到底做了什么

1目的

首先要明确双线插值的目的,它主要是求在图像缩放的时候目标图像对应原图像的像素值

2思路

要想确定目标图像的像素值,双线插值方法的思路是通过源图像周围四个点的像素值来确定目标图像的一个点的像素值。具体是怎么做的呢?

我们使用双线性插值来缩放图片,假设源图像大小为mxn,目标图像为axb。那么两幅图像的边长比分别为:m/a和n/b。注意,通常这个比例不是整数,编程存储的时候要用浮点型。目标图像的第(i,j)个像素点(i行j列)可以通过边长比对应回源图像。其对应坐标为(im/a,jn/b)。显然,这个对应坐标一般来说不是整数,而非整数的坐标是无法在图像这种离散数据上使用的。双线性插值通过寻找距离这个对应坐标最近的四个像素点,来计算该点的值(灰度值或者RGB值)。如果你的对应坐标是(2.5,4.5),由于小数是无法在图片中表示坐标的,通过插值来确定该小数点的像素值,那么最近的四个像素是(2,4)、(2,5)、(3,4),(3,5)。
有了和你临近的四个点的坐标,那么我就可以在原图上找到它们的像素值,我们通过
f(i,j)=w1p1+w2p2+w3p3+w4p4;
来确定目标图像上(i,j)点的像素值,其中这个wi(i=1,2,3,4)就是通过双线性插值计算出来的,pi就是对应相邻四个像素点的像素值

3wi的计算

有了这个思路,我们现在要求的就是通过双线性插值来求未知数wi,这个也是网上直接搜出来最多的答案,搜索双线性插值直接告诉你怎么计算,不告诉你为什么要这么计算。知道了为什么要进行插值,就很容易理解了
最详细的语义分割---双线性插值到底在干什么?_第1张图片
上面说到,我们已经知道了在源图上,我们从目标图映射回源图的坐标信息(图中P)以及它周围的四个点(Qij),我们现在就是要求F§,即P点的像素值。注意区分这里的像素值和坐标值是不一样的
假设在单位正方形中(边长为1),利用同一条直线上的斜率相等可以得到:
最详细的语义分割---双线性插值到底在干什么?_第2张图片
其中f(Qij)就是我们之前说的Pi,与之相乘的就是wi,是我们所求的系数,这里要注意的是,由于是单位正方形,可以得到x2-x1等于1,进一步的w1=(x2-x)(y2-y)

这样,在已知四个点的坐标和像素值的情况下,我们就可以得到目标图上的像素点的像素值。总结起来就一句话:通过双线性插值以及图片大小的缩放关系,来求得图片缩放后的像素值。
最详细的语义分割---双线性插值到底在干什么?_第3张图片

你可能感兴趣的:(语义分割,pytorch,深度学习,机器学习)