【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用

写在前面的一点话

网上讲解基本双线性插值、双三次线性插值的文章很多,但大部分都是只在讲为什么是这样,并不算非常通俗(起码对我来说需要额外查很多资料来补充理解)。很少有文章能够给初学者一些比较直观的理解,因此在经过痛苦的学习过程后,希望把自己的一点理解分享给大家。(如有错误欢迎讨论指正)

在讲细节之前,我们要先明白插值的作用是什么

插值简单来说就是resize,改变图像的尺寸(不是简单的成比例扩大和缩小,可以理解为基于旧图片生成新的图片,总像素数量发生变化)。这样就意味着,插值实际上可以实现两种功能:upscaling(升维)和downscaling(降维)。直观来说可以让图像更清晰或者让图像更模糊。(刚学习的时候以为插值做的是超分辨的工作,只能让图片升维,后来看论文发现生成LR图片的时候也会使用插值)

还有点迷糊?没关系,我们先讲细节,最后再回头来看为什么插值有这样的作用。

双线性插值

实际使用:利用4个像素点计算出一个像素点的值。
理解:为什么叫双线性插值,双表示的对两个轴都要做插值。其步骤可以理解为,先对某个轴做一次线性插值,再对另一个轴做线性插值,最后得到预测点的值。关于双线性插值的公式,其实表示的就是这个过程,大家实际只需要知道是通过周围四个点来算出一个点即可。
具体过程:先通过AD、BC分别算出P0、P1的值。再通过P0和P1算出P的值。落实起来就是,周围四个点带进公式算算某个点的值。

【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用_第1张图片

双三次插值

实际使用:利用周围16个像素点计算出一个像素点的值。
理解:这个双其实依旧是对两个轴的操作。其本质上和双线性插值没有区别,只是插值公式更加复杂而已。双三次插值的重点在于,为什么要使用这种插值方法?其原因是线性插值效果不好(废话)。三次插值实际上是对像素做了平滑处理。我们可以理解为,不同像素点的值,实际上是一个函数的采样点。那么显然我们如果用曲线拟合这个函数去插值,比用直线要好。十六个像素点实际提供了比四个像素点更为准确的信息。比如:对于AB两个点,我们可以画直线和曲线。但如果三个点在一条直线上,那么他们是直线采样出来的概率就更高,点数越多,估计就越准确。曲线同理,这也就是为什么双三次差值效果会更好。
对曲线的拟合实际可以用梯度来理解,某个像素点提供该点的值和梯度,多个点多个梯度就可以近似预测出一个曲线。
【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用_第2张图片

具体过程:说了这么多,其实过程就是用这个公式算算某个点的值而已。。。。具体这个点的确定是由放大倍数决定的。
【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用_第3张图片
图片来源:https://blog.csdn.net/caomin1hao/article/details/81092134

比较直观的一个对比图:

【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用_第4张图片
图片来源:https://blog.csdn.net/eurus_/article/details/102755898

插值如何做升维(超分辨)和降维(退化)?

看论文就是这个把我看迷糊的,为什么很多超分辨生成数据会用插值来产生LR,插值不是产生HR的吗?其实这个方法既可以产生LR也可以产生HR。
我们回过头来看,插值的本质是通过几个点计算出一个点的值,那么被计算的点是如何确定的呢?
直观来理解就是由我原始图像和目标图像分辨率的关系来确定的(听君一席话,如听一席话hhh)。简单来说就是由原始图像像素总数和目标图像像素总数来确定的。
那么回过头来看这个问题,就很好理解为什么插值可以同时做升维和降维了。
因为实际上这个方法并不只可以生成更多的值,它还可以合并已有的值(即让像素点总数减少)!例如:初始分辨率是200x200,如果目标分辨率是100x100,插值依旧可以计算对应点的值,只是把总像素数减少了!
通俗一点来说就是:让图像总像素变少,相当于把合并了部分像素点,有信息丢失了;让图像总像素变多,相当于生成了部分像素点,生成了更多信息。

从另一个角度来理解插值(感谢肖老师耐心讲解)

(肖老师主页:http://people.ucas.ac.cn/~0066872 感兴趣的朋友欢迎报考)
假设我们实际某个物体的图像频谱如下图Truth,那么我们得到的数字图像频谱可以假设为下图Image红色部分所示(也可以理解为高分辨和低分辨图像的频谱)。实际上低分辨图像可以近似看成是高分辨图像的采样(只不过采样函数我们并不清楚),实际情况下采样后的频谱发生了失真,导致无法完美恢复出高分辨图像。那么插值在做的事情,实际上是假设了像素点大概满足的函数是什么样子的(双三次插值之所以用多项式函数是因为,通过傅立叶变换推导出来的公式大概是sinx/x的形式,无穷远处的值也会某个像素点有贡献,因此通过多项式函数截断,只考虑局部对某个点的影响),而后通过在这个函数来预测缺失部分的频谱。
从这个角度来理解升维和降维,本质上其实都是基于拟合的函数来做预测。升维实际上可以理解为是对频谱缺失部分做预测,而降维则可以理解为对已有部分又做了截断,在更小的范围内做预测。因而升维会生成一些高频信息,而降维则会丢失很多高频信息。
【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用_第5张图片

来自肖老师的一点补充:

插值的本质我理解是计算没有采集到的位置的值。本来没有点现在要增加一个点,所以叫“插”。如果这个位置在数据点包围(例如凸包)的范围内则叫内插,否则叫外插。

插值可以用于upscaling和downscaling,因为计算过程中可能会用到未采样的点的值。

Downscaling 时,为了避免 aliasing 产生的假象(如摩尔纹),通常会综合使用插值和滤波,即重新采样。当然如果为了简单和计算效率起见,偶尔(尤其是自己写实验性程序时)也会直接使用最临近点插值,或者直接使用双线性插值和点采样(忽略滤波)。

Upscaling 时,传统插值的算法是临近像素值的线性组合,当然组合的权重函数本身可以是线性或者非线性的(例如双三次)。线性组合插值计算出的图像可以理解为采样图像(即许多delta函数在网格点上)与权重函数的卷积,在傅里叶变换的观点下看即为周期的图像频谱与权重频谱的乘积,这一过程无法恢复出真正的高频(>1/2采样频率)信息。如果我们走出线性组合,更多使用图像的“内容”信息来尝试构造高频信息,那么就是超分辨了。

你可能感兴趣的:(图像超分辨(Image,Super,Resolution),人工智能,计算机视觉,深度学习,图像处理)