写在前面的一点话

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

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

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

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

双线性插值

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

双三次插值

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

具体过程:说了这么多,其实过程就是用这个公式算算某个点的值而已。。。。具体这个点的确定是由放大倍数决定的。

图片来源:https://blog.csdn.net/caomin1hao/article/details/81092134

比较直观的一个对比图:


图片来源: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的形式,无穷远处的值也会某个像素点有贡献,因此通过多项式函数截断,只考虑局部对某个点的影响),而后通过在这个函数来预测缺失部分的频谱。
从这个角度来理解升维和降维,本质上其实都是基于拟合的函数来做预测。升维实际上可以理解为是对频谱缺失部分做预测,而降维则可以理解为对已有部分又做了截断,在更小的范围内做预测。因而升维会生成一些高频信息,而降维则会丢失很多高频信息。

来自肖老师的一点补充:

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

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

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

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

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

  1. 【图像超分辨(SR)】图像超分辨领域一些英文名词最通俗的中文解释

    Motivation 博主算是刚入超分辨的坑没多久,自己在看论文的时候,会遇到很多名词,拆开来每个单词我都认识,但是组合起来就是不知道他在讲什么- 最难受的是很多名词都缺乏中文(甚至英文)的解释.可能 ...

  2. 图像超分辨重构(SR)论文整理————适用于刚接触这个领域的初级研究者。(持续更新)

    因为最近需要研究一下超分辨重构问题,因此将相关工作进行整理,选取了部分论文进行介绍.如有错误,烦请留言指正.如有版权问题,也请联系博主. 已盘点文章 SRCNN(16,PAMI) VDSR(16,CV ...

  3. 基于有偏距离权值双线性插值原理(Weighted bilinear with warping)的图像超分辨重构研究-附Matlab程序

    ⭕⭕ 目 录 ⭕⭕ ✳️ 一.图像超分辨率重构原理 ✳️ 二.双线性插值重构理论与实验分析 ✳️ 2.1 双线性插值理论与实验验证 ✳️ 2.2 有偏距离双线性插值重构理论与实验验证 ✳️ 2.3 权 ...

  4. SVM支持向量机通俗导论(理解SVM的三层境界)

    神文 转自july:http://blog.csdn.net/v_july_v/article/details/7624837 支持向量机通俗导论(理解SVM的三层境界) 作者:July .致谢:pl ...

  5. 【学习笔记】图像超分辨

    参考文章:2020 图像超分最新综述及上采样技术一览 定义 图像超分辨是将低分辨图像恢复为高分辨图像的方法. F ( ⋅ ) F(\cdot) F(⋅)为超分辨模型, θ \theta θ为模型参数. ...

  6. 支持向量机通俗导论(理解SVM的三层境界)

    前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好懂,要深入学习和研究下去需花费不少时间和精力,二者这个东西也不好讲清 ...

  7. CVPR 2019 论文解读 | 基于多级神经纹理迁移的图像超分辨方法 (Adobe Research)

    基于多级神经纹理迁移的图像超分辨方法 超分辨(Super-Resolution)图像恢复旨在从低分辨模糊图像中恢复出高分辨的清晰图像,是计算机视觉中的一个重要任务,在工业界有非常强的应用前景.CVPR ...

  8. Machine Learning:支持向量机通俗导论(理解SVM的三层境界)

    转载自:http://blog.csdn.net/v_july_v/article/details/7624837 前言 动笔写这个支持向量机(support vector machine)是费了不少 ...

  9. 如何直观地理解「协方差矩阵」?

    如何直观地理解「协方差矩阵」? Xinyu Chen Urban Traffic Data Analytics 372 人赞同了该文章 协方差矩阵在统计学和机器学习中随处可见,一般而言,可视作方差和协 ...

  10. 双目图像超分辨:现状、挑战与展望

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 双目图像超分辨(Stereo Image SR)当前处于起步阶段,领域内算法数量不多,性能还有较大的提 ...

最新文章

  1. 某阿里程序员爆料自己的p9领导:每天炒股喝茶开会!羡慕嫉妒恨!以后要当领导!网友:不在其位,不知其累!...
  2. php验证码内置函数,刚写了一个PHP的高效验证码函数 | 学步园
  3. python批量读取csv文件-使用Python读写csv文件的三种方法
  4. jQuery的链Chaining
  5. intelli idea新建无scala class选项解决方案
  6. [Django]网页中利用ajax实现批量导入数据功能
  7. 计算机网络与多媒体试卷,2020年9月网络教育统考《计算机应用基础》多媒体技术模拟题试卷2...
  8. C++Bubble sort冒泡排序的实现算法(附完整源码)
  9. 自动生成三层结构代码(3)--生成数据访问层Insert方法
  10. apache shiro_Apache Shiro第3部分–密码学
  11. 动态生成的html元素无法调用js函数,在调用js函数之前,如何确保将动态生成的div加载到DOM中?...
  12. python的递归为什么难理解,python - Python - 很难理解这个递归代码示例 - SO中文参考 - www.soinside.com...
  13. Mac终端的一些操作命令
  14. 获取邮箱的DNS和MX 工具类
  15. adminLTE的介绍
  16. C#导出数据—使用Word模板
  17. 生成模型之flow-based model
  18. Vue的内容抽离过程
  19. 《信号与系统》自然/受迫响应、零输入/零状态响应及系统初始状态
  20. VirtualBox导入虚拟电脑

热门文章

  1. MQ消息队列的优缺点介绍以及对比选型
  2. 如何在不被支持的termux下载gh
  3. SQL 2008安装时反复提示重启和安装.net framework 3.5
  4. isis宣告网络_ISIS协议及其配置
  5. 常用编程语言开发工具
  6. 基础电路设计知识:电阻、电容、电感、二极管、三极管、mos管!
  7. 图书管理系统需求分析
  8. 基于校园图书管理系统需求分析
  9. 电气工程和自动化哪个专业就业前景好?
  10. ubuntu截图保存到剪切板