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

article/2025/9/23 16:13:44

写在前面的一点话

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

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

插值简单来说就是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采样频率)信息。如果我们走出线性组合,更多使用图像的“内容”信息来尝试构造高频信息,那么就是超分辨了。


http://chatgpt.dhexx.cn/article/UYrehAFQ.shtml

相关文章

插值法(最邻近,双线性,双三次)的原理及实现

插值法(最邻近,双线性,双三次)的原理及实现 常用的插值方法有最邻近插值法、双现象插值法和双三次插值法等,主要用于图像的放大或缩小。 缩小图像(或称为下采样(subsampled) 或降采样&#xf…

表示关系x =y =z的c语言表达式为________.,为表示关系x≥y≥z,应使用C语言表达式____。...

为表焦距决定了画面的透视关系。 示关使用GREGRE ≥y≥桡神经沟位于 应C语言表关于脊柱正确的描写是() 建筑物或者其他设施以及建筑物上的搁置物、达式悬挂物发生( )造成他人损害的,所有人或者管理人应当承担民事责任,但能够证明自己没有过错的除外。 为表成对的脑颅…

C语言运算表达式整理

C语言的运算规则是按照运算符的优先级进行的,所以我们首先看一下C的运算优先级别 总结 最简单的优先级就是 算数运算符>关系运算符>逻辑运算符>赋值运算符 然后我们还要了解一个短路规则(特性) 短路规则:在整个逻辑表…

与数学式子对应的C语言表达式是(),与数学式子3乘以x的n次方/(2x-1)对应的C语言表达式是...

满意答案 lengwei241 2013.03.25 采纳率:43% 等级:13 已帮助:11778人 18 与数学式子3乘以x的n次方/(2x-1)对应的C语言表达式是 3*x^n/(2*x-1) 3*x**n/(2*x-1) 3*pow(x,n)*(1/(2*x-1)) 3*pow(n,x)/(2*x-1) 答案是3*pow(x,n)*(1/(2*x-1)) 为什么 解答:其中pow(x,n)为C语言…

C语言表达式和表达式的值

今天突然发现如果能很好的理解表达式和表达式的值的概念,可以使编程代码变的更整洁。很多时候我们总是忘记从最基本的概念开始考虑问题。我觉得我们有必要把C/C标准看下,在里面肯定有很多我们一直困惑的问题的答案。 C语言是基于结构化程序设计思想的程序…

以下c语言表达式与代数式计算结果,设有定义:float a=2,b=4,h=3;,以下C语言表达式中与代数式计算结果不相符的是...

设有定义:float a=2,b=4,h=3;,以下C语言表达式中与代数式计算结果不相符的是 设有式计算结Women in Britain, having some qualifications, were enfranchised until ______. 定义达式代数The usual rhyme scheme for the English or Shakespearean sonnet is( ). In “For …

与数学式对应的c语言表达式为,数学表达式“|x|4”对应的C语言表达式是“x-4||x4”。...

数学表达式“|x|4”对应的C语言表达式是“x-4||x4”。 数学式《莺莺传》故事的时代为( ) 表达人力资本的投资是提高技术水平的必要途径。() 对达式教育投资是人力资本的投资唯一重点。() 微商是以移动终端为载体,应的C语言表通过社交媒介手段,进行传播的…

C语言 运算符、表达式

运算符、表达式 1、 C语言运算符 算术运算符和算术表达式 (加)、—(减)、*(乘)、/(除)、%(取余,也叫模运算符,该运算符两侧都要求为整数&#xff…

c语言表达式语法问题,c语言表达式语法规则是什么_后端开发

c语言统计单词个数的方法_后端开发 在一篇文章中单词都是用空格隔开的,所以单词个数空格数1,c语言统计单词个数实际上转换成了统计文章中的空格数,可以用while和if来进行统计。 c语言表达式语法规则是什么 C语言表达式语法规则如下&#xff1…

c语言表达式成立,若有int y;则表示命题“y是偶数”成立的c语言表达式是多少...

满意答案 hoome_09 2017.12.28 采纳率:44% 等级:8 已帮助:263人 1. 若有int y;则表示命题“y是奇数”成立的C语言表达式是 (y%2 1) 。 2. 在C语言中,表示逻辑“真”值用(true) 表示。 3. 条件“2<x&…

C语言表达式用法快来看看

点击上方蓝字关注我,了解更多咨询 表达式是C语言的主体。在C语言中,表达式由操作符和操作数组成。最简单的表达式可以只含有一个操作数。根据表达式所含操作符的个数,可以把表达式分为简单表达式和复杂表达式两种,简单表达式是只含…

数学式子对应的c语言表达式是,把数学式写成C语言表达式

(1) 3.26*exp(x)1.0/3.0*pow((ab), 4) (2) 2*sqrt(x)(ab)/(3.0*sin(x)) (3) g*m1*m2/(r*r) (4) double pi 3.14 2.0*pi*r pi*r*r cos(45.0*pi / 180.0 ) (5) loan * rate * pow( (1rate) , month ) / ( pow( (1rate) , month) - 1) 扩展资料: 指针: 如…

C语言表达式专练

1、以下表达式值为3的是 A)16-13%10 B)23/2 C)14/3-2 D)(26)/(12-9) 2、设有说明语句:int k7,x12;则以下能使值为3的表达式是 A) x%(k%5) B)x%(k-k%5) C)x%k-k%5 D)(x%k)-(k%5) 3、若x、i、j和k都是int型变量,则执行表达式x(i4,j16,k32)后x的值为 A&…

快速求组合数

摘自https://www.jianshu.com/p/718a5ac26238 逆元快速幂解法 (一)基本概念 上面两种方法都使用了递归方法,递归方法有个缺陷,就是在数据较大时效率较低。所以这里要介绍一个种新的求组合算法。在了解此算法之前,要先了…

Java计算组合数以及生成组合排列

前言 组合数计算 公式法 逐个相除法(错误) 逐个相除法修正版 素数幂乘法 基本公式法 平方差连乘法 组合恒等法 简单递归法 杨辉三角法 杨辉三角优化法 二进制法 组合数计算小结 获取数组的组合排列 二进制法 基本迭代法 从后向前迭代法(Matlab版本…

[组合] 组合数计算四大算法模板(模板+卢卡斯定理)

文章目录 0. 前言1. 预处理组合数组合递推式2. 预处理阶乘逆元3. 卢卡斯定理4. 高精度组合数 0. 前言 组合数求解有很多种方式,不同的方式对应这不同的时间复杂度,难以程度也是不尽相同。根据数据范围选择对应的方法即可。 1. 预处理组合数组合递推式 …

组合数

1、定义:从m个不同元素中,任取n(n≤m)个元素并成一组,叫做从m个不同元素中取出n个元素的一个组合;从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。 2、公式:…

组合数取模总结

题目描述&#xff1a; 在ACM竞赛现在叫JB竞赛&#xff1f;中&#xff0c;经常会遇到组合数取模的题目&#xff1b;就我现在的水平而言&#xff0c;大概分为以下三类&#xff0c;以后遇到新的方法会在做补充&#xff1b; 第一种&#xff1a; n和m都较小 &#xff08;<1000&a…